UNCLASSIFIED
Skip to content
GitLab
Projects
Groups
Snippets
Help
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in
Toggle navigation
Open sidebar
Platform One
P
Party Bus
Launchboard
launchboard-fe
Commits
71e172e1
Commit
71e172e1
authored
May 04, 2021
by
luke.glasscock
Committed by
graham.smith
May 04, 2021
Browse files
LB 34: Personnel Page Confirmation Box
parent
4fb49fbc
Changes
8
Hide whitespace changes
Inline
Side-by-side
Showing
8 changed files
with
666 additions
and
80 deletions
+666
-80
src/components/PersonnelTable.vue
src/components/PersonnelTable.vue
+63
-5
src/router/routes.js
src/router/routes.js
+1
-13
src/views/Home.vue
src/views/Home.vue
+34
-0
src/views/user/LaunchboardUser.vue
src/views/user/LaunchboardUser.vue
+137
-0
tests/unit/Home.spec.js
tests/unit/Home.spec.js
+138
-0
tests/unit/components/PersonnelTable.spec.js
tests/unit/components/PersonnelTable.spec.js
+283
-10
tests/unit/router/index.spec.js
tests/unit/router/index.spec.js
+4
-46
tests/unit/views/user/LaunchboardUser.spec.js
tests/unit/views/user/LaunchboardUser.spec.js
+6
-6
No files found.
src/components/PersonnelTable.vue
View file @
71e172e1
<
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
:
{
...
...
src/router/routes.js
View file @
71e172e1
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
"
,
...
...
src/views/Home.vue
0 → 100644
View file @
71e172e1
<
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
>
src/views/Launchboard.vue
→
src/views/
user/
Launchboard
User
.vue
View file @
71e172e1
<
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
>
...
...
tests/unit/Home.spec.js
0 → 100644
View file @
71e172e1
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
);
});
});
tests/unit/components/PersonnelTable.spec.js
View file @
71e172e1
...
@@ -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
);
});
});
});
tests/unit/router/index.spec.js
View file @
71e172e1
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
()
=>
{
...
...
tests/unit/views/Launchboard.spec.js
→
tests/unit/views/
user/
Launchboard
User
.spec.js
View file @
71e172e1
import
{
shallowMount
,
createLocalVue
}
from
"
@vue/test-utils
"
;
import
{
shallowMount
,
createLocalVue
}
from
"
@vue/test-utils
"
;
import
Launchboard
from
"
@/views/Launchboard.vue
"
;
import
Launchboard
User
from
"
@/views/
user/
Launchboard
User
.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
(
"
Launchboard
User
"
,
()
=>
{
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
(
Launchboard
User
,
{
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
(
Launchboard
User
,
{
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
(
Launchboard
User
,
{
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
(
Launchboard
User
,
{
store
,
localVue
});
wrapper
.
vm
.
user
=
{
wrapper
.
vm
.
user
=
{
auth
:
{
auth
:
{
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment