Skip to content

Commit 9635a41

Browse files
committed
Merge branch 'main' into wied03/ENG-2375/unused_vars
# Conflicts: # build.savant
2 parents f5963f6 + 7d598cd commit 9635a41

File tree

5 files changed

+316
-30
lines changed

5 files changed

+316
-30
lines changed
Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
/*
2+
* Copyright (c) 2025, Inversoft Inc., All Rights Reserved
3+
*
4+
* Licensed under the Apache License, Version 2.0 (the "License");
5+
* you may not use this file except in compliance with the License.
6+
* You may obtain a copy of the License at
7+
*
8+
* http://www.apache.org/licenses/LICENSE-2.0
9+
*
10+
* Unless required by applicable law or agreed to in writing,
11+
* software distributed under the License is distributed on an
12+
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
13+
* either express or implied. See the License for the specific
14+
* language governing permissions and limitations under the License.
15+
*/
16+
package org.example.action;
17+
18+
import org.example.action.store.BaseStoreAction;
19+
import org.primeframework.mvc.action.annotation.Action;
20+
import org.primeframework.mvc.action.result.annotation.Forward;
21+
import org.primeframework.mvc.action.result.annotation.Redirect;
22+
import org.primeframework.mvc.action.result.annotation.Status;
23+
24+
/**
25+
* @author Daniel DeGroff
26+
*/
27+
@Action("{action}/{counter}")
28+
@Redirect(code = "redirect", uri = "/router/redirect/${counter}")
29+
@Status(code = "stop")
30+
@Forward.List({
31+
@Forward(code = "submit-form", page = "/submit-form.ftl"),
32+
@Forward(code = "meta-refresh", page = "/meta-refresh.ftl")
33+
})
34+
public class RouterAction extends BaseStoreAction {
35+
public String action;
36+
37+
public int counter;
38+
39+
public String uri;
40+
41+
public String get() {
42+
if ("redirect".equals(action)) {
43+
counter++;
44+
return counter < 6
45+
? "redirect"
46+
: "stop";
47+
}
48+
49+
uri = "/router/redirect/" + counter;
50+
51+
if ("submit-form".equals(action)) {
52+
return "submit-form";
53+
}
54+
55+
if ("meta-refresh".equals(action)) {
56+
return "meta-refresh";
57+
}
58+
59+
throw new IllegalStateException();
60+
}
61+
}

src/test/java/org/primeframework/mvc/GlobalTest.java

Lines changed: 158 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)