diff --git a/.github/workflows/e2e.yml b/.github/workflows/e2e.yml deleted file mode 100644 index a52b961a2..000000000 --- a/.github/workflows/e2e.yml +++ /dev/null @@ -1,49 +0,0 @@ -name: e2e -on: - schedule: - # Runs "at 09:00 and 15:00, Monday through Friday" (see https://crontab.guru) - - cron: '0 9,15 * * 1-5' -jobs: - e2e: - runs-on: ubuntu-latest - steps: - - name: Cancel running workflows - uses: styfle/cancel-workflow-action@0.11.0 - with: - access_token: ${{ github.token }} - - name: Checkout repo - uses: actions/checkout@v3 - - name: Set node version - uses: actions/setup-node@v3 - with: - node-version-file: '.nvmrc' - - name: Set pnpm version - uses: pnpm/action-setup@v2 - with: - run_install: false - version: 7 - - name: Cache node_modules - id: node-modules-cache - uses: actions/cache@v3 - with: - path: '**/node_modules' - key: node-modules-cache-${{ hashFiles('**/pnpm-lock.yaml') }} - - name: Install dependencies - if: steps.node-modules-cache.outputs.cache-hit != 'true' - run: pnpm install - - name: Get playwright version - run: echo "PLAYWRIGHT_VERSION=$(node -e "console.log(require('./node_modules/@playwright/test/package.json').version)")" >> $GITHUB_ENV - - name: Cache playwright - uses: actions/cache@v3 - id: playwright-cache - with: - path: '~/.cache/ms-playwright' - key: playwright-cache-${{ env.PLAYWRIGHT_VERSION }} - - name: Install playwright browsers - if: steps.playwright-cache.outputs.cache-hit != 'true' - run: npx playwright install --with-deps - - name: Install playwright browser dependencies - if: steps.playwright-cache.outputs.cache-hit == 'true' - run: npx playwright install-deps - - name: Run tests - run: pnpm test:e2e diff --git a/e2e/cart.spec.ts b/e2e/cart.spec.ts deleted file mode 100644 index f7775ac1c..000000000 --- a/e2e/cart.spec.ts +++ /dev/null @@ -1,73 +0,0 @@ -import { test, expect } from '@playwright/test'; - -const regex = (text: string) => new RegExp(text, 'gim'); - -test('should be able to open and close cart', async ({ page }) => { - let cart; - - await page.goto('/'); - - await page.getByTestId('open-cart').click(); - cart = await page.getByTestId('cart'); - await expect(cart).toBeVisible(); - await expect(cart).toHaveText(regex('your cart is empty')); - - await page.getByTestId('close-cart').click(); - cart = await page.getByTestId('cart'); - await expect(cart).toBeHidden(); -}); - -test('should be able to add item to cart, without selecting a variant, assuming first variant', async ({ - page -}) => { - await page.goto('/'); - await page.getByTestId('homepage-products').locator('a').first().click(); - - const productName = await page.getByTestId('product-name').first().innerText(); - const firstVariant = await page.getByTestId('variant').first().innerText(); - - await page.getByRole('button', { name: regex('add to cart') }).click(); - - const cart = await page.getByTestId('cart'); - - await expect(cart).toBeVisible(); - - const cartItems = await page.getByTestId('cart-item').all(); - let isItemInCart = false; - - for (const item of cartItems) { - const cartProductName = await item.getByTestId('cart-product-name').innerText(); - const cartProductVariant = await item.getByTestId('cart-product-variant').innerText(); - - if (cartProductName === productName && cartProductVariant === firstVariant) { - isItemInCart = true; - break; - } - } - - await expect(isItemInCart).toBe(true); -}); - -test('should be able to add item to cart by selecting a variant', async ({ page }) => { - await page.goto('/'); - await page.getByTestId('homepage-products').locator('a').first().click(); - - const selectedProductName = await page.getByTestId('product-name').first().innerText(); - const secondVariant = await page.getByTestId('variant').nth(1); - - await secondVariant.click(); - const selectedProductVariant = await page.getByTestId('selected-variant').innerText(); - - await page.getByRole('button', { name: regex('add to cart') }).click(); - - const cart = await page.getByTestId('cart'); - - await expect(cart).toBeVisible(); - - const cartItem = await page.getByTestId('cart-item').first(); - const cartItemProductName = await cartItem.getByTestId('cart-product-name').innerText(); - const cartItemProductVariant = await cartItem.getByTestId('cart-product-variant').innerText(); - - await expect(cartItemProductName).toBe(selectedProductName); - await expect(cartItemProductVariant).toBe(selectedProductVariant); -}); diff --git a/e2e/mobile-menu.spec.ts b/e2e/mobile-menu.spec.ts deleted file mode 100644 index 0765f4d19..000000000 --- a/e2e/mobile-menu.spec.ts +++ /dev/null @@ -1,16 +0,0 @@ -import { test, expect } from '@playwright/test'; - -test.use({ viewport: { width: 600, height: 900 } }); -test('should be able to open and close mobile menu', async ({ page }) => { - let mobileMenu; - - await page.goto('/'); - - await page.getByTestId('open-mobile-menu').click(); - mobileMenu = await page.getByTestId('mobile-menu'); - await expect(mobileMenu).toBeVisible(); - - await page.getByTestId('close-mobile-menu').click(); - mobileMenu = await page.getByTestId('mobile-menu'); - await expect(mobileMenu).toBeHidden(); -}); diff --git a/package.json b/package.json index b1436a1b4..45dc860b7 100644 --- a/package.json +++ b/package.json @@ -13,8 +13,7 @@ "lint-staged": "lint-staged", "prettier": "prettier --write --ignore-unknown .", "prettier:check": "prettier --check --ignore-unknown .", - "test": "pnpm lint && pnpm prettier:check", - "test:e2e": "playwright test" + "test": "pnpm lint && pnpm prettier:check" }, "git": { "pre-commit": "lint-staged" @@ -31,7 +30,6 @@ "react-dom": "18.2.0" }, "devDependencies": { - "@playwright/test": "^1.36.1", "@tailwindcss/typography": "^0.5.9", "@types/node": "20.4.2", "@types/react": "18.2.15", diff --git a/playwright.config.ts b/playwright.config.ts deleted file mode 100644 index f98a725b5..000000000 --- a/playwright.config.ts +++ /dev/null @@ -1,45 +0,0 @@ -import { PlaywrightTestConfig, devices } from '@playwright/test'; -import path from 'path'; - -const baseURL = `http://localhost:${process.env.PORT || 3000}`; -const config: PlaywrightTestConfig = { - testDir: path.join(__dirname, 'e2e'), - retries: 2, - outputDir: '.playwright', - webServer: { - command: 'pnpm build && pnpm start', - url: baseURL, - timeout: 120 * 1000, - reuseExistingServer: !process.env.CI - }, - use: { - baseURL, - trace: 'retry-with-trace' - }, - projects: [ - { - name: 'Desktop Chrome', - use: { - ...devices['Desktop Chrome'] - } - }, - { - name: 'Desktop Safari', - use: { - ...devices['Desktop Safari'] - } - }, - { - name: 'Mobile Chrome', - use: { - ...devices['Pixel 5'] - } - }, - { - name: 'Mobile Safari', - use: devices['iPhone 12'] - } - ] -}; - -export default config; diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index e0266373d..85b7f34f4 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -21,9 +21,6 @@ dependencies: version: 18.2.0(react@18.2.0) devDependencies: - '@playwright/test': - specifier: ^1.36.1 - version: 1.36.1 '@tailwindcss/typography': specifier: ^0.5.9 version: 0.5.9(tailwindcss@3.3.3) @@ -348,17 +345,6 @@ packages: tslib: 2.6.0 dev: true - /@playwright/test@1.36.1: - resolution: {integrity: sha512-YK7yGWK0N3C2QInPU6iaf/L3N95dlGdbsezLya4n0ZCh3IL7VgPGxC6Gnznh9ApWdOmkJeleT2kMTcWPRZvzqg==} - engines: {node: '>=16'} - hasBin: true - dependencies: - '@types/node': 20.4.2 - playwright-core: 1.36.1 - optionalDependencies: - fsevents: 2.3.2 - dev: true - /@rushstack/eslint-patch@1.3.2: resolution: {integrity: sha512-V+MvGwaHH03hYhY+k6Ef/xKd6RYlc4q8WBx+2ANmipHJcKuktNcI/NgEsJgdSUF6Lw32njT6OnrRsKYCdgHjYw==} dev: true @@ -2532,12 +2518,6 @@ packages: engines: {node: '>= 6'} dev: true - /playwright-core@1.36.1: - resolution: {integrity: sha512-7+tmPuMcEW4xeCL9cp9KxmYpQYHKkyjwoXRnoeTowaeNat8PoBMk/HwCYhqkH2fRkshfKEOiVus/IhID2Pg8kg==} - engines: {node: '>=16'} - hasBin: true - dev: true - /pluralize@8.0.0: resolution: {integrity: sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==} engines: {node: '>=4'}