From b13236cd38331f202833536b6519ea87a07d8720 Mon Sep 17 00:00:00 2001 From: Evan Almloff Date: Wed, 10 Jul 2024 21:43:02 +0200 Subject: [PATCH] Add a playwright test that checks static generation (#2608) * add a playwright test that checks static generation * add playwright-static-generation to the workspace * fix static-generation name in CLI --- Cargo.lock | 9 ++++++ Cargo.toml | 1 + packages/cli-config/src/config.rs | 2 +- .../playwright-tests/playwright.config.js | 9 ++++++ .../static-generation.spec.js | 21 ++++++++++++++ .../static-generation/.gitignore | 3 ++ .../static-generation/Cargo.toml | 17 +++++++++++ .../static-generation/src/main.rs | 29 +++++++++++++++++++ 8 files changed, 90 insertions(+), 1 deletion(-) create mode 100644 packages/playwright-tests/static-generation.spec.js create mode 100644 packages/playwright-tests/static-generation/.gitignore create mode 100644 packages/playwright-tests/static-generation/Cargo.toml create mode 100644 packages/playwright-tests/static-generation/src/main.rs diff --git a/Cargo.lock b/Cargo.lock index 1c129eb7d..1d47e6a42 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2704,6 +2704,15 @@ dependencies = [ "tokio", ] +[[package]] +name = "dioxus-playwright-static-generation-test" +version = "0.1.0" +dependencies = [ + "dioxus", + "serde", + "tokio", +] + [[package]] name = "dioxus-playwright-web-test" version = "0.0.1" diff --git a/Cargo.toml b/Cargo.toml index ff2061dc8..3ff3bf75c 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -46,6 +46,7 @@ members = [ # Playwright tests "packages/playwright-tests/liveview", "packages/playwright-tests/web", + "packages/playwright-tests/static-generation", "packages/playwright-tests/fullstack", "packages/playwright-tests/suspense-carousel", "packages/playwright-tests/nested-suspense", diff --git a/packages/cli-config/src/config.rs b/packages/cli-config/src/config.rs index 7ca0e1f3b..6ed1e669b 100644 --- a/packages/cli-config/src/config.rs +++ b/packages/cli-config/src/config.rs @@ -24,7 +24,7 @@ pub enum Platform { Fullstack, /// Targeting the static generation platform using SSR and Dioxus-Fullstack - #[cfg_attr(feature = "cli", clap(name = "fullstack"))] + #[cfg_attr(feature = "cli", clap(name = "static-generation"))] #[serde(rename = "static-generation")] StaticGeneration, } diff --git a/packages/playwright-tests/playwright.config.js b/packages/playwright-tests/playwright.config.js index 26f571951..daf7cf643 100644 --- a/packages/playwright-tests/playwright.config.js +++ b/packages/playwright-tests/playwright.config.js @@ -89,6 +89,15 @@ module.exports = defineConfig({ reuseExistingServer: !process.env.CI, stdout: "pipe", }, + { + cwd: path.join(process.cwd(), "static-generation"), + command: + 'cargo run --package dioxus-cli --release -- serve --force-sequential --platform static-generation --addr "127.0.0.1" --port 2222', + port: 2222, + timeout: 30 * 60 * 1000, + reuseExistingServer: !process.env.CI, + stdout: "pipe", + }, { cwd: path.join(process.cwd(), "fullstack"), command: diff --git a/packages/playwright-tests/static-generation.spec.js b/packages/playwright-tests/static-generation.spec.js new file mode 100644 index 000000000..9a4f03911 --- /dev/null +++ b/packages/playwright-tests/static-generation.spec.js @@ -0,0 +1,21 @@ +// @ts-check +const { test, expect } = require("@playwright/test"); + +test("button click", async ({ page }) => { + await page.goto("http://localhost:2222"); + await page.waitForTimeout(1000); + + // Expect the page to contain the counter text. + const main = page.locator("#main"); + await expect(main).toContainText("hello axum! 12345"); + + // Expect the page to contain the server data + await expect(main).toContainText('Server said: Ok("Hello from the server!")'); + + // Click the increment button. + let button = page.locator("button.increment-button"); + await button.click(); + + // Expect the page to contain the updated counter text. + await expect(main).toContainText("hello axum! 12346"); +}); diff --git a/packages/playwright-tests/static-generation/.gitignore b/packages/playwright-tests/static-generation/.gitignore new file mode 100644 index 000000000..4a7bcb809 --- /dev/null +++ b/packages/playwright-tests/static-generation/.gitignore @@ -0,0 +1,3 @@ +.dioxus +dist +target \ No newline at end of file diff --git a/packages/playwright-tests/static-generation/Cargo.toml b/packages/playwright-tests/static-generation/Cargo.toml new file mode 100644 index 000000000..42456a7f9 --- /dev/null +++ b/packages/playwright-tests/static-generation/Cargo.toml @@ -0,0 +1,17 @@ +[package] +name = "dioxus-playwright-static-generation-test" +version = "0.1.0" +edition = "2021" +publish = false + +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html + +[dependencies] +dioxus = { workspace = true, features = ["fullstack"] } +serde = "1.0.159" +tokio = { workspace = true, features = ["full"], optional = true } + +[features] +default = [] +server = ["dioxus/axum", "tokio"] +web = ["dioxus/web"] diff --git a/packages/playwright-tests/static-generation/src/main.rs b/packages/playwright-tests/static-generation/src/main.rs new file mode 100644 index 000000000..b868e8970 --- /dev/null +++ b/packages/playwright-tests/static-generation/src/main.rs @@ -0,0 +1,29 @@ +// This test is used by playwright configured in the root of the repo +// Tests: +// - Static Generation +// - Simple Suspense +// - Hydration + +#![allow(non_snake_case)] +use dioxus::prelude::*; + +fn main() { + LaunchBuilder::static_generation().launch(app); +} + +fn app() -> Element { + let mut count = use_signal(|| 12345); + let server_data = use_server_future(get_server_data)?; + + rsx! { + h1 { "hello axum! {count}" } + button { class: "increment-button", onclick: move |_| count += 1, "Increment" } + "Server said: {server_data:?}" + } +} + +#[server(GetServerData)] +async fn get_server_data() -> Result { + tokio::time::sleep(std::time::Duration::from_millis(100)).await; + Ok("Hello from the server!".to_string()) +}