2021-03-23 12:09:33 +00:00
import { GlModal } from '@gitlab/ui' ;
2020-07-09 15:08:59 +00:00
import { shallowMount } from '@vue/test-utils' ;
2021-04-15 09:09:03 +00:00
import OncallSchedulesList from '~/vue_shared/components/oncall_schedules_list.vue' ;
2020-07-09 15:08:59 +00:00
import RemoveMemberModal from '~/vue_shared/components/remove_member_modal.vue' ;
2021-04-15 09:09:03 +00:00
const mockSchedules = JSON . stringify ( {
schedules : [
{
id : 1 ,
name : 'Schedule 1' ,
} ,
] ,
name : 'User1' ,
} ) ;
2020-07-09 15:08:59 +00:00
describe ( 'RemoveMemberModal' , ( ) => {
const memberPath = '/gitlab-org/gitlab-test/-/project_members/90' ;
let wrapper ;
const findForm = ( ) => wrapper . find ( { ref : 'form' } ) ;
2021-04-15 09:09:03 +00:00
const findGlModal = ( ) => wrapper . findComponent ( GlModal ) ;
const findOnCallSchedulesList = ( ) => wrapper . findComponent ( OncallSchedulesList ) ;
2020-07-09 15:08:59 +00:00
afterEach ( ( ) => {
wrapper . destroy ( ) ;
wrapper = null ;
} ) ;
describe . each `
2021-04-15 09:09:03 +00:00
state | memberType | isAccessRequest | isInvite | actionText | removeSubMembershipsCheckboxExpected | unassignIssuablesCheckboxExpected | message | onCallSchedules
$ { 'removing a group member' } | $ { 'GroupMember' } | $ { false } | $ { 'false' } | $ { 'Remove member' } | $ { true } | $ { true } | $ { 'Are you sure you want to remove Jane Doe from the Gitlab Org / Gitlab Test project?' } | $ { ` {} ` }
$ { 'removing a project member' } | $ { 'ProjectMember' } | $ { false } | $ { 'false' } | $ { 'Remove member' } | $ { false } | $ { true } | $ { 'Are you sure you want to remove Jane Doe from the Gitlab Org / Gitlab Test project?' } | $ { mockSchedules }
$ { 'denying an access request' } | $ { 'ProjectMember' } | $ { true } | $ { 'false' } | $ { 'Deny access request' } | $ { false } | $ { false } | $ { "Are you sure you want to deny Jane Doe's request to join the Gitlab Org / Gitlab Test project?" } | $ { ` {} ` }
$ { 'revoking invite' } | $ { 'ProjectMember' } | $ { false } | $ { 'true' } | $ { 'Revoke invite' } | $ { false } | $ { false } | $ { 'Are you sure you want to revoke the invitation for foo@bar.com to join the Gitlab Org / Gitlab Test project?' } | $ { mockSchedules }
2020-07-09 15:08:59 +00:00
` (
'when $state' ,
2021-03-23 12:09:33 +00:00
( {
actionText ,
memberType ,
isAccessRequest ,
2021-04-05 18:09:15 +00:00
isInvite ,
2021-03-23 12:09:33 +00:00
message ,
removeSubMembershipsCheckboxExpected ,
unassignIssuablesCheckboxExpected ,
2021-04-15 09:09:03 +00:00
onCallSchedules ,
2021-03-23 12:09:33 +00:00
} ) => {
2020-07-09 15:08:59 +00:00
beforeEach ( ( ) => {
wrapper = shallowMount ( RemoveMemberModal , {
data ( ) {
return {
modalData : {
isAccessRequest ,
2021-04-05 18:09:15 +00:00
isInvite ,
2020-07-09 15:08:59 +00:00
message ,
memberPath ,
2021-03-23 12:09:33 +00:00
memberType ,
2021-04-15 09:09:03 +00:00
onCallSchedules ,
2020-07-09 15:08:59 +00:00
} ,
} ;
} ,
} ) ;
} ) ;
2021-04-15 09:09:03 +00:00
const parsedSchedules = JSON . parse ( onCallSchedules ) ;
const isPartOfOncallSchedules = Boolean ( isAccessRequest && parsedSchedules . schedules ? . length ) ;
2020-07-09 15:08:59 +00:00
it ( ` has the title ${ actionText } ` , ( ) => {
expect ( findGlModal ( ) . attributes ( 'title' ) ) . toBe ( actionText ) ;
} ) ;
it ( 'contains a form action' , ( ) => {
expect ( findForm ( ) . attributes ( 'action' ) ) . toBe ( memberPath ) ;
} ) ;
it ( 'displays a message to the user' , ( ) => {
expect ( wrapper . find ( '[data-testid=modal-message]' ) . text ( ) ) . toBe ( message ) ;
} ) ;
2021-03-23 12:09:33 +00:00
it ( ` shows ${
removeSubMembershipsCheckboxExpected ? 'a' : 'no'
} checkbox to remove direct memberships of subgroups / projects ` , () => {
expect ( wrapper . find ( '[name=remove_sub_memberships]' ) . exists ( ) ) . toBe (
removeSubMembershipsCheckboxExpected ,
) ;
} ) ;
it ( ` shows ${
unassignIssuablesCheckboxExpected ? 'a' : 'no'
} checkbox to allow removal from related issues and MRs ` , () => {
expect ( wrapper . find ( '[name=unassign_issuables]' ) . exists ( ) ) . toBe (
unassignIssuablesCheckboxExpected ,
) ;
2020-07-09 15:08:59 +00:00
} ) ;
2021-04-15 09:09:03 +00:00
it ( ` shows ${ isPartOfOncallSchedules ? 'all' : 'no' } related on-call schedules ` , ( ) => {
expect ( findOnCallSchedulesList ( ) . exists ( ) ) . toBe ( isPartOfOncallSchedules ) ;
} ) ;
2020-07-09 15:08:59 +00:00
it ( 'submits the form when the modal is submitted' , ( ) => {
const spy = jest . spyOn ( findForm ( ) . element , 'submit' ) ;
findGlModal ( ) . vm . $emit ( 'primary' ) ;
expect ( spy ) . toHaveBeenCalled ( ) ;
spy . mockRestore ( ) ;
} ) ;
} ,
) ;
} ) ;