package br.com.dextra.dextranet.conteudo.post; import java.util.List; import javax.ws.rs.core.Response; import javax.ws.rs.core.Response.Status; import org.junit.Assert; import org.junit.After; import org.junit.Test; import br.com.dextra.dextranet.conteudo.post.comentario.Comentario; import br.com.dextra.dextranet.conteudo.post.comentario.ComentarioRepository; import br.com.dextra.dextranet.conteudo.post.curtida.Curtida; import br.com.dextra.dextranet.conteudo.post.curtida.CurtidaRepository; import br.com.dextra.dextranet.persistencia.EntidadeNaoEncontradaException; import br.com.dextra.teste.TesteIntegracaoBase; import com.google.appengine.api.datastore.EntityNotFoundException; public class PostRSTest extends TesteIntegracaoBase { private String usuarioLogado = "dextranet"; private PostRS rest = new PostRSFake(); private PostRepository repositorioDePosts = new PostRepository(); private CurtidaRepository repositorioDeCurtidas = new CurtidaRepository(); private ComentarioRepository repositorioDeComentarios = new ComentarioRepository(); @After public void removeDadosInseridos() { this.limpaPostsInseridos(repositorioDePosts); this.limpaCurtidasInseridas(repositorioDeCurtidas); this.limpaComentariosInseridos(repositorioDeComentarios); } @Test public void testaListarTodosOrdenados() { Post post01 = new Post("usuario", "titulo 01", "conteudo 01"); Post post02 = new Post("usuario", "titulo 02", "conteudo 02"); repositorioDePosts.persiste(post01); repositorioDePosts.persiste(post02); List<Post> postsOrdenados = rest.listarPostsOrdenados(2, 1); Assert.assertEquals(2, postsOrdenados.size()); Assert.assertEquals(post02, postsOrdenados.get(0)); } @Test public void testaCurtir() throws EntityNotFoundException { Post post = new Post("usuario", "titulo 01", "conteudo 01"); repositorioDePosts.persiste(post); Assert.assertEquals(0, post.getQuantidadeDeCurtidas()); rest.curtir(post.getId()); List<Curtida> curtidas = repositorioDeCurtidas.listaPorConteudo(post.getId()); Assert.assertEquals(1, curtidas.size()); Assert.assertEquals(usuarioLogado, curtidas.get(0).getUsuario()); post = repositorioDePosts.obtemPorId(post.getId()); Assert.assertEquals(1, post.getQuantidadeDeCurtidas()); Assert.assertTrue(post.getUsuariosQueCurtiram().contains(usuarioLogado)); } @Test public void testaDescurtir() throws EntityNotFoundException { Post post = new Post("usuario", "titulo 01", "conteudo 01"); repositorioDePosts.persiste(post); rest.curtir(post.getId()); rest.descurtir(post.getId()); post = repositorioDePosts.obtemPorId(post.getId()); Assert.assertEquals(0, post.getQuantidadeDeCurtidas()); Assert.assertFalse(post.getUsuariosQueCurtiram().contains(usuarioLogado)); try { rest.descurtir(post.getId()); Assert.fail(); } catch (EntidadeNaoEncontradaException e) { Assert.assertTrue(true); } } @Test(expected = EntityNotFoundException.class) public void testaRemover() throws EntityNotFoundException { Post post = new Post("dextranet", "titulo 01", "conteudo 01"); String idPost = repositorioDePosts.persiste(post).getId(); Response response = rest.deletar(post.getId()); Assert.assertEquals(Status.OK.getStatusCode(), response.getStatus()); repositorioDePosts.obtemPorId(idPost); } @Test public void testaRemoverComOutroUsuario() throws EntityNotFoundException { Post post = new Post("usuario", "titulo 01", "conteudo 01"); String idPost = repositorioDePosts.persiste(post).getId(); Response response = rest.deletar(post.getId()); Assert.assertEquals(Status.FORBIDDEN.getStatusCode(), response.getStatus()); post = repositorioDePosts.obtemPorId(idPost); Assert.assertNotNull(post); } @Test public void testaComentario() throws EntityNotFoundException { Post post = new Post("usuario", "titulo", "conteudo"); repositorioDePosts.persiste(post); rest.comentar(post.getId(), "novo comentario"); post = repositorioDePosts.obtemPorId(post.getId()); List<Comentario> comentarios = repositorioDeComentarios.listaPorPost(post.getId()); Assert.assertEquals(1, comentarios.size()); Assert.assertEquals(usuarioLogado, comentarios.get(0).getUsuario()); } @Test public void testaCurtirComentario() throws EntityNotFoundException { Comentario comentario = new Comentario("postId", "username", "conteudo"); repositorioDeComentarios.persiste(comentario); Assert.assertEquals(0, comentario.getQuantidadeDeCurtidas()); rest.curtirComentario(comentario.getPostId(), comentario.getId()); List<Curtida> curtidas = repositorioDeCurtidas.listaPorConteudo(comentario.getId()); Assert.assertEquals(1, curtidas.size()); Assert.assertEquals(usuarioLogado, curtidas.get(0).getUsuario()); comentario = repositorioDeComentarios.obtemPorId(comentario.getId()); Assert.assertEquals(1, comentario.getQuantidadeDeCurtidas()); Assert.assertTrue(comentario.getUsuariosQueCurtiram().contains(usuarioLogado)); } @Test public void testaDescurtirComentario() throws EntityNotFoundException { Comentario comentario = new Comentario("postId", "username", "comentario 01"); repositorioDeComentarios.persiste(comentario); rest.curtirComentario(comentario.getPostId(), comentario.getId()); rest.descurtirComentario(comentario.getPostId(), comentario.getId()); comentario = repositorioDeComentarios.obtemPorId(comentario.getId()); Assert.assertEquals(0, comentario.getQuantidadeDeCurtidas()); Assert.assertFalse(comentario.getUsuariosQueCurtiram().contains(usuarioLogado)); try { rest.descurtirComentario(comentario.getPostId(), comentario.getId()); Assert.fail(); } catch (EntidadeNaoEncontradaException e) { Assert.assertTrue(true); } } @Test public void testaBuscaComentario() { Post post = new Post(usuarioLogado, "titulo", "conteudo"); repositorioDePosts.persiste(post); Comentario comentario = new Comentario(post.getId(), usuarioLogado, "comentario01"); repositorioDeComentarios.persiste(comentario); } public class PostRSFake extends PostRS { @Override protected String obtemUsuarioLogado() { return usuarioLogado; } } @Test(expected = EntityNotFoundException.class) public void testaRemoverComentario() throws EntityNotFoundException { Post post = new Post("dextranet", "titulo 01", "conteudo 01"); String postId = repositorioDePosts.persiste(post).getId(); post = repositorioDePosts.obtemPorId(postId); Assert.assertNotNull(post); Comentario comentario = new Comentario(postId, "dextranet", "comentario 01"); String comentarioId = repositorioDeComentarios.persiste(comentario).getId(); Response responseComentario = rest.deletarComentario(comentarioId); Assert.assertEquals(Status.OK.getStatusCode(), responseComentario.getStatus()); repositorioDeComentarios.obtemPorId(comentario.getId()); } @Test public void testaRemoverComentarioComOutroUsuario() throws EntityNotFoundException { Post post = new Post("usuario", "titulo 01", "conteudo 01"); String postId = repositorioDePosts.persiste(post).getId(); post = repositorioDePosts.obtemPorId(postId); Assert.assertNotNull(post); Comentario comentario = new Comentario(postId, "usuario", "comentario 01"); String comentarioId = repositorioDeComentarios.persiste(comentario).getId(); Response responseComentario = rest.deletarComentario(comentarioId); Assert.assertEquals(Status.FORBIDDEN.getStatusCode(), responseComentario.getStatus()); comentario = repositorioDeComentarios.obtemPorId(comentarioId); Assert.assertNotNull(comentario); } }