fix: QA audit — lint cleanup, i18n fixes, module visibility, sidebar UX
Some checks failed
Workflow / ʦ TypeScript (push) Failing after 5m40s
Workflow / ⚫️ Test (push) Has been skipped

- Fix 97 lint errors → 0 (unused imports, params, variables across 40+ files)
- Fix i18n key format: colon → dot notation for next-intl compatibility
- Add missing i18n keys (routes.application, routes.home, confirm)
- Fix module visibility: sidebar now respects per-account DB features
- Fix inject function: use dot-notation keys, add collapsed:true defaults
- Fix ConfirmDialog: use useTranslations instead of hardcoded German defaults
- Fix events page: replace placeholder 'Beschreibung' with proper description
- Fix Dockerfile: add NEXT_PUBLIC_CI ARG for Docker builds
- Collapse secondary sidebar sections by default for cleaner UX
This commit is contained in:
Zaid Marzguioui
2026-04-02 14:39:20 +02:00
parent c6d564836f
commit 0bd5d0cf42
56 changed files with 387 additions and 234 deletions

View File

@@ -1,11 +1,11 @@
/**
* E2E Test: Course Enrollment
*/
import { test, expect } from '@playwright/test';
import { test } from '@playwright/test';
test.describe('Course Management', () => {
test('create course, enroll participant, check capacity, waitlist', async ({
page,
page: _page,
}) => {
// Create course with capacity 2
// Enroll participant 1 → status: enrolled
@@ -13,13 +13,13 @@ test.describe('Course Management', () => {
// Enroll participant 3 → status: waitlisted (capacity full)
});
test('course calendar view shows sessions', async ({ page }) => {
test('course calendar view shows sessions', async ({ page: _page }) => {
// Create course with sessions
// Navigate to calendar
// Verify sessions visible
});
test('attendance tracking', async ({ page }) => {
test('attendance tracking', async ({ page: _page }) => {
// Create course + session + participants
// Mark attendance
// Verify attendance persists

View File

@@ -4,7 +4,7 @@
import { test, expect } from '@playwright/test';
test.describe('Member Management', () => {
test('create member, edit, search, filter by status', async ({ page }) => {
test('create member, edit, search, filter by status', async ({ page: _page }) => {
await page.goto('/auth/sign-in');
await page.fill('input[name="email"]', 'test@example.com');
await page.fill('input[name="password"]', 'testpassword123');
@@ -16,14 +16,14 @@ test.describe('Member Management', () => {
});
test('application workflow: submit → review → approve → member created', async ({
page,
page: _page,
}) => {
// Submit application
// Review application
// Approve → verify member auto-created
});
test('SEPA mandate management', async ({ page }) => {
test('SEPA mandate management', async ({ page: _page }) => {
// Create member with IBAN
// Verify IBAN validation
// Create SEPA batch from dues

View File

@@ -5,7 +5,7 @@ import { test, expect } from '@playwright/test';
test.describe('Module Builder', () => {
test('create module, add fields, insert record, query, update, soft-delete', async ({
page,
page: _page,
}) => {
// Login
await page.goto('/auth/sign-in');
@@ -24,7 +24,7 @@ test.describe('Module Builder', () => {
});
test.describe('Cross-tenant isolation', () => {
test('tenant A cannot see tenant B data', async ({ page }) => {
test('tenant A cannot see tenant B data', async ({ page: _page }) => {
// Login as tenant A user
// Verify can see own modules
// Verify cannot access tenant B module URL

View File

@@ -1,11 +1,11 @@
/**
* E2E Test: Newsletter
*/
import { test, expect } from '@playwright/test';
import { test } from '@playwright/test';
test.describe('Newsletter', () => {
test('create campaign, select recipients from members, preview, send', async ({
page,
page: _page,
}) => {
// Create newsletter
// Add recipients from member filter (status=active, hasEmail=true)
@@ -14,7 +14,7 @@ test.describe('Newsletter', () => {
// Verify sent_count
});
test('template variable substitution works', async ({ page }) => {
test('template variable substitution works', async ({ page: _page }) => {
// Create template with {{first_name}} {{member_number}}
// Create newsletter from template
// Preview — verify variables replaced

View File

@@ -1,11 +1,11 @@
/**
* E2E Test: SEPA Batch Processing
*/
import { test, expect } from '@playwright/test';
import { test } from '@playwright/test';
test.describe('SEPA / Finance', () => {
test('create SEPA direct debit batch, add items, generate XML', async ({
page,
page: _page,
}) => {
// Create batch
// Add items with valid IBANs
@@ -14,12 +14,12 @@ test.describe('SEPA / Finance', () => {
// Verify amounts sum correctly
});
test('IBAN validation rejects invalid IBANs', async ({ page }) => {
test('IBAN validation rejects invalid IBANs', async ({ page: _page }) => {
// Try to add item with invalid IBAN
// Verify rejection
});
test('invoice creation with line items', async ({ page }) => {
test('invoice creation with line items', async ({ page: _page }) => {
// Create invoice
// Add 3 line items
// Verify subtotal, tax, total calculations