diff --git a/src/app/item-page/version-page/version-page/version-page.component.spec.ts b/src/app/item-page/version-page/version-page/version-page.component.spec.ts index 7e3061f397..146d0e98c4 100644 --- a/src/app/item-page/version-page/version-page/version-page.component.spec.ts +++ b/src/app/item-page/version-page/version-page/version-page.component.spec.ts @@ -1,16 +1,45 @@ -import { ComponentFixture, TestBed } from '@angular/core/testing'; - +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { VersionPageComponent } from './version-page.component'; +import { ActivatedRoute, Router } from '@angular/router'; +import { ActivatedRouteStub } from '../../../shared/testing/active-router.stub'; +import { of as observableOf } from 'rxjs'; +import { createSuccessfulRemoteDataObject, createSuccessfulRemoteDataObject$ } from '../../../shared/remote-data.utils'; +import { Item } from '../../../core/shared/item.model'; +import { createPaginatedList } from '../../../shared/testing/utils.test'; +import { createRelationshipsObservable } from '../../simple/item-types/shared/item.component.spec'; +import { VersionDataService } from '../../../core/data/version-data.service'; +import { AuthService } from '../../../core/auth/auth.service'; + +const mockItem: Item = Object.assign(new Item(), { + bundles: createSuccessfulRemoteDataObject$(createPaginatedList([])), + metadata: [], + relationships: createRelationshipsObservable() +}); describe('VersionPageComponent', () => { let component: VersionPageComponent; let fixture: ComponentFixture; + let authService: AuthService; - beforeEach(async () => { - await TestBed.configureTestingModule({ - declarations: [ VersionPageComponent ] + beforeEach(waitForAsync(() => { + authService = jasmine.createSpyObj('authService', { + isAuthenticated: observableOf(true), + setRedirectUrl: {} + }); + TestBed.configureTestingModule({ + declarations: [VersionPageComponent], + providers: [ + {provide: ActivatedRoute, useValue: mockRoute}, + {provide: Router, useValue: {}}, + {provide: VersionDataService, useValue: {}}, + {provide: AuthService, useValue: authService}, + ], }) - .compileComponents(); + .compileComponents(); + })); + + const mockRoute = Object.assign(new ActivatedRouteStub(), { + data: observableOf({dso: createSuccessfulRemoteDataObject(mockItem)}) }); beforeEach(() => { diff --git a/src/app/shared/dso-page/dso-page-version-button/dso-page-version-button.component.spec.ts b/src/app/shared/dso-page/dso-page-version-button/dso-page-version-button.component.spec.ts index edc7fbd618..b05d8a1c3a 100644 --- a/src/app/shared/dso-page/dso-page-version-button/dso-page-version-button.component.spec.ts +++ b/src/app/shared/dso-page/dso-page-version-button/dso-page-version-button.component.spec.ts @@ -1,6 +1,5 @@ import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { DsoPageVersionButtonComponent } from './dso-page-version-button.component'; -import { DSpaceObject } from '../../../core/shared/dspace-object.model'; import { Item } from '../../../core/shared/item.model'; import { AuthorizationDataService } from '../../../core/data/feature-authorization/authorization-data.service'; import { of as observableOf } from 'rxjs'; @@ -10,7 +9,7 @@ import { FeatureID } from '../../../core/data/feature-authorization/feature-id'; import { By } from '@angular/platform-browser'; import { NgbModule } from '@ng-bootstrap/ng-bootstrap'; -describe('DsoPageEditButtonComponent', () => { +describe('DsoPageVersionButtonComponent', () => { let component: DsoPageVersionButtonComponent; let fixture: ComponentFixture; diff --git a/src/app/shared/item/item-versions/item-versions.component.spec.ts b/src/app/shared/item/item-versions/item-versions.component.spec.ts index cc28779537..81b5489439 100644 --- a/src/app/shared/item/item-versions/item-versions.component.spec.ts +++ b/src/app/shared/item/item-versions/item-versions.component.spec.ts @@ -11,19 +11,27 @@ import { VersionHistoryDataService } from '../../../core/data/version-history-da import { By } from '@angular/platform-browser'; import { createSuccessfulRemoteDataObject$ } from '../../remote-data.utils'; import { createPaginatedList } from '../../testing/utils.test'; -import { PaginationComponentOptions } from '../../pagination/pagination-component-options.model'; -import { SortDirection, SortOptions } from '../../../core/cache/models/sort-options.model'; import { of as observableOf } from 'rxjs'; import { PaginationService } from '../../../core/pagination/pagination.service'; import { PaginationServiceStub } from '../../testing/pagination-service.stub'; +import { AuthService } from '../../../core/auth/auth.service'; +import { VersionDataService } from '../../../core/data/version-data.service'; +import { ItemDataService } from '../../../core/data/item-data.service'; +import { FormBuilder } from '@angular/forms'; +import { NotificationsService } from '../../notifications/notifications.service'; +import { NotificationsServiceStub } from '../../testing/notifications-service.stub'; +import { AuthorizationDataService } from '../../../core/data/feature-authorization/authorization-data.service'; describe('ItemVersionsComponent', () => { let component: ItemVersionsComponent; let fixture: ComponentFixture; + let authenticationService: AuthService; + let authorizationService: AuthorizationDataService; const versionHistory = Object.assign(new VersionHistory(), { id: '1' }); + const version1 = Object.assign(new Version(), { id: '1', version: 1, @@ -38,34 +46,61 @@ describe('ItemVersionsComponent', () => { created: new Date(2020, 1, 2), versionhistory: createSuccessfulRemoteDataObject$(versionHistory) }); + const versions = [version1, version2]; versionHistory.versions = createSuccessfulRemoteDataObject$(createPaginatedList(versions)); + const item1 = Object.assign(new Item(), { uuid: 'item-identifier-1', handle: '123456789/1', - version: createSuccessfulRemoteDataObject$(version1) + version: createSuccessfulRemoteDataObject$(version1), + _links: { + self: { + href: '/items/item-identifier-1' + } + } }); const item2 = Object.assign(new Item(), { uuid: 'item-identifier-2', handle: '123456789/2', - version: createSuccessfulRemoteDataObject$(version2) + version: createSuccessfulRemoteDataObject$(version2), + _links: { + self: { + href: '/items/item-identifier-2' + } + } }); const items = [item1, item2]; version1.item = createSuccessfulRemoteDataObject$(item1); version2.item = createSuccessfulRemoteDataObject$(item2); + const versionHistoryService = jasmine.createSpyObj('versionHistoryService', { getVersions: createSuccessfulRemoteDataObject$(createPaginatedList(versions)) }); - const paginationService = new PaginationServiceStub(); - beforeEach(waitForAsync(() => { + authenticationService = jasmine.createSpyObj('authenticationService', { + isAuthenticated: observableOf(true), + setRedirectUrl: {} + } + ); + authorizationService = jasmine.createSpyObj('authorizationService', { + isAuthorized: observableOf(true), + } + ); + TestBed.configureTestingModule({ declarations: [ItemVersionsComponent, VarDirective], imports: [TranslateModule.forRoot(), RouterTestingModule.withRoutes([])], providers: [ + { provide: PaginationService, useValue: new PaginationServiceStub() }, + { provide: FormBuilder, useValue: new FormBuilder() }, + { provide: NotificationsService, useValue: new NotificationsServiceStub() }, + { provide: AuthService, useValue: authenticationService }, + { provide: AuthorizationDataService, useValue: authorizationService }, { provide: VersionHistoryDataService, useValue: versionHistoryService }, - { provide: PaginationService, useValue: paginationService } + { provide: ItemDataService, useValue: {} }, + { provide: VersionDataService, useValue: {} }, ], schemas: [NO_ERRORS_SCHEMA] }).compileComponents(); @@ -88,26 +123,29 @@ describe('ItemVersionsComponent', () => { it(`should display version ${version.version} in the correct column for version ${version.id}`, () => { const id = fixture.debugElement.query(By.css(`#version-row-${version.id} .version-row-element-version`)); - expect(id.nativeElement.textContent).toEqual('' + version.version); + expect(id.nativeElement.textContent).toContain(version.version.toString()); }); - it(`should display item handle ${versionItem.handle} in the correct column for version ${version.id}`, () => { - const item = fixture.debugElement.query(By.css(`#version-row-${version.id} .version-row-element-item`)); - expect(item.nativeElement.textContent).toContain(versionItem.handle); - }); - - // This version's item is equal to the component's item (the selected item) - // Check if the handle contains an asterisk + // Check if the current version contains an asterisk if (item1.uuid === versionItem.uuid) { - it('should add an asterisk to the handle of the selected item', () => { - const item = fixture.debugElement.query(By.css(`#version-row-${version.id} .version-row-element-item`)); + it('should add an asterisk to the version of the selected item', () => { + const item = fixture.debugElement.query(By.css(`#version-row-${version.id} .version-row-element-version`)); expect(item.nativeElement.textContent).toContain('*'); }); } it(`should display date ${version.created} in the correct column for version ${version.id}`, () => { const date = fixture.debugElement.query(By.css(`#version-row-${version.id} .version-row-element-date`)); - expect(date.nativeElement.textContent).toEqual('' + version.created); + switch (versionItem.uuid) { + case item1.uuid: + expect(date.nativeElement.textContent.trim()).toEqual('2020-02-01 00:00:00'); + break; + case item2.uuid: + expect(date.nativeElement.textContent.trim()).toEqual('2020-02-02 00:00:00'); + break; + default: + throw new Error('Unexpected versionItem'); + } }); it(`should display summary ${version.summary} in the correct column for version ${version.id}`, () => { diff --git a/src/app/shared/item/item-versions/item-versions.component.ts b/src/app/shared/item/item-versions/item-versions.component.ts index 4a3f28d9e3..e941da4e4d 100644 --- a/src/app/shared/item/item-versions/item-versions.component.ts +++ b/src/app/shared/item/item-versions/item-versions.component.ts @@ -392,7 +392,6 @@ export class ItemVersionsComponent implements OnInit { getFirstCompletedRemoteData(), ).subscribe((res) => { this.versionsRD$.next(res); - console.log(res.payload); }); }