import React from 'react';
import { renderToStaticMarkup } from 'react-dom/server';
import ValidationSummary from './ValidationSummary';
import { useProject } from '../context/ProjectContext';
jest.mock('../context/ProjectContext', () => ({ useProject: jest.fn() }));
const mockedUseProject = useProject as jest.Mock;
test('shows a shared blocking issue with its path in every consuming view', () => {
mockedUseProject.mockReturnValue({
validationPending: false,
validationUnavailable: null,
validation: {
valid: false,
errors: [{ code: 'DUPLICATE_OPTION_VALUE', path: '/project/pages/0/components/2/properties/options', message: 'Option value "dev" is duplicated.', severity: 'error' }],
warnings: [],
},
});
const markup = renderToStaticMarkup();
expect(markup).toContain('role="alert"');
expect(markup).toContain('Project validation failed');
expect(markup).toContain('/project/pages/0/components/2/properties/options');
expect(markup).toContain('Option value "dev" is duplicated.');
});
test('shows compatibility warnings without treating them as blocking errors', () => {
mockedUseProject.mockReturnValue({
validationPending: false,
validationUnavailable: null,
validation: {
valid: true,
errors: [],
warnings: [{ code: 'BINDING_TRANSFORM_DEFERRED', path: '/project/bindings/0/transform', message: 'Binding transforms are modeled but are not executed in v0.1.0.', severity: 'warning' }],
},
});
const markup = renderToStaticMarkup();
expect(markup).toContain('role="status"');
expect(markup).toContain('Compatibility warnings');
expect(markup).toContain('/project/bindings/0/transform');
});