Files
gold_land_user/e2e/catalog-flows.spec.ts
T
safavimohadeseh78andCursor e3f0457dc9
Frontend CI / unit (test, type-check, build) (push) Successful in 1m11s
Frontend CI / browser E2E (frontend + pinned backend) (push) Failing after 2m48s
feat: complete server-backed six-lesson app and trial tooling
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-10-12 14:40:37 +03:30

77 lines
3.3 KiB
TypeScript

import { test, expect } from '@playwright/test'
import { fetchMe, registerViaUi, uniqueUsername } from './helpers/auth'
test.describe('store, game, educational challenge', () => {
test('store purchase and duplicate guard', async ({ page }) => {
const user = uniqueUsername('store')
await registerViaUi(page, user, 'pass1234')
const me0 = await fetchMe(page)
const coins0 = me0.user.coins
await page.goto('/store')
await page.getByText('در حال بارگذاری').waitFor({ state: 'detached', timeout: 30_000 }).catch(() => {})
await page.getByRole('button', { name: 'تقویت XP' }).click()
await page.getByRole('button', { name: 'خرید' }).click()
await expect(page.getByText(/تقویت XP.*خریده شد/)).toBeVisible({ timeout: 15_000 })
const me1 = await fetchMe(page)
expect(me1.user.coins).toBeLessThan(coins0)
expect(me1.progress.ownedItems).toContain('boost-xp')
await page.reload()
const meRefresh = await fetchMe(page)
expect(meRefresh.progress.ownedItems).toContain('boost-xp')
await expect(page.locator('.product-card').filter({ hasText: 'تقویت XP' })).toContainText('مال توئه')
const me2 = await fetchMe(page)
expect(me2.user.coins).toBe(me1.user.coins)
})
test('gold guess first completion only', async ({ page }) => {
const user = uniqueUsername('game')
await registerViaUi(page, user, 'pass1234')
const me0 = await fetchMe(page)
const coins0 = me0.user.coins
const xp0 = me0.user.xp
await page.goto('/games/gold-guess')
await page.getByText('در حال بارگذاری پاداش').waitFor({ state: 'detached', timeout: 30_000 }).catch(() => {})
await page.getByRole('button', { name: 'افزایش' }).click()
await expect(page.locator('.toast--success')).toBeVisible({ timeout: 15_000 })
const me1 = await fetchMe(page)
expect(me1.user.coins).toBeGreaterThan(coins0)
expect(me1.progress.claimedRewards).toContain('gold-guess')
await page.reload()
await page.getByRole('button', { name: 'افزایش' }).click({ timeout: 5000 }).catch(() => {})
const me2 = await fetchMe(page)
expect(me2.user.coins).toBe(me1.user.coins)
expect(me2.user.xp).toBeGreaterThanOrEqual(xp0)
})
test('educational challenge once', async ({ page }) => {
const user = uniqueUsername('challenge')
await registerViaUi(page, user, 'pass1234')
const me0 = await fetchMe(page)
const coins0 = me0.user.coins
await page.goto('/challenge')
await page.getByRole('heading', { name: 'چالش آموزشی' }).waitFor()
await page.getByText('در حال بارگذاری').waitFor({ state: 'detached', timeout: 30_000 }).catch(() => {})
await page.getByRole('button', { name: 'طلا' }).click()
await page.getByRole('button', { name: 'دریافت پاداش' }).click()
await expect(page.getByText('پاداش دریافت شد')).toBeVisible({ timeout: 15_000 })
const me1 = await fetchMe(page)
expect(me1.user.coins).toBeGreaterThan(coins0)
expect(me1.progress.completedChallenges).toContain('daily-challenge')
await page.reload()
await page.getByRole('heading', { name: 'چالش آموزشی' }).waitFor()
const me2 = await fetchMe(page)
expect(me2.user.coins).toBe(me1.user.coins)
})
})