28
28
import org .springframework .test .web .reactive .server .WebTestClient ;
29
29
30
30
import java .time .Duration ;
31
- import java .util .Collections ;
31
+ import java .util .HashSet ;
32
32
import java .util .List ;
33
33
import java .util .Map ;
34
34
import java .util .Set ;
@@ -45,7 +45,7 @@ public class HeaderSpecTests {
45
45
46
46
HttpHeaders expectedHeaders = new HttpHeaders ();
47
47
48
- Set <String > ignoredHeaderNames = Collections . singleton ( HttpHeaders . CONTENT_TYPE );
48
+ Set <String > headerNamesNotPresent = new HashSet <>( );
49
49
50
50
@ Before
51
51
public void setup () {
@@ -67,25 +67,23 @@ public void headersWhenDefaultsThenAllDefaultsWritten() {
67
67
68
68
@ Test
69
69
public void headersWhenCacheDisableThenCacheNotWritten () {
70
- this .expectedHeaders .remove (HttpHeaders .CACHE_CONTROL );
71
- this .expectedHeaders .remove (HttpHeaders .PRAGMA );
72
- this .expectedHeaders .remove (HttpHeaders .EXPIRES );
70
+ expectHeaderNamesNotPresent (HttpHeaders .CACHE_CONTROL , HttpHeaders .PRAGMA , HttpHeaders .EXPIRES );
73
71
this .headers .cache ().disable ();
74
72
75
73
assertHeaders ();
76
74
}
77
75
78
76
@ Test
79
77
public void headersWhenContentOptionsDisableThenContentTypeOptionsNotWritten () {
80
- this . expectedHeaders . remove (ContentTypeOptionsServerHttpHeadersWriter .X_CONTENT_OPTIONS );
78
+ expectHeaderNamesNotPresent (ContentTypeOptionsServerHttpHeadersWriter .X_CONTENT_OPTIONS );
81
79
this .headers .contentTypeOptions ().disable ();
82
80
83
81
assertHeaders ();
84
82
}
85
83
86
84
@ Test
87
85
public void headersWhenHstsDisableThenHstsNotWritten () {
88
- this . expectedHeaders . remove (StrictTransportSecurityServerHttpHeadersWriter .STRICT_TRANSPORT_SECURITY );
86
+ expectHeaderNamesNotPresent (StrictTransportSecurityServerHttpHeadersWriter .STRICT_TRANSPORT_SECURITY );
89
87
this .headers .hsts ().disable ();
90
88
91
89
assertHeaders ();
@@ -103,30 +101,35 @@ public void headersWhenHstsCustomThenCustomHstsWritten() {
103
101
104
102
@ Test
105
103
public void headersWhenFrameOptionsDisableThenFrameOptionsNotWritten () {
106
- this . expectedHeaders . remove (XFrameOptionsServerHttpHeadersWriter .X_FRAME_OPTIONS );
104
+ expectHeaderNamesNotPresent (XFrameOptionsServerHttpHeadersWriter .X_FRAME_OPTIONS );
107
105
this .headers .frameOptions ().disable ();
108
106
109
107
assertHeaders ();
110
108
}
111
109
112
110
@ Test
113
111
public void headersWhenFrameOptionsModeThenFrameOptionsCustomMode () {
114
- this .expectedHeaders .remove (XFrameOptionsServerHttpHeadersWriter .X_FRAME_OPTIONS );
115
- this .expectedHeaders
116
- .add (XFrameOptionsServerHttpHeadersWriter .X_FRAME_OPTIONS , "SAMEORIGIN" );
112
+ this .expectedHeaders .set (XFrameOptionsServerHttpHeadersWriter .X_FRAME_OPTIONS , "SAMEORIGIN" );
117
113
this .headers .frameOptions ().mode (XFrameOptionsServerHttpHeadersWriter .Mode .SAMEORIGIN );
118
114
119
115
assertHeaders ();
120
116
}
121
117
122
118
@ Test
123
119
public void headersWhenXssProtectionDisableThenXssProtectionNotWritten () {
124
- this . expectedHeaders . remove ("X-Xss-Protection" );
120
+ expectHeaderNamesNotPresent ("X-Xss-Protection" );
125
121
this .headers .xssProtection ().disable ();
126
122
127
123
assertHeaders ();
128
124
}
129
125
126
+ private void expectHeaderNamesNotPresent (String ... headerNames ) {
127
+ for (String headerName : headerNames ) {
128
+ this .expectedHeaders .remove (headerName );
129
+ this .headerNamesNotPresent .add (headerName );
130
+ }
131
+ }
132
+
130
133
private void assertHeaders () {
131
134
WebTestClient client = buildClient ();
132
135
FluxExchangeResult <String > response = client .get ()
@@ -135,10 +138,12 @@ private void assertHeaders() {
135
138
.returnResult (String .class );
136
139
137
140
Map <String , List <String >> responseHeaders = response .getResponseHeaders ();
138
- this .ignoredHeaderNames .stream ().forEach (responseHeaders ::remove );
139
141
140
- assertThat (responseHeaders ).describedAs (response .toString ()).isEqualTo (
142
+ assertThat (responseHeaders ).describedAs (response .toString ()).containsAllEntriesOf (
141
143
this .expectedHeaders );
144
+ if (!this .headerNamesNotPresent .isEmpty ()) {
145
+ assertThat (responseHeaders .keySet ()).doesNotContainAnyElementsOf (this .headerNamesNotPresent );
146
+ }
142
147
}
143
148
144
149
private WebTestClient buildClient () {
0 commit comments