mirror of
https://github.com/solidtime-io/solidtime.git
synced 2026-10-08 13:53:17 +01:00
75 lines
3.5 KiB
TypeScript
75 lines
3.5 KiB
TypeScript
import { adminTest as test, expect } from '../playwright/fixtures';
|
|
import { PLAYWRIGHT_BASE_URL, TEST_USER_PASSWORD } from '../playwright/config';
|
|
|
|
/**
|
|
* Index pages of all Filament resources that ship with the core application.
|
|
* Resources provided by extensions are intentionally left out, because
|
|
* extensions are not installed in CI.
|
|
*/
|
|
const resourcePages = [
|
|
{ path: '/admin/time-entries', heading: 'Time Entries' },
|
|
{ path: '/admin/projects', heading: 'Projects' },
|
|
{ path: '/admin/tasks', heading: 'Tasks' },
|
|
{ path: '/admin/clients', heading: 'Clients' },
|
|
{ path: '/admin/tags', heading: 'Tags' },
|
|
{ path: '/admin/reports', heading: 'Reports' },
|
|
{ path: '/admin/users', heading: 'Users' },
|
|
{ path: '/admin/organizations', heading: 'Organizations' },
|
|
{ path: '/admin/organization-invitations', heading: 'Invitations' },
|
|
{ path: '/admin/project-members', heading: 'Project Members' },
|
|
{ path: '/admin/tokens', heading: 'Tokens' },
|
|
{ path: '/admin/failed-jobs', heading: 'Failed Jobs' },
|
|
];
|
|
|
|
test.describe('Admin Panel Access', () => {
|
|
test.use({ storageState: undefined });
|
|
|
|
test('test that the admin panel redirects guests to the login page', async ({ page }) => {
|
|
await page.goto(PLAYWRIGHT_BASE_URL + '/admin');
|
|
await expect(page).toHaveURL(PLAYWRIGHT_BASE_URL + '/login');
|
|
});
|
|
|
|
test('test that the admin panel is forbidden for users that are no super admin', async ({
|
|
page,
|
|
}) => {
|
|
const email = `john+${Date.now()}_${Math.floor(Math.random() * 10000)}@doe.com`;
|
|
await page.goto(PLAYWRIGHT_BASE_URL + '/register');
|
|
await page.getByLabel('Name').fill('John Doe');
|
|
await page.getByLabel('Email').fill(email);
|
|
await page.getByLabel('Password', { exact: true }).fill(TEST_USER_PASSWORD);
|
|
await page.getByLabel('Confirm Password').fill(TEST_USER_PASSWORD);
|
|
await page.getByLabel('I agree to the Terms of').click();
|
|
await page.getByRole('button', { name: 'Register' }).click();
|
|
await expect(page.getByTestId('dashboard_view')).toBeVisible();
|
|
|
|
const response = await page.goto(PLAYWRIGHT_BASE_URL + '/admin');
|
|
expect(response?.status()).toBe(403);
|
|
});
|
|
});
|
|
|
|
test.describe('Admin Panel', () => {
|
|
test('test that the admin dashboard loads with all widgets', async ({ page }) => {
|
|
await page.goto(PLAYWRIGHT_BASE_URL + '/admin');
|
|
|
|
await expect(page.getByRole('heading', { name: 'Dashboard', level: 1 })).toBeVisible();
|
|
|
|
// The widgets are loaded lazily via Livewire, so they only show up once
|
|
// their content has been rendered.
|
|
await expect(page.getByText('Total real users')).toBeVisible();
|
|
await expect(page.getByText('Placeholder users')).toBeVisible();
|
|
await expect(page.getByText('Active users in the last seven days')).toBeVisible();
|
|
await expect(page.getByText('User Registrations', { exact: true })).toBeVisible();
|
|
await expect(page.getByText('Time Entries Created', { exact: true })).toBeVisible();
|
|
await expect(page.getByText('Time Entries Imported', { exact: true })).toBeVisible();
|
|
});
|
|
|
|
for (const { path, heading } of resourcePages) {
|
|
test(`test that the admin page ${path} loads`, async ({ page }) => {
|
|
const response = await page.goto(PLAYWRIGHT_BASE_URL + path);
|
|
|
|
expect(response?.status()).toBe(200);
|
|
await expect(page.getByRole('heading', { name: heading, level: 1 })).toBeVisible();
|
|
});
|
|
}
|
|
});
|