]> git.evergreen-ils.org Git - working/Evergreen.git/blob - Open-ILS/src/eg2/src/app/core/format.spec.ts
LP1834662: Add date-related components to Angular client.
[working/Evergreen.git] / Open-ILS / src / eg2 / src / app / core / format.spec.ts
1 import {DatePipe, CurrencyPipe} 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 {FormatService} from './format.service';
10
11
12 describe('FormatService', () => {
13
14     let currencyPipe: CurrencyPipe;
15     let datePipe: DatePipe;
16     let idlService: IdlService;
17     let netService: NetService;
18     let authService: AuthService;
19     let pcrudService: PcrudService;
20     let orgService: OrgService;
21     let evtService: EventService;
22     let storeService: StoreService;
23     let service: FormatService;
24
25     beforeEach(() => {
26         currencyPipe = new CurrencyPipe('en');
27         datePipe = new DatePipe('en');
28         idlService = new IdlService();
29         evtService = new EventService();
30         storeService = new StoreService(null /* CookieService */);
31         netService = new NetService(evtService);
32         authService = new AuthService(evtService, netService, storeService);
33         pcrudService = new PcrudService(idlService, netService, authService);
34         orgService = new OrgService(netService, authService, pcrudService);
35         service = new FormatService(
36             datePipe,
37             currencyPipe,
38             idlService,
39             orgService
40         );
41     });
42
43     const initTestData = () => {
44         idlService.parseIdl();
45         const win: any = window; // trick TS
46         win._eg_mock_data.generateOrgTree(idlService, orgService);
47     };
48
49     it('should format an org unit name', () => {
50         initTestData();
51         const str = service.transform({
52             value: orgService.root(),
53             datatype: 'org_unit',
54             orgField: 'shortname' // currently the default
55         });
56         expect(str).toBe('ROOT');  // from eg_mock.js
57     });
58
59     it('should format a date', () => {
60         initTestData();
61         const str = service.transform({
62             value: new Date(2018, 6, 5),
63             datatype: 'timestamp',
64         });
65         expect(str).toBe('7/5/18');
66     });
67
68     it('should format a date plus time', () => {
69         initTestData();
70         const str = service.transform({
71             value: new Date(2018, 6, 5, 12, 30, 1),
72             datatype: 'timestamp',
73             datePlusTime: true
74         });
75         expect(str).toBe('7/5/18, 12:30 PM');
76     });
77
78
79
80     it('should format money', () => {
81         initTestData();
82         const str = service.transform({
83             value: '12.1',
84             datatype: 'money'
85         });
86         expect(str).toBe('$12.10');
87     });
88
89     it('should transform M/d/yy, h:mm a Angular format string to a valid MomentJS one', () => {
90         const momentVersion = service['makeFormatParseable']('M/d/yy, h:mm a');
91         expect(momentVersion).toBe('M/D/YY, h:mm a');
92     });
93     it('should transform MMM d, y, h:mm:ss a Angular format string to a valid MomentJS one', () => {
94         const momentVersion = service['makeFormatParseable']('MMM d, y, h:mm:ss a');
95         expect(momentVersion).toBe('MMM D, Y, h:mm:ss a');
96     });
97     it('should transform MMMM d, y, h:mm:ss a z Angular format strings to a valid MomentJS one', () => {
98         const momentVersion = service['makeFormatParseable']('MMMM d, y, h:mm:ss a z');
99         expect(momentVersion).toBe('MMMM D, Y, h:mm:ss a [GMT]Z');
100     });
101     it('should transform full Angular format strings to a valid MomentJS one', () => {
102         const momentVersion = service['makeFormatParseable']('full');
103         expect(momentVersion).toBe('dddd, MMMM D, Y, h:mm:ss a [GMT]Z');
104     });
105     it('can create a valid Momentjs object given a valid datetime string and correct format', () => {
106         const moment = service['momentize']('7/3/12, 6:06 PM', 'M/D/YY, h:mm a', 'Africa/Addis_Ababa', false);
107         expect(moment.isValid()).toBe(true);
108     });
109     it('can create a valid Momentjs object given a valid datetime string and a dateTimeFormat from org settings', () => {
110         service['dateTimeFormat'] = 'M/D/YY, h:mm a';
111         const moment = service.momentizeDateTimeString('7/3/12, 6:06 PM', 'Africa/Addis_Ababa', false);
112         expect(moment.isValid()).toBe(true);
113     });
114
115 });
116