mirror of https://github.com/rancher/dashboard.git
147 lines
6.8 KiB
TypeScript
147 lines
6.8 KiB
TypeScript
import { mount } from '@vue/test-utils';
|
|
import PromptModal from '@shell/components/PromptModal.vue';
|
|
|
|
import GenericPrompt from '@shell/dialog/GenericPrompt.vue';
|
|
import AddClusterMemberDialog from '@shell/dialog/AddClusterMemberDialog.vue';
|
|
import AddCustomBadgeDialog from '@shell/dialog/AddCustomBadgeDialog.vue';
|
|
import AddonConfigConfirmationDialog from '@shell/dialog/AddonConfigConfirmationDialog.vue';
|
|
import AddProjectMemberDialog from '@shell/dialog/AddProjectMemberDialog.vue';
|
|
import DeactivateDriverDialog from '@shell/dialog/DeactivateDriverDialog.vue';
|
|
import DiagnosticTimingsDialog from '@shell/dialog/DiagnosticTimingsDialog.vue';
|
|
import DrainNode from '@shell/dialog/DrainNode.vue';
|
|
import ForceMachineRemoveDialog from '@shell/dialog/ForceMachineRemoveDialog.vue';
|
|
import GitRepoForceUpdateDialog from '@shell/dialog/GitRepoForceUpdateDialog.vue';
|
|
import RollbackWorkloadDialog from '@shell/dialog/RollbackWorkloadDialog.vue';
|
|
import RotateCertificatesDialog from '@shell/dialog/RotateCertificatesDialog.vue';
|
|
import RotateEncryptionKeyDialog from '@shell/dialog/RotateEncryptionKeyDialog.vue';
|
|
import ScaleMachineDownDialog from '@shell/dialog/ScaleMachineDownDialog.vue';
|
|
import ScalePoolDownDialog from '@shell/dialog/ScalePoolDownDialog.vue';
|
|
import SloDialog from '@shell/dialog/SloDialog.vue';
|
|
|
|
import DisableAuthProviderDialog from '@shell/dialog/DisableAuthProviderDialog.vue';
|
|
import WechatDialog from '@shell/dialog/WechatDialog.vue';
|
|
import DeveloperLoadExtensionDialog from '@shell/dialog/DeveloperLoadExtensionDialog.vue';
|
|
import AddExtensionReposDialog from '@shell/dialog/AddExtensionReposDialog.vue';
|
|
import InstallExtensionDialog from '@shell/dialog/InstallExtensionDialog.vue';
|
|
import UninstallExtensionDialog from '@shell/dialog/UninstallExtensionDialog.vue';
|
|
import KnownHostsEditDialog from '@shell/dialog/KnownHostsEditDialog.vue';
|
|
import ImportDialog from '@shell/dialog/ImportDialog.vue';
|
|
import SearchDialog from '@shell/dialog/SearchDialog.vue';
|
|
import ChangePasswordDialog from '@shell/dialog/ChangePasswordDialog.vue';
|
|
import AssignToDialog from '@shell/dialog/AssignToDialog.vue';
|
|
import FeatureFlagListDialog from '@shell/dialog/FeatureFlagListDialog.vue';
|
|
import MoveNamespaceDialog from '@shell/dialog/MoveNamespaceDialog.vue';
|
|
import ExtensionCatalogInstallDialog from '@shell/dialog/ExtensionCatalogInstallDialog.vue';
|
|
import ExtensionCatalogUninstallDialog from '@shell/dialog/ExtensionCatalogUninstallDialog.vue';
|
|
|
|
import { createStore } from 'vuex';
|
|
|
|
jest.mock('@shell/utils/clipboard', () => {
|
|
return { copyTextToClipboard: jest.fn(() => Promise.resolve({})) };
|
|
});
|
|
|
|
function generateStore(component: any):any {
|
|
return createStore({
|
|
modules: { // promptModal
|
|
'action-menu': {
|
|
namespaced: true,
|
|
state: {
|
|
modalData: {
|
|
closeOnClickOutside: true,
|
|
resources: [{ cluster: { isRke2: true, machines: [] } }], // ScaleMachineDownDialog
|
|
componentProps: {
|
|
drivers: [], // DeactivateDriverDialog
|
|
driverType: 'kontainerDrivers', // DeactivateDriverDialog
|
|
downloadData: () => jest.fn(), // DiagnosticTimingsDialog
|
|
gatherResponseTimes: () => jest.fn(), // DiagnosticTimingsDialog
|
|
kubeNodes: [{}], // DrainNode
|
|
repositories: [], // GitRepoForceUpdateDialog
|
|
workload: { metadata: {}, kind: '' }, // RollbackWorkloadDialog
|
|
catalog: {}
|
|
},
|
|
},
|
|
|
|
},
|
|
},
|
|
},
|
|
getters: {
|
|
'type-map/importDialog': () => () => component, // promptModal
|
|
'i18n/exists': () => jest.fn(), // promptModal
|
|
'i18n/t': () => jest.fn(), // general usage
|
|
'rancher/schemaFor': () => jest.fn(), // general usage
|
|
'prefs/get': () => jest.fn(), // ScalePoolDownDialog
|
|
'type-map/allTypes': () => jest.fn(), // SearchDialog
|
|
'type-map/labelFor': () => jest.fn(), // ScaleMachineDownDialog
|
|
'type-map/getTree': () => jest.fn().mockReturnValue([]), // SearchDialog
|
|
'cluster/all': () => jest.fn(), // SearchDialog
|
|
currentProduct: () => { // SearchDialog
|
|
return { inStore: 'cluster' };
|
|
},
|
|
currentCluster: () => { // general usage
|
|
'local';
|
|
},
|
|
}
|
|
});
|
|
}
|
|
|
|
describe('component: PromptModal', () => {
|
|
it.each([
|
|
// current prompt modals at time of coding
|
|
['GenericPrompt', GenericPrompt],
|
|
['AddClusterMemberDialog', AddClusterMemberDialog],
|
|
['AddonConfigConfirmationDialog', AddonConfigConfirmationDialog],
|
|
['AddProjectMemberDialog', AddProjectMemberDialog],
|
|
['DeactivateDriverDialog', DeactivateDriverDialog],
|
|
['DiagnosticTimingsDialog', DiagnosticTimingsDialog],
|
|
['DrainNode', DrainNode],
|
|
['ForceMachineRemoveDialog', ForceMachineRemoveDialog],
|
|
['GitRepoForceUpdateDialog', GitRepoForceUpdateDialog],
|
|
['RollbackWorkloadDialog', RollbackWorkloadDialog],
|
|
['RotateCertificatesDialog', RotateCertificatesDialog],
|
|
['RotateEncryptionKeyDialog', RotateEncryptionKeyDialog],
|
|
['SloDialog', SloDialog],
|
|
['AddCustomBadgeDialog', AddCustomBadgeDialog],
|
|
['ScaleMachineDownDialog', ScaleMachineDownDialog],
|
|
['ScalePoolDownDialog', ScalePoolDownDialog],
|
|
// new modals created/moved
|
|
['DisableAuthProviderDialog', DisableAuthProviderDialog],
|
|
['WechatDialog', WechatDialog],
|
|
['DeveloperLoadExtensionDialog', DeveloperLoadExtensionDialog],
|
|
['AddExtensionReposDialog', AddExtensionReposDialog],
|
|
['InstallExtensionDialog', InstallExtensionDialog],
|
|
['UninstallExtensionDialog', UninstallExtensionDialog],
|
|
['KnownHostsEditDialog', KnownHostsEditDialog],
|
|
['ImportDialog', ImportDialog],
|
|
['SearchDialog', SearchDialog],
|
|
['ChangePasswordDialog', ChangePasswordDialog],
|
|
['AssignToDialog', AssignToDialog],
|
|
['FeatureFlagListDialog', FeatureFlagListDialog],
|
|
['MoveNamespaceDialog', MoveNamespaceDialog],
|
|
['ExtensionCatalogInstallDialog', ExtensionCatalogInstallDialog],
|
|
['ExtensionCatalogUninstallDialog', ExtensionCatalogUninstallDialog],
|
|
])('prompt Modal should render modal %p', (modalName, component) => {
|
|
// mock structuredClone
|
|
window.structuredClone = (arg) => JSON.parse(JSON.stringify(arg));
|
|
|
|
document.body.innerHTML = '<div id="modals"></div>';
|
|
const wrapper = mount(PromptModal,
|
|
{
|
|
attachTo: document.body,
|
|
data() {
|
|
return { opened: true }; // this controls modal content visibility
|
|
},
|
|
global: {
|
|
mocks: {
|
|
$store: generateStore(component),
|
|
$fetchState: {}
|
|
},
|
|
stubs: { transition: false }
|
|
}
|
|
}
|
|
);
|
|
|
|
expect(wrapper.vm.opened).toBe(true);
|
|
expect(wrapper.findComponent(component as any).exists()).toBe(true);
|
|
});
|
|
});
|