Skip to content

Commit

Permalink
SHIBUI-1268 Implemented tests for metadata header
Browse files Browse the repository at this point in the history
  • Loading branch information
rmathis committed Jun 21, 2019
1 parent 926e946 commit a46c753
Show file tree
Hide file tree
Showing 11 changed files with 177 additions and 31 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -26,14 +26,14 @@
<td>{{ version.date | date }}</td>
<td>{{ version.creator }}</td>
<td>
<button class="btn btn-link" (click)="restoreVersion(version)">
<button class="btn btn-link" (click)="restore.emit(version)">
<i class="fa fa-undo"></i>&nbsp;
<translate-i18n key="label.restore">Restore</translate-i18n>
</button>
</td>
</tr>
</tbody>
</table>
<button class="btn btn-primary" (click)="compareSelected(selected)" [disabled]="!selected.length">
<button class="btn btn-primary" (click)="compare.emit(selected)" [disabled]="!selected.length">
<translate-i18n key="label.compare-selected">Compare Selected</translate-i18n> <span *ngIf="selected.length">({{ selected.length }})</span>
</button>
Original file line number Diff line number Diff line change
Expand Up @@ -8,16 +8,15 @@ import { MetadataVersion } from '../model/version';
export const TestData = {
versions: [
{
versionNumber: 1,
saveDate: new Date(),
changedBy: 'admin',
actions: []
id: 'foo',
date: new Date().toDateString(),
creator: 'admin'
}
]
};

@Component({
template: `<history-list [history]="history" (compare)="compare($event)" (restore)="restore($event)"></history-list>`
template: `<history-list [history]="history.versions" (compare)="compare($event)" (restore)="restore($event)"></history-list>`
})
class TestHostComponent {
@ViewChild(HistoryListComponent)
Expand All @@ -32,7 +31,7 @@ class TestHostComponent {
describe('Metadata History List Component', () => {
let fixture: ComponentFixture<TestHostComponent>;
let instance: TestHostComponent;
let table: HistoryListComponent;
let list: HistoryListComponent;

beforeEach(() => {
TestBed.configureTestingModule({
Expand All @@ -48,32 +47,34 @@ describe('Metadata History List Component', () => {

fixture = TestBed.createComponent(TestHostComponent);
instance = fixture.componentInstance;
table = instance.componentUnderTest;
list = instance.componentUnderTest;
fixture.detectChanges();
});

it('should compile', () => {
expect(table).toBeDefined();
expect(list).toBeDefined();
});

describe('compare selected', () => {
it('should allow the user to toggle selected versions for comparison', () => {
table.toggleVersionSelected(TestData.versions[0]);
expect(table.selected.length).toBe(1);
list.toggleVersionSelected(TestData.versions[0]);
expect(list.selected.length).toBe(1);
});

it('should emit an event with the selected values when the Compare Selected button is clicked', () => {
spyOn(instance, 'compare');
const selected = TestData.versions;
table.compareSelected(selected);
list.compareSelected(selected);
fixture.detectChanges();
expect(instance.compare).toHaveBeenCalledWith(selected);
});
});

describe('restore', () => {
it('should emit an event with the selected version when the Restore button is clicked', () => {
spyOn(instance, 'restore');
const selected = TestData.versions[0];
table.restoreVersion(selected);
list.restoreVersion(selected);
fixture.detectChanges();
expect(instance.restore).toHaveBeenCalledWith(selected);
});
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
import { Component, ViewChild } from '@angular/core';
import { TestBed, async, ComponentFixture } from '@angular/core/testing';
import { MockI18nModule } from '../../../../testing/i18n.stub';
import { MetadataVersion } from '../model/version';
import { MetadataHeaderComponent } from './metadata-header.component';

@Component({
template: `
<metadata-header
[isEnabled]="isEnabled"
[version]="version"
[versionNumber]="versionNumber"
[isCurrent]="isCurrent"
></metadata-header>
`
})
class TestHostComponent {
@ViewChild(MetadataHeaderComponent)
public componentUnderTest: MetadataHeaderComponent;

isEnabled = true;

version: MetadataVersion = {
id: 'foo',
creator: 'foobar',
date: new Date().toDateString()
};
versionNumber = 1;
isCurrent = false;
}

describe('Metadata Header Component', () => {

let fixture: ComponentFixture<TestHostComponent>;
let instance: TestHostComponent;
let app: MetadataHeaderComponent;

beforeEach(async(() => {
TestBed.configureTestingModule({
imports: [
MockI18nModule
],
declarations: [
MetadataHeaderComponent,
TestHostComponent
]
}).compileComponents();

fixture = TestBed.createComponent(TestHostComponent);
instance = fixture.componentInstance;
app = instance.componentUnderTest;
fixture.detectChanges();
}));

it('should accept a property input', async(() => {
expect(app).toBeTruthy();
}));
});
Original file line number Diff line number Diff line change
Expand Up @@ -9,15 +9,11 @@ import { MetadataVersion } from '../model/version';
})

export class MetadataHeaderComponent {
@Input() metadata: Metadata;
@Input() isEnabled: boolean;
@Input() version: MetadataVersion;
@Input() versionNumber: number;
@Input() isCurrent: boolean;

constructor() {}

get isEnabled(): boolean {
return this.metadata ? ('serviceEnabled' in this.metadata) ? this.metadata.serviceEnabled : this.metadata.enabled : false;
}
}

Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,8 @@ import { MetadataHistory } from '../model/history';
import { MetadataVersion } from '../model/version';
import { MetadataHistoryService } from '../service/history.service';
import { of } from 'rxjs';
import { StoreModule, combineReducers } from '@ngrx/store';
import * as fromConfiguration from '../reducer';

export const TestData = {
versions: [
Expand Down Expand Up @@ -44,7 +46,10 @@ describe('Metadata Version History Component', () => {
}
],
imports: [
MockI18nModule
MockI18nModule,
StoreModule.forRoot({
'metadata-configuration': combineReducers(fromConfiguration.reducers),
}),
],
declarations: [
MockHistoryListComponent,
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
<div class="container">
<metadata-header
[metadata]="model$ | async"
[isEnabled]="isEnabled$ | async"
[version]="version$ | async"
[versionNumber]="versionNumber$ | async"
[isCurrent]="isCurrent$ | async"></metadata-header>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,9 @@ import { MetadataConfiguration } from '../model/metadata-configuration';
import * as fromConfiguration from '../reducer';
import { MockI18nModule } from '../../../../testing/i18n.stub';
import { MetadataOptionsComponent } from './metadata-options.component';
import { Metadata } from '../../domain/domain.type';
import { MetadataVersion } from '../model/version';
import { CommonModule } from '@angular/common';

@Component({
selector: 'metadata-configuration',
Expand All @@ -17,6 +20,17 @@ class MetadataConfigurationComponent {
@Input() configuration: MetadataConfiguration;
}

@Component({
selector: 'metadata-header',
template: ``
})
class MetadataHeaderComponent {
@Input() isEnabled: boolean;
@Input() version: MetadataVersion;
@Input() versionNumber: number;
@Input() isCurrent: boolean;
}

@Component({
template: `
<metadata-options-page></metadata-options-page>
Expand Down Expand Up @@ -44,18 +58,20 @@ describe('Metadata Options Page Component', () => {
'metadata-configuration': combineReducers(fromConfiguration.reducers),
}),
MockI18nModule,
RouterTestingModule
RouterTestingModule,
CommonModule
],
declarations: [
MetadataOptionsComponent,
MetadataConfigurationComponent,
MetadataHeaderComponent,
TestHostComponent
],
}).compileComponents();

store = TestBed.get(Store);
spyOn(store, 'dispatch');
spyOn(store, 'select');
spyOn(store, 'select').and.callThrough();

fixture = TestBed.createComponent(TestHostComponent);
instance = fixture.componentInstance;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,8 +11,8 @@ import {
getSelectedIsCurrent
} from '../reducer';
import { MetadataConfiguration } from '../model/metadata-configuration';
import { Metadata } from '../../domain/domain.type';
import { MetadataVersion } from '../model/version';
import { map } from 'rxjs/operators';

@Component({
selector: 'metadata-options-page',
Expand All @@ -23,7 +23,7 @@ import { MetadataVersion } from '../model/version';
export class MetadataOptionsComponent {

configuration$: Observable<MetadataConfiguration>;
model$: Observable<Metadata>;
isEnabled$: Observable<boolean>;
version$: Observable<MetadataVersion>;
versionNumber$: Observable<number>;
isCurrent$: Observable<boolean>;
Expand All @@ -32,8 +32,9 @@ export class MetadataOptionsComponent {
private store: Store<ConfigurationState>
) {
this.configuration$ = this.store.select(getConfigurationSections);
this.model$ = this.store.select(getConfigurationModel);

this.isEnabled$ = this.store.select(getConfigurationModel).pipe(
map(config => config ? ('serviceEnabled' in config) ? config.serviceEnabled : config.enabled : false)
);
this.version$ = this.store.select(getSelectedVersion);
this.versionNumber$ = this.store.select(getSelectedVersionNumber);
this.isCurrent$ = this.store.select(getSelectedIsCurrent);
Expand Down
70 changes: 70 additions & 0 deletions ui/src/app/metadata/configuration/reducer/history.reducer.spec.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,70 @@
import { reducer } from './history.reducer';
import * as fromHistory from './history.reducer';
import * as actions from '../action/history.action';
import { MetadataHistory } from '../model/history';

describe('History Reducer', () => {

const baseState = fromHistory.initialState;

const history: MetadataHistory = {
versions: [
{
id: '1',
date: new Date().toLocaleDateString(),
creator: 'foo'
},
{
id: '2',
date: new Date().toDateString(),
creator: 'foo'
}
]
};

describe('undefined action', () => {
it('should return the default state', () => {
const result = reducer(undefined, {} as any);

expect(result).toEqual(fromHistory.initialState);
});
});

describe('SET_HISTORY action', () => {
it('should set the state metadata model', () => {
const action = new actions.SetHistory(history);
const result = reducer(fromHistory.initialState, action);

expect(Object.keys(result.entities)).toEqual(['1', '2']);
});
});

describe('SELECT_VERSION action', () => {
it('should set the state metadata model', () => {
const action = new actions.SelectVersion('1');
const result = reducer(baseState, action);

expect(result).toEqual({ ...baseState, selectedVersionId: '1' });
});
});

describe('CLEAR action', () => {
it('should clear the state and reset to initial state', () => {
const action = new actions.ClearHistory();
const result = reducer({
...baseState,
...history
}, action);

expect(result).toEqual(baseState);
});
});

describe('selector functions', () => {
describe('getSelectedId', () => {
it('should return the selected version id', () => {
expect(fromHistory.getSelectedVersionId({ ...baseState, selectedVersionId: '1' })).toBe('1');
});
});
});
});
4 changes: 1 addition & 3 deletions ui/src/app/metadata/configuration/reducer/history.reducer.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,6 @@ import { MetadataVersion } from '../model/version';

export interface HistoryState extends EntityState<MetadataVersion> {
selectedVersionId: string;
versions: MetadataVersion[];
}

export function sortByDate(a: MetadataVersion, b: MetadataVersion): number {
Expand All @@ -17,8 +16,7 @@ export const adapter: EntityAdapter<MetadataVersion> = createEntityAdapter<Metad
});

export const initialState: HistoryState = adapter.getInitialState({
selectedVersionId: null,
versions: []
selectedVersionId: null
});

export function reducer(state = initialState, action: HistoryActionsUnion): HistoryState {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,9 +1,10 @@
import { TestBed, async, inject } from '@angular/core/testing';
import { HttpClientModule, HttpRequest } from '@angular/common/http';
import { HttpTestingController, HttpClientTestingModule } from '@angular/common/http/testing';
import { MetadataConfigurationService, PATHS } from './configuration.service';
import { MetadataConfigurationService } from './configuration.service';
import { FileBackedHttpMetadataProviderEditor } from '../../provider/model';
import { MetadataSourceEditor } from '../../domain/model/wizards/metadata-source-editor';
import { PATHS } from '../configuration.values';

describe(`Attributes Service`, () => {
beforeEach(() => {
Expand Down

0 comments on commit a46c753

Please sign in to comment.