Skip to content

Commit afbe07f

Browse files
Merge pull request #57 from ithsjava25/fix/filter-pipeline-tests
Add missing tests for configurable filter pipeline
2 parents a9a12bf + 9bc1eed commit afbe07f

File tree

1 file changed

+98
-9
lines changed

1 file changed

+98
-9
lines changed

src/test/java/org/example/server/ConfigurableFilterPipelineTest.java

Lines changed: 98 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ void global_filter_runs() {
1414

1515
List<String> events = new ArrayList<>();
1616

17-
HttpFilter filter = new TestFilter(events, false);
17+
HttpFilter filter = new TestFilter("g1", events, false);
1818

1919
List<FilterRegistration> regs = List.of(
2020
new FilterRegistration(filter, 1, null)
@@ -29,7 +29,7 @@ void global_filter_runs() {
2929
);
3030

3131
assertEquals(
32-
List.of("filter", "handler"),
32+
List.of("g1", "handler"),
3333
events
3434
);
3535
}
@@ -39,7 +39,7 @@ void filter_can_stop_chain() {
3939

4040
List<String> events = new ArrayList<>();
4141

42-
HttpFilter stopFilter = new TestFilter(events, true);
42+
HttpFilter stopFilter = new TestFilter("stop", events, true);
4343

4444
List<FilterRegistration> regs = List.of(
4545
new FilterRegistration(stopFilter, 1, null)
@@ -54,27 +54,116 @@ void filter_can_stop_chain() {
5454
);
5555

5656
assertEquals(403, response.getStatusCode());
57-
assertEquals(List.of("filter"), events);
57+
assertEquals(List.of("stop"), events);
58+
}
59+
60+
@Test
61+
void route_specific_filter_runs_when_path_matches() {
62+
List<String> events = new ArrayList<>();
63+
64+
HttpFilter routeFilter = new TestFilter("r1", events, false);
65+
66+
List<FilterRegistration> regs = List.of(
67+
new FilterRegistration(routeFilter, 1, List.of("/api/*"))
68+
);
69+
70+
ConfigurableFilterPipeline pipeline =
71+
new ConfigurableFilterPipeline(regs);
72+
73+
pipeline.execute(
74+
new HttpRequest("GET", "/api/users"),
75+
new TestHandler(events)
76+
);
77+
78+
assertEquals(List.of("r1", "handler"), events);
79+
}
80+
81+
@Test
82+
void route_specific_filter_is_skipped_when_path_does_not_match() {
83+
List<String> events = new ArrayList<>();
84+
85+
HttpFilter routeFilter = new TestFilter("r1", events, false);
86+
87+
List<FilterRegistration> regs = List.of(
88+
new FilterRegistration(routeFilter, 1, List.of("/api/*"))
89+
);
90+
91+
ConfigurableFilterPipeline pipeline =
92+
new ConfigurableFilterPipeline(regs);
93+
94+
pipeline.execute(
95+
new HttpRequest("GET", "/public"),
96+
new TestHandler(events)
97+
);
98+
99+
assertEquals(List.of("handler"), events);
100+
}
101+
102+
@Test
103+
void mixed_pipeline_runs_global_then_route_then_handler() {
104+
List<String> events = new ArrayList<>();
105+
106+
HttpFilter global = new TestFilter("g1", events, false);
107+
HttpFilter route = new TestFilter("r1", events, false);
108+
109+
List<FilterRegistration> regs = List.of(
110+
new FilterRegistration(global, 1, null),
111+
new FilterRegistration(route, 1, List.of("/api/*"))
112+
);
113+
114+
ConfigurableFilterPipeline pipeline =
115+
new ConfigurableFilterPipeline(regs);
116+
117+
pipeline.execute(
118+
new HttpRequest("GET", "/api/users"),
119+
new TestHandler(events)
120+
);
121+
122+
assertEquals(List.of("g1", "r1", "handler"), events);
123+
}
124+
125+
@Test
126+
void ordering_is_by_order_field() {
127+
List<String> events = new ArrayList<>();
128+
129+
HttpFilter f20 = new TestFilter("f20", events, false);
130+
HttpFilter f10 = new TestFilter("f10", events, false);
131+
HttpFilter f30 = new TestFilter("f30", events, false);
132+
133+
List<FilterRegistration> regs = List.of(
134+
new FilterRegistration(f20, 20, null),
135+
new FilterRegistration(f10, 10, null),
136+
new FilterRegistration(f30, 30, null)
137+
);
138+
139+
ConfigurableFilterPipeline pipeline =
140+
new ConfigurableFilterPipeline(regs);
141+
142+
pipeline.execute(
143+
new HttpRequest("GET", "/home"),
144+
new TestHandler(events)
145+
);
146+
147+
assertEquals(List.of("f10", "f20", "f30", "handler"), events);
58148
}
59149

60-
// =====================
61-
// Test helper classes
62-
// =====================
63150

64151
static class TestFilter implements HttpFilter {
65152

153+
private final String name;
66154
private final List<String> events;
67155
private final boolean stop;
68156

69-
TestFilter(List<String> events, boolean stop) {
157+
TestFilter(String name, List<String> events, boolean stop) {
158+
this.name = name;
70159
this.events = events;
71160
this.stop = stop;
72161
}
73162

74163
@Override
75164
public HttpResponse handle(HttpRequest request, FilterChain chain) {
76165

77-
events.add("filter");
166+
events.add(name);
78167

79168
if (stop) {
80169
return new HttpResponse(403, "Stopped");

0 commit comments

Comments
 (0)