import { mount } from '@vue/test-utils';
import HarvesterVPC from '../kubeovn.io.vpc.vue';
// A table that renders the page's group header for each of the given groups
function resourceTable(groups) {
return {
data: () => ({ groups }),
template: '
',
};
}
function mountList(groups) {
return mount(HarvesterVPC, {
props: { schema: { id: 'kubeovn.io.vpc' } },
data: () => ({ enabledKubeOvnAddon: true }),
global: {
stubs: {
ResourceTable: resourceTable(groups),
Masthead: true,
Loading: true,
'router-link': { template: '' },
},
mocks: {
$fetchState: { pending: false },
t: (key) => ({ 'harvester.vpc.label': 'Virtual Private Cloud', 'generic.none': 'None' }[key] || key),
$store: {
getters: {
currentProduct: { inStore: 'harvester' },
'harvester/all': () => [],
'harvester/schemaFor': () => ({ collectionMethods: ['POST'] }),
},
},
},
},
});
}
describe('list: kubeovn.io.vpc', () => {
it('should label a group of subnets without a VPC as None and offer no VPC actions', () => {
const wrapper = mountList([{ key: '' }]);
const group = wrapper.find('.group');
expect(group.find('.group-tab').text()).toBe('Virtual Private Cloud: None');
expect(group.find('.right').exists()).toBe(false);
});
it('should label a VPC group with its name and offer the VPC actions', () => {
const wrapper = mountList([{ key: 'ovn-cluster' }]);
const group = wrapper.find('.group');
expect(group.find('.group-tab').text()).toBe('Virtual Private Cloud: ovn-cluster');
expect(group.findAll('.right a, .right button')).toHaveLength(3);
});
});