Files
tacticalrmm/web/test/jest/__tests__/automation/policyoverview.spec.js
2020-06-10 12:53:36 -04:00

137 lines
3.1 KiB
JavaScript

import { mount, createLocalVue } from "@vue/test-utils";
import Vuex from "vuex";
import PolicyOverview from "@/components/automation/PolicyOverview";
import "../../utils/quasar.js";
const localVue = createLocalVue();
localVue.use(Vuex);
describe("PolicyOverview.vue", () => {
const policyTreeData = [
{
// node 0
client: "Client Name 1",
policy: {
id: 1,
name: "Policy Name 1",
active: true
},
// node -1
sites: [
{
site: "Site Name 1",
policy: null
}
]
},
{
// node -2
client: "Client Name 2",
policy: {
id: 2,
name: "Policy Name 2",
active: true
},
sites: [
{
// node -3
site: "Site Name 2",
policy: {
id: 3,
name: "Policy Name 3",
active: false
}
}
]
}
];
let wrapper, actions, mutations, store;
// Runs before every test
beforeEach(() => {
actions = {
loadPolicyTreeData: jest.fn(() => new Promise(res => res({ data: policyTreeData }))),
loadPolicyChecks: jest.fn(),
loadPolicyAutomatedTasks: jest.fn()
};
mutations = {
setSelectedPolicy: jest.fn()
};
store = new Vuex.Store({
modules: {
automation: {
namespaced: true,
mutations,
actions
}
}
});
wrapper = mount(PolicyOverview, {
localVue,
store,
stubs: [
"PolicyChecksTab",
"PolicyAutomatedTasksTab"
]
});
});
// The Tests
it("calls vuex actions on mount", () => {
expect(actions.loadPolicyTreeData).toHaveBeenCalled();
});
it("renders tree data", async () => {
await localVue.nextTick();
const tree = wrapper.findComponent({ ref: "tree" });
const policy1 = tree.vm.getNodeByKey(1);
const policy2 = tree.vm.getNodeByKey(2);
const client1 = tree.vm.getNodeByKey(0);
const client2 = tree.vm.getNodeByKey(-2);
const site1 = tree.vm.getNodeByKey(-1);
const site2 = tree.vm.getNodeByKey(-3);
expect(policy1.label).toBe("Policy Name 1");
expect(policy2.label).toBe("Policy Name 2");
expect(client1.label).toBe("Client Name 1");
expect(client2.label).toBe("Client Name 2");
expect(site1.label).toBe("Site Name 1");
expect(site2.label).toBe("Site Name 2");
});
it("selects tree node and updates data property with policy", async () => {
// Expected rendered policy node data
const returnData = {
icon: "policy",
id: 1,
label: "Policy Name 1"
};
await localVue.nextTick();
// Get second tree node which should be the first policy
wrapper.findAll(".q-tree__node-header").wrappers[1].trigger("click");
expect(wrapper.vm.selectedPolicy).toStrictEqual(returnData);
expect(actions.loadPolicyChecks).toHaveBeenCalledWith(expect.anything(), 1);
expect(mutations.setSelectedPolicy).toHaveBeenCalledWith(expect.anything(), 1);
expect(actions.loadPolicyAutomatedTasks).toHaveBeenCalledWith(expect.anything(), 1);
});
});