@@ -1245,6 +1245,164 @@ public void get_redirect_withActual() throws Exception {
12451245 .with ("bing" , "bam" )));
12461246 }
12471247
1248+ @ Test
1249+ public void get_redirects_nested () throws Exception {
1250+ // See if we can nest many redirects
1251+ test .simulate (() -> simulator
1252+ .test ("/router/redirect" )
1253+ .get ()
1254+ .assertStatusCode (302 )
1255+ .assertRedirect ("/router/redirect/1" )
1256+ .followRedirect (r1 -> r1
1257+ .assertStatusCode (302 )
1258+ .assertRedirect ("/router/redirect/2" )
1259+ .followRedirect (r2 -> r2
1260+ .assertStatusCode (302 )
1261+ .assertRedirect ("/router/redirect/3" )
1262+ .followRedirect (r3 -> r3
1263+ .assertStatusCode (302 )
1264+ .assertRedirect ("/router/redirect/4" )
1265+ .followRedirect (r4 -> r4
1266+ .assertStatusCode (302 )
1267+ .assertRedirect ("/router/redirect/5" )
1268+ .followRedirect (r5 -> r5
1269+ .assertStatusCode (200 )
1270+ .assertBodyIsEmpty ()))))));
1271+
1272+ // See if we can be more civilized and come back out to the top level as well
1273+ test .simulate (() -> simulator
1274+ .test ("/router/redirect" )
1275+ .get ()
1276+ .assertStatusCode (302 )
1277+ .assertRedirect ("/router/redirect/1" )
1278+ .followRedirect (r1 -> r1
1279+ .assertStatusCode (302 )
1280+ .assertRedirect ("/router/redirect/2" ))
1281+ .followRedirect (r2 -> r2
1282+ .assertStatusCode (302 )
1283+ .assertRedirect ("/router/redirect/3" ))
1284+ .followRedirect (r3 -> r3
1285+ .assertStatusCode (302 )
1286+ .assertRedirect ("/router/redirect/4" ))
1287+ .followRedirect (r4 -> r4
1288+ .assertStatusCode (302 )
1289+ .assertRedirect ("/router/redirect/5" ))
1290+ .followRedirect (r5 -> r5
1291+ .assertStatusCode (200 )
1292+ .assertBodyIsEmpty ())
1293+ );
1294+
1295+ // Mix it up, go deep but not all the way
1296+ test .simulate (() -> simulator
1297+ .test ("/router/redirect/" )
1298+ .get ()
1299+ .assertStatusCode (302 )
1300+ .assertRedirect ("/router/redirect/1" )
1301+ .followRedirect (r1 -> r1
1302+ .assertStatusCode (302 )
1303+ .assertRedirect ("/router/redirect/2" )
1304+ .followRedirect (r2 -> r2
1305+ .assertStatusCode (302 )
1306+ .assertRedirect ("/router/redirect/3" )
1307+ .followRedirect (r3 -> r3
1308+ .assertStatusCode (302 )
1309+ .assertRedirect ("/router/redirect/4" )
1310+ .followRedirect (r4 -> r4
1311+ .assertStatusCode (302 )
1312+ .assertRedirect ("/router/redirect/5" )))))
1313+ .followRedirect (r5 -> r5
1314+ .assertStatusCode (200 )
1315+ .assertBodyIsEmpty ())
1316+ );
1317+
1318+ // Mix in a submitForm
1319+ test .simulate (() -> simulator
1320+ .test ("/router/submit-form" )
1321+ .get ()
1322+ .assertStatusCode (200 )
1323+ .assertHTML (html -> html .assertElementExists ("form" ))
1324+ .submitForm ("form" , r1 -> r1
1325+ .assertStatusCode (302 )
1326+ .assertRedirect ("/router/redirect/1" )
1327+ .followRedirect (r2 -> r2
1328+ .assertStatusCode (302 )
1329+ .assertRedirect ("/router/redirect/2" )
1330+ .followRedirect (r3 -> r3
1331+ .assertStatusCode (302 )
1332+ .assertRedirect ("/router/redirect/3" )
1333+ .followRedirect (r4 -> r4
1334+ .assertStatusCode (302 )
1335+ .assertRedirect ("/router/redirect/4" )
1336+ .followRedirect (r5 -> r5
1337+ .assertStatusCode (302 )
1338+ .assertRedirect ("/router/redirect/5" )))))
1339+ .followRedirect (r6 -> r6
1340+ .assertStatusCode (200 )
1341+ .assertBodyIsEmpty ())
1342+ )
1343+ );
1344+
1345+ // Mix in a metaRefresh
1346+ test .simulate (() -> simulator
1347+ .test ("/router/meta-refresh" )
1348+ .get ()
1349+ .assertStatusCode (200 )
1350+ .assertHTML (html -> html .assertElementExists ("meta[http-equiv=Refresh]" ))
1351+ .followMetaRefresh (r1 -> r1
1352+ .assertStatusCode (302 )
1353+ .assertRedirect ("/router/redirect/1" )
1354+ .followRedirect (r2 -> r2
1355+ .assertStatusCode (302 )
1356+ .assertRedirect ("/router/redirect/2" )
1357+ .followRedirect (r3 -> r3
1358+ .assertStatusCode (302 )
1359+ .assertRedirect ("/router/redirect/3" ))
1360+ .followRedirect (r4 -> r4
1361+ .assertStatusCode (302 )
1362+ .assertRedirect ("/router/redirect/4" )
1363+ .followRedirect (r5 -> r5
1364+ .assertStatusCode (302 )
1365+ .assertRedirect ("/router/redirect/5" ))))
1366+ .followRedirect (r6 -> r6
1367+ .assertStatusCode (200 )
1368+ .assertBodyIsEmpty ())
1369+ )
1370+ );
1371+
1372+ // Perform assertions on top-level
1373+ test .simulate (() -> simulator
1374+ .test ("/router/meta-refresh" )
1375+ .get ()
1376+ .assertStatusCode (200 )
1377+ .assertHTML (html -> html .assertElementExists ("meta[http-equiv=Refresh]" ))
1378+
1379+ // top-level
1380+ .followMetaRefresh ()
1381+ .assertStatusCode (302 )
1382+ .assertRedirect ("/router/redirect/1" )
1383+
1384+ // nested
1385+ .followRedirect (r2 -> r2
1386+ .assertStatusCode (302 )
1387+ .assertRedirect ("/router/redirect/2" )
1388+ .followRedirect ()
1389+ .assertStatusCode (302 )
1390+ .assertRedirect ("/router/redirect/3" ))
1391+ .followRedirect (r4 -> r4
1392+ .assertStatusCode (302 )
1393+ .assertRedirect ("/router/redirect/4" )
1394+ .followRedirect (r5 -> r5
1395+ .assertStatusCode (302 )
1396+ .assertRedirect ("/router/redirect/5" )))
1397+
1398+ // top-level
1399+ .followRedirect ()
1400+ .assertStatusCode (200 )
1401+ .assertBodyIsEmpty ()
1402+
1403+ );
1404+ }
1405+
12481406 @ Test
12491407 public void get_secure () throws Exception {
12501408 test .simulate (() -> simulator .test ("/secure" )
0 commit comments