]> git.evergreen-ils.org Git - working/Evergreen.git/blob - Open-ILS/src/eg2/src/app/core/format.spec.ts
LP1825851 Server managed/processed print templates
[working/Evergreen.git] / Open-ILS / src / eg2 / src / app / core / format.spec.ts
1 import {DatePipe, CurrencyPipe, registerLocaleData} from '@angular/common';
2 import {IdlService} from './idl.service';
3 import {EventService} from './event.service';
4 import {NetService} from './net.service';
5 import {AuthService} from './auth.service';
6 import {PcrudService} from './pcrud.service';
7 import {StoreService} from './store.service';
8 import {OrgService} from './org.service';
9 import {LocaleService} from './locale.service';
10 import {Location} from '@angular/common';
11 import {FormatService} from './format.service';
12 import {SpyLocation} from '@angular/common/testing';
13 import localeArJO from '@angular/common/locales/ar-JO';
14 import localeCs from '@angular/common/locales/cs';
15 import localeFrCA from '@angular/common/locales/fr-CA';
16
17 describe('FormatService', () => {
18
19     let currencyPipe: CurrencyPipe;
20     let datePipe: DatePipe;
21     let idlService: IdlService;
22     let netService: NetService;
23     let authService: AuthService;
24     let pcrudService: PcrudService;
25     let orgService: OrgService;
26     let evtService: EventService;
27     let storeService: StoreService;
28     let localeService: LocaleService;
29     // tslint:disable-next-line:prefer-const
30     let location: SpyLocation;
31     let service: FormatService;
32
33     beforeEach(() => {
34         currencyPipe = new CurrencyPipe('en');
35         datePipe = new DatePipe('en');
36         idlService = new IdlService();
37         evtService = new EventService();
38         storeService = new StoreService(null /* CookieService */);
39         netService = new NetService(evtService);
40         authService = new AuthService(evtService, netService, storeService);
41         pcrudService = new PcrudService(idlService, netService, authService);
42         orgService = new OrgService(netService, authService, pcrudService);
43         localeService = new LocaleService(location, null, pcrudService);
44         service = new FormatService(
45             datePipe,
46             currencyPipe,
47             idlService,
48             orgService,
49             localeService
50         );
51     });
52
53     const initTestData = () => {
54         idlService.parseIdl();
55         const win: any = window; // trick TS
56         win._eg_mock_data.generateOrgTree(idlService, orgService);
57     };
58
59     it('should format an org unit name', () => {
60         initTestData();
61         const str = service.transform({
62             value: orgService.root(),
63             datatype: 'org_unit',
64             orgField: 'shortname' // currently the default
65         });
66         expect(str).toBe('ROOT');  // from eg_mock.js
67     });
68
69     it('should format a date', () => {
70         initTestData();
71         const str = service.transform({
72             value: new Date(2018, 6, 5),
73             datatype: 'timestamp',
74         });
75         expect(str).toBe('7/5/18');
76     });
77
78     it('should format a date plus time', () => {
79         initTestData();
80         const str = service.transform({
81             value: new Date(2018, 6, 5, 12, 30, 1),
82             datatype: 'timestamp',
83             datePlusTime: true
84         });
85         expect(str).toBe('7/5/18, 12:30 PM');
86     });
87
88
89
90     it('should format money', () => {
91         initTestData();
92         const str = service.transform({
93             value: '12.1',
94             datatype: 'money'
95         });
96         expect(str).toBe('$12.10');
97     });
98
99     it('should transform M/d/yy, h:mm a Angular format string to a valid MomentJS one', () => {
100         const momentVersion = service['makeFormatParseable']('M/d/yy, h:mm a', 'en-US');
101         expect(momentVersion).toBe('M/D/YY, h:mm a');
102     });
103     it('should transform MMM d, y, h:mm:ss a Angular format string to a valid MomentJS one', () => {
104         const momentVersion = service['makeFormatParseable']('MMM d, y, h:mm:ss a', 'ar-JO');
105         expect(momentVersion).toBe('MMM D, Y, h:mm:ss a');
106     });
107     it('should transform MMMM d, y, h:mm:ss a z Angular format strings to a valid MomentJS one', () => {
108         const momentVersion = service['makeFormatParseable']('MMMM d, y, h:mm:ss a z', 'fr-CA');
109         expect(momentVersion).toBe('MMMM D, Y, h:mm:ss a [GMT]Z');
110     });
111     it('should transform full Angular format strings to a valid MomentJS one using Angular locale en-US', () => {
112         const momentVersion = service['makeFormatParseable']('full', 'en-US');
113         expect(momentVersion).toBe('dddd, MMMM D, Y [at] h:mm:ss a [GMT]Z');
114     });
115     it('should transform shortDate Angular format strings to a valid MomentJS one using Angular locale cs-CZ', () => {
116         registerLocaleData(localeCs);
117         const momentVersion = service['makeFormatParseable']('shortDate', 'cs-CZ');
118         expect(momentVersion).toBe('DD.MM.YY');
119     });
120     it('should transform mediumDate Angular format strings to a valid MomentJS one using Angular locale fr-CA', () => {
121         registerLocaleData(localeFrCA);
122         const momentVersion = service['makeFormatParseable']('mediumDate', 'fr-CA');
123         expect(momentVersion).toBe('D MMM Y');
124     });
125     it('should transform long Angular format strings to a valid MomentJS one using Angular locale ar-JO', () => {
126         registerLocaleData(localeArJO);
127         const momentVersion = service['makeFormatParseable']('long', 'ar-JO');
128         expect(momentVersion).toBe('D MMMM Y h:mm:ss a [GMT]Z');
129     });
130     it('can create a valid Momentjs object given a valid datetime string and correct format', () => {
131         const moment = service['momentize']('7/3/12, 6:06 PM', 'M/D/YY, h:mm a', 'Africa/Addis_Ababa', false);
132         expect(moment.isValid()).toBe(true);
133     });
134     it('can create a valid Momentjs object given a valid datetime string and a dateTimeFormat from org settings', () => {
135         service['dateTimeFormat'] = 'M/D/YY, h:mm a';
136         const moment = service.momentizeDateTimeString('7/3/12, 6:06 PM', 'Africa/Addis_Ababa', false, 'fr-CA');
137         expect(moment.isValid()).toBe(true);
138     });
139
140 });
141