test: inject real ConfirmService via context (batch 2/2)
Completes Phase 2a: geschichten/[id], persons/[id]/edit and admin/tags/[id] page specs now provide a real createConfirmService() via render context instead of mocking confirm.svelte. Zero confirm.svelte vi.mocks remain across the client suite (AC#4). Part of #560. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -1,10 +1,8 @@
|
||||
import { describe, it, expect, vi, afterEach } from 'vitest';
|
||||
import { describe, it, expect, afterEach } from 'vitest';
|
||||
import { cleanup, render } from 'vitest-browser-svelte';
|
||||
import { page } from 'vitest/browser';
|
||||
|
||||
vi.mock('$lib/shared/services/confirm.svelte', () => ({
|
||||
getConfirmService: () => ({ confirm: async () => false })
|
||||
}));
|
||||
import { createConfirmService, CONFIRM_KEY } from '$lib/shared/services/confirm.svelte.js';
|
||||
|
||||
const { default: GeschichtePage } = await import('./+page.svelte');
|
||||
|
||||
@@ -33,7 +31,10 @@ const baseData = (overrides: Record<string, unknown> = {}) => ({
|
||||
|
||||
describe('geschichten/[id] page', () => {
|
||||
it('renders the geschichte title as the level-1 heading', async () => {
|
||||
render(GeschichtePage, { props: { data: baseData() } });
|
||||
render(GeschichtePage, {
|
||||
context: new Map([[CONFIRM_KEY, createConfirmService()]]),
|
||||
props: { data: baseData() }
|
||||
});
|
||||
|
||||
await expect
|
||||
.element(page.getByRole('heading', { level: 1, name: /reise nach berlin/i }))
|
||||
@@ -41,13 +42,17 @@ describe('geschichten/[id] page', () => {
|
||||
});
|
||||
|
||||
it('renders the author full name from firstName + lastName', async () => {
|
||||
render(GeschichtePage, { props: { data: baseData() } });
|
||||
render(GeschichtePage, {
|
||||
context: new Map([[CONFIRM_KEY, createConfirmService()]]),
|
||||
props: { data: baseData() }
|
||||
});
|
||||
|
||||
await expect.element(page.getByText(/Anna Schmidt/)).toBeVisible();
|
||||
});
|
||||
|
||||
it('falls back to author email when no name is set', async () => {
|
||||
render(GeschichtePage, {
|
||||
context: new Map([[CONFIRM_KEY, createConfirmService()]]),
|
||||
props: {
|
||||
data: baseData({
|
||||
geschichte: baseGeschichte({
|
||||
@@ -62,6 +67,7 @@ describe('geschichten/[id] page', () => {
|
||||
|
||||
it('renders an empty author when author is null', async () => {
|
||||
render(GeschichtePage, {
|
||||
context: new Map([[CONFIRM_KEY, createConfirmService()]]),
|
||||
props: { data: baseData({ geschichte: baseGeschichte({ author: null }) }) }
|
||||
});
|
||||
|
||||
@@ -69,13 +75,17 @@ describe('geschichten/[id] page', () => {
|
||||
});
|
||||
|
||||
it('renders the publishedAt date suffix when publishedAt is set', async () => {
|
||||
render(GeschichtePage, { props: { data: baseData() } });
|
||||
render(GeschichtePage, {
|
||||
context: new Map([[CONFIRM_KEY, createConfirmService()]]),
|
||||
props: { data: baseData() }
|
||||
});
|
||||
|
||||
await expect.element(page.getByText(/veröffentlicht am/i)).toBeVisible();
|
||||
});
|
||||
|
||||
it('omits the publishedAt suffix when publishedAt is null', async () => {
|
||||
render(GeschichtePage, {
|
||||
context: new Map([[CONFIRM_KEY, createConfirmService()]]),
|
||||
props: { data: baseData({ geschichte: baseGeschichte({ publishedAt: null }) }) }
|
||||
});
|
||||
|
||||
@@ -83,13 +93,17 @@ describe('geschichten/[id] page', () => {
|
||||
});
|
||||
|
||||
it('omits the persons section when there are no linked persons', async () => {
|
||||
render(GeschichtePage, { props: { data: baseData() } });
|
||||
render(GeschichtePage, {
|
||||
context: new Map([[CONFIRM_KEY, createConfirmService()]]),
|
||||
props: { data: baseData() }
|
||||
});
|
||||
|
||||
await expect.element(page.getByText(/Personen in dieser Geschichte/i)).not.toBeInTheDocument();
|
||||
});
|
||||
|
||||
it('renders the persons section when there are linked persons', async () => {
|
||||
render(GeschichtePage, {
|
||||
context: new Map([[CONFIRM_KEY, createConfirmService()]]),
|
||||
props: {
|
||||
data: baseData({
|
||||
geschichte: baseGeschichte({
|
||||
@@ -108,13 +122,17 @@ describe('geschichten/[id] page', () => {
|
||||
});
|
||||
|
||||
it('omits the documents section when there are no linked documents', async () => {
|
||||
render(GeschichtePage, { props: { data: baseData() } });
|
||||
render(GeschichtePage, {
|
||||
context: new Map([[CONFIRM_KEY, createConfirmService()]]),
|
||||
props: { data: baseData() }
|
||||
});
|
||||
|
||||
await expect.element(page.getByText('Erwähnte Dokumente')).not.toBeInTheDocument();
|
||||
});
|
||||
|
||||
it('renders the documents section when there are linked documents', async () => {
|
||||
render(GeschichtePage, {
|
||||
context: new Map([[CONFIRM_KEY, createConfirmService()]]),
|
||||
props: {
|
||||
data: baseData({
|
||||
geschichte: baseGeschichte({
|
||||
@@ -129,7 +147,10 @@ describe('geschichten/[id] page', () => {
|
||||
});
|
||||
|
||||
it('renders edit and delete actions when canBlogWrite is true', async () => {
|
||||
render(GeschichtePage, { props: { data: baseData({ canBlogWrite: true }) } });
|
||||
render(GeschichtePage, {
|
||||
context: new Map([[CONFIRM_KEY, createConfirmService()]]),
|
||||
props: { data: baseData({ canBlogWrite: true }) }
|
||||
});
|
||||
|
||||
await expect
|
||||
.element(page.getByRole('link', { name: /bearbeiten/i }))
|
||||
@@ -138,7 +159,10 @@ describe('geschichten/[id] page', () => {
|
||||
});
|
||||
|
||||
it('hides edit and delete actions when canBlogWrite is false', async () => {
|
||||
render(GeschichtePage, { props: { data: baseData({ canBlogWrite: false }) } });
|
||||
render(GeschichtePage, {
|
||||
context: new Map([[CONFIRM_KEY, createConfirmService()]]),
|
||||
props: { data: baseData({ canBlogWrite: false }) }
|
||||
});
|
||||
|
||||
await expect.element(page.getByRole('link', { name: /bearbeiten/i })).not.toBeInTheDocument();
|
||||
await expect.element(page.getByRole('button', { name: /löschen/i })).not.toBeInTheDocument();
|
||||
|
||||
Reference in New Issue
Block a user