Add upgrade CTAs for branding and watermarks

This commit is contained in:
Codex Agent
2026-01-15 10:17:05 +01:00
parent 94b736d6ae
commit eb4ec94e01
6 changed files with 116 additions and 10 deletions

View File

@@ -1,6 +1,6 @@
import React from 'react';
import { describe, expect, it, vi, beforeEach } from 'vitest';
import { render, screen, waitFor } from '@testing-library/react';
import { fireEvent, render, screen, waitFor } from '@testing-library/react';
const navigateMock = vi.fn();
const backMock = vi.fn();
@@ -163,4 +163,38 @@ describe('MobileBrandingPage', () => {
expect(screen.getByText('Theme')).toBeInTheDocument();
expect(screen.getByText('Colors')).toBeInTheDocument();
});
it('offers an upgrade CTA when branding is locked', async () => {
getEventMock.mockResolvedValueOnce({
...baseEvent,
package: { branding_allowed: false, watermark_allowed: false },
});
render(<MobileBrandingPage />);
await waitFor(() => {
expect(screen.getByText('Unlock branding')).toBeInTheDocument();
});
expect(screen.getByText('Upgrade package')).toBeInTheDocument();
});
it('offers an upgrade CTA on the watermark tab when disabled', async () => {
getEventMock.mockResolvedValueOnce({
...baseEvent,
package: { branding_allowed: true, watermark_allowed: false },
});
render(<MobileBrandingPage />);
await waitFor(() => {
expect(screen.getByText('Branding Source')).toBeInTheDocument();
});
fireEvent.click(screen.getByText('Wasserzeichen'));
await waitFor(() => {
expect(screen.getByText('Upgrade to Premium')).toBeInTheDocument();
});
});
});

View File

@@ -56,6 +56,16 @@ describe('selectRecommendedPackageId', () => {
const active = { id: 10, price: 250, max_photos: 999, max_guests: 999, gallery_days: 365, features: { advanced_analytics: true } } as any;
expect(selectRecommendedPackageId(packages, 'advanced_analytics', active)).toBe(2);
});
it('selects the cheapest package with watermark access when requested', () => {
const watermarkPackages = [
{ id: 1, price: 100, watermark_allowed: false, features: {} },
{ id: 2, price: 120, watermark_allowed: true, features: {} },
{ id: 3, price: 180, watermark_allowed: true, features: {} },
] as any;
const active = { id: 1, price: 100, watermark_allowed: false, features: {} } as any;
expect(selectRecommendedPackageId(watermarkPackages, 'watermark_allowed', active)).toBe(2);
});
});
describe('buildPackageComparisonRows', () => {