@@ -82,16 +82,66 @@ describe('CreateWorkPackageModal.vue', () => {
8282 } )
8383
8484 describe ( 'workpackage creation form' , ( ) => {
85+ let axiosSpy
86+ afterEach ( ( ) => {
87+ axiosSpy . mockRestore ( )
88+ jest . clearAllMocks ( )
89+ } )
90+
8591 it ( 'should display available projects in the project dropdown' , async ( ) => {
86- const axiosSpy = jest . spyOn ( axios , 'get' )
92+ axiosSpy = jest . spyOn ( axios , 'get' )
8793 . mockImplementationOnce ( ( ) => sendOCSResponse ( availableProjectsResponse ) )
8894 wrapper = mountWrapper ( true )
8995 expect ( wrapper . find ( createWorkPackageSelector ) . isVisible ( ) ) . toBe ( true )
9096 expect ( axiosSpy ) . toHaveBeenCalledWith ( projectsUrl , { } )
9197 await wrapper . find ( projectInputField ) . setValue ( ' ' )
9298 expect ( wrapper . find ( projectSelectSelector ) ) . toMatchSnapshot ( )
93- axiosSpy . mockRestore ( )
94- jest . clearAllMocks ( )
99+ } )
100+
101+ it ( 'should display projects even when parent project is unknown' , async ( ) => {
102+ const projectsListSelector = 'transition-stub > ul > li'
103+ const projectItemSelector = `${ projectsListSelector } :nth-child(%s) > span`
104+
105+ axiosSpy = jest . spyOn ( axios , 'get' )
106+ . mockImplementationOnce ( ( ) => sendOCSResponse ( {
107+ 4 : {
108+ name : 'Child Project' ,
109+ id : 4 ,
110+ identifier : 'child-project' ,
111+ _links : {
112+ self : {
113+ href : '/api/v3/projects/4' ,
114+ title : 'Child Project' ,
115+ } ,
116+ parent : {
117+ href : 'urn:openproject-org:api:v3:undisclosed' ,
118+ title : 'Undisclosed - The parent is invisible because of lacking permissions.' ,
119+ } ,
120+ } ,
121+ } ,
122+ 5 : {
123+ name : 'Another Project' ,
124+ id : 5 ,
125+ identifier : 'another-project' ,
126+ _links : {
127+ self : {
128+ href : '/api/v3/projects/5' ,
129+ title : 'Another Project' ,
130+ } ,
131+ parent : {
132+ href : '/api/v3/projects/1' ,
133+ title : 'Parent Project' ,
134+ } ,
135+ } ,
136+ } ,
137+ } ) )
138+ wrapper = mountWrapper ( true )
139+ expect ( wrapper . find ( createWorkPackageSelector ) . isVisible ( ) ) . toBe ( true )
140+ expect ( axiosSpy ) . toHaveBeenCalledWith ( projectsUrl , { } )
141+ await wrapper . find ( projectInputField ) . setValue ( ' ' )
142+ expect ( wrapper . find ( projectsListSelector ) . exists ( ) ) . toBe ( true )
143+ expect ( wrapper . find ( util . format ( projectItemSelector , 1 ) ) . text ( ) ) . toBe ( 'Another Project' )
144+ expect ( wrapper . find ( util . format ( projectItemSelector , 2 ) ) . text ( ) ) . toBe ( 'Child Project' )
95145 } )
96146
97147 describe ( 'search projects with query' , ( ) => {
@@ -242,7 +292,7 @@ describe('CreateWorkPackageModal.vue', () => {
242292 . mockImplementationOnce ( ( ) => sendOCSResponse ( workpackageFormValidationProjectSelected ) )
243293 const assigneeAxiosSpy = jest . spyOn ( axios , 'get' )
244294 . mockImplementationOnce ( ( ) => sendOCSResponse ( availableProjectAssignees ) )
245- wrapper = mountWrapper ( true , {
295+ wrapper = mountWrapper ( {
246296 noDropAvailableProjectDropDown : false ,
247297 } )
248298 wrapper . vm . mappedProjects = jest . fn ( ( ) => {
@@ -377,7 +427,7 @@ describe('CreateWorkPackageModal.vue', () => {
377427 ]
378428 const axiosSpy = jest . spyOn ( axios , 'post' )
379429 . mockImplementationOnce ( ( ) => sendOCSResponse ( workpackageFormValidationTypeChanged ) )
380- wrapper = mountWrapper ( true , {
430+ wrapper = mountWrapper ( {
381431 allowedStatues : availableStatusBefore ,
382432 allowedTypes,
383433 project : {
@@ -463,7 +513,7 @@ describe('CreateWorkPackageModal.vue', () => {
463513 . mockImplementationOnce ( ( ) => sendOCSResponse ( availableProjectsResponse ) )
464514 const axiosSpy = jest . spyOn ( axios , 'post' )
465515 . mockImplementationOnce ( ( ) => sendOCSResponse ( expectedErrorDetails . data , 422 ) )
466- wrapper = mountWrapper ( true , {
516+ wrapper = mountWrapper ( {
467517 status : {
468518 label : 'New' ,
469519 } ,
@@ -512,7 +562,7 @@ describe('CreateWorkPackageModal.vue', () => {
512562 . mockImplementationOnce ( ( ) => sendOCSResponse ( availableProjectsResponse ) )
513563 const axiosSpy = jest . spyOn ( axios , 'post' )
514564 . mockImplementationOnce ( ( ) => sendOCSResponse ( "{\"_type\":\"Error\",\"errorIdentifier\":\"urn:openproject-org:api:v3:errors:MultipleErrors\",\"message\":\"Multiple field constraints have been violated.\",\"_embedded\":{\"errors\":[{\"_type\":\"Error\",\"errorIdentifier\":\"urn:openproject-org:api:v3:errors:PropertyConstraintViolation\",\"message\":\"Subject can't be blank.\",\"_embedded\":{\"details\":{\"attribute\":\"subject\"}}},{\"_type\":\"Error\",\"errorIdentifier\":\"urn:openproject-org:api:v3:errors:PropertyConstraintViolation\",\"message\":\"Project can't be blank.\",\"_embedded\":{\"details\":{\"attribute\":\"project\"}}}]}}" , 422 ) )
515- wrapper = mountWrapper ( true , {
565+ wrapper = mountWrapper ( {
516566 status : {
517567 label : 'New' ,
518568 } ,
@@ -536,7 +586,7 @@ describe('CreateWorkPackageModal.vue', () => {
536586 const assigneeAxiosSpy = jest . spyOn ( axios , 'get' )
537587 . mockImplementationOnce ( ( ) => sendOCSResponse ( availableProjectAssignees ) )
538588
539- wrapper = mountWrapper ( true , {
589+ wrapper = mountWrapper ( {
540590 project : {
541591 self : {
542592 href : '/api/v3/projects/4' ,
@@ -591,7 +641,7 @@ describe('CreateWorkPackageModal.vue', () => {
591641 const assigneeAxiosSpy = jest . spyOn ( axios , 'get' )
592642 . mockImplementationOnce ( ( ) => sendOCSResponse ( availableProjectAssignees ) )
593643
594- wrapper = mountWrapper ( true , {
644+ wrapper = mountWrapper ( {
595645 project : {
596646 self : {
597647 href : '/api/v3/projects/4' ,
@@ -638,7 +688,7 @@ describe('CreateWorkPackageModal.vue', () => {
638688 const assigneeAxiosSpy = jest . spyOn ( axios , 'get' )
639689 . mockImplementationOnce ( ( ) => sendOCSResponse ( availableProjectAssignees ) )
640690
641- wrapper = mountWrapper ( true , {
691+ wrapper = mountWrapper ( {
642692 project : {
643693 self : {
644694 href : '/api/v3/projects/4' ,
@@ -671,7 +721,7 @@ describe('CreateWorkPackageModal.vue', () => {
671721 const assigneeAxiosSpy = jest . spyOn ( axios , 'get' )
672722 . mockImplementationOnce ( ( ) => sendOCSResponse ( availableProjectAssignees ) )
673723
674- wrapper = mountWrapper ( true , {
724+ wrapper = mountWrapper ( {
675725 project : {
676726 self : {
677727 href : '/api/v3/projects/4' ,
@@ -724,7 +774,7 @@ describe('CreateWorkPackageModal.vue', () => {
724774 } ,
725775 ] ) ( 'should show $expectedMessage when project is set and there is no $fieldName found in search query' , async ( { inputSelector, resultSelector, expectedMessage } ) => {
726776
727- wrapper = mountWrapper ( true , {
777+ wrapper = mountWrapper ( {
728778 project : {
729779 self : {
730780 href : '/api/v3/projects/4' ,
@@ -777,7 +827,7 @@ describe('CreateWorkPackageModal.vue', () => {
777827 . mockImplementationOnce ( ( ) => sendOCSResponse ( availableProjectsResponse ) )
778828 const axiosSpy = jest . spyOn ( axios , 'post' )
779829 . mockImplementationOnce ( ( ) => sendOCSResponse ( workpackageCreatedResponse , 201 ) )
780- wrapper = mountWrapper ( true , {
830+ wrapper = mountWrapper ( {
781831 project : {
782832 self : {
783833 href : '/api/v3/projects/2' ,
@@ -855,7 +905,7 @@ describe('CreateWorkPackageModal.vue', () => {
855905 const axiosSpy = jest . spyOn ( axios , 'post' )
856906 . mockImplementationOnce ( ( ) => sendOCSResponse ( requiredTypeResponse ) )
857907
858- wrapper = mountWrapper ( true , {
908+ wrapper = mountWrapper ( {
859909 project : {
860910 self : {
861911 href : '/api/v3/projects/4' ,
@@ -903,7 +953,7 @@ describe('CreateWorkPackageModal.vue', () => {
903953 jest . spyOn ( axios , 'get' )
904954 . mockImplementationOnce ( ( ) => sendOCSResponse ( availableProjectsResponse ) )
905955
906- wrapper = mountWrapper ( true , {
956+ wrapper = mountWrapper ( {
907957 project : {
908958 self : {
909959 href : '/api/v3/projects/4' ,
@@ -939,7 +989,7 @@ describe('CreateWorkPackageModal.vue', () => {
939989 } )
940990
941991 it ( 'should be able to remove the selected project' , async ( ) => {
942- wrapper = mountWrapper ( true , {
992+ wrapper = mountWrapper ( {
943993 project : {
944994 self : {
945995 href : '/api/v3/projects/2' ,
@@ -966,7 +1016,7 @@ function sendOCSResponse(data, status = 200) {
9661016 } )
9671017}
9681018
969- function mountWrapper ( showModal , data ) {
1019+ function mountWrapper ( data ) {
9701020 return mount ( CreateWorkPackageModal , {
9711021 localVue,
9721022 mocks : {
@@ -978,8 +1028,5 @@ function mountWrapper(showModal, data) {
9781028 stubs : {
9791029 NcModal : true ,
9801030 } ,
981- propsData : {
982- showModal,
983- } ,
9841031 } )
9851032}
0 commit comments