From 84d17066ace0bcd214cbda92a461096cd61bcca2 Mon Sep 17 00:00:00 2001 From: sosokker Date: Tue, 14 May 2024 04:49:44 +0700 Subject: [PATCH] Add end-to-end test using playwright --- frontend/src/pages/Dashboard/Statistic.tsx | 2 +- frontend/tests/test-camera.spec.ts | 19 +++++++++++ frontend/tests/test-prediction.spec.ts | 38 ++++++++++++++++++++++ frontend/tests/test-recommend.spec.ts | 8 +++++ frontend/tests/test-snapshot.spec.ts | 10 ++++++ 5 files changed, 76 insertions(+), 1 deletion(-) create mode 100644 frontend/tests/test-camera.spec.ts create mode 100644 frontend/tests/test-prediction.spec.ts create mode 100644 frontend/tests/test-recommend.spec.ts create mode 100644 frontend/tests/test-snapshot.spec.ts diff --git a/frontend/src/pages/Dashboard/Statistic.tsx b/frontend/src/pages/Dashboard/Statistic.tsx index c073fa2..900c156 100644 --- a/frontend/src/pages/Dashboard/Statistic.tsx +++ b/frontend/src/pages/Dashboard/Statistic.tsx @@ -93,7 +93,7 @@ const Statistic: React.FC = () => { {/* Recommendation Card */} -
+
{ + await page.goto('http://localhost:5173/'); + await page.getByRole('link', { name: 'Camera' }).click(); + await page.getByRole('combobox').selectOption('2'); + await page.getByRole('button', { name: 'Start Connection' }).click(); + await page.waitForSelector('text=Loading...'); + const loadingText = await page.$('text=Loading...'); + expect(loadingText).not.toBeNull(); + + // await page.waitForSelector('text=Loading...', { state: 'hidden' }); + // const hiddenLoadingText = await page.$('text=Loading...'); + // expect(hiddenLoadingText).toBeNull(); + + await page.waitForSelector('canvas'); + const canvas = await page.$('canvas'); + expect(canvas).not.toBeNull(); +}); diff --git a/frontend/tests/test-prediction.spec.ts b/frontend/tests/test-prediction.spec.ts new file mode 100644 index 0000000..1005516 --- /dev/null +++ b/frontend/tests/test-prediction.spec.ts @@ -0,0 +1,38 @@ +import { test, expect } from '@playwright/test'; + +test('test', async ({ page }) => { + await page.goto('http://localhost:5173/'); + + // Check if elements with specific text exist on the page + const outdoorTempElement = await page + .locator('span') + .getByText(/^Outdoor Temperature$/) + .first(); + const outdoorHumidityElement = await page + .locator('span') + .getByText(/^Outdoor Humidity$/) + .first(); + const outdoorPM25Element = await page + .locator('span') + .getByText(/^Outdoor PM2.5$/) + .first(); + const outdoorPM10Element = await page + .locator('span') + .getByText(/^Outdoor PM10$/) + .first(); + const indoorTempElement = await page + .locator('span') + .getByText(/^Indoor Temperature$/) + .first(); + const indoorLightElement = await page + .locator('span') + .getByText(/^Indoor Light$/) + .first(); + + expect(outdoorTempElement).not.toBeNull(); + expect(outdoorHumidityElement).not.toBeNull(); + expect(outdoorPM25Element).not.toBeNull(); + expect(outdoorPM10Element).not.toBeNull(); + expect(indoorTempElement).not.toBeNull(); + expect(indoorLightElement).not.toBeNull(); +}); diff --git a/frontend/tests/test-recommend.spec.ts b/frontend/tests/test-recommend.spec.ts new file mode 100644 index 0000000..5ef946c --- /dev/null +++ b/frontend/tests/test-recommend.spec.ts @@ -0,0 +1,8 @@ +import { test, expect } from '@playwright/test'; + +test('test', async ({ page }) => { + await page.goto('http://localhost:5173/'); + + const alertContainer = await page.waitForSelector('#alert-container'); + expect(alertContainer).not.toBeNull(); +}); diff --git a/frontend/tests/test-snapshot.spec.ts b/frontend/tests/test-snapshot.spec.ts new file mode 100644 index 0000000..d4ac36c --- /dev/null +++ b/frontend/tests/test-snapshot.spec.ts @@ -0,0 +1,10 @@ +import { test, expect } from '@playwright/test'; + +test('test', async ({ page }) => { + await page.goto('http://localhost:5173/'); + await page.getByRole('link', { name: 'Snapshot' }).click(); + await page.getByRole('button', { name: 'Today' }).click(); + const image = await page.waitForSelector('img'); + + expect(image).not.toBeNull(); +});