@@ -113,11 +113,37 @@ mod tests {
113
113
use kuchiki:: traits:: TendrilSink ;
114
114
115
115
#[ test]
116
- fn check_404_page_content ( ) {
116
+ fn check_404_page_content_crate ( ) {
117
117
wrapper ( |env| {
118
118
let page = kuchiki:: parse_html ( ) . one (
119
119
env. frontend ( )
120
- . get ( "/page-which-doesnt-exist" )
120
+ . get ( "/crate-which-doesnt-exist" )
121
+ . send ( ) ?
122
+ . text ( ) ?,
123
+ ) ;
124
+ assert_eq ! ( page. select( "#crate-title" ) . unwrap( ) . count( ) , 1 ) ;
125
+ assert_eq ! (
126
+ page. select( "#crate-title" )
127
+ . unwrap( )
128
+ . next( )
129
+ . unwrap( )
130
+ . text_contents( ) ,
131
+ "The requested crate does not exist" ,
132
+ ) ;
133
+
134
+ Ok ( ( ) )
135
+ } ) ;
136
+ }
137
+
138
+ #[ test]
139
+ fn check_404_page_content_resource ( ) {
140
+ // Resources with a `.js` and `.ico` extension are special cased in the
141
+ // routes_handler which is currently run last. This means that `get("resource.exe")` will
142
+ // fail with a `no so such crate` instead of 'no such resource'
143
+ wrapper ( |env| {
144
+ let page = kuchiki:: parse_html ( ) . one (
145
+ env. frontend ( )
146
+ . get ( "/resource-which-doesnt-exist.js" )
121
147
. send ( ) ?
122
148
. text ( ) ?,
123
149
) ;
@@ -134,4 +160,66 @@ mod tests {
134
160
Ok ( ( ) )
135
161
} ) ;
136
162
}
163
+
164
+ #[ test]
165
+ fn check_404_page_content_not_semver_version ( ) {
166
+ wrapper ( |env| {
167
+ env. fake_release ( ) . name ( "dummy" ) . create ( ) ?;
168
+ let page =
169
+ kuchiki:: parse_html ( ) . one ( env. frontend ( ) . get ( "/dummy/not-semver" ) . send ( ) ?. text ( ) ?) ;
170
+ assert_eq ! ( page. select( "#crate-title" ) . unwrap( ) . count( ) , 1 ) ;
171
+ assert_eq ! (
172
+ page. select( "#crate-title" )
173
+ . unwrap( )
174
+ . next( )
175
+ . unwrap( )
176
+ . text_contents( ) ,
177
+ "The requested version does not exist" ,
178
+ ) ;
179
+
180
+ Ok ( ( ) )
181
+ } ) ;
182
+ }
183
+
184
+ #[ test]
185
+ fn check_404_page_content_nonexistent_version ( ) {
186
+ wrapper ( |env| {
187
+ env. fake_release ( ) . name ( "dummy" ) . version ( "1.0.0" ) . create ( ) ?;
188
+ let page = kuchiki:: parse_html ( ) . one ( env. frontend ( ) . get ( "/dummy/2.0" ) . send ( ) ?. text ( ) ?) ;
189
+ assert_eq ! ( page. select( "#crate-title" ) . unwrap( ) . count( ) , 1 ) ;
190
+ assert_eq ! (
191
+ page. select( "#crate-title" )
192
+ . unwrap( )
193
+ . next( )
194
+ . unwrap( )
195
+ . text_contents( ) ,
196
+ "The requested version does not exist" ,
197
+ ) ;
198
+
199
+ Ok ( ( ) )
200
+ } ) ;
201
+ }
202
+
203
+ #[ test]
204
+ fn check_404_page_content_any_version_all_yanked ( ) {
205
+ wrapper ( |env| {
206
+ env. fake_release ( )
207
+ . name ( "dummy" )
208
+ . version ( "1.0.0" )
209
+ . yanked ( true )
210
+ . create ( ) ?;
211
+ let page = kuchiki:: parse_html ( ) . one ( env. frontend ( ) . get ( "/dummy/*" ) . send ( ) ?. text ( ) ?) ;
212
+ assert_eq ! ( page. select( "#crate-title" ) . unwrap( ) . count( ) , 1 ) ;
213
+ assert_eq ! (
214
+ page. select( "#crate-title" )
215
+ . unwrap( )
216
+ . next( )
217
+ . unwrap( )
218
+ . text_contents( ) ,
219
+ "The requested version does not exist" ,
220
+ ) ;
221
+
222
+ Ok ( ( ) )
223
+ } ) ;
224
+ }
137
225
}
0 commit comments