Files
umami/tests/e2e/api-website.spec.ts

153 lines
4.6 KiB
TypeScript

import { expect, test } from '@playwright/test';
import { uuid } from '../../src/lib/crypto';
import { teams, websites } from './fixtures';
import { type Auth, authHeaders, deleteTeam, loginViaApi } from './helpers';
test.describe('Website API tests', () => {
test.describe.configure({ mode: 'serial' });
let auth: Auth;
let websiteId = '';
let teamId = '';
test.beforeAll(async ({ request }) => {
auth = await loginViaApi(request);
const response = await request.post('/api/teams', {
headers: authHeaders(auth),
data: teams.teamCreate,
});
const body = await response.json();
teamId = body[0].id;
expect(response.status()).toBe(200);
expect(body[0]).toHaveProperty('name', 'playwright');
expect(body[1]).toHaveProperty('role', 'team-owner');
});
test.afterAll(async ({ request }) => {
if (teamId) {
await deleteTeam(request, auth, teamId);
}
});
test('creates a website for user', async ({ request }) => {
const response = await request.post('/api/websites', {
headers: authHeaders(auth),
data: websites.websiteCreate,
});
const body = await response.json();
websiteId = body.id;
expect(response.status()).toBe(200);
expect(body).toHaveProperty('name', 'Playwright Website');
expect(body).toHaveProperty('domain', 'playwright.com');
});
test('creates a website for team', async ({ request }) => {
const response = await request.post('/api/websites', {
headers: authHeaders(auth),
data: {
name: 'Team Website',
domain: 'teamwebsite.com',
teamId,
},
});
const body = await response.json();
expect(response.status()).toBe(200);
expect(body).toHaveProperty('name', 'Team Website');
expect(body).toHaveProperty('domain', 'teamwebsite.com');
});
test('creates a website with a fixed ID', async ({ request }) => {
const fixedId = uuid();
const response = await request.post('/api/websites', {
headers: authHeaders(auth),
data: { ...websites.websiteCreate, id: fixedId },
});
const body = await response.json();
expect(response.status()).toBe(200);
expect(body).toHaveProperty('id', fixedId);
expect(body).toHaveProperty('name', 'Playwright Website');
expect(body).toHaveProperty('domain', 'playwright.com');
await request.delete(`/api/websites/${fixedId}`, {
headers: authHeaders(auth),
});
});
test('returns all tracked websites', async ({ request }) => {
const response = await request.get('/api/websites', {
headers: authHeaders(auth),
});
const body = await response.json();
expect(response.status()).toBe(200);
expect(body.data[0]).toHaveProperty('id');
expect(body.data[0]).toHaveProperty('name');
expect(body.data[0]).toHaveProperty('domain');
});
test('gets a website by ID', async ({ request }) => {
const response = await request.get(`/api/websites/${websiteId}`, {
headers: authHeaders(auth),
});
const body = await response.json();
expect(response.status()).toBe(200);
expect(body).toHaveProperty('name', 'Playwright Website');
expect(body).toHaveProperty('domain', 'playwright.com');
});
test('updates a website', async ({ request }) => {
const response = await request.post(`/api/websites/${websiteId}`, {
headers: authHeaders(auth),
data: websites.websiteUpdate,
});
const body = await response.json();
websiteId = body.id;
expect(response.status()).toBe(200);
expect(body).toHaveProperty('name', 'Playwright Website Updated');
expect(body).toHaveProperty('domain', 'playwrightupdated.com');
});
test('updates a website with only shareId', async ({ request }) => {
const response = await request.post(`/api/websites/${websiteId}`, {
headers: authHeaders(auth),
data: { shareId: 'ABCDEF' },
});
const body = await response.json();
expect(response.status()).toBe(200);
expect(body).toHaveProperty('shareId', 'ABCDEF');
});
test('resets a website by removing all data related to the website', async ({ request }) => {
const response = await request.post(`/api/websites/${websiteId}/reset`, {
headers: authHeaders(auth),
});
const body = await response.json();
expect(response.status()).toBe(200);
expect(body).toHaveProperty('ok', true);
});
test('deletes a website', async ({ request }) => {
const response = await request.delete(`/api/websites/${websiteId}`, {
headers: authHeaders(auth),
});
const body = await response.json();
websiteId = '';
expect(response.status()).toBe(200);
expect(body).toHaveProperty('ok', true);
});
});