Skip to content

Commit d555303

Browse files
committed
refactor: rewrite tests to have less mock
1 parent ba9d456 commit d555303

File tree

2 files changed

+107
-54
lines changed

2 files changed

+107
-54
lines changed

gravitee-plugin-annotation-processors/src/test/java/io/gravitee/gateway/reactive/api/context/ExecutionContext.java

Lines changed: 47 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -18,34 +18,74 @@
1818
import io.gravitee.gateway.reactive.api.ExecutionFailure;
1919
import io.reactivex.rxjava3.core.Completable;
2020
import io.reactivex.rxjava3.core.Maybe;
21+
import java.util.Arrays;
22+
import java.util.HashMap;
2123
import java.util.List;
24+
import java.util.Map;
25+
import lombok.Getter;
2226

2327
/**
2428
* @author Remi Baptiste (remi.baptiste at graviteesource.com)
2529
* @author GraviteeSource Team
2630
*/
2731
public class ExecutionContext {
2832

29-
public TemplateEngine getTemplateEngine() {
30-
return null;
33+
@Getter
34+
private final TemplateEngine templateEngine;
35+
36+
private final Map<String, Object> attributes;
37+
38+
@Getter
39+
private final Map<String, Object> internalAttributes;
40+
41+
public ExecutionContext() {
42+
this(new TemplateEngine(), new HashMap<>());
43+
}
44+
45+
public ExecutionContext(TemplateEngine templateEngine) {
46+
this(templateEngine, new HashMap<>());
47+
}
48+
49+
public ExecutionContext(Map<String, Object> attributes) {
50+
this(new TemplateEngine(), attributes);
51+
}
52+
53+
public ExecutionContext(TemplateEngine templateEngine, Map<String, Object> attributes) {
54+
this.templateEngine = templateEngine;
55+
this.attributes = attributes;
56+
this.internalAttributes = new HashMap<>();
3157
}
3258

3359
public <T> T getAttribute(String attribute) {
34-
return null;
60+
return (T) attributes.get(attribute);
3561
}
3662

3763
public <T> List<T> getAttributeAsList(String name) {
38-
return null;
64+
var value = this.attributes.get(name);
65+
66+
if (value == null) {
67+
return null;
68+
}
69+
if (value instanceof List) {
70+
return (List<T>) value;
71+
}
72+
if (value instanceof String) {
73+
return (List<T>) Arrays.stream(((String) value).split(",")).toList();
74+
}
75+
76+
return List.of((T) value);
3977
}
4078

41-
public void setInternalAttribute(String var1, Object var2) {}
79+
public void setInternalAttribute(String var1, Object var2) {
80+
internalAttributes.put(var1, var2);
81+
}
4282

4383
public <T> T getInternalAttribute(String attribute) {
44-
return null;
84+
return (T) internalAttributes.get(attribute);
4585
}
4686

4787
public Completable interruptWith(final ExecutionFailure failure) {
48-
return Completable.complete();
88+
return Completable.defer(() -> Completable.error(new IllegalStateException((failure.message()))));
4989
}
5090

5191
public static class TemplateEngine {

gravitee-plugin-annotation-processors/src/test/java/io/gravitee/plugin/annotation/processor/ConfigurationEvaluatorGeneratedTest.java

Lines changed: 60 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -15,28 +15,27 @@
1515
*/
1616
package io.gravitee.plugin.annotation.processor;
1717

18-
import static org.assertj.core.api.AssertionsForClassTypes.assertThat;
18+
import static org.assertj.core.api.Assertions.assertThat;
1919
import static org.mockito.ArgumentMatchers.any;
2020
import static org.mockito.ArgumentMatchers.anyString;
21+
import static org.mockito.Mockito.spy;
2122
import static org.mockito.Mockito.times;
2223
import static org.mockito.Mockito.verify;
2324
import static org.mockito.Mockito.when;
2425

25-
import io.gravitee.gateway.reactive.api.ExecutionFailure;
2626
import io.gravitee.gateway.reactive.api.context.ExecutionContext;
2727
import io.gravitee.plugin.annotation.processor.result.SecurityProtocol;
2828
import io.gravitee.plugin.annotation.processor.result.TestConfiguration;
2929
import io.gravitee.plugin.annotation.processor.result.TestConfigurationEvaluator;
30-
import io.reactivex.rxjava3.core.Completable;
3130
import io.reactivex.rxjava3.core.Maybe;
3231
import io.reactivex.rxjava3.observers.TestObserver;
33-
import java.util.List;
34-
import java.util.Set;
3532
import org.junit.Before;
3633
import org.junit.Test;
3734
import org.junit.runner.RunWith;
3835
import org.mockito.Mock;
3936
import org.mockito.junit.MockitoJUnitRunner;
37+
import java.util.Map;
38+
import java.util.Set;
4039

4140
/**
4241
* @author Remi Baptiste (remi.baptiste at graviteesource.com)
@@ -47,9 +46,6 @@ public class ConfigurationEvaluatorGeneratedTest {
4746

4847
TestConfigurationEvaluator evaluator;
4948

50-
@Mock
51-
ExecutionContext context;
52-
5349
@Mock
5450
ExecutionContext.TemplateEngine templateEngine;
5551

@@ -59,20 +55,12 @@ public void before() {
5955
configuration.getConsumer().setEnabled(true);
6056
configuration.getConsumer().setAutoOffsetReset("none");
6157
evaluator = new TestConfigurationEvaluator(configuration);
62-
63-
when(context.getTemplateEngine()).thenReturn(templateEngine);
64-
65-
when(context.interruptWith(any()))
66-
.thenAnswer(invocation ->
67-
Completable.defer(() ->
68-
Completable.error(new IllegalStateException(((ExecutionFailure) invocation.getArgument(0)).message()))
69-
)
70-
);
7158
}
7259

7360
@Test
7461
public void should_interrupt_with_error_on_validation() {
7562
when(templateEngine.eval("none", String.class)).thenReturn(Maybe.just("result"));
63+
var context = new ExecutionContext(templateEngine);
7664

7765
TestObserver<TestConfiguration> testObserver = evaluator.eval(context).test();
7866

@@ -86,40 +74,65 @@ public void should_interrupt_with_error_on_validation() {
8674
@Test
8775
public void should_return_evaluated_configuration() {
8876
when(templateEngine.eval("none", String.class)).thenReturn(Maybe.just("latest"));
89-
when(context.getAttribute("gravitee.attributes.endpoint.test.protocol")).thenReturn("SSL");
90-
when(context.getAttribute("gravitee.attributes.endpoint.test.consumer.topics")).thenReturn("topic1,topic2");
91-
when(context.getAttributeAsList("gravitee.attributes.endpoint.test.consumer.topics")).thenReturn(List.of("topic1", "topic2"));
92-
93-
TestObserver<TestConfiguration> testObserver = evaluator.eval(context).test();
94-
95-
testObserver.assertComplete();
96-
97-
testObserver.assertValue(testConfiguration -> {
98-
assertThat(testConfiguration.getConsumer().getAutoOffsetReset()).isEqualTo("latest");
99-
assertThat(testConfiguration.getProtocol()).isEqualTo(SecurityProtocol.SSL);
100-
assertThat(testConfiguration.getConsumer().getTopics()).isEqualTo(Set.of("topic1", "topic2"));
101-
return true;
102-
});
77+
var context = new ExecutionContext(
78+
templateEngine,
79+
Map.ofEntries(
80+
Map.entry("gravitee.attributes.endpoint.test.protocol", "SSL"),
81+
Map.entry("gravitee.attributes.endpoint.test.consumer.topics", "topic1,topic2")
82+
)
83+
);
84+
85+
evaluator
86+
.eval(context)
87+
.test()
88+
.assertComplete()
89+
.assertValue(testConfiguration -> {
90+
assertThat(testConfiguration.getConsumer().getAutoOffsetReset()).isEqualTo("latest");
91+
assertThat(testConfiguration.getProtocol()).isEqualTo(SecurityProtocol.SSL);
92+
assertThat(testConfiguration.getConsumer().getTopics()).isEqualTo(Set.of("topic1", "topic2"));
93+
return true;
94+
});
95+
}
10396

104-
verify(context).getAttributeAsList("gravitee.attributes.endpoint.test.consumer.topics");
105-
verify(context).setInternalAttribute(anyString(), any(TestConfiguration.class));
97+
@Test
98+
public void should_cache_evaluated_configuration() {
99+
when(templateEngine.eval("none", String.class)).thenReturn(Maybe.just("latest"));
100+
var context = new ExecutionContext(
101+
templateEngine,
102+
Map.ofEntries(
103+
Map.entry("gravitee.attributes.endpoint.test.protocol", "SSL"),
104+
Map.entry("gravitee.attributes.endpoint.test.consumer.topics", "topic1,topic2")
105+
)
106+
);
107+
evaluator
108+
.eval(context)
109+
.test()
110+
.assertComplete()
111+
.assertValue(testConfiguration -> {
112+
assertThat(testConfiguration.getConsumer().getAutoOffsetReset()).isEqualTo("latest");
113+
assertThat(testConfiguration.getProtocol()).isEqualTo(SecurityProtocol.SSL);
114+
assertThat(testConfiguration.getConsumer().getTopics()).isEqualTo(Set.of("topic1", "topic2"));
115+
116+
assertThat(context.getInternalAttributes().values()).hasSize(1).containsExactly(testConfiguration);
117+
return true;
118+
});
106119
}
107120

108121
@Test
109122
public void should_return_evaluated_configuration_from_internal_attribute() {
110-
TestConfiguration configuration = new TestConfiguration();
111-
configuration.getConsumer().setAutoOffsetReset("earliest");
112-
when(context.getInternalAttribute(anyString())).thenReturn(configuration);
113-
114-
TestObserver<TestConfiguration> testObserver = evaluator.eval(context).test();
115-
116-
testObserver.assertComplete();
117-
118-
testObserver.assertValue(testConfiguration -> {
119-
assertThat(testConfiguration.getConsumer().getAutoOffsetReset()).isEqualTo("earliest");
120-
return true;
121-
});
122-
123-
verify(context, times(0)).setInternalAttribute(anyString(), any(TestConfiguration.class));
123+
var spiedContext = spy(new ExecutionContext());
124+
TestConfiguration expectedConfiguration = new TestConfiguration();
125+
when(spiedContext.getInternalAttribute(anyString())).thenReturn(expectedConfiguration);
126+
127+
evaluator
128+
.eval(spiedContext)
129+
.test()
130+
.assertComplete()
131+
.assertValue(testConfiguration -> {
132+
assertThat(testConfiguration).isSameAs(expectedConfiguration);
133+
return true;
134+
});
135+
136+
verify(spiedContext, times(0)).setInternalAttribute(anyString(), any(TestConfiguration.class));
124137
}
125138
}

0 commit comments

Comments
 (0)