import '@testing-library/jest-dom';
import { RootNode } from '@stoplight/json-schema-tree';
import { render } from '@testing-library/react';
import { JSONSchema4 } from 'json-schema';
import * as React from 'react';
import { describe, expect, it } from 'vitest';
import { TopLevelSchemaRow } from '../SchemaRow/TopLevelSchemaRow';
import { buildTree } from '../shared/__tests__/utils';
describe('resolving permission error', () => {
let tree: RootNode;
let schema: JSONSchema4;
it('given an object schema has a mixture of properties with and without x-sl-error-message, a permission denied error message should be shown on properties with x-sl-error-message', () => {
schema = {
title: 'User',
type: 'object',
description: '',
properties: {
id: {
type: 'integer',
description: 'Unique identifier for the given user.',
},
firstName: {
type: 'string',
},
mailingAddress: {
type: 'object',
'x-sl-error-message': 'You do not have permission to view this reference',
'x-sl-internally-excluded': true,
},
billingAddresses: {
type: 'array',
'x-sl-error-message': 'You do not have permission to view this reference',
'x-sl-internally-excluded': true,
},
},
};
tree = buildTree(schema);
const wrapper = render();
const icons = wrapper.queryAllByLabelText('You do not have permission to view this reference');
expect(icons).toHaveLength(2);
wrapper.unmount();
});
it('given an object schema with all properties containing x-sl-error-message, a permission denied error message should be shown for each', () => {
schema = {
title: 'User',
type: 'object',
description: '',
properties: {
mailingAddress: {
type: 'object',
'x-sl-error-message': 'You do not have permission to view this reference',
'x-sl-internally-excluded': true,
},
testAddress: {
type: 'string',
'x-sl-error-message': 'You do not have permission to view this reference',
'x-sl-internally-excluded': true,
},
billingAddresses: {
type: 'array',
'x-sl-error-message': 'You do not have permission to view this reference',
'x-sl-internally-excluded': true,
},
},
};
tree = buildTree(schema);
const wrapper = render();
const icons = wrapper.queryAllByLabelText('You do not have permission to view this reference');
expect(icons).toHaveLength(3);
wrapper.unmount();
});
it('given an object schema where the toplevel contains x-sl-error-message, a permission denied error message should be shown', () => {
schema = {
type: 'object',
'x-sl-error-message': 'You do not have permission to view this reference',
'x-sl-internally-excluded': true,
};
tree = buildTree(schema);
const wrapper = render();
const icons = wrapper.queryAllByLabelText('You do not have permission to view this reference');
expect(icons).toHaveLength(1);
expect(icons[0]).toBeInTheDocument();
wrapper.unmount();
});
it('given an object schema has properties without ax-sl-error-message, a permission denied error message should not be shown', () => {
schema = {
title: 'User',
type: 'object',
description: '',
properties: {
id: {
type: 'integer',
description: 'Unique identifier for the given user.',
},
firstName: {
type: 'string',
},
otherName: {
type: 'array',
items: {
title: 'Address',
type: 'object',
description: '',
properties: {
id: {
type: 'integer',
description: 'Unique identifier for the given user.',
},
location: {
type: 'string',
},
},
},
},
},
};
tree = buildTree(schema);
const wrapper = render();
const icons = wrapper.queryAllByLabelText('You do not have permission to view this reference');
expect(icons).toHaveLength(0);
wrapper.unmount();
});
});