Newer
Older
import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing';
import { Component, Input } from '@angular/core';
import { RouterTestingModule } from '@angular/router/testing';
import { MockStore, provideMockStore } from '@ngrx/store/testing';
import { CriteriaComponent } from './criteria.component';
import { Attribute, CriteriaFamily, Dataset, OutputCategory, OutputFamily } from '../../../metamodel/models';
import { ConeSearch, Criterion, Resolver, SearchQueryParams, SvomKeyword } from '../../store/models';
import { SortByCriteriaDisplayPipe } from '../pipes/sort-by-criteria-display.pipe';
import * as searchActions from '../../store/actions/search.actions';
import { AbstractSearchComponent } from './abstract-search.component';
import * as coneSearchActions from '../../store/actions/cone-search.actions';
describe('[Instance][Search][Container] CriteriaComponent', () => {
@Component({ selector: 'app-spinner', template: '' })
class SpinnerStubComponent { }
@Component({ selector: 'app-cone-search-tab', template: '' })
class ConeSearchStubComponent {
@Input() datasetSelected: string;
@Input() datasetList: Dataset[];
@Input() coneSearch: ConeSearch;
@Input() resolver: Resolver;
@Input() resolverIsLoading: boolean;
@Input() resolverIsLoaded: boolean;
}
@Component({ selector: 'app-criteria-tabs', template: '' })
class CriteriaTabsStubComponent {
@Input() attributeList: Attribute[];
@Input() criteriaFamilyList: CriteriaFamily[];
@Input() criteriaList: Criterion[];
@Input() svomKeywords: SvomKeyword[];
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
}
@Component({ selector: 'app-summary', template: '' })
class SummaryStubComponent {
@Input() currentStep: string;
@Input() datasetSelected: string;
@Input() datasetList: Dataset[];
@Input() attributeList: Attribute[];
@Input() criteriaFamilyList: CriteriaFamily[];
@Input() outputFamilyList: OutputFamily[];
@Input() outputCategoryList: OutputCategory[];
@Input() criteriaList: Criterion[];
@Input() outputList: number[];
@Input() queryParams: SearchQueryParams;
@Input() coneSearch: ConeSearch;
}
let component: CriteriaComponent;
let fixture: ComponentFixture<CriteriaComponent>;
let store: MockStore;
beforeEach(waitForAsync(() => {
TestBed.configureTestingModule({
imports: [RouterTestingModule],
declarations: [
CriteriaComponent,
SpinnerStubComponent,
ConeSearchStubComponent,
CriteriaTabsStubComponent,
SummaryStubComponent,
SortByCriteriaDisplayPipe
],
providers: [provideMockStore({ })]
});
fixture = TestBed.createComponent(CriteriaComponent);
component = fixture.componentInstance;
store = TestBed.inject(MockStore);
}));
it('should create the component', () => {
expect(component).toBeTruthy();
});
it('should execute ngOnInit lifecycle', (done) => {
const spy = jest.spyOn(store, 'dispatch');
jest.spyOn(AbstractSearchComponent.prototype, 'ngOnInit').mockReturnThis();
component.ngOnInit();
Promise.resolve(null).then(function() {
expect(spy).toHaveBeenCalledTimes(2);
expect(spy).toHaveBeenCalledWith(searchActions.changeStep({ step: 'criteria' }));
expect(spy).toHaveBeenCalledWith(searchActions.checkCriteria());
done();
});
});
it('#addCriterion() should dispatch addCriterion action', () => {
const criterion: Criterion = { id: 1, type: 'field' };
const spy = jest.spyOn(store, 'dispatch');
component.addCriterion(criterion);
expect(spy).toHaveBeenCalledTimes(1);
expect(spy).toHaveBeenCalledWith(searchActions.addCriterion({ criterion }));
});
it('#deleteCriterion() should dispatch deleteCriterion action', () => {
const spy = jest.spyOn(store, 'dispatch');
component.deleteCriterion(1);
expect(spy).toHaveBeenCalledTimes(1);
expect(spy).toHaveBeenCalledWith(searchActions.deleteCriterion({ idCriterion: 1 }));
});
it('#addConeSearch() should dispatch addConeSearch action', () => {
const coneSearch: ConeSearch = { ra: 1, dec: 2, radius: 3 };
const spy = jest.spyOn(store, 'dispatch');
component.addConeSearch(coneSearch);
expect(spy).toHaveBeenCalledTimes(1);
expect(spy).toHaveBeenCalledWith(coneSearchActions.addConeSearch({ coneSearch }));
});
it('#deleteConeSearch() should dispatch deleteConeSearch action', () => {
const spy = jest.spyOn(store, 'dispatch');
component.deleteConeSearch();
expect(spy).toHaveBeenCalledTimes(1);
expect(spy).toHaveBeenCalledWith(coneSearchActions.deleteConeSearch());
});
it('#retrieveCoordinates() should dispatch deleteConeSearch action', () => {
const spy = jest.spyOn(store, 'dispatch');
component.retrieveCoordinates('myObject');
expect(spy).toHaveBeenCalledTimes(1);
expect(spy).toHaveBeenCalledWith(coneSearchActions.retrieveCoordinates({ name: 'myObject' }));
});
});