Skip to content

Commit 3d2b9cc

Browse files
committed
Allow multile urls for acceptance-test
1 parent 665b424 commit 3d2b9cc

File tree

1 file changed

+82
-60
lines changed

1 file changed

+82
-60
lines changed

acceptance-test/src/main/java/io/quarkus/code/testing/AcceptanceTestApp.java

Lines changed: 82 additions & 60 deletions
Original file line numberDiff line numberDiff line change
@@ -3,34 +3,28 @@
33
import com.microsoft.playwright.Browser;
44
import com.microsoft.playwright.BrowserContext;
55
import com.microsoft.playwright.BrowserType;
6-
import com.microsoft.playwright.Download;
76
import com.microsoft.playwright.ElementHandle;
8-
import com.microsoft.playwright.Mouse;
97
import com.microsoft.playwright.Page;
108
import com.microsoft.playwright.Playwright;
11-
import com.microsoft.playwright.Playwright.CreateOptions;
9+
import com.microsoft.playwright.Response;
1210
import io.quarkus.runtime.QuarkusApplication;
1311
import io.quarkus.runtime.annotations.QuarkusMain;
1412
import io.smallrye.config.ConfigMapping;
1513
import io.smallrye.config.WithName;
16-
import org.slf4j.Logger;
17-
import org.slf4j.LoggerFactory;
14+
import org.jboss.logging.Logger;
1815

1916
import java.io.IOException;
2017
import java.nio.file.Files;
2118
import java.nio.file.Path;
2219
import java.util.List;
23-
import java.util.Locale;
24-
import java.util.Map;
2520
import java.util.Optional;
26-
import java.util.concurrent.CountDownLatch;
2721

2822
@QuarkusMain
2923
public class AcceptanceTestApp implements QuarkusApplication {
3024

3125
public static final String DEFAULT_URL = "https://stage.code.quarkus.io";
3226

33-
private static final Logger LOG = LoggerFactory.getLogger(AcceptanceTestApp.class);
27+
private static final Logger LOG = Logger.getLogger(AcceptanceTestApp.class);
3428

3529
private static final String GENERATE_YOUR_APPLICATION_TEXT = "generate your application";
3630
public static final String LABEL_TOGGLE_FULL_LIST = "[aria-label='Toggle full list of extensions']";
@@ -54,73 +48,101 @@ public int run(String... args) throws Exception {
5448
// Open new page
5549
Page page = context.newPage();
5650
final String url = testConfig.getUrl().orElse(DEFAULT_URL);
57-
LOG.info("Navigating to {}", url);
58-
page.navigate(url);
59-
final ElementHandle generateButton = page.waitForSelector(".generate-button");
60-
if (!generateButton.textContent().toLowerCase().contains(GENERATE_YOUR_APPLICATION_TEXT)) {
61-
LOG.error("{} was not found", GENERATE_YOUR_APPLICATION_TEXT);
62-
return 1;
51+
if (url.contains(",")) {
52+
var urls = url.split(",");
53+
for (String u : urls) {
54+
final int x = testUrl(u.trim(), page);
55+
if (x != 0)
56+
return x;
57+
}
6358
} else {
64-
LOG.info("Generate button found: {}", generateButton.textContent());
59+
final int x = testUrl(url.trim(), page);
60+
if (x != 0)
61+
return x;
6562
}
6663

67-
final ElementHandle startCodingBlurbButton = page.waitForSelector(".quarkus-blurb .btn-secondary");
68-
LOG.info("Click on start coding");
69-
startCodingBlurbButton.click();
64+
LOG.info("ACCEPTANCE TEST PASSED");
65+
}
66+
return 0;
67+
}
7068

71-
final ElementHandle streamPicker = page.waitForSelector(".stream-picker");
72-
LOG.info("Click on stream-picker");
73-
streamPicker.click();
69+
private int testUrl(String url, Page page) {
70+
LOG.infof("Navigating to %s", url);
71+
page.navigate(url);
72+
final ElementHandle generateButton = page.waitForSelector(".generate-button");
73+
if (!generateButton.textContent().toLowerCase().contains(GENERATE_YOUR_APPLICATION_TEXT)) {
74+
LOG.errorf("%s was not found", GENERATE_YOUR_APPLICATION_TEXT);
75+
return 1;
76+
} else {
77+
LOG.infof("Generate button found: %s", generateButton.textContent());
78+
}
7479

75-
final List<ElementHandle> streams = page.querySelectorAll(".stream-picker .dropdown-menu .dropdown-item");
76-
final Integer minStreams = testConfig.getMinStreams().orElse(DEFAULT_MIN_STREAMS);
80+
final ElementHandle startCodingBlurbButton = page.waitForSelector(".quarkus-blurb .btn-secondary");
81+
LOG.info("Click on start coding");
82+
startCodingBlurbButton.click();
7783

78-
if (streams.size() < minStreams) {
79-
LOG.error("{} streams found is low than minimum requirement: {}", streams.size(), minStreams);
80-
return 1;
81-
} else {
82-
LOG.info("{} streams found", streams.size());
83-
}
84-
page.waitForSelector(LABEL_TOGGLE_FULL_LIST).click();
85-
page.waitForSelector(".extensions-picker .extension-row");
86-
final List<ElementHandle> extensions = page.querySelectorAll(".extensions-picker .extension-row");
87-
final Integer minExtensions = testConfig.getMinExtensions().orElse(DEFAULT_MIN_EXTENSIONS);
88-
89-
if (extensions.size() < minExtensions) {
90-
LOG.error("{} extensions found is low than minimum requirement: {}", extensions.size(), minExtensions);
91-
return 1;
92-
} else {
93-
LOG.info("{} extensions found", extensions.size());
94-
}
95-
LOG.info("Click on first extensions");
96-
extensions.get(0).click(new ElementHandle.ClickOptions().setForce(true));
84+
final ElementHandle streamPicker = page.waitForSelector(".stream-picker");
85+
LOG.info("Click on stream-picker");
86+
streamPicker.click();
9787

98-
LOG.info("Click on second extensions");
99-
extensions.get(1).click(new ElementHandle.ClickOptions().setForce(true));
88+
final List<ElementHandle> streams = page.querySelectorAll(".stream-picker .dropdown-menu .dropdown-item");
89+
final Integer minStreams = testConfig.getMinStreams().orElse(DEFAULT_MIN_STREAMS);
10090

101-
final ElementHandle extensionsCart = page.waitForSelector(".extensions-cart button");
102-
LOG.info("Focus on extensions-cart button");
103-
page.mouse().move(extensionsCart.boundingBox().x + 5, extensionsCart.boundingBox().y + 5);
91+
if (streams.size() < minStreams) {
92+
LOG.errorf("%s streams found is low than minimum requirement: %s", streams.size(), minStreams);
93+
return 1;
94+
} else {
95+
LOG.infof("%s streams found", streams.size());
96+
}
97+
page.waitForSelector(LABEL_TOGGLE_FULL_LIST).click();
98+
page.waitForSelector(".extensions-picker .extension-row");
99+
final List<ElementHandle> extensions = page.querySelectorAll(".extensions-picker .extension-row");
100+
final Integer minExtensions = testConfig.getMinExtensions().orElse(DEFAULT_MIN_EXTENSIONS);
101+
102+
if (extensions.size() < minExtensions) {
103+
LOG.errorf("%s extensions found is low than minimum requirement: %s", extensions.size(), minExtensions);
104+
return 1;
105+
} else {
106+
LOG.infof("%s extensions found", extensions.size());
107+
}
108+
LOG.info("Click on first extensions");
109+
extensions.get(0).click(new ElementHandle.ClickOptions().setForce(true));
104110

105-
final List<ElementHandle> selected = page.querySelectorAll(".selected-extensions .extension-row");
111+
LOG.info("Click on second extensions");
112+
extensions.get(1).click(new ElementHandle.ClickOptions().setForce(true));
106113

107-
if (selected.size() != 2) {
108-
LOG.error("{} extensions selected instead of 2", selected.size());
109-
return 1;
110-
} else {
111-
LOG.info("{} extensions selected", selected.size());
112-
}
114+
final ElementHandle extensionsCart = page.waitForSelector(".extensions-cart button");
115+
LOG.info("Focus on extensions-cart button");
116+
page.mouse().move(extensionsCart.boundingBox().x + 5, extensionsCart.boundingBox().y + 5);
113117

114-
LOG.info("Click on generate button");
115-
generateButton.click();
118+
final List<ElementHandle> selected = page.querySelectorAll(".selected-extensions .extension-row");
119+
120+
if (selected.size() != 2) {
121+
LOG.errorf("%s extensions selected instead of 2", selected.size());
122+
return 1;
123+
} else {
124+
LOG.infof("%s extensions selected", selected.size());
125+
}
116126

117-
final ElementHandle downloadButton = page.waitForSelector(LABEL_DOWNLOAD_THE_ZIP);
127+
LOG.info("Click on generate button");
128+
generateButton.click();
118129

130+
final ElementHandle downloadButton = page.waitForSelector(LABEL_DOWNLOAD_THE_ZIP);
131+
132+
Response response = page.waitForResponse(resp -> resp.url().contains("/d") && resp.status() == 200, () -> {
119133
LOG.info("Click on download button");
120134
downloadButton.click();
121-
122-
LOG.info("ACCEPTANCE TEST PASSED");
135+
});
136+
137+
String contentType = response.headerValue("Content-Type");
138+
if (contentType != null && contentType.contains("zip")) {
139+
LOG.info("Download link returned 200 and is a ZIP file");
140+
} else {
141+
LOG.error("Download link did not return a ZIP file");
142+
return 1;
123143
}
144+
145+
LOG.infof("ACCEPTANCE TEST PASSED FOR %s", url);
124146
return 0;
125147
}
126148

0 commit comments

Comments
 (0)