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
bba0851f
Commit
bba0851f
authored
May 05, 2021
by
hunter.congress
Browse files
adjusted positioning and font
parents
2f73066e
39d864e9
Changes
13
Hide whitespace changes
Inline
Side-by-side
Showing
13 changed files
with
727 additions
and
104 deletions
+727
-104
src/components/HelpDeskSummary.vue
src/components/HelpDeskSummary.vue
+16
-5
src/components/PersonnelTable.vue
src/components/PersonnelTable.vue
+63
-5
src/components/TutorialTooltip.vue
src/components/TutorialTooltip.vue
+5
-0
src/router/routes.js
src/router/routes.js
+1
-13
src/views/Home.vue
src/views/Home.vue
+34
-0
src/views/super-admin/Training.vue
src/views/super-admin/Training.vue
+19
-12
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/components/Training/TrainingAttendance.spec.js
tests/unit/components/Training/TrainingAttendance.spec.js
+4
-0
tests/unit/router/index.spec.js
tests/unit/router/index.spec.js
+4
-46
tests/unit/views/TrainingDetails.spec.js
tests/unit/views/TrainingDetails.spec.js
+17
-7
tests/unit/views/user/LaunchboardUser.spec.js
tests/unit/views/user/LaunchboardUser.spec.js
+6
-6
No files found.
src/components/HelpDeskSummary.vue
View file @
bba0851f
<
template
>
<
template
>
<v-container
class=
"help-desk-summary text-center px-8"
>
<v-container
class=
"help-desk-summary text-center px-8"
>
<div
class=
"support-row d-flex flex-wrap flex-sm-nowrap text-left pb-8"
>
<div
class=
"support-row d-flex flex-wrap flex-sm-nowrap text-left pb-8"
>
<div
class=
"pr-
0
pr-sm-10 pb-3 pb-md-0"
>
<div
class=
"pr-
2
pr-sm-10 pb-3 pb-md-0"
>
<div
class=
"subhead"
>
Platform One Support Hub
</div>
<div
class=
"subhead"
>
Platform One Support Hub
</div>
Any problems or requests regarding accounts, cybersecurity, or other
Any problems or requests regarding accounts, cybersecurity, or other
features can be issued here.
features can be issued here.
...
@@ -13,18 +13,18 @@
...
@@ -13,18 +13,18 @@
target=
"_blank"
target=
"_blank"
class=
"mx-auto no-link"
class=
"mx-auto no-link"
>
>
Issue
Ticket
Submit
Ticket
</v-btn>
</v-btn>
</div>
</div>
<div
class=
"support-row d-flex flex-wrap flex-sm-nowrap text-left"
>
<div
class=
"support-row d-flex flex-wrap flex-sm-nowrap text-left
pb-8
"
>
<div
class=
"pr-
0
pr-sm-10 pb-3 pb-sm-0"
>
<div
class=
"pr-
2
pr-sm-10 pb-3 pb-sm-0"
>
<div
class=
"subhead"
>
Platform One General Help
</div>
<div
class=
"subhead"
>
Platform One General Help
</div>
Can't find a support form that meets your needs?
Can't find a support form that meets your needs?
<br
/>
<br
/>
Email us at
Email us at
<a
href=
"mailto:help@dso.mil"
target=
"_blank"
>
help@dso.mil
</a>
<a
href=
"mailto:help@dso.mil"
target=
"_blank"
>
help@dso.mil
</a>
</div>
</div>
<v-spacer
/>
<v-spacer
class=
"d-none d-sm-flex"
/>
<v-btn
<v-btn
color=
"tertiary"
color=
"tertiary"
href=
"mailto:help@dso.mil"
href=
"mailto:help@dso.mil"
...
@@ -34,5 +34,16 @@
...
@@ -34,5 +34,16 @@
Email
Email
</v-btn>
</v-btn>
</div>
</div>
<div
class=
"support-row d-flex flex-wrap flex-sm-nowrap text-left"
>
<div
class=
"pr-2 pr-sm-10 pb-3 pb-sm-0"
>
<div
class=
"subhead"
>
Launchboard Support
</div>
Submit a feature request or provide feedback on how we can improve your
experience
</div>
<v-spacer
class=
"d-none d-sm-flex"
/>
<v-btn
color=
"primary"
:disabled=
"true"
class=
"mx-auto"
>
Coming Soon
</v-btn>
</div>
</v-container>
</v-container>
</
template
>
</
template
>
src/components/PersonnelTable.vue
View file @
bba0851f
<
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/components/TutorialTooltip.vue
View file @
bba0851f
...
@@ -134,6 +134,11 @@ export default {
...
@@ -134,6 +134,11 @@ export default {
.dialog-message
{
.dialog-message
{
font-size
:
14px
;
font-size
:
14px
;
font-weight
:
normal
;
font-weight
:
normal
;
font-style
:
normal
;
font-variant
:
normal
;
letter-spacing
:
normal
;
font-family
:
"Open Sans"
,
serif
;
line-height
:
1
.5
;
}
}
.bottom-tooltip-dark
{
.bottom-tooltip-dark
{
...
...
src/router/routes.js
View file @
bba0851f
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 @
bba0851f
<
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/super-admin/Training.vue
View file @
bba0851f
...
@@ -31,6 +31,18 @@
...
@@ -31,6 +31,18 @@
<v-row>
<v-row>
<v-col
cols=
"12"
md=
"9"
class=
"pl-0 pr-0 pr-sm-2"
>
<v-col
cols=
"12"
md=
"9"
class=
"pl-0 pr-0 pr-sm-2"
>
<v-row>
<v-row>
<v-col
cols=
"12"
sm=
"4"
class=
"filter-input"
>
<v-select
:items=
"filter.courseTypes"
@
change=
"fetchDebounced()"
v-model=
"filter.courseType"
class=
"body"
light
flat
single-line
hide-details
></v-select>
</v-col>
<v-col
cols=
"12"
sm=
"4"
class=
"filter-input"
>
<v-col
cols=
"12"
sm=
"4"
class=
"filter-input"
>
<v-menu
<v-menu
light
light
...
@@ -60,6 +72,7 @@
...
@@ -60,6 +72,7 @@
@
input=
"fetchDebounced()"
@
input=
"fetchDebounced()"
v-bind=
"attrs"
v-bind=
"attrs"
v-on=
"on"
v-on=
"on"
class=
"body"
></v-text-field>
></v-text-field>
</
template
>
</
template
>
<v-date-picker
<v-date-picker
...
@@ -72,18 +85,6 @@
...
@@ -72,18 +85,6 @@
></v-date-picker>
></v-date-picker>
</v-menu>
</v-menu>
</v-col>
</v-col>
<v-col
cols=
"12"
sm=
"4"
class=
"filter-input"
>
<v-select
:items=
"filter.courseTypes"
@
change=
"fetchDebounced()"
v-model=
"filter.courseType"
class=
"selector"
light
flat
single-line
hide-details
></v-select>
</v-col>
<v-col
cols=
"12"
sm=
"4"
class=
"filter-input pr-sm-1"
>
<v-col
cols=
"12"
sm=
"4"
class=
"filter-input pr-sm-1"
>
<v-text-field
<v-text-field
v-model=
"filter.search"
v-model=
"filter.search"
...
@@ -95,6 +96,7 @@
...
@@ -95,6 +96,7 @@
clearable
clearable
single-line
single-line
hide-details
hide-details
class=
"body"
></v-text-field>
></v-text-field>
</v-col>
</v-col>
</v-row>
</v-row>
...
@@ -519,4 +521,9 @@ export default {
...
@@ -519,4 +521,9 @@ export default {
}
}
}
}
}
}
.body
{
font-family
:
"Open Sans"
;
font-weight
:
400
;
font-size
:
13px
;
}
</
style
>
</
style
>
src/views/Launchboard.vue
→
src/views/
user/
Launchboard
User
.vue
View file @
bba0851f
<
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 @
bba0851f
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 @
bba0851f
...
@@ -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/components/Training/TrainingAttendance.spec.js
View file @
bba0851f
...
@@ -548,10 +548,14 @@ describe("TrainingAttendance", () => {
...
@@ -548,10 +548,14 @@ describe("TrainingAttendance", () => {
wrapper
.
vm
.
fetchDebounced
=
jest
.
fn
();
wrapper
.
vm
.
fetchDebounced
=
jest
.
fn
();
// trigger the watch for wrapper.vm.options
// trigger the watch for wrapper.vm.options
<<<<<<<
HEAD
const
mockOptions
=
2
;
const
mockOptions
=
2
;
wrapper
.
vm
.
reload
=
mockOptions
;
wrapper
.
vm
.
reload
=
mockOptions
;
await
wrapper
.
vm
.
$nextTick
();
await
wrapper
.
vm
.
$nextTick
();
=======
await
wrapper
.
setProps
({
reload
:
1
});
>>>>>>>
39
d864e956d8b08f5676a15024274c79a04f9070
expect
(
wrapper
.
vm
.
fetchDebounced
).
toHaveBeenCalledTimes
(
1
);
expect
(
wrapper
.
vm
.
fetchDebounced
).
toHaveBeenCalledTimes
(
1
);
});
});
...
...
tests/unit/router/index.spec.js
View file @
bba0851f
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/TrainingDetails.spec.js
View file @
bba0851f
...
@@ -17,6 +17,7 @@ describe("TrainingDetails", () => {
...
@@ -17,6 +17,7 @@ describe("TrainingDetails", () => {
trainingId
:
42
,
trainingId
:
42
,
},
},
};
};
const
mockCourse
=
{
instructors
:
[]
};
const
propsData
=
{
const
propsData
=
{
trainingCourse
:
{
trainingCourse
:
{
id
:
1
,
id
:
1
,
...
@@ -29,6 +30,10 @@ describe("TrainingDetails", () => {
...
@@ -29,6 +30,10 @@ describe("TrainingDetails", () => {
jest
.
resetAllMocks
();
jest
.
resetAllMocks
();
});
});
it
(
"
should fetch debounced
"
,
async
()
=>
{
it
(
"
should fetch debounced
"
,
async
()
=>
{
TrainingService
.
getCourse
=
jest
.
fn
().
mockResolvedValue
(
mockCourse
);
TrainingService
.
getCourseRegistrationsById
=
jest
.
fn
()
.
mockResolvedValue
({});
TrainingDetails
.
fetchData
=
jest
.
fn
();
TrainingDetails
.
fetchData
=
jest
.
fn
();
const
wrapper
=
shallowMount
(
TrainingDetails
,
{
const
wrapper
=
shallowMount
(
TrainingDetails
,
{
mocks
:
{
mocks
:
{
...
@@ -51,10 +56,12 @@ describe("TrainingDetails", () => {
...
@@ -51,10 +56,12 @@ describe("TrainingDetails", () => {
vuetify
,
vuetify
,
});
});
expect
(
wrapper
.
vm
.
fetchingData
).
toBe
(
false
);
expect
(
wrapper
.
vm
.
fetchingData
).
toBe
(
false
);
await
flushPromises
();
wrapper
.
vm
.
fetchDebounced
();
wrapper
.
vm
.
fetchDebounced
();
expect
(
wrapper
.
vm
.
fetchingData
).
toBe
(
true
);
expect
(
wrapper
.
vm
.
fetchingData
).
toBe
(
true
);
});
});
it
(
"
should fetchStudent data
"
,
async
()
=>
{
it
(
"
should fetchStudent data
"
,
async
()
=>
{
TrainingService
.
getCourse
=
jest
.
fn
().
mockResolvedValue
(
mockCourse
);
TrainingService
.
getCourseRegistrationsById
=
jest
.
fn
().
mockResolvedValue
({
TrainingService
.
getCourseRegistrationsById
=
jest
.
fn
().
mockResolvedValue
({
meta
:
{
total
:
2
},
meta
:
{
total
:
2
},
registrations
:
[
registrations
:
[
...
@@ -68,7 +75,6 @@ describe("TrainingDetails", () => {
...
@@ -68,7 +75,6 @@ describe("TrainingDetails", () => {
{},
{},
],
],
});
});
TrainingDetails
.
courseDates
=
jest
.
fn
().
mockReturnValue
([]);
const
wrapper
=
shallowMount
(
TrainingDetails
,
{
const
wrapper
=
shallowMount
(
TrainingDetails
,
{
mocks
:
{
mocks
:
{
$route
,
$route
,
...
@@ -93,13 +99,13 @@ describe("TrainingDetails", () => {
...
@@ -93,13 +99,13 @@ describe("TrainingDetails", () => {
});
});
await
wrapper
.
vm
.
fetchStudentData
();
await
wrapper
.
vm
.
fetchStudentData
();
await
flushPromises
();
await
flushPromises
();
expect
(
TrainingService
.
getCourseRegistrationsById
).
toBeCalledTimes
(
1
);
expect
(
TrainingService
.
getCourseRegistrationsById
).
toBeCalledTimes
(
2
);
});
});
it
(
"
should fetchStudent data with an empty string
"
,
async
()
=>
{
it
(
"
should fetchStudent data with an empty string
"
,
async
()
=>
{
TrainingService
.
getCourseRegistrationsById
=
jest
TrainingService
.
getCourseRegistrationsById
=
jest
.
fn
()
.
fn
()
.
mockResolvedValue
({});
.
mockResolvedValue
({});
Training
Details
.
courseDates
=
jest
.
fn
().
mockReturnValue
([]
);
Training
Service
.
getCourse
=
jest
.
fn
().
mockResolvedValue
(
mockCourse
);
const
wrapper
=
shallowMount
(
TrainingDetails
,
{
const
wrapper
=
shallowMount
(
TrainingDetails
,
{
mocks
:
{
mocks
:
{
$route
,
$route
,
...
@@ -124,14 +130,14 @@ describe("TrainingDetails", () => {
...
@@ -124,14 +130,14 @@ describe("TrainingDetails", () => {
});
});
await
wrapper
.
vm
.
fetchStudentData
();
await
wrapper
.
vm
.
fetchStudentData
();
await
flushPromises
();
await
flushPromises
();
expect
(
TrainingService
.
getCourseRegistrationsById
).
toBeCalledTimes
(
1
);
expect
(
TrainingService
.
getCourseRegistrationsById
).
toBeCalledTimes
(
2
);
expect
(
wrapper
.
vm
.
listItems
).
toStrictEqual
([]);
expect
(
wrapper
.
vm
.
listItems
).
toStrictEqual
([]);
});
});
it
(
"
should throw error in fetchStudent
"
,
async
()
=>
{
it
(
"
should throw error in fetchStudent
"
,
async
()
=>
{
TrainingService
.
getCourse
=
jest
.
fn
().
mockResolvedValue
(
mockCourse
);
TrainingService
.
getCourseRegistrationsById
=
jest
TrainingService
.
getCourseRegistrationsById
=
jest
.
fn
()
.
fn
()
.
mockRejectedValue
(
"
mock error
"
);
.
mockRejectedValue
(
"
mock error
"
);
TrainingDetails
.
courseDates
=
jest
.
fn
().
mockReturnValue
([]);
const
wrapper
=
shallowMount
(
TrainingDetails
,
{
const
wrapper
=
shallowMount
(
TrainingDetails
,
{
mocks
:
{
mocks
:
{
$route
,
$route
,
...
@@ -166,6 +172,7 @@ describe("TrainingDetails", () => {
...
@@ -166,6 +172,7 @@ describe("TrainingDetails", () => {
);
);
});
});
it
(
"
should add student
"
,
async
()
=>
{
it
(
"
should add student
"
,
async
()
=>
{
TrainingService
.
getCourse
=
jest
.
fn
().
mockResolvedValue
(
mockCourse
);
TrainingService
.
getCourseRegistrationsById
=
jest
TrainingService
.
getCourseRegistrationsById
=
jest
.
fn
()
.
fn
()
.
mockResolvedValue
({
registrations
:
[]
});
.
mockResolvedValue
({
registrations
:
[]
});
...
@@ -196,6 +203,8 @@ describe("TrainingDetails", () => {
...
@@ -196,6 +203,8 @@ describe("TrainingDetails", () => {
expect
(
TrainingService
.
addStudents
).
toHaveBeenCalledTimes
(
1
);
expect
(
TrainingService
.
addStudents
).
toHaveBeenCalledTimes
(
1
);
});
});
it
(
"
addStudent should catch error
"
,
async
()
=>
{
it
(
"
addStudent should catch error
"
,
async
()
=>
{
console
.
error
=
jest
.
fn
();
// mock console.error when expecting error messages
TrainingService
.
getCourse
=
jest
.
fn
().
mockResolvedValue
(
mockCourse
);
TrainingService
.
addStudents
=
jest
.
fn
().
mockRejectedValue
(
"
error
"
);
TrainingService
.
addStudents
=
jest
.
fn
().
mockRejectedValue
(
"
error
"
);
const
wrapper
=
shallowMount
(
TrainingDetails
,
{
const
wrapper
=
shallowMount
(
TrainingDetails
,
{
mocks
:
{
mocks
:
{
...
@@ -218,6 +227,7 @@ describe("TrainingDetails", () => {
...
@@ -218,6 +227,7 @@ describe("TrainingDetails", () => {
);
);
});
});
it
(
"
should cancel add student
"
,
async
()
=>
{
it
(
"
should cancel add student
"
,
async
()
=>
{
TrainingService
.
getCourse
=
jest
.
fn
().
mockResolvedValue
(
mockCourse
);
TrainingService
.
getCourseRegistrationsById
=
jest
TrainingService
.
getCourseRegistrationsById
=
jest
.
fn
()
.
fn
()
.
mockResolvedValue
({
registrations
:
[]
});
.
mockResolvedValue
({
registrations
:
[]
});
...
@@ -248,7 +258,7 @@ describe("TrainingDetails", () => {
...
@@ -248,7 +258,7 @@ describe("TrainingDetails", () => {
});
});
it
(
"
should not show error by default
"
,
()
=>
{
it
(
"
should not show error by default
"
,
()
=>
{
TrainingService
.
getCourse
=
jest
.
fn
().
mockResolvedValue
(
{}
);
TrainingService
.
getCourse
=
jest
.
fn
().
mockResolvedValue
(
mockCourse
);
// render the component
// render the component
const
wrapper
=
shallowMount
(
TrainingDetails
,
{
const
wrapper
=
shallowMount
(
TrainingDetails
,
{
mocks
:
{
mocks
:
{
...
@@ -273,7 +283,7 @@ describe("TrainingDetails", () => {
...
@@ -273,7 +283,7 @@ describe("TrainingDetails", () => {
});
});
it
(
"
should set training course snapshot and isEditingCourse on btnPushEditPoc
"
,
()
=>
{
it
(
"
should set training course snapshot and isEditingCourse on btnPushEditPoc
"
,
()
=>
{
TrainingService
.
getCourse
=
jest
.
fn
().
mockResolvedValue
(
{}
);
TrainingService
.
getCourse
=
jest
.
fn
().
mockResolvedValue
(
mockCourse
);
// render the component
// render the component
const
wrapper
=
shallowMount
(
TrainingDetails
,
{
const
wrapper
=
shallowMount
(
TrainingDetails
,
{
mocks
:
{
mocks
:
{
...
...
tests/unit/views/Launchboard.spec.js
→
tests/unit/views/
user/
Launchboard
User
.spec.js
View file @
bba0851f
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