Fixes for lint and tests

This commit is contained in:
nibou230
2022-05-05 11:46:00 -04:00
parent e77821eef0
commit 7f1d1ed7de
5 changed files with 109 additions and 43 deletions

View File

@@ -18,6 +18,8 @@ import { ItemAdminSearchResultGridElementComponent } from './item-admin-search-r
import { createSuccessfulRemoteDataObject$ } from '../../../../../shared/remote-data.utils'; import { createSuccessfulRemoteDataObject$ } from '../../../../../shared/remote-data.utils';
import { getMockThemeService } from '../../../../../shared/mocks/theme-service.mock'; import { getMockThemeService } from '../../../../../shared/mocks/theme-service.mock';
import { ThemeService } from '../../../../../shared/theme-support/theme.service'; import { ThemeService } from '../../../../../shared/theme-support/theme.service';
import { AccessStatusDataService } from 'src/app/core/data/access-status-data.service';
import { AccessStatusObject } from 'src/app/shared/object-list/access-status-badge/access-status.model';
describe('ItemAdminSearchResultGridElementComponent', () => { describe('ItemAdminSearchResultGridElementComponent', () => {
let component: ItemAdminSearchResultGridElementComponent; let component: ItemAdminSearchResultGridElementComponent;
@@ -31,6 +33,12 @@ describe('ItemAdminSearchResultGridElementComponent', () => {
} }
}; };
const mockAccessStatusDataService = {
findAccessStatusFor(item: Item): Observable<RemoteData<AccessStatusObject>> {
return createSuccessfulRemoteDataObject$(new AccessStatusObject());
}
};
const mockThemeService = getMockThemeService(); const mockThemeService = getMockThemeService();
function init() { function init() {
@@ -55,6 +63,7 @@ describe('ItemAdminSearchResultGridElementComponent', () => {
{ provide: TruncatableService, useValue: mockTruncatableService }, { provide: TruncatableService, useValue: mockTruncatableService },
{ provide: BitstreamDataService, useValue: mockBitstreamDataService }, { provide: BitstreamDataService, useValue: mockBitstreamDataService },
{ provide: ThemeService, useValue: mockThemeService }, { provide: ThemeService, useValue: mockThemeService },
{ provide: AccessStatusDataService, useValue: mockAccessStatusDataService },
], ],
schemas: [NO_ERRORS_SCHEMA] schemas: [NO_ERRORS_SCHEMA]
}) })

View File

@@ -0,0 +1,81 @@
import { RequestService } from './request.service';
import { getMockRequestService } from '../../shared/mocks/request.service.mock';
import { HALEndpointServiceStub } from '../../shared/testing/hal-endpoint-service.stub';
import { NotificationsServiceStub } from '../../shared/testing/notifications-service.stub';
import { fakeAsync, tick } from '@angular/core/testing';
import { GetRequest } from './request.models';
import { ObjectCacheService } from '../cache/object-cache.service';
import { RemoteDataBuildService } from '../cache/builders/remote-data-build.service';
import { createSuccessfulRemoteDataObject$ } from '../../shared/remote-data.utils';
import { Observable } from 'rxjs';
import { RemoteData } from './remote-data';
import { hasNoValue } from '../../shared/empty.util';
import { AccessStatusDataService } from './access-status-data.service';
import { Item } from '../shared/item.model';
const url = 'fake-url';
describe('AccessStatusDataService', () => {
let service: AccessStatusDataService;
let requestService: RequestService;
let notificationsService: any;
let rdbService: RemoteDataBuildService;
let objectCache: ObjectCacheService;
let halService: any;
const itemId = '8b3c613a-5a4b-438b-9686-be1d5b4a1c5a';
const mockItem: Item = Object.assign(new Item(), {
id: itemId,
name: 'test-item',
_links: {
accessStatus: {
href: `https://rest.api/items/${itemId}/accessStatus`
},
self: {
href: `https://rest.api/items/${itemId}`
}
}
});
describe('when the requests are successful', () => {
beforeEach(() => {
createService();
});
describe('when calling findAccessStatusFor', () => {
let contentSource$;
beforeEach(() => {
contentSource$ = service.findAccessStatusFor(mockItem);
});
it('should send a new GetRequest', fakeAsync(() => {
contentSource$.subscribe();
tick();
expect(requestService.send).toHaveBeenCalledWith(jasmine.any(GetRequest), true);
}));
});
});
/**
* Create an AccessStatusDataService used for testing
* @param reponse$ Supply a RemoteData to be returned by the REST API (optional)
*/
function createService(reponse$?: Observable<RemoteData<any>>) {
requestService = getMockRequestService();
let buildResponse$ = reponse$;
if (hasNoValue(reponse$)) {
buildResponse$ = createSuccessfulRemoteDataObject$({});
}
rdbService = jasmine.createSpyObj('rdbService', {
buildFromRequestUUID: buildResponse$,
buildSingle: buildResponse$
});
objectCache = jasmine.createSpyObj('objectCache', {
remove: jasmine.createSpy('remove')
});
halService = new HALEndpointServiceStub(url);
notificationsService = new NotificationsServiceStub();
service = new AccessStatusDataService(null, halService, null, notificationsService, objectCache, rdbService, requestService, null);
}
});

View File

@@ -184,33 +184,6 @@ describe('ItemDataService', () => {
}); });
}); });
describe('getAccessStatusEndpoint', () => {
beforeEach(() => {
service = initTestService();
});
it('should retrieve the access status endpoint', () => {
const itemId = '3de6ea60-ec39-419b-ae6f-065930ac1429';
const result = service.getAccessStatusEndpoint(itemId);
result.subscribe(((value) => {
expect(value).toEqual(`${itemEndpoint}/items/${itemId}/accessStatus`);
}));
});
});
describe('getAccessStatus', () => {
beforeEach(() => {
service = initTestService();
});
it('should send a GET request', (done) => {
const itemId = '3de6ea60-ec39-419b-ae6f-065930ac1429';
const result = service.getAccessStatus(itemId);
result.subscribe(() => {
expect(requestService.send).toHaveBeenCalledWith(jasmine.any(GetRequest));
done();
});
});
});
describe('when cache is invalidated', () => { describe('when cache is invalidated', () => {
beforeEach(() => { beforeEach(() => {
service = initTestService(); service = initTestService();

View File

@@ -6,8 +6,9 @@ import { NO_ERRORS_SCHEMA } from '@angular/core';
import { AccessStatusBadgeComponent } from './access-status-badge.component'; import { AccessStatusBadgeComponent } from './access-status-badge.component';
import { createSuccessfulRemoteDataObject$ } from '../../remote-data.utils'; import { createSuccessfulRemoteDataObject$ } from '../../remote-data.utils';
import { By } from '@angular/platform-browser'; import { By } from '@angular/platform-browser';
import { ItemDataService } from 'src/app/core/data/item-data.service';
import { AccessStatusObject } from './access-status.model'; import { AccessStatusObject } from './access-status.model';
import { AccessStatusDataService } from 'src/app/core/data/access-status-data.service';
import { environment } from 'src/environments/environment';
describe('ItemAccessStatusBadgeComponent', () => { describe('ItemAccessStatusBadgeComponent', () => {
let component: AccessStatusBadgeComponent; let component: AccessStatusBadgeComponent;
@@ -19,7 +20,7 @@ describe('ItemAccessStatusBadgeComponent', () => {
let embargoStatus: AccessStatusObject; let embargoStatus: AccessStatusObject;
let restrictedStatus: AccessStatusObject; let restrictedStatus: AccessStatusObject;
let itemDataService: ItemDataService; let accessStatusDataService: AccessStatusDataService;
let item: Item; let item: Item;
@@ -44,8 +45,8 @@ describe('ItemAccessStatusBadgeComponent', () => {
status: 'restricted' status: 'restricted'
}); });
itemDataService = jasmine.createSpyObj('itemDataService', { accessStatusDataService = jasmine.createSpyObj('accessStatusDataService', {
getAccessStatus: createSuccessfulRemoteDataObject$(unknownStatus) findAccessStatusFor: createSuccessfulRemoteDataObject$(unknownStatus)
}); });
item = Object.assign(new Item(), { item = Object.assign(new Item(), {
@@ -59,16 +60,18 @@ describe('ItemAccessStatusBadgeComponent', () => {
declarations: [AccessStatusBadgeComponent, TruncatePipe], declarations: [AccessStatusBadgeComponent, TruncatePipe],
schemas: [NO_ERRORS_SCHEMA], schemas: [NO_ERRORS_SCHEMA],
providers: [ providers: [
{provide: ItemDataService, useValue: itemDataService} {provide: AccessStatusDataService, useValue: accessStatusDataService}
] ]
}).compileComponents(); }).compileComponents();
} }
function initFixtureAndComponent() { function initFixtureAndComponent() {
environment.item.showAccessStatuses = true;
fixture = TestBed.createComponent(AccessStatusBadgeComponent); fixture = TestBed.createComponent(AccessStatusBadgeComponent);
component = fixture.componentInstance; component = fixture.componentInstance;
component.uuid = item.uuid; component.item = item;
fixture.detectChanges(); fixture.detectChanges();
environment.item.showAccessStatuses = false;
} }
function lookForAccessStatusBadge(status: string) { function lookForAccessStatusBadge(status: string) {
@@ -89,7 +92,7 @@ describe('ItemAccessStatusBadgeComponent', () => {
}); });
}); });
describe('When the getAccessStatus method returns unknown', () => { describe('When the findAccessStatusFor method returns unknown', () => {
beforeEach(waitForAsync(() => { beforeEach(waitForAsync(() => {
init(); init();
initTestBed(); initTestBed();
@@ -102,10 +105,10 @@ describe('ItemAccessStatusBadgeComponent', () => {
}); });
}); });
describe('When the getAccessStatus method returns metadata.only', () => { describe('When the findAccessStatusFor method returns metadata.only', () => {
beforeEach(waitForAsync(() => { beforeEach(waitForAsync(() => {
init(); init();
(itemDataService.getAccessStatus as jasmine.Spy).and.returnValue(createSuccessfulRemoteDataObject$(metadataOnlyStatus)); (accessStatusDataService.findAccessStatusFor as jasmine.Spy).and.returnValue(createSuccessfulRemoteDataObject$(metadataOnlyStatus));
initTestBed(); initTestBed();
})); }));
beforeEach(() => { beforeEach(() => {
@@ -116,10 +119,10 @@ describe('ItemAccessStatusBadgeComponent', () => {
}); });
}); });
describe('When the getAccessStatus method returns open.access', () => { describe('When the findAccessStatusFor method returns open.access', () => {
beforeEach(waitForAsync(() => { beforeEach(waitForAsync(() => {
init(); init();
(itemDataService.getAccessStatus as jasmine.Spy).and.returnValue(createSuccessfulRemoteDataObject$(openAccessStatus)); (accessStatusDataService.findAccessStatusFor as jasmine.Spy).and.returnValue(createSuccessfulRemoteDataObject$(openAccessStatus));
initTestBed(); initTestBed();
})); }));
beforeEach(() => { beforeEach(() => {
@@ -130,10 +133,10 @@ describe('ItemAccessStatusBadgeComponent', () => {
}); });
}); });
describe('When the getAccessStatus method returns embargo', () => { describe('When the findAccessStatusFor method returns embargo', () => {
beforeEach(waitForAsync(() => { beforeEach(waitForAsync(() => {
init(); init();
(itemDataService.getAccessStatus as jasmine.Spy).and.returnValue(createSuccessfulRemoteDataObject$(embargoStatus)); (accessStatusDataService.findAccessStatusFor as jasmine.Spy).and.returnValue(createSuccessfulRemoteDataObject$(embargoStatus));
initTestBed(); initTestBed();
})); }));
beforeEach(() => { beforeEach(() => {
@@ -144,10 +147,10 @@ describe('ItemAccessStatusBadgeComponent', () => {
}); });
}); });
describe('When the getAccessStatus method returns restricted', () => { describe('When the findAccessStatusFor method returns restricted', () => {
beforeEach(waitForAsync(() => { beforeEach(waitForAsync(() => {
init(); init();
(itemDataService.getAccessStatus as jasmine.Spy).and.returnValue(createSuccessfulRemoteDataObject$(restrictedStatus)); (accessStatusDataService.findAccessStatusFor as jasmine.Spy).and.returnValue(createSuccessfulRemoteDataObject$(restrictedStatus));
initTestBed(); initTestBed();
})); }));
beforeEach(() => { beforeEach(() => {