From d15916ddd2d3bee013f82281fe7b1856703d1317 Mon Sep 17 00:00:00 2001 From: Dario Piotrowicz Date: Tue, 28 Feb 2023 13:35:34 +0000 Subject: [PATCH] update e2e about test --- frontend/mock-db/init.ts | 13 ++++++++++ functions/api/wb/settings/server/rules.ts | 15 +++++++++++ functions/api/wb/settings/server/server.ts | 29 ++++++++++++++-------- ui-e2e-tests/about-page.spec.ts | 20 +++++++-------- 4 files changed, 57 insertions(+), 20 deletions(-) diff --git a/frontend/mock-db/init.ts b/frontend/mock-db/init.ts index a9cde78..37f852d 100644 --- a/frontend/mock-db/init.ts +++ b/frontend/mock-db/init.ts @@ -7,6 +7,8 @@ import { createReply as createReplyInBackend } from 'wildebeest/backend/test/sha import { createStatus } from 'wildebeest/backend/src/mastodon/status' import type { APObject } from 'wildebeest/backend/src/activitypub/objects' import { type Database } from 'wildebeest/backend/src/database' +import { upsertRule } from 'wildebeest/functions/api/wb/settings/server/rules' +import { upsertServerSettings } from 'wildebeest/functions/api/wb/settings/server/server' /** * Run helper commands to initialize the database with actors, statuses, etc. @@ -41,6 +43,17 @@ export async function init(domain: string, db: Database) { for (const reply of replies) { await createReply(domain, db, reply, loadedStatuses) } + + await createServerData(db) +} + +async function createServerData(db: Database) { + await upsertServerSettings(db, { + 'extended description': 'this is a test wildebeest instance!', + }) + await upsertRule(db, "don't be mean") + await upsertRule(db, "don't insult people") + await upsertRule(db, 'respect the rules') } /** diff --git a/functions/api/wb/settings/server/rules.ts b/functions/api/wb/settings/server/rules.ts index 359c70b..1a66b30 100644 --- a/functions/api/wb/settings/server/rules.ts +++ b/functions/api/wb/settings/server/rules.ts @@ -5,6 +5,21 @@ import { type Database, getDatabase } from 'wildebeest/backend/src/database' import { parse } from 'cookie' import { isUserAdmin } from 'wildebeest/frontend/src/utils/isUserAdmin' +export const onRequestGet: PagesFunction = async ({ env, request }) => { + return handleRequestPost(await getDatabase(env), request) +} + +export async function handleRequestGet(db: Database) { + const query = `SELECT * from server_rules;` + const result = await db.prepare(query).all<{ id: string; text: string }>() + + if (!result.success) { + return new Response('SQL error: ' + result.error, { status: 500 }) + } + + return new Response(JSON.stringify(result.results ?? []), { status: 200 }) +} + export const onRequestPost: PagesFunction = async ({ env, request }) => { return handleRequestPost(await getDatabase(env), request) } diff --git a/functions/api/wb/settings/server/server.ts b/functions/api/wb/settings/server/server.ts index 3cbd7d2..f286d49 100644 --- a/functions/api/wb/settings/server/server.ts +++ b/functions/api/wb/settings/server/server.ts @@ -2,9 +2,9 @@ import type { Env } from 'wildebeest/backend/src/types/env' import type { ContextData } from 'wildebeest/backend/src/types/context' import * as errors from 'wildebeest/backend/src/errors' import { type Database, getDatabase } from 'wildebeest/backend/src/database' -import { ServerBrandingData } from 'wildebeest/frontend/src/routes/(admin)/settings/server-settings/branding' import { parse } from 'cookie' import { isUserAdmin } from 'wildebeest/frontend/src/utils/isUserAdmin' +import { ServerSettingsData } from 'wildebeest/frontend/src/routes/(admin)/settings/server-settings/layout' export const onRequestGet: PagesFunction = async ({ env, request }) => { return handleRequestPost(await getDatabase(env), request) @@ -42,23 +42,32 @@ export async function handleRequestPost(db: Database, request: Request) { return errors.notAuthorized('Lacking authorization rights to edit server settings') } - const data = await request.json() + const data = await request.json() - const settingsEntries = Object.entries(data) + const result = await upsertServerSettings(db, data) + + if (result && !result.success) { + return new Response('SQL error: ' + result.error, { status: 500 }) + } + + return new Response('', { status: 200 }) +} + +export async function upsertServerSettings(db: Database, settings: Partial) { + const settingsEntries = Object.entries(settings) + + if (!settingsEntries.length) { + return null + } const query = ` INSERT INTO server_settings (setting_name, setting_value) VALUES ${settingsEntries.map(() => `(?, ?)`).join(', ')} ON CONFLICT(setting_name) DO UPDATE SET setting_value=excluded.setting_value ` - const result = await db + + return await db .prepare(query) .bind(...settingsEntries.flat()) .run() - - if (!result.success) { - return new Response('SQL error: ' + result.error, { status: 500 }) - } - - return new Response('', { status: 200 }) } diff --git a/ui-e2e-tests/about-page.spec.ts b/ui-e2e-tests/about-page.spec.ts index 47fada2..a9167a7 100644 --- a/ui-e2e-tests/about-page.spec.ts +++ b/ui-e2e-tests/about-page.spec.ts @@ -11,28 +11,28 @@ test.skip('View of the about page', async ({ page }) => { await expect(page.getByTestId('domain-text')).toHaveText('0.0.0.0') await expect(page.getByTestId('social-text')).toHaveText('Decentralised social media powered by Mastodon') - await expect(page.getByTestId('contact').getByText('Administered by:George 👍@george')).toBeVisible() - await expect(page.getByTestId('contact').getByText('contact:test@test.com')).toBeVisible() + // await expect(page.getByTestId('contact').getByText('Administered by: ...')).toBeVisible() + // await expect(page.getByTestId('contact').getByText('contact: ...')).toBeVisible() - await expect(page.getByRole('region').filter({ hasText: 'Please mind that the staff' })).not.toBeVisible() + await expect(page.getByRole('region').filter({ hasText: 'this is a test wildebeest instance!' })).not.toBeVisible() await page.getByRole('button', { name: 'About' }).click() - await expect(page.getByRole('region').filter({ hasText: 'Please mind that the staff' })).toBeVisible() + await expect(page.getByRole('region').filter({ hasText: 'this is a test wildebeest instance!' })).toBeVisible() await page.getByRole('button', { name: 'About' }).click() - await expect(page.getByRole('region').filter({ hasText: 'Please mind that the staff' })).not.toBeVisible() + await expect(page.getByRole('region').filter({ hasText: 'this is a test wildebeest instance!' })).not.toBeVisible() const getRuleLocator = (ruleId: string) => page.getByRole('listitem').filter({ has: page.getByText(ruleId, { exact: true }) }) + await expect(page.getByRole('listitem')).toHaveCount(0) await expect(getRuleLocator('1')).not.toBeVisible() await expect(getRuleLocator('2')).not.toBeVisible() await expect(getRuleLocator('3')).not.toBeVisible() await page.getByRole('button', { name: 'Server rules' }).click() + await expect(page.getByRole('listitem')).toHaveCount(3) await expect(getRuleLocator('1')).toBeVisible() - await expect(getRuleLocator('1')).toContainText( - 'Sexually explicit or violent media must be marked as sensitive when posting' - ) + await expect(getRuleLocator('1')).toContainText("don't be mean") await expect(getRuleLocator('2')).toBeVisible() - await expect(getRuleLocator('2')).toContainText('No racism, sexism, homophobia, transphobia, xenophobia, or casteism') + await expect(getRuleLocator('2')).toContainText("don't insult people") await expect(getRuleLocator('3')).toBeVisible() - await expect(getRuleLocator('3')).toContainText('No incitement of violence or promotion of violent ideologies') + await expect(getRuleLocator('3')).toContainText('respect the rules') })