import type { ComponentProps } from 'react';
import React from 'react';
import { render, screen } from '@testing-library/react';
import { expect } from 'chai';
import sinon from 'sinon';
import { SchemaToolbar } from './schema-toolbar';
import AppRegistry from 'hadron-app-registry';
const mockQueryBarRole = {
name: 'Query Bar',
// eslint-disable-next-line react/display-name
component: () =>
Query bar
,
configureStore: () => ({}),
configureActions: () => {},
storeName: 'Query.Store',
actionName: 'Query.Actions',
};
const mockQueryBarStore = {
state: {
filterString: '123',
projectString: '',
sortString: '',
collationString: '',
skipString: '',
limitString: '',
maxTimeMSString: '',
},
};
const testErrorMessage =
'An error occurred during schema analysis: test error msg';
const renderSchemaToolbar = (
props: Partial> = {}
) => {
const localAppRegistry = new AppRegistry();
localAppRegistry.registerRole('Query.QueryBar', mockQueryBarRole);
localAppRegistry.registerStore(mockQueryBarRole.storeName, mockQueryBarStore);
render(
{}}
onResetClicked={() => {}}
sampleSize={10}
schemaResultId="123"
{...props}
/>
);
};
describe('SchemaToolbar', function () {
afterEach(function () {
sinon.restore();
});
it("renders errors when they're passed", function () {
renderSchemaToolbar({
analysisState: 'error',
errorMessage: 'test error msg',
});
expect(screen.getByText(testErrorMessage)).to.be.visible;
expect(screen.getByTestId('schema-toolbar-error-message')).to.be.visible;
});
it('does not render errors when the analysis state is not error', function () {
renderSchemaToolbar({
errorMessage: 'test error msg',
});
expect(screen.queryByText(testErrorMessage)).to.not.exist;
expect(screen.queryByTestId('schema-toolbar-error-message')).to.not.exist;
});
it('renders the sample size count', function () {
renderSchemaToolbar({
sampleSize: 123123,
});
expect(screen.getByTestId('schema-document-count').textContent).to.include(
'123123'
);
expect(screen.getByText(/This report is based on a sample of/)).to.be
.visible;
expect(screen.getByText('123123')).to.be.visible;
expect(screen.getByText(/documents/)).to.be.visible;
});
it('renders the sample size count non-plural', function () {
renderSchemaToolbar({
sampleSize: 1,
});
expect(screen.queryByText(/documents/)).to.not.exist;
});
it('renders the query bar role', function () {
renderSchemaToolbar();
expect(screen.getByText('Query bar')).to.be.visible;
});
});