diff --git a/.github/workflows/build-and-test.yml b/.github/workflows/build-and-test.yml index 9ff3ebfc..8fe37895 100644 --- a/.github/workflows/build-and-test.yml +++ b/.github/workflows/build-and-test.yml @@ -44,6 +44,10 @@ jobs: working-directory: docker run: | ./compose.py --compose-file docker-compose.yml --compose-file docker-compose.dev.yml up + sleep 60 + docker exec -ti saeoss_ckan-web_1 poetry run ckan db init + docker exec -ti saeoss_ckan-web-1 poetry run ckan user add user email=admin@example.com name=admin password=12345678 + docker exec -ti saeoss_ckan-web_1 poetry run ckan sysadmin add admin - name: Test App endpoint run: | curl http://localhost:5000/ @@ -51,3 +55,21 @@ jobs: echo "Curl command failed" exit 1 fi + - name: Update dependencies + working-directory: ./playwright/ci-test + run: npm install + - name: Install exact dependencies + working-directory: ./playwright/ci-test + run: npm ci + - name: Install Playwright Browsers + working-directory: ./playwright/ci-test + run: npx playwright install --with-deps + - name: Run Playwright tests + working-directory: ./playwright/ci-test + run: npx playwright test + - uses: actions/upload-artifact@v3 + if: always() + with: + name: playwright-report + path: playwright/ci-test/playwright-report/ + retention-days: 30 diff --git a/playwright/ci-test/tests/00-auth.setup.ts b/playwright/ci-test/tests/00-auth.setup.ts new file mode 100644 index 00000000..7ca0b4f4 --- /dev/null +++ b/playwright/ci-test/tests/00-auth.setup.ts @@ -0,0 +1,61 @@ +import { test as setup, expect } from '@playwright/test'; + +let url = '/'; + +let username = 'admin'; +let useremail = 'admin@example.com'; +let password = '12345678'; +const authFile = 'auth.json' + + +setup('test', async ({ page }) => { + await page.goto(url); + + await expect(page.locator('.navbar-brand')).toBeVisible(); + + await expect(page.getByText('Welcome to the SAEOSS Portal LOGIN SIGN UP METADATA Discover a world of data-')).toBeVisible(); + + await expect(page.getByText('Welcome to the SAEOSS Portal')).toBeVisible(); + + await expect(page.getByRole('link', { name: 'LOGIN' })).toBeVisible(); + + await expect(page.locator('#title-header').getByRole('link', { name: 'SIGN UP' })).toBeVisible(); + + await page.getByRole('link', { name: 'LOGIN' }).click(); + + await expect(page.getByRole('heading', { name: 'Login' })).toBeVisible(); + + await expect(page.getByRole('heading', { name: 'Need an Account?' })).toBeVisible(); + + await expect(page.getByRole('link', { name: 'Create an Account' })).toBeVisible(); + + await expect(page.getByRole('heading', { name: 'Forgotten your password?' })).toBeVisible(); + + await expect(page.locator('p').filter({ hasText: 'Forgot your password?' })).toBeVisible(); + + await page.getByLabel('Username').click(); + + await page.getByLabel('Username').fill('admin'); + + await page.getByLabel('Password').click(); + + await page.getByLabel('Password').fill('admin123'); + + await page.getByRole('button', { name: 'Login' }).click(); + + await expect(page.getByRole('heading', { name: 'News feed Activity from items' })).toBeVisible(); + + await expect(page.getByRole('link', { name: ' News feed' })).toBeVisible(); + + await expect(page.getByRole('link', { name: ' My Metadata Records' })).toBeVisible(); + + await expect(page.getByRole('link', { name: ' My Organisations' })).toBeVisible(); + + await expect(page.getByRole('link', { name: ' My Groups' })).toBeVisible(); + + await expect(page.getByRole('link', { name: ' Profile settings' })).toBeVisible(); + + await expect(page.getByRole('link', { name: 'Activity from: Everything' })).toBeVisible(); + + await page.context().storageState({ path: authFile }); +}); \ No newline at end of file