Skip to content

Commit b598f1b

Browse files
committed
Also remove unnecessary EpersonDtoModel from extending ReviewersListComponent. Remove "memberOfGroup" from EpersonDtoModel as it is no longer used
1 parent bffae54 commit b598f1b

File tree

4 files changed

+65
-98
lines changed

4 files changed

+65
-98
lines changed

src/app/access-control/group-registry/group-form/members-list/members-list.component.ts

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -29,8 +29,8 @@ import { DSONameService } from '../../../../core/breadcrumbs/dso-name.service';
2929
*/
3030
enum SubKey {
3131
ActiveGroup,
32-
MembersDTO,
33-
SearchResultsDTO,
32+
Members,
33+
SearchResults,
3434
}
3535

3636
/**
@@ -166,8 +166,8 @@ export class MembersListComponent implements OnInit, OnDestroy {
166166
* @private
167167
*/
168168
retrieveMembers(page: number): void {
169-
this.unsubFrom(SubKey.MembersDTO);
170-
this.subs.set(SubKey.MembersDTO,
169+
this.unsubFrom(SubKey.Members);
170+
this.subs.set(SubKey.Members,
171171
this.paginationService.getCurrentPagination(this.config.id, this.config).pipe(
172172
switchMap((currentPagination) => {
173173
return this.ePersonDataService.findListByHref(this.groupBeingEdited._links.epersons.href, {
@@ -239,8 +239,8 @@ export class MembersListComponent implements OnInit, OnDestroy {
239239
* @param data Contains scope and query param
240240
*/
241241
search(data: any) {
242-
this.unsubFrom(SubKey.SearchResultsDTO);
243-
this.subs.set(SubKey.SearchResultsDTO,
242+
this.unsubFrom(SubKey.SearchResults);
243+
this.subs.set(SubKey.SearchResults,
244244
this.paginationService.getCurrentPagination(this.configSearch.id, this.configSearch).pipe(
245245
switchMap((paginationOptions) => {
246246

src/app/core/eperson/models/eperson-dto.model.ts

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -13,9 +13,4 @@ export class EpersonDtoModel {
1313
* Whether or not the linked EPerson is able to be deleted
1414
*/
1515
public ableToDelete: boolean;
16-
/**
17-
* Whether or not this EPerson is member of group on page it is being used on
18-
*/
19-
public memberOfGroup: boolean;
20-
2116
}

src/app/workflowitems-edit-page/advanced-workflow-action/advanced-workflow-action-select-reviewer/reviewers-list/reviewers-list.component.spec.ts

Lines changed: 42 additions & 53 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ import { Group } from '../../../../core/eperson/models/group.model';
1717
import { PageInfo } from '../../../../core/shared/page-info.model';
1818
import { FormBuilderService } from '../../../../shared/form/builder/form-builder.service';
1919
import { NotificationsService } from '../../../../shared/notifications/notifications.service';
20-
import { GroupMock, GroupMock2 } from '../../../../shared/testing/group-mock';
20+
import { GroupMock } from '../../../../shared/testing/group-mock';
2121
import { ReviewersListComponent } from './reviewers-list.component';
2222
import { EPersonMock, EPersonMock2 } from '../../../../shared/testing/eperson.mock';
2323
import {
@@ -31,40 +31,38 @@ import { NotificationsServiceStub } from '../../../../shared/testing/notificatio
3131
import { RouterMock } from '../../../../shared/mocks/router.mock';
3232
import { PaginationService } from '../../../../core/pagination/pagination.service';
3333
import { 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.
3638
describe('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

src/app/workflowitems-edit-page/advanced-workflow-action/advanced-workflow-action-select-reviewer/reviewers-list/reviewers-list.component.ts

Lines changed: 17 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -8,10 +8,7 @@ import { NotificationsService } from '../../../../shared/notifications/notificat
88
import { PaginationService } from '../../../../core/pagination/pagination.service';
99
import { Group } from '../../../../core/eperson/models/group.model';
1010
import { getFirstSucceededRemoteDataPayload } from '../../../../core/shared/operators';
11-
import { EpersonDtoModel } from '../../../../core/eperson/models/eperson-dto.model';
1211
import { EPerson } from '../../../../core/eperson/models/eperson.model';
13-
import { Observable, of as observableOf } from 'rxjs';
14-
import { hasValue } from '../../../../shared/empty.util';
1512
import { PaginatedList } from '../../../../core/data/paginated-list.model';
1613
import {
1714
MembersListComponent,
@@ -24,8 +21,8 @@ import { DSONameService } from '../../../../core/breadcrumbs/dso-name.service';
2421
*/
2522
enum SubKey {
2623
ActiveGroup,
27-
MembersDTO,
28-
SearchResultsDTO,
24+
Members,
25+
SearchResults,
2926
}
3027

3128
/**
@@ -50,7 +47,7 @@ export class ReviewersListComponent extends MembersListComponent implements OnIn
5047
@Output()
5148
selectedReviewersUpdated: EventEmitter<EPerson[]> = new EventEmitter();
5249

53-
selectedReviewers: EpersonDtoModel[] = [];
50+
selectedReviewers: EPerson[] = [];
5451

5552
constructor(
5653
protected groupService: GroupDataService,
@@ -100,54 +97,40 @@ export class ReviewersListComponent extends MembersListComponent implements OnIn
10097
retrieveMembers(page: number): void {
10198
this.config.currentPage = page;
10299
if (this.groupId === null) {
103-
this.unsubFrom(SubKey.MembersDTO);
104-
const paginatedListOfDTOs: PaginatedList<EpersonDtoModel> = new PaginatedList();
105-
paginatedListOfDTOs.page = this.selectedReviewers;
106-
this.ePeopleMembersOfGroupDtos.next(paginatedListOfDTOs);
100+
this.unsubFrom(SubKey.Members);
101+
const paginatedListOfEPersons: PaginatedList<EPerson> = new PaginatedList();
102+
paginatedListOfEPersons.page = this.selectedReviewers;
103+
this.ePeopleMembersOfGroup.next(paginatedListOfEPersons);
107104
} else {
108105
super.retrieveMembers(page);
109106
}
110107
}
111108

112109
/**
113-
* Checks whether the given {@link possibleMember} is part of the {@link selectedReviewers}.
110+
* Removes the {@link eperson} from the {@link selectedReviewers}
114111
*
115-
* @param possibleMember The {@link EPerson} that needs to be checked
112+
* @param eperson The {@link EPerson} to remove
116113
*/
117-
isMemberOfGroup(possibleMember: EPerson): Observable<boolean> {
118-
return observableOf(hasValue(this.selectedReviewers.find((reviewer: EpersonDtoModel) => reviewer.eperson.id === possibleMember.id)));
119-
}
120-
121-
/**
122-
* Removes the {@link ePerson} from the {@link selectedReviewers}
123-
*
124-
* @param ePerson The {@link EpersonDtoModel} containg the {@link EPerson} to remove
125-
*/
126-
deleteMemberFromGroup(ePerson: EpersonDtoModel) {
127-
ePerson.memberOfGroup = false;
128-
const index = this.selectedReviewers.indexOf(ePerson);
114+
deleteMemberFromGroup(eperson: EPerson) {
115+
const index = this.selectedReviewers.indexOf(eperson);
129116
if (index !== -1) {
130117
this.selectedReviewers.splice(index, 1);
131118
}
132-
this.selectedReviewersUpdated.emit(this.selectedReviewers.map((ePersonDtoModel: EpersonDtoModel) => ePersonDtoModel.eperson));
119+
this.selectedReviewersUpdated.emit(this.selectedReviewers);
133120
}
134121

135122
/**
136-
* Adds the {@link ePerson} to the {@link selectedReviewers} (or replaces it when {@link multipleReviewers} is
123+
* Adds the {@link eperson} to the {@link selectedReviewers} (or replaces it when {@link multipleReviewers} is
137124
* `false`). Afterwards it will emit the list.
138125
*
139-
* @param ePerson The {@link EPerson} to add to the list
126+
* @param eperson The {@link EPerson} to add to the list
140127
*/
141-
addMemberToGroup(ePerson: EpersonDtoModel) {
142-
ePerson.memberOfGroup = true;
128+
addMemberToGroup(eperson: EPerson) {
143129
if (!this.multipleReviewers) {
144-
for (const selectedReviewer of this.selectedReviewers) {
145-
selectedReviewer.memberOfGroup = false;
146-
}
147130
this.selectedReviewers = [];
148131
}
149-
this.selectedReviewers.push(ePerson);
150-
this.selectedReviewersUpdated.emit(this.selectedReviewers.map((epersonDtoModel: EpersonDtoModel) => epersonDtoModel.eperson));
132+
this.selectedReviewers.push(eperson);
133+
this.selectedReviewersUpdated.emit(this.selectedReviewers);
151134
}
152135

153136
}

0 commit comments

Comments
 (0)