diff --git a/.gitignore b/.gitignore index 5398281..a26fb19 100644 --- a/.gitignore +++ b/.gitignore @@ -37,4 +37,8 @@ yarn-error.log* next-env.d.ts exporting.* -buildDate.* \ No newline at end of file +buildDate.* +/test-results/ +/playwright-report/ +/blob-report/ +/playwright/.cache/ diff --git a/package-lock.json b/package-lock.json index b0e1fd2..30d35a2 100644 --- a/package-lock.json +++ b/package-lock.json @@ -33,6 +33,7 @@ "typescript": "4.9.5" }, "devDependencies": { + "@playwright/test": "^1.43.1", "prettier": "3.0.3", "prisma": "^4.11.0" } @@ -854,6 +855,21 @@ "node": ">= 8" } }, + "node_modules/@playwright/test": { + "version": "1.43.1", + "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.43.1.tgz", + "integrity": "sha512-HgtQzFgNEEo4TE22K/X7sYTYNqEMMTZmFS8kTq6m8hXj+m1D8TgwgIbumHddJa9h4yl4GkKb8/bgAl2+g7eDgA==", + "dev": true, + "dependencies": { + "playwright": "1.43.1" + }, + "bin": { + "playwright": "cli.js" + }, + "engines": { + "node": ">=16" + } + }, "node_modules/@prisma/client": { "version": "4.16.2", "resolved": "https://registry.npmjs.org/@prisma/client/-/client-4.16.2.tgz", @@ -2477,6 +2493,20 @@ "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" }, + "node_modules/fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "dev": true, + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, "node_modules/function-bind": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", @@ -3720,6 +3750,36 @@ "url": "https://github.com/sponsors/jonschlinkert" } }, + "node_modules/playwright": { + "version": "1.43.1", + "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.43.1.tgz", + "integrity": "sha512-V7SoH0ai2kNt1Md9E3Gwas5B9m8KR2GVvwZnAI6Pg0m3sh7UvgiYhRrhsziCmqMJNouPckiOhk8T+9bSAK0VIA==", + "dev": true, + "dependencies": { + "playwright-core": "1.43.1" + }, + "bin": { + "playwright": "cli.js" + }, + "engines": { + "node": ">=16" + }, + "optionalDependencies": { + "fsevents": "2.3.2" + } + }, + "node_modules/playwright-core": { + "version": "1.43.1", + "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.43.1.tgz", + "integrity": "sha512-EI36Mto2Vrx6VF7rm708qSnesVQKbxEWvPrfA1IPY6HgczBplDx7ENtx+K2n4kJ41sLLkuGfmb0ZLSSXlDhqPg==", + "dev": true, + "bin": { + "playwright-core": "cli.js" + }, + "engines": { + "node": ">=16" + } + }, "node_modules/postcss": { "version": "8.4.14", "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.14.tgz", diff --git a/package.json b/package.json index 1e74564..8b4a484 100644 --- a/package.json +++ b/package.json @@ -5,7 +5,7 @@ "scripts": { "dev": "next dev", "build": "next build", - "buildfordeploy":"prisma generate && next build", + "buildfordeploy": "prisma generate && next build", "start": "next start", "lint": "next lint", "format": "npx prettier ./src -w" @@ -36,6 +36,7 @@ "typescript": "4.9.5" }, "devDependencies": { + "@playwright/test": "^1.43.1", "prettier": "3.0.3", "prisma": "^4.11.0" } diff --git a/playwright.config.ts b/playwright.config.ts new file mode 100644 index 0000000..c762a19 --- /dev/null +++ b/playwright.config.ts @@ -0,0 +1,85 @@ +import { defineConfig, devices } from "@playwright/test"; + +/** + * Read environment variables from file. + * https://github.com/motdotla/dotenv + */ +// require('dotenv').config(); + +/** + * See https://playwright.dev/docs/test-configuration. + */ +export default defineConfig({ + testDir: "./tests", + /* Run tests in files in parallel */ + fullyParallel: true, + /* Fail the build on CI if you accidentally left test.only in the source code. */ + forbidOnly: !!process.env.CI, + /* Retry on CI only */ + retries: process.env.CI ? 2 : 0, + /* Opt out of parallel tests on CI. */ + workers: process.env.CI ? 1 : undefined, + /* Reporter to use. See https://playwright.dev/docs/test-reporters */ + reporter: "html", + /* Shared settings for all the projects below. See https://playwright.dev/docs/api/class-testoptions. */ + use: { + /* Base URL to use in actions like `await page.goto('/')`. */ + // baseURL: 'http://127.0.0.1:3000', + + /* Collect trace when retrying the failed test. See https://playwright.dev/docs/trace-viewer */ + trace: "on-first-retry", + }, + + /* Configure projects for major browsers */ + projects: [ + { + name: "chromium", + use: { ...devices["Desktop Chrome"] }, + }, + + // { + // name: "firefox", + // use: { ...devices["Desktop Firefox"] }, + // }, + + // { + // name: "webkit", + // use: { ...devices["Desktop Safari"] }, + // }, + + /* Test against mobile viewports. */ + // { + // name: 'Mobile Chrome', + // use: { ...devices['Pixel 5'] }, + // }, + // { + // name: 'Mobile Safari', + // use: { ...devices['iPhone 12'] }, + // }, + + /* Test against branded browsers. */ + // { + // name: 'Microsoft Edge', + // use: { ...devices['Desktop Edge'], channel: 'msedge' }, + // }, + // { + // name: 'Google Chrome', + // use: { ...devices['Desktop Chrome'], channel: 'chrome' }, + // }, + ], + + /* Run your local dev server before starting the tests */ + // webServer: { + // command: 'npm run start', + // url: 'http://127.0.0.1:3000', + // reuseExistingServer: !process.env.CI, + // }, + + webServer: { + command: "npm run dev", + url: "http://127.0.0.1:3000", + reuseExistingServer: !process.env.CI, + stdout: "ignore", + stderr: "pipe", + }, +}); diff --git a/src/components/Experiment.tsx b/src/components/Experiment.tsx index fefff68..ec32028 100644 --- a/src/components/Experiment.tsx +++ b/src/components/Experiment.tsx @@ -1,7 +1,7 @@ import styles from "@/styles/Home.module.css"; import Intro from "@/components/Intro"; -import Intro2 from "@/components/IntroBayesian"; +import IntroBayesian from "@/components/IntroBayesian"; import TopBar from "@/components/TopBar"; import { Participant } from "@prisma/client"; @@ -17,7 +17,7 @@ import { SessionType2, } from "@/utilities/types"; import Round from "./Round"; -import Intro3 from "./IntroGuess"; +import IntroGuess from "./IntroGuess"; function Experiment({ data }: { data: SessionType | SessionType2 }) { const [participant, setParticipant] = useState({}); @@ -48,7 +48,7 @@ function Experiment({ data }: { data: SessionType | SessionType2 }) { {phase === Phase.Intro && } {phase === Phase.Intro2 && (data.treatment === "QSR" || data.treatment === "BSR") && ( - { + await page.goto("http://localhost:3000"); + await page.getByPlaceholder("Ad Soyad").fill("test" + randomUUID()); + await page.getByText("Deneye başla!").click(); + + while (true) { + const startExperiment = page.getByText("Deneye Başla!", { exact: true }); + const nextButton = page.getByText("Sonraki"); + await expect(startExperiment.or(nextButton).first()).toBeVisible(); + if (await startExperiment.isVisible()) { + await startExperiment.click(); + break; + } + await nextButton.click(); + } + + while (true) { + await page.getByText("Tahmine hazırım!").click(); + await page.getByText("Karar Verdim").click(); + await page.getByText("Sonraki tur").click(); + + if (await page.isVisible("text='Devam'")) { + break; + } + } +});