Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Integrate playwright UI tests #996

Closed
wants to merge 10 commits into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
27 changes: 27 additions & 0 deletions .github/workflows/playwright.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
name: Playwright Tests
on:
push:
branches: [master]
pull_request:
branches: [master]
jobs:
test:
timeout-minutes: 60
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- uses: actions/setup-node@v2
with:
node-version: '14.x'
- name: Install dependencies
run: yarn
- name: Install Playwright Browsers
run: npx playwright install --with-deps
- name: Run Playwright tests
run: yarn playwright test
- uses: actions/upload-artifact@v2
if: always()
with:
name: playwright-report
path: playwright-report/
retention-days: 30
3 changes: 3 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -47,3 +47,6 @@ build/
bld/
[Bb]in/
[Oo]bj/
/test-results/
/playwright-report/
/playwright/.cache/
85 changes: 85 additions & 0 deletions e2e/local/homepage.spec.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,85 @@
import { test, expect } from '@playwright/test'

test.beforeEach(async ({ page }) => {
await page.goto('http://localhost:3040/')
})

test.skip('test homepage', async ({ page }) => {
// Go to http://localhost:3040/

// Click text=Текущи кампании
await page.locator('text=Текущи кампании').click()

// Click text=Това е бета версията на платформата на Подкрепи.бг преди предстоящия наесен офиц
await page
.locator(
'text=Това е бета версията на платформата на Подкрепи.бг преди предстоящия наесен офиц',
)
.click()

// Check input[type="checkbox"]
await page.locator('input[type="checkbox"]').check()

// Click text=Затвори
await page.locator('text=Затвори').click()

// Click text=Как работи Подкрепи.бг?
await page.locator('text=Как работи Подкрепи.бг?').click()

// Click text=Кой стои зад Подкрепи.бг?
await page.locator('text=Кой стои зад Подкрепи.бг?').click()

// Click text=Какво ни обединява?
await page.locator('text=Какво ни обединява?').click()

// Click text=Искам да помогна на Подкрепи.бг
await page.locator('text=Искам да помогна на Подкрепи.бг').click()

// Click h2:has-text("Често задавани въпроси")
await page.locator('h2:has-text("Често задавани въпроси")').click()

// Click text=Какво представлява Подкрепи.бг?Подкрепи.бг е платформа за среща между хора, коит >> [data-testid="ExpandMoreIcon"]
await page
.locator(
'text=Какво представлява Подкрепи.бг?Подкрепи.бг е платформа за среща между хора, коит >> [data-testid="ExpandMoreIcon"]',
)
.click()

// Click text=Подкрепи.бг е платформа за среща между хора, които искат да съберат средства за
await page
.locator(
'text=Подкрепи.бг е платформа за среща между хора, които искат да съберат средства за ',
)
.click()

// Click text=Защо направихте нова платформа, когато вече има и други?
await page.locator('text=Защо направихте нова платформа, когато вече има и други?').click()

// Click text=Накратко - целта ни е да увеличим доверието на обществото в дарителските организ
await page
.locator(
'text=Накратко - целта ни е да увеличим доверието на обществото в дарителските организ',
)
.click()

// Click text=Как гарантирате прозрачност и какво значи “софтуер с отворен код”?
await page
.locator('text=Как гарантирате прозрачност и какво значи “софтуер с отворен код”?')
.click()

// Click text=Софтуер с отворен код е установена практика, при която всеки, без ограничение, м
await page
.locator(
'text=Софтуер с отворен код е установена практика, при която всеки, без ограничение, м',
)
.click()

// Click text=Виж всички >> nth=1
await page.locator('text=Виж всички').nth(1).click()
await expect(page).toHaveURL('http://localhost:3040/faq')

// Click text=Моделът ни на работа се основава на Принципите, които ни обединяват
await page
.locator('text=Моделът ни на работа се основава на Принципите, които ни обединяват')
.click()
})
134 changes: 134 additions & 0 deletions e2e/local/support.spec.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,134 @@
import { test } from '@playwright/test'

test.beforeEach(async ({ page }) => {
await page.goto('http://localhost:3040/')
})

test.skip('test support page', async ({ page }) => {
// Click text=Станете доброволец >> nth=0
await page.locator('text=Станете доброволец').first().click()

// Go to http://localhost:3040/support
await page.goto('http://localhost:3040/support')

// Click h1:has-text("Станете доброволец")
await page.locator('h1:has-text("Станете доброволец")').click()

// Click text=Как искате да ни подкрепите?
await page.locator('text=Как искате да ни подкрепите?').click()

// Click text=Включете се в организацията като:
await page.locator('text=Включете се в организацията като:').click()

// Check input[name="roles\.benefactor"]
await page.locator('input[name="roles\\.benefactor"]').check()

// Check input[name="roles\.associationMember"]
await page.locator('input[name="roles\\.associationMember"]').check()

// Click text=Напред
await page.locator('text=Напред').click()

// Click text=В каква роля искате да ни подкрепите?
await page.locator('text=В каква роля искате да ни подкрепите?').click()

// Click text=Назад
await page.locator('text=Назад').click()

// Click text=Как искате да ни подкрепите?
await page.locator('text=Как искате да ни подкрепите?').click()

// Click text=Напред
await page.locator('text=Напред').click()

// Check input[name="benefactor\.campaignBenefactor"]
await page.locator('input[name="benefactor\\.campaignBenefactor"]').check()

// Click text=Дарител в бъдещи кампании
await page.locator('text=Дарител в бъдещи кампании').click()

// Click text=Моля, изберете си роля
await page.locator('text=Моля, изберете си роля').click()

// Click text=Дарител в бъдещи кампании
await page.locator('text=Дарител в бъдещи кампании').click()

// Click text=Напред
await page.locator('text=Напред').click()

// Click text=Изпратете
await page.locator('text=Изпратете').click()

// Click text=Задължително поле
await page.locator('text=Задължително поле').click()

// Click text=Изпратете
await page.locator('text=Изпратете').click()

// Click #mui-3-helper-text
await page.locator('#mui-3-helper-text').click()

// Click #mui-4-helper-text
await page.locator('#mui-4-helper-text').click()

// Click #mui-5-helper-text
await page.locator('#mui-5-helper-text').click()

// Click text=Моля, приемете oбщите условия
await page.locator('text=Моля, приемете oбщите условия').click()

// Click text=Моля, приемете политиката за защита на личните данни
await page.locator('text=Моля, приемете политиката за защита на личните данни').click()

// Click input[name="person\.firstName"]
await page.locator('input[name="person\\.firstName"]').click()

// Fill input[name="person\.firstName"]
await page.locator('input[name="person\\.firstName"]').fill('test')

// Click input[name="person\.lastName"]
await page.locator('input[name="person\\.lastName"]').click()

// Fill input[name="person\.lastName"]
await page.locator('input[name="person\\.lastName"]').fill('test')

// Click input[name="person\.email"]
await page.locator('input[name="person\\.email"]').click()

// Fill input[name="person\.email"]
await page.locator('input[name="person\\.email"]').fill('[email protected]')

// Click input[name="person\.phone"]
await page.locator('input[name="person\\.phone"]').click()

// Fill input[name="person\.phone"]
await page.locator('input[name="person\\.phone"]').fill('0987654321')

// Click textarea[name="person\.comment"]
await page.locator('textarea[name="person\\.comment"]').click()

// Fill textarea[name="person\.comment"]
await page.locator('textarea[name="person\\.comment"]').fill('test test test')

// Check input[name="person\.terms"]
await page.locator('input[name="person\\.terms"]').check()

// Check input[name="person\.gdpr"]
await page.locator('input[name="person\\.gdpr"]').check()

// Check input[name="person\.newsletter"]
await page.locator('input[name="person\\.newsletter"]').check()

// Click text=Изпратете
await page.locator('text=Изпратете').click()

// Click text=Благодарим Ви, че ни подкрепихте!
await page.locator('text=Благодарим Ви, че ни подкрепихте!').click()

// Click text=Очаквайте представител на Подкрепи.бг да се свърже с Вас на посочения имейл адре
await page
.locator(
'text=Очаквайте представител на Подкрепи.бг да се свърже с Вас на посочения имейл адре',
)
.click()
})
106 changes: 106 additions & 0 deletions e2e/staging/anon-donation-custom.spec.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,106 @@
import { test, expect } from '@playwright/test'
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

it would be nice if local and staging are actually exactly the same tests with the only difference being the base URL.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I've tested against staging until we setup the local environment. Still not convinced we actually need to test against staging in real conditions, but if we do the tests should be the same with only difference the URL as you suggested.


test('test anonymous donation on staging - custom amount', async ({ page }) => {
// Go to https://dev.podkrepi.bg/
await page.goto('https://dev.podkrepi.bg/')

// Click text=Училище за деца с нарушено зрение гр. Варна - стая за ерготерапия
await page
.locator('text=Училище за деца с нарушено зрение гр. Варна - стая за ерготерапия')
.click()
await expect(page).toHaveURL(
'https://dev.podkrepi.bg/campaigns/uchilishe-za-deca-s-narusheno-zrenie-gr-varna-staya-za-ergoterapiya',
)

// Click button:has-text("Подкрепи")
await page.locator('button:has-text("Подкрепи")').click()

await expect(page).toHaveURL(
'https://dev.podkrepi.bg/campaigns/donation/uchilishe-za-deca-s-narusheno-zrenie-gr-varna-staya-za-ergoterapiya',
)

// Click label:has-text("Друга сума")
await page.locator('label:has-text("Друга сума")').click()

// Click input[name="otherAmount"]
await page.locator('input[name="otherAmount"]').click()

// Fill input[name="otherAmount"]
await page.locator('input[name="otherAmount"]').fill('7.50')

// Check input[name="cardIncludeFees"]
await page.locator('input[name="cardIncludeFees"]').check()

// Click text=8,11 лв.
await page.locator('text=8,11 лв.').click()

// Click text=0,61 лв.
await page.locator('text=0,61 лв.').click()

// Click text=7,50 лв.
await page.locator('text=7,50 лв.').click()

// Click text=Напред
await page.locator('text=Напред').click()

// Click text=Дарете анонимно
await page.locator('text=Дарете анонимно').click()

// Click input[name="personsEmail"]
await page.locator('input[name="personsEmail"]').click()

// Fill input[name="personsEmail"]
await page.locator('input[name="personsEmail"]').fill('[email protected]')

// Click text=Напред
await page.locator('text=Напред').click()

// Click textarea[name="message"]
await page.locator('textarea[name="message"]').click()

// Fill textarea[name="message"]
await page.locator('textarea[name="message"]').fill('e2e tester 2')

// Click text=Премини към плащане
await page.locator('text=Премини към плащане').click()

await page.waitForURL((url) =>
url.toString().startsWith('https://checkout.stripe.com/pay/cs_test_'),
)

await expect(page.url()).toContain('https://checkout.stripe.com/pay/cs_test_')

// Click [placeholder="\31 234 1234 1234 1234"]
await page.locator('[placeholder="\\31 234 1234 1234 1234"]').click()

// Fill [placeholder="\31 234 1234 1234 1234"]
await page.locator('[placeholder="\\31 234 1234 1234 1234"]').fill('4242 4242 4242 4242')

// Click [placeholder="MM \/ YY"]
await page.locator('[placeholder="MM \\/ YY"]').click()

// Fill [placeholder="MM \/ YY"]
await page.locator('[placeholder="MM \\/ YY"]').fill('04 / 242')

// Click [placeholder="CVC"]
await page.locator('[placeholder="CVC"]').click()

// Fill [placeholder="CVC"]
await page.locator('[placeholder="CVC"]').fill('424')

// Click input[name="billingName"]
await page.locator('input[name="billingName"]').click()

// Fill input[name="billingName"]
await page.locator('input[name="billingName"]').fill('tester')

// Click [data-testid="hosted-payment-submit-button"]
await page.locator('[data-testid="hosted-payment-submit-button"]').click()

await page.waitForURL(
'https://dev.podkrepi.bg/campaigns/donation/uchilishe-za-deca-s-narusheno-zrenie-gr-varna-staya-za-ergoterapiya?success=true',
)

// Click text=Благодарим за доверието и подкрепата!
await page.locator('text=Благодарим за доверието и подкрепата!').click()
})
Loading