更新
更旧
import { mountExtended } from 'helpers/vue_test_utils_helper';
import IdentifiersTable from 'ee/vulnerabilities/components/new_vulnerability/identifiers_table.vue';
import {
ERROR_IDENTIFIER_CODE,
ERROR_IDENTIFIER_URL,
} from 'ee/vulnerabilities/components/new_vulnerability/i18n';
describe('New vulnerability - Section Identifiers', () => {
let wrapper;
const createWrapper = () => {
return mountExtended(IdentifiersTable, {
propsData: {
validationState: { identifiers: [{ identifierCode: false }] },
},
});
};
beforeEach(() => {
wrapper = createWrapper();
});
const findIdentifierRows = () => wrapper.findAllByTestId('identifier-row');
const findFormGroup = (index) => wrapper.findAllComponents(GlFormGroup).at(index);
const findIdentifierCodeInput = () => wrapper.findByLabelText('Identifier code');
const findIdentifierUrlInput = () => wrapper.findByLabelText('Identifier URL');
it('does not display a warning when the validation state is emtpy', async () => {
wrapper.setProps({
validationState: {
identifiers: [],
},
});
await nextTick();
expect(findFormGroup(1).attributes('aria-invalid')).toBeUndefined();
expect(findFormGroup(0).attributes('aria-invalid')).toBeUndefined();
});
it('displays a warning when the validation fails', async () => {
wrapper.setProps({
validationState: {
identifiers: [{ identifierCode: false, identifierUrl: false }],
},
await nextTick();
expect(findFormGroup(0).attributes('aria-invalid')).toBe('true');
expect(findFormGroup(0).text()).toContain(ERROR_IDENTIFIER_CODE);
expect(findFormGroup(1).attributes('aria-invalid')).toBe('true');
expect(findFormGroup(1).text()).toContain(ERROR_IDENTIFIER_URL);
it('emits change event when input changes', async () => {
const codeInput = findIdentifierCodeInput();
const urlInput = findIdentifierUrlInput();
codeInput.setValue('cve-23');
urlInput.setValue('https://gitlab.com');
await nextTick();
expect(wrapper.emitted('change').at(-1)).toEqual([
{
identifiers: [{ name: 'cve-23', url: 'https://gitlab.com' }],
},
]);
});
it('adds and removes identifier rows', async () => {
expect(findIdentifierRows()).toHaveLength(1);
wrapper.findByRole('button', { name: 'Add another identifier' }).trigger('click');
await nextTick();
expect(findIdentifierRows()).toHaveLength(2);
expect(wrapper.emitted('change')[0][0]).toEqual({
identifiers: [
{ name: '', url: '' },
{ name: '', url: '' },
],
});
wrapper.findByLabelText('Remove identifier row').trigger('click');
await nextTick();
expect(findIdentifierRows()).toHaveLength(1);
expect(wrapper.findByLabelText('Remove identifier row').exists()).toBe(false);
});
});