diff --git a/src/app/+login-page/login-page.component.spec.ts b/src/app/+login-page/login-page.component.spec.ts index 31f9b84fdc..74ce5d4f9a 100644 --- a/src/app/+login-page/login-page.component.spec.ts +++ b/src/app/+login-page/login-page.component.spec.ts @@ -13,7 +13,7 @@ describe('LoginPageComponent', () => { let comp: LoginPageComponent; let fixture: ComponentFixture; const activatedRouteStub = Object.assign(new ActivatedRouteStub(), { - params: Observable.of({}) + params: observableOf({}) }); const store: Store = jasmine.createSpyObj('store', { diff --git a/src/app/core/data/request.service.spec.ts b/src/app/core/data/request.service.spec.ts index 629b4037b9..e44edab791 100644 --- a/src/app/core/data/request.service.spec.ts +++ b/src/app/core/data/request.service.spec.ts @@ -56,7 +56,7 @@ describe('RequestService', () => { uuidService = getMockUUIDService(); store = new Store(new BehaviorSubject({}), new ActionsSubject(), null); - selectSpy = spyOnProperty(ngrx, 'select') + selectSpy = spyOnProperty(ngrx, 'select'); selectSpy.and.callFake(() => { return () => { return () => cold('a', { a: undefined }); @@ -255,7 +255,6 @@ describe('RequestService', () => { service.configure(request); expect(serviceAsAny.trackRequestsOnTheirWayToTheStore).toHaveBeenCalledWith(request); }); - describe('and it isn\'t cached or pending', () => { beforeEach(() => { spyOn(serviceAsAny, 'isCachedOrPending').and.returnValue(false); @@ -455,15 +454,6 @@ describe('RequestService', () => { }); describe('when the request is added to the store', () => { - beforeEach(() => { - spyOn(service, 'getByHref').and.returnValue(observableOf({ - request, - requestPending: false, - responsePending: true, - completed: false - })); - }); - it('should stop tracking the request', () => { selectSpy.and.callFake(() => { return () => { @@ -471,7 +461,6 @@ describe('RequestService', () => { }; }); serviceAsAny.trackRequestsOnTheirWayToTheStore(request); - expect(service.getByHref).toHaveBeenCalledWith(request.href); expect(serviceAsAny.requestsOnTheirWayToTheStore.includes(request.href)).toBeFalsy(); }); }); diff --git a/src/app/core/registry/registry.service.spec.ts b/src/app/core/registry/registry.service.spec.ts index d561777074..8367a80eec 100644 --- a/src/app/core/registry/registry.service.spec.ts +++ b/src/app/core/registry/registry.service.spec.ts @@ -167,7 +167,7 @@ describe('RegistryService', () => { const responseEntry = Object.assign(new ResponseCacheEntry(), { response: response }); beforeEach(() => { - (registryService as any).responseCache.get.and.returnValue(Observable.of(responseEntry)); + (registryService as any).responseCache.get.and.returnValue(observableOf(responseEntry)); /* tslint:disable:no-empty */ registryService.getMetadataSchemas(pagination).subscribe((value) => { }); diff --git a/src/app/shared/form/builder/ds-dynamic-form-ui/ds-dynamic-form-control-container.component.spec.ts b/src/app/shared/form/builder/ds-dynamic-form-ui/ds-dynamic-form-control-container.component.spec.ts index d5dfce2575..8aa2215007 100644 --- a/src/app/shared/form/builder/ds-dynamic-form-ui/ds-dynamic-form-control-container.component.spec.ts +++ b/src/app/shared/form/builder/ds-dynamic-form-ui/ds-dynamic-form-control-container.component.spec.ts @@ -1,7 +1,9 @@ import { async, ComponentFixture, inject, TestBed } from '@angular/core/testing'; import { CUSTOM_ELEMENTS_SCHEMA, DebugElement, SimpleChange } from '@angular/core'; import { FormControl, FormGroup, FormsModule, ReactiveFormsModule } from '@angular/forms'; +import { BrowserDynamicTestingModule } from '@angular/platform-browser-dynamic/testing'; import { By } from '@angular/platform-browser'; + import { NgbModule } from '@ng-bootstrap/ng-bootstrap'; import { TextMaskModule } from 'angular2-text-mask'; import { @@ -25,11 +27,23 @@ import { DynamicTextAreaModel, DynamicTimePickerModel } from '@ng-dynamic-forms/core'; +import { + DynamicNGBootstrapCalendarComponent, + DynamicNGBootstrapCheckboxComponent, + DynamicNGBootstrapCheckboxGroupComponent, + DynamicNGBootstrapDatePickerComponent, + DynamicNGBootstrapInputComponent, + DynamicNGBootstrapRadioGroupComponent, + DynamicNGBootstrapSelectComponent, + DynamicNGBootstrapTextAreaComponent, + DynamicNGBootstrapTimePickerComponent +} from '@ng-dynamic-forms/ui-ng-bootstrap'; +import { TranslateModule } from '@ngx-translate/core'; + import { DsDynamicFormControlContainerComponent, dsDynamicFormControlMapFn } from './ds-dynamic-form-control-container.component'; -import { TranslateModule } from '@ngx-translate/core'; import { SharedModule } from '../../../shared.module'; import { DynamicDsDatePickerModel } from './models/date-picker/date-picker.model'; import { DynamicRelationGroupModel } from './models/relation-group/dynamic-relation-group.model'; @@ -42,27 +56,15 @@ import { DynamicTagModel } from './models/tag/dynamic-tag.model'; import { DynamicTypeaheadModel } from './models/typeahead/dynamic-typeahead.model'; import { DynamicQualdropModel } from './models/ds-dynamic-qualdrop.model'; import { DynamicLookupNameModel } from './models/lookup/dynamic-lookup-name.model'; -import { BrowserDynamicTestingModule } from '@angular/platform-browser-dynamic/testing'; -import { - DynamicNGBootstrapCalendarComponent, - DynamicNGBootstrapCheckboxComponent, - DynamicNGBootstrapCheckboxGroupComponent, - DynamicNGBootstrapDatePickerComponent, - DynamicNGBootstrapFormArrayComponent, - DynamicNGBootstrapFormGroupComponent, - DynamicNGBootstrapInputComponent, - DynamicNGBootstrapRadioGroupComponent, - DynamicNGBootstrapSelectComponent, - DynamicNGBootstrapTextAreaComponent, - DynamicNGBootstrapTimePickerComponent -} from '@ng-dynamic-forms/ui-ng-bootstrap'; import { DsDynamicTypeaheadComponent } from './models/typeahead/dynamic-typeahead.component'; import { DsDynamicScrollableDropdownComponent } from './models/scrollable-dropdown/dynamic-scrollable-dropdown.component'; import { DsDynamicTagComponent } from './models/tag/dynamic-tag.component'; import { DsDynamicListComponent } from './models/list/dynamic-list.component'; - import { DsDatePickerComponent } from './models/date-picker/date-picker.component'; import { DsDynamicLookupComponent } from './models/lookup/dynamic-lookup.component'; +import { DsDynamicFormArrayComponent } from './models/array-group/dynamic-form-array.component'; +import { DsDynamicFormGroupComponent } from './models/form-group/dynamic-form-group.component'; +import { DsDynamicRelationGroupComponent } from './models/relation-group/dynamic-relation-group.components'; describe('DsDynamicFormControlContainerComponent test suite', () => { @@ -258,34 +260,34 @@ describe('DsDynamicFormControlContainerComponent test suite', () => { it('should map a form control model to a form control component', () => { const testFn = dsDynamicFormControlMapFn; - expect(testFn(formModel[0])).toBe(DynamicNGBootstrapCheckboxComponent); - expect(testFn(formModel[1])).toBe(DynamicNGBootstrapCheckboxGroupComponent); + expect(testFn(formModel[0])).toEqual(DynamicNGBootstrapCheckboxComponent); + expect(testFn(formModel[1])).toEqual(DynamicNGBootstrapCheckboxGroupComponent); expect(testFn(formModel[2])).toBeNull(); - expect(testFn(formModel[3])).toBe(DynamicNGBootstrapDatePickerComponent); + expect(testFn(formModel[3])).toEqual(DynamicNGBootstrapDatePickerComponent); (formModel[3] as DynamicDatePickerModel).inline = true; - expect(testFn(formModel[3])).toBe(DynamicNGBootstrapCalendarComponent); + expect(testFn(formModel[3])).toEqual(DynamicNGBootstrapCalendarComponent); expect(testFn(formModel[4])).toBeNull(); expect(testFn(formModel[5])).toBeNull(); - expect(testFn(formModel[6])).toBe(DynamicNGBootstrapFormArrayComponent); - expect(testFn(formModel[7])).toBe(DynamicNGBootstrapFormGroupComponent); - expect(testFn(formModel[8])).toBe(DynamicNGBootstrapInputComponent); - expect(testFn(formModel[9])).toBe(DynamicNGBootstrapRadioGroupComponent); + expect(testFn(formModel[6])).toEqual(DsDynamicFormArrayComponent); + expect(testFn(formModel[7])).toEqual(DsDynamicFormGroupComponent); + expect(testFn(formModel[8])).toEqual(DynamicNGBootstrapInputComponent); + expect(testFn(formModel[9])).toEqual(DynamicNGBootstrapRadioGroupComponent); expect(testFn(formModel[10])).toBeNull(); - expect(testFn(formModel[11])).toBe(DynamicNGBootstrapSelectComponent); + expect(testFn(formModel[11])).toEqual(DynamicNGBootstrapSelectComponent); expect(testFn(formModel[12])).toBeNull(); expect(testFn(formModel[13])).toBeNull(); - expect(testFn(formModel[14])).toBe(DynamicNGBootstrapTextAreaComponent); - expect(testFn(formModel[15])).toBe(DynamicNGBootstrapTimePickerComponent); - expect(testFn(formModel[16])).toBe(DsDynamicTypeaheadComponent); - expect(testFn(formModel[17])).toBe(DsDynamicScrollableDropdownComponent); - expect(testFn(formModel[18])).toBe(DsDynamicTagComponent); - expect(testFn(formModel[19])).toBe(DsDynamicListComponent); - expect(testFn(formModel[20])).toBe(DsDynamicListComponent); - expect(testFn(formModel[21])).toBe(DynamicRelationGroupModel); - expect(testFn(formModel[22])).toBe(DsDatePickerComponent); - expect(testFn(formModel[23])).toBe(DsDynamicLookupComponent); - expect(testFn(formModel[24])).toBe(DsDynamicLookupComponent); - expect(testFn(formModel[25])).toBe(DynamicNGBootstrapFormGroupComponent); + expect(testFn(formModel[14])).toEqual(DynamicNGBootstrapTextAreaComponent); + expect(testFn(formModel[15])).toEqual(DynamicNGBootstrapTimePickerComponent); + expect(testFn(formModel[16])).toEqual(DsDynamicTypeaheadComponent); + expect(testFn(formModel[17])).toEqual(DsDynamicScrollableDropdownComponent); + expect(testFn(formModel[18])).toEqual(DsDynamicTagComponent); + expect(testFn(formModel[19])).toEqual(DsDynamicListComponent); + expect(testFn(formModel[20])).toEqual(DsDynamicListComponent); + expect(testFn(formModel[21])).toEqual(DsDynamicRelationGroupComponent); + expect(testFn(formModel[22])).toEqual(DsDatePickerComponent); + expect(testFn(formModel[23])).toEqual(DsDynamicLookupComponent); + expect(testFn(formModel[24])).toEqual(DsDynamicLookupComponent); + expect(testFn(formModel[25])).toEqual(DsDynamicFormGroupComponent); }); }); diff --git a/src/app/shared/form/builder/ds-dynamic-form-ui/models/form-group/dynamic-form-group.component.ts b/src/app/shared/form/builder/ds-dynamic-form-ui/models/form-group/dynamic-form-group.component.ts index 991cd00756..bad585b508 100644 --- a/src/app/shared/form/builder/ds-dynamic-form-ui/models/form-group/dynamic-form-group.component.ts +++ b/src/app/shared/form/builder/ds-dynamic-form-ui/models/form-group/dynamic-form-group.component.ts @@ -2,14 +2,14 @@ import { ChangeDetectionStrategy, Component, EventEmitter, Input, Output, QueryL import { FormGroup } from '@angular/forms'; import { DynamicFormControlComponent, - DynamicFormControlCustomEvent, DynamicFormControlEvent, + DynamicFormControlCustomEvent, + DynamicFormControlEvent, DynamicFormGroupModel, DynamicFormLayout, DynamicFormLayoutService, DynamicFormValidationService, DynamicTemplateDirective } from '@ng-dynamic-forms/core'; -import { filter, tap } from 'rxjs/operators'; @Component({ selector: 'ds-dynamic-form-group', diff --git a/src/app/shared/form/builder/ds-dynamic-form-ui/models/scrollable-dropdown/dynamic-scrollable-dropdown.component.spec.ts b/src/app/shared/form/builder/ds-dynamic-form-ui/models/scrollable-dropdown/dynamic-scrollable-dropdown.component.spec.ts index 78ef9ad2ab..2bcb42a73a 100644 --- a/src/app/shared/form/builder/ds-dynamic-form-ui/models/scrollable-dropdown/dynamic-scrollable-dropdown.component.spec.ts +++ b/src/app/shared/form/builder/ds-dynamic-form-ui/models/scrollable-dropdown/dynamic-scrollable-dropdown.component.spec.ts @@ -2,28 +2,20 @@ import { ChangeDetectorRef, Component, CUSTOM_ELEMENTS_SCHEMA } from '@angular/core'; import { FormControl, FormGroup, FormsModule, ReactiveFormsModule } from '@angular/forms'; import { async, ComponentFixture, fakeAsync, inject, TestBed, tick, } from '@angular/core/testing'; - +import { By } from '@angular/platform-browser'; import { NgbModule } from '@ng-bootstrap/ng-bootstrap'; +import { TranslateModule } from '@ngx-translate/core'; +import { InfiniteScrollModule } from 'ngx-infinite-scroll'; +import { DynamicFormLayoutService, DynamicFormsCoreModule, DynamicFormValidationService } from '@ng-dynamic-forms/core'; +import { DynamicFormsNGBootstrapUIModule } from '@ng-dynamic-forms/ui-ng-bootstrap'; import { AuthorityOptions } from '../../../../../../core/integration/models/authority-options.model'; -import { - DynamicFormLayoutService, - DynamicFormsCoreModule, - DynamicFormValidationService -} from '@ng-dynamic-forms/core'; -import { DynamicFormsNGBootstrapUIModule } from '@ng-dynamic-forms/ui-ng-bootstrap'; import { AuthorityService } from '../../../../../../core/integration/authority.service'; import { AuthorityServiceStub } from '../../../../../testing/authority-service-stub'; -import { InfiniteScrollModule } from 'ngx-infinite-scroll'; -import { TranslateModule } from '@ngx-translate/core'; import { DsDynamicScrollableDropdownComponent } from './dynamic-scrollable-dropdown.component'; import { DynamicScrollableDropdownModel } from './dynamic-scrollable-dropdown.model'; -import { DsDynamicTypeaheadComponent } from '../typeahead/dynamic-typeahead.component'; -import { DynamicTypeaheadModel } from '../typeahead/dynamic-typeahead.model'; -import { TYPEAHEAD_TEST_GROUP, TYPEAHEAD_TEST_MODEL_CONFIG } from '../typeahead/dynamic-typeahead.component.spec'; -import { By } from '@angular/platform-browser'; import { AuthorityValue } from '../../../../../../core/integration/models/authority.value'; -import { hasClass, createTestComponent } from '../../../../../testing/utils'; +import { createTestComponent, hasClass } from '../../../../../testing/utils'; export const SD_TEST_GROUP = new FormGroup({ dropdown: new FormControl(), @@ -165,9 +157,6 @@ describe('Dynamic Dynamic Scrollable Dropdown component', () => { let de: any = scrollableDropdownFixture.debugElement.query(By.css('button.ds-form-input-btn')); let btnEl = de.nativeElement; - de = scrollableDropdownFixture.debugElement.query(By.css('div.scrollable-dropdown-menu')); - const menuEl = de.nativeElement; - btnEl.click(); scrollableDropdownFixture.detectChanges(); diff --git a/src/app/shared/form/builder/ds-dynamic-form-ui/models/typeahead/dynamic-typeahead.component.spec.ts b/src/app/shared/form/builder/ds-dynamic-form-ui/models/typeahead/dynamic-typeahead.component.spec.ts index 18797b69f7..921ece62a0 100644 --- a/src/app/shared/form/builder/ds-dynamic-form-ui/models/typeahead/dynamic-typeahead.component.spec.ts +++ b/src/app/shared/form/builder/ds-dynamic-form-ui/models/typeahead/dynamic-typeahead.component.spec.ts @@ -137,7 +137,7 @@ describe('DsDynamicTypeaheadComponent test suite', () => { expect(typeaheadComp.currentValue).not.toBeDefined(); }); - it('should search when 3+ characters typed', fakeAsync((done) => { + it('should search when 3+ characters typed', fakeAsync(() => { spyOn((typeaheadComp as any).authorityService, 'getEntriesByName').and.callThrough(); diff --git a/src/app/submission/sections/container/section-container.component.spec.ts b/src/app/submission/sections/container/section-container.component.spec.ts index e66713c2ed..7f59ab1445 100644 --- a/src/app/submission/sections/container/section-container.component.spec.ts +++ b/src/app/submission/sections/container/section-container.component.spec.ts @@ -1,31 +1,30 @@ // Load the implementations that should be tested import { ChangeDetectorRef, Component, CUSTOM_ELEMENTS_SCHEMA } from '@angular/core'; -import { async, ComponentFixture, fakeAsync, inject, TestBed, tick, } from '@angular/core/testing'; -import { BrowserModule, By } from '@angular/platform-browser'; +import { CommonModule } from '@angular/common'; +import { ActivatedRoute, Router } from '@angular/router'; +import { async, ComponentFixture, inject, TestBed, } from '@angular/core/testing'; +import { BrowserModule } from '@angular/platform-browser'; -import { Observable } from 'rxjs/Observable'; -import 'rxjs/add/observable/of'; +import { of as observableOf } from 'rxjs'; +import { ActionsSubject, Store } from '@ngrx/store'; +import { NgbModule } from '@ng-bootstrap/ng-bootstrap'; +import { TranslateModule } from '@ngx-translate/core'; +import { ScrollToService } from '@nicky-lenaers/ngx-scroll-to'; import { SectionContainerComponent } from './section-container.component'; -import { NgbModule } from '@ng-bootstrap/ng-bootstrap'; import { createTestComponent } from '../../../shared/testing/utils'; import { SectionsType } from '../sections-type'; -import { CommonModule } from '@angular/common'; -import { TranslateModule } from '@ngx-translate/core'; import { SectionsDirective } from '../sections.directive'; -import { ActionsSubject, Store } from '@ngrx/store'; import { SubmissionState } from '../../submission.reducers'; import { SubmissionService } from '../../submission.service'; import { GLOBAL_CONFIG } from '../../../../config'; import { SubmissionRestService } from '../../submission-rest.service'; import { SubmissionRestServiceStub } from '../../../shared/testing/submission-rest-service-stub'; -import { ActivatedRoute, Router } from '@angular/router'; import { MockRouter } from '../../../shared/mocks/mock-router'; import { RouteService } from '../../../shared/services/route.service'; import { MockActivatedRoute } from '../../../shared/mocks/mock-active-router'; import { SectionsService } from '../sections.service'; import { NotificationsService } from '../../../shared/notifications/notifications.service'; -import { ScrollToService } from '@nicky-lenaers/ngx-scroll-to'; describe('SectionContainerComponent test suite', () => { @@ -68,7 +67,7 @@ describe('SectionContainerComponent test suite', () => { } as any; const restService = new SubmissionRestServiceStub(); const router = new MockRouter(); - const store = new Store(Observable.of({}), new ActionsSubject(), undefined); + const store = new Store(observableOf({}), new ActionsSubject(), undefined); // async beforeEach beforeEach(async(() => { diff --git a/src/app/submission/submission.service.spec.ts b/src/app/submission/submission.service.spec.ts index 084a105df1..cc25d18347 100644 --- a/src/app/submission/submission.service.spec.ts +++ b/src/app/submission/submission.service.spec.ts @@ -1,14 +1,11 @@ import { StoreModule } from '@ngrx/store'; -import { async, fakeAsync, flush, TestBed, tick } from '@angular/core/testing'; +import { async, fakeAsync, TestBed, tick } from '@angular/core/testing'; import { ActivatedRoute, Router } from '@angular/router'; import { HttpHeaders } from '@angular/common/http'; import { ScrollToService } from '@nicky-lenaers/ngx-scroll-to'; import { TranslateLoader, TranslateModule, TranslateService } from '@ngx-translate/core'; -import { cold, hot } from 'jasmine-marbles'; -import { Observable } from 'rxjs/Observable'; -import 'rxjs/add/observable/of' -import 'rxjs/add/observable/timer' +import { cold, hot, } from 'jasmine-marbles'; import { MockRouter } from '../shared/mocks/mock-router'; import { SubmissionService } from './submission.service'; @@ -23,43 +20,10 @@ import { SubmissionScopeType } from '../core/submission/submission-scope-type'; import { submissionRestREsponse } from '../shared/mocks/mock-submission'; import { NotificationsService } from '../shared/notifications/notifications.service'; import { MockTranslateLoader } from '../shared/mocks/mock-translate-loader'; +import { MOCK_SUBMISSION_CONFIG } from '../shared/testing/mock-submission-config'; describe('SubmissionService test suite', () => { - const config = { - submission: { - autosave: { - metadata: ['dc.title', 'dc.identifier.doi', 'dc.identifier.pmid', 'dc.identifier.arxiv'], - timer: 5 - }, - metadata: { - icons: [ - { - name: 'dc.contributor.author', - config: { - withAuthority: { - style: 'fa-user' - } - } - }, - { - name: 'local.contributor.affiliation', - config: { - withAuthority: { - style: 'fa-university' - }, - withoutAuthority: { - style: 'fa-university text-muted' - } - } - }, - { - name: 'default', - config: {} - } - ] - } - }, - } as any; + const config = MOCK_SUBMISSION_CONFIG; const subState = { objects: { @@ -359,7 +323,7 @@ describe('SubmissionService test suite', () => { beforeEach(async(() => { TestBed.configureTestingModule({ imports: [ - StoreModule.forRoot({ submissionReducers }), + StoreModule.forRoot({ submissionReducers } as any), TranslateModule.forRoot({ loader: { provide: TranslateLoader, @@ -607,7 +571,7 @@ describe('SubmissionService test suite', () => { it('should return properly submission scope', () => { let expected = SubmissionScopeType.WorkspaceItem; - ; + router.setRoute('/workspaceitems/826/edit'); expect(service.getSubmissionScope()).toBe(expected); @@ -690,16 +654,22 @@ describe('SubmissionService test suite', () => { expect(result).toBeObservable(expected); }); - it('should start Auto Save', () => { + it('should start Auto Save', fakeAsync(() => { + const duration = config.submission.autosave.timer * (1000 * 60); spyOn((service as any).store, 'dispatch'); - const duration = config.submission.autosave.timer * (1000 * 60); - const expected = Observable.timer(duration, duration); - service.startAutoSave('826'); + const sub = (service as any).timerObs.subscribe(); - expect((service as any).timerObs).toEqual(expected); - }); + tick(duration / 2); + expect((service as any).store.dispatch).not.toHaveBeenCalled(); + + tick(duration / 2); + expect((service as any).store.dispatch).toHaveBeenCalled(); + + sub.unsubscribe(); + (service as any).autoSaveSub.unsubscribe(); + })); it('should stop Auto Save', () => { service.startAutoSave('826');