UNCLASSIFIED

Commit 71e172e1 authored by luke.glasscock's avatar luke.glasscock Committed by graham.smith
Browse files

LB 34: Personnel Page Confirmation Box

parent 4fb49fbc
<template> <template>
<div> <div>
<v-dialog
v-model="displayUserPermissionDialog"
persistent
width="500"
hide-overlay
id="user-permission-dialog"
>
<v-card class="ma-0">
<v-card-title> Confirm Permission Change </v-card-title>
<v-card-text class="text-left">
Are you sure you want to change your permission to "{{
permissionUserData.permission
}}"?
</v-card-text>
<v-card-actions>
<v-spacer></v-spacer>
<v-btn color="secondary" @click="cancelUserPermissionChange">
Cancel
</v-btn>
<v-btn color="primary" @click="confirmUserPermissionChange">
Confirm
</v-btn>
</v-card-actions>
</v-card>
</v-dialog>
<div <div
class="d-flex flex-wrap flex-sm-nowrap px-2 px-sm-4 mb-4 justify-space-between" class="d-flex flex-wrap flex-sm-nowrap px-2 px-sm-4 mb-4 justify-space-between"
> >
...@@ -69,7 +96,11 @@ import { ...@@ -69,7 +96,11 @@ import {
DEFAULT_TABLE_OPTIONS, DEFAULT_TABLE_OPTIONS,
} from "@/config/table-constants"; } from "@/config/table-constants";
import { createDefaultPaginationParams } from "@/utils/tableHelpers"; import { createDefaultPaginationParams } from "@/utils/tableHelpers";
import { SET_ERROR_MESSAGE, SET_ERROR_DIALOG } from "@/store/mutation-types"; import {
SET_USER,
SET_ERROR_MESSAGE,
SET_ERROR_DIALOG,
} from "@/store/mutation-types";
export default { export default {
name: "PersonnelTable", name: "PersonnelTable",
...@@ -141,6 +172,8 @@ export default { ...@@ -141,6 +172,8 @@ export default {
], ],
}, },
permissionTypes: Permission, permissionTypes: Permission,
displayUserPermissionDialog: false,
permissionUserData: {},
}; };
}, },
async mounted() { async mounted() {
...@@ -180,7 +213,6 @@ export default { ...@@ -180,7 +213,6 @@ export default {
} catch (error) { } catch (error) {
this.$store.commit(SET_ERROR_MESSAGE, error); this.$store.commit(SET_ERROR_MESSAGE, error);
this.$store.commit(SET_ERROR_DIALOG, true); this.$store.commit(SET_ERROR_DIALOG, true);
console.error("!personnel error!", error);
} finally { } finally {
this.loading = false; this.loading = false;
this.fetchingData = false; this.fetchingData = false;
...@@ -203,7 +235,6 @@ export default { ...@@ -203,7 +235,6 @@ export default {
await this.fetchData({}); await this.fetchData({});
this.personnel.selectedPersonnel = []; this.personnel.selectedPersonnel = [];
} catch (e) { } catch (e) {
console.error("!personnel error!", e);
this.$store.commit(SET_ERROR_MESSAGE, e); this.$store.commit(SET_ERROR_MESSAGE, e);
this.$store.commit(SET_ERROR_DIALOG, true); this.$store.commit(SET_ERROR_DIALOG, true);
} }
...@@ -222,8 +253,35 @@ export default { ...@@ -222,8 +253,35 @@ export default {
getPersonnelListItems() { getPersonnelListItems() {
return this.personnel.listItems; return this.personnel.listItems;
}, },
async updateUserPermissions(userData) { updateUserPermissions(userData) {
UserService.updateUserPermission([userData]); this.permissionUserData = userData;
if (this.$store.state.user.user.name === userData.name) {
this.displayUserPermissionDialog = true;
} else {
this.setUserPermissions(userData);
}
},
async setUserPermissions(userData, activeUser) {
try {
await UserService.updateUserPermission([userData]);
if (activeUser) {
const user = await UserService.getUser();
this.$store.commit(SET_USER, user);
this.$router.push({ name: "Launchboard" });
}
} catch (e) {
this.$store.commit(SET_ERROR_MESSAGE, e);
this.$store.commit(SET_ERROR_DIALOG, true);
this.fetchData({});
}
},
cancelUserPermissionChange() {
this.fetchData({});
this.displayUserPermissionDialog = false;
},
confirmUserPermissionChange() {
this.setUserPermissions(this.permissionUserData, true);
this.displayUserPermissionDialog = false;
}, },
}, },
watch: { watch: {
......
import NotAuthorizedComponent from "@/components/NotAuthorizedComponent"; import NotAuthorizedComponent from "@/components/NotAuthorizedComponent";
import NotFoundComponent from "@/components/NotFoundComponent"; import NotFoundComponent from "@/components/NotFoundComponent";
import store from "@/store";
import Permission from "@/config/user-permissions"; import Permission from "@/config/user-permissions";
export default [ export default [
{ {
path: "/", path: "/",
name: "Launchboard", name: "Launchboard",
component: async () => { component: () => import("@/views/Home.vue"),
const user = store.state.user.user;
switch (user.permission) {
case Permission.ADMIN:
return import("@/views/admin/LaunchboardAdmin.vue");
case Permission.SUPER_ADMIN:
return import("@/views/super-admin/LaunchboardSuperAdmin.vue");
default:
return import("@/views/Launchboard.vue");
}
},
meta: { meta: {
title: "Platform One: Launchboard", title: "Platform One: Launchboard",
bodyClass: "launchboard-page", bodyClass: "launchboard-page",
......
<template>
<div>
<LaunchboardSuperAdmin v-if="isSuperAdmin" />
<LaunchboardAdmin v-else-if="isAdmin" />
<LaunchboardUser v-else />
</div>
</template>
<script>
import LaunchboardUser from "@/views/user/LaunchboardUser";
import LaunchboardAdmin from "@/views/admin/LaunchboardAdmin";
import LaunchboardSuperAdmin from "@/views/super-admin/LaunchboardSuperAdmin";
import Permission from "@/config/user-permissions";
export default {
components: {
LaunchboardUser,
LaunchboardAdmin,
LaunchboardSuperAdmin,
},
name: "launchboard-home",
data: () => ({
Permission,
}),
computed: {
isAdmin() {
return this.$store.state.user.user.permission === Permission.ADMIN;
},
isSuperAdmin() {
return this.$store.state.user.user.permission === Permission.SUPER_ADMIN;
},
},
};
</script>
<template> <template>
<div> <v-container fluid class="px-2 px-md-4 px-lg-8 px-xl-16 pb-0">
<v-container fluid class="px-2 px-md-4 px-lg-8 px-xl-16 pb-0"> <v-row>
<v-row> <v-col cols="12" lg="6" class="d-flex flex-column pb-0 pb-lg-3">
<v-col cols="12" lg="6" class="d-flex flex-column pb-0 pb-lg-3"> <WelcomeTutorialModal
<WelcomeTutorialModal :showWelcomeMessage="displayTutorialModal && showWelcomeMessage"
:showWelcomeMessage="displayTutorialModal && showWelcomeMessage" :setDisplayTutorialModal="setDisplayTutorialModal"
:setDisplayTutorialModal="setDisplayTutorialModal" />
/> <UserBanner
<UserBanner :name="user.name"
:name="user.name" :company="user.organization"
:company="user.organization" :position="user.affiliation"
:position="user.affiliation" :avatar="user.avatar"
:avatar="user.avatar" />
/> <Section class="mt-6" v-if="showWelcomeMessage">
<Section class="mt-6" v-if="showWelcomeMessage"> <h4 slot="header" class="ma-0 pl-5 text-left">
<h4 slot="header" class="ma-0 pl-5 text-left"> Welcome to Platform One
Welcome to Platform One </h4>
</h4> <WelcomeSummary slot="content" />
<WelcomeSummary slot="content" /> </Section>
</Section>
<Section class="mt-6"> <Section class="mt-6">
<h4 slot="header" class="ma-0 pl-5 text-left"> <h4 slot="header" class="ma-0 pl-5 text-left">
My Curriculum Schedule My Curriculum Schedule
</h4> </h4>
<CurriculumSchedule slot="content" /> <CurriculumSchedule slot="content" />
</Section> </Section>
<Section class="mt-6"> <Section class="mt-6">
<h4 slot="header" class="ma-0 pl-5 text-left"> <h4 slot="header" class="ma-0 pl-5 text-left">
<TutorialTooltip tooltipName="helpDesk"> <TutorialTooltip tooltipName="helpDesk">
<span id="helpDeskTutorialTooltip"></span> <span id="helpDeskTutorialTooltip"></span>
</TutorialTooltip> </TutorialTooltip>
Help Desk Help Desk
</h4> </h4>
<HelpDeskSummary slot="content" /> <HelpDeskSummary slot="content" />
</Section> </Section>
</v-col> </v-col>
<v-col <v-col
cols="12" cols="12"
lg="6" lg="6"
class="d-flex flex-column py-0 pt-lg-3 mt-6 mt-lg-0" class="d-flex flex-column py-0 pt-lg-3 mt-6 mt-lg-0"
> >
<Section> <Section>
<h4 slot="header" class="ma-0 pl-5 text-left"> <h4 slot="header" class="ma-0 pl-5 text-left">
<TutorialTooltip tooltipName="projects"> <TutorialTooltip tooltipName="projects">
<span id="projectsTutorialTooltip"></span> <span id="projectsTutorialTooltip"></span>
</TutorialTooltip> </TutorialTooltip>
My Project Summary My Project Summary
</h4> </h4>
<span slot="header-right"> <span slot="header-right">
<v-tooltip top> <v-tooltip top>
<template v-slot:activator="{ on, attrs }"> <template v-slot:activator="{ on, attrs }">
<v-btn <v-btn
icon icon
v-bind="attrs" v-bind="attrs"
v-on="on" v-on="on"
@click="refreshProjectData" @click="refreshProjectData"
:loading="loadingProjectData" :loading="loadingProjectData"
> >
<v-icon>mdi-refresh</v-icon> <v-icon>mdi-refresh</v-icon>
</v-btn> </v-btn>
</template> </template>
<span>Refresh</span> <span>Refresh</span>
</v-tooltip> </v-tooltip>
</span> </span>
<ProjectsSummary <ProjectsSummary
slot="content" slot="content"
ref="projectSummary" ref="projectSummary"
:setProjectLoading="setProjectLoading" :setProjectLoading="setProjectLoading"
/> />
</Section> </Section>
<Section class="mt-6"> <Section class="mt-6">
<h4 slot="header" class="ma-0 pl-5 text-left"> <h4 slot="header" class="ma-0 pl-5 text-left">
<TutorialTooltip tooltipName="tools"> <TutorialTooltip tooltipName="tools">
<span id="toolsTutorialTooltip"></span> <span id="toolsTutorialTooltip"></span>
</TutorialTooltip> </TutorialTooltip>
Tools Tools
</h4> </h4>
<ToolsSummary slot="content" /> <ToolsSummary slot="content" />
</Section> </Section>
</v-col> </v-col>
</v-row> </v-row>
</v-container> </v-container>
</div>
</template> </template>
<script> <script>
......
import { shallowMount, createLocalVue } from "@vue/test-utils";
import Vuex from "vuex";
import Permission from "@/config/user-permissions";
import Home from "@/views/Home";
import LaunchBoardUserHomePage from "@/views/user/LaunchboardUser";
import LaunchBoardAdminHomePage from "@/views/admin/LaunchboardAdmin";
import LaunchBoardSuperAdminHomePage from "@/views/super-admin/LaunchboardSuperAdmin";
const localVue = createLocalVue();
localVue.use(Vuex);
describe("Home", () => {
afterEach(() => {
jest.resetAllMocks();
});
it("should default to LaunchboardUser if permission does not match", async () => {
const wrapper = shallowMount(Home, {
mocks: {
$vuetify: { theme: { dark: false } },
$store: {
state: {
user: {
user: { name: "mock user", permission: "" },
},
error: {},
tutorial: {},
userPreferences: {
userPreference: {
darkMode: true,
},
},
},
},
},
localVue,
});
expect(wrapper.findComponent(LaunchBoardUserHomePage).exists()).toBe(true);
expect(wrapper.findComponent(LaunchBoardAdminHomePage).exists()).toBe(
false
);
expect(wrapper.findComponent(LaunchBoardSuperAdminHomePage).exists()).toBe(
false
);
});
it("should load LaunchboardUser if permission matches", async () => {
const wrapper = shallowMount(Home, {
mocks: {
$vuetify: { theme: { dark: false } },
$store: {
state: {
user: {
user: { name: "mock user", permission: Permission.USER },
},
error: {},
tutorial: {},
userPreferences: {
userPreference: {
darkMode: true,
},
},
},
},
},
localVue,
});
expect(wrapper.findComponent(LaunchBoardUserHomePage).exists()).toBe(true);
expect(wrapper.findComponent(LaunchBoardAdminHomePage).exists()).toBe(
false
);
expect(wrapper.findComponent(LaunchBoardSuperAdminHomePage).exists()).toBe(
false
);
});
it("should load LaunchboardAdmin if permission matches", async () => {
const wrapper = shallowMount(Home, {
mocks: {
$vuetify: { theme: { dark: false } },
$store: {
state: {
user: {
user: { name: "mock user", permission: Permission.ADMIN },
},
error: {},
tutorial: {},
userPreferences: {
userPreference: {
darkMode: true,
},
},
},
},
},
localVue,
});
expect(wrapper.findComponent(LaunchBoardUserHomePage).exists()).toBe(false);
expect(wrapper.findComponent(LaunchBoardAdminHomePage).exists()).toBe(true);
expect(wrapper.findComponent(LaunchBoardSuperAdminHomePage).exists()).toBe(
false
);
});
it("should load LaunchboardSuperAdmin if permission matches", async () => {
const wrapper = shallowMount(Home, {
mocks: {
$vuetify: { theme: { dark: false } },
$store: {
state: {
user: {
user: { name: "mock user", permission: Permission.SUPER_ADMIN },
},
error: {},
tutorial: {},
userPreferences: {
userPreference: {
darkMode: true,
},
},
},
},
},
localVue,
});
expect(wrapper.findComponent(LaunchBoardUserHomePage).exists()).toBe(false);
expect(wrapper.findComponent(LaunchBoardAdminHomePage).exists()).toBe(
false
);
expect(wrapper.findComponent(LaunchBoardSuperAdminHomePage).exists()).toBe(
true
);
});
});
...@@ -4,6 +4,7 @@ import Vuex from "vuex"; ...@@ -4,6 +4,7 @@ import Vuex from "vuex";
import PersonnelTable from "@/components/PersonnelTable.vue"; import PersonnelTable from "@/components/PersonnelTable.vue";
import UserService from "@/api/services/user"; import UserService from "@/api/services/user";
import Permission from "@/config/user-permissions"; import Permission from "@/config/user-permissions";
import { SET_ERROR_MESSAGE, SET_ERROR_DIALOG } from "@/store/mutation-types";
const localVue = createLocalVue(); const localVue = createLocalVue();
localVue.use(Vuex); localVue.use(Vuex);
...@@ -28,15 +29,25 @@ describe("PersonnelTable", () => { ...@@ -28,15 +29,25 @@ describe("PersonnelTable", () => {
UserService.updateUserPersonnelType = jest.fn().mockResolvedValue([]); UserService.updateUserPersonnelType = jest.fn().mockResolvedValue([]);
const store = new Vuex.Store({ const wrapper = shallowMount(PersonnelTable, {
state: { mocks: {
user: { $vuetify: { theme: { dark: false } },
user: { name: "mock user", permission: Permission.USER }, $store: {
commit: jest.fn(),
state: {
user: {
user: { name: "mock user", permission: Permission.USER },
},
error: {},
tutorial: {},
userPreferences: {
userPreference: {
darkMode: true,
},
},
},
}, },
}, },
});
const wrapper = shallowMount(PersonnelTable, {
data() { data() {
return { return {
personnel: { personnel: {
...@@ -45,7 +56,6 @@ describe("PersonnelTable", () => { ...@@ -45,7 +56,6 @@ describe("PersonnelTable", () => {
params: {}, params: {},
}; };
}, },
store,
localVue, localVue,
}); });
...@@ -59,6 +69,57 @@ describe("PersonnelTable", () => { ...@@ -59,6 +69,57 @@ describe("PersonnelTable", () => {
expect(wrapper.vm.userPermission).toEqual("User"); expect(wrapper.vm.userPermission).toEqual("User");
}); });
it("should catch error when removing personnel", async () => {
UserService.getUsersByPersonnelType = jest
.fn()
.mockRejectedValue("mock error");
UserService.updateUserPersonnelType = jest
.fn()
.mockRejectedValue("mock error");
const wrapper = shallowMount(PersonnelTable, {
mocks: {
$vuetify: { theme: { dark: false } },
$store: {
commit: jest.fn(),
state: {
user: {
user: { name: "mock user", permission: Permission.USER },
},
error: {},
tutorial: {},
userPreferences: {
userPreference: {
darkMode: true,
},
},
},
},
},
data() {
return {
personnel: {
listItems: [{ id: 1 }],
},
params: {},
};
},
localVue,
});
wrapper.vm.personnel.selectedPersonnel = [{ id: 1 }];
await wrapper.vm.removePersonnel();
expect(wrapper.vm.$store.commit).toHaveBeenCalledWith(
SET_ERROR_MESSAGE,
"mock error"
);
expect(wrapper.vm.$store.commit).toHaveBeenCalledWith(
SET_ERROR_DIALOG,
true
);
});
it("should send email to personnel", async () => { it("should send email to personnel", async () => {
UserService.getUsersByPersonnelType = jest UserService.getUsersByPersonnelType = jest
.fn() .fn()
...@@ -110,11 +171,81 @@ describe("PersonnelTable", () => { ...@@ -110,11 +171,81 @@ describe("PersonnelTable", () => {
.fn() .fn()
.mockResolvedValue(mockUsersResponse); .mockResolvedValue(mockUsersResponse);
const wrapper = shallowMount(PersonnelTable); const wrapper = shallowMount(PersonnelTable, {
await wrapper.vm.updateUserPermissions(); mocks: {
$vuetify: { theme: { dark: false } },
$store: {
commit: jest.fn(),
state: {
user: {
user: { name: "mock user", permission: Permission.USER },
},
error: {},
tutorial: {},
userPreferences: {
userPreference: {
darkMode: true,
},
},
},
},
},
data() {
return {
personnel: {
listItems: [{ id: 1 }],
},
params: {},
};
},
localVue,
});
await wrapper.vm.updateUserPermissions({ name: "mock user2" });
expect(UserService.updateUserPermission).toHaveBeenCalled(); expect(UserService.updateUserPermission).toHaveBeenCalled();
}); });
it("should trigger confirmation modal if user is updating their own permission", async () => {
UserService.getUsersByPersonnelType = jest
.fn()
.mockResolvedValue(mockUsersResponse);
UserService.updateUserPermission = jest
.fn()
.mockResolvedValue(mockUsersResponse);
const wrapper = shallowMount(PersonnelTable, {
mocks: {
$vuetify: { theme: { dark: false } },
$store: {
commit: jest.fn(),
state: {
user: {
user: { name: "mock user", permission: Permission.USER },
},
error: {},
tutorial: {},
userPreferences: {
userPreference: {
darkMode: true,
},
},
},
},
},
data() {
return {
personnel: {
listItems: [{ id: 1 }],
},
params: {},
};
},
localVue,
});
await wrapper.vm.updateUserPermissions({ name: "mock user" });
expect(UserService.updateUserPermission).toHaveBeenCalledTimes(0);
});
it("should provide correct roleTypesDropdown", async () => { it("should provide correct roleTypesDropdown", async () => {
UserService.getUsersByPersonnelType = jest UserService.getUsersByPersonnelType = jest
.fn() .fn()
...@@ -169,4 +300,146 @@ describe("PersonnelTable", () => { ...@@ -169,4 +300,146 @@ describe("PersonnelTable", () => {
expect(wrapper.vm.fetchDebounced).toHaveBeenCalledTimes(1); expect(wrapper.vm.fetchDebounced).toHaveBeenCalledTimes(1);
expect(wrapper.vm.params.pageSize).toEqual(mockOptions.itemsPerPage); expect(wrapper.vm.params.pageSize).toEqual(mockOptions.itemsPerPage);
}); });
it("should setUserPermissions", async () => {
UserService.getUsersByPersonnelType = jest
.fn()
.mockResolvedValue(mockUsersResponse);
UserService.updateUserPermission = jest.fn();
UserService.getUser = jest
.fn()
.mockResolvedValue({ name: "mock user", permission: "User" });
const wrapper = shallowMount(PersonnelTable, {
mocks: {
$vuetify: { theme: { dark: false } },
$store: {
commit: jest.fn(),
state: {
user: {
user: { name: "mock user", permission: Permission.SUPER_ADMIN },
},
error: {},
tutorial: {},
userPreferences: {
userPreference: {
darkMode: true,
},
},
},
},
},
data() {
return {
personnel: {
listItems: [{ id: 1 }],
},
params: {},
};
},
localVue,
});
wrapper.vm.personnel.selectedPersonnel = [{ id: 1 }];
await wrapper.vm.setUserPermissions(
{
name: "mock user",
permission: "User",
},
true
);
expect(wrapper.vm.$store.commit).toHaveBeenCalledWith("user/setUser", {
name: "mock user",
permission: "User",
});
});
it("should cancelUserPermissionChange", async () => {
UserService.getUsersByPersonnelType = jest
.fn()
.mockResolvedValue(mockUsersResponse);
const wrapper = shallowMount(PersonnelTable, {
mocks: {
$vuetify: { theme: { dark: false } },
$store: {
commit: jest.fn(),
state: {
user: {
user: { name: "mock user", permission: Permission.SUPER_ADMIN },
},
error: {},
tutorial: {},
userPreferences: {
userPreference: {
darkMode: true,
},
},
},
},
},
data() {
return {
displayUserPermissionDialog: true,
personnel: {
listItems: [{ id: 1 }],
},
params: {},
};
},
localVue,
});
wrapper.vm.fetchData = jest.fn().mockResolvedValue({ test: "test" });
await wrapper.vm.cancelUserPermissionChange();
expect(wrapper.vm.fetchData).toHaveBeenCalled();
expect(wrapper.vm.displayUserPermissionDialog).toEqual(false);
});
it("should confirmUserPermissionChange", async () => {
UserService.getUsersByPersonnelType = jest
.fn()
.mockResolvedValue(mockUsersResponse);
const wrapper = shallowMount(PersonnelTable, {
mocks: {
$vuetify: { theme: { dark: false } },
$store: {
commit: jest.fn(),
state: {
user: {
user: { name: "mock user", permission: Permission.SUPER_ADMIN },
},
error: {},
tutorial: {},
userPreferences: {
userPreference: {
darkMode: true,
},
},
},
},
},
data() {
return {
permissionUserData: { name: "mock user" },
displayUserPermissionDialog: true,
personnel: {
listItems: [{ id: 1 }],
},
params: {},
};
},
localVue,
});
wrapper.vm.setUserPermissions = jest.fn();
await wrapper.vm.confirmUserPermissionChange();
expect(wrapper.vm.setUserPermissions).toHaveBeenCalledWith(
{
name: "mock user",
},
true
);
expect(wrapper.vm.displayUserPermissionDialog).toEqual(false);
});
}); });
import { shallowMount, createLocalVue } from "@vue/test-utils"; import { shallowMount, createLocalVue } from "@vue/test-utils";
import App from "@/App"; import App from "@/App";
import Vuex from "vuex"; import Vuex from "vuex";
import flushPromises from "flush-promises";
import LaunchBoardUserHomePage from "@/views/Launchboard.vue";
import LaunchBoardAdminHomePage from "@/views/admin/LaunchboardAdmin.vue";
import LaunchBoardSuperAdminHomePage from "@/views/super-admin/LaunchboardSuperAdmin.vue";
import VueRouter from "vue-router"; import VueRouter from "vue-router";
import routes from "@/router/routes"; import routes from "@/router/routes";
import Permission from "@/config/user-permissions"; import Permission from "@/config/user-permissions";
...@@ -24,54 +20,16 @@ describe("router", () => { ...@@ -24,54 +20,16 @@ describe("router", () => {
jest.clearAllMocks(); jest.clearAllMocks();
}); });
it("should have default path with correct component for Admin", async () => { it("should have default path and load Home component", async () => {
store.commit(SET_USER, {
name: "mock user",
permission: Permission.ADMIN,
});
window.scrollTo = jest.fn();
shallowMount(App, { localVue, router });
await flushPromises();
expect(router.currentRoute.fullPath).toEqual("/");
expect(router.currentRoute.matched[0].components.default.name).toEqual(
LaunchBoardAdminHomePage.name
);
});
it("should have default path with correct component for user", async () => {
store.commit(SET_USER, {
name: "mock user",
permission: Permission.USER,
});
window.scrollTo = jest.fn(); window.scrollTo = jest.fn();
shallowMount(App, { localVue, router }); const wrapper = shallowMount(App, { localVue, router });
await flushPromises(); await wrapper.vm.$router.push("/");
expect(router.currentRoute.fullPath).toEqual("/");
expect(router.currentRoute.matched[0].components.default.name).toEqual(
LaunchBoardUserHomePage.name
);
});
it("should have default path with correct component for Super Admin", async () => {
store.commit(SET_USER, {
name: "mock user",
permission: Permission.SUPER_ADMIN,
});
window.scrollTo = jest.fn();
shallowMount(App, { localVue, router });
await flushPromises();
expect(router.currentRoute.fullPath).toEqual("/"); expect(router.currentRoute.fullPath).toEqual("/");
expect(router.currentRoute.matched[0].components.default.name).toEqual( expect(router.currentRoute.matched[0].components.default.name).toEqual(
LaunchBoardSuperAdminHomePage.name (await import("@/views/Home.vue")).default.name
); );
await flushPromises();
}); });
it("should update scroll position", async () => { it("should update scroll position", async () => {
......
import { shallowMount, createLocalVue } from "@vue/test-utils"; import { shallowMount, createLocalVue } from "@vue/test-utils";
import Launchboard from "@/views/Launchboard.vue"; import LaunchboardUser from "@/views/user/LaunchboardUser.vue";
import Vuex from "vuex"; import Vuex from "vuex";
import Permission from "@/config/user-permissions"; import Permission from "@/config/user-permissions";
//import userPreference from "../../../src/api/services/userPreference"; //import userPreference from "../../../src/api/services/userPreference";
...@@ -9,7 +9,7 @@ import Permission from "@/config/user-permissions"; ...@@ -9,7 +9,7 @@ import Permission from "@/config/user-permissions";
const localVue = createLocalVue(); const localVue = createLocalVue();
localVue.use(Vuex); localVue.use(Vuex);
describe("Launchboard", () => { describe("LaunchboardUser", () => {
it("should get user from store", async () => { it("should get user from store", async () => {
const store = new Vuex.Store({ const store = new Vuex.Store({
state: { state: {
...@@ -24,7 +24,7 @@ describe("Launchboard", () => { ...@@ -24,7 +24,7 @@ describe("Launchboard", () => {
}, },
}, },
}); });
const wrapper = shallowMount(Launchboard, { store, localVue }); const wrapper = shallowMount(LaunchboardUser, { store, localVue });
expect(wrapper.vm.user).toEqual({ expect(wrapper.vm.user).toEqual({
name: "mock user", name: "mock user",
permission: Permission.USER, permission: Permission.USER,
...@@ -45,7 +45,7 @@ describe("Launchboard", () => { ...@@ -45,7 +45,7 @@ describe("Launchboard", () => {
}, },
}, },
}); });
const wrapper = shallowMount(Launchboard, { store, localVue }); const wrapper = shallowMount(LaunchboardUser, { store, localVue });
wrapper.vm.user = { wrapper.vm.user = {
auth: { auth: {
...@@ -69,7 +69,7 @@ describe("Launchboard", () => { ...@@ -69,7 +69,7 @@ describe("Launchboard", () => {
}, },
}, },
}); });
const wrapper = shallowMount(Launchboard, { store, localVue }); const wrapper = shallowMount(LaunchboardUser, { store, localVue });
wrapper.vm.user = { wrapper.vm.user = {
auth: { auth: {
...@@ -96,7 +96,7 @@ describe("Launchboard", () => { ...@@ -96,7 +96,7 @@ describe("Launchboard", () => {
}, },
}, },
}); });
const wrapper = shallowMount(Launchboard, { store, localVue }); const wrapper = shallowMount(LaunchboardUser, { store, localVue });
wrapper.vm.user = { wrapper.vm.user = {
auth: { auth: {
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment