import { mount } from 'enzyme';
import React from 'react';
import { ExpectedArtifactService } from '..';
import { ExpectedArtifactSelector } from './ExpectedArtifactSelector';
import type { IExpectedArtifact } from '../../domain';
const artifact = (type: string): IExpectedArtifact => {
const ea = ExpectedArtifactService.createEmptyArtifact();
ea.matchArtifact.customKind = false;
ea.matchArtifact.type = type;
return ea;
};
describe('', () => {
describe('filtering offered artifact types', () => {
it('only includes those artifacts with type matching a single offeredArtifactTypes regex', () => {
const artifacts = [artifact('gcs/object'), artifact('docker/image')];
const sel = mount(
{}}
offeredArtifactTypes={[/.*gcs.*/]}
/>,
);
const filteredArtifacts = sel.find('TetheredSelect').prop('options') as any[];
expect(filteredArtifacts.length).toBe(1);
expect(filteredArtifacts[0].expectedArtifact.matchArtifact.type).toBe('gcs/object');
});
it('only includes those artifacts whose type matches any of the regexes in the offeredArtifactTypes array', () => {
const artifacts = [artifact('gcs/object'), artifact('foo/bar'), artifact('docker/image')];
const sel = mount(
{}}
offeredArtifactTypes={[/.*gcs.*/, /.*docker.*/]}
/>,
);
const filteredArtifacts = sel.find('TetheredSelect').prop('options') as any[];
expect(filteredArtifacts.length).toBe(2);
expect(filteredArtifacts[0].expectedArtifact.matchArtifact.type).toBe('gcs/object');
expect(filteredArtifacts[1].expectedArtifact.matchArtifact.type).toBe('docker/image');
});
});
describe('excluding artifact types', () => {
it('excludes single artifact types defined by regex', () => {
const artifacts = [artifact('gcs/object'), artifact('docker/image')];
const sel = mount(
{}}
excludedArtifactTypes={[/.*gcs.*/]}
/>,
);
const filteredArtifacts = sel.find('TetheredSelect').prop('options') as any[];
expect(filteredArtifacts.length).toBe(1);
expect(filteredArtifacts[0].expectedArtifact.matchArtifact.type).toBe('docker/image');
});
it('excludes multiple artifact types defined by regex', () => {
const artifacts = [artifact('gcs/object'), artifact('gcs/bucket'), artifact('docker/image')];
const sel = mount(
{}}
excludedArtifactTypes={[/.*gcs.*/]}
/>,
);
const filteredArtifacts = sel.find('TetheredSelect').prop('options') as any[];
expect(filteredArtifacts.length).toBe(1);
expect(filteredArtifacts[0].expectedArtifact.matchArtifact.type).toBe('docker/image');
});
it('excludes multiple artifact types defined by multiples regexes', () => {
const artifacts = [artifact('gcs/object'), artifact('docker/image')];
const sel = mount(
{}}
excludedArtifactTypes={[/.*gcs.*/, /.*docker.*/]}
/>,
);
const filteredArtifacts = sel.find('TetheredSelect').prop('options') as any[];
expect(filteredArtifacts.length).toBe(0);
});
});
describe('creating a new artifact', () => {
it('provides an option to create a new artifact when an onRequestCreate prop is given', () => {
const artifacts = [artifact('gcs/object')];
const sel = mount(
{}} onRequestCreate={() => {}} />,
);
const options = sel.find('TetheredSelect').prop('options') as any[];
expect(options.length).toBe(2);
});
it('doesnt provide an option to create a new artifact when an onRequestCreate prop is not given', () => {
const artifacts = [artifact('gcs/object')];
const sel = mount( {}} />);
const options = sel.find('TetheredSelect').prop('options') as any[];
expect(options.length).toBe(1);
});
});
});