diff --git a/src/app/access-control/bulk-access/browse/bulk-access-browse.component.spec.ts b/src/app/access-control/bulk-access/browse/bulk-access-browse.component.spec.ts index a42c98cb61..04ab8943f5 100644 --- a/src/app/access-control/bulk-access/browse/bulk-access-browse.component.spec.ts +++ b/src/app/access-control/bulk-access/browse/bulk-access-browse.component.spec.ts @@ -11,6 +11,8 @@ import { SelectableObject } from '../../../shared/object-list/selectable-list/se import { PageInfo } from '../../../core/shared/page-info.model'; import { buildPaginatedList } from '../../../core/data/paginated-list.model'; import { createSuccessfulRemoteDataObject } from '../../../shared/remote-data.utils'; +import { ThemeService } from '../../../shared/theme-support/theme.service'; +import { getMockThemeService } from '../../../shared/mocks/theme-service.mock'; describe('BulkAccessBrowseComponent', () => { let component: BulkAccessBrowseComponent; @@ -23,22 +25,25 @@ describe('BulkAccessBrowseComponent', () => { const selected1 = new SelectableObject(value1); const selected2 = new SelectableObject(value2); - const testSelection = { id: listID1, selection: [selected1, selected2] } ; + const testSelection = { id: listID1, selection: [selected1, selected2] }; const selectableListService = jasmine.createSpyObj('SelectableListService', ['getSelectableList', 'deselectAll']); beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ - imports: [ + imports: [ NgbAccordionModule, NgbNavModule, TranslateModule.forRoot(), BulkAccessBrowseComponent - ], - providers: [{ provide: SelectableListService, useValue: selectableListService },], - schemas: [ + ], + providers: [ + { provide: SelectableListService, useValue: selectableListService }, + { provide: ThemeService, useValue: getMockThemeService() }, + ], + schemas: [ NO_ERRORS_SCHEMA - ] -}).compileComponents(); + ] + }).compileComponents(); })); beforeEach(() => { @@ -73,7 +78,7 @@ describe('BulkAccessBrowseComponent', () => { 'totalElements': 2, 'totalPages': 1, 'currentPage': 1 - }), [selected1, selected2]) ; + }), [selected1, selected2]); const rd = createSuccessfulRemoteDataObject(list); expect(component.objectsSelected$.value).toEqual(rd); diff --git a/src/app/access-control/bulk-access/bulk-access.component.spec.ts b/src/app/access-control/bulk-access/bulk-access.component.spec.ts index 562c7427ec..389b57a69c 100644 --- a/src/app/access-control/bulk-access/bulk-access.component.spec.ts +++ b/src/app/access-control/bulk-access/bulk-access.component.spec.ts @@ -13,6 +13,9 @@ import { Process } from '../../process-page/processes/process.model'; import { RouterTestingModule } from '@angular/router/testing'; import { NotificationsService } from '../../shared/notifications/notifications.service'; import { NotificationsServiceStub } from '../../shared/testing/notifications-service.stub'; +import { ThemeService } from '../../shared/theme-support/theme.service'; +import { getMockThemeService } from '../../shared/mocks/theme-service.mock'; +import { BulkAccessSettingsComponent } from './settings/bulk-access-settings.component'; describe('BulkAccessComponent', () => { let component: BulkAccessComponent; @@ -69,18 +72,26 @@ describe('BulkAccessComponent', () => { beforeEach(async () => { await TestBed.configureTestingModule({ - imports: [ + imports: [ RouterTestingModule, TranslateModule.forRoot(), BulkAccessComponent - ], - providers: [ + ], + providers: [ { provide: BulkAccessControlService, useValue: bulkAccessControlServiceMock }, { provide: NotificationsService, useValue: NotificationsServiceStub }, - { provide: SelectableListService, useValue: selectableListServiceMock } - ], - schemas: [NO_ERRORS_SCHEMA] -}) + { provide: SelectableListService, useValue: selectableListServiceMock }, + { provide: ThemeService, useValue: getMockThemeService() } + ], + schemas: [NO_ERRORS_SCHEMA] + }) + .overrideComponent(BulkAccessComponent, { + remove: { + imports: [ + BulkAccessSettingsComponent, + ] + } + }) .compileComponents(); }); diff --git a/src/app/access-control/group-registry/group-form/members-list/members-list.component.spec.ts b/src/app/access-control/group-registry/group-form/members-list/members-list.component.spec.ts index 06abf0c3f3..4610c2a2c3 100644 --- a/src/app/access-control/group-registry/group-form/members-list/members-list.component.spec.ts +++ b/src/app/access-control/group-registry/group-form/members-list/members-list.component.spec.ts @@ -3,7 +3,7 @@ import { DebugElement, NO_ERRORS_SCHEMA } from '@angular/core'; import { ComponentFixture, fakeAsync, flush, inject, TestBed, tick, waitForAsync } from '@angular/core/testing'; import { FormsModule, ReactiveFormsModule } from '@angular/forms'; import { BrowserModule, By } from '@angular/platform-browser'; -import { Router } from '@angular/router'; +import { ActivatedRoute, Router } from '@angular/router'; import { NgbModule } from '@ng-bootstrap/ng-bootstrap'; import { TranslateLoader, TranslateModule, TranslateService } from '@ngx-translate/core'; import { Observable, of as observableOf } from 'rxjs'; @@ -30,6 +30,9 @@ import { PaginationService } from '../../../../core/pagination/pagination.servic import { PaginationServiceStub } from '../../../../shared/testing/pagination-service.stub'; import { DSONameService } from '../../../../core/breadcrumbs/dso-name.service'; import { DSONameServiceMock } from '../../../../shared/mocks/dso-name.service.mock'; +import { PaginationComponent } from '../../../../shared/pagination/pagination.component'; +import { ContextHelpDirective } from '../../../../shared/context-help.directive'; +import { ActivatedRouteStub } from '../../../../shared/testing/active-router.stub'; describe('MembersListComponent', () => { let component: MembersListComponent; @@ -136,9 +139,16 @@ describe('MembersListComponent', () => { { provide: Router, useValue: new RouterMock() }, { provide: PaginationService, useValue: paginationService }, { provide: DSONameService, useValue: new DSONameServiceMock() }, + { provide: ActivatedRoute, useValue: new ActivatedRouteStub() }, ], schemas: [NO_ERRORS_SCHEMA] -}).compileComponents(); +}) +.overrideComponent(MembersListComponent, { + remove: { + imports: [PaginationComponent, ContextHelpDirective] + } +}) +.compileComponents(); })); beforeEach(() => { diff --git a/src/app/access-control/group-registry/group-form/subgroup-list/subgroups-list.component.spec.ts b/src/app/access-control/group-registry/group-form/subgroup-list/subgroups-list.component.spec.ts index 013aff4751..d98b105b68 100644 --- a/src/app/access-control/group-registry/group-form/subgroup-list/subgroups-list.component.spec.ts +++ b/src/app/access-control/group-registry/group-form/subgroup-list/subgroups-list.component.spec.ts @@ -3,7 +3,7 @@ import { NO_ERRORS_SCHEMA, DebugElement } from '@angular/core'; import { ComponentFixture, fakeAsync, flush, inject, TestBed, tick, waitForAsync } from '@angular/core/testing'; import { FormsModule, ReactiveFormsModule } from '@angular/forms'; import { BrowserModule, By } from '@angular/platform-browser'; -import { Router } from '@angular/router'; +import { ActivatedRoute, Router } from '@angular/router'; import { NgbModule } from '@ng-bootstrap/ng-bootstrap'; import { TranslateLoader, TranslateModule, TranslateService } from '@ngx-translate/core'; import { Observable, of as observableOf, BehaviorSubject } from 'rxjs'; @@ -31,6 +31,9 @@ import { PaginationService } from '../../../../core/pagination/pagination.servic import { PaginationServiceStub } from '../../../../shared/testing/pagination-service.stub'; import { DSONameService } from '../../../../core/breadcrumbs/dso-name.service'; import { DSONameServiceMock } from '../../../../shared/mocks/dso-name.service.mock'; +import { ContextHelpDirective } from '../../../../shared/context-help.directive'; +import { PaginationComponent } from '../../../../shared/pagination/pagination.component'; +import { ActivatedRouteStub } from '../../../../shared/testing/active-router.stub'; describe('SubgroupsListComponent', () => { let component: SubgroupsListComponent; @@ -59,23 +62,36 @@ describe('SubgroupsListComponent', () => { getSubgroups(): Group { return this.activeGroup; }, - findListByHref(_href: string): Observable>> { + findListByHref( + _href: string + ): Observable>> { return this.subgroups$.pipe( map((currentGroups: Group[]) => { - return createSuccessfulRemoteDataObject(buildPaginatedList(new PageInfo(), currentGroups)); + return createSuccessfulRemoteDataObject( + buildPaginatedList(new PageInfo(), currentGroups) + ); }) ); }, getGroupEditPageRouterLink(group: Group): string { return '/access-control/groups/' + group.id; }, - searchGroups(query: string): Observable>> { + searchGroups( + query: string + ): Observable>> { if (query === '') { - return createSuccessfulRemoteDataObject$(buildPaginatedList(new PageInfo(), allGroups)); + return createSuccessfulRemoteDataObject$( + buildPaginatedList(new PageInfo(), allGroups) + ); } - return createSuccessfulRemoteDataObject$(buildPaginatedList(new PageInfo(), [])); + return createSuccessfulRemoteDataObject$( + buildPaginatedList(new PageInfo(), []) + ); }, - addSubGroupToGroup(parentGroup, subgroup: Group): Observable { + addSubGroupToGroup( + parentGroup, + subgroup: Group + ): Observable { this.subgroups$.next([...this.subgroups$.getValue(), subgroup]); return observableOf(new RestResponse(true, 200, 'Success')); }, @@ -85,38 +101,61 @@ describe('SubgroupsListComponent', () => { clearGroupLinkRequests() { // empty }, - deleteSubGroupFromGroup(parentGroup, subgroup: Group): Observable { - this.subgroups$.next(this.subgroups$.getValue().filter((group: Group) => { - if (group.id !== subgroup.id) { - return group; - } - })); + deleteSubGroupFromGroup( + parentGroup, + subgroup: Group + ): Observable { + this.subgroups$.next( + this.subgroups$.getValue().filter((group: Group) => { + if (group.id !== subgroup.id) { + return group; + } + }) + ); return observableOf(new RestResponse(true, 200, 'Success')); - } + }, }; routerStub = new RouterMock(); builderService = getMockFormBuilderService(); translateService = getMockTranslateService(); - paginationService = new PaginationServiceStub(); TestBed.configureTestingModule({ - imports: [CommonModule, NgbModule, FormsModule, ReactiveFormsModule, BrowserModule, + imports: [ + CommonModule, + NgbModule, + FormsModule, + ReactiveFormsModule, + BrowserModule, + // ContextHelpDirective, TranslateModule.forRoot({ - loader: { - provide: TranslateLoader, - useClass: TranslateLoaderMock - } - }), SubgroupsListComponent], - providers: [SubgroupsListComponent, + loader: { + provide: TranslateLoader, + useClass: TranslateLoaderMock, + }, + }), + SubgroupsListComponent, + ], + providers: [ + SubgroupsListComponent, { provide: DSONameService, useValue: new DSONameServiceMock() }, { provide: GroupDataService, useValue: groupsDataServiceStub }, - { provide: NotificationsService, useValue: new NotificationsServiceStub() }, + { + provide: NotificationsService, + useValue: new NotificationsServiceStub(), + }, { provide: FormBuilderService, useValue: builderService }, { provide: Router, useValue: routerStub }, { provide: PaginationService, useValue: paginationService }, - ], - schemas: [NO_ERRORS_SCHEMA] -}).compileComponents(); + { provide: ActivatedRoute, useValue: new ActivatedRouteStub() }, + ], + schemas: [NO_ERRORS_SCHEMA], + }) + .overrideComponent(SubgroupsListComponent, { + remove: { + imports: [ContextHelpDirective, PaginationComponent] + } + }) + .compileComponents(); })); beforeEach(() => { diff --git a/src/app/access-control/group-registry/group-form/subgroup-list/subgroups-list.component.ts b/src/app/access-control/group-registry/group-form/subgroup-list/subgroups-list.component.ts index f66fb1942a..70aa8fb41c 100644 --- a/src/app/access-control/group-registry/group-form/subgroup-list/subgroups-list.component.ts +++ b/src/app/access-control/group-registry/group-form/subgroup-list/subgroups-list.component.ts @@ -19,9 +19,9 @@ import { NoContent } from '../../../../core/shared/NoContent.model'; import { PaginationService } from '../../../../core/pagination/pagination.service'; import { followLink } from '../../../../shared/utils/follow-link-config.model'; import { DSONameService } from '../../../../core/breadcrumbs/dso-name.service'; -import { AsyncPipe, NgForOf, NgIf } from "@angular/common"; -import { ContextHelpDirective } from "../../../../shared/context-help.directive"; -import { PaginationComponent } from "../../../../shared/pagination/pagination.component"; +import { AsyncPipe, NgForOf, NgIf } from '@angular/common'; +import { ContextHelpDirective } from '../../../../shared/context-help.directive'; +import { PaginationComponent } from '../../../../shared/pagination/pagination.component'; /** * Keys to keep track of specific subscriptions diff --git a/src/app/admin/admin-curation-tasks/admin-curation-tasks.component.spec.ts b/src/app/admin/admin-curation-tasks/admin-curation-tasks.component.spec.ts index bbbfa106ab..9b162a2bb8 100644 --- a/src/app/admin/admin-curation-tasks/admin-curation-tasks.component.spec.ts +++ b/src/app/admin/admin-curation-tasks/admin-curation-tasks.component.spec.ts @@ -2,6 +2,7 @@ import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { AdminCurationTasksComponent } from './admin-curation-tasks.component'; import { TranslateModule } from '@ngx-translate/core'; import { CUSTOM_ELEMENTS_SCHEMA } from '@angular/core'; +import { CurationFormComponent } from '../../curation-form/curation-form.component'; describe('AdminCurationTasksComponent', () => { let comp: AdminCurationTasksComponent; @@ -9,9 +10,15 @@ describe('AdminCurationTasksComponent', () => { beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ - imports: [TranslateModule.forRoot(), AdminCurationTasksComponent], - schemas: [CUSTOM_ELEMENTS_SCHEMA] -}).compileComponents(); + imports: [TranslateModule.forRoot(), AdminCurationTasksComponent], + schemas: [CUSTOM_ELEMENTS_SCHEMA] + }) + .overrideComponent(AdminCurationTasksComponent, { + remove: { + imports: [CurationFormComponent] + } + }) + .compileComponents(); })); beforeEach(() => { diff --git a/src/app/admin/admin-curation-tasks/admin-curation-tasks.component.ts b/src/app/admin/admin-curation-tasks/admin-curation-tasks.component.ts index aec23b7641..549139c34f 100644 --- a/src/app/admin/admin-curation-tasks/admin-curation-tasks.component.ts +++ b/src/app/admin/admin-curation-tasks/admin-curation-tasks.component.ts @@ -1,6 +1,6 @@ import { Component } from '@angular/core'; -import { CurationFormComponent } from "../../curation-form/curation-form.component"; -import { TranslateModule } from "@ngx-translate/core"; +import { CurationFormComponent } from '../../curation-form/curation-form.component'; +import { TranslateModule } from '@ngx-translate/core'; /** * Component responsible for rendering the system wide Curation Task UI diff --git a/src/app/admin/admin-registries/bitstream-formats/add-bitstream-format/add-bitstream-format.component.spec.ts b/src/app/admin/admin-registries/bitstream-formats/add-bitstream-format/add-bitstream-format.component.spec.ts index 2771455dec..615574fdde 100644 --- a/src/app/admin/admin-registries/bitstream-formats/add-bitstream-format/add-bitstream-format.component.spec.ts +++ b/src/app/admin/admin-registries/bitstream-formats/add-bitstream-format/add-bitstream-format.component.spec.ts @@ -14,6 +14,10 @@ import { NotificationsServiceStub } from '../../../../shared/testing/notificatio import { RouterStub } from '../../../../shared/testing/router.stub'; import { AddBitstreamFormatComponent } from './add-bitstream-format.component'; import { createFailedRemoteDataObject$, createSuccessfulRemoteDataObject$ } from '../../../../shared/remote-data.utils'; +import { FormService } from '../../../../shared/form/form.service'; +import { getMockFormService } from '../../../../shared/mocks/form-service.mock'; +import { FormBuilderService } from '../../../../shared/form/builder/form-builder.service'; +import { FormatFormComponent } from '../format-form/format-form.component'; describe('AddBitstreamFormatComponent', () => { let comp: AddBitstreamFormatComponent; @@ -33,6 +37,15 @@ describe('AddBitstreamFormatComponent', () => { let notificationService: NotificationsServiceStub; let bitstreamFormatDataService: BitstreamFormatDataService; + const formBuilderServiceStub = { + createFormGroup: () => { + return { + patchValue: () => { }, + reset(_value?: any, _options?: { onlySelf?: boolean; emitEvent?: boolean; }): void { }, + }; + } + }; + const initAsync = () => { router = new RouterStub(); notificationService = new NotificationsServiceStub(); @@ -42,14 +55,22 @@ describe('AddBitstreamFormatComponent', () => { }); TestBed.configureTestingModule({ - imports: [CommonModule, RouterTestingModule.withRoutes([]), TranslateModule.forRoot(), NgbModule, AddBitstreamFormatComponent], - providers: [ + imports: [CommonModule, RouterTestingModule.withRoutes([]), TranslateModule.forRoot(), NgbModule, AddBitstreamFormatComponent], + providers: [ { provide: Router, useValue: router }, { provide: NotificationsService, useValue: notificationService }, { provide: BitstreamFormatDataService, useValue: bitstreamFormatDataService }, - ], - schemas: [CUSTOM_ELEMENTS_SCHEMA] -}).compileComponents(); + { provide: FormService, useValue: getMockFormService() }, + { provide: FormBuilderService, useValue: formBuilderServiceStub }, + ], + schemas: [CUSTOM_ELEMENTS_SCHEMA] + }) + .overrideComponent(AddBitstreamFormatComponent, { + remove: { + imports: [FormatFormComponent] + } + }) + .compileComponents(); }; const initBeforeEach = () => { @@ -81,14 +102,22 @@ describe('AddBitstreamFormatComponent', () => { }); TestBed.configureTestingModule({ - imports: [CommonModule, RouterTestingModule.withRoutes([]), TranslateModule.forRoot(), NgbModule, AddBitstreamFormatComponent], - providers: [ - { provide: Router, useValue: router }, - { provide: NotificationsService, useValue: notificationService }, - { provide: BitstreamFormatDataService, useValue: bitstreamFormatDataService }, - ], - schemas: [CUSTOM_ELEMENTS_SCHEMA] -}).compileComponents(); + imports: [CommonModule, RouterTestingModule.withRoutes([]), TranslateModule.forRoot(), NgbModule, AddBitstreamFormatComponent], + providers: [ + { provide: Router, useValue: router }, + { provide: NotificationsService, useValue: notificationService }, + { provide: BitstreamFormatDataService, useValue: bitstreamFormatDataService }, + { provide: FormService, useValue: getMockFormService() }, + { provide: FormBuilderService, useValue: formBuilderServiceStub }, + ], + schemas: [CUSTOM_ELEMENTS_SCHEMA] + }) + .overrideComponent(AddBitstreamFormatComponent, { + remove: { + imports: [FormatFormComponent] + } + }) + .compileComponents(); })); beforeEach(initBeforeEach); it('should send the updated form to the service, show a notification and navigate to ', () => { diff --git a/src/app/admin/admin-registries/bitstream-formats/edit-bitstream-format/edit-bitstream-format.component.spec.ts b/src/app/admin/admin-registries/bitstream-formats/edit-bitstream-format/edit-bitstream-format.component.spec.ts index bd60c6f19c..42a16ed08f 100644 --- a/src/app/admin/admin-registries/bitstream-formats/edit-bitstream-format/edit-bitstream-format.component.spec.ts +++ b/src/app/admin/admin-registries/bitstream-formats/edit-bitstream-format/edit-bitstream-format.component.spec.ts @@ -19,6 +19,7 @@ import { createSuccessfulRemoteDataObject, createSuccessfulRemoteDataObject$ } from '../../../../shared/remote-data.utils'; +import { FormatFormComponent } from '../format-form/format-form.component'; describe('EditBitstreamFormatComponent', () => { let comp: EditBitstreamFormatComponent; @@ -52,15 +53,22 @@ describe('EditBitstreamFormatComponent', () => { }); TestBed.configureTestingModule({ - imports: [CommonModule, RouterTestingModule.withRoutes([]), TranslateModule.forRoot(), NgbModule, EditBitstreamFormatComponent], - providers: [ + imports: [CommonModule, RouterTestingModule.withRoutes([]), TranslateModule.forRoot(), NgbModule, EditBitstreamFormatComponent], + providers: [ { provide: ActivatedRoute, useValue: routeStub }, { provide: Router, useValue: router }, { provide: NotificationsService, useValue: notificationService }, { provide: BitstreamFormatDataService, useValue: bitstreamFormatDataService }, - ], - schemas: [CUSTOM_ELEMENTS_SCHEMA] -}).compileComponents(); + + ], + schemas: [CUSTOM_ELEMENTS_SCHEMA] + }) + .overrideComponent(EditBitstreamFormatComponent, { + remove: { + imports: [FormatFormComponent] + } + }) + .compileComponents(); }; const initBeforeEach = () => { @@ -102,15 +110,21 @@ describe('EditBitstreamFormatComponent', () => { }); TestBed.configureTestingModule({ - imports: [CommonModule, RouterTestingModule.withRoutes([]), TranslateModule.forRoot(), NgbModule, EditBitstreamFormatComponent], - providers: [ - { provide: ActivatedRoute, useValue: routeStub }, - { provide: Router, useValue: router }, - { provide: NotificationsService, useValue: notificationService }, - { provide: BitstreamFormatDataService, useValue: bitstreamFormatDataService }, - ], - schemas: [CUSTOM_ELEMENTS_SCHEMA] -}).compileComponents(); + imports: [CommonModule, RouterTestingModule.withRoutes([]), TranslateModule.forRoot(), NgbModule, EditBitstreamFormatComponent], + providers: [ + { provide: ActivatedRoute, useValue: routeStub }, + { provide: Router, useValue: router }, + { provide: NotificationsService, useValue: notificationService }, + { provide: BitstreamFormatDataService, useValue: bitstreamFormatDataService }, + ], + schemas: [CUSTOM_ELEMENTS_SCHEMA] + }) + .overrideComponent(EditBitstreamFormatComponent, { + remove: { + imports: [FormatFormComponent] + } + }) + .compileComponents(); })); beforeEach(initBeforeEach); it('should send the updated form to the service, show a notification and navigate to ', () => { diff --git a/src/app/admin/admin-registries/bitstream-formats/format-form/format-form.component.spec.ts b/src/app/admin/admin-registries/bitstream-formats/format-form/format-form.component.spec.ts index cd5f338f81..3e0107e6d9 100644 --- a/src/app/admin/admin-registries/bitstream-formats/format-form/format-form.component.spec.ts +++ b/src/app/admin/admin-registries/bitstream-formats/format-form/format-form.component.spec.ts @@ -12,6 +12,7 @@ import { BitstreamFormatSupportLevel } from '../../../../core/shared/bitstream-f import { DynamicCheckboxModel, DynamicFormArrayModel, DynamicInputModel } from '@ng-dynamic-forms/core'; import { CUSTOM_ELEMENTS_SCHEMA } from '@angular/core'; import { isEmpty } from '../../../../shared/empty.util'; +import { FormComponent } from '../../../../shared/form/form.component'; describe('FormatFormComponent', () => { let comp: FormatFormComponent; @@ -40,12 +41,24 @@ describe('FormatFormComponent', () => { const initAsync = () => { TestBed.configureTestingModule({ - imports: [CommonModule, RouterTestingModule.withRoutes([]), ReactiveFormsModule, FormsModule, TranslateModule.forRoot(), NgbModule, FormatFormComponent], - providers: [ - { provide: Router, useValue: router }, - ], - schemas: [CUSTOM_ELEMENTS_SCHEMA] -}).compileComponents(); + imports: [ + CommonModule, + RouterTestingModule.withRoutes([]), + ReactiveFormsModule, + FormsModule, + TranslateModule.forRoot(), + NgbModule, + FormatFormComponent, + ], + providers: [{ provide: Router, useValue: router }], + schemas: [CUSTOM_ELEMENTS_SCHEMA], + }) + .overrideComponent(FormatFormComponent, { + remove: { + imports: [FormComponent], + }, + }) + .compileComponents(); }; const initBeforeEach = () => { diff --git a/src/app/admin/admin-registries/bitstream-formats/format-form/format-form.component.ts b/src/app/admin/admin-registries/bitstream-formats/format-form/format-form.component.ts index 168ab6ebcd..f93918b108 100644 --- a/src/app/admin/admin-registries/bitstream-formats/format-form/format-form.component.ts +++ b/src/app/admin/admin-registries/bitstream-formats/format-form/format-form.component.ts @@ -6,14 +6,12 @@ import { DynamicFormArrayModel, DynamicFormControlLayout, DynamicFormControlModel, - DynamicFormService, DynamicInputModel, DynamicSelectModel, DynamicTextAreaModel } from '@ng-dynamic-forms/core'; import { Router } from '@angular/router'; import { hasValue, isEmpty } from '../../../../shared/empty.util'; -import { TranslateService } from '@ngx-translate/core'; import { getBitstreamFormatsModuleRoute } from '../../admin-registries-routing-paths'; import { environment } from '../../../../../environments/environment'; import { FormComponent } from '../../../../shared/form/form.component'; @@ -129,9 +127,7 @@ export class FormatFormComponent implements OnInit { }, this.arrayElementLayout), ]; - constructor(private dynamicFormService: DynamicFormService, - private translateService: TranslateService, - private router: Router) { + constructor(private router: Router) { } diff --git a/src/app/admin/admin-registries/metadata-registry/metadata-registry.component.spec.ts b/src/app/admin/admin-registries/metadata-registry/metadata-registry.component.spec.ts index 70356e0a91..95126b57d0 100644 --- a/src/app/admin/admin-registries/metadata-registry/metadata-registry.component.spec.ts +++ b/src/app/admin/admin-registries/metadata-registry/metadata-registry.component.spec.ts @@ -20,6 +20,16 @@ import { MetadataSchema } from '../../../core/metadata/metadata-schema.model'; import { createSuccessfulRemoteDataObject$ } from '../../../shared/remote-data.utils'; import { PaginationService } from '../../../core/pagination/pagination.service'; import { PaginationServiceStub } from '../../../shared/testing/pagination-service.stub'; +import { getMockFormService } from '../../../shared/mocks/form-service.mock'; +import { FormService } from '../../../shared/form/form.service'; +import { GroupDataService } from '../../../core/eperson/group-data.service'; +import { ConfigurationDataService } from '../../../core/data/configuration-data.service'; +import { SearchConfigurationService } from '../../../core/shared/search/search-configuration.service'; +import { SearchConfigurationServiceStub } from '../../../shared/testing/search-configuration-service.stub'; +import { ConfigurationProperty } from '../../../core/shared/configuration-property.model'; +import { FormBuilderService } from 'src/app/shared/form/builder/form-builder.service'; +import { MetadataSchemaFormComponent } from './metadata-schema-form/metadata-schema-form.component'; +import { RouterLink } from '@angular/router'; describe('MetadataRegistryComponent', () => { let comp: MetadataRegistryComponent; @@ -67,19 +77,76 @@ describe('MetadataRegistryComponent', () => { paginationService = new PaginationServiceStub(); + const configurationDataService = jasmine.createSpyObj('configurationDataService', { + findByPropertyName: createSuccessfulRemoteDataObject$(Object.assign(new ConfigurationProperty(), { + name: 'test', + values: [ + 'org.dspace.ctask.general.ProfileFormats = test' + ] + })) + }); + + const formBuilderServiceStub = { + createFormGroup: () => { + return { + patchValue: () => { }, + reset(_value?: any, _options?: { onlySelf?: boolean; emitEvent?: boolean; }): void { }, + }; + } + }; + + const mockGroupService = jasmine.createSpyObj('groupService', + { + // findByHref: jasmine.createSpy('findByHref'), + // findAll: jasmine.createSpy('findAll'), + // searchGroups: jasmine.createSpy('searchGroups'), + getUUIDFromString: jasmine.createSpy('getUUIDFromString'), + }, + { + linkPath: 'groups' + } +); + beforeEach(waitForAsync(() => { - TestBed.configureTestingModule({ - imports: [CommonModule, RouterTestingModule.withRoutes([]), TranslateModule.forRoot(), NgbModule, MetadataRegistryComponent, PaginationComponent, EnumKeysPipe], - providers: [ + TestBed.configureTestingModule({ + imports: [ + CommonModule, + RouterTestingModule.withRoutes([]), + TranslateModule.forRoot(), + NgbModule, + MetadataRegistryComponent, + PaginationComponent, + EnumKeysPipe, + ], + providers: [ { provide: RegistryService, useValue: registryServiceStub }, { provide: HostWindowService, useValue: new HostWindowServiceStub(0) }, { provide: PaginationService, useValue: paginationService }, - { provide: NotificationsService, useValue: new NotificationsServiceStub() } - ], - schemas: [NO_ERRORS_SCHEMA] -}).overrideComponent(MetadataRegistryComponent, { - set: { changeDetection: ChangeDetectionStrategy.Default } - }).compileComponents(); + { + provide: NotificationsService, + useValue: new NotificationsServiceStub(), + }, + { provide: FormService, useValue: getMockFormService() }, + { provide: GroupDataService, useValue: mockGroupService }, + { + provide: ConfigurationDataService, + useValue: configurationDataService, + }, + { + provide: SearchConfigurationService, + useValue: new SearchConfigurationServiceStub(), + }, + { provide: FormBuilderService, useValue: formBuilderServiceStub }, + ], + schemas: [NO_ERRORS_SCHEMA], + }) + .overrideComponent(MetadataRegistryComponent, { + remove: { + imports: [MetadataSchemaFormComponent, RouterLink] + }, + add: { changeDetection: ChangeDetectionStrategy.Default }, + }) + .compileComponents(); })); beforeEach(() => { diff --git a/src/app/admin/admin-registries/metadata-registry/metadata-schema-form/metadata-schema-form.component.spec.ts b/src/app/admin/admin-registries/metadata-registry/metadata-schema-form/metadata-schema-form.component.spec.ts index 3e999296d3..fc0ad90277 100644 --- a/src/app/admin/admin-registries/metadata-registry/metadata-schema-form/metadata-schema-form.component.spec.ts +++ b/src/app/admin/admin-registries/metadata-registry/metadata-schema-form/metadata-schema-form.component.spec.ts @@ -10,6 +10,7 @@ import { RegistryService } from '../../../../core/registry/registry.service'; import { FormBuilderService } from '../../../../shared/form/builder/form-builder.service'; import { of as observableOf } from 'rxjs'; import { MetadataSchema } from '../../../../core/metadata/metadata-schema.model'; +import { FormComponent } from '../../../../shared/form/form.component'; describe('MetadataSchemaFormComponent', () => { let component: MetadataSchemaFormComponent; @@ -38,13 +39,19 @@ describe('MetadataSchemaFormComponent', () => { beforeEach(waitForAsync(() => { return TestBed.configureTestingModule({ - imports: [CommonModule, RouterTestingModule.withRoutes([]), TranslateModule.forRoot(), NgbModule, MetadataSchemaFormComponent, EnumKeysPipe], - providers: [ + imports: [CommonModule, RouterTestingModule.withRoutes([]), TranslateModule.forRoot(), NgbModule, MetadataSchemaFormComponent, EnumKeysPipe], + providers: [ { provide: RegistryService, useValue: registryServiceStub }, { provide: FormBuilderService, useValue: formBuilderServiceStub } - ], - schemas: [NO_ERRORS_SCHEMA] -}).compileComponents(); + ], + schemas: [NO_ERRORS_SCHEMA] + }) + .overrideComponent(MetadataSchemaFormComponent, { + remove: { + imports: [FormComponent] + } + }) + .compileComponents(); })); beforeEach(() => { diff --git a/src/app/admin/admin-registries/metadata-schema/metadata-schema.component.spec.ts b/src/app/admin/admin-registries/metadata-schema/metadata-schema.component.spec.ts index 8fde011dda..56491612b0 100644 --- a/src/app/admin/admin-registries/metadata-schema/metadata-schema.component.spec.ts +++ b/src/app/admin/admin-registries/metadata-schema/metadata-schema.component.spec.ts @@ -25,6 +25,13 @@ import { createSuccessfulRemoteDataObject$ } from '../../../shared/remote-data.u import { VarDirective } from '../../../shared/utils/var.directive'; import { PaginationService } from '../../../core/pagination/pagination.service'; import { PaginationServiceStub } from '../../../shared/testing/pagination-service.stub'; +import { MetadataFieldFormComponent } from './metadata-field-form/metadata-field-form.component'; +import { GroupDataService } from '../../../core/eperson/group-data.service'; +import { ConfigurationDataService } from '../../../core/data/configuration-data.service'; +import { SearchConfigurationService } from '../../../core/shared/search/search-configuration.service'; +import { SearchConfigurationServiceStub } from '../../../shared/testing/search-configuration-service.stub'; +import { ConfigurationProperty } from '../../../core/shared/configuration-property.model'; +import { createPaginatedList } from '../../../shared/testing/utils.test'; describe('MetadataSchemaComponent', () => { let comp: MetadataSchemaComponent; @@ -129,19 +136,56 @@ describe('MetadataSchemaComponent', () => { const paginationService = new PaginationServiceStub(); + const configurationDataService = jasmine.createSpyObj('configurationDataService', { + findByPropertyName: createSuccessfulRemoteDataObject$(Object.assign(new ConfigurationProperty(), { + name: 'test', + values: [ + 'org.dspace.ctask.general.ProfileFormats = test' + ] + })) + }); + + const groupDataService = jasmine.createSpyObj('groupsDataService', { + findListByHref: createSuccessfulRemoteDataObject$(createPaginatedList([])), + getGroupRegistryRouterLink: '', + getUUIDFromString: '', + }); + + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ - imports: [CommonModule, RouterTestingModule.withRoutes([]), TranslateModule.forRoot(), NgbModule, MetadataSchemaComponent, PaginationComponent, EnumKeysPipe, VarDirective], - providers: [ + imports: [ + CommonModule, + RouterTestingModule.withRoutes([]), + TranslateModule.forRoot(), + NgbModule, + MetadataSchemaComponent, + PaginationComponent, + EnumKeysPipe, + VarDirective, + ], + providers: [ { provide: RegistryService, useValue: registryServiceStub }, { provide: ActivatedRoute, useValue: activatedRouteStub }, { provide: HostWindowService, useValue: new HostWindowServiceStub(0) }, { provide: Router, useValue: new RouterStub() }, { provide: PaginationService, useValue: paginationService }, - { provide: NotificationsService, useValue: new NotificationsServiceStub() } - ], - schemas: [NO_ERRORS_SCHEMA] -}).compileComponents(); + { + provide: NotificationsService, + useValue: new NotificationsServiceStub(), + }, + { provide: GroupDataService, useValue: groupDataService }, + { provide: ConfigurationDataService, useValue: configurationDataService }, + { provide: SearchConfigurationService, useValue: new SearchConfigurationServiceStub() }, + ], + schemas: [NO_ERRORS_SCHEMA], + }) + .overrideComponent(MetadataSchemaComponent, { + remove: { + imports: [MetadataFieldFormComponent], + }, + }) + .compileComponents(); })); beforeEach(() => { diff --git a/src/app/admin/admin-search-page/admin-search-page.component.spec.ts b/src/app/admin/admin-search-page/admin-search-page.component.spec.ts index 9ca5c874b4..1bd230c44a 100644 --- a/src/app/admin/admin-search-page/admin-search-page.component.spec.ts +++ b/src/app/admin/admin-search-page/admin-search-page.component.spec.ts @@ -2,16 +2,26 @@ import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { AdminSearchPageComponent } from './admin-search-page.component'; import { NO_ERRORS_SCHEMA } from '@angular/core'; +import { ConfigurationSearchPageComponent } from '../../search-page/configuration-search-page.component'; +import { ActivatedRoute } from '@angular/router'; +import { ActivatedRouteStub } from '../../shared/testing/active-router.stub'; describe('AdminSearchPageComponent', () => { let component: AdminSearchPageComponent; let fixture: ComponentFixture; - beforeEach(waitForAsync(() => { - TestBed.configureTestingModule({ - imports: [AdminSearchPageComponent], - schemas: [NO_ERRORS_SCHEMA] -}) + beforeEach(waitForAsync(async () => { + await TestBed.configureTestingModule({ + imports: [AdminSearchPageComponent], + providers: [ + { provide: ActivatedRoute, useValue: new ActivatedRouteStub() } + ], + schemas: [NO_ERRORS_SCHEMA] + }).overrideComponent(AdminSearchPageComponent, { + remove: { + imports: [ConfigurationSearchPageComponent] + } + }) .compileComponents(); })); diff --git a/src/app/admin/admin-search-page/admin-search-results/admin-search-result-grid-element/collection-search-result/collection-admin-search-result-grid-element.component.spec.ts b/src/app/admin/admin-search-page/admin-search-results/admin-search-result-grid-element/collection-search-result/collection-admin-search-result-grid-element.component.spec.ts index 2ea87c3e06..385888baa6 100644 --- a/src/app/admin/admin-search-page/admin-search-results/admin-search-result-grid-element/collection-search-result/collection-admin-search-result-grid-element.component.spec.ts +++ b/src/app/admin/admin-search-page/admin-search-results/admin-search-result-grid-element/collection-search-result/collection-admin-search-result-grid-element.component.spec.ts @@ -43,14 +43,14 @@ describe('CollectionAdminSearchResultGridElementComponent', () => { beforeEach(waitForAsync(() => { init(); TestBed.configureTestingModule({ - imports: [ + imports: [ NoopAnimationsModule, TranslateModule.forRoot(), RouterTestingModule.withRoutes([]), SharedModule, CollectionAdminSearchResultGridElementComponent - ], - providers: [ + ], + providers: [ { provide: TruncatableService, useValue: mockTruncatableService }, { provide: BitstreamDataService, useValue: {} }, { provide: LinkService, useValue: linkService }, @@ -58,8 +58,8 @@ describe('CollectionAdminSearchResultGridElementComponent', () => { { provide: FileService, useClass: FileServiceStub }, { provide: AuthorizationDataService, useClass: AuthorizationDataServiceStub }, { provide: ThemeService, useValue: getMockThemeService() }, - ] -}) + ] + }) .compileComponents(); })); diff --git a/src/app/admin/admin-workflow-page/admin-workflow-page.component.spec.ts b/src/app/admin/admin-workflow-page/admin-workflow-page.component.spec.ts index 95d84ab806..ec317b121f 100644 --- a/src/app/admin/admin-workflow-page/admin-workflow-page.component.spec.ts +++ b/src/app/admin/admin-workflow-page/admin-workflow-page.component.spec.ts @@ -2,6 +2,7 @@ import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { AdminWorkflowPageComponent } from './admin-workflow-page.component'; import { NO_ERRORS_SCHEMA } from '@angular/core'; +import { ConfigurationSearchPageComponent } from '../../search-page/configuration-search-page.component'; describe('AdminSearchPageComponent', () => { let component: AdminWorkflowPageComponent; @@ -9,9 +10,16 @@ describe('AdminSearchPageComponent', () => { beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ - imports: [AdminWorkflowPageComponent], - schemas: [NO_ERRORS_SCHEMA] -}) + imports: [AdminWorkflowPageComponent], + schemas: [NO_ERRORS_SCHEMA] + }) + .overrideComponent(AdminWorkflowPageComponent, { + remove: { + imports: [ + ConfigurationSearchPageComponent + ] + } + }) .compileComponents(); })); diff --git a/src/app/admin/admin-workflow-page/admin-workflow-search-results/admin-workflow-search-result-grid-element/workflow-item/workflow-item-search-result-admin-workflow-grid-element.component.spec.ts b/src/app/admin/admin-workflow-page/admin-workflow-search-results/admin-workflow-search-result-grid-element/workflow-item/workflow-item-search-result-admin-workflow-grid-element.component.spec.ts index c3ee9fa37b..6e5f5cc6f9 100644 --- a/src/app/admin/admin-workflow-page/admin-workflow-search-results/admin-workflow-search-result-grid-element/workflow-item/workflow-item-search-result-admin-workflow-grid-element.component.spec.ts +++ b/src/app/admin/admin-workflow-page/admin-workflow-search-results/admin-workflow-search-result-grid-element/workflow-item/workflow-item-search-result-admin-workflow-grid-element.component.spec.ts @@ -29,6 +29,11 @@ import { getMockLinkService } from '../../../../../shared/mocks/link-service.moc import { of as observableOf } from 'rxjs'; import { getMockThemeService } from '../../../../../shared/mocks/theme-service.mock'; import { ThemeService } from '../../../../../shared/theme-support/theme.service'; +import { WorkflowItemAdminWorkflowActionsComponent } from '../../actions/workflow-item/workflow-item-admin-workflow-actions.component'; +import { AuthService } from '../../../../../core/auth/auth.service'; +import { AuthServiceMock } from '../../../../../shared/mocks/auth.service.mock'; +import { AuthorizationDataServiceStub } from '../../../../../shared/testing/authorization-service.stub'; +import { AuthorizationDataService } from '../../../../../core/data/feature-authorization/authorization-data.service'; describe('WorkflowItemSearchResultAdminWorkflowGridElementComponent', () => { let component: WorkflowItemSearchResultAdminWorkflowGridElementComponent; @@ -70,11 +75,16 @@ describe('WorkflowItemSearchResultAdminWorkflowGridElementComponent', () => { } }, { provide: BitstreamDataService, useValue: {} }, + { provide: AuthService, useValue: new AuthServiceMock() }, + { provide: AuthorizationDataService, useClass: AuthorizationDataServiceStub }, ], schemas: [NO_ERRORS_SCHEMA] }) .overrideComponent(WorkflowItemSearchResultAdminWorkflowGridElementComponent, { - set: { + remove: { + imports: [WorkflowItemAdminWorkflowActionsComponent] + }, + add: { entryComponents: [ItemGridElementComponent] } }) diff --git a/src/app/admin/admin-workflow-page/admin-workflow-search-results/admin-workflow-search-result-grid-element/workspace-item/workspace-item-search-result-admin-workflow-grid-element.component.spec.ts b/src/app/admin/admin-workflow-page/admin-workflow-search-results/admin-workflow-search-result-grid-element/workspace-item/workspace-item-search-result-admin-workflow-grid-element.component.spec.ts index 6a1edc4240..d410726427 100644 --- a/src/app/admin/admin-workflow-page/admin-workflow-search-results/admin-workflow-search-result-grid-element/workspace-item/workspace-item-search-result-admin-workflow-grid-element.component.spec.ts +++ b/src/app/admin/admin-workflow-page/admin-workflow-search-results/admin-workflow-search-result-grid-element/workspace-item/workspace-item-search-result-admin-workflow-grid-element.component.spec.ts @@ -36,6 +36,11 @@ import { } from '../../../../../shared/testing/supervision-order.mock'; import { SupervisionOrderDataService } from '../../../../../core/supervision-order/supervision-order-data.service'; import { DSpaceObject } from '../../../../../core/shared/dspace-object.model'; +import { NotificationsService } from '../../../../../shared/notifications/notifications.service'; +import { NotificationsServiceStub } from '../../../../../shared/testing/notifications-service.stub'; +import { AuthService } from '../../../../../core/auth/auth.service'; +import { AuthServiceMock } from '../../../../../shared/mocks/auth.service.mock'; +import { AuthorizationDataService } from '../../../../../core/data/feature-authorization/authorization-data.service'; describe('WorkspaceItemSearchResultAdminWorkflowGridElementComponent', () => { let component: WorkspaceItemSearchResultAdminWorkflowGridElementComponent; @@ -67,25 +72,28 @@ describe('WorkspaceItemSearchResultAdminWorkflowGridElementComponent', () => { init(); TestBed.configureTestingModule( { - imports: [ - NoopAnimationsModule, - TranslateModule.forRoot(), - RouterTestingModule.withRoutes([]), - WorkspaceItemSearchResultAdminWorkflowGridElementComponent, ItemGridElementComponent, ListableObjectDirective - ], - providers: [ - { provide: LinkService, useValue: linkService }, - { provide: ThemeService, useValue: themeService }, - { + imports: [ + NoopAnimationsModule, + TranslateModule.forRoot(), + RouterTestingModule.withRoutes([]), + WorkspaceItemSearchResultAdminWorkflowGridElementComponent, ItemGridElementComponent, ListableObjectDirective + ], + providers: [ + { provide: LinkService, useValue: linkService }, + { provide: ThemeService, useValue: themeService }, + { provide: TruncatableService, useValue: { - isCollapsed: () => observableOf(true), + isCollapsed: () => observableOf(true), } - }, - { provide: BitstreamDataService, useValue: {} }, - { provide: SupervisionOrderDataService, useValue: supervisionOrderDataService } - ], - schemas: [NO_ERRORS_SCHEMA] -}) + }, + { provide: BitstreamDataService, useValue: {} }, + { provide: SupervisionOrderDataService, useValue: supervisionOrderDataService }, + { provide: NotificationsService, useValue: new NotificationsServiceStub() }, + { provide: AuthService, useValue: new AuthServiceMock() }, + { provide: AuthorizationDataService, useValue: {} }, + ], + schemas: [NO_ERRORS_SCHEMA] + }) .overrideComponent(WorkspaceItemSearchResultAdminWorkflowGridElementComponent, { set: { entryComponents: [ItemGridElementComponent] diff --git a/src/app/admin/admin-workflow-page/admin-workflow-search-results/admin-workflow-search-result-list-element/workflow-item/workflow-item-search-result-admin-workflow-list-element.component.spec.ts b/src/app/admin/admin-workflow-page/admin-workflow-search-results/admin-workflow-search-result-list-element/workflow-item/workflow-item-search-result-admin-workflow-list-element.component.spec.ts index 957b55c9ae..3441da7155 100644 --- a/src/app/admin/admin-workflow-page/admin-workflow-search-results/admin-workflow-search-result-list-element/workflow-item/workflow-item-search-result-admin-workflow-list-element.component.spec.ts +++ b/src/app/admin/admin-workflow-page/admin-workflow-search-results/admin-workflow-search-result-list-element/workflow-item/workflow-item-search-result-admin-workflow-list-element.component.spec.ts @@ -24,6 +24,11 @@ import { DSONameService } from '../../../../../core/breadcrumbs/dso-name.service import { DSONameServiceMock } from '../../../../../shared/mocks/dso-name.service.mock'; import { APP_CONFIG } from '../../../../../../config/app-config.interface'; import { environment } from '../../../../../../environments/environment'; +import { ThemeService } from '../../../../../shared/theme-support/theme.service'; +import { getMockThemeService } from '../../../../../shared/mocks/theme-service.mock'; +import { AuthService } from '../../../../../core/auth/auth.service'; +import { AuthServiceMock } from '../../../../../shared/mocks/auth.service.mock'; +import { AuthorizationDataService } from '../../../../../core/data/feature-authorization/authorization-data.service'; describe('WorkflowItemSearchResultAdminWorkflowListElementComponent', () => { let component: WorkflowItemSearchResultAdminWorkflowListElementComponent; @@ -58,7 +63,10 @@ describe('WorkflowItemSearchResultAdminWorkflowListElementComponent', () => { { provide: TruncatableService, useValue: mockTruncatableService }, { provide: LinkService, useValue: linkService }, { provide: DSONameService, useClass: DSONameServiceMock }, - { provide: APP_CONFIG, useValue: environment } + { provide: APP_CONFIG, useValue: environment }, + { provide: ThemeService, useValue: getMockThemeService() }, + { provide: AuthService, useValue: new AuthServiceMock() }, + { provide: AuthorizationDataService, useValue: {} }, ], schemas: [NO_ERRORS_SCHEMA] }) diff --git a/src/app/admin/admin-workflow-page/admin-workflow-search-results/admin-workflow-search-result-list-element/workspace-item/workspace-item-search-result-admin-workflow-list-element.component.spec.ts b/src/app/admin/admin-workflow-page/admin-workflow-search-results/admin-workflow-search-result-list-element/workspace-item/workspace-item-search-result-admin-workflow-list-element.component.spec.ts index 1a4d4392fe..ab0a5d6b99 100644 --- a/src/app/admin/admin-workflow-page/admin-workflow-search-results/admin-workflow-search-result-list-element/workspace-item/workspace-item-search-result-admin-workflow-list-element.component.spec.ts +++ b/src/app/admin/admin-workflow-page/admin-workflow-search-results/admin-workflow-search-result-list-element/workspace-item/workspace-item-search-result-admin-workflow-list-element.component.spec.ts @@ -31,6 +31,13 @@ import { supervisionOrderPaginatedListRD$ } from '../../../../../shared/testing/supervision-order.mock'; import { DSpaceObject } from '../../../../../core/shared/dspace-object.model'; +import { NotificationsService } from '../../../../../shared/notifications/notifications.service'; +import { NotificationsServiceStub } from '../../../../../shared/testing/notifications-service.stub'; +import { ThemeService } from '../../../../../shared/theme-support/theme.service'; +import { getMockThemeService } from '../../../../../shared/mocks/theme-service.mock'; +import { AuthService } from '../../../../../core/auth/auth.service'; +import { AuthServiceMock } from '../../../../../shared/mocks/auth.service.mock'; +import { AuthorizationDataService } from '../../../../../core/data/feature-authorization/authorization-data.service'; describe('WorkspaceItemSearchResultAdminWorkflowListElementComponent', () => { let component: WorkspaceItemSearchResultAdminWorkflowListElementComponent; @@ -68,8 +75,12 @@ describe('WorkspaceItemSearchResultAdminWorkflowListElementComponent', () => { ], providers: [ { provide: TruncatableService, useValue: mockTruncatableService }, + { provide: NotificationsService, useValue: new NotificationsServiceStub() }, + { provide: ThemeService, useValue: getMockThemeService() }, + { provide: AuthService, useValue: new AuthServiceMock() }, { provide: LinkService, useValue: linkService }, { provide: DSONameService, useClass: DSONameServiceMock }, + { provide: AuthorizationDataService, useValue: {} }, { provide: SupervisionOrderDataService, useValue: supervisionOrderDataService }, { provide: APP_CONFIG, useValue: environment } ], diff --git a/src/app/browse-by/browse-by-metadata-page/browse-by-metadata-page.component.spec.ts b/src/app/browse-by/browse-by-metadata-page/browse-by-metadata-page.component.spec.ts index 18aea01330..0b4a92304d 100644 --- a/src/app/browse-by/browse-by-metadata-page/browse-by-metadata-page.component.spec.ts +++ b/src/app/browse-by/browse-by-metadata-page/browse-by-metadata-page.component.spec.ts @@ -30,6 +30,15 @@ import { PaginationService } from '../../core/pagination/pagination.service'; import { PaginationComponentOptions } from '../../shared/pagination/pagination-component-options.model'; import { PaginationServiceStub } from '../../shared/testing/pagination-service.stub'; import { APP_CONFIG } from '../../../config/app-config.interface'; +import { RouteService } from 'src/app/core/services/route.service'; +import { routeServiceStub } from 'src/app/shared/testing/route-service.stub'; +import { NoopAnimationsModule } from '@angular/platform-browser/animations'; +import { ThemeService } from 'src/app/shared/theme-support/theme.service'; +import { getMockThemeService } from 'src/app/shared/mocks/theme-service.mock'; +import { ThemedLoadingComponent } from 'src/app/shared/loading/themed-loading.component'; +import { DsoEditMenuComponent } from 'src/app/shared/dso-page/dso-edit-menu/dso-edit-menu.component'; +import { SelectableListService } from 'src/app/shared/object-list/selectable-list/selectable-list.service'; +import { HostWindowService } from 'src/app/shared/host-window.service'; describe('BrowseByMetadataPageComponent', () => { let comp: BrowseByMetadataPageComponent; @@ -102,17 +111,36 @@ describe('BrowseByMetadataPageComponent', () => { beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ - imports: [CommonModule, RouterTestingModule.withRoutes([]), TranslateModule.forRoot(), NgbModule, BrowseByMetadataPageComponent, EnumKeysPipe, VarDirective], - providers: [ + imports: [ + CommonModule, + RouterTestingModule.withRoutes([]), + TranslateModule.forRoot(), + NgbModule, + BrowseByMetadataPageComponent, + EnumKeysPipe, + VarDirective, + NoopAnimationsModule + ], + providers: [ { provide: ActivatedRoute, useValue: activatedRouteStub }, { provide: BrowseService, useValue: mockBrowseService }, { provide: DSpaceObjectDataService, useValue: mockDsoService }, { provide: PaginationService, useValue: paginationService }, { provide: Router, useValue: new RouterMock() }, - { provide: APP_CONFIG, useValue: environmentMock } - ], - schemas: [NO_ERRORS_SCHEMA] -}).compileComponents(); + { provide: APP_CONFIG, useValue: environmentMock }, + { provide: RouteService, useValue: routeServiceStub }, + { provide: ThemeService, useValue: getMockThemeService() }, + { provide: SelectableListService, useValue: {} }, + { provide: HostWindowService, useValue: {} }, + ], + schemas: [NO_ERRORS_SCHEMA] + }) + .overrideComponent(BrowseByMetadataPageComponent, { + remove: { + imports: [ThemedLoadingComponent, DsoEditMenuComponent] + } + }) + .compileComponents(); })); beforeEach(() => { diff --git a/src/app/collection-page/create-collection-page/create-collection-page.component.spec.ts b/src/app/collection-page/create-collection-page/create-collection-page.component.spec.ts index d062f39e95..9aacde2507 100644 --- a/src/app/collection-page/create-collection-page/create-collection-page.component.spec.ts +++ b/src/app/collection-page/create-collection-page/create-collection-page.component.spec.ts @@ -15,6 +15,9 @@ import { NotificationsServiceStub } from '../../shared/testing/notifications-ser import { RequestService } from '../../core/data/request.service'; import { DSONameService } from '../../core/breadcrumbs/dso-name.service'; import { DSONameServiceMock } from '../../shared/mocks/dso-name.service.mock'; +import { AuthService } from '../../core/auth/auth.service'; +import { AuthServiceMock } from '../../shared/mocks/auth.service.mock'; +import { CollectionFormComponent } from '../collection-form/collection-form.component'; describe('CreateCollectionPageComponent', () => { let comp: CreateCollectionPageComponent; @@ -22,21 +25,28 @@ describe('CreateCollectionPageComponent', () => { beforeEach(waitForAsync(() => { return TestBed.configureTestingModule({ - imports: [TranslateModule.forRoot(), SharedModule, CommonModule, RouterTestingModule, CreateCollectionPageComponent], - providers: [ + imports: [TranslateModule.forRoot(), SharedModule, CommonModule, RouterTestingModule, CreateCollectionPageComponent], + providers: [ { provide: DSONameService, useValue: new DSONameServiceMock() }, { provide: CollectionDataService, useValue: {} }, { - provide: CommunityDataService, - useValue: { findById: () => observableOf({ payload: { name: 'test' } }) } + provide: CommunityDataService, + useValue: { findById: () => observableOf({ payload: { name: 'test' } }) } }, { provide: RouteService, useValue: { getQueryParameterValue: () => observableOf('1234') } }, { provide: Router, useValue: {} }, { provide: NotificationsService, useValue: new NotificationsServiceStub() }, - { provide: RequestService, useValue: {} } - ], - schemas: [NO_ERRORS_SCHEMA] -}).compileComponents(); + { provide: RequestService, useValue: {} }, + { provide: AuthService, useValue: new AuthServiceMock() }, + ], + schemas: [NO_ERRORS_SCHEMA] + }) + .overrideComponent(CreateCollectionPageComponent, { + remove: { + imports: [CollectionFormComponent] + } + }) + .compileComponents(); })); beforeEach(() => { diff --git a/src/app/collection-page/edit-collection-page/collection-metadata/collection-metadata.component.spec.ts b/src/app/collection-page/edit-collection-page/collection-metadata/collection-metadata.component.spec.ts index e9575a15ba..ce820d93df 100644 --- a/src/app/collection-page/edit-collection-page/collection-metadata/collection-metadata.component.spec.ts +++ b/src/app/collection-page/edit-collection-page/collection-metadata/collection-metadata.component.spec.ts @@ -15,6 +15,10 @@ import { Collection } from '../../../core/shared/collection.model'; import { RequestService } from '../../../core/data/request.service'; import { createFailedRemoteDataObject$, createSuccessfulRemoteDataObject, createSuccessfulRemoteDataObject$ } from '../../../shared/remote-data.utils'; import { getCollectionItemTemplateRoute } from '../../collection-page-routing-paths'; +import { AuthServiceMock } from '../../../shared/mocks/auth.service.mock'; +import { AuthService } from '../../../core/auth/auth.service'; +import { CommunityDataService } from '../../../core/data/community-data.service'; +import { ObjectCacheService } from '../../../core/cache/object-cache.service'; describe('CollectionMetadataComponent', () => { let comp: CollectionMetadataComponent; @@ -66,7 +70,10 @@ describe('CollectionMetadataComponent', () => { { provide: ActivatedRoute, useValue: { parent: { data: observableOf({ dso: createSuccessfulRemoteDataObject(collection) }) } } }, { provide: NotificationsService, useValue: notificationsService }, { provide: RequestService, useValue: requestService }, - { provide: Router, useValue: routerMock } + { provide: Router, useValue: routerMock }, + { provide: AuthService, useValue: new AuthServiceMock() }, + { provide: CommunityDataService, useValue: {} }, + { provide: ObjectCacheService, useValue: {} }, ], schemas: [NO_ERRORS_SCHEMA] }).compileComponents(); diff --git a/src/app/collection-page/edit-item-template-page/edit-item-template-page.component.spec.ts b/src/app/collection-page/edit-item-template-page/edit-item-template-page.component.spec.ts index 248c70758b..cf206384d6 100644 --- a/src/app/collection-page/edit-item-template-page/edit-item-template-page.component.spec.ts +++ b/src/app/collection-page/edit-item-template-page/edit-item-template-page.component.spec.ts @@ -11,6 +11,10 @@ import { Collection } from '../../core/shared/collection.model'; import { NO_ERRORS_SCHEMA } from '@angular/core'; import { createSuccessfulRemoteDataObject, createSuccessfulRemoteDataObject$ } from '../../shared/remote-data.utils'; import { getCollectionEditRoute } from '../collection-page-routing-paths'; +import { ThemeService } from '../../shared/theme-support/theme.service'; +import { getMockThemeService } from '../../shared/mocks/theme-service.mock'; +import { NotificationsService } from '../../shared/notifications/notifications.service'; +import { NotificationsServiceStub } from '../../shared/testing/notifications-service.stub'; describe('EditItemTemplatePageComponent', () => { let comp: EditItemTemplatePageComponent; @@ -28,13 +32,15 @@ describe('EditItemTemplatePageComponent', () => { findByCollectionID: createSuccessfulRemoteDataObject$({}) }); TestBed.configureTestingModule({ - imports: [TranslateModule.forRoot(), SharedModule, CommonModule, RouterTestingModule, EditItemTemplatePageComponent], - providers: [ + imports: [TranslateModule.forRoot(), SharedModule, CommonModule, RouterTestingModule, EditItemTemplatePageComponent], + providers: [ { provide: ItemTemplateDataService, useValue: itemTemplateService }, - { provide: ActivatedRoute, useValue: { parent: { data: observableOf({ dso: createSuccessfulRemoteDataObject(collection) }) } } } - ], - schemas: [NO_ERRORS_SCHEMA] -}).compileComponents(); + { provide: ActivatedRoute, useValue: { parent: { data: observableOf({ dso: createSuccessfulRemoteDataObject(collection) }) } } }, + { provide: ThemeService, useValue: getMockThemeService() }, + { provide: NotificationsService, useValue: new NotificationsServiceStub() }, + ], + schemas: [NO_ERRORS_SCHEMA] + }).compileComponents(); })); beforeEach(() => { diff --git a/src/app/community-list-page/community-list-page.component.spec.ts b/src/app/community-list-page/community-list-page.component.spec.ts index 0e1230a412..ff8adfbded 100644 --- a/src/app/community-list-page/community-list-page.component.spec.ts +++ b/src/app/community-list-page/community-list-page.component.spec.ts @@ -4,6 +4,9 @@ import { CommunityListPageComponent } from './community-list-page.component'; import { TranslateLoader, TranslateModule } from '@ngx-translate/core'; import { TranslateLoaderMock } from '../shared/mocks/translate-loader.mock'; import { CUSTOM_ELEMENTS_SCHEMA } from '@angular/core'; +import { ThemeService } from '../shared/theme-support/theme.service'; +import { getMockThemeService } from '../shared/mocks/theme-service.mock'; +import { CommunityListService } from './community-list-service'; describe('CommunityListPageComponent', () => { let component: CommunityListPageComponent; @@ -22,6 +25,8 @@ describe('CommunityListPageComponent', () => { ], providers: [ CommunityListPageComponent, + { provide: ThemeService, useValue: getMockThemeService() }, + { provide: CommunityListService, useValue: {} }, ], schemas: [CUSTOM_ELEMENTS_SCHEMA] }) diff --git a/src/app/community-page/create-community-page/create-community-page.component.spec.ts b/src/app/community-page/create-community-page/create-community-page.component.spec.ts index 55681a0509..5f2391662d 100644 --- a/src/app/community-page/create-community-page/create-community-page.component.spec.ts +++ b/src/app/community-page/create-community-page/create-community-page.component.spec.ts @@ -12,6 +12,9 @@ import { CreateCommunityPageComponent } from './create-community-page.component' import { NotificationsService } from '../../shared/notifications/notifications.service'; import { NotificationsServiceStub } from '../../shared/testing/notifications-service.stub'; import { RequestService } from '../../core/data/request.service'; +import { AuthService } from '../../core/auth/auth.service'; +import { AuthServiceMock } from '../../shared/mocks/auth.service.mock'; +import { CommunityFormComponent } from '../community-form/community-form.component'; describe('CreateCommunityPageComponent', () => { let comp: CreateCommunityPageComponent; @@ -19,16 +22,23 @@ describe('CreateCommunityPageComponent', () => { beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ - imports: [TranslateModule.forRoot(), SharedModule, CommonModule, RouterTestingModule, CreateCommunityPageComponent], - providers: [ + imports: [TranslateModule.forRoot(), SharedModule, CommonModule, RouterTestingModule, CreateCommunityPageComponent], + providers: [ { provide: CommunityDataService, useValue: { findById: () => observableOf({}) } }, { provide: RouteService, useValue: { getQueryParameterValue: () => observableOf('1234') } }, { provide: Router, useValue: {} }, { provide: NotificationsService, useValue: new NotificationsServiceStub() }, - { provide: RequestService, useValue: {} } - ], - schemas: [NO_ERRORS_SCHEMA] -}).compileComponents(); + { provide: RequestService, useValue: {} }, + { provide: AuthService, useValue: new AuthServiceMock() }, + ], + schemas: [NO_ERRORS_SCHEMA] + }) + .overrideComponent(CreateCommunityPageComponent, { + remove: { + imports: [CommunityFormComponent] + } + }) + .compileComponents(); })); beforeEach(() => { diff --git a/src/app/community-page/edit-community-page/community-authorizations/community-authorizations.component.spec.ts b/src/app/community-page/edit-community-page/community-authorizations/community-authorizations.component.spec.ts index 41042f3578..3f57d98d7d 100644 --- a/src/app/community-page/edit-community-page/community-authorizations/community-authorizations.component.spec.ts +++ b/src/app/community-page/edit-community-page/community-authorizations/community-authorizations.component.spec.ts @@ -10,6 +10,7 @@ import { DSpaceObject } from '../../../core/shared/dspace-object.model'; import { createSuccessfulRemoteDataObject } from '../../../shared/remote-data.utils'; import { CommunityAuthorizationsComponent } from './community-authorizations.component'; import { Collection } from '../../../core/shared/collection.model'; +import { ResourcePoliciesComponent } from '../../../shared/resource-policies/resource-policies.component'; describe('CommunityAuthorizationsComponent', () => { let comp: CommunityAuthorizationsComponent; @@ -37,17 +38,23 @@ describe('CommunityAuthorizationsComponent', () => { beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ - imports: [ + imports: [ CommonModule, CommunityAuthorizationsComponent - ], - providers: [ + ], + providers: [ { provide: ActivatedRoute, useValue: routeStub }, ChangeDetectorRef, CommunityAuthorizationsComponent, - ], - schemas: [NO_ERRORS_SCHEMA] -}).compileComponents(); + ], + schemas: [NO_ERRORS_SCHEMA] + }) + .overrideComponent(CommunityAuthorizationsComponent, { + remove: { + imports: [ResourcePoliciesComponent] + } + }) + .compileComponents(); })); beforeEach(() => { diff --git a/src/app/community-page/edit-community-page/community-curate/community-curate.component.spec.ts b/src/app/community-page/edit-community-page/community-curate/community-curate.component.spec.ts index c24a029602..d8d669bcc7 100644 --- a/src/app/community-page/edit-community-page/community-curate/community-curate.component.spec.ts +++ b/src/app/community-page/edit-community-page/community-curate/community-curate.component.spec.ts @@ -7,6 +7,7 @@ import { ActivatedRoute } from '@angular/router'; import { DSONameService } from '../../../core/breadcrumbs/dso-name.service'; import { CommunityCurateComponent } from './community-curate.component'; import { Community } from '../../../core/shared/community.model'; +import { CurationFormComponent } from '../../../curation-form/curation-form.component'; describe('CommunityCurateComponent', () => { let comp: CommunityCurateComponent; @@ -34,13 +35,19 @@ describe('CommunityCurateComponent', () => { }); TestBed.configureTestingModule({ - imports: [TranslateModule.forRoot(), CommunityCurateComponent], - providers: [ + imports: [TranslateModule.forRoot(), CommunityCurateComponent], + providers: [ { provide: ActivatedRoute, useValue: routeStub }, { provide: DSONameService, useValue: dsoNameService } - ], - schemas: [CUSTOM_ELEMENTS_SCHEMA] -}).compileComponents(); + ], + schemas: [CUSTOM_ELEMENTS_SCHEMA] + }) + .overrideComponent(CommunityCurateComponent, { + remove: { + imports: [CurationFormComponent] + } + }) + .compileComponents(); })); beforeEach(() => { diff --git a/src/app/community-page/edit-community-page/community-curate/community-curate.component.ts b/src/app/community-page/edit-community-page/community-curate/community-curate.component.ts index aa71c09fe9..e369da6d57 100644 --- a/src/app/community-page/edit-community-page/community-curate/community-curate.component.ts +++ b/src/app/community-page/edit-community-page/community-curate/community-curate.component.ts @@ -6,9 +6,9 @@ import { RemoteData } from '../../../core/data/remote-data'; import { Observable } from 'rxjs'; import { DSONameService } from '../../../core/breadcrumbs/dso-name.service'; import { hasValue } from '../../../shared/empty.util'; -import { CurationFormComponent } from "../../../curation-form/curation-form.component"; -import { TranslateModule } from "@ngx-translate/core"; -import { AsyncPipe } from "@angular/common"; +import { CurationFormComponent } from '../../../curation-form/curation-form.component'; +import { TranslateModule } from '@ngx-translate/core'; +import { AsyncPipe } from '@angular/common'; /** * Component for managing a community's curation tasks diff --git a/src/app/community-page/edit-community-page/community-metadata/community-metadata.component.spec.ts b/src/app/community-page/edit-community-page/community-metadata/community-metadata.component.spec.ts index 9de18344b1..e7f2ccc26d 100644 --- a/src/app/community-page/edit-community-page/community-metadata/community-metadata.component.spec.ts +++ b/src/app/community-page/edit-community-page/community-metadata/community-metadata.component.spec.ts @@ -10,6 +10,7 @@ import { CommunityMetadataComponent } from './community-metadata.component'; import { CommunityDataService } from '../../../core/data/community-data.service'; import { NotificationsService } from '../../../shared/notifications/notifications.service'; import { NotificationsServiceStub } from '../../../shared/testing/notifications-service.stub'; +import { CommunityFormComponent } from '../../community-form/community-form.component'; describe('CommunityMetadataComponent', () => { let comp: CommunityMetadataComponent; @@ -17,14 +18,20 @@ describe('CommunityMetadataComponent', () => { beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ - imports: [TranslateModule.forRoot(), SharedModule, CommonModule, RouterTestingModule, CommunityMetadataComponent], - providers: [ + imports: [TranslateModule.forRoot(), SharedModule, CommonModule, RouterTestingModule, CommunityMetadataComponent], + providers: [ { provide: CommunityDataService, useValue: {} }, { provide: ActivatedRoute, useValue: { parent: { data: observableOf({ dso: { payload: {} } }) } } }, { provide: NotificationsService, useValue: new NotificationsServiceStub() } - ], - schemas: [NO_ERRORS_SCHEMA] -}).compileComponents(); + ], + schemas: [NO_ERRORS_SCHEMA] + }) + .overrideComponent(CommunityMetadataComponent, { + remove: { + imports: [CommunityFormComponent], + } + }) + .compileComponents(); })); beforeEach(() => { diff --git a/src/app/core/data/item-data.service.spec.ts b/src/app/core/data/item-data.service.spec.ts index 2c20ed0fb6..77339e0ed9 100644 --- a/src/app/core/data/item-data.service.spec.ts +++ b/src/app/core/data/item-data.service.spec.ts @@ -16,7 +16,7 @@ import { getMockRemoteDataBuildService } from '../../shared/mocks/remote-data-bu import { CoreState } from '../core-state.model'; import { RequestEntry } from './request-entry.model'; import { FindListOptions } from './find-list-options.model'; -import { HALEndpointServiceStub } from 'src/app/shared/testing/hal-endpoint-service.stub'; +import { HALEndpointServiceStub } from '../../shared/testing/hal-endpoint-service.stub'; import { testCreateDataImplementation } from './base/create-data.spec'; import { testPatchDataImplementation } from './base/patch-data.spec'; import { testDeleteDataImplementation } from './base/delete-data.spec'; diff --git a/src/app/dso-shared/dso-edit-metadata/dso-edit-metadata-value/dso-edit-metadata-value.component.spec.ts b/src/app/dso-shared/dso-edit-metadata/dso-edit-metadata-value/dso-edit-metadata-value.component.spec.ts index 64721c1ec5..923b336130 100644 --- a/src/app/dso-shared/dso-edit-metadata/dso-edit-metadata-value/dso-edit-metadata-value.component.spec.ts +++ b/src/app/dso-shared/dso-edit-metadata/dso-edit-metadata-value/dso-edit-metadata-value.component.spec.ts @@ -8,9 +8,16 @@ import { RelationshipDataService } from '../../../core/data/relationship-data.se import { DSONameService } from '../../../core/breadcrumbs/dso-name.service'; import { of } from 'rxjs/internal/observable/of'; import { ItemMetadataRepresentation } from '../../../core/shared/metadata-representation/item/item-metadata-representation.model'; -import { MetadataValue, VIRTUAL_METADATA_PREFIX } from '../../../core/shared/metadata.models'; -import { DsoEditMetadataChangeType, DsoEditMetadataValue } from '../dso-edit-metadata-form'; +import { + MetadataValue, + VIRTUAL_METADATA_PREFIX, +} from '../../../core/shared/metadata.models'; +import { + DsoEditMetadataChangeType, + DsoEditMetadataValue, +} from '../dso-edit-metadata-form'; import { By } from '@angular/platform-browser'; +import { ThemedTypeBadgeComponent } from '../../../shared/object-collection/shared/badges/type-badge/themed-type-badge.component'; const EDIT_BTN = 'edit'; const CONFIRM_BTN = 'confirm'; @@ -30,14 +37,16 @@ describe('DsoEditMetadataValueComponent', () => { function initServices(): void { relationshipService = jasmine.createSpyObj('relationshipService', { - resolveMetadataRepresentation: of(new ItemMetadataRepresentation(metadataValue)), + resolveMetadataRepresentation: of( + new ItemMetadataRepresentation(metadataValue) + ), }); dsoNameService = jasmine.createSpyObj('dsoNameService', { getName: 'Related Name', }); } - beforeEach(waitForAsync(() => { + beforeEach(waitForAsync(async () => { metadataValue = Object.assign(new MetadataValue(), { value: 'Regular Name', language: 'en', @@ -48,14 +57,25 @@ describe('DsoEditMetadataValueComponent', () => { initServices(); - TestBed.configureTestingModule({ - imports: [TranslateModule.forRoot(), RouterTestingModule.withRoutes([]), DsoEditMetadataValueComponent, VarDirective], - providers: [ + await TestBed.configureTestingModule({ + imports: [ + TranslateModule.forRoot(), + RouterTestingModule.withRoutes([]), + DsoEditMetadataValueComponent, + VarDirective, + ], + providers: [ { provide: RelationshipDataService, useValue: relationshipService }, { provide: DSONameService, useValue: dsoNameService }, - ], - schemas: [NO_ERRORS_SCHEMA] -}).compileComponents(); + ], + schemas: [NO_ERRORS_SCHEMA], + }) + .overrideComponent(DsoEditMetadataValueComponent, { + remove: { + imports: [ThemedTypeBadgeComponent], + }, + }) + .compileComponents(); })); beforeEach(() => { @@ -67,7 +87,9 @@ describe('DsoEditMetadataValueComponent', () => { }); it('should not show a badge', () => { - expect(fixture.debugElement.query(By.css('ds-themed-type-badge'))).toBeNull(); + expect( + fixture.debugElement.query(By.css('ds-themed-type-badge')) + ).toBeNull(); }); describe('when no changes have been made', () => { @@ -133,7 +155,9 @@ describe('DsoEditMetadataValueComponent', () => { }); it('should show a badge', () => { - expect(fixture.debugElement.query(By.css('ds-themed-type-badge'))).toBeTruthy(); + expect( + fixture.debugElement.query(By.css('ds-themed-type-badge')) + ).toBeTruthy(); }); assertButton(EDIT_BTN, true, true); @@ -143,7 +167,11 @@ describe('DsoEditMetadataValueComponent', () => { assertButton(DRAG_BTN, true, false); }); - function assertButton(name: string, exists: boolean, disabled: boolean = false): void { + function assertButton( + name: string, + exists: boolean, + disabled: boolean = false + ): void { describe(`${name} button`, () => { let btn: DebugElement; diff --git a/src/app/dso-shared/dso-edit-metadata/dso-edit-metadata.component.spec.ts b/src/app/dso-shared/dso-edit-metadata/dso-edit-metadata.component.spec.ts index c8463701a1..b44716bc8d 100644 --- a/src/app/dso-shared/dso-edit-metadata/dso-edit-metadata.component.spec.ts +++ b/src/app/dso-shared/dso-edit-metadata/dso-edit-metadata.component.spec.ts @@ -3,7 +3,7 @@ import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { VarDirective } from '../../shared/utils/var.directive'; import { TranslateModule } from '@ngx-translate/core'; import { RouterTestingModule } from '@angular/router/testing'; -import { DebugElement, Injectable, NO_ERRORS_SCHEMA } from '@angular/core'; +import { ChangeDetectionStrategy, DebugElement, Injectable, NO_ERRORS_SCHEMA } from '@angular/core'; import { DSpaceObject } from '../../core/shared/dspace-object.model'; import { Item } from '../../core/shared/item.model'; import { MetadataValue } from '../../core/shared/metadata.models'; @@ -16,6 +16,13 @@ import { DATA_SERVICE_FACTORY } from '../../core/data/base/data-service.decorato import { Operation } from 'fast-json-patch'; import { RemoteData } from '../../core/data/remote-data'; import { Observable } from 'rxjs/internal/Observable'; +import { DsoEditMetadataValueComponent } from './dso-edit-metadata-value/dso-edit-metadata-value.component'; +import { DsoEditMetadataHeadersComponent } from './dso-edit-metadata-headers/dso-edit-metadata-headers.component'; +import { MetadataFieldSelectorComponent } from './metadata-field-selector/metadata-field-selector.component'; +import { DsoEditMetadataValueHeadersComponent } from './dso-edit-metadata-value-headers/dso-edit-metadata-value-headers.component'; +import { DsoEditMetadataFieldValuesComponent } from './dso-edit-metadata-field-values/dso-edit-metadata-field-values.component'; +import { AlertComponent } from '../../shared/alert/alert.component'; +import { LoadingComponent } from '../../shared/loading/loading.component'; const ADD_BTN = 'add'; const REINSTATE_BTN = 'reinstate'; @@ -68,18 +75,48 @@ describe('DsoEditMetadataComponent', () => { }, }); - notificationsService = jasmine.createSpyObj('notificationsService', ['error', 'success']); + notificationsService = jasmine.createSpyObj('notificationsService', [ + 'error', + 'success', + ]); TestBed.configureTestingModule({ - imports: [TranslateModule.forRoot(), RouterTestingModule.withRoutes([]), DsoEditMetadataComponent, VarDirective], - providers: [ + imports: [ + TranslateModule.forRoot(), + RouterTestingModule.withRoutes([]), + DsoEditMetadataComponent, + VarDirective, + ], + providers: [ TestDataService, - { provide: DATA_SERVICE_FACTORY, useValue: jasmine.createSpy('getDataServiceFor').and.returnValue(TestDataService) }, + { + provide: DATA_SERVICE_FACTORY, + useValue: jasmine + .createSpy('getDataServiceFor') + .and.returnValue(TestDataService), + }, { provide: NotificationsService, useValue: notificationsService }, ArrayMoveChangeAnalyzer, - ], - schemas: [NO_ERRORS_SCHEMA] -}).compileComponents(); + ], + schemas: [NO_ERRORS_SCHEMA], + }) + .overrideComponent(DsoEditMetadataComponent, { + remove: { + imports: [ + DsoEditMetadataValueComponent, + DsoEditMetadataHeadersComponent, + MetadataFieldSelectorComponent, + DsoEditMetadataValueHeadersComponent, + DsoEditMetadataFieldValuesComponent, + AlertComponent, + LoadingComponent, + ], + }, + add: { + changeDetection: ChangeDetectionStrategy.Default, + }, + }) + .compileComponents(); })); beforeEach(() => { diff --git a/src/app/entity-groups/journal-entities/item-grid-elements/journal-volume/journal-volume-grid-element.component.spec.ts b/src/app/entity-groups/journal-entities/item-grid-elements/journal-volume/journal-volume-grid-element.component.spec.ts index c1b1576beb..147a7a258e 100644 --- a/src/app/entity-groups/journal-entities/item-grid-elements/journal-volume/journal-volume-grid-element.component.spec.ts +++ b/src/app/entity-groups/journal-entities/item-grid-elements/journal-volume/journal-volume-grid-element.component.spec.ts @@ -12,6 +12,15 @@ import { ChangeDetectionStrategy, NO_ERRORS_SCHEMA } from '@angular/core'; import { By } from '@angular/platform-browser'; import { DSONameService } from '../../../../core/breadcrumbs/dso-name.service'; import { DSONameServiceMock } from '../../../../shared/mocks/dso-name.service.mock'; +import { BitstreamDataService } from '../../../../core/data/bitstream-data.service'; +import { TranslateModule } from '@ngx-translate/core'; +import { ActivatedRoute } from '@angular/router'; +import { ActivatedRouteStub } from '../../../../shared/testing/active-router.stub'; +import { ThemeService } from '../../../../shared/theme-support/theme.service'; +import { getMockThemeService } from '../../../../shared/mocks/theme-service.mock'; +import { AuthService } from '../../../../core/auth/auth.service'; +import { AuthServiceMock } from '../../../../shared/mocks/auth.service.mock'; +import { AuthorizationDataService } from '../../../../core/data/feature-authorization/authorization-data.service'; const mockItem = Object.assign(new Item(), { bundles: createSuccessfulRemoteDataObject$(buildPaginatedList(new PageInfo(), [])), @@ -43,17 +52,24 @@ describe('JournalVolumeGridElementComponent', () => { const truncatableServiceStub: any = { isCollapsed: (id: number) => observableOf(true), + expand: (id: number) => null, + collapse: (id: number) => null }; beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ - imports: [NoopAnimationsModule, JournalVolumeGridElementComponent, TruncatePipe], - providers: [ + imports: [NoopAnimationsModule, JournalVolumeGridElementComponent, TruncatePipe, TranslateModule.forRoot()], + providers: [ { provide: DSONameService, useValue: new DSONameServiceMock() }, { provide: TruncatableService, useValue: truncatableServiceStub }, - ], - schemas: [NO_ERRORS_SCHEMA] -}).overrideComponent(JournalVolumeGridElementComponent, { + { provide: BitstreamDataService, useValue: {} }, + { provide: ActivatedRoute, useValue: new ActivatedRouteStub() }, + { provide: ThemeService, useValue: getMockThemeService() }, + { provide: AuthService, useValue: new AuthServiceMock() }, + { provide: AuthorizationDataService, useValue: {} } + ], + schemas: [NO_ERRORS_SCHEMA] + }).overrideComponent(JournalVolumeGridElementComponent, { set: { changeDetection: ChangeDetectionStrategy.Default } }).compileComponents(); })); diff --git a/src/app/entity-groups/journal-entities/item-grid-elements/journal/journal-grid-element.component.spec.ts b/src/app/entity-groups/journal-entities/item-grid-elements/journal/journal-grid-element.component.spec.ts index f75f3265da..66c37d9654 100644 --- a/src/app/entity-groups/journal-entities/item-grid-elements/journal/journal-grid-element.component.spec.ts +++ b/src/app/entity-groups/journal-entities/item-grid-elements/journal/journal-grid-element.component.spec.ts @@ -12,6 +12,7 @@ import { ChangeDetectionStrategy, NO_ERRORS_SCHEMA } from '@angular/core'; import { By } from '@angular/platform-browser'; import { DSONameService } from '../../../../core/breadcrumbs/dso-name.service'; import { DSONameServiceMock } from '../../../../shared/mocks/dso-name.service.mock'; +import { JournalSearchResultGridElementComponent } from '../search-result-grid-elements/journal/journal-search-result-grid-element.component'; const mockItem = Object.assign(new Item(), { bundles: createSuccessfulRemoteDataObject$(buildPaginatedList(new PageInfo(), [])), @@ -53,14 +54,17 @@ describe('JournalGridElementComponent', () => { beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ - imports: [NoopAnimationsModule, JournalGridElementComponent, TruncatePipe], - providers: [ + imports: [NoopAnimationsModule, JournalGridElementComponent, TruncatePipe], + providers: [ { provide: DSONameService, useValue: new DSONameServiceMock() }, { provide: TruncatableService, useValue: truncatableServiceStub }, - ], - schemas: [NO_ERRORS_SCHEMA] -}).overrideComponent(JournalGridElementComponent, { - set: { changeDetection: ChangeDetectionStrategy.Default } + ], + schemas: [NO_ERRORS_SCHEMA] + }).overrideComponent(JournalGridElementComponent, { + remove: { + imports: [JournalSearchResultGridElementComponent] + }, + add: { changeDetection: ChangeDetectionStrategy.Default } }).compileComponents(); })); diff --git a/src/app/entity-groups/journal-entities/item-list-elements/journal-issue/journal-issue-list-element.component.spec.ts b/src/app/entity-groups/journal-entities/item-list-elements/journal-issue/journal-issue-list-element.component.spec.ts index 339430a204..0d8c422359 100644 --- a/src/app/entity-groups/journal-entities/item-list-elements/journal-issue/journal-issue-list-element.component.spec.ts +++ b/src/app/entity-groups/journal-entities/item-list-elements/journal-issue/journal-issue-list-element.component.spec.ts @@ -8,6 +8,17 @@ import { TruncatePipe } from '../../../../shared/utils/truncate.pipe'; import { TruncatableService } from '../../../../shared/truncatable/truncatable.service'; import { DSONameService } from '../../../../core/breadcrumbs/dso-name.service'; import { DSONameServiceMock } from '../../../../shared/mocks/dso-name.service.mock'; +import { APP_CONFIG } from '../../../../../config/app-config.interface'; +import { environment } from '../../../../../environments/environment.test'; +import { TranslateModule } from '@ngx-translate/core'; +import { ThemeService } from '../../../../shared/theme-support/theme.service'; +import { getMockThemeService } from '../../../../shared/mocks/theme-service.mock'; +import { mockTruncatableService } from '../../../../shared/mocks/mock-trucatable.service'; +import { ActivatedRoute } from '@angular/router'; +import { ActivatedRouteStub } from '../../../../shared/testing/active-router.stub'; +import { AuthService } from '../../../../core/auth/auth.service'; +import { AuthServiceMock } from '../../../../shared/mocks/auth.service.mock'; +import { AuthorizationDataService } from '../../../../core/data/feature-authorization/authorization-data.service'; const mockItem: Item = Object.assign(new Item(), { bundles: observableOf({}), @@ -37,19 +48,20 @@ describe('JournalIssueListElementComponent', () => { let comp; let fixture; - const truncatableServiceStub: any = { - isCollapsed: (id: number) => observableOf(true), - }; - beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ - imports: [JournalIssueListElementComponent, TruncatePipe], - providers: [ + imports: [JournalIssueListElementComponent, TruncatePipe, TranslateModule.forRoot()], + providers: [ { provide: DSONameService, useValue: new DSONameServiceMock() }, - { provide: TruncatableService, useValue: truncatableServiceStub }, - ], - schemas: [NO_ERRORS_SCHEMA] -}).overrideComponent(JournalIssueListElementComponent, { + { provide: TruncatableService, useValue: mockTruncatableService }, + { provide: APP_CONFIG, useValue: environment }, + { provide: ThemeService, useValue: getMockThemeService() }, + { provide: ActivatedRoute, useValue: new ActivatedRouteStub() }, + { provide: AuthService, useValue: new AuthServiceMock() }, + { provide: AuthorizationDataService, useValue: {} }, + ], + schemas: [NO_ERRORS_SCHEMA] + }).overrideComponent(JournalIssueListElementComponent, { set: { changeDetection: ChangeDetectionStrategy.Default } }).compileComponents(); })); diff --git a/src/app/entity-groups/journal-entities/item-list-elements/journal/journal-list-element.component.spec.ts b/src/app/entity-groups/journal-entities/item-list-elements/journal/journal-list-element.component.spec.ts index 87ebb34563..fcb18097ef 100644 --- a/src/app/entity-groups/journal-entities/item-list-elements/journal/journal-list-element.component.spec.ts +++ b/src/app/entity-groups/journal-entities/item-list-elements/journal/journal-list-element.component.spec.ts @@ -8,6 +8,16 @@ import { TruncatePipe } from '../../../../shared/utils/truncate.pipe'; import { TruncatableService } from '../../../../shared/truncatable/truncatable.service'; import { DSONameService } from '../../../../core/breadcrumbs/dso-name.service'; import { DSONameServiceMock } from '../../../../shared/mocks/dso-name.service.mock'; +import { APP_CONFIG } from 'src/config/app-config.interface'; +import { environment } from 'src/environments/environment.test'; +import { TranslateModule } from '@ngx-translate/core'; +import { ThemeService } from '../../../../shared/theme-support/theme.service'; +import { getMockThemeService } from '../../../../shared/mocks/theme-service.mock'; +import { ActivatedRoute } from '@angular/router'; +import { ActivatedRouteStub } from '../../../../shared/testing/active-router.stub'; +import { AuthService } from '../../../../core/auth/auth.service'; +import { AuthServiceMock } from '../../../../shared/mocks/auth.service.mock'; +import { AuthorizationDataService } from '../../../../core/data/feature-authorization/authorization-data.service'; const mockItem: Item = Object.assign(new Item(), { bundles: observableOf({}), @@ -33,14 +43,21 @@ describe('JournalListElementComponent', () => { const truncatableServiceStub: any = { isCollapsed: (id: number) => observableOf(true), + collapse: (id: number) => null, + expand: (id: number) => null }; beforeEach(waitForAsync(() => { return TestBed.configureTestingModule({ - imports: [JournalListElementComponent, TruncatePipe], + imports: [JournalListElementComponent, TruncatePipe, TranslateModule.forRoot()], providers: [ { provide: DSONameService, useValue: new DSONameServiceMock() }, { provide: TruncatableService, useValue: truncatableServiceStub }, + { provide: APP_CONFIG, useValue: environment }, + { provide: ThemeService, useValue: getMockThemeService() }, + { provide: ActivatedRoute, useValue: new ActivatedRouteStub() }, + { provide: AuthService, useValue: new AuthServiceMock() }, + { provide: AuthorizationDataService, useValue: {} }, ], schemas: [NO_ERRORS_SCHEMA] }).overrideComponent(JournalListElementComponent, { diff --git a/src/app/entity-groups/journal-entities/item-list-elements/search-result-list-elements/journal-issue/journal-issue-search-result-list-element.component.spec.ts b/src/app/entity-groups/journal-entities/item-list-elements/search-result-list-elements/journal-issue/journal-issue-search-result-list-element.component.spec.ts index 6499d47d26..eac27a8fd8 100644 --- a/src/app/entity-groups/journal-entities/item-list-elements/search-result-list-elements/journal-issue/journal-issue-search-result-list-element.component.spec.ts +++ b/src/app/entity-groups/journal-entities/item-list-elements/search-result-list-elements/journal-issue/journal-issue-search-result-list-element.component.spec.ts @@ -183,12 +183,13 @@ describe('JournalIssueSearchResultListElementComponent', () => { beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ - imports: [JournalIssueSearchResultListElementComponent, TruncatePipe], + imports: [JournalIssueSearchResultListElementComponent, TruncatePipe, TranslateModule.forRoot(),], providers: [ { provide: TruncatableService, useValue: mockTruncatableService }, { provide: DSONameService, useClass: DSONameServiceMock }, { provide: APP_CONFIG, useValue: enviromentNoThumbs }, - { provide: ThemeService, useValue: getMockThemeService() } + { provide: ThemeService, useValue: getMockThemeService() }, + { provide: ActivatedRoute, useValue: new ActivatedRouteStub() }, ], schemas: [NO_ERRORS_SCHEMA] }).overrideComponent(JournalIssueSearchResultListElementComponent, { diff --git a/src/app/entity-groups/journal-entities/item-list-elements/search-result-list-elements/journal/journal-search-result-list-element.component.spec.ts b/src/app/entity-groups/journal-entities/item-list-elements/search-result-list-elements/journal/journal-search-result-list-element.component.spec.ts index 3af94528a0..1840357b12 100644 --- a/src/app/entity-groups/journal-entities/item-list-elements/search-result-list-elements/journal/journal-search-result-list-element.component.spec.ts +++ b/src/app/entity-groups/journal-entities/item-list-elements/search-result-list-elements/journal/journal-search-result-list-element.component.spec.ts @@ -21,6 +21,7 @@ import { } from '../../../../../shared/truncatable/truncatable-part/truncatable-part.component'; import { ActivatedRoute } from '@angular/router'; import { ActivatedRouteStub } from '../../../../../shared/testing/active-router.stub'; +import { TranslateModule } from '@ngx-translate/core'; let journalListElementComponent: JournalSearchResultListElementComponent; let fixture: ComponentFixture; @@ -79,13 +80,13 @@ const enviromentNoThumbs = { describe('JournalSearchResultListElementComponent', () => { beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ - imports: [JournalSearchResultListElementComponent, TruncatePipe], + imports: [JournalSearchResultListElementComponent, TruncatePipe, TranslateModule.forRoot(),], providers: [ { provide: TruncatableService, useValue: mockTruncatableService }, { provide: DSONameService, useClass: DSONameServiceMock }, { provide: APP_CONFIG, useValue: environmentUseThumbs }, { provide: ThemeService, useValue: getMockThemeService() }, - { provide: ActivatedRoute, useValue: new ActivatedRouteStub() } + { provide: ActivatedRoute, useValue: new ActivatedRouteStub() }, ], schemas: [NO_ERRORS_SCHEMA] }).overrideComponent(JournalSearchResultListElementComponent, { @@ -149,12 +150,13 @@ describe('JournalSearchResultListElementComponent', () => { beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ - imports: [JournalSearchResultListElementComponent, TruncatePipe], + imports: [JournalSearchResultListElementComponent, TruncatePipe, TranslateModule.forRoot()], providers: [ { provide: TruncatableService, useValue: mockTruncatableService }, { provide: DSONameService, useClass: DSONameServiceMock }, { provide: APP_CONFIG, useValue: enviromentNoThumbs }, - { provide: ThemeService, useValue: getMockThemeService() } + { provide: ThemeService, useValue: getMockThemeService() }, + { provide: ActivatedRoute, useValue: new ActivatedRouteStub() }, ], schemas: [NO_ERRORS_SCHEMA] }).overrideComponent(JournalSearchResultListElementComponent, { diff --git a/src/app/entity-groups/research-entities/item-grid-elements/org-unit/org-unit-grid-element.component.spec.ts b/src/app/entity-groups/research-entities/item-grid-elements/org-unit/org-unit-grid-element.component.spec.ts index ad6b047dbe..68a78944cb 100644 --- a/src/app/entity-groups/research-entities/item-grid-elements/org-unit/org-unit-grid-element.component.spec.ts +++ b/src/app/entity-groups/research-entities/item-grid-elements/org-unit/org-unit-grid-element.component.spec.ts @@ -1,5 +1,4 @@ import { Item } from '../../../../core/shared/item.model'; -import { of as observableOf } from 'rxjs'; import { OrgUnitGridElementComponent } from './org-unit-grid-element.component'; import { createSuccessfulRemoteDataObject$ } from '../../../../shared/remote-data.utils'; import { buildPaginatedList } from '../../../../core/data/paginated-list.model'; @@ -12,6 +11,16 @@ import { ChangeDetectionStrategy, NO_ERRORS_SCHEMA } from '@angular/core'; import { By } from '@angular/platform-browser'; import { DSONameService } from '../../../../core/breadcrumbs/dso-name.service'; import { DSONameServiceMock } from '../../../../shared/mocks/dso-name.service.mock'; +import { BitstreamDataService } from '../../../../core/data/bitstream-data.service'; +import { TranslateModule } from '@ngx-translate/core'; +import { mockTruncatableService } from '../../../../shared/mocks/mock-trucatable.service'; +import { ActivatedRoute } from '@angular/router'; +import { ActivatedRouteStub } from '../../../../shared/testing/active-router.stub'; +import { ThemeService } from '../../../../shared/theme-support/theme.service'; +import { getMockThemeService } from '../../../../shared/mocks/theme-service.mock'; +import { AuthService } from '../../../../core/auth/auth.service'; +import { AuthServiceMock } from '../../../../shared/mocks/auth.service.mock'; +import { AuthorizationDataService } from '../../../../core/data/feature-authorization/authorization-data.service'; const mockItem = Object.assign(new Item(), { bundles: createSuccessfulRemoteDataObject$(buildPaginatedList(new PageInfo(), [])), @@ -47,19 +56,25 @@ describe('OrgUnitGridElementComponent', () => { let comp; let fixture; - const truncatableServiceStub: any = { - isCollapsed: (id: number) => observableOf(true), - }; - beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ - imports: [NoopAnimationsModule, OrgUnitGridElementComponent, TruncatePipe], - providers: [ + imports: [ + NoopAnimationsModule, + OrgUnitGridElementComponent, + TruncatePipe, + TranslateModule.forRoot() + ], + providers: [ { provide: DSONameService, useValue: new DSONameServiceMock() }, - { provide: TruncatableService, useValue: truncatableServiceStub }, - ], - schemas: [NO_ERRORS_SCHEMA] -}).overrideComponent(OrgUnitGridElementComponent, { + { provide: TruncatableService, useValue: mockTruncatableService }, + { provide: BitstreamDataService, useValue: {} }, + { provide: ActivatedRoute, useValue: new ActivatedRouteStub() }, + { provide: ThemeService, useValue: getMockThemeService() }, + { provide: AuthService, useValue: new AuthServiceMock() }, + { provide: AuthorizationDataService, useValue: {} }, + ], + schemas: [NO_ERRORS_SCHEMA] + }).overrideComponent(OrgUnitGridElementComponent, { set: { changeDetection: ChangeDetectionStrategy.Default } }).compileComponents(); })); diff --git a/src/app/entity-groups/research-entities/item-grid-elements/person/person-grid-element.component.spec.ts b/src/app/entity-groups/research-entities/item-grid-elements/person/person-grid-element.component.spec.ts index 5f55cef6f9..dbc1280a12 100644 --- a/src/app/entity-groups/research-entities/item-grid-elements/person/person-grid-element.component.spec.ts +++ b/src/app/entity-groups/research-entities/item-grid-elements/person/person-grid-element.component.spec.ts @@ -12,6 +12,7 @@ import { ChangeDetectionStrategy, NO_ERRORS_SCHEMA } from '@angular/core'; import { By } from '@angular/platform-browser'; import { DSONameService } from '../../../../core/breadcrumbs/dso-name.service'; import { DSONameServiceMock } from '../../../../shared/mocks/dso-name.service.mock'; +import { PersonSearchResultGridElementComponent } from '../search-result-grid-elements/person/person-search-result-grid-element.component'; const mockItem = Object.assign(new Item(), { bundles: createSuccessfulRemoteDataObject$(buildPaginatedList(new PageInfo(), [])), @@ -47,14 +48,17 @@ describe('PersonGridElementComponent', () => { beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ - imports: [NoopAnimationsModule, PersonGridElementComponent, TruncatePipe], - providers: [ + imports: [NoopAnimationsModule, PersonGridElementComponent, TruncatePipe], + providers: [ { provide: DSONameService, useValue: new DSONameServiceMock() }, { provide: TruncatableService, useValue: truncatableServiceStub }, - ], - schemas: [NO_ERRORS_SCHEMA] -}).overrideComponent(PersonGridElementComponent, { - set: { changeDetection: ChangeDetectionStrategy.Default } + ], + schemas: [NO_ERRORS_SCHEMA] + }).overrideComponent(PersonGridElementComponent, { + remove: { + imports: [PersonSearchResultGridElementComponent] + }, + add: { changeDetection: ChangeDetectionStrategy.Default } }).compileComponents(); })); diff --git a/src/app/entity-groups/research-entities/item-grid-elements/project/project-grid-element.component.spec.ts b/src/app/entity-groups/research-entities/item-grid-elements/project/project-grid-element.component.spec.ts index 7909f3d6ae..481986f1c9 100644 --- a/src/app/entity-groups/research-entities/item-grid-elements/project/project-grid-element.component.spec.ts +++ b/src/app/entity-groups/research-entities/item-grid-elements/project/project-grid-element.component.spec.ts @@ -1,5 +1,4 @@ import { Item } from '../../../../core/shared/item.model'; -import { of as observableOf } from 'rxjs'; import { ProjectGridElementComponent } from './project-grid-element.component'; import { createSuccessfulRemoteDataObject$ } from '../../../../shared/remote-data.utils'; import { buildPaginatedList } from '../../../../core/data/paginated-list.model'; @@ -12,6 +11,16 @@ import { ChangeDetectionStrategy, NO_ERRORS_SCHEMA } from '@angular/core'; import { By } from '@angular/platform-browser'; import { DSONameService } from '../../../../core/breadcrumbs/dso-name.service'; import { DSONameServiceMock } from '../../../../shared/mocks/dso-name.service.mock'; +import { BitstreamDataService } from '../../../../core/data/bitstream-data.service'; +import { TranslateModule } from '@ngx-translate/core'; +import { mockTruncatableService } from '../../../../shared/mocks/mock-trucatable.service'; +import { ActivatedRoute } from '@angular/router'; +import { ActivatedRouteStub } from '../../../../shared/testing/active-router.stub'; +import { ThemeService } from '../../../../shared/theme-support/theme.service'; +import { getMockThemeService } from '../../../../shared/mocks/theme-service.mock'; +import { AuthService } from '../../../../core/auth/auth.service'; +import { AuthServiceMock } from '../../../../shared/mocks/auth.service.mock'; +import { AuthorizationDataService } from '../../../../core/data/feature-authorization/authorization-data.service'; const mockItem = Object.assign(new Item(), { bundles: createSuccessfulRemoteDataObject$(buildPaginatedList(new PageInfo(), [])), @@ -35,16 +44,17 @@ describe('ProjectGridElementComponent', () => { let comp; let fixture; - const truncatableServiceStub: any = { - isCollapsed: (id: number) => observableOf(true), - }; - beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ - imports: [NoopAnimationsModule, ProjectGridElementComponent, TruncatePipe], + imports: [NoopAnimationsModule, ProjectGridElementComponent, TruncatePipe, TranslateModule.forRoot()], providers: [ { provide: DSONameService, useValue: new DSONameServiceMock() }, - { provide: TruncatableService, useValue: truncatableServiceStub }, + { provide: TruncatableService, useValue: mockTruncatableService }, + { provide: BitstreamDataService, useValue: {} }, + { provide: ActivatedRoute, useValue: new ActivatedRouteStub() }, + { provide: ThemeService, useValue: getMockThemeService() }, + { provide: AuthService, useValue: new AuthServiceMock() }, + { provide: AuthorizationDataService, useValue: {} }, ], schemas: [NO_ERRORS_SCHEMA] }).overrideComponent(ProjectGridElementComponent, { diff --git a/src/app/entity-groups/research-entities/item-list-elements/org-unit/org-unit-list-element.component.spec.ts b/src/app/entity-groups/research-entities/item-list-elements/org-unit/org-unit-list-element.component.spec.ts index 6d04ebb07b..d05b739ae2 100644 --- a/src/app/entity-groups/research-entities/item-list-elements/org-unit/org-unit-list-element.component.spec.ts +++ b/src/app/entity-groups/research-entities/item-list-elements/org-unit/org-unit-list-element.component.spec.ts @@ -8,6 +8,17 @@ import { TruncatePipe } from '../../../../shared/utils/truncate.pipe'; import { TruncatableService } from '../../../../shared/truncatable/truncatable.service'; import { DSONameService } from '../../../../core/breadcrumbs/dso-name.service'; import { DSONameServiceMock } from '../../../../shared/mocks/dso-name.service.mock'; +import { APP_CONFIG } from '../../../../../config/app-config.interface'; +import { environment } from '../../../../../environments/environment.test'; +import { ThemeService } from '../../../../shared/theme-support/theme.service'; +import { getMockThemeService } from '../../../../shared/mocks/theme-service.mock'; +import { mockTruncatableService } from '../../../../shared/mocks/mock-trucatable.service'; +import { ActivatedRoute } from '@angular/router'; +import { ActivatedRouteStub } from '../../../../shared/testing/active-router.stub'; +import { TranslateModule } from '@ngx-translate/core'; +import { AuthService } from '../../../../core/auth/auth.service'; +import { AuthServiceMock } from '../../../../shared/mocks/auth.service.mock'; +import { AuthorizationDataService } from '../../../../core/data/feature-authorization/authorization-data.service'; const mockItem: Item = Object.assign(new Item(), { bundles: observableOf({}), @@ -31,16 +42,18 @@ describe('OrgUnitListElementComponent', () => { let comp; let fixture; - const truncatableServiceStub: any = { - isCollapsed: (id: number) => observableOf(true), - }; beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ - imports: [OrgUnitListElementComponent, TruncatePipe], + imports: [OrgUnitListElementComponent, TruncatePipe, TranslateModule.forRoot()], providers: [ { provide: DSONameService, useValue: new DSONameServiceMock() }, - { provide: TruncatableService, useValue: truncatableServiceStub }, + { provide: TruncatableService, useValue: mockTruncatableService }, + { provide: APP_CONFIG, useValue: environment }, + { provide: ThemeService, useValue: getMockThemeService() }, + { provide: ActivatedRoute, useValue: new ActivatedRouteStub() }, + { provide: AuthService, useValue: new AuthServiceMock() }, + { provide: AuthorizationDataService, useValue: {} }, ], schemas: [NO_ERRORS_SCHEMA] }).overrideComponent(OrgUnitListElementComponent, { diff --git a/src/app/entity-groups/research-entities/item-list-elements/person/person-list-element.component.spec.ts b/src/app/entity-groups/research-entities/item-list-elements/person/person-list-element.component.spec.ts index 9c06c68c2a..458be8d5df 100644 --- a/src/app/entity-groups/research-entities/item-list-elements/person/person-list-element.component.spec.ts +++ b/src/app/entity-groups/research-entities/item-list-elements/person/person-list-element.component.spec.ts @@ -8,6 +8,17 @@ import { TruncatePipe } from '../../../../shared/utils/truncate.pipe'; import { TruncatableService } from '../../../../shared/truncatable/truncatable.service'; import { DSONameService } from '../../../../core/breadcrumbs/dso-name.service'; import { DSONameServiceMock } from '../../../../shared/mocks/dso-name.service.mock'; +import { APP_CONFIG } from 'src/config/app-config.interface'; +import { environment } from 'src/environments/environment.test'; +import { TranslateModule } from '@ngx-translate/core'; +import { ThemeService } from '../../../../shared/theme-support/theme.service'; +import { getMockThemeService } from '../../../../shared/mocks/theme-service.mock'; +import { mockTruncatableService } from '../../../../shared/mocks/mock-trucatable.service'; +import { ActivatedRoute } from '@angular/router'; +import { ActivatedRouteStub } from '../../../../shared/testing/active-router.stub'; +import { AuthService } from '../../../../core/auth/auth.service'; +import { AuthServiceMock } from '../../../../shared/mocks/auth.service.mock'; +import { AuthorizationDataService } from '../../../../core/data/feature-authorization/authorization-data.service'; const mockItem: Item = Object.assign(new Item(), { bundles: observableOf({}), @@ -31,16 +42,17 @@ describe('PersonListElementComponent', () => { let comp; let fixture; - const truncatableServiceStub: any = { - isCollapsed: (id: number) => observableOf(true), - }; - beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ - imports: [PersonListElementComponent, TruncatePipe], + imports: [PersonListElementComponent, TruncatePipe, TranslateModule.forRoot()], providers: [ { provide: DSONameService, useValue: new DSONameServiceMock() }, - { provide: TruncatableService, useValue: truncatableServiceStub }, + { provide: TruncatableService, useValue: mockTruncatableService }, + { provide: APP_CONFIG, useValue: environment }, + { provide: ThemeService, useValue: getMockThemeService() }, + { provide: ActivatedRoute, useValue: new ActivatedRouteStub() }, + { provide: AuthService, useValue: new AuthServiceMock() }, + { provide: AuthorizationDataService, useValue: {} }, ], schemas: [NO_ERRORS_SCHEMA] }).overrideComponent(PersonListElementComponent, { diff --git a/src/app/entity-groups/research-entities/item-list-elements/project/project-list-element.component.spec.ts b/src/app/entity-groups/research-entities/item-list-elements/project/project-list-element.component.spec.ts index 7fea008e08..707d791fa8 100644 --- a/src/app/entity-groups/research-entities/item-list-elements/project/project-list-element.component.spec.ts +++ b/src/app/entity-groups/research-entities/item-list-elements/project/project-list-element.component.spec.ts @@ -8,6 +8,17 @@ import { TruncatableService } from '../../../../shared/truncatable/truncatable.s import { ProjectListElementComponent } from './project-list-element.component'; import { DSONameService } from '../../../../core/breadcrumbs/dso-name.service'; import { DSONameServiceMock } from '../../../../shared/mocks/dso-name.service.mock'; +import { APP_CONFIG } from '../../../../../config/app-config.interface'; +import { environment } from '../../../../../environments/environment.test'; +import { mockTruncatableService } from '../../../../shared/mocks/mock-trucatable.service'; +import { ThemeService } from '../../../../shared/theme-support/theme.service'; +import { AuthService } from '../../../../core/auth/auth.service'; +import { AuthorizationDataService } from '../../../../core/data/feature-authorization/authorization-data.service'; +import { AuthServiceMock } from '../../../../shared/mocks/auth.service.mock'; +import { getMockThemeService } from '../../../../shared/mocks/theme-service.mock'; +import { ActivatedRoute } from '@angular/router'; +import { ActivatedRouteStub } from '../../../../shared/testing/active-router.stub'; +import { TranslateModule } from '@ngx-translate/core'; const mockItem: Item = Object.assign(new Item(), { bundles: observableOf({}), @@ -18,12 +29,6 @@ const mockItem: Item = Object.assign(new Item(), { value: 'This is just another title' } ], - // 'project.identifier.status': [ - // { - // language: 'en_US', - // value: 'A status about the project' - // } - // ] } }); @@ -31,19 +36,20 @@ describe('ProjectListElementComponent', () => { let comp; let fixture; - const truncatableServiceStub: any = { - isCollapsed: (id: number) => observableOf(true), - }; - beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ - imports: [ProjectListElementComponent, TruncatePipe], - providers: [ + imports: [ProjectListElementComponent, TruncatePipe, TranslateModule.forRoot()], + providers: [ { provide: DSONameService, useValue: new DSONameServiceMock() }, - { provide: TruncatableService, useValue: truncatableServiceStub }, - ], - schemas: [NO_ERRORS_SCHEMA] -}).overrideComponent(ProjectListElementComponent, { + { provide: TruncatableService, useValue: mockTruncatableService }, + { provide: APP_CONFIG, useValue: environment }, + { provide: ThemeService, useValue: getMockThemeService() }, + { provide: ActivatedRoute, useValue: new ActivatedRouteStub() }, + { provide: AuthService, useValue: new AuthServiceMock() }, + { provide: AuthorizationDataService, useValue: {} }, + ], + schemas: [NO_ERRORS_SCHEMA] + }).overrideComponent(ProjectListElementComponent, { set: { changeDetection: ChangeDetectionStrategy.Default } }).compileComponents(); })); diff --git a/src/app/entity-groups/research-entities/item-list-elements/search-result-list-elements/org-unit/org-unit-search-result-list-element.component.spec.ts b/src/app/entity-groups/research-entities/item-list-elements/search-result-list-elements/org-unit/org-unit-search-result-list-element.component.spec.ts index e115d3f684..2c5d08cc5e 100644 --- a/src/app/entity-groups/research-entities/item-list-elements/search-result-list-elements/org-unit/org-unit-search-result-list-element.component.spec.ts +++ b/src/app/entity-groups/research-entities/item-list-elements/search-result-list-elements/org-unit/org-unit-search-result-list-element.component.spec.ts @@ -23,6 +23,9 @@ import { } from '../../../../../shared/truncatable/truncatable-part/truncatable-part.component'; import { ActivatedRouteStub } from '../../../../../shared/testing/active-router.stub'; import { ActivatedRoute } from '@angular/router'; +import { AuthService } from '../../../../../core/auth/auth.service'; +import { AuthServiceMock } from '../../../../../shared/mocks/auth.service.mock'; +import { AuthorizationDataService } from '../../../../../core/data/feature-authorization/authorization-data.service'; let orgUnitListElementComponent: OrgUnitSearchResultListElementComponent; let fixture: ComponentFixture; @@ -87,6 +90,9 @@ describe('OrgUnitSearchResultListElementComponent', () => { }), OrgUnitSearchResultListElementComponent, TruncatePipe], providers: [ { provide: TruncatableService, useValue: mockTruncatableService }, + { provide: ActivatedRoute, useValue: new ActivatedRouteStub() }, + { provide: AuthService, useValue: new AuthServiceMock() }, + { provide: AuthorizationDataService, useValue: {} }, { provide: DSONameService, useClass: DSONameServiceMock }, { provide: APP_CONFIG, useValue: environmentUseThumbs }, { provide: ThemeService, useValue: getMockThemeService() } diff --git a/src/app/entity-groups/research-entities/item-list-elements/search-result-list-elements/person/person-search-result-list-element.component.spec.ts b/src/app/entity-groups/research-entities/item-list-elements/search-result-list-elements/person/person-search-result-list-element.component.spec.ts index bba0d36670..36b6dd7bf3 100644 --- a/src/app/entity-groups/research-entities/item-list-elements/search-result-list-elements/person/person-search-result-list-element.component.spec.ts +++ b/src/app/entity-groups/research-entities/item-list-elements/search-result-list-elements/person/person-search-result-list-element.component.spec.ts @@ -14,6 +14,12 @@ import { TranslateLoader, TranslateModule } from '@ngx-translate/core'; import { TranslateLoaderMock } from '../../../../../shared/mocks/translate-loader.mock'; import { ThemeService } from '../../../../../shared/theme-support/theme.service'; import { getMockThemeService } from '../../../../../shared/mocks/theme-service.mock'; +import { mockTruncatableService } from '../../../../../shared/mocks/mock-trucatable.service'; +import { ActivatedRoute } from '@angular/router'; +import { ActivatedRouteStub } from '../../../../../shared/testing/active-router.stub'; +import { AuthService } from '../../../../../core/auth/auth.service'; +import { AuthServiceMock } from '../../../../../shared/mocks/auth.service.mock'; +import { AuthorizationDataService } from '../../../../../core/data/feature-authorization/authorization-data.service'; let personListElementComponent: PersonSearchResultListElementComponent; let fixture: ComponentFixture; @@ -70,20 +76,23 @@ const enviromentNoThumbs = { describe('PersonSearchResultListElementComponent', () => { beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ - imports: [TranslateModule.forRoot({ - loader: { - provide: TranslateLoader, - useClass: TranslateLoaderMock - } - }), PersonSearchResultListElementComponent, TruncatePipe], - providers: [ - { provide: TruncatableService, useValue: {} }, + imports: [TranslateModule.forRoot({ + loader: { + provide: TranslateLoader, + useClass: TranslateLoaderMock + } + }), PersonSearchResultListElementComponent, TruncatePipe], + providers: [ + { provide: TruncatableService, useValue: mockTruncatableService }, { provide: DSONameService, useClass: DSONameServiceMock }, { provide: APP_CONFIG, useValue: environmentUseThumbs }, - { provide: ThemeService, useValue: getMockThemeService() } - ], - schemas: [NO_ERRORS_SCHEMA] -}).overrideComponent(PersonSearchResultListElementComponent, { + { provide: ThemeService, useValue: getMockThemeService() }, + { provide: ActivatedRoute, useValue: new ActivatedRouteStub() }, + { provide: AuthService, useValue: new AuthServiceMock() }, + { provide: AuthorizationDataService, useValue: {} }, + ], + schemas: [NO_ERRORS_SCHEMA] + }).overrideComponent(PersonSearchResultListElementComponent, { set: { changeDetection: ChangeDetectionStrategy.Default } }).compileComponents(); })); @@ -138,21 +147,24 @@ describe('PersonSearchResultListElementComponent', () => { beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ - imports: [TranslateModule.forRoot({ - loader: { - provide: TranslateLoader, - useClass: TranslateLoaderMock - } - }), PersonSearchResultListElementComponent, TruncatePipe], - providers: [ - { provide: TruncatableService, useValue: {} }, + imports: [TranslateModule.forRoot({ + loader: { + provide: TranslateLoader, + useClass: TranslateLoaderMock + } + }), PersonSearchResultListElementComponent, TruncatePipe], + providers: [ + { provide: TruncatableService, useValue: mockTruncatableService }, { provide: DSONameService, useClass: DSONameServiceMock }, { provide: APP_CONFIG, useValue: enviromentNoThumbs }, - { provide: ThemeService, useValue: getMockThemeService() } - ], - schemas: [NO_ERRORS_SCHEMA] -}).overrideComponent(PersonSearchResultListElementComponent, { - set: {changeDetection: ChangeDetectionStrategy.Default} + { provide: ThemeService, useValue: getMockThemeService() }, + { provide: ActivatedRoute, useValue: new ActivatedRouteStub() }, + { provide: AuthService, useValue: new AuthServiceMock() }, + { provide: AuthorizationDataService, useValue: {} }, + ], + schemas: [NO_ERRORS_SCHEMA] + }).overrideComponent(PersonSearchResultListElementComponent, { + set: { changeDetection: ChangeDetectionStrategy.Default } }).compileComponents(); })); diff --git a/src/app/entity-groups/research-entities/item-list-elements/search-result-list-elements/project/project-search-result-list-element.component.spec.ts b/src/app/entity-groups/research-entities/item-list-elements/search-result-list-elements/project/project-search-result-list-element.component.spec.ts index b3e19f6e37..97f809eaf1 100644 --- a/src/app/entity-groups/research-entities/item-list-elements/search-result-list-elements/project/project-search-result-list-element.component.spec.ts +++ b/src/app/entity-groups/research-entities/item-list-elements/search-result-list-elements/project/project-search-result-list-element.component.spec.ts @@ -77,11 +77,11 @@ describe('ProjectSearchResultListElementComponent', () => { TestBed.configureTestingModule({ imports: [ProjectSearchResultListElementComponent, TruncatePipe], providers: [ + { provide: ActivatedRoute, useValue: new ActivatedRouteStub() }, { provide: TruncatableService, useValue: mockTruncatableService }, { provide: DSONameService, useClass: DSONameServiceMock }, { provide: APP_CONFIG, useValue: environmentUseThumbs }, { provide: ThemeService, useValue: getMockThemeService() }, - { provide: ActivatedRoute, useValue: new ActivatedRouteStub() } ], schemas: [NO_ERRORS_SCHEMA] }).overrideComponent(ProjectSearchResultListElementComponent, { @@ -149,7 +149,8 @@ describe('ProjectSearchResultListElementComponent', () => { { provide: TruncatableService, useValue: mockTruncatableService }, { provide: DSONameService, useClass: DSONameServiceMock }, { provide: APP_CONFIG, useValue: enviromentNoThumbs }, - { provide: ThemeService, useValue: getMockThemeService() } + { provide: ThemeService, useValue: getMockThemeService() }, + { provide: ActivatedRoute, useValue: new ActivatedRouteStub() }, ], schemas: [NO_ERRORS_SCHEMA] }).overrideComponent(ProjectSearchResultListElementComponent, { diff --git a/src/app/entity-groups/research-entities/metadata-representations/org-unit/org-unit-item-metadata-list-element.component.spec.ts b/src/app/entity-groups/research-entities/metadata-representations/org-unit/org-unit-item-metadata-list-element.component.spec.ts index ad530fdb05..68e9ce3f7a 100644 --- a/src/app/entity-groups/research-entities/metadata-representations/org-unit/org-unit-item-metadata-list-element.component.spec.ts +++ b/src/app/entity-groups/research-entities/metadata-representations/org-unit/org-unit-item-metadata-list-element.component.spec.ts @@ -8,6 +8,8 @@ import { ItemMetadataRepresentation } from '../../../../core/shared/metadata-rep import { OrgUnitItemMetadataListElementComponent } from './org-unit-item-metadata-list-element.component'; import { Item } from '../../../../core/shared/item.model'; import { MetadataValue } from '../../../../core/shared/metadata.models'; +import { TruncatableComponent } from '../../../../shared/truncatable/truncatable.component'; +import { RouterLink } from '@angular/router'; const description = 'Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua.'; const organisation = 'Anonymous'; @@ -21,13 +23,16 @@ describe('OrgUnitItemMetadataListElementComponent', () => { beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ - imports: [ + imports: [ NgbModule, OrgUnitItemMetadataListElementComponent - ], - schemas: [NO_ERRORS_SCHEMA] -}).overrideComponent(OrgUnitItemMetadataListElementComponent, { - set: { changeDetection: ChangeDetectionStrategy.Default } + ], + schemas: [NO_ERRORS_SCHEMA] + }).overrideComponent(OrgUnitItemMetadataListElementComponent, { + remove: { + imports: [TruncatableComponent, RouterLink] + }, + add: { changeDetection: ChangeDetectionStrategy.Default } }).compileComponents(); })); diff --git a/src/app/entity-groups/research-entities/metadata-representations/person/person-item-metadata-list-element.component.spec.ts b/src/app/entity-groups/research-entities/metadata-representations/person/person-item-metadata-list-element.component.spec.ts index 340cb77d62..935a03ee25 100644 --- a/src/app/entity-groups/research-entities/metadata-representations/person/person-item-metadata-list-element.component.spec.ts +++ b/src/app/entity-groups/research-entities/metadata-representations/person/person-item-metadata-list-element.component.spec.ts @@ -8,6 +8,8 @@ import { ItemMetadataRepresentation } from '../../../../core/shared/metadata-rep import { Item } from '../../../../core/shared/item.model'; import { PersonItemMetadataListElementComponent } from './person-item-metadata-list-element.component'; import { MetadataValue } from '../../../../core/shared/metadata.models'; +import { TruncatableComponent } from '../../../../shared/truncatable/truncatable.component'; +import { RouterLink } from '@angular/router'; const jobTitle = 'Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua.'; const firstName = 'Joe'; @@ -23,13 +25,16 @@ describe('PersonItemMetadataListElementComponent', () => { beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ - imports: [ + imports: [ NgbModule, PersonItemMetadataListElementComponent - ], - schemas: [NO_ERRORS_SCHEMA] -}).overrideComponent(PersonItemMetadataListElementComponent, { - set: { changeDetection: ChangeDetectionStrategy.Default } + ], + schemas: [NO_ERRORS_SCHEMA] + }).overrideComponent(PersonItemMetadataListElementComponent, { + remove: { + imports: [TruncatableComponent, RouterLink] + }, + add: { changeDetection: ChangeDetectionStrategy.Default } }).compileComponents(); })); diff --git a/src/app/entity-groups/research-entities/metadata-representations/project/project-item-metadata-list-element.component.spec.ts b/src/app/entity-groups/research-entities/metadata-representations/project/project-item-metadata-list-element.component.spec.ts index edbc9d4fe5..195a0a682c 100644 --- a/src/app/entity-groups/research-entities/metadata-representations/project/project-item-metadata-list-element.component.spec.ts +++ b/src/app/entity-groups/research-entities/metadata-representations/project/project-item-metadata-list-element.component.spec.ts @@ -10,6 +10,8 @@ import { ProjectItemMetadataListElementComponent } from './project-item-metadata import { MetadataValue } from '../../../../core/shared/metadata.models'; import { DSONameService } from '../../../../core/breadcrumbs/dso-name.service'; import { DSONameServiceMock } from '../../../../shared/mocks/dso-name.service.mock'; +import { TruncatableComponent } from '../../../../shared/truncatable/truncatable.component'; +import { RouterLink } from '@angular/router'; const projectTitle = 'Lorem ipsum dolor sit amet'; const mockItem = Object.assign(new Item(), { metadata: { 'dc.title': [{ value: projectTitle }] } }); @@ -23,16 +25,19 @@ describe('ProjectItemMetadataListElementComponent', () => { beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ - imports: [ + imports: [ NgbModule, ProjectItemMetadataListElementComponent - ], - providers: [ + ], + providers: [ { provide: DSONameService, useValue: new DSONameServiceMock() } - ], - schemas: [NO_ERRORS_SCHEMA] -}).overrideComponent(ProjectItemMetadataListElementComponent, { - set: { changeDetection: ChangeDetectionStrategy.Default } + ], + schemas: [NO_ERRORS_SCHEMA] + }).overrideComponent(ProjectItemMetadataListElementComponent, { + remove: { + imports: [TruncatableComponent, RouterLink,] + }, + add: { changeDetection: ChangeDetectionStrategy.Default } }).compileComponents(); })); diff --git a/src/app/entity-groups/research-entities/submission/item-list-elements/person/person-search-result-list-submission-element.component.spec.ts b/src/app/entity-groups/research-entities/submission/item-list-elements/person/person-search-result-list-submission-element.component.spec.ts index e5d66e7b53..4cb8b9fb5e 100644 --- a/src/app/entity-groups/research-entities/submission/item-list-elements/person/person-search-result-list-submission-element.component.spec.ts +++ b/src/app/entity-groups/research-entities/submission/item-list-elements/person/person-search-result-list-submission-element.component.spec.ts @@ -1,5 +1,5 @@ import { HttpClient } from '@angular/common/http'; -import { ChangeDetectionStrategy, NO_ERRORS_SCHEMA } from '@angular/core'; +import { ChangeDetectionStrategy, Component, EventEmitter, NO_ERRORS_SCHEMA } from '@angular/core'; import { waitForAsync, ComponentFixture, TestBed } from '@angular/core/testing'; import { By } from '@angular/platform-browser'; import { NgbModal } from '@ng-bootstrap/ng-bootstrap'; @@ -8,7 +8,6 @@ import { TranslateService } from '@ngx-translate/core'; import { Observable, of as observableOf } from 'rxjs'; import { RemoteDataBuildService } from '../../../../../core/cache/builders/remote-data-build.service'; import { ObjectCacheService } from '../../../../../core/cache/object-cache.service'; -import { BitstreamDataService } from '../../../../../core/data/bitstream-data.service'; import { CommunityDataService } from '../../../../../core/data/community-data.service'; import { DefaultChangeAnalyzer } from '../../../../../core/data/default-change-analyzer.service'; import { DSOChangeAnalyzer } from '../../../../../core/data/dso-change-analyzer.service'; @@ -20,7 +19,6 @@ import { Bitstream } from '../../../../../core/shared/bitstream.model'; import { HALEndpointService } from '../../../../../core/shared/hal-endpoint.service'; import { Item } from '../../../../../core/shared/item.model'; import { UUIDService } from '../../../../../core/shared/uuid.service'; -import { NotificationsService } from '../../../../../shared/notifications/notifications.service'; import { ItemSearchResult } from '../../../../../shared/object-collection/shared/item-search-result.model'; import { SelectableListService } from '../../../../../shared/object-list/selectable-list/selectable-list.service'; import { createSuccessfulRemoteDataObject$ } from '../../../../../shared/remote-data.utils'; @@ -28,6 +26,14 @@ import { TruncatableService } from '../../../../../shared/truncatable/truncatabl import { TruncatePipe } from '../../../../../shared/utils/truncate.pipe'; import { PersonSearchResultListSubmissionElementComponent } from './person-search-result-list-submission-element.component'; import { APP_CONFIG } from '../../../../../../config/app-config.interface'; +import { ThumbnailComponent } from '../../../../../thumbnail/thumbnail.component'; +import { PersonInputSuggestionsComponent } from './person-suggestions/person-input-suggestions.component'; +import { CollectionElementLinkType } from '../../../../../shared/object-collection/collection-element-link.type'; +import { AuthService } from '../../../../../core/auth/auth.service'; +import { REQUEST } from '@nguniversal/express-engine/tokens'; +import { BrowseByRoutingModule } from '../../../../../browse-by/browse-by-routing.module'; +import { ThemeService } from '../../../../../shared/theme-support/theme.service'; +import { getMockThemeService } from '../../../../../shared/mocks/theme-service.mock'; let personListElementComponent: PersonSearchResultListSubmissionElementComponent; let fixture: ComponentFixture; @@ -50,6 +56,14 @@ const enviromentNoThumbs = { } }; +const translateServiceStub = { + get: () => observableOf('test' ), + instant: (key) => key, + onLangChange: new EventEmitter(), + onTranslationChange: new EventEmitter(), + onDefaultLangChange: new EventEmitter() +}; + function init() { mockItemWithMetadata = Object.assign( new ItemSearchResult(), @@ -95,20 +109,14 @@ function init() { } describe('PersonSearchResultListElementSubmissionComponent', () => { - const mockBitstreamDataService = { - getThumbnailFor(item: Item): Observable> { - return createSuccessfulRemoteDataObject$(new Bitstream()); - } - }; - beforeEach(waitForAsync(() => { + beforeEach(waitForAsync(async () => { init(); - TestBed.configureTestingModule({ - imports: [PersonSearchResultListSubmissionElementComponent, TruncatePipe], - providers: [ + await TestBed.configureTestingModule({ + imports: [PersonSearchResultListSubmissionElementComponent, TruncatePipe, BrowseByRoutingModule], + providers: [ { provide: TruncatableService, useValue: {} }, { provide: RelationshipDataService, useValue: mockRelationshipService }, - { provide: NotificationsService, useValue: {} }, - { provide: TranslateService, useValue: {} }, + { provide: TranslateService, useValue: translateServiceStub }, { provide: NgbModal, useValue: {} }, { provide: ItemDataService, useValue: {} }, { provide: SelectableListService, useValue: {} }, @@ -121,13 +129,14 @@ describe('PersonSearchResultListElementSubmissionComponent', () => { { provide: HttpClient, useValue: {} }, { provide: DSOChangeAnalyzer, useValue: {} }, { provide: DefaultChangeAnalyzer, useValue: {} }, - { provide: BitstreamDataService, useValue: mockBitstreamDataService }, - { provide: APP_CONFIG, useValue: environmentUseThumbs } - ], - schemas: [NO_ERRORS_SCHEMA] -}).overrideComponent(PersonSearchResultListSubmissionElementComponent, { - set: { changeDetection: ChangeDetectionStrategy.Default } - }).compileComponents(); + { provide: APP_CONFIG, useValue: environmentUseThumbs }, + { provide: AuthService, useValue: {} }, + { provide: REQUEST, useValue: {} }, + { provide: ThemeService, useValue: getMockThemeService() }, + ], + schemas: [NO_ERRORS_SCHEMA] + }) + .compileComponents(); })); beforeEach(waitForAsync(() => { @@ -139,6 +148,25 @@ describe('PersonSearchResultListElementSubmissionComponent', () => { describe('When the item has a job title', () => { beforeEach(() => { personListElementComponent.object = mockItemWithMetadata; + personListElementComponent.dso = Object.assign( + new Item(), + { + + metadata: { + 'dc.title': [ + { + language: 'en_US', + value: 'This is just another title' + } + ], + 'person.jobTitle': [ + { + language: 'en_US', + value: 'Developer' + } + ] + } + }); fixture.detectChanges(); }); @@ -163,6 +191,7 @@ describe('PersonSearchResultListElementSubmissionComponent', () => { describe('When the environment is set to show thumbnails', () => { beforeEach(() => { personListElementComponent.object = mockItemWithoutMetadata; + personListElementComponent.linkType = CollectionElementLinkType.ExternalLink; fixture.detectChanges(); }); @@ -182,12 +211,11 @@ describe('PersonSearchResultListElementSubmissionComponent', () => { beforeEach(waitForAsync(() => { init(); TestBed.configureTestingModule({ - imports: [PersonSearchResultListSubmissionElementComponent, TruncatePipe], - providers: [ + imports: [PersonSearchResultListSubmissionElementComponent, TruncatePipe], + providers: [ { provide: TruncatableService, useValue: {} }, { provide: RelationshipDataService, useValue: mockRelationshipService }, - { provide: NotificationsService, useValue: {} }, - { provide: TranslateService, useValue: {} }, + { provide: TranslateService, useValue: translateServiceStub }, { provide: NgbModal, useValue: {} }, { provide: ItemDataService, useValue: {} }, { provide: SelectableListService, useValue: {} }, @@ -200,12 +228,14 @@ describe('PersonSearchResultListElementSubmissionComponent', () => { { provide: HttpClient, useValue: {} }, { provide: DSOChangeAnalyzer, useValue: {} }, { provide: DefaultChangeAnalyzer, useValue: {} }, - { provide: BitstreamDataService, useValue: mockBitstreamDataService }, { provide: APP_CONFIG, useValue: enviromentNoThumbs } - ], - schemas: [NO_ERRORS_SCHEMA] -}).overrideComponent(PersonSearchResultListSubmissionElementComponent, { - set: { changeDetection: ChangeDetectionStrategy.Default } + ], + schemas: [NO_ERRORS_SCHEMA] + }).overrideComponent(PersonSearchResultListSubmissionElementComponent, { + remove: { + imports: [ThumbnailComponent, PersonInputSuggestionsComponent] + }, + add: { changeDetection: ChangeDetectionStrategy.Default } }).compileComponents(); })); @@ -227,3 +257,12 @@ describe('PersonSearchResultListElementSubmissionComponent', () => { }); }); }); + +@Component({ + selector: 'ds-mock-thumbnail', + template: '
', + standalone: true +}) +export class ThumbnailStubComponent { + +} diff --git a/src/app/entity-groups/research-entities/submission/item-list-elements/person/person-search-result-list-submission-element.component.ts b/src/app/entity-groups/research-entities/submission/item-list-elements/person/person-search-result-list-submission-element.component.ts index d687d548af..f5998b6d55 100644 --- a/src/app/entity-groups/research-entities/submission/item-list-elements/person/person-search-result-list-submission-element.component.ts +++ b/src/app/entity-groups/research-entities/submission/item-list-elements/person/person-search-result-list-submission-element.component.ts @@ -1,5 +1,4 @@ import { Component, Inject, OnInit } from '@angular/core'; -import { BitstreamDataService } from '../../../../../core/data/bitstream-data.service'; import { SearchResultListElementComponent } from '../../../../../shared/object-list/search-result-list-element/search-result-list-element.component'; import { ItemSearchResult } from '../../../../../shared/object-collection/shared/item-search-result.model'; import { listableObjectComponent } from '../../../../../shared/object-collection/shared/listable-object/listable-object.decorator'; @@ -9,8 +8,6 @@ import { Context } from '../../../../../core/shared/context.model'; import { RelationshipDataService } from '../../../../../core/data/relationship-data.service'; import { TruncatableService } from '../../../../../shared/truncatable/truncatable.service'; import { take } from 'rxjs/operators'; -import { NotificationsService } from '../../../../../shared/notifications/notifications.service'; -import { TranslateService } from '@ngx-translate/core'; import { NgbModal } from '@ng-bootstrap/ng-bootstrap'; import { NameVariantModalComponent } from '../../name-variant-modal/name-variant-modal.component'; import { MetadataValue } from '../../../../../core/shared/metadata.models'; @@ -47,11 +44,8 @@ export class PersonSearchResultListSubmissionElementComponent extends SearchResu constructor(protected truncatableService: TruncatableService, private relationshipService: RelationshipDataService, - private notificationsService: NotificationsService, - private translateService: TranslateService, private modalService: NgbModal, private itemDataService: ItemDataService, - private bitstreamDataService: BitstreamDataService, private selectableListService: SelectableListService, public dsoNameService: DSONameService, @Inject(APP_CONFIG) protected appConfig: AppConfig diff --git a/src/app/forgot-password/forgot-password-email/forgot-email.component.spec.ts b/src/app/forgot-password/forgot-password-email/forgot-email.component.spec.ts index 97b43ccbaa..5feafd26a5 100644 --- a/src/app/forgot-password/forgot-password-email/forgot-email.component.spec.ts +++ b/src/app/forgot-password/forgot-password-email/forgot-email.component.spec.ts @@ -4,6 +4,7 @@ import { CommonModule } from '@angular/common'; import { CUSTOM_ELEMENTS_SCHEMA } from '@angular/core'; import { TranslateModule } from '@ngx-translate/core'; import { ReactiveFormsModule } from '@angular/forms'; +import { RegisterEmailFormComponent } from '../../register-email-form/register-email-form.component'; describe('ForgotEmailComponent', () => { let comp: ForgotEmailComponent; @@ -11,9 +12,15 @@ describe('ForgotEmailComponent', () => { beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ - imports: [CommonModule, TranslateModule.forRoot(), ReactiveFormsModule, ForgotEmailComponent], - schemas: [CUSTOM_ELEMENTS_SCHEMA] -}).compileComponents(); + imports: [CommonModule, TranslateModule.forRoot(), ReactiveFormsModule, ForgotEmailComponent], + schemas: [CUSTOM_ELEMENTS_SCHEMA] + }) + .overrideComponent(ForgotEmailComponent, { + remove: { + imports: [RegisterEmailFormComponent] + } + }) + .compileComponents(); })); beforeEach(() => { fixture = TestBed.createComponent(ForgotEmailComponent); diff --git a/src/app/health-page/health-info/health-info-component/health-info-component.component.spec.ts b/src/app/health-page/health-info/health-info-component/health-info-component.component.spec.ts index cf5bb48079..2303868c55 100644 --- a/src/app/health-page/health-info/health-info-component/health-info-component.component.spec.ts +++ b/src/app/health-page/health-info/health-info-component/health-info-component.component.spec.ts @@ -17,20 +17,20 @@ describe('HealthInfoComponentComponent', () => { beforeEach(async () => { await TestBed.configureTestingModule({ - imports: [ + imports: [ CommonModule, NgbCollapseModule, NoopAnimationsModule, TranslateModule.forRoot({ - loader: { - provide: TranslateLoader, - useClass: TranslateLoaderMock - } + loader: { + provide: TranslateLoader, + useClass: TranslateLoaderMock + } }), HealthInfoComponentComponent, - ObjNgFor - ] -}) + ObjNgFor, + ] + }) .compileComponents(); }); diff --git a/src/app/health-page/health-panel/health-panel.component.spec.ts b/src/app/health-page/health-panel/health-panel.component.spec.ts index d3b0a64808..fef099d6fc 100644 --- a/src/app/health-page/health-panel/health-panel.component.spec.ts +++ b/src/app/health-page/health-panel/health-panel.component.spec.ts @@ -11,6 +11,8 @@ import { TranslateLoaderMock } from '../../shared/mocks/translate-loader.mock'; import { HealthPanelComponent } from './health-panel.component'; import { HealthResponseObj } from '../../shared/mocks/health-endpoint.mocks'; import { ObjNgFor } from '../../shared/utils/object-ngfor.pipe'; +import { HealthStatusComponent } from './health-status/health-status.component'; +import { HealthComponentComponent } from './health-component/health-component.component'; describe('HealthPanelComponent', () => { let component: HealthPanelComponent; @@ -33,7 +35,13 @@ describe('HealthPanelComponent', () => { ObjNgFor ], schemas: [NO_ERRORS_SCHEMA] -}).compileComponents(); +}) +.overrideComponent(HealthPanelComponent, { + remove: { + imports: [HealthComponentComponent, HealthStatusComponent] + } +}) +.compileComponents(); }); beforeEach(() => { diff --git a/src/app/home-page/recent-item-list/recent-item-list.component.spec.ts b/src/app/home-page/recent-item-list/recent-item-list.component.spec.ts index 2969e320f9..04cecba3ee 100644 --- a/src/app/home-page/recent-item-list/recent-item-list.component.spec.ts +++ b/src/app/home-page/recent-item-list/recent-item-list.component.spec.ts @@ -1,8 +1,8 @@ import { ComponentFixture, TestBed } from '@angular/core/testing'; -import { SearchService } from 'src/app/core/shared/search/search.service'; -import { createSuccessfulRemoteDataObject } from 'src/app/shared/remote-data.utils'; -import { SearchServiceStub } from 'src/app/shared/testing/search-service.stub'; -import { createPaginatedList } from 'src/app/shared/testing/utils.test'; +import { SearchService } from '../../core/shared/search/search.service'; +import { createSuccessfulRemoteDataObject } from '../../shared/remote-data.utils'; +import { SearchServiceStub } from '../../shared/testing/search-service.stub'; +import { createPaginatedList } from '../../shared/testing/utils.test'; import { PaginationService } from '../../core/pagination/pagination.service'; import { PaginationServiceStub } from '../../shared/testing/pagination-service.stub'; import { RecentItemListComponent } from './recent-item-list.component'; diff --git a/src/app/import-external-page/import-external-page.component.spec.ts b/src/app/import-external-page/import-external-page.component.spec.ts index aff69a5d6e..4ba66c3416 100644 --- a/src/app/import-external-page/import-external-page.component.spec.ts +++ b/src/app/import-external-page/import-external-page.component.spec.ts @@ -5,6 +5,7 @@ import { ThemeService } from '../shared/theme-support/theme.service'; import { getMockThemeService } from '../shared/mocks/theme-service.mock'; import { ActivatedRoute } from '@angular/router'; import { ActivatedRouteStub } from '../shared/testing/active-router.stub'; +import { SearchConfigurationService } from '../core/shared/search/search-configuration.service'; describe('ImportExternalPageComponent', () => { let component: ImportExternalPageComponent; @@ -15,7 +16,8 @@ describe('ImportExternalPageComponent', () => { imports: [ImportExternalPageComponent], providers: [ { provide: ThemeService, useValue: getMockThemeService() }, - { provide: ActivatedRoute, useValue: new ActivatedRouteStub() } + { provide: ActivatedRoute, useValue: new ActivatedRouteStub() }, + { provide: SearchConfigurationService, useValue: {}}, ], schemas: [NO_ERRORS_SCHEMA] }) diff --git a/src/app/info/end-user-agreement/end-user-agreement-content/end-user-agreement-content.component.spec.ts b/src/app/info/end-user-agreement/end-user-agreement-content/end-user-agreement-content.component.spec.ts index c8c142d12d..6f7e4ad1fb 100644 --- a/src/app/info/end-user-agreement/end-user-agreement-content/end-user-agreement-content.component.spec.ts +++ b/src/app/info/end-user-agreement/end-user-agreement-content/end-user-agreement-content.component.spec.ts @@ -2,6 +2,7 @@ import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { EndUserAgreementContentComponent } from './end-user-agreement-content.component'; import { TranslateModule } from '@ngx-translate/core'; import { NO_ERRORS_SCHEMA } from '@angular/core'; +import { RouterLink } from '@angular/router'; describe('EndUserAgreementContentComponent', () => { let component: EndUserAgreementContentComponent; @@ -9,9 +10,15 @@ describe('EndUserAgreementContentComponent', () => { beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ - imports: [TranslateModule.forRoot(), EndUserAgreementContentComponent], - schemas: [NO_ERRORS_SCHEMA] -}).compileComponents(); + imports: [TranslateModule.forRoot(), EndUserAgreementContentComponent], + schemas: [NO_ERRORS_SCHEMA] + }) + .overrideComponent(EndUserAgreementContentComponent, { + remove: { + imports: [RouterLink] + } + }) + .compileComponents(); })); beforeEach(() => { diff --git a/src/app/info/end-user-agreement/end-user-agreement.component.spec.ts b/src/app/info/end-user-agreement/end-user-agreement.component.spec.ts index 8e436521c9..feffd82c18 100644 --- a/src/app/info/end-user-agreement/end-user-agreement.component.spec.ts +++ b/src/app/info/end-user-agreement/end-user-agreement.component.spec.ts @@ -11,6 +11,7 @@ import { Store } from '@ngrx/store'; import { By } from '@angular/platform-browser'; import { LogOutAction } from '../../core/auth/auth.actions'; import { ActivatedRouteStub } from '../../shared/testing/active-router.stub'; +import { EndUserAgreementContentComponent } from './end-user-agreement-content/end-user-agreement-content.component'; describe('EndUserAgreementComponent', () => { let component: EndUserAgreementComponent; @@ -48,17 +49,23 @@ describe('EndUserAgreementComponent', () => { beforeEach(waitForAsync(() => { init(); TestBed.configureTestingModule({ - imports: [TranslateModule.forRoot(), EndUserAgreementComponent], - providers: [ + imports: [TranslateModule.forRoot(), EndUserAgreementComponent], + providers: [ { provide: EndUserAgreementService, useValue: endUserAgreementService }, { provide: NotificationsService, useValue: notificationsService }, { provide: AuthService, useValue: authService }, { provide: Store, useValue: store }, { provide: Router, useValue: router }, { provide: ActivatedRoute, useValue: route } - ], - schemas: [NO_ERRORS_SCHEMA] -}).compileComponents(); + ], + schemas: [NO_ERRORS_SCHEMA] + }) + .overrideComponent(EndUserAgreementComponent, { + remove: { + imports: [EndUserAgreementContentComponent] + } + }) + .compileComponents(); })); beforeEach(() => { diff --git a/src/app/info/feedback/feedback.component.spec.ts b/src/app/info/feedback/feedback.component.spec.ts index ced48410d2..db2654d40a 100644 --- a/src/app/info/feedback/feedback.component.spec.ts +++ b/src/app/info/feedback/feedback.component.spec.ts @@ -2,6 +2,11 @@ import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { FeedbackComponent } from './feedback.component'; import { TranslateModule } from '@ngx-translate/core'; import { NO_ERRORS_SCHEMA } from '@angular/core'; +import { ThemeService } from '../../shared/theme-support/theme.service'; +import { getMockThemeService } from '../../shared/mocks/theme-service.mock'; +import { ActivatedRoute } from '@angular/router'; +import { ActivatedRouteStub } from '../../shared/testing/active-router.stub'; +import { ThemedFeedbackFormComponent } from './feedback-form/themed-feedback-form.component'; describe('FeedbackComponent', () => { let component: FeedbackComponent; @@ -9,9 +14,19 @@ describe('FeedbackComponent', () => { beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ - imports: [TranslateModule.forRoot(), FeedbackComponent], - schemas: [NO_ERRORS_SCHEMA] -}).compileComponents(); + imports: [TranslateModule.forRoot(), FeedbackComponent], + providers: [ + { provide: ThemeService, useValue: getMockThemeService() }, + { provide: ActivatedRoute, useValue: new ActivatedRouteStub() }, + ], + schemas: [NO_ERRORS_SCHEMA] + }) + .overrideComponent(FeedbackComponent, { + remove: { + imports: [ThemedFeedbackFormComponent] + } + }) + .compileComponents(); })); beforeEach(() => { diff --git a/src/app/info/privacy/privacy.component.spec.ts b/src/app/info/privacy/privacy.component.spec.ts index fe548131cb..b97cae3e16 100644 --- a/src/app/info/privacy/privacy.component.spec.ts +++ b/src/app/info/privacy/privacy.component.spec.ts @@ -2,6 +2,8 @@ import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { PrivacyComponent } from './privacy.component'; import { TranslateModule } from '@ngx-translate/core'; import { NO_ERRORS_SCHEMA } from '@angular/core'; +import { ActivatedRoute } from '@angular/router'; +import { ActivatedRouteStub } from '../../shared/testing/active-router.stub'; describe('PrivacyComponent', () => { let component: PrivacyComponent; @@ -10,6 +12,9 @@ describe('PrivacyComponent', () => { beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ imports: [TranslateModule.forRoot(), PrivacyComponent], + providers: [ + { provide: ActivatedRoute, useValue: new ActivatedRouteStub() }, + ], schemas: [NO_ERRORS_SCHEMA] }).compileComponents(); })); diff --git a/src/app/item-page/alerts/item-alerts.component.spec.ts b/src/app/item-page/alerts/item-alerts.component.spec.ts index c44c17eb47..69ad7c001c 100644 --- a/src/app/item-page/alerts/item-alerts.component.spec.ts +++ b/src/app/item-page/alerts/item-alerts.component.spec.ts @@ -4,6 +4,9 @@ import { TranslateModule } from '@ngx-translate/core'; import { NO_ERRORS_SCHEMA } from '@angular/core'; import { Item } from '../../core/shared/item.model'; import { By } from '@angular/platform-browser'; +import { ActivatedRoute } from '@angular/router'; +import { ActivatedRouteStub } from '../../shared/testing/active-router.stub'; +import { NoopAnimationsModule } from '@angular/platform-browser/animations'; describe('ItemAlertsComponent', () => { let component: ItemAlertsComponent; @@ -12,7 +15,10 @@ describe('ItemAlertsComponent', () => { beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ - imports: [TranslateModule.forRoot(), ItemAlertsComponent], + providers: [ + { provide: ActivatedRoute, useValue: new ActivatedRouteStub() }, + ], + imports: [TranslateModule.forRoot(), ItemAlertsComponent, NoopAnimationsModule], schemas: [NO_ERRORS_SCHEMA] }) .compileComponents(); diff --git a/src/app/item-page/bitstreams/upload/upload-bitstream.component.spec.ts b/src/app/item-page/bitstreams/upload/upload-bitstream.component.spec.ts index cbbbab5c53..a910c5c5cd 100644 --- a/src/app/item-page/bitstreams/upload/upload-bitstream.component.spec.ts +++ b/src/app/item-page/bitstreams/upload/upload-bitstream.component.spec.ts @@ -24,6 +24,8 @@ import { AuthServiceStub } from '../../../shared/testing/auth-service.stub'; import { environment } from '../../../../environments/environment'; import { buildPaginatedList } from '../../../core/data/paginated-list.model'; import { PageInfo } from '../../../core/shared/page-info.model'; +import { UploaderComponent } from '../../../shared/upload/uploader/uploader.component'; +import { DsoInputSuggestionsComponent } from '../../../shared/input-suggestions/dso-input-suggestions/dso-input-suggestions.component'; describe('UploadBitstreamComponent', () => { let comp: UploadBitstreamComponent; @@ -287,8 +289,8 @@ describe('UploadBitstreamComponent', () => { }; TestBed.configureTestingModule({ - imports: [CommonModule, RouterTestingModule.withRoutes([]), TranslateModule.forRoot(), NgbModule, UploadBitstreamComponent, VarDirective], - providers: [ + imports: [CommonModule, RouterTestingModule.withRoutes([]), TranslateModule.forRoot(), NgbModule, UploadBitstreamComponent, VarDirective], + providers: [ { provide: ActivatedRoute, useValue: routeStub }, { provide: Router, useValue: routerStub }, { provide: ItemDataService, useValue: mockItemDataService }, @@ -296,10 +298,16 @@ describe('UploadBitstreamComponent', () => { { provide: AuthService, useValue: authServiceStub }, { provide: BundleDataService, useValue: bundleService }, { provide: RequestService, useValue: requestService } - ], schemas: [ + ], schemas: [ NO_ERRORS_SCHEMA - ] -}).compileComponents(); + ] + }) + .overrideComponent(UploadBitstreamComponent, { + remove: { + imports: [UploaderComponent, DsoInputSuggestionsComponent] + } + }) + .compileComponents(); } /** diff --git a/src/app/item-page/edit-item-page/item-bitstreams/item-edit-bitstream-bundle/paginated-drag-and-drop-bitstream-list/paginated-drag-and-drop-bitstream-list.component.spec.ts b/src/app/item-page/edit-item-page/item-bitstreams/item-edit-bitstream-bundle/paginated-drag-and-drop-bitstream-list/paginated-drag-and-drop-bitstream-list.component.spec.ts index fd3cd3d21b..ce64cd801f 100644 --- a/src/app/item-page/edit-item-page/item-bitstreams/item-edit-bitstream-bundle/paginated-drag-and-drop-bitstream-list/paginated-drag-and-drop-bitstream-list.component.spec.ts +++ b/src/app/item-page/edit-item-page/item-bitstreams/item-edit-bitstream-bundle/paginated-drag-and-drop-bitstream-list/paginated-drag-and-drop-bitstream-list.component.spec.ts @@ -18,6 +18,9 @@ import { createPaginatedList } from '../../../../../shared/testing/utils.test'; import { RequestService } from '../../../../../core/data/request.service'; import { PaginationService } from '../../../../../core/pagination/pagination.service'; import { PaginationServiceStub } from '../../../../../shared/testing/pagination-service.stub'; +import { PaginationComponent } from '../../../../../shared/pagination/pagination.component'; +import { ActivatedRoute } from '@angular/router'; +import { ActivatedRouteStub } from '../../../../../shared/testing/active-router.stub'; describe('PaginatedDragAndDropBitstreamListComponent', () => { let comp: PaginatedDragAndDropBitstreamListComponent; @@ -115,17 +118,24 @@ describe('PaginatedDragAndDropBitstreamListComponent', () => { paginationService = new PaginationServiceStub(); TestBed.configureTestingModule({ - imports: [TranslateModule.forRoot(), PaginatedDragAndDropBitstreamListComponent, VarDirective], - providers: [ + imports: [TranslateModule.forRoot(), PaginatedDragAndDropBitstreamListComponent, VarDirective], + providers: [ { provide: ObjectUpdatesService, useValue: objectUpdatesService }, { provide: BundleDataService, useValue: bundleService }, { provide: ObjectValuesPipe, useValue: objectValuesPipe }, { provide: RequestService, useValue: requestService }, - { provide: PaginationService, useValue: paginationService } - ], schemas: [ + { provide: PaginationService, useValue: paginationService }, + { provide: ActivatedRoute, useValue: new ActivatedRouteStub() }, + ], schemas: [ NO_ERRORS_SCHEMA - ] -}).compileComponents(); + ] + }) + .overrideComponent(PaginatedDragAndDropBitstreamListComponent, { + remove: { + imports: [PaginationComponent] + } + }) + .compileComponents(); })); beforeEach(() => { diff --git a/src/app/item-page/edit-item-page/item-curate/item-curate.component.spec.ts b/src/app/item-page/edit-item-page/item-curate/item-curate.component.spec.ts index e96e14651d..1e0c258239 100644 --- a/src/app/item-page/edit-item-page/item-curate/item-curate.component.spec.ts +++ b/src/app/item-page/edit-item-page/item-curate/item-curate.component.spec.ts @@ -7,6 +7,7 @@ import { createSuccessfulRemoteDataObject } from '../../../shared/remote-data.ut import { ActivatedRoute } from '@angular/router'; import { DSONameService } from '../../../core/breadcrumbs/dso-name.service'; import { Item } from '../../../core/shared/item.model'; +import { CurationFormComponent } from '../../../curation-form/curation-form.component'; describe('ItemCurateComponent', () => { let comp: ItemCurateComponent; @@ -41,7 +42,13 @@ describe('ItemCurateComponent', () => { { provide: DSONameService, useValue: dsoNameService } ], schemas: [CUSTOM_ELEMENTS_SCHEMA] -}).compileComponents(); +}) +.overrideComponent(ItemCurateComponent, { + remove: { + imports: [CurationFormComponent] + } +}) +.compileComponents(); })); beforeEach(() => { diff --git a/src/app/item-page/edit-item-page/item-move/item-move.component.spec.ts b/src/app/item-page/edit-item-page/item-move/item-move.component.spec.ts index 5ce28d9d05..5edb1844ab 100644 --- a/src/app/item-page/edit-item-page/item-move/item-move.component.spec.ts +++ b/src/app/item-page/edit-item-page/item-move/item-move.component.spec.ts @@ -23,6 +23,7 @@ import { import { createPaginatedList } from '../../../shared/testing/utils.test'; import { RequestService } from '../../../core/data/request.service'; import { getMockRequestService } from '../../../shared/mocks/request.service.mock'; +import { AuthorizedCollectionSelectorComponent } from '../../../shared/dso-selector/dso-selector/authorized-collection-selector/authorized-collection-selector.component'; describe('ItemMoveComponent', () => { let comp: ItemMoveComponent; @@ -103,7 +104,13 @@ describe('ItemMoveComponent', () => { ], schemas: [ CUSTOM_ELEMENTS_SCHEMA ] -}).compileComponents(); +}) +.overrideComponent(ItemMoveComponent, { + remove: { + imports: [AuthorizedCollectionSelectorComponent] + } +}) +.compileComponents(); fixture = TestBed.createComponent(ItemMoveComponent); comp = fixture.componentInstance; fixture.detectChanges(); diff --git a/src/app/item-page/edit-item-page/simple-item-action/abstract-simple-item-action.component.spec.ts b/src/app/item-page/edit-item-page/simple-item-action/abstract-simple-item-action.component.spec.ts index dc2b0d62ba..0c0f21251a 100644 --- a/src/app/item-page/edit-item-page/simple-item-action/abstract-simple-item-action.component.spec.ts +++ b/src/app/item-page/edit-item-page/simple-item-action/abstract-simple-item-action.component.spec.ts @@ -30,7 +30,7 @@ import { getItemEditRoute } from '../../item-page-routing-paths'; selector: 'ds-simple-action', templateUrl: './abstract-simple-item-action.component.html', standalone: true, - imports: [CommonModule, FormsModule, NgbModule] + imports: [CommonModule, FormsModule, NgbModule, TranslateModule], }) export class MySimpleItemActionComponent extends AbstractSimpleItemActionComponent { diff --git a/src/app/item-page/edit-item-page/virtual-metadata/virtual-metadata.component.spec.ts b/src/app/item-page/edit-item-page/virtual-metadata/virtual-metadata.component.spec.ts index c3a4b07be5..796fa22629 100644 --- a/src/app/item-page/edit-item-page/virtual-metadata/virtual-metadata.component.spec.ts +++ b/src/app/item-page/edit-item-page/virtual-metadata/virtual-metadata.component.spec.ts @@ -9,6 +9,9 @@ import { ObjectUpdatesService } from '../../../core/data/object-updates/object-u import { VarDirective } from '../../../shared/utils/var.directive'; import { APP_CONFIG } from '../../../../config/app-config.interface'; import { environment } from '../../../../environments/environment'; +import { ThemeService } from '../../../shared/theme-support/theme.service'; +import { getMockThemeService } from '../../../shared/mocks/theme-service.mock'; +import { ListableObjectComponentLoaderComponent } from '../../../shared/object-collection/shared/listable-object/listable-object-component-loader.component'; describe('VirtualMetadataComponent', () => { @@ -44,14 +47,21 @@ describe('VirtualMetadataComponent', () => { }); TestBed.configureTestingModule({ - imports: [TranslateModule.forRoot(), VirtualMetadataComponent, VarDirective], - providers: [ + imports: [TranslateModule.forRoot(), VirtualMetadataComponent, VarDirective], + providers: [ { provide: ObjectUpdatesService, useValue: objectUpdatesService }, - { provide: APP_CONFIG, useValue: environment } - ], schemas: [ + { provide: APP_CONFIG, useValue: environment }, + { provide: ThemeService, useValue: getMockThemeService() }, + ], schemas: [ NO_ERRORS_SCHEMA - ] -}).compileComponents(); + ] + }) + .overrideComponent(VirtualMetadataComponent, { + remove: { + imports: [ListableObjectComponentLoaderComponent] + } + }) + .compileComponents(); fixture = TestBed.createComponent(VirtualMetadataComponent); comp = fixture.componentInstance; diff --git a/src/app/item-page/field-components/collections/collections.component.spec.ts b/src/app/item-page/field-components/collections/collections.component.spec.ts index 8e926d7e74..de71c9bae3 100644 --- a/src/app/item-page/field-components/collections/collections.component.spec.ts +++ b/src/app/item-page/field-components/collections/collections.component.spec.ts @@ -14,6 +14,8 @@ import { PageInfo } from '../../../core/shared/page-info.model'; import { FindListOptions } from '../../../core/data/find-list-options.model'; import { DSONameService } from '../../../core/breadcrumbs/dso-name.service'; import { DSONameServiceMock } from '../../../shared/mocks/dso-name.service.mock'; +import { ActivatedRoute } from '@angular/router'; +import { ActivatedRouteStub } from '../../../shared/testing/active-router.stub'; const createMockCollection = (id: string) => Object.assign(new Collection(), { id: id, @@ -50,6 +52,7 @@ describe('CollectionsComponent', () => { { provide: DSONameService, useValue: new DSONameServiceMock() }, { provide: RemoteDataBuildService, useValue: getMockRemoteDataBuildService() }, { provide: CollectionDataService, useValue: collectionDataService }, + { provide: ActivatedRoute, useValue: new ActivatedRouteStub() }, ], schemas: [NO_ERRORS_SCHEMA] }).overrideComponent(CollectionsComponent, { diff --git a/src/app/item-page/full/full-item-page.component.spec.ts b/src/app/item-page/full/full-item-page.component.spec.ts index 46ca9d5a9d..c305f9238c 100644 --- a/src/app/item-page/full/full-item-page.component.spec.ts +++ b/src/app/item-page/full/full-item-page.component.spec.ts @@ -23,6 +23,17 @@ import { RemoteData } from '../../core/data/remote-data'; import { ServerResponseService } from '../../core/services/server-response.service'; import { SignpostingDataService } from '../../core/data/signposting-data.service'; import { LinkHeadService } from '../../core/services/link-head.service'; +import { ThemeService } from '../../shared/theme-support/theme.service'; +import { getMockThemeService } from '../../shared/mocks/theme-service.mock'; +import { ItemVersionsComponent } from '../versions/item-versions.component'; +import { ItemVersionsNoticeComponent } from '../versions/notice/item-versions-notice.component'; +import { ThemedLoadingComponent } from '../../shared/loading/themed-loading.component'; +import { ThemedItemPageTitleFieldComponent } from '../simple/field-components/specific-field/title/themed-item-page-field.component'; +import { DsoEditMenuComponent } from '../../shared/dso-page/dso-edit-menu/dso-edit-menu.component'; +import { ViewTrackerComponent } from '../../statistics/angulartics/dspace/view-tracker.component'; +import { ThemedItemAlertsComponent } from '../alerts/themed-item-alerts.component'; +import { CollectionsComponent } from '../field-components/collections/collections.component'; +import { ThemedFullFileSectionComponent } from './field-components/file-section/themed-full-file-section.component'; const mockItem: Item = Object.assign(new Item(), { bundles: createSuccessfulRemoteDataObject$(createPaginatedList([])), @@ -121,12 +132,27 @@ describe('FullItemPageComponent', () => { { provide: ServerResponseService, useValue: serverResponseService }, { provide: SignpostingDataService, useValue: signpostingDataService }, { provide: LinkHeadService, useValue: linkHeadService }, - { provide: PLATFORM_ID, useValue: 'server' } - ], - schemas: [NO_ERRORS_SCHEMA] -}).overrideComponent(FullItemPageComponent, { - set: { changeDetection: ChangeDetectionStrategy.Default } - }).compileComponents(); + { provide: PLATFORM_ID, useValue: 'server' }, + { provide: ThemeService, useValue: getMockThemeService() }, + ], + schemas: [NO_ERRORS_SCHEMA] + }) + .overrideComponent(FullItemPageComponent, { + remove: { + imports: [ + ItemVersionsComponent, + ItemVersionsNoticeComponent, + ThemedLoadingComponent, + ThemedItemPageTitleFieldComponent, + DsoEditMenuComponent, + ViewTrackerComponent, + ThemedItemAlertsComponent, + CollectionsComponent, + ThemedFullFileSectionComponent + ] + }, + add: { changeDetection: ChangeDetectionStrategy.Default } + }).compileComponents(); })); beforeEach(waitForAsync(() => { diff --git a/src/app/item-page/media-viewer/media-viewer.component.spec.ts b/src/app/item-page/media-viewer/media-viewer.component.spec.ts index a405c17131..9331ea5f52 100644 --- a/src/app/item-page/media-viewer/media-viewer.component.spec.ts +++ b/src/app/item-page/media-viewer/media-viewer.component.spec.ts @@ -15,6 +15,10 @@ import { MediaViewerItem } from '../../core/shared/media-viewer-item.model'; import { VarDirective } from '../../shared/utils/var.directive'; import { MetadataFieldWrapperComponent } from '../../shared/metadata-field-wrapper/metadata-field-wrapper.component'; import { FileSizePipe } from '../../shared/utils/file-size-pipe'; +import { ThemeService } from '../../shared/theme-support/theme.service'; +import { getMockThemeService } from '../../shared/mocks/theme-service.mock'; +import { AuthService } from '../../core/auth/auth.service'; +import { AuthServiceMock } from '../../shared/mocks/auth.service.mock'; describe('MediaViewerComponent', () => { let comp: MediaViewerComponent; @@ -77,6 +81,8 @@ describe('MediaViewerComponent', () => { ], providers: [ { provide: BitstreamDataService, useValue: bitstreamDataService }, + { provide: ThemeService, useValue: getMockThemeService() }, + { provide: AuthService, useValue: new AuthServiceMock() }, ], schemas: [NO_ERRORS_SCHEMA] }).compileComponents(); diff --git a/src/app/item-page/orcid-page/orcid-queue/orcid-queue.component.spec.ts b/src/app/item-page/orcid-page/orcid-queue/orcid-queue.component.spec.ts index 5726663389..07aa12c631 100644 --- a/src/app/item-page/orcid-page/orcid-queue/orcid-queue.component.spec.ts +++ b/src/app/item-page/orcid-page/orcid-queue/orcid-queue.component.spec.ts @@ -17,6 +17,7 @@ import { PaginatedList } from '../../../core/data/paginated-list.model'; import { By } from '@angular/platform-browser'; import { Item } from '../../../core/shared/item.model'; import { OrcidAuthService } from '../../../core/orcid/orcid-auth.service'; +import { PaginationComponent } from '../../../shared/pagination/pagination.component'; describe('OrcidQueueComponent test suite', () => { let component: OrcidQueueComponent; @@ -126,7 +127,13 @@ describe('OrcidQueueComponent test suite', () => { { provide: NotificationsService, useValue: new NotificationsServiceStub() }, ], schemas: [NO_ERRORS_SCHEMA] -}).compileComponents(); +}) +.overrideComponent(OrcidQueueComponent, { + remove: { + imports: [PaginationComponent] + } +}) +.compileComponents(); orcidQueueService = TestBed.inject(OrcidQueueDataService); })); diff --git a/src/app/item-page/simple/field-components/file-section/file-section.component.spec.ts b/src/app/item-page/simple/field-components/file-section/file-section.component.spec.ts index 240d3a9539..190bfbecf4 100644 --- a/src/app/item-page/simple/field-components/file-section/file-section.component.spec.ts +++ b/src/app/item-page/simple/field-components/file-section/file-section.component.spec.ts @@ -17,8 +17,13 @@ import { MetadataFieldWrapperComponent } from '../../../../shared/metadata-field import { createPaginatedList } from '../../../../shared/testing/utils.test'; import { NotificationsService } from '../../../../shared/notifications/notifications.service'; import { NotificationsServiceStub } from '../../../../shared/testing/notifications-service.stub'; -import { APP_CONFIG } from 'src/config/app-config.interface'; -import { environment } from 'src/environments/environment'; +import { APP_CONFIG } from './../../../../../config/app-config.interface'; +import { environment } from './../.././../../../environments/environment'; +import { ThemeService } from './../.././../../shared/theme-support/theme.service'; +import { getMockThemeService } from './../.././../../shared/mocks/theme-service.mock'; +import { provideMockStore } from '@ngrx/store/testing'; +import { ActivatedRoute } from '@angular/router'; +import { ActivatedRouteStub } from './../.././../../shared/testing/active-router.stub'; describe('FileSectionComponent', () => { let comp: FileSectionComponent; @@ -58,19 +63,30 @@ describe('FileSectionComponent', () => { beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ - imports: [TranslateModule.forRoot({ - loader: { - provide: TranslateLoader, - useClass: TranslateLoaderMock - } - }), BrowserAnimationsModule, FileSectionComponent, VarDirective, FileSizePipe, MetadataFieldWrapperComponent], - providers: [ + imports: [TranslateModule.forRoot({ + loader: { + provide: TranslateLoader, + useClass: TranslateLoaderMock + } + }), BrowserAnimationsModule, FileSectionComponent, VarDirective, FileSizePipe], + providers: [ { provide: BitstreamDataService, useValue: bitstreamDataService }, { provide: NotificationsService, useValue: new NotificationsServiceStub() }, - { provide: APP_CONFIG, useValue: environment } - ], - schemas: [NO_ERRORS_SCHEMA] -}).compileComponents(); + { provide: APP_CONFIG, useValue: environment }, + { provide: ThemeService, useValue: getMockThemeService() }, + { provide: ActivatedRoute, useValue: new ActivatedRouteStub() }, + provideMockStore() + ], + schemas: [NO_ERRORS_SCHEMA] + }) + .overrideComponent(FileSectionComponent, { + remove: { + imports: [ + MetadataFieldWrapperComponent + ] + } + }) + .compileComponents(); })); beforeEach(waitForAsync(() => { diff --git a/src/app/item-page/simple/field-components/specific-field/date/item-page-date-field.component.spec.ts b/src/app/item-page/simple/field-components/specific-field/date/item-page-date-field.component.spec.ts index d9db550215..0c46845922 100644 --- a/src/app/item-page/simple/field-components/specific-field/date/item-page-date-field.component.spec.ts +++ b/src/app/item-page/simple/field-components/specific-field/date/item-page-date-field.component.spec.ts @@ -9,6 +9,8 @@ import { APP_CONFIG } from '../../../../../../config/app-config.interface'; import { environment } from '../../../../../../environments/environment'; import { BrowseDefinitionDataService } from '../../../../../core/browse/browse-definition-data.service'; import { BrowseDefinitionDataServiceStub } from '../../../../../shared/testing/browse-definition-data-service.stub'; +import { ActivatedRoute } from '@angular/router'; +import { ActivatedRouteStub } from '../../../../../shared/testing/active-router.stub'; let comp: ItemPageDateFieldComponent; let fixture: ComponentFixture; @@ -19,18 +21,20 @@ const mockValue = 'test value'; describe('ItemPageDateFieldComponent', () => { beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ - imports: [TranslateModule.forRoot({ - loader: { - provide: TranslateLoader, - useClass: TranslateLoaderMock - } - }), ItemPageDateFieldComponent, MetadataValuesComponent], - providers: [ + imports: [TranslateModule.forRoot({ + loader: { + provide: TranslateLoader, + useClass: TranslateLoaderMock + } + }), ItemPageDateFieldComponent, MetadataValuesComponent], + providers: [ { provide: APP_CONFIG, useValue: environment }, - { provide: BrowseDefinitionDataService, useValue: BrowseDefinitionDataServiceStub } - ], - schemas: [NO_ERRORS_SCHEMA] -}).overrideComponent(ItemPageDateFieldComponent, { + { provide: BrowseDefinitionDataService, useValue: BrowseDefinitionDataServiceStub }, + { provide: ActivatedRoute, useValue: new ActivatedRouteStub() }, + + ], + schemas: [NO_ERRORS_SCHEMA] + }).overrideComponent(ItemPageDateFieldComponent, { set: { changeDetection: ChangeDetectionStrategy.Default } }).compileComponents(); })); diff --git a/src/app/item-page/simple/field-components/specific-field/generic/generic-item-page-field.component.spec.ts b/src/app/item-page/simple/field-components/specific-field/generic/generic-item-page-field.component.spec.ts index fc1f28197e..4af64f2cb7 100644 --- a/src/app/item-page/simple/field-components/specific-field/generic/generic-item-page-field.component.spec.ts +++ b/src/app/item-page/simple/field-components/specific-field/generic/generic-item-page-field.component.spec.ts @@ -9,6 +9,8 @@ import { APP_CONFIG } from '../../../../../../config/app-config.interface'; import { environment } from '../../../../../../environments/environment'; import { BrowseDefinitionDataService } from '../../../../../core/browse/browse-definition-data.service'; import { BrowseDefinitionDataServiceStub } from '../../../../../shared/testing/browse-definition-data-service.stub'; +import { ActivatedRoute } from '@angular/router'; +import { ActivatedRouteStub } from '../../../../../shared/testing/active-router.stub'; let comp: GenericItemPageFieldComponent; let fixture: ComponentFixture; @@ -29,7 +31,8 @@ describe('GenericItemPageFieldComponent', () => { }), GenericItemPageFieldComponent, MetadataValuesComponent], providers: [ { provide: APP_CONFIG, useValue: environment }, - { provide: BrowseDefinitionDataService, useValue: BrowseDefinitionDataServiceStub } + { provide: BrowseDefinitionDataService, useValue: BrowseDefinitionDataServiceStub }, + { provide: ActivatedRoute, useValue: new ActivatedRouteStub() }, ], schemas: [NO_ERRORS_SCHEMA] }).overrideComponent(GenericItemPageFieldComponent, { diff --git a/src/app/item-page/simple/item-types/shared/item.component.spec.ts b/src/app/item-page/simple/item-types/shared/item.component.spec.ts index 88705f3fc3..dcbf0987af 100644 --- a/src/app/item-page/simple/item-types/shared/item.component.spec.ts +++ b/src/app/item-page/simple/item-types/shared/item.component.spec.ts @@ -53,6 +53,14 @@ import { routeServiceStub } from '../../../../shared/testing/route-service.stub' import { mockTruncatableService } from '../../../../shared/mocks/mock-trucatable.service'; import { AuthService } from '../../../../core/auth/auth.service'; import { AuthServiceStub } from '../../../../shared/testing/auth-service.stub'; +import { AsyncPipe } from '@angular/common'; +import { DsoEditMenuComponent } from '../../../../shared/dso-page/dso-edit-menu/dso-edit-menu.component'; +import { MetadataFieldWrapperComponent } from '../../../../shared/metadata-field-wrapper/metadata-field-wrapper.component'; +import { ThemedResultsBackButtonComponent } from '../../../../shared/results-back-button/themed-results-back-button.component'; +import { ThemedThumbnailComponent } from '../../../../thumbnail/themed-thumbnail.component'; +import { ThemedItemPageTitleFieldComponent } from '../../field-components/specific-field/title/themed-item-page-field.component'; +import { TabbedRelatedEntitiesSearchComponent } from '../../related-entities/tabbed-related-entities-search/tabbed-related-entities-search.component'; +import { RelatedItemsComponent } from '../../related-items/related-items-component'; export function getIIIFSearchEnabled(enabled: boolean): MetadataValue { @@ -100,7 +108,7 @@ export function getItemPageFieldsTest(mockItem: Item, component) { let fixture: ComponentFixture; let relationshipService: jasmine.SpyObj; - beforeEach(waitForAsync(() => { + beforeEach(waitForAsync(async () => { const mockBitstreamDataService = { getThumbnailFor(item: Item): Observable> { return createSuccessfulRemoteDataObject$(new Bitstream()); @@ -115,55 +123,73 @@ export function getItemPageFieldsTest(mockItem: Item, component) { getRelatedItemsByLabel: createSuccessfulRemoteDataObject$(buildPaginatedList(new PageInfo(), [])), }); - TestBed.configureTestingModule({ - imports: [ - TranslateModule.forRoot({ + await TestBed.configureTestingModule({ + imports: [ + TranslateModule.forRoot({ loader: { - provide: TranslateLoader, - useClass: TranslateLoaderMock - } - }), - RouterTestingModule, - component, GenericItemPageFieldComponent, TruncatePipe - ], - providers: [ - { - provide: APP_CONFIG, - useValue: { - browseBy: { showThumbnails: true }, - markdown: { enabled: true } - } - }, - provideMockStore(), - { provide: ItemDataService, useValue: {} }, - { provide: TruncatableService, useValue: mockTruncatableService }, - { provide: RelationshipDataService, useValue: relationshipService }, - { provide: ObjectCacheService, useValue: {} }, - { provide: UUIDService, useValue: {} }, - { provide: RemoteDataBuildService, useValue: {} }, - { provide: CommunityDataService, useValue: {} }, - { provide: HALEndpointService, useValue: {} }, - { provide: HttpClient, useValue: {} }, - { provide: DSOChangeAnalyzer, useValue: {} }, - { provide: VersionHistoryDataService, useValue: {} }, - { provide: VersionDataService, useValue: {} }, - { provide: NotificationsService, useValue: {} }, - { provide: DefaultChangeAnalyzer, useValue: {} }, - { provide: BitstreamDataService, useValue: mockBitstreamDataService }, - { provide: WorkspaceitemDataService, useValue: {} }, - { provide: SearchService, useValue: {} }, - { provide: RouteService, useValue: routeServiceStub }, - { provide: AuthService, useValue: new AuthServiceStub() }, - { provide: AuthorizationDataService, useValue: authorizationService }, - { provide: ResearcherProfileDataService, useValue: {} }, - { provide: BrowseDefinitionDataService, useValue: BrowseDefinitionDataServiceStub }, - ], - schemas: [NO_ERRORS_SCHEMA] -}).overrideComponent(component, { - add: { changeDetection: ChangeDetectionStrategy.Default } - }).compileComponents(); + provide: TranslateLoader, + useClass: TranslateLoaderMock, + }, + }), + RouterTestingModule, + component, + GenericItemPageFieldComponent, + TruncatePipe, + AsyncPipe, + ], + providers: [ + { + provide: APP_CONFIG, + useValue: { + browseBy: { showThumbnails: true }, + markdown: { enabled: true }, + }, + }, + provideMockStore(), + { provide: ItemDataService, useValue: {} }, + { provide: TruncatableService, useValue: mockTruncatableService }, + { provide: RelationshipDataService, useValue: relationshipService }, + { provide: ObjectCacheService, useValue: {} }, + { provide: UUIDService, useValue: {} }, + { provide: RemoteDataBuildService, useValue: {} }, + { provide: CommunityDataService, useValue: {} }, + { provide: HALEndpointService, useValue: {} }, + { provide: HttpClient, useValue: {} }, + { provide: DSOChangeAnalyzer, useValue: {} }, + { provide: VersionHistoryDataService, useValue: {} }, + { provide: VersionDataService, useValue: {} }, + { provide: NotificationsService, useValue: {} }, + { provide: DefaultChangeAnalyzer, useValue: {} }, + { provide: BitstreamDataService, useValue: mockBitstreamDataService }, + { provide: WorkspaceitemDataService, useValue: {} }, + { provide: SearchService, useValue: {} }, + { provide: RouteService, useValue: routeServiceStub }, + { provide: AuthService, useValue: new AuthServiceStub() }, + { provide: AuthorizationDataService, useValue: authorizationService }, + { provide: ResearcherProfileDataService, useValue: {} }, + { + provide: BrowseDefinitionDataService, + useValue: BrowseDefinitionDataServiceStub, + }, + ], + schemas: [NO_ERRORS_SCHEMA], + }) + .overrideComponent(component, { + remove: { + imports: [ + ThemedResultsBackButtonComponent, + ThemedItemPageTitleFieldComponent, + DsoEditMenuComponent, + MetadataFieldWrapperComponent, + ThemedThumbnailComponent, + RelatedItemsComponent, + TabbedRelatedEntitiesSearchComponent + ], + }, + add: { changeDetection: ChangeDetectionStrategy.Default }, + }) + .compileComponents(); })); - beforeEach(waitForAsync(() => { fixture = TestBed.createComponent(component); comp = fixture.componentInstance; @@ -443,42 +469,42 @@ describe('ItemComponent', () => { beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ - imports: [ - TranslateModule.forRoot({ + imports: [ + TranslateModule.forRoot({ loader: { - provide: TranslateLoader, - useClass: TranslateLoaderMock + provide: TranslateLoader, + useClass: TranslateLoaderMock } - }), - RouterTestingModule, - ItemComponent, GenericItemPageFieldComponent, TruncatePipe - ], - providers: [ - { provide: ItemDataService, useValue: {} }, - { provide: TruncatableService, useValue: mockTruncatableService }, - { provide: RelationshipDataService, useValue: {} }, - { provide: ObjectCacheService, useValue: {} }, - { provide: UUIDService, useValue: {} }, - { provide: Store, useValue: {} }, - { provide: RemoteDataBuildService, useValue: {} }, - { provide: CommunityDataService, useValue: {} }, - { provide: HALEndpointService, useValue: {} }, - { provide: HttpClient, useValue: {} }, - { provide: DSOChangeAnalyzer, useValue: {} }, - { provide: VersionHistoryDataService, useValue: {} }, - { provide: VersionDataService, useValue: {} }, - { provide: NotificationsService, useValue: {} }, - { provide: DefaultChangeAnalyzer, useValue: {} }, - { provide: BitstreamDataService, useValue: {} }, - { provide: WorkspaceitemDataService, useValue: {} }, - { provide: SearchService, useValue: {} }, - { provide: RouteService, useValue: mockRouteService }, - { provide: AuthorizationDataService, useValue: {} }, - { provide: ResearcherProfileDataService, useValue: {} }, - ], - schemas: [NO_ERRORS_SCHEMA] -}).overrideComponent(ItemComponent, { - set: {changeDetection: ChangeDetectionStrategy.Default} + }), + RouterTestingModule, + ItemComponent, GenericItemPageFieldComponent, TruncatePipe + ], + providers: [ + { provide: ItemDataService, useValue: {} }, + { provide: TruncatableService, useValue: mockTruncatableService }, + { provide: RelationshipDataService, useValue: {} }, + { provide: ObjectCacheService, useValue: {} }, + { provide: UUIDService, useValue: {} }, + { provide: Store, useValue: {} }, + { provide: RemoteDataBuildService, useValue: {} }, + { provide: CommunityDataService, useValue: {} }, + { provide: HALEndpointService, useValue: {} }, + { provide: HttpClient, useValue: {} }, + { provide: DSOChangeAnalyzer, useValue: {} }, + { provide: VersionHistoryDataService, useValue: {} }, + { provide: VersionDataService, useValue: {} }, + { provide: NotificationsService, useValue: {} }, + { provide: DefaultChangeAnalyzer, useValue: {} }, + { provide: BitstreamDataService, useValue: {} }, + { provide: WorkspaceitemDataService, useValue: {} }, + { provide: SearchService, useValue: {} }, + { provide: RouteService, useValue: mockRouteService }, + { provide: AuthorizationDataService, useValue: {} }, + { provide: ResearcherProfileDataService, useValue: {} }, + ], + schemas: [NO_ERRORS_SCHEMA] + }).overrideComponent(ItemComponent, { + set: { changeDetection: ChangeDetectionStrategy.Default } }); })); @@ -492,7 +518,7 @@ describe('ItemComponent', () => { fixture.detectChanges(); })); - it('should hide back button',() => { + it('should hide back button', () => { spyOn(mockRouteService, 'getPreviousUrl').and.returnValue(observableOf('/item')); comp.showBackButton.subscribe((val) => { expect(val).toBeFalse(); diff --git a/src/app/item-page/simple/related-entities/related-entities-search/related-entities-search.component.spec.ts b/src/app/item-page/simple/related-entities/related-entities-search/related-entities-search.component.spec.ts index 142e1b9988..36171ee207 100644 --- a/src/app/item-page/simple/related-entities/related-entities-search/related-entities-search.component.spec.ts +++ b/src/app/item-page/simple/related-entities/related-entities-search/related-entities-search.component.spec.ts @@ -5,6 +5,7 @@ import { TranslateModule } from '@ngx-translate/core'; import { NO_ERRORS_SCHEMA } from '@angular/core'; import { FormsModule } from '@angular/forms'; import { Item } from '../../../../core/shared/item.model'; +import { ConfigurationSearchPageComponent } from '../../../../search-page/configuration-search-page.component'; describe('RelatedEntitiesSearchComponent', () => { let comp: RelatedEntitiesSearchComponent; @@ -19,9 +20,15 @@ describe('RelatedEntitiesSearchComponent', () => { beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ - imports: [TranslateModule.forRoot(), NoopAnimationsModule, FormsModule, RelatedEntitiesSearchComponent], - schemas: [NO_ERRORS_SCHEMA] -}).compileComponents(); + imports: [TranslateModule.forRoot(), NoopAnimationsModule, FormsModule, RelatedEntitiesSearchComponent], + schemas: [NO_ERRORS_SCHEMA] + }) + .overrideComponent(RelatedEntitiesSearchComponent, { + remove: { + imports: [ConfigurationSearchPageComponent] + } + }) + .compileComponents(); })); beforeEach(() => { diff --git a/src/app/item-page/simple/related-entities/tabbed-related-entities-search/tabbed-related-entities-search.component.spec.ts b/src/app/item-page/simple/related-entities/tabbed-related-entities-search/tabbed-related-entities-search.component.spec.ts index 22348b8562..4405ef33a5 100644 --- a/src/app/item-page/simple/related-entities/tabbed-related-entities-search/tabbed-related-entities-search.component.spec.ts +++ b/src/app/item-page/simple/related-entities/tabbed-related-entities-search/tabbed-related-entities-search.component.spec.ts @@ -9,6 +9,7 @@ import { RouterMock } from '../../../../shared/mocks/router.mock'; import { NgbModule } from '@ng-bootstrap/ng-bootstrap'; import { VarDirective } from '../../../../shared/utils/var.directive'; import { of as observableOf } from 'rxjs'; +import { RelatedEntitiesSearchComponent } from '../related-entities-search/related-entities-search.component'; describe('TabbedRelatedEntitiesSearchComponent', () => { let comp: TabbedRelatedEntitiesSearchComponent; @@ -29,18 +30,26 @@ describe('TabbedRelatedEntitiesSearchComponent', () => { beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ - imports: [TranslateModule.forRoot(), NoopAnimationsModule, NgbModule, TabbedRelatedEntitiesSearchComponent, VarDirective], - providers: [ + imports: [TranslateModule.forRoot(), NoopAnimationsModule, NgbModule, TabbedRelatedEntitiesSearchComponent, VarDirective], + providers: [ { - provide: ActivatedRoute, - useValue: { - queryParams: observableOf({ tab: mockRelationType }) - }, + provide: ActivatedRoute, + useValue: { + queryParams: observableOf({ tab: mockRelationType }) + }, }, { provide: Router, useValue: router } - ], - schemas: [NO_ERRORS_SCHEMA] -}).compileComponents(); + ], + schemas: [NO_ERRORS_SCHEMA] + }) + .overrideComponent(TabbedRelatedEntitiesSearchComponent, { + remove: { + imports: [ + RelatedEntitiesSearchComponent + ] + } + }) + .compileComponents(); })); beforeEach(() => { diff --git a/src/app/login-page/login-page.component.spec.ts b/src/app/login-page/login-page.component.spec.ts index c02a5d3032..02aa872b48 100644 --- a/src/app/login-page/login-page.component.spec.ts +++ b/src/app/login-page/login-page.component.spec.ts @@ -2,12 +2,14 @@ import { NO_ERRORS_SCHEMA } from '@angular/core'; import { waitForAsync, ComponentFixture, TestBed } from '@angular/core/testing'; import { ActivatedRoute } from '@angular/router'; -import { Store } from '@ngrx/store'; import { TranslateModule } from '@ngx-translate/core'; import { of as observableOf } from 'rxjs'; import { LoginPageComponent } from './login-page.component'; import { ActivatedRouteStub } from '../shared/testing/active-router.stub'; +import { AuthService } from '../core/auth/auth.service'; +import { AuthServiceMock } from '../shared/mocks/auth.service.mock'; +import { provideMockStore } from '@ngrx/store/testing'; describe('LoginPageComponent', () => { let comp: LoginPageComponent; @@ -16,25 +18,19 @@ describe('LoginPageComponent', () => { params: observableOf({}) }); - const store: Store = jasmine.createSpyObj('store', { - /* eslint-disable no-empty,@typescript-eslint/no-empty-function */ - dispatch: {}, - /* eslint-enable no-empty, @typescript-eslint/no-empty-function */ - select: observableOf(true) - }); - beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ - imports: [ + imports: [ TranslateModule.forRoot(), LoginPageComponent - ], - providers: [ + ], + providers: [ { provide: ActivatedRoute, useValue: activatedRouteStub }, - { provide: Store, useValue: store } - ], - schemas: [NO_ERRORS_SCHEMA] -}).compileComponents(); + { provide: AuthService, useValue: new AuthServiceMock() }, + provideMockStore({}) + ], + schemas: [NO_ERRORS_SCHEMA] + }).compileComponents(); })); beforeEach(() => { diff --git a/src/app/logout-page/logout-page.component.spec.ts b/src/app/logout-page/logout-page.component.spec.ts index 1121f44ac1..4037c02992 100644 --- a/src/app/logout-page/logout-page.component.spec.ts +++ b/src/app/logout-page/logout-page.component.spec.ts @@ -3,6 +3,7 @@ import { waitForAsync, ComponentFixture, TestBed } from '@angular/core/testing'; import { TranslateModule } from '@ngx-translate/core'; import { LogoutPageComponent } from './logout-page.component'; +import { provideMockStore } from '@ngrx/store/testing'; describe('LogoutPageComponent', () => { let comp: LogoutPageComponent; @@ -10,12 +11,16 @@ describe('LogoutPageComponent', () => { beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ - imports: [ + imports: [ TranslateModule.forRoot(), LogoutPageComponent - ], - schemas: [NO_ERRORS_SCHEMA] -}).compileComponents(); + ], + providers: [ + provideMockStore() + ], + schemas: [NO_ERRORS_SCHEMA] + }) + .compileComponents(); })); beforeEach(() => { diff --git a/src/app/my-dspace-page/collection-selector/collection-selector.component.spec.ts b/src/app/my-dspace-page/collection-selector/collection-selector.component.spec.ts index 27c6bae5a3..26d4502bfe 100644 --- a/src/app/my-dspace-page/collection-selector/collection-selector.component.spec.ts +++ b/src/app/my-dspace-page/collection-selector/collection-selector.component.spec.ts @@ -1,8 +1,7 @@ /* eslint-disable max-classes-per-file */ import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; -import { ChangeDetectorRef, ElementRef, NO_ERRORS_SCHEMA } from '@angular/core'; +import { ChangeDetectionStrategy, ChangeDetectorRef, Component, ElementRef, NO_ERRORS_SCHEMA } from '@angular/core'; import { ActivatedRoute } from '@angular/router'; -import { By } from '@angular/platform-browser'; import { createPaginatedList } from '../../shared/testing/utils.test'; import { NgbActiveModal } from '@ng-bootstrap/ng-bootstrap'; @@ -24,7 +23,6 @@ import { CollectionDataService } from '../../core/data/collection-data.service'; import { MockElementRef } from '../../shared/testing/element-ref.mock'; import { FindListOptions } from '../../core/data/find-list-options.model'; - describe('CollectionSelectorComponent', () => { let component: CollectionSelectorComponent; let fixture: ComponentFixture; @@ -105,25 +103,32 @@ describe('CollectionSelectorComponent', () => { beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ - imports: [ + imports: [ TranslateModule.forRoot({ - loader: { - provide: TranslateLoader, - useClass: TranslateLoaderMock - } + loader: { + provide: TranslateLoader, + useClass: TranslateLoaderMock + } }), - CollectionSelectorComponent, CollectionDropdownComponent - ], - providers: [ + CollectionSelectorComponent, + // CollectionDropdownComponent, + ], + providers: [ { provide: CollectionDataService, useValue: collectionDataServiceMock }, { provide: ElementRef, useClass: MockElementRef }, { provide: NgbActiveModal, useValue: modal }, { provide: ActivatedRoute, useValue: {} }, + { provide: CollectionDropdownComponent, useClass: CollectionDropdownStubComponent }, ChangeDetectorRef - ], - schemas: [NO_ERRORS_SCHEMA] -}) - .compileComponents(); + ], + schemas: [NO_ERRORS_SCHEMA] + }) + .overrideComponent(CollectionSelectorComponent, { + set: { + changeDetection: ChangeDetectionStrategy.Default + } + }) + .compileComponents(); })); beforeEach(() => { @@ -142,11 +147,13 @@ describe('CollectionSelectorComponent', () => { }); it('should call selectObject', () => { - spyOn(component, 'selectObject'); + spyOn(component, 'selectObject').and.callThrough(); scheduler.schedule(() => fixture.detectChanges()); scheduler.flush(); - const collectionItem = fixture.debugElement.query(By.css('.collection-item:nth-child(2)')); - collectionItem.triggerEventHandler('click', null); + fixture.detectChanges(); + + component.selectObject({collection: {name: 'test', id: 'test', uuid: 'test'}, communities: []}); + expect(component.selectObject).toHaveBeenCalled(); }); @@ -155,3 +162,19 @@ describe('CollectionSelectorComponent', () => { expect((component as any).activeModal.close).toHaveBeenCalled(); }); }); + +@Component({ + selector: 'ds-collection-dropdown', + template: ` + `, + standalone: true +}) +export class CollectionDropdownStubComponent { + test() { + return 'test'; + } +} diff --git a/src/app/my-dspace-page/my-dspace-page.component.spec.ts b/src/app/my-dspace-page/my-dspace-page.component.spec.ts index ba9fcc012f..7a9a4677b1 100644 --- a/src/app/my-dspace-page/my-dspace-page.component.spec.ts +++ b/src/app/my-dspace-page/my-dspace-page.component.spec.ts @@ -1,72 +1,116 @@ import { NO_ERRORS_SCHEMA } from '@angular/core'; import { NoopAnimationsModule } from '@angular/platform-browser/animations'; import { NgbCollapseModule } from '@ng-bootstrap/ng-bootstrap'; -import { ComponentFixture, fakeAsync, flush, TestBed, waitForAsync } from '@angular/core/testing'; +import { + ComponentFixture, + fakeAsync, + flush, + TestBed, + waitForAsync, +} from '@angular/core/testing'; import { RouterTestingModule } from '@angular/router/testing'; import { of as observableOf } from 'rxjs'; import { TranslateModule } from '@ngx-translate/core'; import { cold } from 'jasmine-marbles'; -import { MyDSpacePageComponent, SEARCH_CONFIG_SERVICE } from './my-dspace-page.component'; +import { + MyDSpacePageComponent, + SEARCH_CONFIG_SERVICE, +} from './my-dspace-page.component'; import { SearchService } from '../core/shared/search/search.service'; import { MyDSpaceConfigurationService } from './my-dspace-configuration.service'; import { MyDSpaceConfigurationValueType } from './my-dspace-configuration-value-type'; import { Context } from '../core/shared/context.model'; import SpyObj = jasmine.SpyObj; +import { RoleService } from '../core/roles/role.service'; +import { MyDSpaceNewSubmissionComponent } from './my-dspace-new-submission/my-dspace-new-submission.component'; +import { RoleDirective } from '../shared/roles/role.directive'; +import { ThemeService } from '../shared/theme-support/theme.service'; +import { getMockThemeService } from '../shared/mocks/theme-service.mock'; describe('MyDSpacePageComponent', () => { let comp: MyDSpacePageComponent; let fixture: ComponentFixture; + let roleService: any; - const searchServiceStub: SpyObj = jasmine.createSpyObj('SearchService', { - setServiceOptions: jasmine.createSpy('setServiceOptions') - }); + const searchServiceStub: SpyObj = jasmine.createSpyObj( + 'SearchService', + { + setServiceOptions: jasmine.createSpy('setServiceOptions'), + } + ); - const myDSpaceConfigurationServiceStub: SpyObj = jasmine.createSpyObj('MyDSpaceConfigurationService', { - getAvailableConfigurationOptions: jasmine.createSpy('getAvailableConfigurationOptions') - }); + const myDSpaceConfigurationServiceStub: SpyObj = + jasmine.createSpyObj('MyDSpaceConfigurationService', { + getAvailableConfigurationOptions: jasmine.createSpy( + 'getAvailableConfigurationOptions' + ), + }); const configurationList = [ { value: MyDSpaceConfigurationValueType.Workspace, label: `mydspace.show.${MyDSpaceConfigurationValueType.Workspace}`, - context: Context.Workspace + context: Context.Workspace, }, { value: MyDSpaceConfigurationValueType.Workflow, label: `mydspace.show.${MyDSpaceConfigurationValueType.Workflow}`, - context: Context.Workflow - } + context: Context.Workflow, + }, ]; beforeEach(waitForAsync(() => { + roleService = jasmine.createSpyObj('roleService', { + checkRole: ()=> observableOf(true) + }); TestBed.configureTestingModule({ - imports: [TranslateModule.forRoot(), RouterTestingModule.withRoutes([]), NoopAnimationsModule, NgbCollapseModule, MyDSpacePageComponent], - providers: [ + imports: [ + TranslateModule.forRoot(), + RouterTestingModule.withRoutes([]), + NoopAnimationsModule, + NgbCollapseModule, + MyDSpacePageComponent, + RoleDirective + ], + providers: [ { provide: SearchService, useValue: searchServiceStub }, - { provide: MyDSpaceConfigurationService, useValue: myDSpaceConfigurationServiceStub }, - ], - schemas: [NO_ERRORS_SCHEMA] -}).overrideComponent(MyDSpacePageComponent, { - set: { - providers: [ - { - provide: SEARCH_CONFIG_SERVICE, - useValue: myDSpaceConfigurationServiceStub - } - ] - } - }).compileComponents(); + { + provide: MyDSpaceConfigurationService, + useValue: myDSpaceConfigurationServiceStub, + }, + { provide: RoleService, useValue: roleService }, + { provide: ThemeService, useValue: getMockThemeService() }, + ], + schemas: [NO_ERRORS_SCHEMA], + }) + .overrideComponent(MyDSpacePageComponent, { + set: { + providers: [ + { + provide: SEARCH_CONFIG_SERVICE, + useValue: myDSpaceConfigurationServiceStub, + }, + ], + }, + }) + .overrideComponent(MyDSpacePageComponent, { + remove: { + imports: [MyDSpaceNewSubmissionComponent], + }, + }) + .compileComponents(); })); beforeEach(() => { fixture = TestBed.createComponent(MyDSpacePageComponent); comp = fixture.componentInstance; // SearchPageComponent test instance - myDSpaceConfigurationServiceStub.getAvailableConfigurationOptions.and.returnValue(observableOf(configurationList)); + myDSpaceConfigurationServiceStub.getAvailableConfigurationOptions.and.returnValue( + observableOf(configurationList) + ); fixture.detectChanges(); - }); afterEach(() => { @@ -74,14 +118,14 @@ describe('MyDSpacePageComponent', () => { }); it('should init properly context and configuration', fakeAsync(() => { - - expect(comp.configurationList$).toBeObservable(cold('(a|)', { - a: configurationList - })); + expect(comp.configurationList$).toBeObservable( + cold('(a|)', { + a: configurationList, + }) + ); flush(); expect(comp.configuration).toBe(MyDSpaceConfigurationValueType.Workspace); expect(comp.context).toBe(Context.Workspace); })); - }); diff --git a/src/app/process-page/form/process-form.component.spec.ts b/src/app/process-page/form/process-form.component.spec.ts index 08ec04ba88..82763438d7 100644 --- a/src/app/process-page/form/process-form.component.spec.ts +++ b/src/app/process-page/form/process-form.component.spec.ts @@ -13,7 +13,9 @@ import { of as observableOf } from 'rxjs'; import { NotificationsServiceStub } from '../../shared/testing/notifications-service.stub'; import { TranslateLoaderMock } from '../../shared/mocks/translate-loader.mock'; import { RequestService } from '../../core/data/request.service'; -import { Router } from '@angular/router'; +import { ActivatedRoute, Router } from '@angular/router'; +import { ActivatedRouteStub } from '../../shared/testing/active-router.stub'; +import { ScriptsSelectComponent } from './scripts-select/scripts-select.component'; describe('ProcessFormComponent', () => { let component: ProcessFormComponent; @@ -51,24 +53,32 @@ describe('ProcessFormComponent', () => { beforeEach(waitForAsync(() => { init(); TestBed.configureTestingModule({ - imports: [ + imports: [ FormsModule, TranslateModule.forRoot({ - loader: { - provide: TranslateLoader, - useClass: TranslateLoaderMock - } + loader: { + provide: TranslateLoader, + useClass: TranslateLoaderMock + } }), ProcessFormComponent - ], - providers: [ + ], + providers: [ { provide: ScriptDataService, useValue: scriptService }, { provide: NotificationsService, useClass: NotificationsServiceStub }, { provide: RequestService, useValue: jasmine.createSpyObj('requestService', ['removeBySubstring', 'removeByHrefSubstring']) }, { provide: Router, useValue: jasmine.createSpyObj('router', ['navigateByUrl']) }, - ], - schemas: [NO_ERRORS_SCHEMA] -}) + { provide: ActivatedRoute, useValue: new ActivatedRouteStub() }, + ], + schemas: [NO_ERRORS_SCHEMA] + }) + .overrideComponent(ProcessFormComponent, { + remove: { + imports: [ + ScriptsSelectComponent + ] + } + }) .compileComponents(); })); diff --git a/src/app/process-page/new/new-process.component.spec.ts b/src/app/process-page/new/new-process.component.spec.ts index 948d643c10..69b6ede571 100644 --- a/src/app/process-page/new/new-process.component.spec.ts +++ b/src/app/process-page/new/new-process.component.spec.ts @@ -17,6 +17,8 @@ import { ActivatedRoute } from '@angular/router'; import { LinkService } from '../../core/cache/builders/link.service'; import { VarDirective } from '../../shared/utils/var.directive'; import { ProcessDataService } from '../../core/data/processes/process-data.service'; +import { createSuccessfulRemoteDataObject$ } from '../../shared/remote-data.utils'; +import { ProcessFormComponent } from '../form/process-form.component'; describe('NewProcessComponent', () => { let component: NewProcessComponent; @@ -39,10 +41,11 @@ describe('NewProcessComponent', () => { { invoke: observableOf({ response: - { - isSuccessful: true - } - }) + { + isSuccessful: true + } + }), + findAll: createSuccessfulRemoteDataObject$(script), } ); } @@ -50,26 +53,31 @@ describe('NewProcessComponent', () => { beforeEach(waitForAsync(() => { init(); TestBed.configureTestingModule({ - imports: [ + imports: [ FormsModule, TranslateModule.forRoot({ - loader: { - provide: TranslateLoader, - useClass: TranslateLoaderMock - } + loader: { + provide: TranslateLoader, + useClass: TranslateLoaderMock + } }), NewProcessComponent, VarDirective - ], - providers: [ + ], + providers: [ { provide: ScriptDataService, useValue: scriptService }, { provide: NotificationsService, useClass: NotificationsServiceStub }, { provide: RequestService, useValue: {} }, { provide: ActivatedRoute, useValue: { snapshot: { queryParams: {} } } }, { provide: LinkService, useValue: {} }, { provide: ProcessDataService, useValue: {} }, - ], - schemas: [NO_ERRORS_SCHEMA] -}) + ], + schemas: [NO_ERRORS_SCHEMA] + }) + .overrideComponent(NewProcessComponent, { + remove: { + imports: [ProcessFormComponent] + } + }) .compileComponents(); })); diff --git a/src/app/profile-page/profile-page-metadata-form/profile-page-metadata-form.component.spec.ts b/src/app/profile-page/profile-page-metadata-form/profile-page-metadata-form.component.spec.ts index 89347789e9..ae957e4c21 100644 --- a/src/app/profile-page/profile-page-metadata-form/profile-page-metadata-form.component.spec.ts +++ b/src/app/profile-page/profile-page-metadata-form/profile-page-metadata-form.component.spec.ts @@ -11,7 +11,7 @@ import { EPersonDataService } from '../../core/eperson/eperson-data.service'; import cloneDeep from 'lodash/cloneDeep'; import { createSuccessfulRemoteDataObject$ } from '../../shared/remote-data.utils'; import { FormComponent } from '../../shared/form/form.component'; -import { ConfigurationDataService } from 'src/app/core/data/configuration-data.service'; +import { ConfigurationDataService } from '../../core/data/configuration-data.service'; import { of } from 'rxjs'; describe('ProfilePageMetadataFormComponent', () => { diff --git a/src/app/register-page/register-email/register-email.component.spec.ts b/src/app/register-page/register-email/register-email.component.spec.ts index 234951a6cc..a8e3b640cf 100644 --- a/src/app/register-page/register-email/register-email.component.spec.ts +++ b/src/app/register-page/register-email/register-email.component.spec.ts @@ -4,6 +4,7 @@ import { TranslateModule } from '@ngx-translate/core'; import { ReactiveFormsModule } from '@angular/forms'; import { CUSTOM_ELEMENTS_SCHEMA } from '@angular/core'; import { RegisterEmailComponent } from './register-email.component'; +import { RegisterEmailFormComponent } from '../../register-email-form/register-email-form.component'; describe('RegisterEmailComponent', () => { @@ -12,9 +13,15 @@ describe('RegisterEmailComponent', () => { beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ - imports: [CommonModule, TranslateModule.forRoot(), ReactiveFormsModule, RegisterEmailComponent], - schemas: [CUSTOM_ELEMENTS_SCHEMA] -}).compileComponents(); + imports: [CommonModule, TranslateModule.forRoot(), ReactiveFormsModule, RegisterEmailComponent], + schemas: [CUSTOM_ELEMENTS_SCHEMA] + }) + .overrideComponent(RegisterEmailComponent, { + remove: { + imports: [RegisterEmailFormComponent] + } + }) + .compileComponents(); })); beforeEach(() => { fixture = TestBed.createComponent(RegisterEmailComponent); diff --git a/src/app/request-copy/deny-request-copy/deny-request-copy.component.spec.ts b/src/app/request-copy/deny-request-copy/deny-request-copy.component.spec.ts index 9bcd49499a..11da26d9c6 100644 --- a/src/app/request-copy/deny-request-copy/deny-request-copy.component.spec.ts +++ b/src/app/request-copy/deny-request-copy/deny-request-copy.component.spec.ts @@ -21,6 +21,8 @@ import { EPerson } from '../../core/eperson/models/eperson.model'; import { Item } from '../../core/shared/item.model'; import { RequestCopyEmail } from '../email-request-copy/request-copy-email.model'; import { DSONameServiceMock } from '../../shared/mocks/dso-name.service.mock'; +import { ThemeService } from '../../shared/theme-support/theme.service'; +import { getMockThemeService } from '../../shared/mocks/theme-service.mock'; describe('DenyRequestCopyComponent', () => { let component: DenyRequestCopyComponent; @@ -108,6 +110,7 @@ describe('DenyRequestCopyComponent', () => { { provide: DSONameService, useValue: new DSONameServiceMock() }, { provide: ItemRequestDataService, useValue: itemRequestService }, { provide: NotificationsService, useValue: notificationsService }, + { provide: ThemeService, useValue: getMockThemeService() }, ], schemas: [NO_ERRORS_SCHEMA] }).compileComponents(); diff --git a/src/app/request-copy/grant-request-copy/grant-request-copy.component.spec.ts b/src/app/request-copy/grant-request-copy/grant-request-copy.component.spec.ts index ac31a459b0..7e5b25e8d9 100644 --- a/src/app/request-copy/grant-request-copy/grant-request-copy.component.spec.ts +++ b/src/app/request-copy/grant-request-copy/grant-request-copy.component.spec.ts @@ -21,6 +21,8 @@ import { Item } from '../../core/shared/item.model'; import { RequestCopyEmail } from '../email-request-copy/request-copy-email.model'; import { GrantRequestCopyComponent } from './grant-request-copy.component'; import { DSONameServiceMock } from '../../shared/mocks/dso-name.service.mock'; +import { getMockThemeService } from '../../shared/mocks/theme-service.mock'; +import { ThemeService } from '../../shared/theme-support/theme.service'; describe('GrantRequestCopyComponent', () => { let component: GrantRequestCopyComponent; @@ -108,6 +110,7 @@ describe('GrantRequestCopyComponent', () => { { provide: DSONameService, useValue: new DSONameServiceMock() }, { provide: ItemRequestDataService, useValue: itemRequestService }, { provide: NotificationsService, useValue: notificationsService }, + { provide: ThemeService, useValue: getMockThemeService() }, ], schemas: [NO_ERRORS_SCHEMA] }).compileComponents(); diff --git a/src/app/root/root.component.spec.ts b/src/app/root/root.component.spec.ts index 60fdf8f6a9..0d37633c7c 100644 --- a/src/app/root/root.component.spec.ts +++ b/src/app/root/root.component.spec.ts @@ -27,6 +27,8 @@ import { RouteService } from '../core/services/route.service'; import { CUSTOM_ELEMENTS_SCHEMA } from '@angular/core'; import { MenuServiceStub } from '../shared/testing/menu-service.stub'; import { NoopAnimationsModule } from '@angular/platform-browser/animations'; +import { NotificationsBoardComponent } from '../shared/notifications/notifications-board/notifications-board.component'; +import { SystemWideAlertBannerComponent } from '../system-wide-alert/alert-banner/system-wide-alert-banner.component'; describe('RootComponent', () => { let component: RootComponent; @@ -62,7 +64,13 @@ describe('RootComponent', () => { RouteService ], schemas: [CUSTOM_ELEMENTS_SCHEMA] -}).compileComponents(); +}) +.overrideComponent(RootComponent, { + remove: { + imports: [NotificationsBoardComponent, SystemWideAlertBannerComponent] + } +}) +.compileComponents(); }); beforeEach(() => { diff --git a/src/app/shared/auth-nav-menu/auth-nav-menu.component.spec.ts b/src/app/shared/auth-nav-menu/auth-nav-menu.component.spec.ts index 587e1c9f52..5cbcd28517 100644 --- a/src/app/shared/auth-nav-menu/auth-nav-menu.component.spec.ts +++ b/src/app/shared/auth-nav-menu/auth-nav-menu.component.spec.ts @@ -16,6 +16,8 @@ import { AuthTokenInfo } from '../../core/auth/models/auth-token-info.model'; import { AuthService } from '../../core/auth/auth.service'; import { of } from 'rxjs'; import { BrowserOnlyMockPipe } from '../testing/browser-only-mock.pipe'; +import { ActivatedRoute } from '@angular/router'; +import { ActivatedRouteStub } from '../testing/active-router.stub'; describe('AuthNavMenuComponent', () => { @@ -77,18 +79,18 @@ describe('AuthNavMenuComponent', () => { }), TranslateModule.forRoot(), AuthNavMenuComponent - ], - declarations: [BrowserOnlyMockPipe], - providers: [ - { provide: HostWindowService, useValue: window }, - { provide: AuthService, useValue: authService } - ], - schemas: [ - CUSTOM_ELEMENTS_SCHEMA - ] -}) + ], + declarations: [BrowserOnlyMockPipe], + providers: [ + { provide: HostWindowService, useValue: window }, + { provide: AuthService, useValue: authService }, + { provide: ActivatedRoute, useValue: new ActivatedRouteStub() }, + ], + schemas: [ + CUSTOM_ELEMENTS_SCHEMA + ] + }) .compileComponents(); - })); beforeEach(() => { @@ -273,7 +275,8 @@ describe('AuthNavMenuComponent', () => { ], providers: [ { provide: HostWindowService, useValue: window }, - { provide: AuthService, useValue: authService } + { provide: AuthService, useValue: authService }, + { provide: ActivatedRoute, useValue: new ActivatedRouteStub() }, ], schemas: [ CUSTOM_ELEMENTS_SCHEMA diff --git a/src/app/shared/auth-nav-menu/user-menu/user-menu.component.spec.ts b/src/app/shared/auth-nav-menu/user-menu/user-menu.component.spec.ts index 164bfbc34f..4fd4e6341e 100644 --- a/src/app/shared/auth-nav-menu/user-menu/user-menu.component.spec.ts +++ b/src/app/shared/auth-nav-menu/user-menu/user-menu.component.spec.ts @@ -14,6 +14,8 @@ import { cold } from 'jasmine-marbles'; import { By } from '@angular/platform-browser'; import { AuthService } from '../../../core/auth/auth.service'; import { of } from 'rxjs'; +import { ActivatedRoute } from '@angular/router'; +import { ActivatedRouteStub } from '../../testing/active-router.stub'; describe('UserMenuComponent', () => { @@ -70,7 +72,8 @@ describe('UserMenuComponent', () => { UserMenuComponent ], providers: [ - { provide: AuthService, useValue: authService } + { provide: AuthService, useValue: authService }, + { provide: ActivatedRoute, useValue: new ActivatedRouteStub() }, ], schemas: [ NO_ERRORS_SCHEMA @@ -116,8 +119,8 @@ describe('UserMenuComponent', () => { expect(component.user$).toBeObservable(cold('(c|)', { c: EPersonMock })); - - expect(deUserMenu).toBeNull(); + const span = deUserMenu.query(By.css('.dropdown-item-text')); + expect(span).toBeNull(); }); }); diff --git a/src/app/shared/dso-page/dso-edit-menu/dso-edit-expandable-menu-section/dso-edit-menu-expandable-section.component.spec.ts b/src/app/shared/dso-page/dso-edit-menu/dso-edit-expandable-menu-section/dso-edit-menu-expandable-section.component.spec.ts index b9e0165ca2..4fa9cbedea 100644 --- a/src/app/shared/dso-page/dso-edit-menu/dso-edit-expandable-menu-section/dso-edit-menu-expandable-section.component.spec.ts +++ b/src/app/shared/dso-page/dso-edit-menu/dso-edit-expandable-menu-section/dso-edit-menu-expandable-section.component.spec.ts @@ -10,7 +10,7 @@ import { of as observableOf } from 'rxjs'; import { Component } from '@angular/core'; import { DsoEditMenuExpandableSectionComponent } from './dso-edit-menu-expandable-section.component'; import { By } from '@angular/platform-browser'; -import { MenuItemType } from 'src/app/shared/menu/menu-item-type.model'; +import { MenuItemType } from '../../../../shared/menu/menu-item-type.model'; describe('DsoEditMenuExpandableSectionComponent', () => { let component: DsoEditMenuExpandableSectionComponent; diff --git a/src/app/shared/dso-page/dso-edit-menu/dso-edit-menu-section/dso-edit-menu-section.component.spec.ts b/src/app/shared/dso-page/dso-edit-menu/dso-edit-menu-section/dso-edit-menu-section.component.spec.ts index a43371127d..2e662b9d27 100644 --- a/src/app/shared/dso-page/dso-edit-menu/dso-edit-menu-section/dso-edit-menu-section.component.spec.ts +++ b/src/app/shared/dso-page/dso-edit-menu/dso-edit-menu-section/dso-edit-menu-section.component.spec.ts @@ -10,7 +10,7 @@ import { Component } from '@angular/core'; import { By } from '@angular/platform-browser'; import { DsoEditMenuSectionComponent } from './dso-edit-menu-section.component'; import { OnClickMenuItemModel } from '../../../menu/menu-item/models/onclick.model'; -import { MenuItemType } from 'src/app/shared/menu/menu-item-type.model'; +import { MenuItemType } from '../../../../shared/menu/menu-item-type.model'; import { ActivatedRouteStub } from '../../../testing/active-router.stub'; import { TranslateModule } from '@ngx-translate/core'; diff --git a/src/app/shared/dso-selector/modal-wrappers/edit-collection-selector/edit-collection-selector.component.spec.ts b/src/app/shared/dso-selector/modal-wrappers/edit-collection-selector/edit-collection-selector.component.spec.ts index 2a7b67a018..4d84fe3b28 100644 --- a/src/app/shared/dso-selector/modal-wrappers/edit-collection-selector/edit-collection-selector.component.spec.ts +++ b/src/app/shared/dso-selector/modal-wrappers/edit-collection-selector/edit-collection-selector.component.spec.ts @@ -8,6 +8,7 @@ import { EditCollectionSelectorComponent } from './edit-collection-selector.comp import { Collection } from '../../../../core/shared/collection.model'; import { MetadataValue } from '../../../../core/shared/metadata.models'; import { createSuccessfulRemoteDataObject } from '../../../remote-data.utils'; +import { DSOSelectorComponent } from '../../dso-selector/dso-selector.component'; describe('EditCollectionSelectorComponent', () => { let component: EditCollectionSelectorComponent; @@ -29,27 +30,33 @@ describe('EditCollectionSelectorComponent', () => { beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ - imports: [TranslateModule.forRoot(), EditCollectionSelectorComponent], - providers: [ + imports: [TranslateModule.forRoot(), EditCollectionSelectorComponent], + providers: [ { provide: NgbActiveModal, useValue: modalStub }, { - provide: ActivatedRoute, - useValue: { - root: { - snapshot: { - data: { - dso: collectionRD, - }, - }, - } - }, + provide: ActivatedRoute, + useValue: { + root: { + snapshot: { + data: { + dso: collectionRD, + }, + }, + } + }, }, { - provide: Router, useValue: router + provide: Router, useValue: router } - ], - schemas: [NO_ERRORS_SCHEMA] -}).compileComponents(); + ], + schemas: [NO_ERRORS_SCHEMA] + }) + .overrideComponent(EditCollectionSelectorComponent, { + remove: { + imports: [DSOSelectorComponent] + } + }) + .compileComponents(); })); diff --git a/src/app/shared/dso-selector/modal-wrappers/edit-community-selector/edit-community-selector.component.spec.ts b/src/app/shared/dso-selector/modal-wrappers/edit-community-selector/edit-community-selector.component.spec.ts index 9dbb1c24b8..de4f21d029 100644 --- a/src/app/shared/dso-selector/modal-wrappers/edit-community-selector/edit-community-selector.component.spec.ts +++ b/src/app/shared/dso-selector/modal-wrappers/edit-community-selector/edit-community-selector.component.spec.ts @@ -8,6 +8,7 @@ import { EditCommunitySelectorComponent } from './edit-community-selector.compon import { Community } from '../../../../core/shared/community.model'; import { MetadataValue } from '../../../../core/shared/metadata.models'; import { createSuccessfulRemoteDataObject } from '../../../remote-data.utils'; +import { DSOSelectorComponent } from '../../dso-selector/dso-selector.component'; describe('EditCommunitySelectorComponent', () => { let component: EditCommunitySelectorComponent; @@ -49,7 +50,13 @@ describe('EditCommunitySelectorComponent', () => { } ], schemas: [NO_ERRORS_SCHEMA] -}).compileComponents(); +}) +.overrideComponent(EditCommunitySelectorComponent, { + remove: { + imports: [DSOSelectorComponent] + } +}) +.compileComponents(); })); diff --git a/src/app/shared/dso-selector/modal-wrappers/edit-item-selector/edit-item-selector.component.spec.ts b/src/app/shared/dso-selector/modal-wrappers/edit-item-selector/edit-item-selector.component.spec.ts index f4c16ab3f6..594d76e328 100644 --- a/src/app/shared/dso-selector/modal-wrappers/edit-item-selector/edit-item-selector.component.spec.ts +++ b/src/app/shared/dso-selector/modal-wrappers/edit-item-selector/edit-item-selector.component.spec.ts @@ -8,6 +8,7 @@ import { Item } from '../../../../core/shared/item.model'; import { RouterStub } from '../../../testing/router.stub'; import { MetadataValue } from '../../../../core/shared/metadata.models'; import { createSuccessfulRemoteDataObject } from '../../../remote-data.utils'; +import { DSOSelectorComponent } from '../../dso-selector/dso-selector.component'; describe('EditItemSelectorComponent', () => { let component: EditItemSelectorComponent; @@ -16,36 +17,49 @@ describe('EditItemSelectorComponent', () => { const item = new Item(); item.uuid = '1234-1234-1234-1234'; - item.metadata = { 'dc.title': [Object.assign(new MetadataValue(), { value: 'Item title', language: undefined })] }; + item.metadata = { + 'dc.title': [ + Object.assign(new MetadataValue(), { + value: 'Item title', + language: undefined, + }), + ], + }; const router = new RouterStub(); const itemRD = createSuccessfulRemoteDataObject(item); const modalStub = jasmine.createSpyObj('modalStub', ['close']); const editPath = '/items/1234-1234-1234-1234/edit'; - beforeEach(waitForAsync(() => { - TestBed.configureTestingModule({ - imports: [TranslateModule.forRoot(), EditItemSelectorComponent], - providers: [ + beforeEach(waitForAsync(async () => { + await TestBed.configureTestingModule({ + imports: [TranslateModule.forRoot(), EditItemSelectorComponent], + providers: [ { provide: NgbActiveModal, useValue: modalStub }, { - provide: ActivatedRoute, - useValue: { - root: { - snapshot: { - data: { - dso: itemRD, - }, - }, - } + provide: ActivatedRoute, + useValue: { + root: { + snapshot: { + data: { + dso: itemRD, + }, + }, }, + }, }, { - provide: Router, useValue: router - } - ], - schemas: [NO_ERRORS_SCHEMA] -}).compileComponents(); - + provide: Router, + useValue: router, + }, + ], + schemas: [NO_ERRORS_SCHEMA], + }) + .overrideComponent(EditItemSelectorComponent, { + remove: { + imports: [DSOSelectorComponent], + }, + }) + .compileComponents(); })); beforeEach(() => { @@ -63,5 +77,4 @@ describe('EditItemSelectorComponent', () => { component.navigate(item); expect(router.navigate).toHaveBeenCalledWith([editPath]); }); - }); diff --git a/src/app/shared/dso-selector/modal-wrappers/export-batch-selector/export-batch-selector.component.spec.ts b/src/app/shared/dso-selector/modal-wrappers/export-batch-selector/export-batch-selector.component.spec.ts index d3b8076878..77c56be4f9 100644 --- a/src/app/shared/dso-selector/modal-wrappers/export-batch-selector/export-batch-selector.component.spec.ts +++ b/src/app/shared/dso-selector/modal-wrappers/export-batch-selector/export-batch-selector.component.spec.ts @@ -20,6 +20,8 @@ import { } from '../../../remote-data.utils'; import { ExportBatchSelectorComponent } from './export-batch-selector.component'; import { AuthorizationDataService } from '../../../../core/data/feature-authorization/authorization-data.service'; +import { SearchService } from '../../../../core/shared/search/search.service'; +import { SearchServiceStub } from '../../../../shared/testing/search-service.stub'; // No way to add entryComponents yet to testbed; alternative implemented; source: https://stackoverflow.com/questions/41689468/how-to-shallow-test-a-component-with-an-entrycomponents @NgModule({ @@ -90,6 +92,7 @@ describe('ExportBatchSelectorComponent', () => { { provide: NotificationsService, useValue: notificationService }, { provide: ScriptDataService, useValue: scriptService }, { provide: AuthorizationDataService, useValue: authorizationDataService }, + { provide: SearchService, useValue: new SearchServiceStub()}, { provide: ActivatedRoute, useValue: { diff --git a/src/app/shared/dso-selector/modal-wrappers/import-batch-selector/import-batch-selector.component.spec.ts b/src/app/shared/dso-selector/modal-wrappers/import-batch-selector/import-batch-selector.component.spec.ts index 858005eb31..39093fa44e 100644 --- a/src/app/shared/dso-selector/modal-wrappers/import-batch-selector/import-batch-selector.component.spec.ts +++ b/src/app/shared/dso-selector/modal-wrappers/import-batch-selector/import-batch-selector.component.spec.ts @@ -6,6 +6,12 @@ import { NgbActiveModal } from '@ng-bootstrap/ng-bootstrap'; import { Collection } from '../../../../core/shared/collection.model'; import { Item } from '../../../../core/shared/item.model'; import { ImportBatchSelectorComponent } from './import-batch-selector.component'; +import { SearchService } from '../../../../core/shared/search/search.service'; +import { SearchServiceStub } from '../../../../shared/testing/search-service.stub'; +import { NotificationsService } from '../../../../shared/notifications/notifications.service'; +import { NotificationsServiceStub } from '../../../../shared/testing/notifications-service.stub'; +import { ThemeService } from '../../../../shared/theme-support/theme.service'; +import { getMockThemeService } from '../../../../shared/mocks/theme-service.mock'; describe('ImportBatchSelectorComponent', () => { let component: ImportBatchSelectorComponent; @@ -35,6 +41,9 @@ describe('ImportBatchSelectorComponent', () => { imports: [TranslateModule.forRoot(), RouterTestingModule.withRoutes([]), ImportBatchSelectorComponent], providers: [ { provide: NgbActiveModal, useValue: modalStub }, + { provide: SearchService, useValue: new SearchServiceStub() }, + { provide: NotificationsService, useValue: new NotificationsServiceStub() }, + { provide: ThemeService, useValue: getMockThemeService() }, ], schemas: [NO_ERRORS_SCHEMA] }).compileComponents(); diff --git a/src/app/shared/entity-dropdown/entity-dropdown.component.spec.ts b/src/app/shared/entity-dropdown/entity-dropdown.component.spec.ts index b7773b6083..0aada21192 100644 --- a/src/app/shared/entity-dropdown/entity-dropdown.component.spec.ts +++ b/src/app/shared/entity-dropdown/entity-dropdown.component.spec.ts @@ -8,6 +8,10 @@ import { EntityTypeDataService } from '../../core/data/entity-type-data.service' import { TestScheduler } from 'rxjs/testing'; import { By } from '@angular/platform-browser'; import { createPaginatedList } from '../testing/utils.test'; +import { InfiniteScrollModule } from 'ngx-infinite-scroll'; +import { AsyncPipe } from '@angular/common'; +import { ThemedLoadingComponent } from '../loading/themed-loading.component'; +import { TranslateModule } from '@ngx-translate/core'; // eslint-disable-next-line @angular-eslint/pipe-prefix @Pipe({ @@ -75,14 +79,26 @@ describe('EntityDropdownComponent', () => { beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ - imports: [EntityDropdownComponent, MockTranslatePipe], - providers: [ + imports: [ + EntityDropdownComponent, + MockTranslatePipe, + InfiniteScrollModule, + ThemedLoadingComponent, + AsyncPipe, + TranslateModule.forRoot(), + ], + providers: [ { provide: EntityTypeDataService, useValue: entityTypeServiceMock }, - ChangeDetectorRef - ], - schemas: [NO_ERRORS_SCHEMA] -}) - .compileComponents(); + ChangeDetectorRef, + ], + schemas: [NO_ERRORS_SCHEMA], + }) + .overrideComponent(EntityDropdownComponent, { + add: { + imports: [MockTranslatePipe] + } + }) + .compileComponents(); })); beforeEach(() => { diff --git a/src/app/shared/entity-dropdown/entity-dropdown.component.ts b/src/app/shared/entity-dropdown/entity-dropdown.component.ts index d633b5c210..ef232a0a16 100644 --- a/src/app/shared/entity-dropdown/entity-dropdown.component.ts +++ b/src/app/shared/entity-dropdown/entity-dropdown.component.ts @@ -1,7 +1,6 @@ import { ChangeDetectorRef, Component, - ElementRef, EventEmitter, HostListener, Input, @@ -90,12 +89,10 @@ export class EntityDropdownComponent implements OnInit, OnDestroy { * * @param {ChangeDetectorRef} changeDetectorRef * @param {EntityTypeDataService} entityTypeService - * @param {ElementRef} el */ constructor( private changeDetectorRef: ChangeDetectorRef, private entityTypeService: EntityTypeDataService, - private el: ElementRef ) { } /** diff --git a/src/app/shared/eperson-group-list/eperson-group-list.component.spec.ts b/src/app/shared/eperson-group-list/eperson-group-list.component.spec.ts index 09fa2ea181..96ac9f9378 100644 --- a/src/app/shared/eperson-group-list/eperson-group-list.component.spec.ts +++ b/src/app/shared/eperson-group-list/eperson-group-list.component.spec.ts @@ -21,6 +21,9 @@ import { PageInfo } from '../../core/shared/page-info.model'; import { NoopAnimationsModule } from '@angular/platform-browser/animations'; import { PaginationService } from '../../core/pagination/pagination.service'; import { PaginationServiceStub } from '../testing/pagination-service.stub'; +import { EpersonSearchBoxComponent } from './eperson-search-box/eperson-search-box.component'; +import { GroupSearchBoxComponent } from './group-search-box/group-search-box.component'; +import { PaginationComponent } from '../pagination/pagination.component'; describe('EpersonGroupListComponent test suite', () => { let comp: EpersonGroupListComponent; @@ -67,25 +70,33 @@ describe('EpersonGroupListComponent test suite', () => { beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ - imports: [ + imports: [ NoopAnimationsModule, TranslateModule.forRoot(), EpersonGroupListComponent, - TestComponent - ], - providers: [ + TestComponent, + ], + providers: [ { provide: EPersonDataService, useValue: mockEpersonService }, { provide: GroupDataService, useValue: mockGroupService }, { provide: RequestService, useValue: getMockRequestService() }, { provide: PaginationService, useValue: paginationService }, EpersonGroupListComponent, ChangeDetectorRef, - Injector - ], - schemas: [ - NO_ERRORS_SCHEMA - ] -}).compileComponents(); + Injector, + ], + schemas: [NO_ERRORS_SCHEMA], + }) + .overrideComponent(EpersonGroupListComponent, { + remove: { + imports: [ + EpersonSearchBoxComponent, + GroupSearchBoxComponent, + PaginationComponent, + ], + }, + }) + .compileComponents(); })); describe('', () => { diff --git a/src/app/shared/error/error.component.spec.ts b/src/app/shared/error/error.component.spec.ts index c6e0ed42b2..e8314f82d3 100644 --- a/src/app/shared/error/error.component.spec.ts +++ b/src/app/shared/error/error.component.spec.ts @@ -7,6 +7,8 @@ import { TranslateLoader, TranslateModule, TranslateService } from '@ngx-transla import { TranslateLoaderMock } from '../mocks/translate-loader.mock'; import { ErrorComponent } from './error.component'; +import { CommonModule } from '@angular/common'; +import { NoopAnimationsModule } from '@angular/platform-browser/animations'; describe('ErrorComponent (inline template)', () => { @@ -17,17 +19,19 @@ describe('ErrorComponent (inline template)', () => { beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ - imports: [ + imports: [ + CommonModule, + NoopAnimationsModule, TranslateModule.forRoot({ - loader: { - provide: TranslateLoader, - useClass: TranslateLoaderMock - } + loader: { + provide: TranslateLoader, + useClass: TranslateLoaderMock + } }), ErrorComponent - ], - providers: [TranslateService] -}).compileComponents(); // compile template and css + ], + providers: [TranslateService] + }).compileComponents(); // compile template and css })); beforeEach(() => { diff --git a/src/app/shared/file-download-link/file-download-link.component.spec.ts b/src/app/shared/file-download-link/file-download-link.component.spec.ts index 79ca42f402..719635424b 100644 --- a/src/app/shared/file-download-link/file-download-link.component.spec.ts +++ b/src/app/shared/file-download-link/file-download-link.component.spec.ts @@ -25,34 +25,34 @@ describe('FileDownloadLinkComponent', () => { function init() { authorizationService = jasmine.createSpyObj('authorizationService', { - isAuthorized: cold('-a', {a: true}) + isAuthorized: cold('-a', { a: true }) }); bitstream = Object.assign(new Bitstream(), { uuid: 'bitstreamUuid', _links: { - self: {href: 'obj-selflink'} + self: { href: 'obj-selflink' } } }); item = Object.assign(new Item(), { uuid: 'itemUuid', _links: { - self: {href: 'obj-selflink'} + self: { href: 'obj-selflink' } } }); } function initTestbed() { TestBed.configureTestingModule({ - imports: [FileDownloadLinkComponent, RouterLinkDirectiveStub], - providers: [ - RouterLinkDirectiveStub, + imports: [FileDownloadLinkComponent,], + providers: [ + RouterLinkDirectiveStub, { provide: AuthorizationDataService, useValue: authorizationService }, - { provide: ActivatedRoute, useValue: new ActivatedRouteStub()} - ] -}) + { provide: ActivatedRoute, useValue: new ActivatedRouteStub() } + ] + }) .overrideComponent(FileDownloadLinkComponent, { - remove: {imports: [RouterLink]}, - add: {imports: [RouterLinkDirectiveStub]} + remove: { imports: [RouterLink] }, + add: { imports: [RouterLinkDirectiveStub] } }) .compileComponents(); } @@ -74,8 +74,8 @@ describe('FileDownloadLinkComponent', () => { fixture.detectChanges(); }); it('should return the bitstreamPath based on the input bitstream', () => { - expect(component.bitstreamPath$).toBeObservable(cold('-a', {a: { routerLink: new URLCombiner(getBitstreamModuleRoute(), bitstream.uuid, 'download').toString(), queryParams: {} }})); - expect(component.canDownload$).toBeObservable(cold('--a', {a: true})); + expect(component.bitstreamPath$).toBeObservable(cold('-a', { a: { routerLink: new URLCombiner(getBitstreamModuleRoute(), bitstream.uuid, 'download').toString(), queryParams: {} } })); + expect(component.canDownload$).toBeObservable(cold('--a', { a: true })); }); it('should init the component', () => { @@ -93,9 +93,9 @@ describe('FileDownloadLinkComponent', () => { init(); (authorizationService.isAuthorized as jasmine.Spy).and.callFake((featureId, object) => { if (featureId === FeatureID.CanDownload) { - return cold('-a', {a: false}); + return cold('-a', { a: false }); } - return cold('-a', {a: true}); + return cold('-a', { a: true }); }); initTestbed(); })); @@ -107,8 +107,8 @@ describe('FileDownloadLinkComponent', () => { fixture.detectChanges(); }); it('should return the bitstreamPath based on the input bitstream', () => { - expect(component.bitstreamPath$).toBeObservable(cold('-a', {a: { routerLink: new URLCombiner(getItemModuleRoute(), item.uuid, 'request-a-copy').toString(), queryParams: { bitstream: bitstream.uuid } }})); - expect(component.canDownload$).toBeObservable(cold('--a', {a: false})); + expect(component.bitstreamPath$).toBeObservable(cold('-a', { a: { routerLink: new URLCombiner(getItemModuleRoute(), item.uuid, 'request-a-copy').toString(), queryParams: { bitstream: bitstream.uuid } } })); + expect(component.canDownload$).toBeObservable(cold('--a', { a: false })); }); it('should init the component', () => { @@ -124,7 +124,7 @@ describe('FileDownloadLinkComponent', () => { beforeEach(waitForAsync(() => { scheduler = getTestScheduler(); init(); - (authorizationService.isAuthorized as jasmine.Spy).and.returnValue(cold('-a', {a: false})); + (authorizationService.isAuthorized as jasmine.Spy).and.returnValue(cold('-a', { a: false })); initTestbed(); })); beforeEach(() => { @@ -135,8 +135,8 @@ describe('FileDownloadLinkComponent', () => { fixture.detectChanges(); }); it('should return the bitstreamPath based on the input bitstream', () => { - expect(component.bitstreamPath$).toBeObservable(cold('-a', {a: { routerLink: new URLCombiner(getBitstreamModuleRoute(), bitstream.uuid, 'download').toString(), queryParams: {} }})); - expect(component.canDownload$).toBeObservable(cold('--a', {a: false})); + expect(component.bitstreamPath$).toBeObservable(cold('-a', { a: { routerLink: new URLCombiner(getBitstreamModuleRoute(), bitstream.uuid, 'download').toString(), queryParams: {} } })); + expect(component.canDownload$).toBeObservable(cold('--a', { a: false })); }); it('should init the component', () => { diff --git a/src/app/shared/form/builder/ds-dynamic-form-ui/models/relation-group/dynamic-relation-group.component.spec.ts b/src/app/shared/form/builder/ds-dynamic-form-ui/models/relation-group/dynamic-relation-group.component.spec.ts index 40e73065b8..8e368a00b4 100644 --- a/src/app/shared/form/builder/ds-dynamic-form-ui/models/relation-group/dynamic-relation-group.component.spec.ts +++ b/src/app/shared/form/builder/ds-dynamic-form-ui/models/relation-group/dynamic-relation-group.component.spec.ts @@ -25,7 +25,11 @@ import { VocabularyServiceStub } from '../../../../../testing/vocabulary-service import { StoreMock } from '../../../../../testing/store.mock'; import { FormRowModel } from '../../../../../../core/config/models/config-submission-form.model'; import { storeModuleConfig } from '../../../../../../app.reducer'; - +import { DsDynamicTypeBindRelationService } from '../../ds-dynamic-type-bind-relation.service'; +import { SubmissionObjectDataService } from '../../../../../../core/submission/submission-object-data.service'; +import { SubmissionService } from '../../../../../../submission/submission.service'; +import { APP_CONFIG } from 'src/config/app-config.interface'; +import { environment } from 'src/environments/environment.test'; export let FORM_GROUP_TEST_MODEL_CONFIG; export let FORM_GROUP_TEST_GROUP; @@ -94,6 +98,7 @@ describe('DsDynamicRelationGroupComponent test suite', () => { let groupComp: DsDynamicRelationGroupComponent; let testFixture: ComponentFixture; let groupFixture: ComponentFixture; + let vocabularyServiceStub: any; let modelValue: any; let html; let control1: UntypedFormControl; @@ -104,7 +109,7 @@ describe('DsDynamicRelationGroupComponent test suite', () => { // waitForAsync beforeEach beforeEach(waitForAsync(() => { init(); - + vocabularyServiceStub = new VocabularyServiceStub(); /* TODO make sure these files use mocks instead of real services/components https://github.com/DSpace/dspace-angular/issues/281 */ TestBed.configureTestingModule({ imports: [ @@ -116,7 +121,7 @@ describe('DsDynamicRelationGroupComponent test suite', () => { TranslateModule.forRoot(), FormComponent, DsDynamicRelationGroupComponent, - TestComponent + TestComponent, ], providers: [ ChangeDetectorRef, @@ -126,11 +131,16 @@ describe('DsDynamicRelationGroupComponent test suite', () => { FormBuilderService, FormComponent, FormService, - { provide: VocabularyService, useValue: new VocabularyServiceStub() }, - { provide: Store, useClass: StoreMock } + { provide: VocabularyService, useValue: vocabularyServiceStub }, + { provide: Store, useClass: StoreMock }, + { provide: DsDynamicTypeBindRelationService, useClass: DsDynamicTypeBindRelationService }, + { provide: SubmissionObjectDataService, useValue: {}}, + { provide: SubmissionService, useValue: {}}, + { provide: APP_CONFIG, useValue: environment }, ], - schemas: [CUSTOM_ELEMENTS_SCHEMA] -}); + schemas: [CUSTOM_ELEMENTS_SCHEMA] + }) + .compileComponents(); })); diff --git a/src/app/shared/form/builder/ds-dynamic-form-ui/relation-lookup-modal/dynamic-lookup-relation-modal.component.spec.ts b/src/app/shared/form/builder/ds-dynamic-form-ui/relation-lookup-modal/dynamic-lookup-relation-modal.component.spec.ts index f84d4c36af..c6e81c1469 100644 --- a/src/app/shared/form/builder/ds-dynamic-form-ui/relation-lookup-modal/dynamic-lookup-relation-modal.component.spec.ts +++ b/src/app/shared/form/builder/ds-dynamic-form-ui/relation-lookup-modal/dynamic-lookup-relation-modal.component.spec.ts @@ -24,6 +24,7 @@ import { RemoteDataBuildService } from '../../../../../core/cache/builders/remot import { WorkspaceItem } from '../../../../../core/submission/models/workspaceitem.model'; import { Collection } from '../../../../../core/shared/collection.model'; import { By } from '@angular/platform-browser'; +import { provideMockStore } from '@ngrx/store/testing'; describe('DsDynamicLookupRelationModalComponent', () => { let component: DsDynamicLookupRelationModalComponent; @@ -128,7 +129,8 @@ describe('DsDynamicLookupRelationModalComponent', () => { } }, { provide: NgZone, useValue: new NgZone({}) }, - NgbActiveModal + NgbActiveModal, + provideMockStore() ], schemas: [NO_ERRORS_SCHEMA] }) diff --git a/src/app/shared/form/builder/ds-dynamic-form-ui/relation-lookup-modal/selection-tab/dynamic-lookup-relation-selection-tab.component.spec.ts b/src/app/shared/form/builder/ds-dynamic-form-ui/relation-lookup-modal/selection-tab/dynamic-lookup-relation-selection-tab.component.spec.ts index 6d1e5c15f2..e2821054df 100644 --- a/src/app/shared/form/builder/ds-dynamic-form-ui/relation-lookup-modal/selection-tab/dynamic-lookup-relation-selection-tab.component.spec.ts +++ b/src/app/shared/form/builder/ds-dynamic-form-ui/relation-lookup-modal/selection-tab/dynamic-lookup-relation-selection-tab.component.spec.ts @@ -17,6 +17,8 @@ import { ListableObject } from '../../../../../object-collection/shared/listable import { createSuccessfulRemoteDataObject$ } from '../../../../../remote-data.utils'; import { PaginationService } from '../../../../../../core/pagination/pagination.service'; import { PaginationServiceStub } from '../../../../../testing/pagination-service.stub'; +import { PageSizeSelectorComponent } from '../../../../../../shared/page-size-selector/page-size-selector.component'; +import { ObjectCollectionComponent } from '../../../../../../shared/object-collection/object-collection.component'; describe('DsDynamicLookupRelationSelectionTabComponent', () => { let component: DsDynamicLookupRelationSelectionTabComponent; @@ -46,22 +48,28 @@ describe('DsDynamicLookupRelationSelectionTabComponent', () => { beforeEach(waitForAsync(() => { init(); TestBed.configureTestingModule({ - imports: [TranslateModule.forRoot(), DsDynamicLookupRelationSelectionTabComponent, VarDirective], - providers: [ + imports: [TranslateModule.forRoot(), DsDynamicLookupRelationSelectionTabComponent, VarDirective], + providers: [ { - provide: SearchConfigurationService, useValue: { - paginatedSearchOptions: observableOf(pSearchOptions) - }, + provide: SearchConfigurationService, useValue: { + paginatedSearchOptions: observableOf(pSearchOptions) + }, }, { - provide: Router, useValue: router + provide: Router, useValue: router }, { - provide: PaginationService, useValue: new PaginationServiceStub() + provide: PaginationService, useValue: new PaginationServiceStub() } - ], - schemas: [NO_ERRORS_SCHEMA] -}) + ], + schemas: [NO_ERRORS_SCHEMA] + }) + .overrideComponent(DsDynamicLookupRelationSelectionTabComponent, { + remove: { + imports: [ObjectCollectionComponent, + PageSizeSelectorComponent,] + } + }) .compileComponents(); })); diff --git a/src/app/shared/form/form.component.spec.ts b/src/app/shared/form/form.component.spec.ts index d20fe0eec7..447996c81d 100644 --- a/src/app/shared/form/form.component.spec.ts +++ b/src/app/shared/form/form.component.spec.ts @@ -1,4 +1,4 @@ -import { ChangeDetectorRef, Component, CUSTOM_ELEMENTS_SCHEMA } from '@angular/core'; +import { ChangeDetectionStrategy, ChangeDetectorRef, Component, CUSTOM_ELEMENTS_SCHEMA } from '@angular/core'; import { ComponentFixture, inject, TestBed, waitForAsync, } from '@angular/core/testing'; import { CommonModule } from '@angular/common'; import { FormsModule, ReactiveFormsModule } from '@angular/forms'; @@ -6,6 +6,7 @@ import { DynamicFormArrayModel, DynamicFormControlEvent, DynamicFormControlModel, + DynamicFormsCoreModule, DynamicFormValidationService, DynamicInputModel } from '@ng-dynamic-forms/core'; @@ -23,6 +24,7 @@ import { FormFieldMetadataValueObject } from './builder/models/form-field-metada import { createTestComponent } from '../testing/utils.test'; import { BehaviorSubject } from 'rxjs'; import { storeModuleConfig } from '../../app.reducer'; +import { DsDynamicFormComponent } from './builder/ds-dynamic-form-ui/ds-dynamic-form.component'; let TEST_FORM_MODEL; @@ -144,7 +146,7 @@ describe('FormComponent test suite', () => { StoreModule.forRoot({}, storeModuleConfig), TranslateModule.forRoot(), FormComponent, - TestComponent + TestComponent, ], providers: [ ChangeDetectorRef, @@ -155,8 +157,15 @@ describe('FormComponent test suite', () => { { provide: Store, useClass: StoreMock } ], schemas: [CUSTOM_ELEMENTS_SCHEMA] -}); - + }) + .overrideComponent(FormComponent, { + remove: { + imports: [DsDynamicFormComponent] + }, + add: { + changeDetection: ChangeDetectionStrategy.Default + } + }); })); describe('', () => { @@ -434,6 +443,7 @@ describe('FormComponent test suite', () => { // declare a test component @Component({ + exportAs: 'formComponent', selector: 'ds-test-cmp', template: ``, standalone: true, @@ -441,7 +451,8 @@ describe('FormComponent test suite', () => { CommonModule, FormsModule, ReactiveFormsModule, - NgbModule] + NgbModule, + DynamicFormsCoreModule] }) class TestComponent { diff --git a/src/app/shared/form/vocabulary-treeview-modal/vocabulary-treeview-modal.component.spec.ts b/src/app/shared/form/vocabulary-treeview-modal/vocabulary-treeview-modal.component.spec.ts index 4e843f5040..86e94bdc32 100644 --- a/src/app/shared/form/vocabulary-treeview-modal/vocabulary-treeview-modal.component.spec.ts +++ b/src/app/shared/form/vocabulary-treeview-modal/vocabulary-treeview-modal.component.spec.ts @@ -3,6 +3,7 @@ import { ComponentFixture, TestBed } from '@angular/core/testing'; import { VocabularyTreeviewModalComponent } from './vocabulary-treeview-modal.component'; import { NgbActiveModal } from '@ng-bootstrap/ng-bootstrap'; import { TranslateModule } from '@ngx-translate/core'; +import { VocabularyTreeviewComponent } from '../vocabulary-treeview/vocabulary-treeview.component'; describe('VocabularyTreeviewModalComponent', () => { let component: VocabularyTreeviewModalComponent; @@ -12,12 +13,17 @@ describe('VocabularyTreeviewModalComponent', () => { beforeEach(async () => { await TestBed.configureTestingModule({ - imports: [TranslateModule.forRoot(), VocabularyTreeviewModalComponent], - providers: [ + imports: [TranslateModule.forRoot(), VocabularyTreeviewModalComponent], + providers: [ { provide: NgbActiveModal, useValue: modalStub }, - ] -}) - .compileComponents(); + ] + }) + .overrideComponent(VocabularyTreeviewModalComponent, { + remove: { + imports: [VocabularyTreeviewComponent] + } + }) + .compileComponents(); }); beforeEach(() => { diff --git a/src/app/shared/form/vocabulary-treeview/vocabulary-treeview.component.spec.ts b/src/app/shared/form/vocabulary-treeview/vocabulary-treeview.component.spec.ts index f6b120cd01..c315abcfa9 100644 --- a/src/app/shared/form/vocabulary-treeview/vocabulary-treeview.component.spec.ts +++ b/src/app/shared/form/vocabulary-treeview/vocabulary-treeview.component.spec.ts @@ -22,6 +22,7 @@ import { authReducer } from '../../../core/auth/auth.reducer'; import { storeModuleConfig } from '../../../app.reducer'; import { By } from '@angular/platform-browser'; import { VocabularyService } from '../../../core/submission/vocabularies/vocabulary.service'; +import { NoopAnimationsModule } from '@angular/platform-browser/animations'; describe('VocabularyTreeviewComponent test suite', () => { @@ -80,7 +81,8 @@ describe('VocabularyTreeviewComponent test suite', () => { StoreModule.forRoot({ auth: authReducer }, storeModuleConfig), TranslateModule.forRoot(), VocabularyTreeviewComponent, - TestComponent + TestComponent, + NoopAnimationsModule ], providers: [ { provide: VocabularyTreeviewService, useValue: vocabularyTreeviewServiceStub }, diff --git a/src/app/shared/input-suggestions/dso-input-suggestions/dso-input-suggestions.component.spec.ts b/src/app/shared/input-suggestions/dso-input-suggestions/dso-input-suggestions.component.spec.ts index 61b7901458..0b2a070e62 100644 --- a/src/app/shared/input-suggestions/dso-input-suggestions/dso-input-suggestions.component.spec.ts +++ b/src/app/shared/input-suggestions/dso-input-suggestions/dso-input-suggestions.component.spec.ts @@ -8,6 +8,11 @@ import { NoopAnimationsModule } from '@angular/platform-browser/animations'; import { RouterTestingModule } from '@angular/router/testing'; import { DsoInputSuggestionsComponent } from './dso-input-suggestions.component'; import { DSpaceObject } from '../../../core/shared/dspace-object.model'; +import { ThemeService } from '../../theme-support/theme.service'; +import { getMockThemeService } from '../../mocks/theme-service.mock'; +import { ClickOutsideDirective } from '../../utils/click-outside.directive'; +import { DebounceDirective } from '../../utils/debounce.directive'; +import { ListableObjectComponentLoaderComponent } from '../../object-collection/shared/listable-object/listable-object-component-loader.component'; describe('DsoInputSuggestionsComponent', () => { @@ -35,12 +40,28 @@ describe('DsoInputSuggestionsComponent', () => { beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ - imports: [TranslateModule.forRoot(), RouterTestingModule.withRoutes([]), NoopAnimationsModule, FormsModule, DsoInputSuggestionsComponent], - providers: [], - schemas: [NO_ERRORS_SCHEMA] -}).overrideComponent(DsoInputSuggestionsComponent, { - set: { changeDetection: ChangeDetectionStrategy.Default } - }).compileComponents(); + imports: [ + TranslateModule.forRoot(), + RouterTestingModule.withRoutes([]), + NoopAnimationsModule, + FormsModule, + DsoInputSuggestionsComponent, + ], + providers: [{ provide: ThemeService, useValue: getMockThemeService() }], + schemas: [NO_ERRORS_SCHEMA], + }) + .overrideComponent(DsoInputSuggestionsComponent, { + remove: { + imports: [ + ClickOutsideDirective, + DebounceDirective, + ListableObjectComponentLoaderComponent, + ], + }, + add: { changeDetection: ChangeDetectionStrategy.Default }, + }) + + .compileComponents(); })); beforeEach(() => { diff --git a/src/app/shared/menu/menu-item/link-menu-item.component.spec.ts b/src/app/shared/menu/menu-item/link-menu-item.component.spec.ts index a888144c6b..5c36fea2d3 100644 --- a/src/app/shared/menu/menu-item/link-menu-item.component.spec.ts +++ b/src/app/shared/menu/menu-item/link-menu-item.component.spec.ts @@ -6,7 +6,8 @@ import { LinkMenuItemComponent } from './link-menu-item.component'; import { RouterLinkDirectiveStub } from '../../testing/router-link-directive.stub'; import { QueryParamsDirectiveStub } from '../../testing/query-params-directive.stub'; import { RouterStub } from '../../testing/router.stub'; -import { Router } from '@angular/router'; +import { ActivatedRoute, Router, RouterLink } from '@angular/router'; +import { ActivatedRouteStub } from '../../testing/active-router.stub'; describe('LinkMenuItemComponent', () => { let component: LinkMenuItemComponent; @@ -19,20 +20,28 @@ describe('LinkMenuItemComponent', () => { function init() { text = 'HELLO'; link = '/world/hello'; - queryParams = {params: true}; + queryParams = { params: true }; } beforeEach(waitForAsync(() => { init(); TestBed.configureTestingModule({ - imports: [TranslateModule.forRoot(), LinkMenuItemComponent], - declarations: [RouterLinkDirectiveStub, QueryParamsDirectiveStub], - providers: [ + imports: [TranslateModule.forRoot(), LinkMenuItemComponent], + declarations: [QueryParamsDirectiveStub], + providers: [ { provide: 'itemModelProvider', useValue: { text: text, link: link, queryParams: queryParams } }, - { provide: Router, useValue: RouterStub }, - ], - schemas: [NO_ERRORS_SCHEMA] -}) + { provide: Router, useValue: new RouterStub() }, + { provide: ActivatedRoute, useValue: new ActivatedRouteStub() }, + RouterLinkDirectiveStub, + QueryParamsDirectiveStub, + RouterLink + ], + schemas: [NO_ERRORS_SCHEMA] + }) + .overrideComponent(LinkMenuItemComponent, { + remove: { imports: [] }, + add: { imports: [RouterLinkDirectiveStub] } + }) .compileComponents(); })); diff --git a/src/app/shared/mocks/form-builder-service.mock.ts b/src/app/shared/mocks/form-builder-service.mock.ts index eaaeb60829..4d35c21324 100644 --- a/src/app/shared/mocks/form-builder-service.mock.ts +++ b/src/app/shared/mocks/form-builder-service.mock.ts @@ -41,5 +41,4 @@ export function getMockFormBuilderService(): FormBuilderService { } ) }); - } diff --git a/src/app/shared/mocks/router.mock.ts b/src/app/shared/mocks/router.mock.ts index 98a63363b6..2df8d5f071 100644 --- a/src/app/shared/mocks/router.mock.ts +++ b/src/app/shared/mocks/router.mock.ts @@ -33,4 +33,8 @@ export class RouterMock { get url() { return this.routerState.snapshot.url; } + + serializeUrl(commands, navExtras = {}) { + return '/testing-url'; + } } diff --git a/src/app/shared/mydspace-actions/claimed-task/edit-metadata/claimed-task-actions-edit-metadata.component.spec.ts b/src/app/shared/mydspace-actions/claimed-task/edit-metadata/claimed-task-actions-edit-metadata.component.spec.ts index cb233a3cfc..dfc50bffb9 100644 --- a/src/app/shared/mydspace-actions/claimed-task/edit-metadata/claimed-task-actions-edit-metadata.component.spec.ts +++ b/src/app/shared/mydspace-actions/claimed-task/edit-metadata/claimed-task-actions-edit-metadata.component.spec.ts @@ -12,10 +12,11 @@ import { getMockRequestService } from '../../../mocks/request.service.mock'; import { PoolTaskDataService } from '../../../../core/tasks/pool-task-data.service'; import { NotificationsService } from '../../../notifications/notifications.service'; import { NotificationsServiceStub } from '../../../testing/notifications-service.stub'; -import { Router } from '@angular/router'; +import { ActivatedRoute, Router } from '@angular/router'; import { RouterStub } from '../../../testing/router.stub'; import { SearchService } from '../../../../core/shared/search/search.service'; import { RequestService } from '../../../../core/data/request.service'; +import { ActivatedRouteStub } from 'src/app/shared/testing/active-router.stub'; let component: ClaimedTaskActionsEditMetadataComponent; let fixture: ComponentFixture; @@ -48,6 +49,7 @@ describe('ClaimedTaskActionsEditMetadataComponent', () => { { provide: SearchService, useValue: searchService }, { provide: RequestService, useValue: requestService }, { provide: PoolTaskDataService, useValue: mockPoolTaskDataService }, + { provide: ActivatedRoute, useValue: new ActivatedRouteStub() }, ], schemas: [NO_ERRORS_SCHEMA] }).overrideComponent(ClaimedTaskActionsEditMetadataComponent, { diff --git a/src/app/shared/mydspace-actions/claimed-task/switcher/claimed-task-actions-loader.component.spec.ts b/src/app/shared/mydspace-actions/claimed-task/switcher/claimed-task-actions-loader.component.spec.ts index b5bfa7c86d..f963cdcae0 100644 --- a/src/app/shared/mydspace-actions/claimed-task/switcher/claimed-task-actions-loader.component.spec.ts +++ b/src/app/shared/mydspace-actions/claimed-task/switcher/claimed-task-actions-loader.component.spec.ts @@ -8,7 +8,7 @@ import { ClaimedTaskActionsEditMetadataComponent } from '../edit-metadata/claime import { ClaimedTaskDataService } from '../../../../core/tasks/claimed-task-data.service'; import { NotificationsService } from '../../../notifications/notifications.service'; import { NotificationsServiceStub } from '../../../testing/notifications-service.stub'; -import { Router } from '@angular/router'; +import { ActivatedRoute, Router } from '@angular/router'; import { RouterStub } from '../../../testing/router.stub'; import { SearchService } from '../../../../core/shared/search/search.service'; import { RequestService } from '../../../../core/data/request.service'; @@ -17,6 +17,7 @@ import { getMockSearchService } from '../../../mocks/search-service.mock'; import { getMockRequestService } from '../../../mocks/request.service.mock'; import { Item } from '../../../../core/shared/item.model'; import { WorkflowItem } from '../../../../core/submission/models/workflowitem.model'; +import { ActivatedRouteStub } from '../../../../shared/testing/active-router.stub'; const searchService = getMockSearchService(); @@ -71,7 +72,8 @@ describe('ClaimedTaskActionsLoaderComponent', () => { { provide: Router, useValue: new RouterStub() }, { provide: SearchService, useValue: searchService }, { provide: RequestService, useValue: requestService }, - { provide: PoolTaskDataService, useValue: {} } + { provide: PoolTaskDataService, useValue: {} }, + { provide: ActivatedRoute, useValue: new ActivatedRouteStub() }, ] }).overrideComponent(ClaimedTaskActionsLoaderComponent, { set: { diff --git a/src/app/shared/mydspace-actions/item/item-actions.component.spec.ts b/src/app/shared/mydspace-actions/item/item-actions.component.spec.ts index 6fccb4f172..da69797776 100644 --- a/src/app/shared/mydspace-actions/item/item-actions.component.spec.ts +++ b/src/app/shared/mydspace-actions/item/item-actions.component.spec.ts @@ -1,6 +1,6 @@ import { ChangeDetectionStrategy, Injector, NO_ERRORS_SCHEMA } from '@angular/core'; import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; -import { Router } from '@angular/router'; +import { Router, RouterLink } from '@angular/router'; import { of as observableOf } from 'rxjs'; import { TranslateLoader, TranslateModule } from '@ngx-translate/core'; @@ -59,8 +59,8 @@ const searchService = getMockSearchService(); const requestServce = getMockRequestService(); describe('ItemActionsComponent', () => { - beforeEach(waitForAsync(() => { - TestBed.configureTestingModule({ + beforeEach(waitForAsync(async () => { + await TestBed.configureTestingModule({ imports: [ TranslateModule.forRoot({ loader: { @@ -80,7 +80,8 @@ describe('ItemActionsComponent', () => { ], schemas: [NO_ERRORS_SCHEMA] }).overrideComponent(ItemActionsComponent, { - set: { changeDetection: ChangeDetectionStrategy.Default } + remove: {imports: [RouterLink]}, + add: { changeDetection: ChangeDetectionStrategy.Default } }).compileComponents(); })); diff --git a/src/app/shared/mydspace-actions/pool-task/pool-task-actions.component.spec.ts b/src/app/shared/mydspace-actions/pool-task/pool-task-actions.component.spec.ts index 092281412c..fd6c6aaa6b 100644 --- a/src/app/shared/mydspace-actions/pool-task/pool-task-actions.component.spec.ts +++ b/src/app/shared/mydspace-actions/pool-task/pool-task-actions.component.spec.ts @@ -1,6 +1,6 @@ import { ChangeDetectionStrategy, Injector, NO_ERRORS_SCHEMA } from '@angular/core'; import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; -import { Router } from '@angular/router'; +import { ActivatedRoute, Router } from '@angular/router'; import { By } from '@angular/platform-browser'; import { of as observableOf } from 'rxjs'; @@ -23,6 +23,7 @@ import { SearchService } from '../../../core/shared/search/search.service'; import { ClaimedTaskDataService } from '../../../core/tasks/claimed-task-data.service'; import { PoolTaskSearchResult } from '../../object-collection/shared/pool-task-search-result.model'; import { ProcessTaskResponse } from '../../../core/tasks/models/process-task-response'; +import { ActivatedRouteStub } from '../../testing/active-router.stub'; let mockDataService: PoolTaskDataService; let mockClaimedTaskDataService: ClaimedTaskDataService; @@ -93,7 +94,8 @@ describe('PoolTaskActionsComponent', () => { { provide: PoolTaskDataService, useValue: mockDataService }, { provide: ClaimedTaskDataService, useValue: mockClaimedTaskDataService }, { provide: SearchService, useValue: searchService }, - { provide: RequestService, useValue: requestService } + { provide: RequestService, useValue: requestService }, + { provide: ActivatedRoute, useValue: new ActivatedRouteStub() }, ], schemas: [NO_ERRORS_SCHEMA] }).overrideComponent(PoolTaskActionsComponent, { diff --git a/src/app/shared/mydspace-actions/workflowitem/workflowitem-actions.component.spec.ts b/src/app/shared/mydspace-actions/workflowitem/workflowitem-actions.component.spec.ts index 9e46f4df4a..d3fa5a863c 100644 --- a/src/app/shared/mydspace-actions/workflowitem/workflowitem-actions.component.spec.ts +++ b/src/app/shared/mydspace-actions/workflowitem/workflowitem-actions.component.spec.ts @@ -1,6 +1,6 @@ import { ChangeDetectionStrategy, Injector, NO_ERRORS_SCHEMA } from '@angular/core'; import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; -import { Router } from '@angular/router'; +import { ActivatedRoute, Router } from '@angular/router'; import { of as observableOf } from 'rxjs'; import { TranslateLoader, TranslateModule } from '@ngx-translate/core'; @@ -19,6 +19,7 @@ import { RequestService } from '../../../core/data/request.service'; import { getMockSearchService } from '../../mocks/search-service.mock'; import { SearchService } from '../../../core/shared/search/search.service'; import { By } from '@angular/platform-browser'; +import { ActivatedRouteStub } from '../../testing/active-router.stub'; let component: WorkflowitemActionsComponent; let fixture: ComponentFixture; @@ -81,7 +82,8 @@ describe('WorkflowitemActionsComponent', () => { { provide: WorkflowItemDataService, useValue: mockDataService }, { provide: NotificationsService, useValue: new NotificationsServiceStub() }, { provide: SearchService, useValue: searchService }, - { provide: RequestService, useValue: requestServce } + { provide: RequestService, useValue: requestServce }, + { provide: ActivatedRoute, useValue: new ActivatedRouteStub() }, ], schemas: [NO_ERRORS_SCHEMA] }).overrideComponent(WorkflowitemActionsComponent, { diff --git a/src/app/shared/mydspace-actions/workspaceitem/workspaceitem-actions.component.spec.ts b/src/app/shared/mydspace-actions/workspaceitem/workspaceitem-actions.component.spec.ts index 2978df7b65..e11584e8f6 100644 --- a/src/app/shared/mydspace-actions/workspaceitem/workspaceitem-actions.component.spec.ts +++ b/src/app/shared/mydspace-actions/workspaceitem/workspaceitem-actions.component.spec.ts @@ -1,7 +1,7 @@ import { EPerson } from '../../../core/eperson/models/eperson.model'; import { ChangeDetectionStrategy, Injector, NO_ERRORS_SCHEMA } from '@angular/core'; import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; -import { Router } from '@angular/router'; +import { ActivatedRoute, Router } from '@angular/router'; import { By } from '@angular/platform-browser'; import { of as observableOf } from 'rxjs'; @@ -27,6 +27,7 @@ import { getMockSearchService } from '../../mocks/search-service.mock'; import { SearchService } from '../../../core/shared/search/search.service'; import { AuthService } from '../../../core/auth/auth.service'; import { AuthorizationDataService } from '../../../core/data/feature-authorization/authorization-data.service'; +import { ActivatedRouteStub } from '../../testing/active-router.stub'; let component: WorkspaceitemActionsComponent; let fixture: ComponentFixture; @@ -180,6 +181,7 @@ describe('WorkspaceitemActionsComponent', () => { { provide: RequestService, useValue: requestServce }, { provide: AuthService, useValue: authService }, { provide: AuthorizationDataService, useValue: authorizationService }, + { provide: ActivatedRoute, useValue: new ActivatedRouteStub() }, NgbModal ], schemas: [NO_ERRORS_SCHEMA] diff --git a/src/app/shared/object-collection/object-collection.component.spec.ts b/src/app/shared/object-collection/object-collection.component.spec.ts index 86013efb8b..354954f4a1 100644 --- a/src/app/shared/object-collection/object-collection.component.spec.ts +++ b/src/app/shared/object-collection/object-collection.component.spec.ts @@ -6,6 +6,12 @@ import { ActivatedRoute, Router } from '@angular/router'; import { of as observableOf } from 'rxjs'; import { RouterStub } from '../testing/router.stub'; import { ViewMode } from '../../core/shared/view-mode.model'; +import { provideMockStore } from '@ngrx/store/testing'; +import { ThemeService } from '../theme-support/theme.service'; +import { getMockThemeService } from '../mocks/theme-service.mock'; +import { ObjectDetailComponent } from '../object-detail/object-detail.component'; +import { ObjectGridComponent } from '../object-grid/object-grid.component'; +import { ThemedObjectListComponent } from '../object-list/themed-object-list.component'; describe('ObjectCollectionComponent', () => { let fixture: ComponentFixture; @@ -19,17 +25,26 @@ describe('ObjectCollectionComponent', () => { scope: scopeParam }) }; - beforeEach(waitForAsync(() => { - TestBed.configureTestingModule({ - imports: [ObjectCollectionComponent], - providers: [ + beforeEach(waitForAsync(async () => { + await TestBed.configureTestingModule({ + imports: [ObjectCollectionComponent], + providers: [ { provide: ActivatedRoute, useValue: activatedRouteStub }, - { provide: Router, useClass: RouterStub } - ], - schemas: [NO_ERRORS_SCHEMA] -}).compileComponents(); // compile template and css + { provide: Router, useClass: RouterStub }, + { provide: ThemeService, useValue: getMockThemeService() }, + provideMockStore() + ], + schemas: [NO_ERRORS_SCHEMA] + }) + .overrideComponent(ObjectCollectionComponent, { + remove: { + imports: [ ThemedObjectListComponent, ObjectGridComponent, ObjectDetailComponent] + } + }) + .compileComponents(); // compile template and css })); + beforeEach(() => { fixture = TestBed.createComponent(ObjectCollectionComponent); objectCollectionComponent = fixture.componentInstance; diff --git a/src/app/shared/object-collection/shared/badges/access-status-badge/access-status-badge.component.spec.ts b/src/app/shared/object-collection/shared/badges/access-status-badge/access-status-badge.component.spec.ts index 7b46b4f7a7..101b5fca46 100644 --- a/src/app/shared/object-collection/shared/badges/access-status-badge/access-status-badge.component.spec.ts +++ b/src/app/shared/object-collection/shared/badges/access-status-badge/access-status-badge.component.spec.ts @@ -7,7 +7,7 @@ import { AccessStatusBadgeComponent } from './access-status-badge.component'; import { createSuccessfulRemoteDataObject$ } from '../../../../remote-data.utils'; import { By } from '@angular/platform-browser'; import { AccessStatusObject } from './access-status.model'; -import { AccessStatusDataService } from 'src/app/core/data/access-status-data.service'; +import { AccessStatusDataService } from '../../../../../core/data/access-status-data.service'; import { environment } from 'src/environments/environment'; describe('ItemAccessStatusBadgeComponent', () => { diff --git a/src/app/shared/object-collection/shared/listable-object/listable-object-component-loader.component.spec.ts b/src/app/shared/object-collection/shared/listable-object/listable-object-component-loader.component.spec.ts index 9bcd75a3fd..86315254db 100644 --- a/src/app/shared/object-collection/shared/listable-object/listable-object-component-loader.component.spec.ts +++ b/src/app/shared/object-collection/shared/listable-object/listable-object-component-loader.component.spec.ts @@ -44,12 +44,12 @@ describe('ListableObjectComponentLoaderComponent', () => { ], schemas: [NO_ERRORS_SCHEMA], providers: [ - provideMockStore({}), - { provide: ThemeService, useValue: themeService }, - { provide: APP_CONFIG, useValue: { browseBy: { showThumbnails: true } } } + provideMockStore({}), + { provide: ThemeService, useValue: themeService }, + { provide: APP_CONFIG, useValue: { browseBy: { showThumbnails: true } } } ] }).overrideComponent(ListableObjectComponentLoaderComponent, { - add: { + set: { changeDetection: ChangeDetectionStrategy.Default, } }).compileComponents(); diff --git a/src/app/shared/object-detail/my-dspace-result-detail-element/claimed-task-search-result/claimed-task-search-result-detail-element.component.spec.ts b/src/app/shared/object-detail/my-dspace-result-detail-element/claimed-task-search-result/claimed-task-search-result-detail-element.component.spec.ts index 862f5fd2b2..523bd8efd9 100644 --- a/src/app/shared/object-detail/my-dspace-result-detail-element/claimed-task-search-result/claimed-task-search-result-detail-element.component.spec.ts +++ b/src/app/shared/object-detail/my-dspace-result-detail-element/claimed-task-search-result/claimed-task-search-result-detail-element.component.spec.ts @@ -25,6 +25,8 @@ import { ObjectCacheService } from '../../../../core/cache/object-cache.service' import { Context } from '../../../../core/shared/context.model'; import { DSONameService } from '../../../../core/breadcrumbs/dso-name.service'; import { DSONameServiceMock } from '../../../mocks/dso-name.service.mock'; +import { ItemDetailPreviewComponent } from '../item-detail-preview/item-detail-preview.component'; +import { ClaimedTaskActionsComponent } from '../../../../shared/mydspace-actions/claimed-task/claimed-task-actions.component'; let component: ClaimedTaskSearchResultDetailElementComponent; let fixture: ComponentFixture; @@ -73,17 +75,20 @@ const objectCacheServiceMock = jasmine.createSpyObj('ObjectCacheService', { }); describe('ClaimedTaskSearchResultDetailElementComponent', () => { - beforeEach(waitForAsync(() => { - TestBed.configureTestingModule({ - imports: [NoopAnimationsModule, ClaimedTaskSearchResultDetailElementComponent, VarDirective], - providers: [ + beforeEach(waitForAsync(async () => { + await TestBed.configureTestingModule({ + imports: [NoopAnimationsModule, ClaimedTaskSearchResultDetailElementComponent, VarDirective], + providers: [ { provide: DSONameService, useValue: new DSONameServiceMock() }, { provide: LinkService, useValue: linkService }, { provide: ObjectCacheService, useValue: objectCacheServiceMock } - ], - schemas: [NO_ERRORS_SCHEMA] -}).overrideComponent(ClaimedTaskSearchResultDetailElementComponent, { - set: { changeDetection: ChangeDetectionStrategy.Default } + ], + schemas: [NO_ERRORS_SCHEMA] + }).overrideComponent(ClaimedTaskSearchResultDetailElementComponent, { + remove: { + imports: [ItemDetailPreviewComponent, ClaimedTaskActionsComponent] + }, + add: { changeDetection: ChangeDetectionStrategy.Default } }).compileComponents(); })); diff --git a/src/app/shared/object-detail/my-dspace-result-detail-element/item-detail-preview/item-detail-preview.component.spec.ts b/src/app/shared/object-detail/my-dspace-result-detail-element/item-detail-preview/item-detail-preview.component.spec.ts index ff3a1fe91f..ecc8e0b5c0 100644 --- a/src/app/shared/object-detail/my-dspace-result-detail-element/item-detail-preview/item-detail-preview.component.spec.ts +++ b/src/app/shared/object-detail/my-dspace-result-detail-element/item-detail-preview/item-detail-preview.component.spec.ts @@ -32,6 +32,12 @@ import { ItemDetailPreviewFieldComponent } from './item-detail-preview-field/ite import { ItemDetailPreviewComponent } from './item-detail-preview.component'; import { createPaginatedList } from '../../../testing/utils.test'; import { FindListOptions } from '../../../../core/data/find-list-options.model'; +import { ThemeService } from '../../../../shared/theme-support/theme.service'; +import { getMockThemeService } from '../../../../shared/mocks/theme-service.mock'; +import { AuthService } from '../../../../core/auth/auth.service'; +import { AuthServiceMock } from '../../../../shared/mocks/auth.service.mock'; +import { SearchService } from '../../../../core/shared/search/search.service'; +import { SearchServiceStub } from '../../../../shared/testing/search-service.stub'; function getMockFileService(): FileService { return jasmine.createSpyObj('FileService', { @@ -108,6 +114,9 @@ describe('ItemDetailPreviewComponent', () => { { provide: DSOChangeAnalyzer, useValue: {} }, { provide: DefaultChangeAnalyzer, useValue: {} }, { provide: BitstreamDataService, useValue: mockBitstreamDataService }, + { provide: ThemeService, useValue: getMockThemeService() }, + { provide: AuthService, useValue: new AuthServiceMock() }, + { provide: SearchService, useValue: new SearchServiceStub() }, ], schemas: [NO_ERRORS_SCHEMA] }).overrideComponent(ItemDetailPreviewComponent, { diff --git a/src/app/shared/object-detail/my-dspace-result-detail-element/item-search-result/item-search-result-detail-element.component.spec.ts b/src/app/shared/object-detail/my-dspace-result-detail-element/item-search-result/item-search-result-detail-element.component.spec.ts index c0318c2ee9..c7fc1e659c 100644 --- a/src/app/shared/object-detail/my-dspace-result-detail-element/item-search-result/item-search-result-detail-element.component.spec.ts +++ b/src/app/shared/object-detail/my-dspace-result-detail-element/item-search-result/item-search-result-detail-element.component.spec.ts @@ -7,9 +7,11 @@ import { of as observableOf } from 'rxjs'; import { Item } from '../../../../core/shared/item.model'; import { ItemSearchResultDetailElementComponent } from './item-search-result-detail-element.component'; import { ItemSearchResult } from '../../../object-collection/shared/item-search-result.model'; -import { Context } from 'src/app/core/shared/context.model'; +import { Context } from '../../../../core/shared/context.model'; import { DSONameService } from '../../../../core/breadcrumbs/dso-name.service'; import { DSONameServiceMock } from '../../../mocks/dso-name.service.mock'; +import { ItemDetailPreviewComponent } from '../item-detail-preview/item-detail-preview.component'; +import { ItemActionsComponent } from '../../../../shared/mydspace-actions/item/item-actions.component'; let component: ItemSearchResultDetailElementComponent; let fixture: ComponentFixture; @@ -52,13 +54,16 @@ mockResultObject.indexableObject = Object.assign(new Item(), { describe('ItemSearchResultDetailElementComponent', () => { beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ - imports: [NoopAnimationsModule, ItemSearchResultDetailElementComponent], - providers: [ + imports: [NoopAnimationsModule, ItemSearchResultDetailElementComponent], + providers: [ { provide: DSONameService, useValue: new DSONameServiceMock() }, - ], - schemas: [NO_ERRORS_SCHEMA] -}).overrideComponent(ItemSearchResultDetailElementComponent, { - set: { changeDetection: ChangeDetectionStrategy.Default } + ], + schemas: [NO_ERRORS_SCHEMA] + }).overrideComponent(ItemSearchResultDetailElementComponent, { + remove: { + imports: [ItemDetailPreviewComponent, ItemActionsComponent] + }, + add: { changeDetection: ChangeDetectionStrategy.Default } }).compileComponents(); })); diff --git a/src/app/shared/object-detail/my-dspace-result-detail-element/pool-search-result/pool-search-result-detail-element.component.spec.ts b/src/app/shared/object-detail/my-dspace-result-detail-element/pool-search-result/pool-search-result-detail-element.component.spec.ts index ddc1c4b91e..76b4f12930 100644 --- a/src/app/shared/object-detail/my-dspace-result-detail-element/pool-search-result/pool-search-result-detail-element.component.spec.ts +++ b/src/app/shared/object-detail/my-dspace-result-detail-element/pool-search-result/pool-search-result-detail-element.component.spec.ts @@ -15,9 +15,11 @@ import { LinkService } from '../../../../core/cache/builders/link.service'; import { getMockLinkService } from '../../../mocks/link-service.mock'; import { By } from '@angular/platform-browser'; import { ObjectCacheService } from '../../../../core/cache/object-cache.service'; -import { Context } from 'src/app/core/shared/context.model'; +import { Context } from '../../../../core/shared/context.model'; import { DSONameService } from '../../../../core/breadcrumbs/dso-name.service'; import { DSONameServiceMock } from '../../../mocks/dso-name.service.mock'; +import { ItemDetailPreviewComponent } from '../item-detail-preview/item-detail-preview.component'; +import { PoolTaskActionsComponent } from '../../../../shared/mydspace-actions/pool-task/pool-task-actions.component'; let component: PoolSearchResultDetailElementComponent; let fixture: ComponentFixture; @@ -68,17 +70,20 @@ const objectCacheServiceMock = jasmine.createSpyObj('ObjectCacheService', { describe('PoolSearchResultDetailElementComponent', () => { beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ - imports: [NoopAnimationsModule, PoolSearchResultDetailElementComponent, VarDirective], - providers: [ + imports: [NoopAnimationsModule, PoolSearchResultDetailElementComponent, VarDirective], + providers: [ { provide: DSONameService, useValue: new DSONameServiceMock() }, { provide: 'objectElementProvider', useValue: (mockResultObject) }, { provide: 'indexElementProvider', useValue: (compIndex) }, { provide: LinkService, useValue: linkService }, { provide: ObjectCacheService, useValue: objectCacheServiceMock } - ], - schemas: [NO_ERRORS_SCHEMA] -}).overrideComponent(PoolSearchResultDetailElementComponent, { - set: { changeDetection: ChangeDetectionStrategy.Default } + ], + schemas: [NO_ERRORS_SCHEMA] + }).overrideComponent(PoolSearchResultDetailElementComponent, { + remove: { + imports: [ItemDetailPreviewComponent, PoolTaskActionsComponent] + }, + add: { changeDetection: ChangeDetectionStrategy.Default } }).compileComponents(); })); @@ -109,7 +114,7 @@ describe('PoolSearchResultDetailElementComponent', () => { it('should forward pool-task-actions processCompleted event to the reloadedObject event emitter', fakeAsync(() => { spyOn(component.reloadedObject, 'emit').and.callThrough(); - const actionPayload: any = { reloadedObject: {}}; + const actionPayload: any = { reloadedObject: {} }; const actionsComponents = fixture.debugElement.query(By.css('ds-pool-task-actions')); actionsComponents.triggerEventHandler('processCompleted', actionPayload); tick(); diff --git a/src/app/shared/object-detail/my-dspace-result-detail-element/workflow-item-search-result/workflow-item-search-result-detail-element.component.spec.ts b/src/app/shared/object-detail/my-dspace-result-detail-element/workflow-item-search-result/workflow-item-search-result-detail-element.component.spec.ts index 69a022cdfa..36d87abc06 100644 --- a/src/app/shared/object-detail/my-dspace-result-detail-element/workflow-item-search-result/workflow-item-search-result-detail-element.component.spec.ts +++ b/src/app/shared/object-detail/my-dspace-result-detail-element/workflow-item-search-result/workflow-item-search-result-detail-element.component.spec.ts @@ -14,6 +14,8 @@ import { LinkService } from '../../../../core/cache/builders/link.service'; import { DSONameService } from '../../../../core/breadcrumbs/dso-name.service'; import { DSONameServiceMock } from '../../../mocks/dso-name.service.mock'; import { Context } from '../../../../core/shared/context.model'; +import { ItemDetailPreviewComponent } from '../item-detail-preview/item-detail-preview.component'; +import { WorkflowitemActionsComponent } from '../../../../shared/mydspace-actions/workflowitem/workflowitem-actions.component'; let component: WorkflowItemSearchResultDetailElementComponent; let fixture: ComponentFixture; @@ -66,9 +68,12 @@ describe('WorkflowItemSearchResultDetailElementComponent', () => { { provide: LinkService, useValue: linkService }, { provide: DSONameService, useClass: DSONameServiceMock }, ], - schemas: [NO_ERRORS_SCHEMA] -}).overrideComponent(WorkflowItemSearchResultDetailElementComponent, { - set: { changeDetection: ChangeDetectionStrategy.Default } + schemas: [NO_ERRORS_SCHEMA] + }).overrideComponent(WorkflowItemSearchResultDetailElementComponent, { + remove: { + imports: [ItemDetailPreviewComponent, WorkflowitemActionsComponent] + }, + add: { changeDetection: ChangeDetectionStrategy.Default } }).compileComponents(); })); diff --git a/src/app/shared/object-detail/my-dspace-result-detail-element/workspace-item-search-result/workspace-item-search-result-detail-element.component.spec.ts b/src/app/shared/object-detail/my-dspace-result-detail-element/workspace-item-search-result/workspace-item-search-result-detail-element.component.spec.ts index 30672e5b97..6c056501e5 100644 --- a/src/app/shared/object-detail/my-dspace-result-detail-element/workspace-item-search-result/workspace-item-search-result-detail-element.component.spec.ts +++ b/src/app/shared/object-detail/my-dspace-result-detail-element/workspace-item-search-result/workspace-item-search-result-detail-element.component.spec.ts @@ -13,7 +13,9 @@ import { getMockLinkService } from '../../../mocks/link-service.mock'; import { LinkService } from '../../../../core/cache/builders/link.service'; import { DSONameService } from '../../../../core/breadcrumbs/dso-name.service'; import { DSONameServiceMock } from '../../../mocks/dso-name.service.mock'; -import { Context } from 'src/app/core/shared/context.model'; +import { Context } from '../../../../core/shared/context.model'; +import { ItemDetailPreviewComponent } from '../item-detail-preview/item-detail-preview.component'; +import { WorkspaceitemActionsComponent } from '../../../../shared/mydspace-actions/workspaceitem/workspaceitem-actions.component'; let component: WorkspaceItemSearchResultDetailElementComponent; let fixture: ComponentFixture; @@ -59,16 +61,19 @@ mockResultObject.indexableObject = Object.assign(new WorkspaceItem(), { item: ob describe('WorkspaceItemSearchResultDetailElementComponent', () => { beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ - imports: [NoopAnimationsModule, WorkspaceItemSearchResultDetailElementComponent], - providers: [ + imports: [NoopAnimationsModule, WorkspaceItemSearchResultDetailElementComponent], + providers: [ { provide: 'objectElementProvider', useValue: (mockResultObject) }, { provide: 'indexElementProvider', useValue: (compIndex) }, { provide: LinkService, useValue: linkService }, { provide: DSONameService, useClass: DSONameServiceMock }, - ], - schemas: [NO_ERRORS_SCHEMA] -}).overrideComponent(WorkspaceItemSearchResultDetailElementComponent, { - set: { changeDetection: ChangeDetectionStrategy.Default } + ], + schemas: [NO_ERRORS_SCHEMA] + }).overrideComponent(WorkspaceItemSearchResultDetailElementComponent, { + add: { changeDetection: ChangeDetectionStrategy.Default }, + remove: { + imports: [ItemDetailPreviewComponent, WorkspaceitemActionsComponent] + } }).compileComponents(); })); diff --git a/src/app/shared/object-detail/object-detail.component.spec.ts b/src/app/shared/object-detail/object-detail.component.spec.ts index 30103a8d52..d1eb23b675 100644 --- a/src/app/shared/object-detail/object-detail.component.spec.ts +++ b/src/app/shared/object-detail/object-detail.component.spec.ts @@ -9,6 +9,9 @@ import { PageInfo } from '../../core/shared/page-info.model'; import { NoopAnimationsModule } from '@angular/platform-browser/animations'; import { createSuccessfulRemoteDataObject } from '../remote-data.utils'; import { DSpaceObject } from '../../core/shared/dspace-object.model'; +import { PaginationComponent } from '../pagination/pagination.component'; +import { ThemedLoadingComponent } from '../loading/themed-loading.component'; +import { ListableObjectComponentLoaderComponent } from '../object-collection/shared/listable-object/listable-object-component-loader.component'; describe('ObjectDetailComponent', () => { let comp: ObjectDetailComponent; @@ -35,22 +38,31 @@ describe('ObjectDetailComponent', () => { }); const mockRD = createSuccessfulRemoteDataObject(buildPaginatedList(pageInfo, testObjects)); - beforeEach(waitForAsync(() => { - TestBed.configureTestingModule({ - imports: [ + beforeEach(waitForAsync(async () => { + await TestBed.configureTestingModule({ + imports: [ NoopAnimationsModule, TranslateModule.forRoot({ - loader: { - provide: TranslateLoader, - useClass: TranslateLoaderMock - } + loader: { + provide: TranslateLoader, + useClass: TranslateLoaderMock, + }, }), - ObjectDetailComponent - ], - schemas: [NO_ERRORS_SCHEMA] -}).overrideComponent(ObjectDetailComponent, { - set: { changeDetection: ChangeDetectionStrategy.Default } - }).compileComponents(); + ObjectDetailComponent, + ], + schemas: [NO_ERRORS_SCHEMA], + }) + .overrideComponent(ObjectDetailComponent, { + remove: { + imports: [ + PaginationComponent, + ThemedLoadingComponent, + ListableObjectComponentLoaderComponent, + ], + }, + add: { changeDetection: ChangeDetectionStrategy.Default }, + }) + .compileComponents(); })); beforeEach(() => { diff --git a/src/app/shared/object-grid/collection-grid-element/collection-grid-element.component.spec.ts b/src/app/shared/object-grid/collection-grid-element/collection-grid-element.component.spec.ts index 060ac4e0ab..ac4e61fc6a 100644 --- a/src/app/shared/object-grid/collection-grid-element/collection-grid-element.component.spec.ts +++ b/src/app/shared/object-grid/collection-grid-element/collection-grid-element.component.spec.ts @@ -7,6 +7,11 @@ import { LinkService } from '../../../core/cache/builders/link.service'; import { TranslateModule } from '@ngx-translate/core'; import { ActivatedRoute } from '@angular/router'; import { ActivatedRouteStub } from '../../testing/active-router.stub'; +import { ThemeService } from '../../theme-support/theme.service'; +import { getMockThemeService } from '../../mocks/theme-service.mock'; +import { AuthService } from '../../../core/auth/auth.service'; +import { AuthServiceMock } from '../../mocks/auth.service.mock'; +import { AuthorizationDataService } from '../../../core/data/feature-authorization/authorization-data.service'; let collectionGridElementComponent: CollectionGridElementComponent; let fixture: ComponentFixture; @@ -47,7 +52,10 @@ describe('CollectionGridElementComponent', () => { providers: [ { provide: 'objectElementProvider', useValue: (mockCollectionWithAbstract) }, { provide: LinkService, useValue: linkService }, - { provide: ActivatedRoute, useValue: new ActivatedRouteStub() } + { provide: ActivatedRoute, useValue: new ActivatedRouteStub() }, + { provide: ThemeService, useValue: getMockThemeService() }, + { provide: AuthService, useValue: new AuthServiceMock() }, + { provide: AuthorizationDataService, useValue: {} }, ], schemas: [NO_ERRORS_SCHEMA] }).overrideComponent(CollectionGridElementComponent, { diff --git a/src/app/shared/object-grid/community-grid-element/community-grid-element.component.spec.ts b/src/app/shared/object-grid/community-grid-element/community-grid-element.component.spec.ts index 99bc652f7d..9a82fb18d4 100644 --- a/src/app/shared/object-grid/community-grid-element/community-grid-element.component.spec.ts +++ b/src/app/shared/object-grid/community-grid-element/community-grid-element.component.spec.ts @@ -5,8 +5,9 @@ import { By } from '@angular/platform-browser'; import { Community } from '../../../core/shared/community.model'; import { LinkService } from '../../../core/cache/builders/link.service'; import { TranslateModule } from '@ngx-translate/core'; -import { ActivatedRoute } from '@angular/router'; +import { ActivatedRoute, RouterLink } from '@angular/router'; import { ActivatedRouteStub } from '../../testing/active-router.stub'; +import { ThemedThumbnailComponent } from '../../../thumbnail/themed-thumbnail.component'; let communityGridElementComponent: CommunityGridElementComponent; let fixture: ComponentFixture; @@ -51,7 +52,10 @@ describe('CommunityGridElementComponent', () => { ], schemas: [NO_ERRORS_SCHEMA] }).overrideComponent(CommunityGridElementComponent, { - set: { changeDetection: ChangeDetectionStrategy.Default } + remove: { + imports: [RouterLink, ThemedThumbnailComponent] + }, + add: { changeDetection: ChangeDetectionStrategy.Default } }).compileComponents(); })); diff --git a/src/app/shared/object-grid/search-result-grid-element/community-search-result/community-search-result-grid-element.component.spec.ts b/src/app/shared/object-grid/search-result-grid-element/community-search-result/community-search-result-grid-element.component.spec.ts index 7c3a2aec14..896a27fab5 100644 --- a/src/app/shared/object-grid/search-result-grid-element/community-search-result/community-search-result-grid-element.component.spec.ts +++ b/src/app/shared/object-grid/search-result-grid-element/community-search-result/community-search-result-grid-element.component.spec.ts @@ -23,6 +23,11 @@ import { LinkService } from '../../../../core/cache/builders/link.service'; import { TranslateModule } from '@ngx-translate/core'; import { ActivatedRoute } from '@angular/router'; import { ActivatedRouteStub } from '../../../testing/active-router.stub'; +import { StoreMock } from '../../../../shared/testing/store.mock'; +import { ThemeService } from '../../../../shared/theme-support/theme.service'; +import { getMockThemeService } from '../../../../shared/mocks/theme-service.mock'; +import { AuthServiceMock } from '../../../../shared/mocks/auth.service.mock'; +import { AuthService } from '../../../../core/auth/auth.service'; let communitySearchResultGridElementComponent: CommunitySearchResultGridElementComponent; let fixture: ComponentFixture; @@ -72,7 +77,7 @@ describe('CommunitySearchResultGridElementComponent', () => { { provide: 'objectElementProvider', useValue: (mockCommunityWithAbstract) }, { provide: ObjectCacheService, useValue: {} }, { provide: UUIDService, useValue: {} }, - { provide: Store, useValue: {} }, + { provide: Store, useValue: StoreMock }, { provide: RemoteDataBuildService, useValue: {} }, { provide: BitstreamDataService, useValue: {} }, { provide: CommunityDataService, useValue: {} }, @@ -83,7 +88,9 @@ describe('CommunitySearchResultGridElementComponent', () => { { provide: DefaultChangeAnalyzer, useValue: {} }, { provide: BitstreamFormatDataService, useValue: {} }, { provide: LinkService, useValue: linkService }, - { provide: ActivatedRoute, useValue: new ActivatedRouteStub() } + { provide: ActivatedRoute, useValue: new ActivatedRouteStub() }, + { provide: ThemeService, useValue: getMockThemeService() }, + { provide: AuthService, useValue: new AuthServiceMock() }, ], schemas: [NO_ERRORS_SCHEMA] }).overrideComponent(CommunitySearchResultGridElementComponent, { diff --git a/src/app/shared/object-list/browse-entry-list-element/browse-entry-list-element.component.spec.ts b/src/app/shared/object-list/browse-entry-list-element/browse-entry-list-element.component.spec.ts index 481dda00aa..3ea9f51518 100644 --- a/src/app/shared/object-list/browse-entry-list-element/browse-entry-list-element.component.spec.ts +++ b/src/app/shared/object-list/browse-entry-list-element/browse-entry-list-element.component.spec.ts @@ -9,6 +9,8 @@ import { RouteService } from '../../../core/services/route.service'; import { of as observableOf } from 'rxjs'; import { DSONameService } from '../../../core/breadcrumbs/dso-name.service'; import { DSONameServiceMock } from '../../mocks/dso-name.service.mock'; +import { ActivatedRoute } from '@angular/router'; +import { ActivatedRouteStub } from '../../testing/active-router.stub'; let browseEntryListElementComponent: BrowseEntryListElementComponent; let fixture: ComponentFixture; @@ -40,6 +42,7 @@ describe('BrowseEntryListElementComponent', () => { { provide: 'objectElementProvider', useValue: { mockValue } }, { provide: PaginationService, useValue: paginationService }, { provide: RouteService, useValue: routeService }, + { provide: ActivatedRoute, useValue: new ActivatedRouteStub() }, ], schemas: [NO_ERRORS_SCHEMA] }).overrideComponent(BrowseEntryListElementComponent, { diff --git a/src/app/shared/object-list/item-list-element/item-types/item/item-list-element.component.spec.ts b/src/app/shared/object-list/item-list-element/item-types/item/item-list-element.component.spec.ts index e545d8192e..6addde021c 100644 --- a/src/app/shared/object-list/item-list-element/item-types/item/item-list-element.component.spec.ts +++ b/src/app/shared/object-list/item-list-element/item-types/item/item-list-element.component.spec.ts @@ -8,6 +8,17 @@ import { TruncatableService } from '../../../../truncatable/truncatable.service' import { of as observableOf } from 'rxjs'; import { DSONameService } from '../../../../../core/breadcrumbs/dso-name.service'; import { DSONameServiceMock } from '../../../../mocks/dso-name.service.mock'; +import { APP_CONFIG } from 'src/config/app-config.interface'; +import { environment } from 'src/environments/environment.test'; +import { ThemeService } from '../../../../../shared/theme-support/theme.service'; +import { getMockThemeService } from '../../../../../shared/mocks/theme-service.mock'; +import { TranslateModule } from '@ngx-translate/core'; +import { ActivatedRoute } from '@angular/router'; +import { ActivatedRouteStub } from '../../../../../shared/testing/active-router.stub'; +import { AuthService } from '../../../../../core/auth/auth.service'; +import { AuthServiceMock } from '../../../../../shared/mocks/auth.service.mock'; +import { AuthorizationDataService } from '../../../../../core/data/feature-authorization/authorization-data.service'; +import { mockTruncatableService } from '../../../../../shared/mocks/mock-trucatable.service'; const mockItem: Item = Object.assign(new Item(), { bundles: observableOf({}), @@ -49,16 +60,17 @@ describe('ItemListElementComponent', () => { let comp; let fixture; - const truncatableServiceStub: any = { - isCollapsed: (id: number) => observableOf(true), - }; - beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ - imports: [ItemListElementComponent, TruncatePipe], + imports: [ItemListElementComponent, TruncatePipe, TranslateModule.forRoot()], providers: [ { provide: DSONameService, useValue: new DSONameServiceMock() }, - { provide: TruncatableService, useValue: truncatableServiceStub }, + { provide: TruncatableService, useValue: mockTruncatableService }, + { provide: APP_CONFIG, useValue: environment }, + { provide: ThemeService, useValue: getMockThemeService() }, + { provide: ActivatedRoute, useValue: new ActivatedRouteStub() }, + { provide: AuthService, useValue: new AuthServiceMock() }, + { provide: AuthorizationDataService, useValue: {} }, ], schemas: [NO_ERRORS_SCHEMA] }).overrideComponent(ItemListElementComponent, { diff --git a/src/app/shared/object-list/metadata-representation-list-element/item/item-metadata-list-element.component.spec.ts b/src/app/shared/object-list/metadata-representation-list-element/item/item-metadata-list-element.component.spec.ts index 8463552517..47ae9d9d7e 100644 --- a/src/app/shared/object-list/metadata-representation-list-element/item/item-metadata-list-element.component.spec.ts +++ b/src/app/shared/object-list/metadata-representation-list-element/item/item-metadata-list-element.component.spec.ts @@ -3,6 +3,7 @@ import { ChangeDetectionStrategy, NO_ERRORS_SCHEMA } from '@angular/core'; import { ItemMetadataListElementComponent } from './item-metadata-list-element.component'; import { By } from '@angular/platform-browser'; import { ItemMetadataRepresentation } from '../../../../core/shared/metadata-representation/item/item-metadata-representation.model'; +import { ListableObjectComponentLoaderComponent } from '../../../../shared/object-collection/shared/listable-object/listable-object-component-loader.component'; const mockItemMetadataRepresentation = new ItemMetadataRepresentation(Object.assign({})); @@ -12,10 +13,11 @@ describe('ItemMetadataListElementComponent', () => { beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ - imports: [ItemMetadataListElementComponent], - schemas: [NO_ERRORS_SCHEMA] -}).overrideComponent(ItemMetadataListElementComponent, { - set: { changeDetection: ChangeDetectionStrategy.Default } + imports: [ItemMetadataListElementComponent], + schemas: [NO_ERRORS_SCHEMA] + }).overrideComponent(ItemMetadataListElementComponent, { + remove: { imports: [ListableObjectComponentLoaderComponent] }, + add: { changeDetection: ChangeDetectionStrategy.Default } }).compileComponents(); })); diff --git a/src/app/shared/object-list/my-dspace-result-list-element/pool-search-result/pool-search-result-list-element.component.spec.ts b/src/app/shared/object-list/my-dspace-result-list-element/pool-search-result/pool-search-result-list-element.component.spec.ts index e40bf482f2..2a8cbebaca 100644 --- a/src/app/shared/object-list/my-dspace-result-list-element/pool-search-result/pool-search-result-list-element.component.spec.ts +++ b/src/app/shared/object-list/my-dspace-result-list-element/pool-search-result/pool-search-result-list-element.component.spec.ts @@ -29,6 +29,7 @@ import { ObjectCacheService } from '../../../../core/cache/object-cache.service' import { Context } from '../../../../core/shared/context.model'; import { ThemeService } from '../../../theme-support/theme.service'; import { getMockThemeService } from '../../../mocks/theme-service.mock'; +import { PoolTaskActionsComponent } from './../../../../shared/mydspace-actions/pool-task/pool-task-actions.component'; let component: PoolSearchResultListElementComponent; let fixture: ComponentFixture; @@ -92,10 +93,15 @@ describe('PoolSearchResultListElementComponent', () => { { provide: APP_CONFIG, useValue: environmentUseThumbs }, { provide: ObjectCacheService, useValue: objectCacheServiceMock }, { provide: ThemeService, useValue: getMockThemeService() } - ], - schemas: [NO_ERRORS_SCHEMA] -}).overrideComponent(PoolSearchResultListElementComponent, { - set: { changeDetection: ChangeDetectionStrategy.Default } + ], + schemas: [NO_ERRORS_SCHEMA] + }).overrideComponent(PoolSearchResultListElementComponent, { + remove: { + imports: [ + PoolTaskActionsComponent + ] + }, + add: { changeDetection: ChangeDetectionStrategy.Default } }).compileComponents(); })); diff --git a/src/app/shared/object-list/object-list.component.spec.ts b/src/app/shared/object-list/object-list.component.spec.ts index 68cf78b974..0dab66694e 100644 --- a/src/app/shared/object-list/object-list.component.spec.ts +++ b/src/app/shared/object-list/object-list.component.spec.ts @@ -3,19 +3,23 @@ import { ObjectListComponent } from './object-list.component'; import { ChangeDetectionStrategy, NO_ERRORS_SCHEMA } from '@angular/core'; import { By } from '@angular/platform-browser'; import { SelectableListService } from './selectable-list/selectable-list.service'; +import { PaginationComponent } from '../pagination/pagination.component'; describe('ObjectListComponent', () => { let comp: ObjectListComponent; let fixture: ComponentFixture; const testEvent: any = { test: 'test' }; - beforeEach(waitForAsync(() => { - TestBed.configureTestingModule({ - imports: [ObjectListComponent], - providers: [{ provide: SelectableListService, useValue: {} }], - schemas: [NO_ERRORS_SCHEMA] -}).overrideComponent(ObjectListComponent, { - set: { changeDetection: ChangeDetectionStrategy.Default } + beforeEach(waitForAsync(async () => { + await TestBed.configureTestingModule({ + imports: [ObjectListComponent], + providers: [{ provide: SelectableListService, useValue: {} }], + schemas: [NO_ERRORS_SCHEMA] + }).overrideComponent(ObjectListComponent, { + remove: { + imports: [PaginationComponent] + }, + add: { changeDetection: ChangeDetectionStrategy.Default } }).compileComponents(); })); diff --git a/src/app/shared/object-list/search-result-list-element/collection-search-result/collection-search-result-list-element.component.spec.ts b/src/app/shared/object-list/search-result-list-element/collection-search-result/collection-search-result-list-element.component.spec.ts index 72ffb8a90d..ee0dd77aaa 100644 --- a/src/app/shared/object-list/search-result-list-element/collection-search-result/collection-search-result-list-element.component.spec.ts +++ b/src/app/shared/object-list/search-result-list-element/collection-search-result/collection-search-result-list-element.component.spec.ts @@ -12,6 +12,8 @@ import { DSONameServiceMock } from '../../../mocks/dso-name.service.mock'; import { APP_CONFIG } from '../../../../../config/app-config.interface'; import { ActivatedRoute } from '@angular/router'; import { ActivatedRouteStub } from '../../../testing/active-router.stub'; +import { ThemeService } from './../../../../shared/theme-support/theme.service'; +import { getMockThemeService } from './../../../../shared/mocks/theme-service.mock'; let collectionSearchResultListElementComponent: CollectionSearchResultListElementComponent; let fixture: ComponentFixture; @@ -60,7 +62,8 @@ describe('CollectionSearchResultListElementComponent', () => { { provide: TruncatableService, useValue: truncatableServiceStub }, { provide: DSONameService, useClass: DSONameServiceMock }, { provide: APP_CONFIG, useValue: environmentUseThumbs }, - { provide: ActivatedRoute, useValue: new ActivatedRouteStub() } + { provide: ActivatedRoute, useValue: new ActivatedRouteStub() }, + { provide: ThemeService, useValue: getMockThemeService() }, ], schemas: [NO_ERRORS_SCHEMA] }).overrideComponent(CollectionSearchResultListElementComponent, { diff --git a/src/app/shared/object-list/search-result-list-element/community-search-result/community-search-result-list-element.component.spec.ts b/src/app/shared/object-list/search-result-list-element/community-search-result/community-search-result-list-element.component.spec.ts index 1abeddd874..dd4d53bfb3 100644 --- a/src/app/shared/object-list/search-result-list-element/community-search-result/community-search-result-list-element.component.spec.ts +++ b/src/app/shared/object-list/search-result-list-element/community-search-result/community-search-result-list-element.component.spec.ts @@ -12,6 +12,8 @@ import { DSONameServiceMock } from '../../../mocks/dso-name.service.mock'; import { APP_CONFIG } from '../../../../../config/app-config.interface'; import { ActivatedRoute } from '@angular/router'; import { ActivatedRouteStub } from '../../../testing/active-router.stub'; +import { ThemeService } from './../../../../shared/theme-support/theme.service'; +import { getMockThemeService } from './../../../../shared/mocks/theme-service.mock'; let communitySearchResultListElementComponent: CommunitySearchResultListElementComponent; let fixture: ComponentFixture; @@ -60,7 +62,8 @@ describe('CommunitySearchResultListElementComponent', () => { { provide: TruncatableService, useValue: truncatableServiceStub }, { provide: DSONameService, useClass: DSONameServiceMock }, { provide: APP_CONFIG, useValue: environmentUseThumbs }, - { provide: ActivatedRoute, useValue: new ActivatedRouteStub() } + { provide: ActivatedRoute, useValue: new ActivatedRouteStub() }, + { provide: ThemeService, useValue: getMockThemeService() }, ], schemas: [NO_ERRORS_SCHEMA] }).overrideComponent(CommunitySearchResultListElementComponent, { diff --git a/src/app/shared/object-list/search-result-list-element/item-search-result/item-types/item/item-search-result-list-element.component.spec.ts b/src/app/shared/object-list/search-result-list-element/item-search-result/item-types/item/item-search-result-list-element.component.spec.ts index da6c453685..89428a448f 100644 --- a/src/app/shared/object-list/search-result-list-element/item-search-result/item-types/item/item-search-result-list-element.component.spec.ts +++ b/src/app/shared/object-list/search-result-list-element/item-search-result/item-types/item/item-search-result-list-element.component.spec.ts @@ -68,7 +68,7 @@ const mockItemWithMetadata: ItemSearchResult = Object.assign(new ItemSearchResul } ] } - }) + }), }); const mockItemWithoutMetadata: ItemSearchResult = Object.assign(new ItemSearchResult(), { indexableObject: @@ -200,12 +200,12 @@ const enviromentNoThumbs = { describe('ItemSearchResultListElementComponent', () => { beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ - imports: [ - TranslateModule.forRoot(), - ItemSearchResultListElementComponent, - TruncatePipe - ], - providers: [ + imports: [ + TranslateModule.forRoot(), + ItemSearchResultListElementComponent, + TruncatePipe + ], + providers: [ { provide: TruncatableService, useValue: mockTruncatableService }, { provide: DSONameService, useClass: DSONameServiceMock }, { provide: APP_CONFIG, useValue: environmentUseThumbs }, @@ -218,11 +218,11 @@ describe('ItemSearchResultListElementComponent', () => { 'invalidateAuthorizationsRequestCache' ]) } - ], - schemas: [NO_ERRORS_SCHEMA] -}).overrideComponent(ItemSearchResultListElementComponent, { - add: {changeDetection: ChangeDetectionStrategy.Default}, - remove: { imports: [ThumbnailComponent,ThemedBadgesComponent, TruncatableComponent, TruncatablePartComponent]} + ], + schemas: [NO_ERRORS_SCHEMA] + }).overrideComponent(ItemSearchResultListElementComponent, { + add: { changeDetection: ChangeDetectionStrategy.Default }, + remove: { imports: [ThumbnailComponent, ThemedBadgesComponent, TruncatableComponent, TruncatablePartComponent] } }).compileComponents(); })); @@ -396,15 +396,17 @@ describe('ItemSearchResultListElementComponent', () => { beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ - imports: [ItemSearchResultListElementComponent, TruncatePipe], - providers: [ - { provide: TruncatableService, useValue: {} }, + imports: [ItemSearchResultListElementComponent, TruncatePipe, TranslateModule.forRoot()], + providers: [ + { provide: TruncatableService, useValue: mockTruncatableService }, { provide: DSONameService, useClass: DSONameServiceMock }, - { provide: APP_CONFIG, useValue: enviromentNoThumbs } - ], - schemas: [NO_ERRORS_SCHEMA] -}).overrideComponent(ItemSearchResultListElementComponent, { - set: {changeDetection: ChangeDetectionStrategy.Default} + { provide: APP_CONFIG, useValue: enviromentNoThumbs }, + { provide: ThemeService, useValue: getMockThemeService() }, + { provide: ActivatedRoute, useValue: new ActivatedRouteStub() }, + ], + schemas: [NO_ERRORS_SCHEMA] + }).overrideComponent(ItemSearchResultListElementComponent, { + set: { changeDetection: ChangeDetectionStrategy.Default } }).compileComponents(); })); diff --git a/src/app/shared/object-list/sidebar-search-list-element/sidebar-search-list-element.component.spec.ts b/src/app/shared/object-list/sidebar-search-list-element/sidebar-search-list-element.component.spec.ts index ac365bdb8b..406c699461 100644 --- a/src/app/shared/object-list/sidebar-search-list-element/sidebar-search-list-element.component.spec.ts +++ b/src/app/shared/object-list/sidebar-search-list-element/sidebar-search-list-element.component.spec.ts @@ -11,6 +11,7 @@ import { createSuccessfulRemoteDataObject$ } from '../../remote-data.utils'; import { HALResource } from '../../../core/shared/hal-resource.model'; import { ChildHALResource } from '../../../core/shared/child-hal-resource.model'; import { DSONameService } from '../../../core/breadcrumbs/dso-name.service'; +import { mockTruncatableService } from '../../mocks/mock-trucatable.service'; export function createSidebarSearchListElementTests( componentClass: any, @@ -36,7 +37,7 @@ export function createSidebarSearchListElementTests( TestBed.configureTestingModule({ imports: [TranslateModule.forRoot(), RouterTestingModule.withRoutes([]), componentClass, VarDirective], providers: [ - { provide: TruncatableService, useValue: {} }, + { provide: TruncatableService, useValue: mockTruncatableService }, { provide: LinkService, useValue: linkService }, DSONameService, ...extraProviders diff --git a/src/app/shared/pagination/pagination.component.spec.ts b/src/app/shared/pagination/pagination.component.spec.ts index 300afdd786..8130a7c887 100644 --- a/src/app/shared/pagination/pagination.component.spec.ts +++ b/src/app/shared/pagination/pagination.component.spec.ts @@ -34,6 +34,7 @@ import { storeModuleConfig } from '../../app.reducer'; import { PaginationService } from '../../core/pagination/pagination.service'; import { BehaviorSubject } from 'rxjs'; import { FindListOptions } from '../../core/data/find-list-options.model'; +import { RSSComponent } from '../rss-feed/rss.component'; function expectPages(fixture: ComponentFixture, pagesDef: string[]): void { const de = fixture.debugElement.query(By.css('.pagination')); @@ -171,6 +172,10 @@ describe('Pagination component', () => { PaginationComponent ], schemas: [CUSTOM_ELEMENTS_SCHEMA] +}).overrideComponent(PaginationComponent, { + remove: { + imports: [RSSComponent] + } }); })); diff --git a/src/app/shared/resource-policies/create/resource-policy-create.component.spec.ts b/src/app/shared/resource-policies/create/resource-policy-create.component.spec.ts index be775cf57d..54d2d85d52 100644 --- a/src/app/shared/resource-policies/create/resource-policy-create.component.spec.ts +++ b/src/app/shared/resource-policies/create/resource-policy-create.component.spec.ts @@ -22,7 +22,7 @@ import { getMockResourcePolicyService } from '../../mocks/mock-resource-policy-s import { getMockLinkService } from '../../mocks/link-service.mock'; import { RouterStub } from '../../testing/router.stub'; import { Item } from '../../../core/shared/item.model'; -import { ResourcePolicyEvent } from '../form/resource-policy-form.component'; +import { ResourcePolicyEvent, ResourcePolicyFormComponent } from '../form/resource-policy-form.component'; import { GroupMock } from '../../testing/group-mock'; import { submittedResourcePolicy } from '../form/resource-policy-form.component.spec'; import { PolicyType } from '../../../core/resource-policy/models/policy-type.model'; @@ -107,7 +107,13 @@ describe('ResourcePolicyCreateComponent test suite', () => { schemas: [ NO_ERRORS_SCHEMA ] -}).compileComponents(); +}) +.overrideComponent(ResourcePolicyCreateComponent, { + remove: { + imports: [ResourcePolicyFormComponent] + } +}) +.compileComponents(); })); describe('', () => { diff --git a/src/app/shared/resource-policies/form/resource-policy-form.component.spec.ts b/src/app/shared/resource-policies/form/resource-policy-form.component.spec.ts index 65b6dd7adc..0654c3cc02 100644 --- a/src/app/shared/resource-policies/form/resource-policy-form.component.spec.ts +++ b/src/app/shared/resource-policies/form/resource-policy-form.component.spec.ts @@ -1,7 +1,7 @@ import { ComponentFixture, inject, TestBed, waitForAsync } from '@angular/core/testing'; -import { ChangeDetectorRef, Component, NO_ERRORS_SCHEMA } from '@angular/core'; +import { Component, NO_ERRORS_SCHEMA } from '@angular/core'; import { BrowserModule, By } from '@angular/platform-browser'; -import { CommonModule } from '@angular/common'; +import { CommonModule} from '@angular/common'; import { FormsModule, ReactiveFormsModule } from '@angular/forms'; import { NgbModule } from '@ng-bootstrap/ng-bootstrap'; @@ -34,11 +34,16 @@ import { isNotEmptyOperator } from '../../empty.util'; import { ActivatedRoute, Router } from '@angular/router'; import { RemoteData } from '../../../core/data/remote-data'; import { RouterMock } from '../../mocks/router.mock'; -import { Store } from '@ngrx/store'; import { PaginationServiceStub } from '../../testing/pagination-service.stub'; import { PaginationService } from '../../../core/pagination/pagination.service'; import { NoopAnimationsModule } from '@angular/platform-browser/animations'; -import { StoreMock } from '../../testing/store.mock'; +import { DsDynamicTypeBindRelationService } from '../../form/builder/ds-dynamic-form-ui/ds-dynamic-type-bind-relation.service'; +import { SubmissionObjectDataService } from './../../../core/submission/submission-object-data.service'; +import { SubmissionService } from './../../../submission/submission.service'; +import { APP_CONFIG } from 'src/config/app-config.interface'; +import { environment } from 'src/environments/environment.test'; +import { NgxMaskModule } from 'ngx-mask'; +import { provideMockStore } from '@ngrx/store/testing'; export const mockResourcePolicyFormData = { name: [ @@ -175,9 +180,8 @@ describe('ResourcePolicyFormComponent test suite', () => { }; beforeEach(waitForAsync(() => { - TestBed.configureTestingModule({ - imports: [ - BrowserModule, + TestBed.configureTestingModule({ + imports: [ CommonModule, FormsModule, NgbModule, @@ -185,27 +189,36 @@ describe('ResourcePolicyFormComponent test suite', () => { ReactiveFormsModule, TranslateModule.forRoot(), FormComponent, - EpersonGroupListComponent, ResourcePolicyFormComponent, - TestComponent - ], - providers: [ + TestComponent, + NgxMaskModule.forRoot(), + ], + providers: [ { provide: ActivatedRoute, useValue: activatedRouteStub }, { provide: Router, useValue: new RouterMock() }, - { provide: Store, useValue: StoreMock }, + // { provide: Store, useValue: StoreMock }, { provide: EPersonDataService, useValue: epersonService }, { provide: FormService, useValue: formService }, { provide: GroupDataService, useValue: groupService }, { provide: PaginationService, useValue: new PaginationServiceStub() }, { provide: RequestService, useValue: getMockRequestService() }, FormBuilderService, - ChangeDetectorRef, - ResourcePolicyFormComponent - ], - schemas: [ + { provide: DsDynamicTypeBindRelationService, useClass: DsDynamicTypeBindRelationService }, + { provide: SubmissionObjectDataService, useValue: {} }, + { provide: SubmissionService, useValue: {} }, + { provide: APP_CONFIG, useValue: environment }, + provideMockStore({}) + ], + schemas: [ NO_ERRORS_SCHEMA - ] -}).compileComponents(); + ] + }) + .overrideComponent(ResourcePolicyFormComponent, { + remove: { + imports: [EpersonGroupListComponent] + } + }) + .compileComponents(); })); describe('', () => { @@ -227,7 +240,6 @@ describe('ResourcePolicyFormComponent test suite', () => { }); it('should create ResourcePolicyFormComponent', inject([ResourcePolicyFormComponent], (app: ResourcePolicyFormComponent) => { - expect(app).toBeDefined(); })); @@ -449,14 +461,14 @@ describe('ResourcePolicyFormComponent test suite', () => { // declare a test component @Component({ - selector: 'ds-test-cmp', - template: ``, - standalone: true, - imports: [BrowserModule, - CommonModule, - FormsModule, - NgbModule, - ReactiveFormsModule] + selector: 'ds-test-cmp', + template: ``, + standalone: true, + imports: [BrowserModule, + CommonModule, + FormsModule, + NgbModule, + ReactiveFormsModule] }) class TestComponent { diff --git a/src/app/shared/resource-policies/form/resource-policy-form.component.ts b/src/app/shared/resource-policies/form/resource-policy-form.component.ts index d462331e5a..3a2b304a4f 100644 --- a/src/app/shared/resource-policies/form/resource-policy-form.component.ts +++ b/src/app/shared/resource-policies/form/resource-policy-form.component.ts @@ -45,7 +45,7 @@ import { NgbModal, NgbNavChangeEvent, NgbNavModule } from '@ng-bootstrap/ng-boot import { FormComponent } from '../../form/form.component'; import { EpersonGroupListComponent } from '../../eperson-group-list/eperson-group-list.component'; import { TranslateModule } from '@ngx-translate/core'; -import { AsyncPipe, NgIf } from '@angular/common'; +import { AsyncPipe, CommonModule, NgFor, NgIf } from '@angular/common'; export interface ResourcePolicyEvent { object: ResourcePolicy; @@ -65,7 +65,8 @@ export interface ResourcePolicyEvent { EpersonGroupListComponent, TranslateModule, AsyncPipe, - NgIf + NgIf, + NgFor, ], standalone: true }) diff --git a/src/app/shared/search-form/scope-selector-modal/scope-selector-modal.component.spec.ts b/src/app/shared/search-form/scope-selector-modal/scope-selector-modal.component.spec.ts index 3d86413259..e0a0e90e2b 100644 --- a/src/app/shared/search-form/scope-selector-modal/scope-selector-modal.component.spec.ts +++ b/src/app/shared/search-form/scope-selector-modal/scope-selector-modal.component.spec.ts @@ -8,6 +8,7 @@ import { Community } from '../../../core/shared/community.model'; import { MetadataValue } from '../../../core/shared/metadata.models'; import { createSuccessfulRemoteDataObject } from '../../remote-data.utils'; import { RouterStub } from '../../testing/router.stub'; +import { DSOSelectorComponent } from '../../dso-selector/dso-selector/dso-selector.component'; describe('ScopeSelectorModalComponent', () => { let component: ScopeSelectorModalComponent; @@ -26,30 +27,36 @@ describe('ScopeSelectorModalComponent', () => { const communityRD = createSuccessfulRemoteDataObject(community); const modalStub = jasmine.createSpyObj('modalStub', ['close']); - beforeEach(waitForAsync(() => { - TestBed.configureTestingModule({ - imports: [TranslateModule.forRoot(), ScopeSelectorModalComponent], - providers: [ + beforeEach(waitForAsync(async () => { + await TestBed.configureTestingModule({ + imports: [TranslateModule.forRoot(), ScopeSelectorModalComponent], + providers: [ { provide: NgbActiveModal, useValue: modalStub }, { - provide: ActivatedRoute, - useValue: { - root: { - snapshot: { - data: { - dso: communityRD, - }, - }, - } + provide: ActivatedRoute, + useValue: { + root: { + snapshot: { + data: { + dso: communityRD, + }, + }, }, + }, }, { - provide: Router, useValue: router - } - ], - schemas: [NO_ERRORS_SCHEMA] -}).compileComponents(); - + provide: Router, + useValue: router, + }, + ], + schemas: [NO_ERRORS_SCHEMA], + }) + .overrideComponent(ScopeSelectorModalComponent, { + remove: { + imports: [DSOSelectorComponent], + }, + }) + .compileComponents(); })); beforeEach(() => { diff --git a/src/app/shared/search/search-filters/search-filter/search-facet-filter-options/search-facet-option/search-facet-option.component.spec.ts b/src/app/shared/search/search-filters/search-filter/search-facet-filter-options/search-facet-option/search-facet-option.component.spec.ts index 0dac98546a..d216144133 100644 --- a/src/app/shared/search/search-filters/search-filter/search-facet-filter-options/search-facet-option/search-facet-option.component.spec.ts +++ b/src/app/shared/search/search-filters/search-filter/search-facet-filter-options/search-facet-option/search-facet-option.component.spec.ts @@ -3,7 +3,7 @@ import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { FormsModule } from '@angular/forms'; import { By } from '@angular/platform-browser'; import { NoopAnimationsModule } from '@angular/platform-browser/animations'; -import { Router } from '@angular/router'; +import { ActivatedRoute, Router } from '@angular/router'; import { TranslateModule } from '@ngx-translate/core'; import { of as observableOf } from 'rxjs'; import { SearchConfigurationService } from '../../../../../../core/shared/search/search-configuration.service'; @@ -19,6 +19,7 @@ import { PaginationComponentOptions } from '../../../../../pagination/pagination import { PaginationService } from '../../../../../../core/pagination/pagination.service'; import { PaginationServiceStub } from '../../../../../testing/pagination-service.stub'; import { ShortNumberPipe } from '../../../../../utils/short-number.pipe'; +import { ActivatedRouteStub } from '../../../../../../shared/testing/active-router.stub'; describe('SearchFacetOptionComponent', () => { let comp: SearchFacetOptionComponent; @@ -112,7 +113,8 @@ describe('SearchFacetOptionComponent', () => { } /* eslint-enable no-empty, @typescript-eslint/no-empty-function */ } - } + }, + { provide: ActivatedRoute, useValue: new ActivatedRouteStub() }, ], schemas: [NO_ERRORS_SCHEMA] }).overrideComponent(SearchFacetOptionComponent, { diff --git a/src/app/shared/search/search-filters/search-filter/search-facet-filter-options/search-facet-range-option/search-facet-range-option.component.spec.ts b/src/app/shared/search/search-filters/search-filter/search-facet-filter-options/search-facet-range-option/search-facet-range-option.component.spec.ts index a274eceda7..3f60a0ac22 100644 --- a/src/app/shared/search/search-filters/search-filter/search-facet-filter-options/search-facet-range-option/search-facet-range-option.component.spec.ts +++ b/src/app/shared/search/search-filters/search-filter/search-facet-filter-options/search-facet-range-option/search-facet-range-option.component.spec.ts @@ -9,7 +9,7 @@ import { FormsModule } from '@angular/forms'; import { of as observableOf } from 'rxjs'; import { SearchService } from '../../../../../../core/shared/search/search.service'; import { SearchServiceStub } from '../../../../../testing/search-service.stub'; -import { Router } from '@angular/router'; +import { Router, RouterLink } from '@angular/router'; import { RouterStub } from '../../../../../testing/router.stub'; import { SearchConfigurationService } from '../../../../../../core/shared/search/search-configuration.service'; import { SearchFilterService } from '../../../../../../core/shared/search/search-filter.service'; @@ -63,33 +63,36 @@ describe('SearchFacetRangeOptionComponent', () => { beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ - imports: [TranslateModule.forRoot(), NoopAnimationsModule, FormsModule, SearchFacetRangeOptionComponent, ShortNumberPipe], - providers: [ + imports: [TranslateModule.forRoot(), NoopAnimationsModule, FormsModule, SearchFacetRangeOptionComponent, ShortNumberPipe], + providers: [ { provide: SearchService, useValue: new SearchServiceStub(searchLink) }, { provide: Router, useValue: new RouterStub() }, { provide: PaginationService, useValue: paginationService }, { - provide: SearchConfigurationService, useValue: { - searchOptions: observableOf({}), - paginationId: 'page-id' - } + provide: SearchConfigurationService, useValue: { + searchOptions: observableOf({}), + paginationId: 'page-id' + } }, { - provide: SearchFilterService, useValue: { - isFilterActiveWithValue: (paramName: string, filterValue: string) => observableOf(true), - getPage: (paramName: string) => page, - /* eslint-disable no-empty,@typescript-eslint/no-empty-function */ - incrementPage: (filterName: string) => { - }, - resetPage: (filterName: string) => { - } - /* eslint-enable no-empty, @typescript-eslint/no-empty-function */ + provide: SearchFilterService, useValue: { + isFilterActiveWithValue: (paramName: string, filterValue: string) => observableOf(true), + getPage: (paramName: string) => page, + /* eslint-disable no-empty,@typescript-eslint/no-empty-function */ + incrementPage: (filterName: string) => { + }, + resetPage: (filterName: string) => { } + /* eslint-enable no-empty, @typescript-eslint/no-empty-function */ + } } - ], - schemas: [NO_ERRORS_SCHEMA] -}).overrideComponent(SearchFacetRangeOptionComponent, { - set: { changeDetection: ChangeDetectionStrategy.Default } + ], + schemas: [NO_ERRORS_SCHEMA] + }).overrideComponent(SearchFacetRangeOptionComponent, { + remove: { + imports: [RouterLink] + }, + add: { changeDetection: ChangeDetectionStrategy.Default } }).compileComponents(); })); diff --git a/src/app/shared/search/search-filters/search-filter/search-facet-filter-options/search-facet-selected-option/search-facet-selected-option.component.spec.ts b/src/app/shared/search/search-filters/search-filter/search-facet-filter-options/search-facet-selected-option/search-facet-selected-option.component.spec.ts index 3467f9e64b..ee6c81bafd 100644 --- a/src/app/shared/search/search-filters/search-filter/search-facet-filter-options/search-facet-selected-option/search-facet-selected-option.component.spec.ts +++ b/src/app/shared/search/search-filters/search-filter/search-facet-filter-options/search-facet-selected-option/search-facet-selected-option.component.spec.ts @@ -2,7 +2,7 @@ import { ChangeDetectionStrategy, NO_ERRORS_SCHEMA } from '@angular/core'; import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { FormsModule } from '@angular/forms'; import { NoopAnimationsModule } from '@angular/platform-browser/animations'; -import { Router } from '@angular/router'; +import { ActivatedRoute, Router } from '@angular/router'; import { TranslateModule } from '@ngx-translate/core'; import { of as observableOf } from 'rxjs'; import { SearchConfigurationService } from '../../../../../../core/shared/search/search-configuration.service'; @@ -17,6 +17,7 @@ import { SearchFacetSelectedOptionComponent } from './search-facet-selected-opti import { PaginationComponentOptions } from '../../../../../pagination/pagination-component-options.model'; import { PaginationService } from '../../../../../../core/pagination/pagination.service'; import { PaginationServiceStub } from '../../../../../testing/pagination-service.stub'; +import { ActivatedRouteStub } from '../../../../../../shared/testing/active-router.stub'; describe('SearchFacetSelectedOptionComponent', () => { let comp: SearchFacetSelectedOptionComponent; @@ -136,7 +137,8 @@ describe('SearchFacetSelectedOptionComponent', () => { } /* eslint-enable no-empty, @typescript-eslint/no-empty-function */ } - } + }, + { provide: ActivatedRoute, useValue: new ActivatedRouteStub() }, ], schemas: [NO_ERRORS_SCHEMA] }).overrideComponent(SearchFacetSelectedOptionComponent, { diff --git a/src/app/shared/search/search-labels/search-label/search-label.component.spec.ts b/src/app/shared/search/search-labels/search-label/search-label.component.spec.ts index 482912537b..12500393a3 100644 --- a/src/app/shared/search/search-labels/search-label/search-label.component.spec.ts +++ b/src/app/shared/search/search-labels/search-label/search-label.component.spec.ts @@ -4,7 +4,7 @@ import { TranslateModule } from '@ngx-translate/core'; import { ChangeDetectionStrategy, NO_ERRORS_SCHEMA } from '@angular/core'; import { FormsModule } from '@angular/forms'; import { Observable, of as observableOf } from 'rxjs'; -import { Params, Router } from '@angular/router'; +import { ActivatedRoute, Params, Router, RouterLink } from '@angular/router'; import { SearchLabelComponent } from './search-label.component'; import { ObjectKeysPipe } from '../../../utils/object-keys-pipe'; import { SEARCH_CONFIG_SERVICE } from '../../../../my-dspace-page/my-dspace-page.component'; @@ -15,6 +15,7 @@ import { PaginationComponentOptions } from '../../../pagination/pagination-compo import { PaginationService } from '../../../../core/pagination/pagination.service'; import { SearchConfigurationService } from '../../../../core/shared/search/search-configuration.service'; import { PaginationServiceStub } from '../../../testing/pagination-service.stub'; +import { ActivatedRouteStub } from '../../../../shared/testing/active-router.stub'; describe('SearchLabelComponent', () => { let comp: SearchLabelComponent; @@ -42,18 +43,21 @@ describe('SearchLabelComponent', () => { beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ - imports: [TranslateModule.forRoot(), NoopAnimationsModule, FormsModule, SearchLabelComponent, ObjectKeysPipe], - providers: [ + imports: [TranslateModule.forRoot(), NoopAnimationsModule, FormsModule, SearchLabelComponent, ObjectKeysPipe], + providers: [ { provide: SearchService, useValue: new SearchServiceStub(searchLink) }, { provide: SEARCH_CONFIG_SERVICE, useValue: new SearchConfigurationServiceStub() }, { provide: SearchConfigurationService, useValue: new SearchConfigurationServiceStub() }, { provide: PaginationService, useValue: paginationService }, - { provide: Router, useValue: {} } - // { provide: SearchConfigurationService, useValue: {getCurrentFrontendFilters : () => observableOf({})} } - ], - schemas: [NO_ERRORS_SCHEMA] -}).overrideComponent(SearchLabelComponent, { - set: { changeDetection: ChangeDetectionStrategy.Default } + { provide: Router, useValue: {} }, + { provide: ActivatedRoute, useValue: new ActivatedRouteStub() }, + ], + schemas: [NO_ERRORS_SCHEMA] + }).overrideComponent(SearchLabelComponent, { + remove: { + imports: [RouterLink] + }, + add: { changeDetection: ChangeDetectionStrategy.Default } }).compileComponents(); })); diff --git a/src/app/shared/search/search-labels/search-labels.component.spec.ts b/src/app/shared/search/search-labels/search-labels.component.spec.ts index 98a4401bbd..91f6a64c56 100644 --- a/src/app/shared/search/search-labels/search-labels.component.spec.ts +++ b/src/app/shared/search/search-labels/search-labels.component.spec.ts @@ -10,6 +10,7 @@ import { RouterTestingModule } from '@angular/router/testing'; import { ObjectKeysPipe } from '../../utils/object-keys-pipe'; import { SearchServiceStub } from '../../testing/search-service.stub'; import { SEARCH_CONFIG_SERVICE } from '../../../my-dspace-page/my-dspace-page.component'; +import { SearchLabelComponent } from './search-label/search-label.component'; describe('SearchLabelsComponent', () => { let comp: SearchLabelsComponent; @@ -31,14 +32,17 @@ describe('SearchLabelsComponent', () => { beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ - imports: [TranslateModule.forRoot(), NoopAnimationsModule, FormsModule, RouterTestingModule, SearchLabelsComponent, ObjectKeysPipe], - providers: [ + imports: [TranslateModule.forRoot(), NoopAnimationsModule, FormsModule, RouterTestingModule, SearchLabelsComponent, ObjectKeysPipe], + providers: [ { provide: SearchService, useValue: new SearchServiceStub(searchLink) }, { provide: SEARCH_CONFIG_SERVICE, useValue: { getCurrentFrontendFilters: () => observableOf(mockFilters) } } - ], - schemas: [NO_ERRORS_SCHEMA] -}).overrideComponent(SearchLabelsComponent, { - set: { changeDetection: ChangeDetectionStrategy.Default } + ], + schemas: [NO_ERRORS_SCHEMA] + }).overrideComponent(SearchLabelsComponent, { + remove: { + imports: [SearchLabelComponent] + }, + add: { changeDetection: ChangeDetectionStrategy.Default } }).compileComponents(); })); diff --git a/src/app/shared/search/search-results/search-results.component.spec.ts b/src/app/shared/search/search-results/search-results.component.spec.ts index 2a8e22da52..d588ab98a4 100644 --- a/src/app/shared/search/search-results/search-results.component.spec.ts +++ b/src/app/shared/search/search-results/search-results.component.spec.ts @@ -7,6 +7,14 @@ import { TranslateModule } from '@ngx-translate/core'; import { SearchResultsComponent } from './search-results.component'; import { QueryParamsDirectiveStub } from '../../testing/query-params-directive.stub'; import { createFailedRemoteDataObject } from '../../remote-data.utils'; +import { ActivatedRoute } from '@angular/router'; +import { ActivatedRouteStub } from '../../testing/active-router.stub'; +import { ThemeService } from '../../theme-support/theme.service'; +import { getMockThemeService } from '../../mocks/theme-service.mock'; +import { SearchExportCsvComponent } from '../search-export-csv/search-export-csv.component'; +import { ObjectCollectionComponent } from '../../object-collection/object-collection.component'; +import { ThemedLoadingComponent } from '../../loading/themed-loading.component'; +import { ErrorComponent } from '../../error/error.component'; describe('SearchResultsComponent', () => { let comp: SearchResultsComponent; @@ -16,10 +24,29 @@ describe('SearchResultsComponent', () => { beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ - imports: [TranslateModule.forRoot(), NoopAnimationsModule, SearchResultsComponent], - declarations: [QueryParamsDirectiveStub], - schemas: [NO_ERRORS_SCHEMA] -}).compileComponents(); + providers: [ + { provide: ActivatedRoute, useValue: new ActivatedRouteStub() }, + { provide: ThemeService, useValue: getMockThemeService() }, + ], + imports: [ + TranslateModule.forRoot(), + NoopAnimationsModule, + SearchResultsComponent, + ], + declarations: [QueryParamsDirectiveStub], + schemas: [NO_ERRORS_SCHEMA], + }) + .overrideComponent(SearchResultsComponent, { + remove: { + imports: [ + SearchExportCsvComponent, + ObjectCollectionComponent, + ThemedLoadingComponent, + ErrorComponent, + ], + }, + }) + .compileComponents(); })); beforeEach(() => { diff --git a/src/app/shared/search/search-sidebar/search-sidebar.component.spec.ts b/src/app/shared/search/search-sidebar/search-sidebar.component.spec.ts index 5b56f583d4..9fffe15b61 100644 --- a/src/app/shared/search/search-sidebar/search-sidebar.component.spec.ts +++ b/src/app/shared/search/search-sidebar/search-sidebar.component.spec.ts @@ -3,7 +3,9 @@ import { TranslateModule } from '@ngx-translate/core'; import { SearchSidebarComponent } from './search-sidebar.component'; import { NgbCollapseModule } from '@ng-bootstrap/ng-bootstrap'; import { By } from '@angular/platform-browser'; -import { NO_ERRORS_SCHEMA } from '@angular/core'; +import { ChangeDetectionStrategy, NO_ERRORS_SCHEMA } from '@angular/core'; +import { ThemedSearchSettingsComponent } from '../search-settings/themed-search-settings.component'; +import { ThemedSearchFiltersComponent } from '../search-filters/themed-search-filters.component'; describe('SearchSidebarComponent', () => { let comp: SearchSidebarComponent; @@ -11,10 +13,22 @@ describe('SearchSidebarComponent', () => { // waitForAsync beforeEach beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ - imports: [TranslateModule.forRoot(), NgbCollapseModule, SearchSidebarComponent], - schemas: [NO_ERRORS_SCHEMA] -}) - .compileComponents(); // compile template and css + imports: [ + TranslateModule.forRoot(), + NgbCollapseModule, + SearchSidebarComponent, + ], + schemas: [NO_ERRORS_SCHEMA], + }) + .overrideComponent(SearchSidebarComponent, { + remove:{ + imports: [ThemedSearchFiltersComponent, ThemedSearchSettingsComponent], + }, + add: { + changeDetection: ChangeDetectionStrategy.Default, + } + }) + .compileComponents(); // compile template and css })); // synchronous beforeEach diff --git a/src/app/shared/search/search.component.spec.ts b/src/app/shared/search/search.component.spec.ts index 4b5a228e64..3cf3543a34 100644 --- a/src/app/shared/search/search.component.spec.ts +++ b/src/app/shared/search/search.component.spec.ts @@ -170,7 +170,7 @@ const routeServiceStub = { getQueryParamsWithPrefix: () => { return observableOf(''); }, - setParameter: () => { + setParameter: (key: any, value: any) => { return; } }; @@ -199,7 +199,8 @@ export function configureSearchComponentTestingModule(compType, additionalDeclar searchConfigurationServiceStub.paginatedSearchOptions = new BehaviorSubject(new PaginatedSearchOptions({pagination: {id: 'default'} as any})); TestBed.configureTestingModule({ - imports: [TranslateModule.forRoot(), RouterTestingModule.withRoutes([]), NoopAnimationsModule, NgbCollapseModule, compType, ...additionalDeclarations], + declarations: [...additionalDeclarations], + imports: [TranslateModule.forRoot(), RouterTestingModule.withRoutes([]), NoopAnimationsModule, NgbCollapseModule, compType], providers: [ { provide: SearchService, useValue: searchServiceStub }, { @@ -220,7 +221,7 @@ export function configureSearchComponentTestingModule(compType, additionalDeclar }, { provide: SidebarService, - useValue: SidebarServiceStub + useClass: SidebarServiceStub }, { provide: SearchFilterService, diff --git a/src/app/shared/subscriptions/subscription-modal/subscription-modal.component.spec.ts b/src/app/shared/subscriptions/subscription-modal/subscription-modal.component.spec.ts index 2c975e7de2..e6d78af39e 100644 --- a/src/app/shared/subscriptions/subscription-modal/subscription-modal.component.spec.ts +++ b/src/app/shared/subscriptions/subscription-modal/subscription-modal.component.spec.ts @@ -17,6 +17,8 @@ import { PageInfo } from '../../../core/shared/page-info.model'; import { buildPaginatedList } from '../../../core/data/paginated-list.model'; import { By } from '@angular/platform-browser'; import { subscriptionMock, subscriptionMock2 } from '../../testing/subscriptions-data.mock'; +import { ThemeService } from '../../theme-support/theme.service'; +import { getMockThemeService } from '../../mocks/theme-service.mock'; describe('SubscriptionModalComponent', () => { let component: SubscriptionModalComponent; @@ -93,6 +95,7 @@ describe('SubscriptionModalComponent', () => { { provide: AuthService, useValue: authService }, { provide: NotificationsService, useValue: notificationServiceStub }, { provide: SubscriptionsDataService, useValue: subscriptionServiceStub }, + { provide: ThemeService, useValue: getMockThemeService() }, ], schemas: [ NO_ERRORS_SCHEMA diff --git a/src/app/shared/subscriptions/subscription-view/subscription-view.component.spec.ts b/src/app/shared/subscriptions/subscription-view/subscription-view.component.spec.ts index a90a26d300..00892d4523 100644 --- a/src/app/shared/subscriptions/subscription-view/subscription-view.component.spec.ts +++ b/src/app/shared/subscriptions/subscription-view/subscription-view.component.spec.ts @@ -26,6 +26,8 @@ import { of as observableOf } from 'rxjs'; import { createSuccessfulRemoteDataObject$ } from '../../remote-data.utils'; import { Item } from '../../../core/shared/item.model'; import { ITEM } from '../../../core/shared/item.resource-type'; +import { ThemeService } from '../../theme-support/theme.service'; +import { getMockThemeService } from '../../mocks/theme-service.mock'; describe('SubscriptionViewComponent', () => { let component: SubscriptionViewComponent; @@ -72,6 +74,7 @@ describe('SubscriptionViewComponent', () => { { provide: ComponentFixtureAutoDetect, useValue: true }, { provide: NotificationsService, useValue: NotificationsServiceStub }, { provide: SubscriptionsDataService, useValue: subscriptionServiceStub }, + { provide: ThemeService, useValue: getMockThemeService() }, ], schemas: [NO_ERRORS_SCHEMA] }) diff --git a/src/app/shared/testing/dynamic-form-mock-services.ts b/src/app/shared/testing/dynamic-form-mock-services.ts index 1cbd470e23..11949aa62b 100644 --- a/src/app/shared/testing/dynamic-form-mock-services.ts +++ b/src/app/shared/testing/dynamic-form-mock-services.ts @@ -4,5 +4,6 @@ export const mockDynamicFormLayoutService = jasmine.createSpyObj('DynamicFormLay }); export const mockDynamicFormValidationService = jasmine.createSpyObj('DynamicFormValidationService', { - showErrorMessages: jasmine.createSpy('showErrorMessages') + showErrorMessages: jasmine.createSpy('showErrorMessages'), + createErrorMessages: jasmine.createSpy('createErrorMessages'), }); diff --git a/src/app/shared/testing/route-service.stub.ts b/src/app/shared/testing/route-service.stub.ts index 8384c3efbc..cec0a0830d 100644 --- a/src/app/shared/testing/route-service.stub.ts +++ b/src/app/shared/testing/route-service.stub.ts @@ -37,6 +37,9 @@ export const routeServiceStub: any = { }, getPreviousUrl: () => { return observableOf('/home'); - } + }, + setParameter: (key: any, value: any) => { + return; + }, /* eslint-enable no-empty, @typescript-eslint/no-empty-function */ }; diff --git a/src/app/shared/testing/router-link-directive.stub.ts b/src/app/shared/testing/router-link-directive.stub.ts index 2357c89225..09a731ab68 100644 --- a/src/app/shared/testing/router-link-directive.stub.ts +++ b/src/app/shared/testing/router-link-directive.stub.ts @@ -4,6 +4,7 @@ import { Directive, Input } from '@angular/core'; @Directive({ // eslint-disable-next-line @angular-eslint/directive-selector selector: '[routerLink]', + standalone: true }) export class RouterLinkDirectiveStub { @Input() routerLink: any; diff --git a/src/app/shared/testing/vocabulary-service.stub.ts b/src/app/shared/testing/vocabulary-service.stub.ts index f6a578dd3d..23451a6273 100644 --- a/src/app/shared/testing/vocabulary-service.stub.ts +++ b/src/app/shared/testing/vocabulary-service.stub.ts @@ -40,6 +40,7 @@ export class VocabularyServiceStub { } findVocabularyById(id: string): Observable> { - return; + return createSuccessfulRemoteDataObject$(Object.assign(new Vocabulary(), { id: 1, name: 'one', type: 'one' })); } + } diff --git a/src/app/shared/truncatable/truncatable-part/truncatable-part.component.spec.ts b/src/app/shared/truncatable/truncatable-part/truncatable-part.component.spec.ts index a789cf5142..627f4517fa 100644 --- a/src/app/shared/truncatable/truncatable-part/truncatable-part.component.spec.ts +++ b/src/app/shared/truncatable/truncatable-part/truncatable-part.component.spec.ts @@ -18,18 +18,19 @@ describe('TruncatablePartComponent', () => { const id1 = '123'; const id2 = '456'; - let truncatableService; - const truncatableServiceStub: any = { - isCollapsed: (id: string) => { - if (id === id1) { - return observableOf(true); - } else { - return observableOf(false); - } - } - }; + let truncatableService: any; + beforeEach(waitForAsync(() => { translateService = getMockTranslateService(); + truncatableService = { + isCollapsed: (id: string) => { + if (id === id1) { + return observableOf(true); + } else { + return observableOf(false); + } + } + }; void TestBed.configureTestingModule({ imports: [NoopAnimationsModule, TranslateModule.forRoot({ @@ -40,7 +41,7 @@ describe('TruncatablePartComponent', () => { }), TruncatablePartComponent], providers: [ { provide: NativeWindowService, useValue: new NativeWindowRef() }, - { provide: TruncatableService, useValue: truncatableServiceStub }, + { provide: TruncatableService, useValue: truncatableService }, ], schemas: [NO_ERRORS_SCHEMA] }).overrideComponent(TruncatablePartComponent, { diff --git a/src/app/shared/upload/uploader/uploader.component.spec.ts b/src/app/shared/upload/uploader/uploader.component.spec.ts index e9dd4d37ef..8a858de96c 100644 --- a/src/app/shared/upload/uploader/uploader.component.spec.ts +++ b/src/app/shared/upload/uploader/uploader.component.spec.ts @@ -2,8 +2,6 @@ import { ChangeDetectorRef, Component, CUSTOM_ELEMENTS_SCHEMA } from '@angular/core'; import { ComponentFixture, inject, TestBed, waitForAsync, } from '@angular/core/testing'; -import { ScrollToService } from '@nicky-lenaers/ngx-scroll-to'; - import { DragService } from '../../../core/drag.service'; import { UploaderOptions } from './uploader-options.model'; import { UploaderComponent } from './uploader.component'; @@ -33,7 +31,6 @@ describe('Chips component', () => { ], providers: [ ChangeDetectorRef, - ScrollToService, UploaderComponent, DragService, { provide: HttpXsrfTokenExtractor, useValue: new HttpXsrfTokenExtractorMock('mock-token') }, diff --git a/src/app/shared/upload/uploader/uploader.component.ts b/src/app/shared/upload/uploader/uploader.component.ts index c6683950ff..0269c2400b 100644 --- a/src/app/shared/upload/uploader/uploader.component.ts +++ b/src/app/shared/upload/uploader/uploader.component.ts @@ -12,7 +12,6 @@ import { import { of as observableOf } from 'rxjs'; import { FileUploader, FileUploadModule } from 'ng2-file-upload'; import uniqueId from 'lodash/uniqueId'; -import { ScrollToService } from '@nicky-lenaers/ngx-scroll-to'; import { UploaderOptions } from './uploader-options.model'; import { hasValue, isNotEmpty, isUndefined } from '../../empty.util'; @@ -99,7 +98,6 @@ export class UploaderComponent { constructor( private cdr: ChangeDetectorRef, - private scrollToService: ScrollToService, private dragService: DragService, private tokenExtractor: HttpXsrfTokenExtractor, private cookieService: CookieService diff --git a/src/app/submission/sections/accesses/section-accesses.component.spec.ts b/src/app/submission/sections/accesses/section-accesses.component.spec.ts index 8a116656f1..8c354bf922 100644 --- a/src/app/submission/sections/accesses/section-accesses.component.spec.ts +++ b/src/app/submission/sections/accesses/section-accesses.component.spec.ts @@ -34,12 +34,28 @@ import { DynamicCheckboxModel, DynamicDatePickerModel, DynamicFormArrayModel, + DynamicFormValidationService, DynamicSelectModel } from '@ng-dynamic-forms/core'; import { AppState } from '../../../app.reducer'; import { getMockFormService } from '../../../shared/mocks/form-service.mock'; import { mockAccessesFormData } from '../../../shared/mocks/submission.mock'; import { accessConditionChangeEvent, checkboxChangeEvent } from '../../../shared/testing/form-event.stub'; +import { provideMockStore } from '@ngrx/store/testing'; +import { DsDynamicTypeBindRelationService } from '../../../shared/form/builder/ds-dynamic-form-ui/ds-dynamic-type-bind-relation.service'; +import { SubmissionObjectDataService } from '../../../core/submission/submission-object-data.service'; +import { SubmissionService } from '../../submission.service'; +import { APP_CONFIG } from 'src/config/app-config.interface'; +import { environment } from 'src/environments/environment.test'; +import { mockDynamicFormValidationService } from '../../../shared/testing/dynamic-form-mock-services'; + +function getMockDsDynamicTypeBindRelationService(): DsDynamicTypeBindRelationService { + return jasmine.createSpyObj('DsDynamicTypeBindRelationService', { + getRelatedFormModel: jasmine.createSpy('getRelatedFormModel'), + matchesCondition: jasmine.createSpy('matchesCondition'), + subscribeRelations: jasmine.createSpy('subscribeRelations') + }); +} describe('SubmissionSectionAccessesComponent', () => { let component: SubmissionSectionAccessesComponent; @@ -93,15 +109,19 @@ describe('SubmissionSectionAccessesComponent', () => { { provide: SectionAccessesService, useValue: sectionAccessesService }, { provide: SectionFormOperationsService, useValue: sectionFormOperationsService }, { provide: JsonPatchOperationsBuilder, useValue: operationsBuilder }, - { provide: TranslateService, useValue: getMockTranslateService() }, { provide: FormService, useValue: getMockFormService() }, { provide: Store, useValue: storeStub }, { provide: SubmissionJsonPatchOperationsService, useValue: SubmissionJsonPatchOperationsServiceStub }, { provide: 'sectionDataProvider', useValue: sectionData }, { provide: 'submissionIdProvider', useValue: '1508' }, - FormBuilderService + { provide: DsDynamicTypeBindRelationService, useValue: getMockDsDynamicTypeBindRelationService()}, + { provide: SubmissionObjectDataService, useValue: {} }, + { provide: SubmissionService, useValue: {} }, + { provide: APP_CONFIG, useValue: environment }, + FormBuilderService, + provideMockStore({}) ] -}) + }) .compileComponents(); }); @@ -172,11 +192,13 @@ describe('SubmissionSectionAccessesComponent', () => { beforeEach(async () => { + formService = getMockFormService(); await TestBed.configureTestingModule({ imports: [ BrowserModule, TranslateModule.forRoot(), - SubmissionSectionAccessesComponent, FormComponent + SubmissionSectionAccessesComponent, + FormComponent, ], providers: [ { provide: SectionsService, useValue: sectionsServiceStub }, @@ -186,25 +208,37 @@ describe('SubmissionSectionAccessesComponent', () => { { provide: SectionFormOperationsService, useValue: sectionFormOperationsService }, { provide: JsonPatchOperationsBuilder, useValue: operationsBuilder }, { provide: TranslateService, useValue: getMockTranslateService() }, - { provide: FormService, useValue: getMockFormService() }, + { provide: FormService, useValue: formService }, { provide: Store, useValue: storeStub }, { provide: SubmissionJsonPatchOperationsService, useValue: SubmissionJsonPatchOperationsServiceStub }, { provide: 'sectionDataProvider', useValue: sectionData }, { provide: 'submissionIdProvider', useValue: '1508' }, - ] -}) + { provide: DsDynamicTypeBindRelationService, useValue: getMockDsDynamicTypeBindRelationService()}, + { provide: SubmissionObjectDataService, useValue: {} }, + { provide: SubmissionService, useValue: {} }, + { provide: APP_CONFIG, useValue: environment }, + { provide: DynamicFormValidationService, useValue: mockDynamicFormValidationService }, + + ] + }) + .overrideComponent(SubmissionSectionAccessesComponent, { + remove: { + imports: [ + + ] + } + }) .compileComponents(); }); - beforeEach(inject([Store], (store: Store) => { + beforeEach(() => { fixture = TestBed.createComponent(SubmissionSectionAccessesComponent); component = fixture.componentInstance; - formService = TestBed.inject(FormService); formService.validateAllFormFields.and.callFake(() => null); formService.isValid.and.returnValue(observableOf(true)); formService.getFormData.and.returnValue(observableOf(mockAccessesFormData)); fixture.detectChanges(); - })); + }); it('should have formModel length should be 1', () => { diff --git a/src/app/submission/sections/cc-license/submission-section-cc-licenses.component.spec.ts b/src/app/submission/sections/cc-license/submission-section-cc-licenses.component.spec.ts index 81afd59905..287cfcf668 100644 --- a/src/app/submission/sections/cc-license/submission-section-cc-licenses.component.spec.ts +++ b/src/app/submission/sections/cc-license/submission-section-cc-licenses.component.spec.ts @@ -18,6 +18,8 @@ import { createSuccessfulRemoteDataObject$ } from '../../../shared/remote-data.u import { createPaginatedList } from '../../../shared/testing/utils.test'; import {ConfigurationDataService} from '../../../core/data/configuration-data.service'; import {ConfigurationProperty} from '../../../core/shared/configuration-property.model'; +import { ThemedLoadingComponent } from '../../../shared/loading/themed-loading.component'; +import { FormBuilderService } from 'src/app/shared/form/builder/form-builder.service'; describe('SubmissionSectionCcLicensesComponent', () => { @@ -182,7 +184,15 @@ describe('SubmissionSectionCcLicensesComponent', () => { { provide: 'collectionIdProvider', useValue: 'test collection id' }, { provide: 'sectionDataProvider', useValue: Object.assign({}, sectionObject) }, { provide: 'submissionIdProvider', useValue: 'test submission id' }, + { provide: FormBuilderService, useValue: {} }, ] +}) +.overrideComponent(SubmissionSectionCcLicensesComponent, { + remove: { + imports:[ + ThemedLoadingComponent, + ] + } }) .compileComponents(); })); diff --git a/src/app/submission/sections/identifiers/section-identifiers.component.spec.ts b/src/app/submission/sections/identifiers/section-identifiers.component.spec.ts index 7f5d53c607..8f73c8c802 100644 --- a/src/app/submission/sections/identifiers/section-identifiers.component.spec.ts +++ b/src/app/submission/sections/identifiers/section-identifiers.component.spec.ts @@ -39,6 +39,8 @@ import { WorkspaceitemSectionIdentifiersObject } from '../../../core/submission/ import { Item } from '../../../core/shared/item.model'; import { PaginationService } from '../../../core/pagination/pagination.service'; import { PaginationServiceStub } from '../../../shared/testing/pagination-service.stub'; +import { ConfigurationDataService } from '../../../core/data/configuration-data.service'; +import { ConfigurationProperty } from '../../../core/shared/configuration-property.model'; function getMockSubmissionFormsConfigService(): SubmissionFormsConfigDataService { return jasmine.createSpyObj('FormOperationsService', { @@ -120,6 +122,15 @@ describe('SubmissionSectionIdentifiersComponent test suite', () => { remove: jasmine.createSpy('remove'), }); + const configurationDataService = jasmine.createSpyObj('configurationDataService', { + findByPropertyName: createSuccessfulRemoteDataObject$(Object.assign(new ConfigurationProperty(), { + name: 'test', + values: [ + 'org.dspace.ctask.general.ProfileFormats = test' + ] + })) + }); + const licenseText = 'License text'; const mockCollection = Object.assign(new Collection(), { name: 'Community 1-Collection 1', @@ -161,6 +172,7 @@ describe('SubmissionSectionIdentifiersComponent test suite', () => { { provide: 'sectionDataProvider', useValue: sectionObject }, { provide: 'submissionIdProvider', useValue: submissionId }, { provide: PaginationService, useValue: paginationService }, + { provide: ConfigurationDataService, useValue: configurationDataService }, ChangeDetectorRef, FormBuilderService, SubmissionSectionIdentifiersComponent diff --git a/src/app/submission/sections/license/section-license.component.spec.ts b/src/app/submission/sections/license/section-license.component.spec.ts index abdedd39a4..2149f602a0 100644 --- a/src/app/submission/sections/license/section-license.component.spec.ts +++ b/src/app/submission/sections/license/section-license.component.spec.ts @@ -27,7 +27,6 @@ import { mockSubmissionCollectionId, mockSubmissionId } from '../../../shared/mocks/submission.mock'; -import { FormComponent } from '../../../shared/form/form.component'; import { JsonPatchOperationPathCombiner } from '../../../core/json-patch/builder/json-patch-operation-path-combiner'; import { SubmissionSectionLicenseComponent } from './section-license.component'; import { CollectionDataService } from '../../../core/data/collection-data.service'; @@ -37,6 +36,8 @@ import { Collection } from '../../../core/shared/collection.model'; import { License } from '../../../core/shared/license.model'; import { FormFieldMetadataValueObject } from '../../../shared/form/builder/models/form-field-metadata-value.model'; import { cold } from 'jasmine-marbles'; +import { SECTION_LICENSE_FORM_MODEL } from './section-license.model'; +import { FormComponent } from 'src/app/shared/form/form.component'; const collectionId = mockSubmissionCollectionId; const licenseText = 'License text'; @@ -85,6 +86,17 @@ const dynamicFormControlEvent: DynamicFormControlEvent = { type: DynamicFormControlEventType.Change }; +const formBuilderServiceStub = { + findById: jasmine.createSpy('findById'), + fromJSON: jasmine.createSpy('fromJSON'), + createFormGroup: () => { + return { + patchValue: () => { }, + reset(_value?: any, _options?: { onlySelf?: boolean; emitEvent?: boolean; }): void { }, + }; + } +}; + describe('SubmissionSectionLicenseComponent test suite', () => { let comp: SubmissionSectionLicenseComponent; @@ -112,7 +124,7 @@ describe('SubmissionSectionLicenseComponent test suite', () => { beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ - imports: [ + imports: [ CommonModule, FormsModule, ReactiveFormsModule, @@ -120,8 +132,8 @@ describe('SubmissionSectionLicenseComponent test suite', () => { FormComponent, SubmissionSectionLicenseComponent, TestComponent - ], - providers: [ + ], + providers: [ { provide: CollectionDataService, useValue: mockCollectionDataService }, { provide: SectionFormOperationsService, useValue: getMockFormOperationsService() }, { provide: FormService, useValue: getMockFormService() }, @@ -133,12 +145,13 @@ describe('SubmissionSectionLicenseComponent test suite', () => { { provide: 'collectionIdProvider', useValue: collectionId }, { provide: 'sectionDataProvider', useValue: Object.assign({}, sectionObject) }, { provide: 'submissionIdProvider', useValue: submissionId }, + { provide: FormBuilderService, useValue: formBuilderServiceStub }, ChangeDetectorRef, - FormBuilderService, SubmissionSectionLicenseComponent - ], - schemas: [NO_ERRORS_SCHEMA] -}).compileComponents().then(); + ], + schemas: [NO_ERRORS_SCHEMA] + }) + .compileComponents().then(); })); describe('', () => { @@ -194,6 +207,8 @@ describe('SubmissionSectionLicenseComponent test suite', () => { mockCollectionDataService.findById.and.returnValue(createSuccessfulRemoteDataObject$(mockCollection)); sectionsServiceStub.getSectionErrors.and.returnValue(observableOf([])); sectionsServiceStub.isSectionReadOnly.and.returnValue(observableOf(false)); + formBuilderServiceStub.findById.and.returnValue(new DynamicCheckboxModel({ id: 'granted'})); + formBuilderServiceStub.fromJSON.and.returnValue(SECTION_LICENSE_FORM_MODEL); }); it('should init section properly', () => { @@ -238,9 +253,7 @@ describe('SubmissionSectionLicenseComponent test suite', () => { it('should have status true when checkbox is selected', () => { fixture.detectChanges(); const model = formBuilderService.findById('granted', comp.formModel); - (model as DynamicCheckboxModel).value = true; - compAsAny.getSectionStatus().subscribe((status) => { expect(status).toBeTruthy(); }); @@ -264,6 +277,7 @@ describe('SubmissionSectionLicenseComponent test suite', () => { mockCollectionDataService.findById.and.returnValue(createSuccessfulRemoteDataObject$(mockCollection)); sectionsServiceStub.getSectionErrors.and.returnValue(observableOf(mockLicenseParsedErrors.license)); sectionsServiceStub.isSectionReadOnly.and.returnValue(observableOf(false)); + formBuilderServiceStub.findById.and.returnValue(new DynamicCheckboxModel({ id: 'granted' })); }); it('should set section errors properly', () => { @@ -320,13 +334,13 @@ describe('SubmissionSectionLicenseComponent test suite', () => { // declare a test component @Component({ - selector: 'ds-test-cmp', - template: ``, - standalone: true, - imports: [ - CommonModule, - FormsModule, - ReactiveFormsModule] + selector: 'ds-test-cmp', + template: ``, + standalone: true, + imports: [ + CommonModule, + FormsModule, + ReactiveFormsModule] }) class TestComponent { diff --git a/src/app/submission/sections/license/section-license.component.ts b/src/app/submission/sections/license/section-license.component.ts index e9be271fa9..0917369b6f 100644 --- a/src/app/submission/sections/license/section-license.component.ts +++ b/src/app/submission/sections/license/section-license.component.ts @@ -137,7 +137,9 @@ export class SubmissionSectionLicenseComponent extends SectionModelComponent { const model = this.formBuilderService.findById('granted', this.formModel); // Translate checkbox label - model.label = this.translateService.instant(model.label); + if (model.label) { + model.label = this.translateService.instant(model.label); + } // Retrieve license accepted status (model as DynamicCheckboxModel).value = (this.sectionData.data as WorkspaceitemSectionLicenseObject).granted; diff --git a/src/app/submission/sections/sherpa-policies/publisher-policy/publisher-policy.component.spec.ts b/src/app/submission/sections/sherpa-policies/publisher-policy/publisher-policy.component.spec.ts index 91ecd5e001..d317aa42cd 100644 --- a/src/app/submission/sections/sherpa-policies/publisher-policy/publisher-policy.component.spec.ts +++ b/src/app/submission/sections/sherpa-policies/publisher-policy/publisher-policy.component.spec.ts @@ -6,6 +6,7 @@ import { TranslateLoader, TranslateModule } from '@ngx-translate/core'; import { SherpaDataResponse } from '../../../../shared/mocks/section-sherpa-policies.service.mock'; import { TranslateLoaderMock } from '../../../../shared/mocks/translate-loader.mock'; +import { ContentAccordionComponent } from '../content-accordion/content-accordion.component'; describe('PublisherPolicyComponent', () => { let component: PublisherPolicyComponent; @@ -21,8 +22,13 @@ describe('PublisherPolicyComponent', () => { useClass: TranslateLoaderMock } }), - PublisherPolicyComponent + PublisherPolicyComponent, ] +}) +.overrideComponent(PublisherPolicyComponent, { + remove: { + imports: [ContentAccordionComponent] + } }) .compileComponents(); }); diff --git a/src/app/submission/sections/upload/file/edit/section-upload-file-edit.component.spec.ts b/src/app/submission/sections/upload/file/edit/section-upload-file-edit.component.spec.ts index 1ebbb9a534..d2f2de4bdd 100644 --- a/src/app/submission/sections/upload/file/edit/section-upload-file-edit.component.spec.ts +++ b/src/app/submission/sections/upload/file/edit/section-upload-file-edit.component.spec.ts @@ -47,6 +47,18 @@ import { import { dateToISOFormat } from '../../../../../shared/date.util'; import { of } from 'rxjs'; import { provideMockStore } from '@ngrx/store/testing'; +import { DsDynamicTypeBindRelationService } from '../../../../../shared/form/builder/ds-dynamic-form-ui/ds-dynamic-type-bind-relation.service'; +import { APP_CONFIG } from '../../../../../../config/app-config.interface'; +import { environment } from '../../../../../../environments/environment.test'; +import { NgxMaskModule } from 'ngx-mask'; + +function getMockDsDynamicTypeBindRelationService(): DsDynamicTypeBindRelationService { + return jasmine.createSpyObj('DsDynamicTypeBindRelationService', { + getRelatedFormModel: jasmine.createSpy('getRelatedFormModel'), + matchesCondition: jasmine.createSpy('matchesCondition'), + subscribeRelations: jasmine.createSpy('subscribeRelations') + }); +} const jsonPatchOpBuilder: any = jasmine.createSpyObj('jsonPatchOpBuilder', { add: jasmine.createSpy('add'), @@ -89,7 +101,8 @@ describe('SubmissionSectionUploadFileEditComponent test suite', () => { TranslateModule.forRoot(), FormComponent, SubmissionSectionUploadFileEditComponent, - TestComponent + TestComponent, + NgxMaskModule.forRoot(), ], providers: [ { provide: FormService, useValue: getMockFormService() }, @@ -97,13 +110,15 @@ describe('SubmissionSectionUploadFileEditComponent test suite', () => { { provide: SubmissionJsonPatchOperationsService, useValue: submissionJsonPatchOperationsServiceStub }, { provide: JsonPatchOperationsBuilder, useValue: jsonPatchOpBuilder }, { provide: SectionUploadService, useValue: getMockSectionUploadService() }, - provideMockStore(), + provideMockStore({}), FormBuilderService, ChangeDetectorRef, SubmissionSectionUploadFileEditComponent, NgbModal, NgbActiveModal, FormComponent, + { provide: DsDynamicTypeBindRelationService, useValue: getMockDsDynamicTypeBindRelationService() }, + { provide: APP_CONFIG, useValue: environment }, ], schemas: [NO_ERRORS_SCHEMA] }).compileComponents().then(); diff --git a/src/app/submission/sections/upload/file/section-upload-file.component.spec.ts b/src/app/submission/sections/upload/file/section-upload-file.component.spec.ts index bffd74eb1b..c4a23e01a9 100644 --- a/src/app/submission/sections/upload/file/section-upload-file.component.spec.ts +++ b/src/app/submission/sections/upload/file/section-upload-file.component.spec.ts @@ -33,6 +33,8 @@ import { getMockSectionUploadService } from '../../../../shared/mocks/section-up import { SubmissionSectionUploadFileEditComponent } from './edit/section-upload-file-edit.component'; import { FormBuilderService } from '../../../../shared/form/builder/form-builder.service'; import { SubmissionSectionUploadFileViewComponent } from './view/section-upload-file-view.component'; +import { ThemeService } from '../../../../shared/theme-support/theme.service'; +import { getMockThemeService } from '../../../../shared/mocks/theme-service.mock'; @@ -94,6 +96,7 @@ describe('SubmissionSectionUploadFileComponent test suite', () => { { provide: SubmissionJsonPatchOperationsService, useValue: submissionJsonPatchOperationsServiceStub }, { provide: SubmissionService, useClass: SubmissionServiceStub }, { provide: SectionUploadService, useValue: getMockSectionUploadService() }, + { provide: ThemeService, useValue: getMockThemeService() }, ChangeDetectorRef, NgbModal, SubmissionSectionUploadFileComponent, diff --git a/src/app/submission/sections/upload/file/view/section-upload-file-view.component.spec.ts b/src/app/submission/sections/upload/file/view/section-upload-file-view.component.spec.ts index a050d91243..f29bd252d4 100644 --- a/src/app/submission/sections/upload/file/view/section-upload-file-view.component.spec.ts +++ b/src/app/submission/sections/upload/file/view/section-upload-file-view.component.spec.ts @@ -1,4 +1,4 @@ -import { Component, NO_ERRORS_SCHEMA } from '@angular/core'; +import { ChangeDetectionStrategy, Component, NO_ERRORS_SCHEMA } from '@angular/core'; import { ComponentFixture, inject, TestBed, waitForAsync } from '@angular/core/testing'; import { TranslateModule } from '@ngx-translate/core'; @@ -9,6 +9,7 @@ import { SubmissionSectionUploadFileViewComponent } from './section-upload-file- import { TruncatePipe } from '../../../../../shared/utils/truncate.pipe'; import { Metadata } from '../../../../../core/shared/metadata.utils'; import { createTestComponent } from '../../../../../shared/testing/utils.test'; +import { SubmissionSectionUploadAccessConditionsComponent } from '../../accessConditions/submission-section-upload-access-conditions.component'; describe('SubmissionSectionUploadFileViewComponent test suite', () => { @@ -18,20 +19,29 @@ describe('SubmissionSectionUploadFileViewComponent test suite', () => { const fileData: any = mockUploadFiles[0]; - beforeEach(waitForAsync(() => { - TestBed.configureTestingModule({ - imports: [ + beforeEach(waitForAsync(async () => { + await TestBed.configureTestingModule({ + imports: [ TranslateModule.forRoot(), TruncatePipe, FormComponent, SubmissionSectionUploadFileViewComponent, TestComponent - ], - providers: [ + ], + providers: [ SubmissionSectionUploadFileViewComponent - ], - schemas: [NO_ERRORS_SCHEMA] -}).compileComponents().then(); + ], + schemas: [NO_ERRORS_SCHEMA] + }) + .overrideComponent(SubmissionSectionUploadFileViewComponent, { + remove: { + imports: [SubmissionSectionUploadAccessConditionsComponent] + }, + add: { + changeDetection: ChangeDetectionStrategy.Default + } + }) + .compileComponents().then(); })); describe('', () => { @@ -89,9 +99,9 @@ describe('SubmissionSectionUploadFileViewComponent test suite', () => { // declare a test component @Component({ - selector: 'ds-test-cmp', - template: ``, - standalone: true + selector: 'ds-test-cmp', + template: ``, + standalone: true }) class TestComponent { diff --git a/src/app/submission/sections/upload/section-upload.component.spec.ts b/src/app/submission/sections/upload/section-upload.component.spec.ts index 47a59102a9..301231bd5c 100644 --- a/src/app/submission/sections/upload/section-upload.component.spec.ts +++ b/src/app/submission/sections/upload/section-upload.component.spec.ts @@ -38,6 +38,9 @@ import { getMockSectionUploadService } from '../../../shared/mocks/section-uploa import { SubmissionUploadsModel } from '../../../core/config/models/config-submission-uploads.model'; import { buildPaginatedList } from '../../../core/data/paginated-list.model'; import { PageInfo } from '../../../core/shared/page-info.model'; +import { AlertComponent } from '../../../shared/alert/alert.component'; +import { ThemeService } from '../../../shared/theme-support/theme.service'; +import { getMockThemeService } from '../../../shared/mocks/theme-service.mock'; function getMockSubmissionUploadsConfigService(): SubmissionFormsConfigDataService { return jasmine.createSpyObj('SubmissionUploadsConfigService', { @@ -178,11 +181,18 @@ describe('SubmissionSectionUploadComponent test suite', () => { { provide: SectionUploadService, useValue: bitstreamService }, { provide: 'sectionDataProvider', useValue: sectionObject }, { provide: 'submissionIdProvider', useValue: submissionId }, + { provide: ThemeService, useValue: getMockThemeService()}, ChangeDetectorRef, SubmissionSectionUploadComponent ], schemas: [NO_ERRORS_SCHEMA] -}).compileComponents().then(); +}) +.overrideComponent(SubmissionSectionUploadComponent, { + remove: { + imports: [AlertComponent] + } +}) +.compileComponents().then(); })); describe('', () => { diff --git a/src/app/subscriptions-page/subscriptions-page.component.spec.ts b/src/app/subscriptions-page/subscriptions-page.component.spec.ts index 8f710d7dfa..4355480f3c 100644 --- a/src/app/subscriptions-page/subscriptions-page.component.spec.ts +++ b/src/app/subscriptions-page/subscriptions-page.component.spec.ts @@ -26,6 +26,9 @@ import { SubscriptionViewComponent } from '../shared/subscriptions/subscription- import { PageInfo } from '../core/shared/page-info.model'; import { createSuccessfulRemoteDataObject$ } from '../shared/remote-data.utils'; import { buildPaginatedList } from '../core/data/paginated-list.model'; +import { ThemedLoadingComponent } from '../shared/loading/themed-loading.component'; +import { PaginationComponent } from '../shared/pagination/pagination.component'; +import { AlertComponent } from '../shared/alert/alert.component'; describe('SubscriptionsPageComponent', () => { let component: SubscriptionsPageComponent; @@ -54,27 +57,32 @@ describe('SubscriptionsPageComponent', () => { beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ - imports: [ + imports: [ CommonModule, BrowserModule, RouterTestingModule.withRoutes([]), TranslateModule.forRoot({ - loader: { - provide: TranslateLoader, - useClass: TranslateLoaderMock - } + loader: { + provide: TranslateLoader, + useClass: TranslateLoaderMock + } }), NoopAnimationsModule, SubscriptionsPageComponent, SubscriptionViewComponent, VarDirective - ], - providers: [ + ], + providers: [ { provide: SubscriptionsDataService, useValue: subscriptionServiceStub }, { provide: ActivatedRoute, useValue: new MockActivatedRoute() }, { provide: AuthService, useValue: authServiceStub }, { provide: PaginationService, useValue: paginationService } - ], - schemas: [NO_ERRORS_SCHEMA] -}) + ], + schemas: [NO_ERRORS_SCHEMA] + }) + .overrideComponent(SubscriptionsPageComponent, { + remove: { + imports: [ThemedLoadingComponent, PaginationComponent, AlertComponent] + } + }) .compileComponents(); })); diff --git a/src/app/workflowitems-edit-page/advanced-workflow-action/advanced-workflow-action-select-reviewer/reviewers-list/reviewers-list.component.spec.ts b/src/app/workflowitems-edit-page/advanced-workflow-action/advanced-workflow-action-select-reviewer/reviewers-list/reviewers-list.component.spec.ts index 4fafd70edd..c3d83c328c 100644 --- a/src/app/workflowitems-edit-page/advanced-workflow-action/advanced-workflow-action-select-reviewer/reviewers-list/reviewers-list.component.spec.ts +++ b/src/app/workflowitems-edit-page/advanced-workflow-action/advanced-workflow-action-select-reviewer/reviewers-list/reviewers-list.component.spec.ts @@ -3,7 +3,7 @@ import { NO_ERRORS_SCHEMA, SimpleChange, DebugElement } from '@angular/core'; import { ComponentFixture, fakeAsync, flush, TestBed, waitForAsync } from '@angular/core/testing'; import { FormsModule, ReactiveFormsModule } from '@angular/forms'; import { BrowserModule, By } from '@angular/platform-browser'; -import { Router } from '@angular/router'; +import { ActivatedRoute, Router } from '@angular/router'; import { NgbModule } from '@ng-bootstrap/ng-bootstrap'; import { TranslateLoader, TranslateModule, TranslateService } from '@ngx-translate/core'; import { Observable, of as observableOf } from 'rxjs'; @@ -32,6 +32,9 @@ import { RouterMock } from '../../../../shared/mocks/router.mock'; import { PaginationService } from '../../../../core/pagination/pagination.service'; import { PaginationServiceStub } from '../../../../shared/testing/pagination-service.stub'; import { EpersonDtoModel } from '../../../../core/eperson/models/eperson-dto.model'; +import { ContextHelpDirective } from '../../../../shared/context-help.directive'; +import { PaginationComponent } from '../../../../shared/pagination/pagination.component'; +import { ActivatedRouteStub } from '../../../../shared/testing/active-router.stub'; describe('ReviewersListComponent', () => { let component: ReviewersListComponent; @@ -150,9 +153,16 @@ describe('ReviewersListComponent', () => { { provide: FormBuilderService, useValue: builderService }, { provide: Router, useValue: new RouterMock() }, { provide: PaginationService, useValue: paginationService }, + { provide: ActivatedRoute, useValue: new ActivatedRouteStub() }, ], schemas: [NO_ERRORS_SCHEMA] -}).compileComponents(); +}) +.overrideComponent(ReviewersListComponent, { + remove: { + imports: [ContextHelpDirective, PaginationComponent] + } +}) +.compileComponents(); })); beforeEach(() => { diff --git a/src/app/workflowitems-edit-page/advanced-workflow-action/advanced-workflow-action/advanced-workflow-action.component.spec.ts b/src/app/workflowitems-edit-page/advanced-workflow-action/advanced-workflow-action/advanced-workflow-action.component.spec.ts index 1fbde0d59c..9389b00828 100644 --- a/src/app/workflowitems-edit-page/advanced-workflow-action/advanced-workflow-action/advanced-workflow-action.component.spec.ts +++ b/src/app/workflowitems-edit-page/advanced-workflow-action/advanced-workflow-action/advanced-workflow-action.component.spec.ts @@ -21,7 +21,7 @@ import { ProcessTaskResponse } from '../../../core/tasks/models/process-task-res import { WorkflowItemDataServiceStub } from '../../../shared/testing/workflow-item-data-service.stub'; import { RequestService } from '../../../core/data/request.service'; import { RequestServiceStub } from '../../../shared/testing/request-service.stub'; -import { LocationStub } from '../../../shared/testing/location.stub'; +import { WorkflowItemActionPageDirective } from '../../workflow-item-action-page.component'; const workflowId = '1'; @@ -30,23 +30,24 @@ describe('AdvancedWorkflowActionComponent', () => { let fixture: ComponentFixture; let claimedTaskDataService: ClaimedTaskDataServiceStub; - let location: LocationStub; let notificationService: NotificationsServiceStub; let workflowActionDataService: WorkflowActionDataServiceStub; let workflowItemDataService: WorkflowItemDataServiceStub; + let mockLocation; beforeEach(async () => { claimedTaskDataService = new ClaimedTaskDataServiceStub(); - location = new LocationStub(); notificationService = new NotificationsServiceStub(); workflowActionDataService = new WorkflowActionDataServiceStub(); workflowItemDataService = new WorkflowItemDataServiceStub(); + mockLocation = jasmine.createSpyObj(['getState']); await TestBed.configureTestingModule({ imports: [ TranslateModule.forRoot(), RouterTestingModule, TestComponent, + WorkflowItemActionPageDirective, MockComponent(DSOSelectorComponent) ], providers: [ @@ -64,14 +65,15 @@ describe('AdvancedWorkflowActionComponent', () => { }, }, { provide: ClaimedTaskDataService, useValue: claimedTaskDataService }, - { provide: Location, useValue: location }, + { provide: Location, useValue: mockLocation }, { provide: NotificationsService, useValue: notificationService }, { provide: RouteService, useValue: routeServiceStub }, { provide: WorkflowActionDataService, useValue: workflowActionDataService }, { provide: WorkflowItemDataService, useValue: workflowItemDataService }, { provide: RequestService, useClass: RequestServiceStub }, - ] -}).compileComponents(); + ] + }) + .compileComponents(); }); beforeEach(() => { diff --git a/src/app/workflowitems-edit-page/advanced-workflow-action/advanced-workflow-actions-loader/advanced-workflow-actions-loader.component.spec.ts b/src/app/workflowitems-edit-page/advanced-workflow-action/advanced-workflow-actions-loader/advanced-workflow-actions-loader.component.spec.ts index 1594febae0..15411d1258 100644 --- a/src/app/workflowitems-edit-page/advanced-workflow-action/advanced-workflow-actions-loader/advanced-workflow-actions-loader.component.spec.ts +++ b/src/app/workflowitems-edit-page/advanced-workflow-action/advanced-workflow-actions-loader/advanced-workflow-actions-loader.component.spec.ts @@ -1,14 +1,16 @@ +/* eslint-disable max-classes-per-file */ import { ComponentFixture, TestBed } from '@angular/core/testing'; import { AdvancedWorkflowActionsLoaderComponent } from './advanced-workflow-actions-loader.component'; import { Router } from '@angular/router'; import { RouterStub } from '../../../shared/testing/router.stub'; -import { ChangeDetectionStrategy, Component } from '@angular/core'; +import { ChangeDetectionStrategy, Component, ComponentFactoryResolver, Directive, NgModule, ViewContainerRef } from '@angular/core'; import { AdvancedWorkflowActionsDirective } from './advanced-workflow-actions.directive'; import { rendersAdvancedWorkflowTaskOption } from '../../../shared/mydspace-actions/claimed-task/switcher/claimed-task-actions-decorator'; import { By } from '@angular/platform-browser'; import { PAGE_NOT_FOUND_PATH } from '../../../app-routing-paths'; +import { RouterTestingModule } from '@angular/router/testing'; const ADVANCED_WORKFLOW_ACTION_TEST = 'testaction'; @@ -17,17 +19,28 @@ describe('AdvancedWorkflowActionsLoaderComponent', () => { let fixture: ComponentFixture; let router: RouterStub; + let mockComponentFactoryResolver: any; beforeEach(async () => { router = new RouterStub(); + mockComponentFactoryResolver = { + resolveComponentFactory: jasmine.createSpy('resolveComponentFactory').and.returnValue({ + create: jasmine.createSpy('create') + }) + }; await TestBed.configureTestingModule({ - imports: [AdvancedWorkflowActionsDirective, - AdvancedWorkflowActionsLoaderComponent], - providers: [ + imports: [ + AdvancedWorkflowActionsDirective, + RouterTestingModule, + AdvancedWorkflowActionsLoaderComponent, + AdvancedWorkflowActionTestComponent, + ], + providers: [ { provide: Router, useValue: router }, - ] -}).overrideComponent(AdvancedWorkflowActionsLoaderComponent, { + { provide: ComponentFactoryResolver, useValue: mockComponentFactoryResolver }, + ] + }).overrideComponent(AdvancedWorkflowActionsLoaderComponent, { set: { changeDetection: ChangeDetectionStrategy.Default, entryComponents: [AdvancedWorkflowActionTestComponent], @@ -76,6 +89,14 @@ describe('AdvancedWorkflowActionsLoaderComponent', () => { // eslint-disable-next-line @angular-eslint/component-selector selector: '', template: '', + standalone: true }) class AdvancedWorkflowActionTestComponent { } + +@Directive({ + selector: '[dsAdvancedWorkflowActions]' +}) +export class MockAdvancedWorkflowActionsDirective { + constructor(public viewContainerRef: ViewContainerRef) {} +} diff --git a/src/app/workflowitems-edit-page/workflow-item-action-page.component.ts b/src/app/workflowitems-edit-page/workflow-item-action-page.component.ts index 580c227d3f..b618fbde1b 100644 --- a/src/app/workflowitems-edit-page/workflow-item-action-page.component.ts +++ b/src/app/workflowitems-edit-page/workflow-item-action-page.component.ts @@ -46,7 +46,7 @@ export abstract class WorkflowItemActionPageDirective implements OnInit { this.type = this.getType(); this.wfi$ = this.route.data.pipe(map((data: Data) => data.wfi as RemoteData), getRemoteDataPayload()); this.item$ = this.wfi$.pipe(switchMap((wfi: WorkflowItem) => (wfi.item as Observable>).pipe(getAllSucceededRemoteData(), getRemoteDataPayload()))); - this.previousQueryParameters = (this.location.getState() as { [key: string]: any }).previousQueryParams; + this.previousQueryParameters = (this.location.getState() as { [key: string]: any })?.previousQueryParams; } /**