129 lines
5.0 KiB
TypeScript
129 lines
5.0 KiB
TypeScript
import {DateTimeFormatPipe} from './date-time-format.pipe';
|
|
import {formatDate, registerLocaleData} from '@angular/common';
|
|
import localeDe from '@angular/common/locales/de';
|
|
import {CustomPipe} from 'src/shared/models/custom-pipe.mode';
|
|
import {User} from '@shared/models/user.model';
|
|
import {UpdateUserSettings} from '@shared/stores/session-state/session-state.actions';
|
|
import {NumberAndDateFormatSystem} from '@shared/models/number-and-date-time-format.model';
|
|
import {SESSION_STATE_NAME, SessionState, SessionStateModel} from '@shared/stores/session-state/session-state';
|
|
import {NgxsModule, Store} from '@ngxs/store';
|
|
import {UserService} from '@shared/services/user.service';
|
|
import {inject, TestBed} from '@angular/core/testing';
|
|
import {HttpClient} from '@angular/common/http';
|
|
import {HttpLoaderFactory} from '../../app/common-app.module';
|
|
import {TranslateLoader, TranslateModule} from '@ngx-translate/core';
|
|
import {HttpClientTestingModule} from '@angular/common/http/testing';
|
|
|
|
const DESIRED_STORE_STATE_SESSION: SessionStateModel = {
|
|
userAccount: {
|
|
...new User('ttt', 'test', 'user', 'default.user@test.de', 'en-US'),
|
|
id: '11c47c56-3bcd-45f1-a05b-c197dbd33110'
|
|
},
|
|
isAuthenticated: true
|
|
};
|
|
|
|
describe('DateTimeFormatPipe', () => {
|
|
let pipe: DateTimeFormatPipe;
|
|
let store: Store;
|
|
// tslint:disable-next-line:prefer-const
|
|
let dateAndNumberFormat: NumberAndDateFormatSystem;
|
|
|
|
beforeEach(() => {
|
|
TestBed.configureTestingModule({
|
|
imports: [
|
|
HttpClientTestingModule,
|
|
TranslateModule.forRoot({
|
|
loader: {
|
|
provide: TranslateLoader,
|
|
useFactory: HttpLoaderFactory,
|
|
deps: [HttpClient]
|
|
}
|
|
}),
|
|
NgxsModule.forRoot([SessionState]),
|
|
],
|
|
declarations: [
|
|
DateTimeFormatPipe,
|
|
],
|
|
providers: [
|
|
{provide: UserService},
|
|
]
|
|
}).compileComponents();
|
|
});
|
|
|
|
beforeEach(inject([Store], (inStore: Store) => {
|
|
store = inStore;
|
|
store.reset({
|
|
...store.snapshot(),
|
|
[SESSION_STATE_NAME]: DESIRED_STORE_STATE_SESSION
|
|
});
|
|
pipe = new DateTimeFormatPipe(inStore);
|
|
})
|
|
);
|
|
|
|
it('should init', () => {
|
|
expect(pipe).toBeTruthy();
|
|
});
|
|
|
|
it('return "-" if value is null', () => {
|
|
dateAndNumberFormat = NumberAndDateFormatSystem.ENGLISH;
|
|
const value: string = null;
|
|
expect(pipe.transform(value)).toEqual('-');
|
|
});
|
|
// ToDo: Enable tests after angular version upgrade
|
|
/*
|
|
it('return english date time format if NumberAndDateFormatSystem is undefined', () => {
|
|
dateAndNumberFormat = undefined;
|
|
const value = '2019-11-24T14:34:16.802Z';
|
|
const oldFormatDate = formatDate;
|
|
const formatSpy = jest.spyOn(require('@angular/common'), 'formatDate')
|
|
.mockReturnValue((val, format, locale, timezone) => {
|
|
expect(val).toBe(value);
|
|
expect(format).toBe(CustomPipe.DATE_TIME_FMT_EN);
|
|
expect(locale).toBe('en-US');
|
|
expect(timezone).toBeUndefined();
|
|
return oldFormatDate(val, format, locale, timezone);
|
|
});
|
|
pipe.transform(value);
|
|
// Does unfortunately not work here: expect(formatSpy).toHaveBeenCalledWith(value, CustomPipe.DATE_FMT_EN, 'en-us');
|
|
expect(formatSpy).toHaveBeenCalledTimes(1);
|
|
});
|
|
|
|
it('return english date time format if NumberAndDateFormatSystem is english', () => {
|
|
dateAndNumberFormat = NumberAndDateFormatSystem.ENGLISH;
|
|
const value = '2019-11-24T14:34:16.802Z';
|
|
const oldFormatDate = formatDate;
|
|
const formatSpy = jest.spyOn(require('@angular/common'), 'formatDate')
|
|
.mockReturnValue((val, format, locale, timezone) => {
|
|
expect(val).toBe(value);
|
|
expect(format).toBe(CustomPipe.DATE_TIME_FMT_EN);
|
|
expect(locale).toBe('en-US');
|
|
expect(timezone).toBeUndefined();
|
|
return oldFormatDate(val, format, locale, timezone);
|
|
});
|
|
pipe.transform(value);
|
|
// Does unfortunately not work here: expect(formatSpy).toHaveBeenCalledWith(value, CustomPipe.DATE_FMT_EN, 'en-us');
|
|
expect(formatSpy).toHaveBeenCalledTimes(1);
|
|
});
|
|
|
|
it('return german date time format if NumberAndDateFormatSystem is german', () => {
|
|
registerLocaleData(localeDe, 'de-DE');
|
|
dateAndNumberFormat = NumberAndDateFormatSystem.GERMAN;
|
|
const userAccountUpdate = new User('test', 'test', 'test', 'test@test.de', 'de-DE');
|
|
store.dispatch(new UpdateUserSettings(userAccountUpdate));
|
|
const value = '2019-11-24T14:34:16.802Z';
|
|
const oldFormatDate = formatDate;
|
|
const formatSpy = jest.spyOn(require('@angular/common'), 'formatDate')
|
|
.mockReturnValue((val, format, locale, timezone) => {
|
|
expect(val).toBe(value);
|
|
expect(format).toBe(CustomPipe.DATE_TIME_FMT_DE);
|
|
expect(locale).toBe('de-DE');
|
|
expect(timezone).toBeUndefined();
|
|
return oldFormatDate(val, format, locale, timezone);
|
|
});
|
|
expect(pipe.transform(value).endsWith(' Uhr')).toBeTruthy();
|
|
// Does unfortunately not work here: expect(formatSpy).toHaveBeenCalledWith(value, CustomPipe.DATE_FMT_EN, 'en-us');
|
|
expect(formatSpy).toHaveBeenCalledTimes(1);
|
|
});
|
|
*/
|
|
});
|