package org.zalando.catwatch.backend.web.admin; import org.junit.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpEntity; import org.springframework.http.HttpHeaders; import org.zalando.catwatch.backend.model.Contributor; import org.zalando.catwatch.backend.model.Project; import org.zalando.catwatch.backend.model.Statistics; import org.zalando.catwatch.backend.repo.ContributorRepository; import org.zalando.catwatch.backend.repo.ProjectRepository; import org.zalando.catwatch.backend.repo.StatisticsRepository; import org.zalando.catwatch.backend.repo.builder.ContributorBuilder; import org.zalando.catwatch.backend.repo.builder.ProjectBuilder; import org.zalando.catwatch.backend.repo.builder.StatisticsBuilder; import org.zalando.catwatch.backend.web.AbstractCatwatchIT; import static java.time.Instant.now; import static java.time.temporal.ChronoUnit.DAYS; import static java.util.Date.from; import static org.hamcrest.Matchers.*; import static org.junit.Assert.assertThat; import static org.springframework.http.HttpMethod.POST; import static org.springframework.web.util.UriComponentsBuilder.fromHttpUrl; public class AdminControllerIT extends AbstractCatwatchIT { @Autowired private ContributorRepository contributorRepository; @Autowired private StatisticsRepository statisticsRepository; @Autowired private ProjectRepository projectRepository; private ProjectBuilder newProject() { return new ProjectBuilder(projectRepository); } private ContributorBuilder newContributor() { return new ContributorBuilder(contributorRepository); } private StatisticsBuilder newStatistic() { return new StatisticsBuilder(statisticsRepository); } @Test public void testConfigScoringProject() throws Exception { // given projectRepository.deleteAll(); Project p = newProject().snapshotDate(from(now().minus(3, DAYS))).organizationName("abc").score(13).save(); // when String scoringFunction = "function(p) { return 55; }"; String result = template.exchange(configScoringProjectUrl(), POST, entity(scoringFunction, "X-Organizations", "abc"), String.class).getBody(); // then assertThat(result, containsString("1 project object(s) updated")); assertThat(projectRepository.findOne(p.getId()).getScore(), equalTo(55)); } private HttpEntity<String> entity(String body, String headerName, String headerValue) { HttpHeaders headers = new HttpHeaders(); headers.set(headerName, headerValue); return new HttpEntity<>(body, headers); } @Test public void testExportAndImport() throws Exception { // given contributorRepository.deleteAll(); statisticsRepository.deleteAll(); Contributor c = contributorRepository.findOne(newContributor().save().getKey()); Statistics s = statisticsRepository.findOne(newStatistic().save().getKey()); // when DatabaseDto dto = template.getForEntity(exportUrl(), DatabaseDto.class).getBody(); contributorRepository.deleteAll(); statisticsRepository.deleteAll(); projectRepository.deleteAll(); template.postForEntity(importUrl(), dto, String.class); // then assertThat(contributorRepository.findAll(), iterableWithSize(1)); Contributor c_ = contributorRepository.findAll().iterator().next(); assertThat(c_.getId(), equalTo(c.getId())); // TODO problem!!!! the milliseconds are truncated so that the date // differs after the export/import :-( // assertThat(c_.getSnapshotDate().getTime(), // equalTo(c.getSnapshotDate().getTime())); assertThat(statisticsRepository.findAll(), iterableWithSize(1)); Statistics s_ = statisticsRepository.findAll().iterator().next(); assertThat(s_.getId(), equalTo(s.getId())); // TODO problem!!!! the milliseconds are truncated so that the date // differs after the export/import :-( // assertThat(s_.getSnapshotDate().getTime(), // equalTo(s.getSnapshotDate().getTime())); } private String configScoringProjectUrl() { return fromHttpUrl(base.toString() + "config/scoring.project").toUriString(); } private String exportUrl() { return fromHttpUrl(base.toString() + "export").toUriString(); } private String importUrl() { return fromHttpUrl(base.toString() + "import").toUriString(); } }