Skip to content

Commit 428f0a3

Browse files
committed
refactor(test-support): InMemoryFlamingockBulder and InMemoryAuditStore
1 parent b042c92 commit 428f0a3

5 files changed

Lines changed: 63 additions & 17 deletions

File tree

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
package io.flamingock.internal.core.builder;
2+
3+
4+
import io.flamingock.internal.core.store.CommunityAuditStore;
5+
6+
public interface AuditStoreReceiver<RETURN_TYPE> {
7+
8+
RETURN_TYPE setAuditStore(CommunityAuditStore auditStore);
9+
}

core/flamingock-core/src/main/java/io/flamingock/internal/core/builder/CommunityChangeRunnerBuilder.java

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -15,28 +15,28 @@
1515
*/
1616
package io.flamingock.internal.core.builder;
1717

18-
import io.flamingock.internal.core.plan.community.CommunityExecutionPlanner;
19-
import io.flamingock.internal.core.store.AuditStore;
20-
import io.flamingock.internal.core.store.CommunityAuditStore;
21-
import io.flamingock.internal.core.configuration.core.CoreConfiguration;
18+
import io.flamingock.internal.common.core.context.Context;
2219
import io.flamingock.internal.core.configuration.community.CommunityConfiguration;
2320
import io.flamingock.internal.core.configuration.community.CommunityConfigurator;
24-
import io.flamingock.internal.common.core.context.Context;
21+
import io.flamingock.internal.core.configuration.core.CoreConfiguration;
2522
import io.flamingock.internal.core.plan.ExecutionPlanner;
23+
import io.flamingock.internal.core.plan.community.CommunityExecutionPlanner;
2624
import io.flamingock.internal.core.plugin.PluginManager;
25+
import io.flamingock.internal.core.store.CommunityAuditStore;
2726
import io.flamingock.internal.util.id.RunnerId;
2827

2928
public class CommunityChangeRunnerBuilder
3029
extends AbstractChangeRunnerBuilder<CommunityAuditStore, CommunityChangeRunnerBuilder>
31-
implements CommunityConfigurator<CommunityChangeRunnerBuilder> {
30+
implements CommunityConfigurator<CommunityChangeRunnerBuilder>,
31+
AuditStoreReceiver<CommunityChangeRunnerBuilder> {
3232

3333
private final CommunityConfiguration communityConfiguration;
3434

3535

3636
public CommunityChangeRunnerBuilder(CoreConfiguration coreConfiguration,
37-
CommunityConfiguration communityConfiguration,
38-
Context dependencyInjectableContext,
39-
PluginManager pluginManager) {
37+
CommunityConfiguration communityConfiguration,
38+
Context dependencyInjectableContext,
39+
PluginManager pluginManager) {
4040
super(coreConfiguration, dependencyInjectableContext, pluginManager);
4141
this.communityConfiguration = communityConfiguration;
4242
}
@@ -72,6 +72,7 @@ protected ExecutionPlanner buildExecutionPlanner(RunnerId runnerId) {
7272
.build();
7373
}
7474

75+
@Override
7576
public CommunityChangeRunnerBuilder setAuditStore(CommunityAuditStore auditStore) {
7677
this.auditStore = auditStore;
7778
return this;

core/flamingock-test-support/src/main/java/io/flamingock/internal/core/builder/BuilderAccessor.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717

1818
import io.flamingock.internal.core.runner.Runner;
1919
import io.flamingock.internal.core.store.AuditStore;
20+
import io.flamingock.internal.core.store.CommunityAuditStore;
2021

2122
public class BuilderAccessor {
2223

@@ -35,4 +36,12 @@ public Runner build() {
3536
}
3637

3738

39+
public void overrideAuditStore(CommunityAuditStore auditStore) {
40+
if(!(builder instanceof AuditStoreReceiver)) {
41+
String message = String.format("Builder of type[%s] does not allow AuditStore override operation", builder.getClass().getSimpleName());
42+
throw new IllegalArgumentException(message);
43+
}
44+
45+
((AuditStoreReceiver<?>)builder).setAuditStore(auditStore);
46+
}
3847
}

core/flamingock-test-support/src/main/java/io/flamingock/support/stages/GivenStage.java

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
*/
1616
package io.flamingock.support.stages;
1717

18+
import io.flamingock.internal.core.store.CommunityAuditStore;
1819
import io.flamingock.support.FlamingockTestSupport;
1920
import io.flamingock.support.domain.AuditEntryDefinition;
2021

@@ -72,6 +73,33 @@ public interface GivenStage {
7273
*/
7374
GivenStage andExistingAudit(AuditEntryDefinition... definitions);
7475

76+
/**
77+
* Overrides the audit store configured in the builder with a custom one.
78+
*
79+
* <p>Use this method when you need to use a different audit store than the one
80+
* configured in the Flamingock builder. This is particularly useful for:</p>
81+
* <ul>
82+
* <li>Testing with an in-memory audit store for isolation</li>
83+
* <li>Replacing a production audit store with a test-specific implementation</li>
84+
* </ul>
85+
*
86+
* <h3>Example</h3>
87+
* <pre>
88+
* CommunityAuditStore testAuditStore = InMemoryAuditStore.create();
89+
*
90+
* FlamingockTestSupport.givenBuilder(builder)
91+
* .andOverrideAuditStore(testAuditStore)
92+
* .whenRun()
93+
* .thenExpectAuditFinalStateSequence(APPLIED(MyChange.class))
94+
* .verify();
95+
* </pre>
96+
*
97+
* @param auditStore the audit store to use instead of the one configured in the builder
98+
* @return this stage for method chaining
99+
* @see CommunityAuditStore
100+
*/
101+
GivenStage andOverrideAuditStore(CommunityAuditStore auditStore);
102+
75103
/**
76104
* Completes the setup phase and transitions to the assertion phase.
77105
*

core/flamingock-test-support/src/main/java/io/flamingock/support/stages/GivenStageImpl.java

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
package io.flamingock.support.stages;
1717

1818
import io.flamingock.internal.core.builder.BuilderAccessor;
19+
import io.flamingock.internal.core.store.CommunityAuditStore;
1920
import io.flamingock.support.context.TestContext;
2021
import io.flamingock.support.domain.AuditEntryDefinition;
2122

@@ -40,18 +41,16 @@ public GivenStage andExistingAudit(AuditEntryDefinition... definitions) {
4041
return this;
4142
}
4243

44+
@Override
45+
public GivenStage andOverrideAuditStore(CommunityAuditStore auditStore) {
46+
builderAccessor.overrideAuditStore(auditStore);
47+
return this;
48+
}
49+
4350
@Override
4451
public WhenStage whenRun() {
4552
TestContext testContext = new TestContext(builderAccessor, existingAudit);
4653
return new WhenStageImpl(testContext);
4754
}
4855

49-
/**
50-
* Returns the list of existing audit definitions.
51-
*
52-
* @return the existing audit definitions
53-
*/
54-
public List<AuditEntryDefinition> getExistingAudit() {
55-
return existingAudit;
56-
}
5756
}

0 commit comments

Comments
 (0)