mirror of
https://github.com/cupcakearmy/cryptgeon.git
synced 2024-11-17 19:10:29 +01:00
Nicco
c3b1772728
* testing * try playwrigth * testing * add pr support * not on each commit * add test ids * make backend more configuratble * 2.0.2 * spec
72 lines
2.7 KiB
TypeScript
72 lines
2.7 KiB
TypeScript
import { expect, type Page } from '@playwright/test'
|
|
import { createHash } from 'crypto'
|
|
import { readFile } from 'fs/promises'
|
|
|
|
type CreatePage = { text?: string; files?: string[]; views?: number; expiration?: number; error?: string }
|
|
export async function createNote(page: Page, options: CreatePage): Promise<string> {
|
|
await page.goto('/')
|
|
|
|
if (options.text) {
|
|
await page.locator('[data-testid="text-field"]').fill(options.text)
|
|
} else if (options.files) {
|
|
await page.locator('[data-testid="switch-file"]').click()
|
|
|
|
const [fileChooser] = await Promise.all([
|
|
page.waitForEvent('filechooser'),
|
|
page.locator('text=No Files Selected').click(),
|
|
])
|
|
await fileChooser.setFiles(options.files)
|
|
}
|
|
|
|
if (options.views) {
|
|
await page.locator('[data-testid="switch-advanced"]').click()
|
|
await page.locator('[data-testid="field-views"]').fill(options.views.toString())
|
|
} else if (options.expiration) {
|
|
await page.locator('[data-testid="switch-advanced"]').click()
|
|
await page.locator('[data-testid="switch-advanced-toggle"]').click()
|
|
await page.locator('[data-testid="field-expiration"]').fill(options.expiration.toString())
|
|
}
|
|
|
|
await page.locator('button:has-text("create")').click()
|
|
|
|
if (options.error) {
|
|
await expect(page.locator('.error-text')).toContainText(options.error, { timeout: 60_000 })
|
|
}
|
|
|
|
const shareLink = await page.locator('[data-testid="share-link"]').inputValue()
|
|
return shareLink
|
|
}
|
|
|
|
export async function checkLinkForDownload(page: Page, link: string, text: string, checksum: string) {
|
|
await page.goto('/')
|
|
await page.goto(link)
|
|
await page.locator('[data-testid="show-note-button"]').click()
|
|
|
|
const [download] = await Promise.all([
|
|
page.waitForEvent('download'),
|
|
page.locator(`[data-testid="result"] >> text=${text}`).click(),
|
|
])
|
|
const path = await download.path()
|
|
if (!path) throw new Error('Download failed')
|
|
const cs = await getFileChecksum(path)
|
|
await expect(cs).toBe(checksum)
|
|
}
|
|
export async function checkLinkForText(page: Page, link: string, text: string) {
|
|
await page.goto('/')
|
|
await page.goto(link)
|
|
await page.locator('[data-testid="show-note-button"]').click()
|
|
await expect(await page.locator('[data-testid="result"] >> .note').innerText()).toContain(text)
|
|
}
|
|
|
|
export async function checkLinkDoesNotExist(page: Page, link: string) {
|
|
await page.goto('/') // Required due to firefox: https://github.com/microsoft/playwright/issues/15781
|
|
await page.goto(link)
|
|
await expect(page.locator('main')).toContainText('note was not found or was already deleted')
|
|
}
|
|
|
|
export async function getFileChecksum(file: string) {
|
|
const buffer = await readFile(file)
|
|
const hash = createHash('sha3-256').update(buffer).digest('hex')
|
|
return hash
|
|
}
|