Skip to content

Commit 1b26641

Browse files
Merge pull request #511 from InseeFr/bug/mongo-transactional-new
Bug: Implement Transactional on save all responses
2 parents 1b9934e + e6e07c4 commit 1b26641

7 files changed

Lines changed: 54 additions & 2 deletions

File tree

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
package fr.insee.genesis.configuration;
2+
3+
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
4+
import org.springframework.context.annotation.Bean;
5+
import org.springframework.context.annotation.Configuration;
6+
import org.springframework.data.mongodb.MongoDatabaseFactory;
7+
import org.springframework.data.mongodb.MongoTransactionManager;
8+
import org.springframework.transaction.PlatformTransactionManager;
9+
10+
@Configuration
11+
public class MongoConfig {
12+
13+
@Bean
14+
@ConditionalOnMissingBean(PlatformTransactionManager.class)
15+
MongoTransactionManager transactionManager(MongoDatabaseFactory dbFactory) {
16+
return new MongoTransactionManager(dbFactory);
17+
}
18+
19+
}

src/main/java/fr/insee/genesis/infrastructure/adapter/SurveyUnitMongoAdapter.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
import org.springframework.data.mongodb.core.MongoTemplate;
2020
import org.springframework.stereotype.Service;
2121
import tools.jackson.databind.json.JsonMapper;
22+
import org.springframework.transaction.annotation.Transactional;
2223

2324
import java.time.Instant;
2425
import java.time.LocalDateTime;
@@ -45,6 +46,7 @@ public SurveyUnitMongoAdapter(SurveyUnitMongoDBRepository mongoRepository, Mongo
4546
}
4647

4748
@Override
49+
@Transactional
4850
public void saveAll(List<SurveyUnitModel> surveyUnitModels) {
4951
List<SurveyUnitDocument> suList = SurveyUnitDocumentMapper.INSTANCE.listModelToListDocument(surveyUnitModels);
5052
mongoRepository.insert(suList);
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
package fr.insee.genesis;
2+
3+
import org.mockito.Mockito;
4+
import org.springframework.boot.test.context.TestConfiguration;
5+
import org.springframework.context.annotation.Bean;
6+
import org.springframework.transaction.PlatformTransactionManager;
7+
8+
@TestConfiguration
9+
public class TransactionManagerTestConfig {
10+
11+
@Bean
12+
PlatformTransactionManager transactionManager() {
13+
return Mockito.mock(PlatformTransactionManager.class);
14+
}
15+
}

src/test/java/fr/insee/genesis/controller/IntegrationTestAbstract.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package fr.insee.genesis.controller;
22

3+
import fr.insee.genesis.TransactionManagerTestConfig;
34
import fr.insee.genesis.controller.utils.ControllerUtils;
45
import fr.insee.genesis.domain.ports.spi.SurveyUnitQualityToolPort;
56
import fr.insee.genesis.infrastructure.repository.ContextualExternalVariableMongoDBRepository;
@@ -18,6 +19,7 @@
1819
import org.springframework.boot.mongodb.autoconfigure.MongoAutoConfiguration;
1920
import org.springframework.boot.test.context.SpringBootTest;
2021
import org.springframework.boot.webmvc.test.autoconfigure.AutoConfigureMockMvc;
22+
import org.springframework.context.annotation.Import;
2123
import org.springframework.data.mongodb.core.MongoTemplate;
2224
import org.springframework.test.context.ActiveProfiles;
2325
import org.springframework.test.context.TestPropertySource;
@@ -35,6 +37,7 @@
3537
"logging.level.=DEBUG"
3638
})
3739
@EnableAutoConfiguration(exclude = {MongoAutoConfiguration.class, DataMongoAutoConfiguration.class})
40+
@Import(TransactionManagerTestConfig.class)
3841
public abstract class IntegrationTestAbstract {
3942
@Autowired
4043
protected MockMvc mockMvc;

src/test/java/fr/insee/genesis/controller/rest/responses/RawResponseControllerTest.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package fr.insee.genesis.controller.rest.responses;
22

3+
import fr.insee.genesis.TransactionManagerTestConfig;
34
import fr.insee.genesis.configuration.auth.security.DefaultSecurityConfig;
45
import fr.insee.genesis.domain.model.surveyunit.Mode;
56
import fr.insee.genesis.domain.model.surveyunit.rawdata.DataProcessResult;
@@ -59,7 +60,7 @@
5960
@TestPropertySource(properties = {
6061
"fr.insee.genesis.authentication=NONE"
6162
})
62-
@Import({DefaultSecurityConfig.class})
63+
@Import({DefaultSecurityConfig.class, TransactionManagerTestConfig.class})
6364
@ActiveProfiles("test")
6465
@AutoConfigureMockMvc
6566
@EnableAutoConfiguration(exclude = {MongoAutoConfiguration.class, DataMongoAutoConfiguration.class})

src/test/java/fr/insee/genesis/controller/rest/responses/ResponseControllerTest.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import fr.insee.bpm.metadata.model.MetadataModel;
44
import fr.insee.bpm.metadata.model.VariablesMap;
5+
import fr.insee.genesis.TransactionManagerTestConfig;
56
import fr.insee.genesis.configuration.auth.security.DefaultSecurityConfig;
67
import fr.insee.genesis.controller.dto.SurveyUnitDto;
78
import fr.insee.genesis.controller.dto.SurveyUnitSimplifiedDto;
@@ -62,7 +63,7 @@
6263
@TestPropertySource(properties = {
6364
"fr.insee.genesis.authentication=NONE"
6465
})
65-
@Import({DefaultSecurityConfig.class})
66+
@Import({DefaultSecurityConfig.class, TransactionManagerTestConfig.class})
6667
@ActiveProfiles("test")
6768
@AutoConfigureMockMvc
6869
@EnableAutoConfiguration(exclude = {MongoAutoConfiguration.class, DataMongoAutoConfiguration.class})

src/test/java/fr/insee/genesis/infrastructure/adapter/SurveyUnitMongoAdapterTest.java

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,9 @@
1818
import org.mockito.Mockito;
1919
import org.mockito.junit.jupiter.MockitoExtension;
2020
import org.springframework.data.mongodb.core.MongoTemplate;
21+
import org.springframework.transaction.annotation.Transactional;
2122

23+
import java.lang.reflect.Method;
2224
import java.time.Instant;
2325
import java.time.LocalDateTime;
2426
import java.util.List;
@@ -90,6 +92,15 @@ void saveAll_shouldMapAllModels() {
9092
verify(mongoRepository).insert(captor.capture());
9193
assertThat(captor.getValue()).hasSize(3);
9294
}
95+
96+
@Test
97+
@DisplayName("saveAll() should be annotated with @Transactional")
98+
void saveAll_shouldBeTransactional() throws NoSuchMethodException {
99+
Method method = SurveyUnitMongoAdapter.class.getMethod("saveAll", List.class);
100+
assertThat(method.isAnnotationPresent(Transactional.class)).isTrue();
101+
}
102+
103+
93104
}
94105

95106
@Nested

0 commit comments

Comments
 (0)