@@ -17,7 +17,7 @@ import { Group } from '../../../../core/eperson/models/group.model';
1717import { PageInfo } from '../../../../core/shared/page-info.model' ;
1818import { FormBuilderService } from '../../../../shared/form/builder/form-builder.service' ;
1919import { NotificationsService } from '../../../../shared/notifications/notifications.service' ;
20- import { GroupMock , GroupMock2 } from '../../../../shared/testing/group-mock' ;
20+ import { GroupMock } from '../../../../shared/testing/group-mock' ;
2121import { ReviewersListComponent } from './reviewers-list.component' ;
2222import { EPersonMock , EPersonMock2 } from '../../../../shared/testing/eperson.mock' ;
2323import {
@@ -31,40 +31,38 @@ import { NotificationsServiceStub } from '../../../../shared/testing/notificatio
3131import { RouterMock } from '../../../../shared/mocks/router.mock' ;
3232import { PaginationService } from '../../../../core/pagination/pagination.service' ;
3333import { PaginationServiceStub } from '../../../../shared/testing/pagination-service.stub' ;
34- import { EpersonDtoModel } from '../../../../core/eperson/models/eperson-dto.model' ;
3534
35+ // NOTE: Because ReviewersListComponent extends MembersListComponent, the below tests ONLY validate
36+ // features which are *unique* to ReviewersListComponent. All other features are tested in the
37+ // members-list.component.spec.ts file.
3638describe ( 'ReviewersListComponent' , ( ) => {
3739 let component : ReviewersListComponent ;
3840 let fixture : ComponentFixture < ReviewersListComponent > ;
3941 let translateService : TranslateService ;
4042 let builderService : FormBuilderService ;
4143 let ePersonDataServiceStub : any ;
4244 let groupsDataServiceStub : any ;
43- let activeGroup ;
44- let allEPersons ;
45- let allGroups ;
46- let epersonMembers ;
47- let subgroupMembers ;
45+ let activeGroup : Group ;
46+ let epersonMembers : EPerson [ ] ;
47+ let epersonNonMembers : EPerson [ ] ;
4848 let paginationService ;
49- let ePersonDtoModel1 : EpersonDtoModel ;
50- let ePersonDtoModel2 : EpersonDtoModel ;
5149
5250 beforeEach ( waitForAsync ( ( ) => {
5351 activeGroup = GroupMock ;
5452 epersonMembers = [ EPersonMock2 ] ;
55- subgroupMembers = [ GroupMock2 ] ;
56- allEPersons = [ EPersonMock , EPersonMock2 ] ;
57- allGroups = [ GroupMock , GroupMock2 ] ;
53+ epersonNonMembers = [ EPersonMock ] ;
5854 ePersonDataServiceStub = {
5955 activeGroup : activeGroup ,
6056 epersonMembers : epersonMembers ,
61- subgroupMembers : subgroupMembers ,
57+ epersonNonMembers : epersonNonMembers ,
58+ // This method is used to get all the current members
6259 findListByHref ( _href : string ) : Observable < RemoteData < PaginatedList < EPerson > > > {
6360 return createSuccessfulRemoteDataObject$ ( buildPaginatedList < EPerson > ( new PageInfo ( ) , groupsDataServiceStub . getEPersonMembers ( ) ) ) ;
6461 } ,
62+ // This method is used to search across *non-members*
6563 searchByScope ( scope : string , query : string ) : Observable < RemoteData < PaginatedList < EPerson > > > {
6664 if ( query === '' ) {
67- return createSuccessfulRemoteDataObject$ ( buildPaginatedList ( new PageInfo ( ) , allEPersons ) ) ;
65+ return createSuccessfulRemoteDataObject$ ( buildPaginatedList ( new PageInfo ( ) , epersonNonMembers ) ) ;
6866 }
6967 return createSuccessfulRemoteDataObject$ ( buildPaginatedList ( new PageInfo ( ) , [ ] ) ) ;
7068 } ,
@@ -81,22 +79,22 @@ describe('ReviewersListComponent', () => {
8179 groupsDataServiceStub = {
8280 activeGroup : activeGroup ,
8381 epersonMembers : epersonMembers ,
84- subgroupMembers : subgroupMembers ,
85- allGroups : allGroups ,
82+ epersonNonMembers : epersonNonMembers ,
8683 getActiveGroup ( ) : Observable < Group > {
8784 return observableOf ( activeGroup ) ;
8885 } ,
8986 getEPersonMembers ( ) {
9087 return this . epersonMembers ;
9188 } ,
92- searchGroups ( query : string ) : Observable < RemoteData < PaginatedList < Group > > > {
93- if ( query === '' ) {
94- return createSuccessfulRemoteDataObject$ ( buildPaginatedList ( new PageInfo ( ) , this . allGroups ) ) ;
95- }
96- return createSuccessfulRemoteDataObject$ ( buildPaginatedList ( new PageInfo ( ) , [ ] ) ) ;
97- } ,
98- addMemberToGroup ( parentGroup , eperson : EPerson ) : Observable < RestResponse > {
99- this . epersonMembers = [ ...this . epersonMembers , eperson ] ;
89+ addMemberToGroup ( parentGroup , epersonToAdd : EPerson ) : Observable < RestResponse > {
90+ // Add eperson to list of members
91+ this . epersonMembers = [ ...this . epersonMembers , epersonToAdd ] ;
92+ // Remove eperson from list of non-members
93+ this . epersonNonMembers . forEach ( ( eperson : EPerson , index : number ) => {
94+ if ( eperson . id === epersonToAdd . id ) {
95+ this . epersonNonMembers . splice ( index , 1 ) ;
96+ }
97+ } ) ;
10098 return observableOf ( new RestResponse ( true , 200 , 'Success' ) ) ;
10199 } ,
102100 clearGroupsRequests ( ) {
@@ -109,21 +107,20 @@ describe('ReviewersListComponent', () => {
109107 return '/access-control/groups/' + group . id ;
110108 } ,
111109 deleteMemberFromGroup ( parentGroup , epersonToDelete : EPerson ) : Observable < RestResponse > {
112- this . epersonMembers = this . epersonMembers . find ( ( eperson : EPerson ) => {
113- if ( eperson . id !== epersonToDelete . id ) {
114- return eperson ;
110+ // Remove eperson from list of members
111+ this . epersonMembers . forEach ( ( eperson : EPerson , index : number ) => {
112+ if ( eperson . id === epersonToDelete . id ) {
113+ this . epersonMembers . splice ( index , 1 ) ;
115114 }
116115 } ) ;
117- if ( this . epersonMembers === undefined ) {
118- this . epersonMembers = [ ] ;
119- }
116+ // Add eperson to list of non-members
117+ this . epersonNonMembers = [ ...this . epersonNonMembers , epersonToDelete ] ;
120118 return observableOf ( new RestResponse ( true , 200 , 'Success' ) ) ;
121119 } ,
120+ // Used to find the currently active group
122121 findById ( id : string ) {
123- for ( const group of allGroups ) {
124- if ( group . id === id ) {
125- return createSuccessfulRemoteDataObject$ ( group ) ;
126- }
122+ if ( activeGroup . id === id ) {
123+ return createSuccessfulRemoteDataObject$ ( activeGroup ) ;
127124 }
128125 return createNoContentRemoteDataObject$ ( ) ;
129126 } ,
@@ -135,7 +132,7 @@ describe('ReviewersListComponent', () => {
135132 translateService = getMockTranslateService ( ) ;
136133
137134 paginationService = new PaginationServiceStub ( ) ;
138- TestBed . configureTestingModule ( {
135+ return TestBed . configureTestingModule ( {
139136 imports : [ CommonModule , NgbModule , FormsModule , ReactiveFormsModule , BrowserModule ,
140137 TranslateModule . forRoot ( {
141138 loader : {
@@ -169,12 +166,6 @@ describe('ReviewersListComponent', () => {
169166 fixture . debugElement . nativeElement . remove ( ) ;
170167 } ) ) ;
171168
172- beforeEach ( ( ) => {
173- ePersonDtoModel1 = new EpersonDtoModel ( ) ;
174- ePersonDtoModel1 . eperson = EPersonMock ;
175- ePersonDtoModel2 = new EpersonDtoModel ( ) ;
176- ePersonDtoModel2 . eperson = EPersonMock2 ;
177- } ) ;
178169
179170 describe ( 'when no group is selected' , ( ) => {
180171 beforeEach ( ( ) => {
@@ -218,34 +209,32 @@ describe('ReviewersListComponent', () => {
218209 it ( 'should replace the value when a new member is added when multipleReviewers is false' , ( ) => {
219210 spyOn ( component . selectedReviewersUpdated , 'emit' ) ;
220211 component . multipleReviewers = false ;
221- component . selectedReviewers = [ ePersonDtoModel1 ] ;
212+ component . selectedReviewers = [ EPersonMock ] ;
222213
223- component . addMemberToGroup ( ePersonDtoModel2 ) ;
214+ component . addMemberToGroup ( EPersonMock2 ) ;
224215
225- expect ( component . selectedReviewers ) . toEqual ( [ ePersonDtoModel2 ] ) ;
226- expect ( component . selectedReviewersUpdated . emit ) . toHaveBeenCalledWith ( [ ePersonDtoModel2 . eperson ] ) ;
216+ expect ( component . selectedReviewers ) . toEqual ( [ EPersonMock2 ] ) ;
217+ expect ( component . selectedReviewersUpdated . emit ) . toHaveBeenCalledWith ( [ EPersonMock2 ] ) ;
227218 } ) ;
228219
229220 it ( 'should add the value when a new member is added when multipleReviewers is true' , ( ) => {
230221 spyOn ( component . selectedReviewersUpdated , 'emit' ) ;
231222 component . multipleReviewers = true ;
232- component . selectedReviewers = [ ePersonDtoModel1 ] ;
223+ component . selectedReviewers = [ EPersonMock ] ;
233224
234- component . addMemberToGroup ( ePersonDtoModel2 ) ;
225+ component . addMemberToGroup ( EPersonMock2 ) ;
235226
236- expect ( component . selectedReviewers ) . toEqual ( [ ePersonDtoModel1 , ePersonDtoModel2 ] ) ;
237- expect ( component . selectedReviewersUpdated . emit ) . toHaveBeenCalledWith ( [ ePersonDtoModel1 . eperson , ePersonDtoModel2 . eperson ] ) ;
227+ expect ( component . selectedReviewers ) . toEqual ( [ EPersonMock , EPersonMock2 ] ) ;
228+ expect ( component . selectedReviewersUpdated . emit ) . toHaveBeenCalledWith ( [ EPersonMock , EPersonMock2 ] ) ;
238229 } ) ;
239230
240231 it ( 'should delete the member when present' , ( ) => {
241232 spyOn ( component . selectedReviewersUpdated , 'emit' ) ;
242- ePersonDtoModel1 . memberOfGroup = true ;
243- component . selectedReviewers = [ ePersonDtoModel1 ] ;
233+ component . selectedReviewers = [ EPersonMock ] ;
244234
245- component . deleteMemberFromGroup ( ePersonDtoModel1 ) ;
235+ component . deleteMemberFromGroup ( EPersonMock ) ;
246236
247237 expect ( component . selectedReviewers ) . toEqual ( [ ] ) ;
248- expect ( ePersonDtoModel1 . memberOfGroup ) . toBeFalse ( ) ;
249238 expect ( component . selectedReviewersUpdated . emit ) . toHaveBeenCalledWith ( [ ] ) ;
250239 } ) ;
251240
0 commit comments