@Test public void deveNotificarCidadeQueSegui() throws IOException { Result result = Helpers.route(builder.uri(controllers.routes.CidadeController.adicionaInscrito(cidadeDaIniciativaUsada).url()).method("POST")); assertEquals(Status.OK, result.status()); result = Helpers.route(builder.uri(controllers.routes.FeedController.getNovidades(0, 100).url()).method("GET")); List<Novidade> novidades = jsonToList(contentAsString(result)); for (Novidade novidade : novidades) { assertNotEquals(TipoDaNovidade.NOVA_OPINIAO, novidade.getTipo()); assertEquals(cidadeDaIniciativaUsada, novidade.getCidade().getId()); } result = Helpers.route(builder.uri(controllers.routes.CidadeController.removeInscrito(cidadeDaIniciativaUsada).url()).method("DELETE")); assertEquals(Status.OK, result.status()); }
@Test public void deveNotificarCidadeQueSeguiSemNotificarOpinioes() throws IOException { // Inscreve em cidade Result result = Helpers.route(builder.uri(controllers.routes.CidadeController.adicionaInscrito(cidadeDaIniciativaUsada).url()).method("POST")); assertEquals(Status.OK, result.status()); // Adiciona Opinião result = enviaPOSTAddOpiniao(conteudoExemplo, iniciativaUsada, token); uuidDeOpinioesPraRemover.add(Json.fromJson(Json.parse(Helpers.contentAsString(result)), Opiniao.class).getId()); // Desinscreve da Iniciativa result = Helpers.route(builder.uri(controllers.routes.IniciativaController.removeInscrito(iniciativaUsada).url()).method("DELETE")); assertEquals(Status.OK, result.status()); result = Helpers.route(builder.uri(controllers.routes.FeedController.getNovidades(0, 100).url()).method("GET")); List<Novidade> novidades = jsonToList(contentAsString(result)); for (Novidade novidade : novidades) { assertNotEquals(TipoDaNovidade.NOVA_OPINIAO, novidade.getTipo()); assertEquals(cidadeDaIniciativaUsada, novidade.getCidade().getId()); } result = Helpers.route(builder.uri(controllers.routes.CidadeController.removeInscrito(cidadeDaIniciativaUsada).url()).method("DELETE")); assertEquals(Status.OK, result.status()); }
@Test public void deveriaInscreverEDesinscreverCidadaoNaCidade() { Result result = Helpers.route(builder.uri(controllers.routes.CidadeController.removeInscrito(CIDADE_TESTE).url()).method("DELETE")); result = Helpers.route(builder.uri(controllers.routes.CidadeController.adicionaInscrito(CIDADE_TESTE).url()).method("POST")); assertEquals(Status.OK, result.status()); result = Helpers.route(builder.uri(controllers.routes.CidadeController.get(CIDADE_TESTE).url()).method("GET")); Cidade cidade = Json.fromJson(Json.parse(Helpers.contentAsString(result)), Cidade.class); assertTrue(cidade.isSeguidaPeloRequisitante()); result = Helpers.route(builder.uri(controllers.routes.CidadeController.removeInscrito(CIDADE_TESTE).url()).method("DELETE")); assertEquals(Status.OK, result.status()); result = Helpers.route(builder.uri(controllers.routes.CidadeController.get(CIDADE_TESTE).url()).method("GET")); cidade = Json.fromJson(Json.parse(Helpers.contentAsString(result)), Cidade.class); assertFalse(cidade.isSeguidaPeloRequisitante()); }
@Test public void getFolderUnsupported() { asAdminUser(new F.Function3<Session, User, FakeRequest, Session>() { @Override public Session apply( final Session session, final User user, final FakeRequest newRequest) throws Throwable { final FileStore.Manager fm = fileStore().getManager(session); final Result result = callAction( controllers.routes.ref.FileStoreController.showFolder( fm.getRoot().getIdentifier()), newRequest.withHeader("Accept", "text/plain")); assertThat(status(result)).isEqualTo(Status.UNSUPPORTED_MEDIA_TYPE); return session; } }); }
@Test public void getFileUnsupported() { asAdminUser(new F.Function3<Session, User, FakeRequest, Session>() { @Override public Session apply( final Session session, final User user, final FakeRequest newRequest) throws Throwable { final FileStore.Manager fm = fileStore().getManager(session); final Result result = callAction( controllers.routes.ref.FileStoreController.showFile( fm.getRoot().getIdentifier()), newRequest.withHeader("Accept", "text/plain")); assertThat(status(result)).isEqualTo(Status.UNSUPPORTED_MEDIA_TYPE); return session; } }); }
public CompletionStage<Result> onServerError(RequestHeader request, Throwable e) { if (e instanceof CompletionException) { Throwable cause = e.getCause(); if (cause instanceof ResourceNotFoundException) { return CompletableFuture.completedFuture( Results.notFound(getErrorResponse(cause, true)) ); } else if (cause instanceof InvalidConfigurationException) { return CompletableFuture.completedFuture( Results.internalServerError(getErrorResponse(cause, true)) ); } if (cause instanceof ExternalDependencyException) { return CompletableFuture.completedFuture( Results.internalServerError(getErrorResponse(cause, true)) ); } if (cause instanceof InvalidInputException) { return CompletableFuture.completedFuture( Results.badRequest(getErrorResponse(cause, true)) ); } if (cause instanceof ResourceOutOfDateException) { return CompletableFuture.completedFuture( Results.status(Status.CONFLICT, getErrorResponse(cause, true)) ); } else { return CompletableFuture.completedFuture( Results.internalServerError(getErrorResponse(cause, true)) ); } } else { return CompletableFuture.completedFuture( Results.internalServerError(getErrorResponse(e, true)) ); } }
public CompletionStage<Result> onServerError(RequestHeader request, Throwable e) { if (e instanceof CompletionException) { Throwable cause = e.getCause(); if (cause instanceof ResourceNotFoundException) { return CompletableFuture.completedFuture( Results.notFound(getErrorResponse(cause, true)) ); } else if (cause instanceof InvalidConfigurationException) { return CompletableFuture.completedFuture( Results.internalServerError(getErrorResponse(cause, true)) ); } if (cause instanceof ExternalDependencyException) { return CompletableFuture.completedFuture( Results.status(Status.SERVICE_UNAVAILABLE, getErrorResponse(cause, true)) ); } if (cause instanceof InvalidInputException) { return CompletableFuture.completedFuture( Results.badRequest(getErrorResponse(cause, true)) ); } if (cause instanceof ResourceOutOfDateException) { return CompletableFuture.completedFuture( Results.status(Status.PRECONDITION_FAILED, getErrorResponse(cause, true)) ); } else { return CompletableFuture.completedFuture( Results.internalServerError(getErrorResponse(cause, true)) ); } } else { return CompletableFuture.completedFuture( Results.internalServerError(getErrorResponse(e, true)) ); } }
@Test public void deveriaRetornarIniciativasSimilares() { Result result = Helpers.route(builder.uri(controllers.routes.IniciativaController.similares(INICIATIVA_TESTE, 5L).url()).method("GET")); assertEquals(Status.OK, result.status()); JsonNode node = Json.parse(Helpers.contentAsString(result)); assertTrue(node.isArray()); Iterator<JsonNode> elements = node.elements(); // Não existe iniciativa similar a essa assertFalse(elements.hasNext()); }
@Test public void deveriaReportarCidadaoJaInscritoNumaIniciativa() { Result result = Helpers.route(builder.uri(controllers.routes.IniciativaController.adicionaInscrito(INICIATIVA_TESTE).url()).method("POST")); assertEquals(Status.OK, result.status()); result = Helpers.route(builder.uri(controllers.routes.IniciativaController.adicionaInscrito(INICIATIVA_TESTE).url()).method("POST")); assertEquals(Status.CONFLICT, result.status()); result = Helpers.route(builder.uri(controllers.routes.IniciativaController.removeInscrito(INICIATIVA_TESTE).url()).method("DELETE")); assertEquals(Status.OK, result.status()); }
@Test public void deveriaRemoverCidadaoJaInscritoNumaIniciativa() { Result result = Helpers.route(builder.uri(controllers.routes.IniciativaController.adicionaInscrito(INICIATIVA_TESTE).url()).method("POST")); assertEquals(Status.OK, result.status()); // não deveria estar aqui, mas não há como limpar banco de dados após todos os testes ainda. result = Helpers.route(builder.uri(controllers.routes.IniciativaController.adicionaInscrito(INICIATIVA_TESTE).url()).method("POST")); assertEquals(Status.CONFLICT, result.status()); result = Helpers.route(builder.uri(controllers.routes.IniciativaController.removeInscrito(INICIATIVA_TESTE).url()).method("DELETE")); assertEquals(Status.OK, result.status()); }
@Test public void deveRetornarIniciativaComInfoDeSeguidor() throws IOException { // caso hajs efeitos colaterais Helpers.route(builder.uri(controllers.routes.IniciativaController.removeInscrito(INICIATIVA_TESTE).url()).method("DELETE")); Result result1 = Helpers.route(builder.uri(controllers.routes.IniciativaController.adicionaInscrito(INICIATIVA_TESTE).url()).method("POST")); assertEquals(contentAsString(result1), Http.Status.OK, result1.status()); Result result2 = Helpers.route(builder.uri(controllers.routes.IniciativaController.getIniciativas(CIDADE_TESTE).url()).method("GET")); assertEquals(OK, result2.status()); List<Iniciativa> iniciativas = new ObjectMapper() .readValue(contentAsString(result2), new TypeReference<List<Iniciativa>>() {}); boolean encontrou = false; for (Iniciativa iniciativa : iniciativas) { if (INICIATIVA_TESTE.equals(iniciativa.getId())) { encontrou = true; assertTrue(iniciativa.isSeguidaPeloRequisitante()); } else { assertFalse(iniciativa.isSeguidaPeloRequisitante()); } } if (!encontrou) { fail("Não encontrou a iniciativa usada na cidade."); } Result result3 = Helpers.route(builder.uri(controllers.routes.IniciativaController.removeInscrito(INICIATIVA_TESTE).url()).method("DELETE")); assertEquals(Status.OK, result3.status()); }
@Test public void deveNotificarOpinioesEmIniciativaOndeComentei() throws IOException { // vira interessado Result resultado = enviaPOSTAddOpiniao(conteudoExemplo, iniciativaUsada, token); uuidDeOpinioesPraRemover.add(Json.fromJson(Json.parse(Helpers.contentAsString(resultado)), Opiniao.class).getId()); // a segunda opinião cria uma notificação resultado = enviaPOSTAddOpiniao("A novidade veio dar na praia. Na qualidade rara de sereia", iniciativaUsada, token); uuidDeOpinioesPraRemover.add(Json.fromJson(Json.parse(Helpers.contentAsString(resultado)), Opiniao.class).getId()); Result result = Helpers.route(builder.uri(controllers.routes.FeedController.getNovidades(0, 100).url()).method("GET")); List<Novidade> novidades = jsonToList(contentAsString(result)); System.out.println(novidades.size()); // TODO Esse teste só é possível quando tivermos diferentes usuários: // assertEquals(1, novidades.size()); assertFalse(novidades.isEmpty()); assertEquals(uuidDeOpinioesPraRemover.get(0), novidades.get(1).getOpiniao().getId()); assertEquals(uuidDeOpinioesPraRemover.get(1), novidades.get(0).getOpiniao().getId()); Novidade aNovidade = novidades.get(0); assertEquals(TipoDaNovidade.NOVA_OPINIAO, aNovidade.getTipo()); assertEquals(iniciativaUsada, aNovidade.getIniciativa().getId()); assertEquals(cidadeDaIniciativaUsada, aNovidade.getCidade().getId()); result = Helpers.route(builder.uri(controllers.routes.IniciativaController.removeInscrito(iniciativaUsada).url()).method("DELETE")); assertEquals(Status.OK, result.status()); }
@Test public void deveNotificarSeApoioAOpiniaoNaNovidade() throws IOException { // vira interessado Result resultado = enviaPOSTAddOpiniao(conteudoExemplo, iniciativaUsada, token); UUID opiniaoUUID = Json.fromJson(Json.parse(Helpers.contentAsString(resultado)), Opiniao.class).getId(); uuidDeOpinioesPraRemover.add(opiniaoUUID); resultado = Helpers.route(builder.uri(controllers.routes.FeedController.getNovidades(0, 10).url()).method("GET")); List<Novidade> novidades = jsonToList(contentAsString(resultado)); assertFalse(novidades.isEmpty()); assertEquals(opiniaoUUID, novidades.get(0).getOpiniao().getId()); assertFalse(novidades.get(0).getOpiniao().isApoiada()); assertEquals(0, novidades.get(0).getOpiniao().getNumeroDeApoiadores()); resultado = Helpers.route(builder.uri(controllers.routes.OpiniaoController.addJoinha(iniciativaUsada, opiniaoUUID.toString()).url()).method("POST")); assertEquals(Status.OK, resultado.status()); resultado = Helpers.route(builder.uri(controllers.routes.FeedController.getNovidades(0, 10).url()).method("GET")); novidades = jsonToList(contentAsString(resultado)); assertFalse(novidades.isEmpty()); assertEquals(opiniaoUUID, novidades.get(0).getOpiniao().getId()); assertTrue(novidades.get(0).getOpiniao().isApoiada()); assertEquals(1, novidades.get(0).getOpiniao().getNumeroDeApoiadores()); resultado = Helpers.route(builder.uri(controllers.routes.OpiniaoController.removeJoinha(iniciativaUsada, opiniaoUUID.toString()).url()).method("DELETE")); assertEquals(Status.OK, resultado.status()); resultado = Helpers.route(builder.uri(controllers.routes.FeedController.getNovidades(0, 10).url()).method("GET")); novidades = jsonToList(contentAsString(resultado)); assertFalse(novidades.isEmpty()); assertEquals(opiniaoUUID, novidades.get(0).getOpiniao().getId()); assertFalse(novidades.get(0).getOpiniao().isApoiada()); assertEquals(0, novidades.get(0).getOpiniao().getNumeroDeApoiadores()); }
@Test public void deveFalharAoAdicionarUmaMensagemComTituloGigante() { StringBuilder conteudoInvalido = new StringBuilder(); for (int i = 0; i < 1000; i++) { conteudoInvalido.append("ASDF "); } templateMensagem.setTitulo(conteudoInvalido.toString()); Result result = route(fakeRequest(controllers.routes.MensagemController.save()).bodyJson(Json.toJson(templateMensagem)).header("authorization", "token " + token)); assertEquals(Status.BAD_REQUEST, result.status()); }
@Test public void deveFalharAoAdicionarUmaMensagemComTituloVazio() { templateMensagem.setTitulo(""); Result result = route(fakeRequest(controllers.routes.MensagemController.save()).bodyJson(Json.toJson(templateMensagem)).header("authorization", "token " + token)); assertEquals(Status.BAD_REQUEST, result.status()); }
@Test public void deveFalharAoAdicionarUmaMensagemComTituloNull() { templateMensagem.setTitulo(null); Result result = route(fakeRequest(controllers.routes.MensagemController.save()).bodyJson(Json.toJson(templateMensagem)).header("authorization", "token " + token)); assertEquals(Status.BAD_REQUEST, result.status()); }
@Test public void deveriaReportarCidadaoJaInscritoNumaCidade() { Result result = Helpers.route(builder.uri(controllers.routes.CidadeController.removeInscrito(CIDADE_TESTE).url()).method("DELETE")); result = Helpers.route(builder.uri(controllers.routes.CidadeController.adicionaInscrito(CIDADE_TESTE).url()).method("POST")); assertEquals(Status.OK, result.status()); result = Helpers.route(builder.uri(controllers.routes.CidadeController.adicionaInscrito(CIDADE_TESTE).url()).method("POST")); assertEquals(Status.CONFLICT, result.status()); result = Helpers.route(builder.uri(controllers.routes.CidadeController.removeInscrito(CIDADE_TESTE).url()).method("DELETE")); assertEquals(Status.OK, result.status()); }
public CompletionStage<Result> onServerError(RequestHeader request, Throwable e) { String errorMessage; int errorCode; if (e instanceof DocumentClientException) { DocumentClientException ex = (DocumentClientException) e; errorCode = ex.getStatusCode(); switch (errorCode) { case Status.NOT_FOUND: errorMessage = "The resource requested doesn't exist."; break; case Status.CONFLICT: errorMessage = "There is already a key with the Id specified."; break; case Status.PRECONDITION_FAILED: errorMessage = "ETag mismatch: the resource has been updated by another client."; break; default: errorMessage = ex.getMessage(); break; } } else if (e instanceof BadRequestException) { errorCode = Status.BAD_REQUEST; errorMessage = e.getMessage(); } else { errorCode = Status.INTERNAL_SERVER_ERROR; errorMessage = e.getMessage(); } Map<String, Object> errorResult = new HashMap<>(); errorResult.put("Message", "An error has occurred."); errorResult.put("ExceptionType", e.getClass().getName()); errorResult.put("ExceptionMessage", errorMessage); //No StackTrace. if (false) { errorResult.put("StackTrace", e.getStackTrace()); Throwable innerException = e.getCause(); if (innerException != null) { errorResult.put("InnerExceptionMessage", innerException.getMessage()); errorResult.put("InnerExceptionType", innerException.getClass().getName()); errorResult.put("InnerExceptionStackTrace", innerException.getStackTrace()); } } return CompletableFuture.completedFuture( Results.status(errorCode, toJson(errorResult)) ); }
@Test public void deveriaFalharNaInscricaoNumaIniciativaInexistente() { Result result = Helpers.route(builder.uri(controllers.routes.IniciativaController.adicionaInscrito(0L).url()).method("POST")); assertEquals(Status.NOT_FOUND, result.status()); }
@Test public void deveriaFalharNaRemocaoDaInscricaoNumaIniciativaInexistente() { Result result = Helpers.route(builder.uri(controllers.routes.IniciativaController.removeInscrito(0L).url()).method("DELETE")); assertEquals(Status.NOT_FOUND, result.status()); }
@Test public void deveriaFalharAoRemoverCidadaoNaoInscritoNaIniciativa() { Result result = Helpers.route(builder.uri(controllers.routes.IniciativaController.removeInscrito(INICIATIVA_TESTE).url()).method("DELETE")); assertEquals(Status.NOT_FOUND, result.status()); }
@Test public void deveriaFalharNaInscricaoNumaCidadeInexistente() { Result result = Helpers.route(builder.uri(controllers.routes.CidadeController.adicionaInscrito(0L).url()).method("POST")); assertEquals(Status.NOT_FOUND, result.status()); }
@Test public void deveriaFalharAoRemoverCidadaoNaoInscritoNaCidade() { Result result = Helpers.route(builder.uri(controllers.routes.CidadeController.removeInscrito(CIDADE_TESTE).url()).method("DELETE")); assertEquals(Status.NOT_FOUND, result.status()); }
@Test public void badRoute() throws Exception { Result result = route(fakeRequest(GET, "/badurl")); assertThat(result.toScala().header().status()).isEqualTo(Status.NOT_FOUND); }