-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathSourceStrategyRegistryTest.java
More file actions
77 lines (63 loc) · 2.73 KB
/
Copy pathSourceStrategyRegistryTest.java
File metadata and controls
77 lines (63 loc) · 2.73 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
package com.openelements.content;
import static org.assertj.core.api.Assertions.assertThat;
import static org.assertj.core.api.Assertions.assertThatThrownBy;
import java.util.List;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;
/**
* Unit tests for {@link SourceStrategyRegistry} using lightweight test-double strategies.
*/
@DisplayName("Source strategy registry")
class SourceStrategyRegistryTest {
private static ContentSource source(SourceType type) {
return new ContentSource(
"s", type, "https://ex.com", List.of(), List.of("/**"), List.of(), "article", List.of(), true);
}
private static ContentSourceStrategy strategyFor(SourceType type) {
return new ContentSourceStrategy() {
@Override
public SourceType type() {
return type;
}
@Override
public List<DiscoveredItem> discover(ContentSource src) {
return List.of();
}
@Override
public FetchOutcome fetch(ContentSource src, DiscoveredItem item) {
return FetchOutcome.skip();
}
};
}
@Test
@DisplayName("a WEBSITE source resolves to the website strategy")
void websiteSourceResolvesToWebsiteStrategy() {
ContentSourceStrategy website = strategyFor(SourceType.WEBSITE);
SourceStrategyRegistry registry = new SourceStrategyRegistry(List.of(website));
assertThat(registry.forSource(source(SourceType.WEBSITE))).isSameAs(website);
}
@Test
@DisplayName("an unregistered type fails with a clear error naming the type")
void unknownTypeFailsClearly() {
SourceStrategyRegistry registry = new SourceStrategyRegistry(List.of(strategyFor(SourceType.WEBSITE)));
assertThatThrownBy(() -> registry.forSource(source(SourceType.GIT)))
.isInstanceOf(IllegalArgumentException.class)
.hasMessageContaining("GIT");
}
@Test
@DisplayName("an additional strategy bean is auto-discovered and indexed by its type")
void newStrategyIsAutoDiscovered() {
ContentSourceStrategy git = strategyFor(SourceType.GIT);
SourceStrategyRegistry registry =
new SourceStrategyRegistry(List.of(strategyFor(SourceType.WEBSITE), git));
assertThat(registry.forSource(source(SourceType.GIT))).isSameAs(git);
}
@Test
@DisplayName("two strategies for the same type fail fast")
void duplicateStrategiesFailFast() {
assertThatThrownBy(() -> new SourceStrategyRegistry(
List.of(strategyFor(SourceType.WEBSITE), strategyFor(SourceType.WEBSITE))))
.isInstanceOf(IllegalStateException.class)
.hasMessageContaining("WEBSITE");
}
}