Skip to content
Snippets Groups Projects
Commit 048f2813 authored by OZGCloud's avatar OZGCloud
Browse files

OZG-626 sort vorganglist for EA and use docker for mongodb testing

parent 753fb911
No related branches found
No related tags found
No related merge requests found
Showing with 180 additions and 6 deletions
......@@ -158,9 +158,16 @@
<artifactId>junit-jupiter-params</artifactId>
<scope>test</scope>
</dependency>
<!-- <dependency> -->
<!-- <groupId>de.flapdoodle.embed</groupId> -->
<!-- <artifactId>de.flapdoodle.embed.mongo</artifactId> -->
<!-- <scope>test</scope> -->
<!-- </dependency> -->
<dependency>
<groupId>de.flapdoodle.embed</groupId>
<artifactId>de.flapdoodle.embed.mongo</artifactId>
<groupId>org.testcontainers</groupId>
<artifactId>mongodb</artifactId>
<version>1.15.3</version>
<scope>test</scope>
</dependency>
</dependencies>
......
......@@ -21,6 +21,7 @@ public class Vorgang {
public static final String MONGODB_FIELDNAME_ID = "id";
static final String MONGODB_FIELDNAME_VERSION = "version";
static final String MONGODB_FIELDNAME_STATUS = "status";
static final String MONGODB_FIELDNAME_CREATED_AT = "createdAt";
public enum Status {
NEU, ANGENOMMEN, VERWORFEN, IN_BEARBEITUNG, BESCHIEDEN, ABGESCHLOSSEN, WEITERGELEITET;
......
package de.itvsh.ozg.pluto.vorgang;
import java.util.List;
import org.springframework.data.mongodb.repository.MongoRepository;
interface VorgangHeaderRepository extends MongoRepository<VorgangHeader, String> {
@Override
List<VorgangHeader> findAll();
}
\ No newline at end of file
package de.itvsh.ozg.pluto.vorgang;
import static de.itvsh.ozg.pluto.vorgang.Vorgang.*;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Sort;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.data.mongodb.core.aggregation.Aggregation;
import org.springframework.data.mongodb.core.aggregation.AggregationPipeline;
import org.springframework.data.mongodb.core.aggregation.UnionWithOperation;
import org.springframework.data.mongodb.core.query.Criteria;
import de.itvsh.ozg.pluto.vorgang.Vorgang.Status;
class VorgangHeaderRepositoryImpl {
@Autowired
private MongoTemplate template;
public List<VorgangHeader> findAll() {
var aggregation = Aggregation.newAggregation(
Aggregation.match(new Criteria(MONGODB_FIELDNAME_STATUS).is(Status.IN_BEARBEITUNG)),
Aggregation.sort(Sort.by(MONGODB_FIELDNAME_CREATED_AT)),
UnionWithOperation.unionWith(Vorgang.COLLECTION_NAME).pipeline(buildZuBearbeitendePipeline()));
var result = template.aggregate(aggregation, VorgangHeader.class, VorgangHeader.class);
return result.getMappedResults();
}
private AggregationPipeline buildZuBearbeitendePipeline() {
var aggregation = Aggregation.newAggregation(
Aggregation.match(new Criteria(MONGODB_FIELDNAME_STATUS).in(Status.NEU, Status.ANGENOMMEN, Status.VERWORFEN)),
Aggregation.sort(Sort.by(MONGODB_FIELDNAME_CREATED_AT)));
return aggregation.getPipeline();
}
}
package de.itvsh.ozg.pluto;
import org.springframework.boot.test.util.TestPropertyValues;
import org.springframework.context.ApplicationContextInitializer;
import org.springframework.context.ConfigurableApplicationContext;
import org.testcontainers.containers.MongoDBContainer;
import org.testcontainers.utility.DockerImageName;
import lombok.extern.log4j.Log4j2;
@Log4j2
public class DbInitializer implements ApplicationContextInitializer<ConfigurableApplicationContext> {
@Override
public void initialize(ConfigurableApplicationContext applicationContext) {
// @Bean
// public MongoDBContainer mongodb(ConfigurableApplicationContext applicationContext) {
MongoDBContainer mongoDbContainer = new MongoDBContainer(DockerImageName.parse("mongo").withTag("4.4"));
LOG.info("Starting mongoDB ...");
mongoDbContainer.start();
LOG.info("mongoDB started.");
TestPropertyValues.of(
"spring.data.mongodb.host=" + mongoDbContainer.getHost(),
"spring.data.mongodb.port=" + mongoDbContainer.getFirstMappedPort()).applyTo(applicationContext.getEnvironment());
// return mongoDbContainer;
}
}
......@@ -6,11 +6,15 @@ import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.mail.javamail.JavaMailSender;
import lombok.extern.log4j.Log4j2;
@Configuration
@Log4j2
public class TestConfiguration {
@Bean
public JavaMailSender mockMailSender() {
return mock(JavaMailSender.class);
}
}
\ No newline at end of file
......@@ -7,12 +7,16 @@ import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import org.springframework.test.context.ActiveProfiles;
import org.springframework.test.context.ContextConfiguration;
import de.itvsh.ozg.pluto.DbInitializer;
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
@Inherited
@ITCase
@ContextConfiguration(initializers = { DbInitializer.class })
@ActiveProfiles({ "itcase", "with_db" })
public @interface DataITCase {
......
package de.itvsh.ozg.pluto.vorgang;
import static org.assertj.core.api.Assertions.*;
import java.time.ZonedDateTime;
import java.time.temporal.ChronoUnit;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Nested;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.EnumSource;
import org.junit.jupiter.params.provider.EnumSource.Mode;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.mongodb.core.MongoOperations;
import de.itvsh.ozg.pluto.common.test.DataITCase;
import de.itvsh.ozg.pluto.vorgang.Vorgang.Status;
@DataITCase
class VorgangHeaderRepositoryITCase {
@Autowired
private VorgangHeaderRepository repository;
@Autowired
private MongoOperations mongoOperations;
// @ClassRule
// public static MongoDBContainer mongoDbContainer = new MongoDBContainer(DockerImageName.parse("mongo").withTag("4.4"));
// @BeforeAll
// static void startDB() {
// mongoDbContainer.start();
// }
@Nested
class TestSortForEA {
@BeforeEach
void persistVorgang() {
mongoOperations.dropCollection(Vorgang.class);
}
@Test
void shouldSortInBearbeitungByCreatedAt() {
mongoOperations.save(VorgangTestFactory.createBuilder().id("3").status(Status.IN_BEARBEITUNG)
.createdAt(ZonedDateTime.now().minus(2, ChronoUnit.DAYS)).build());
mongoOperations.save(VorgangTestFactory.createBuilder().id("2").status(Status.IN_BEARBEITUNG)
.createdAt(ZonedDateTime.now().minus(3, ChronoUnit.DAYS)).build());
mongoOperations.save(VorgangTestFactory.createBuilder().id("1").status(Status.IN_BEARBEITUNG)
.createdAt(ZonedDateTime.now().minus(4, ChronoUnit.DAYS)).build());
var vorgaenge = repository.findAll();
assertThat(vorgaenge.get(0).getId()).isEqualTo("1");
assertThat(vorgaenge.get(1).getId()).isEqualTo("2");
assertThat(vorgaenge.get(2).getId()).isEqualTo("3");
}
@ParameterizedTest
@EnumSource(mode = Mode.INCLUDE, names = { "NEU", "ANGENOMMEN", "VERWORFEN" })
void shouldSortAbzuarbeitendeAfterInBearbeitung(Status status) {
mongoOperations.save(VorgangTestFactory.createBuilder().id("2").status(status)
.createdAt(ZonedDateTime.now().minus(4, ChronoUnit.DAYS)).build());
mongoOperations.save(VorgangTestFactory.createBuilder().id("1").status(Status.IN_BEARBEITUNG)
.createdAt(ZonedDateTime.now().minus(4, ChronoUnit.DAYS)).build());
var vorgaenge = repository.findAll();
assertThat(vorgaenge.get(0).getId()).isEqualTo("1");
assertThat(vorgaenge.get(1).getId()).isEqualTo("2");
}
}
// static class Initializer implements ApplicationContextInitializer<ConfigurableApplicationContext> {
//
// @Override
// public void initialize(ConfigurableApplicationContext applicationContext) {
// TestPropertyValues.of(
// "spring.data.mongodb.host=" + mongoDbContainer.getHost(),
// "spring.data.mongodb.port=" + mongoDbContainer.getFirstMappedPort()).applyTo(applicationContext.getEnvironment());
//
// }
//
// }
}
logging:
level:
'[org.springframework.data.mongodb]': DEBUG
'[org.springframework.data.mongodb]': INFO
spring:
data:
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment