Fixed unit tests

This commit is contained in:
Giuseppe Digilio
2018-12-20 16:40:51 +01:00
parent 40bbe2cac6
commit 5fcb6f49aa
9 changed files with 79 additions and 130 deletions

View File

@@ -13,7 +13,7 @@ describe('LoginPageComponent', () => {
let comp: LoginPageComponent;
let fixture: ComponentFixture<LoginPageComponent>;
const activatedRouteStub = Object.assign(new ActivatedRouteStub(), {
params: Observable.of({})
params: observableOf({})
});
const store: Store<LoginPageComponent> = jasmine.createSpyObj('store', {

View File

@@ -56,7 +56,7 @@ describe('RequestService', () => {
uuidService = getMockUUIDService();
store = new Store<CoreState>(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();
});
});

View File

@@ -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) => {
});

View File

@@ -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);
});
});

View File

@@ -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',

View File

@@ -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();

View File

@@ -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();

View File

@@ -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<SubmissionState>(Observable.of({}), new ActionsSubject(), undefined);
const store = new Store<SubmissionState>(observableOf({}), new ActionsSubject(), undefined);
// async beforeEach
beforeEach(async(() => {

View File

@@ -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');