@wisemen/datewise 0.1.17 → 0.1.19
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/date-range/date-range.dto.d.ts +6 -1
- package/dist/date-range/date-range.dto.js +6 -2
- package/dist/date-range/date-range.dto.js.map +1 -1
- package/dist/date-range/date-range.response.d.ts +3 -0
- package/dist/date-range/date-range.response.js +3 -0
- package/dist/date-range/date-range.response.js.map +1 -1
- package/dist/date-range/tests/date-range.dto.unit.test.d.ts +1 -0
- package/dist/date-range/tests/date-range.dto.unit.test.js +75 -0
- package/dist/date-range/tests/date-range.dto.unit.test.js.map +1 -0
- package/dist/date-range/tests/date-range.response.unit.test.d.ts +1 -0
- package/dist/date-range/tests/date-range.response.unit.test.js +49 -0
- package/dist/date-range/tests/date-range.response.unit.test.js.map +1 -0
- package/dist/date-time-range/date-time-range.dto.d.ts +6 -1
- package/dist/date-time-range/date-time-range.dto.js +6 -2
- package/dist/date-time-range/date-time-range.dto.js.map +1 -1
- package/dist/date-time-range/date-time-range.response.d.ts +3 -0
- package/dist/date-time-range/date-time-range.response.js +3 -0
- package/dist/date-time-range/date-time-range.response.js.map +1 -1
- package/dist/date-time-range/tests/date-time-range.dto.unit.test.d.ts +1 -0
- package/dist/date-time-range/tests/date-time-range.dto.unit.test.js +89 -0
- package/dist/date-time-range/tests/date-time-range.dto.unit.test.js.map +1 -0
- package/dist/date-time-range/tests/date-time-range.response.unit.test.d.ts +1 -0
- package/dist/date-time-range/tests/date-time-range.response.unit.test.js +66 -0
- package/dist/date-time-range/tests/date-time-range.response.unit.test.js.map +1 -0
- package/package.json +1 -1
|
@@ -1,7 +1,12 @@
|
|
|
1
1
|
import { FilterQuery } from '@wisemen/pagination';
|
|
2
2
|
import { DateRange } from './date-range.js';
|
|
3
|
+
import { InclusivityString } from '../common/inclusivity.js';
|
|
3
4
|
export declare class DateRangeDto extends FilterQuery {
|
|
4
5
|
startDate: string;
|
|
5
6
|
endDate: string;
|
|
6
|
-
|
|
7
|
+
/**
|
|
8
|
+
* Parse this dto into a DateRange instance.
|
|
9
|
+
* @param inclusivity defaults to `[]`
|
|
10
|
+
*/
|
|
11
|
+
parse(inclusivity?: InclusivityString): DateRange;
|
|
7
12
|
}
|
|
@@ -14,8 +14,12 @@ import { DateRange } from './date-range.js';
|
|
|
14
14
|
export class DateRangeDto extends FilterQuery {
|
|
15
15
|
startDate;
|
|
16
16
|
endDate;
|
|
17
|
-
|
|
18
|
-
|
|
17
|
+
/**
|
|
18
|
+
* Parse this dto into a DateRange instance.
|
|
19
|
+
* @param inclusivity defaults to `[]`
|
|
20
|
+
*/
|
|
21
|
+
parse(inclusivity = '[]') {
|
|
22
|
+
return new DateRange(this.startDate, this.endDate, inclusivity);
|
|
19
23
|
}
|
|
20
24
|
}
|
|
21
25
|
__decorate([
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"date-range.dto.js","sourceRoot":"","sources":["../../lib/date-range/date-range.dto.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAA;AAC7C,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAA;AACjD,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAA;AACpD,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;
|
|
1
|
+
{"version":3,"file":"date-range.dto.js","sourceRoot":"","sources":["../../lib/date-range/date-range.dto.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAA;AAC7C,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAA;AACjD,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAA;AACpD,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAG3C,MAAM,OAAO,YAAa,SAAQ,WAAW;IAG3C,SAAS,CAAQ;IAIjB,OAAO,CAAQ;IAEf;;;OAGG;IACH,KAAK,CAAE,cAAiC,IAAI;QAC1C,OAAO,IAAI,SAAS,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,OAAO,EAAE,WAAW,CAAC,CAAA;IACjE,CAAC;CACF;AAbC;IAFC,WAAW,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;IAC/B,WAAW,EAAE;;+CACG;AAIjB;IAFC,WAAW,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;IAC/B,WAAW,EAAE;;6CACC"}
|
|
@@ -1,5 +1,8 @@
|
|
|
1
1
|
import { DateRange } from './date-range.js';
|
|
2
2
|
export declare class DateRangeResponse {
|
|
3
|
+
static from(range: DateRange): DateRangeResponse;
|
|
4
|
+
static from(range: null): null;
|
|
5
|
+
static from(range: DateRange | null): DateRangeResponse | null;
|
|
3
6
|
startDate: string;
|
|
4
7
|
endDate: string;
|
|
5
8
|
constructor(dateRange: DateRange);
|
|
@@ -9,6 +9,9 @@ var __metadata = (this && this.__metadata) || function (k, v) {
|
|
|
9
9
|
};
|
|
10
10
|
import { PlainDateApiProperty } from '../plain-date/index.js';
|
|
11
11
|
export class DateRangeResponse {
|
|
12
|
+
static from(range) {
|
|
13
|
+
return range !== null ? new DateRangeResponse(range) : null;
|
|
14
|
+
}
|
|
12
15
|
startDate;
|
|
13
16
|
endDate;
|
|
14
17
|
constructor(dateRange) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"date-range.response.js","sourceRoot":"","sources":["../../lib/date-range/date-range.response.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAA;AAG7D,MAAM,OAAO,iBAAiB;
|
|
1
|
+
{"version":3,"file":"date-range.response.js","sourceRoot":"","sources":["../../lib/date-range/date-range.response.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAA;AAG7D,MAAM,OAAO,iBAAiB;IAI5B,MAAM,CAAC,IAAI,CAAE,KAAuB;QAClC,OAAO,KAAK,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,iBAAiB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAA;IAC7D,CAAC;IAGD,SAAS,CAAQ;IAGjB,OAAO,CAAQ;IAEf,YAAa,SAAoB;QAC/B,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC,SAAS,CAAC,QAAQ,EAAE,CAAA;QAC/C,IAAI,CAAC,OAAO,GAAG,SAAS,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAA;IAC7C,CAAC;CACF;AATC;IADC,oBAAoB,EAAE;;oDACN;AAGjB;IADC,oBAAoB,EAAE;;kDACR"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
import { describe, it } from 'node:test';
|
|
2
|
+
import { expect } from 'expect';
|
|
3
|
+
import { DateRangeDto } from '../date-range.dto.js';
|
|
4
|
+
import { DateRange } from '../date-range.js';
|
|
5
|
+
describe('DateRangeDto unit tests', () => {
|
|
6
|
+
describe('parse method', () => {
|
|
7
|
+
it('Parses a dto into a DateRange with default inclusivity []', () => {
|
|
8
|
+
const dto = new DateRangeDto();
|
|
9
|
+
dto.startDate = '2024-01-01';
|
|
10
|
+
dto.endDate = '2024-01-31';
|
|
11
|
+
const range = dto.parse();
|
|
12
|
+
expect(range).toBeInstanceOf(DateRange);
|
|
13
|
+
expect(range.startDate.toString()).toBe('2024-01-01');
|
|
14
|
+
expect(range.endDate.toString()).toBe('2024-01-31');
|
|
15
|
+
});
|
|
16
|
+
it('Parses a dto into a DateRange with custom inclusivity [)', () => {
|
|
17
|
+
const dto = new DateRangeDto();
|
|
18
|
+
dto.startDate = '2024-01-01';
|
|
19
|
+
dto.endDate = '2024-01-31';
|
|
20
|
+
const range = dto.parse('[)');
|
|
21
|
+
expect(range).toBeInstanceOf(DateRange);
|
|
22
|
+
expect(range.startDate.toString()).toBe('2024-01-01');
|
|
23
|
+
// With [) inclusivity, the end date should be adjusted
|
|
24
|
+
expect(range.endDate.toString()).toBe('2024-01-30');
|
|
25
|
+
});
|
|
26
|
+
it('Parses a dto into a DateRange with custom inclusivity (]', () => {
|
|
27
|
+
const dto = new DateRangeDto();
|
|
28
|
+
dto.startDate = '2024-01-01';
|
|
29
|
+
dto.endDate = '2024-01-31';
|
|
30
|
+
const range = dto.parse('(]');
|
|
31
|
+
expect(range).toBeInstanceOf(DateRange);
|
|
32
|
+
// With (] inclusivity, the start date should be adjusted
|
|
33
|
+
expect(range.startDate.toString()).toBe('2024-01-02');
|
|
34
|
+
expect(range.endDate.toString()).toBe('2024-01-31');
|
|
35
|
+
});
|
|
36
|
+
it('Parses a dto into a DateRange with custom inclusivity ()', () => {
|
|
37
|
+
const dto = new DateRangeDto();
|
|
38
|
+
dto.startDate = '2024-01-01';
|
|
39
|
+
dto.endDate = '2024-01-31';
|
|
40
|
+
const range = dto.parse('()');
|
|
41
|
+
expect(range).toBeInstanceOf(DateRange);
|
|
42
|
+
// With () inclusivity, both dates should be adjusted
|
|
43
|
+
expect(range.startDate.toString()).toBe('2024-01-02');
|
|
44
|
+
expect(range.endDate.toString()).toBe('2024-01-30');
|
|
45
|
+
});
|
|
46
|
+
it('Handles a dto with same start and end date', () => {
|
|
47
|
+
const dto = new DateRangeDto();
|
|
48
|
+
dto.startDate = '2024-03-15';
|
|
49
|
+
dto.endDate = '2024-03-15';
|
|
50
|
+
const range = dto.parse();
|
|
51
|
+
expect(range).toBeInstanceOf(DateRange);
|
|
52
|
+
expect(range.startDate.toString()).toBe('2024-03-15');
|
|
53
|
+
expect(range.endDate.toString()).toBe('2024-03-15');
|
|
54
|
+
});
|
|
55
|
+
it('Handles a dto spanning multiple years', () => {
|
|
56
|
+
const dto = new DateRangeDto();
|
|
57
|
+
dto.startDate = '2023-12-25';
|
|
58
|
+
dto.endDate = '2024-01-05';
|
|
59
|
+
const range = dto.parse();
|
|
60
|
+
expect(range).toBeInstanceOf(DateRange);
|
|
61
|
+
expect(range.startDate.toString()).toBe('2023-12-25');
|
|
62
|
+
expect(range.endDate.toString()).toBe('2024-01-05');
|
|
63
|
+
});
|
|
64
|
+
it('Explicitly passing [] inclusivity behaves the same as default', () => {
|
|
65
|
+
const dto = new DateRangeDto();
|
|
66
|
+
dto.startDate = '2024-06-01';
|
|
67
|
+
dto.endDate = '2024-06-30';
|
|
68
|
+
const rangeDefault = dto.parse();
|
|
69
|
+
const rangeExplicit = dto.parse('[]');
|
|
70
|
+
expect(rangeDefault.startDate.toString()).toBe(rangeExplicit.startDate.toString());
|
|
71
|
+
expect(rangeDefault.endDate.toString()).toBe(rangeExplicit.endDate.toString());
|
|
72
|
+
});
|
|
73
|
+
});
|
|
74
|
+
});
|
|
75
|
+
//# sourceMappingURL=date-range.dto.unit.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"date-range.dto.unit.test.js","sourceRoot":"","sources":["../../../lib/date-range/tests/date-range.dto.unit.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import { describe, it } from 'node:test';
|
|
2
|
+
import { expect } from 'expect';
|
|
3
|
+
import { DateRange } from '../date-range.js';
|
|
4
|
+
import { DateRangeResponse } from '../date-range.response.js';
|
|
5
|
+
import { plainDate } from '../../plain-date/index.js';
|
|
6
|
+
describe('DateRangeResponse unit tests', () => {
|
|
7
|
+
describe('constructor', () => {
|
|
8
|
+
it('Creates a DateRangeResponse from a DateRange', () => {
|
|
9
|
+
const range = new DateRange(plainDate('2024-01-01'), plainDate('2024-01-31'));
|
|
10
|
+
const response = new DateRangeResponse(range);
|
|
11
|
+
expect(response.startDate).toBe('2024-01-01');
|
|
12
|
+
expect(response.endDate).toBe('2024-01-31');
|
|
13
|
+
});
|
|
14
|
+
it('Converts PlainDate objects to ISO date strings', () => {
|
|
15
|
+
const range = new DateRange(plainDate('2024-06-15'), plainDate('2024-06-20'));
|
|
16
|
+
const response = new DateRangeResponse(range);
|
|
17
|
+
expect(response.startDate).toBe('2024-06-15');
|
|
18
|
+
expect(response.endDate).toBe('2024-06-20');
|
|
19
|
+
});
|
|
20
|
+
});
|
|
21
|
+
describe('from static method', () => {
|
|
22
|
+
it('Creates a DateRangeResponse from a non-null DateRange', () => {
|
|
23
|
+
const range = new DateRange(plainDate('2024-01-01'), plainDate('2024-12-31'));
|
|
24
|
+
const response = DateRangeResponse.from(range);
|
|
25
|
+
expect(response).toBeInstanceOf(DateRangeResponse);
|
|
26
|
+
expect(response?.startDate).toBe('2024-01-01');
|
|
27
|
+
expect(response?.endDate).toBe('2024-12-31');
|
|
28
|
+
});
|
|
29
|
+
it('Returns null when given null', () => {
|
|
30
|
+
const response = DateRangeResponse.from(null);
|
|
31
|
+
expect(response).toBeNull();
|
|
32
|
+
});
|
|
33
|
+
it('Handles DateRange with same start and end date', () => {
|
|
34
|
+
const range = new DateRange(plainDate('2024-03-15'), plainDate('2024-03-15'));
|
|
35
|
+
const response = DateRangeResponse.from(range);
|
|
36
|
+
expect(response).toBeInstanceOf(DateRangeResponse);
|
|
37
|
+
expect(response?.startDate).toBe('2024-03-15');
|
|
38
|
+
expect(response?.endDate).toBe('2024-03-15');
|
|
39
|
+
});
|
|
40
|
+
it('Handles DateRange spanning multiple years', () => {
|
|
41
|
+
const range = new DateRange(plainDate('2023-12-25'), plainDate('2024-01-05'));
|
|
42
|
+
const response = DateRangeResponse.from(range);
|
|
43
|
+
expect(response).toBeInstanceOf(DateRangeResponse);
|
|
44
|
+
expect(response?.startDate).toBe('2023-12-25');
|
|
45
|
+
expect(response?.endDate).toBe('2024-01-05');
|
|
46
|
+
});
|
|
47
|
+
});
|
|
48
|
+
});
|
|
49
|
+
//# sourceMappingURL=date-range.response.unit.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"date-range.response.unit.test.js","sourceRoot":"","sources":["../../../lib/date-range/tests/date-range.response.unit.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +1,12 @@
|
|
|
1
1
|
import { FilterQuery } from '@wisemen/pagination';
|
|
2
2
|
import { DateTimeRange } from './date-time-range.js';
|
|
3
|
+
import { InclusivityString } from '../common/inclusivity.js';
|
|
3
4
|
export declare class DateTimeRangeDto extends FilterQuery {
|
|
4
5
|
from: string;
|
|
5
6
|
until: string;
|
|
6
|
-
|
|
7
|
+
/**
|
|
8
|
+
* Parse this dto into a DateRange instance.
|
|
9
|
+
* @param inclusivity defaults to `[)`
|
|
10
|
+
*/
|
|
11
|
+
parse(inclusivity?: InclusivityString): DateTimeRange;
|
|
7
12
|
}
|
|
@@ -13,8 +13,12 @@ import { DateTimeRange } from './date-time-range.js';
|
|
|
13
13
|
export class DateTimeRangeDto extends FilterQuery {
|
|
14
14
|
from;
|
|
15
15
|
until;
|
|
16
|
-
|
|
17
|
-
|
|
16
|
+
/**
|
|
17
|
+
* Parse this dto into a DateRange instance.
|
|
18
|
+
* @param inclusivity defaults to `[)`
|
|
19
|
+
*/
|
|
20
|
+
parse(inclusivity = '[)') {
|
|
21
|
+
return new DateTimeRange(this.from, this.until, inclusivity);
|
|
18
22
|
}
|
|
19
23
|
}
|
|
20
24
|
__decorate([
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"date-time-range.dto.js","sourceRoot":"","sources":["../../lib/date-time-range/date-time-range.dto.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAA;AACjD,OAAO,EAAE,WAAW,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAA;AACzE,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAA;
|
|
1
|
+
{"version":3,"file":"date-time-range.dto.js","sourceRoot":"","sources":["../../lib/date-time-range/date-time-range.dto.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAA;AACjD,OAAO,EAAE,WAAW,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAA;AACzE,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAA;AAGpD,MAAM,OAAO,gBAAiB,SAAQ,WAAW;IAG/C,IAAI,CAAQ;IAIZ,KAAK,CAAQ;IAEb;;;OAGG;IACH,KAAK,CAAE,cAAiC,IAAI;QAC1C,OAAO,IAAI,aAAa,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,EAAE,WAAW,CAAC,CAAA;IAC9D,CAAC;CACF;AAbC;IAFC,oBAAoB,CAAC,EAAE,WAAW,EAAE,+BAA+B,EAAE,CAAC;IACtE,WAAW,CAAC,EAAE,QAAQ,EAAE,CAAC,GAAqB,EAAE,EAAE,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC;;8CACpD;AAIZ;IAFC,oBAAoB,CAAC,EAAE,WAAW,EAAE,6BAA6B,EAAE,CAAC;IACpE,WAAW,CAAC,EAAE,OAAO,EAAE,CAAC,GAAqB,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;;+CACjD"}
|
|
@@ -1,5 +1,8 @@
|
|
|
1
1
|
import { DateTimeRange } from './date-time-range.js';
|
|
2
2
|
export declare class DateTimeRangeResponse {
|
|
3
|
+
static from(range: DateTimeRange): DateTimeRangeResponse;
|
|
4
|
+
static from(range: null): null;
|
|
5
|
+
static from(range: DateTimeRange | null): DateTimeRangeResponse | null;
|
|
3
6
|
from: string;
|
|
4
7
|
until: string;
|
|
5
8
|
constructor(dateRange: DateTimeRange);
|
|
@@ -9,6 +9,9 @@ var __metadata = (this && this.__metadata) || function (k, v) {
|
|
|
9
9
|
};
|
|
10
10
|
import { TimestampApiProperty } from '../timestamp/index.js';
|
|
11
11
|
export class DateTimeRangeResponse {
|
|
12
|
+
static from(range) {
|
|
13
|
+
return range !== null ? new DateTimeRangeResponse(range) : null;
|
|
14
|
+
}
|
|
12
15
|
from;
|
|
13
16
|
until;
|
|
14
17
|
constructor(dateRange) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"date-time-range.response.js","sourceRoot":"","sources":["../../lib/date-time-range/date-time-range.response.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAA;AAG5D,MAAM,OAAO,qBAAqB;
|
|
1
|
+
{"version":3,"file":"date-time-range.response.js","sourceRoot":"","sources":["../../lib/date-time-range/date-time-range.response.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAA;AAG5D,MAAM,OAAO,qBAAqB;IAIhC,MAAM,CAAC,IAAI,CAAE,KAA2B;QACtC,OAAO,KAAK,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,qBAAqB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAA;IACjE,CAAC;IAGD,IAAI,CAAQ;IAGZ,KAAK,CAAQ;IAEb,YAAa,SAAwB;QACnC,IAAI,CAAC,IAAI,GAAG,SAAS,CAAC,SAAS,CAAC,WAAW,EAAE,CAAA;QAC7C,IAAI,CAAC,KAAK,GAAG,SAAS,CAAC,SAAS,CAAC,WAAW,EAAE,CAAA;IAChD,CAAC;CACF;AATC;IADC,oBAAoB,CAAC,EAAE,WAAW,EAAE,+BAA+B,EAAE,CAAC;;mDAC3D;AAGZ;IADC,oBAAoB,CAAC,EAAE,WAAW,EAAE,6BAA6B,EAAE,CAAC;;oDACxD"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
import { before, describe, it } from 'node:test';
|
|
2
|
+
import { expect } from 'expect';
|
|
3
|
+
import { DateTimeRangeDto } from '../date-time-range.dto.js';
|
|
4
|
+
import { DateTimeRange } from '../date-time-range.js';
|
|
5
|
+
import { initDayjs } from '../../common/init-dayjs.js';
|
|
6
|
+
describe('DateTimeRangeDto unit tests', () => {
|
|
7
|
+
before(() => {
|
|
8
|
+
initDayjs();
|
|
9
|
+
});
|
|
10
|
+
describe('parse method', () => {
|
|
11
|
+
it('Parses a dto into a DateTimeRange with default inclusivity [)', () => {
|
|
12
|
+
const dto = new DateTimeRangeDto();
|
|
13
|
+
dto.from = '2024-01-01T00:00:00.000Z';
|
|
14
|
+
dto.until = '2024-01-31T23:59:59.999Z';
|
|
15
|
+
const range = dto.parse();
|
|
16
|
+
expect(range).toBeInstanceOf(DateTimeRange);
|
|
17
|
+
expect(range.inclLower.toISOString()).toBe('2024-01-01T00:00:00.000Z');
|
|
18
|
+
expect(range.exclUpper.toISOString()).toBe('2024-01-31T23:59:59.999Z');
|
|
19
|
+
});
|
|
20
|
+
it('Parses a dto into a DateTimeRange with custom inclusivity []', () => {
|
|
21
|
+
const dto = new DateTimeRangeDto();
|
|
22
|
+
dto.from = '2024-01-01T00:00:00.000Z';
|
|
23
|
+
dto.until = '2024-01-31T23:59:59.999Z';
|
|
24
|
+
const range = dto.parse('[]');
|
|
25
|
+
expect(range).toBeInstanceOf(DateTimeRange);
|
|
26
|
+
expect(range.inclLower.toISOString()).toBe('2024-01-01T00:00:00.000Z');
|
|
27
|
+
// With [] inclusivity, the upper bound is inclusive, so exclUpper is 1ms after
|
|
28
|
+
expect(range.exclUpper.toISOString()).toBe('2024-02-01T00:00:00.000Z');
|
|
29
|
+
});
|
|
30
|
+
it('Parses a dto into a DateTimeRange with custom inclusivity (]', () => {
|
|
31
|
+
const dto = new DateTimeRangeDto();
|
|
32
|
+
dto.from = '2024-01-01T00:00:00.000Z';
|
|
33
|
+
dto.until = '2024-01-31T23:59:59.999Z';
|
|
34
|
+
const range = dto.parse('(]');
|
|
35
|
+
expect(range).toBeInstanceOf(DateTimeRange);
|
|
36
|
+
// With (] inclusivity, the lower bound is exclusive, so inclLower is 1ms after
|
|
37
|
+
expect(range.inclLower.toISOString()).toBe('2024-01-01T00:00:00.001Z');
|
|
38
|
+
// Upper bound is inclusive, so exclUpper is 1ms after
|
|
39
|
+
expect(range.exclUpper.toISOString()).toBe('2024-02-01T00:00:00.000Z');
|
|
40
|
+
});
|
|
41
|
+
it('Parses a dto into a DateTimeRange with custom inclusivity ()', () => {
|
|
42
|
+
const dto = new DateTimeRangeDto();
|
|
43
|
+
dto.from = '2024-01-01T00:00:00.000Z';
|
|
44
|
+
dto.until = '2024-01-31T23:59:59.999Z';
|
|
45
|
+
const range = dto.parse('()');
|
|
46
|
+
expect(range).toBeInstanceOf(DateTimeRange);
|
|
47
|
+
// With () inclusivity, both bounds are exclusive
|
|
48
|
+
expect(range.inclLower.toISOString()).toBe('2024-01-01T00:00:00.001Z');
|
|
49
|
+
expect(range.exclUpper.toISOString()).toBe('2024-01-31T23:59:59.999Z');
|
|
50
|
+
});
|
|
51
|
+
it('Handles millisecond precision', () => {
|
|
52
|
+
const dto = new DateTimeRangeDto();
|
|
53
|
+
dto.from = '2024-03-15T10:20:30.123Z';
|
|
54
|
+
dto.until = '2024-03-15T10:20:30.456Z';
|
|
55
|
+
const range = dto.parse();
|
|
56
|
+
expect(range).toBeInstanceOf(DateTimeRange);
|
|
57
|
+
expect(range.inclLower.toISOString()).toBe('2024-03-15T10:20:30.123Z');
|
|
58
|
+
expect(range.exclUpper.toISOString()).toBe('2024-03-15T10:20:30.456Z');
|
|
59
|
+
});
|
|
60
|
+
it('Handles a dto spanning year boundary', () => {
|
|
61
|
+
const dto = new DateTimeRangeDto();
|
|
62
|
+
dto.from = '2023-12-31T22:00:00.000Z';
|
|
63
|
+
dto.until = '2024-01-01T02:00:00.000Z';
|
|
64
|
+
const range = dto.parse();
|
|
65
|
+
expect(range).toBeInstanceOf(DateTimeRange);
|
|
66
|
+
expect(range.inclLower.toISOString()).toBe('2023-12-31T22:00:00.000Z');
|
|
67
|
+
expect(range.exclUpper.toISOString()).toBe('2024-01-01T02:00:00.000Z');
|
|
68
|
+
});
|
|
69
|
+
it('Explicitly passing [) inclusivity behaves the same as default', () => {
|
|
70
|
+
const dto = new DateTimeRangeDto();
|
|
71
|
+
dto.from = '2024-06-01T10:00:00.000Z';
|
|
72
|
+
dto.until = '2024-06-30T18:00:00.000Z';
|
|
73
|
+
const rangeDefault = dto.parse();
|
|
74
|
+
const rangeExplicit = dto.parse('[)');
|
|
75
|
+
expect(rangeDefault.inclLower.toISOString()).toBe(rangeExplicit.inclLower.toISOString());
|
|
76
|
+
expect(rangeDefault.exclUpper.toISOString()).toBe(rangeExplicit.exclUpper.toISOString());
|
|
77
|
+
});
|
|
78
|
+
it('Handles short duration ranges', () => {
|
|
79
|
+
const dto = new DateTimeRangeDto();
|
|
80
|
+
dto.from = '2024-05-15T14:30:00.000Z';
|
|
81
|
+
dto.until = '2024-05-15T14:30:01.000Z';
|
|
82
|
+
const range = dto.parse();
|
|
83
|
+
expect(range).toBeInstanceOf(DateTimeRange);
|
|
84
|
+
expect(range.inclLower.toISOString()).toBe('2024-05-15T14:30:00.000Z');
|
|
85
|
+
expect(range.exclUpper.toISOString()).toBe('2024-05-15T14:30:01.000Z');
|
|
86
|
+
});
|
|
87
|
+
});
|
|
88
|
+
});
|
|
89
|
+
//# sourceMappingURL=date-time-range.dto.unit.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"date-time-range.dto.unit.test.js","sourceRoot":"","sources":["../../../lib/date-time-range/tests/date-time-range.dto.unit.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import { before, describe, it } from 'node:test';
|
|
2
|
+
import { expect } from 'expect';
|
|
3
|
+
import { DateTimeRange } from '../date-time-range.js';
|
|
4
|
+
import { DateTimeRangeResponse } from '../date-time-range.response.js';
|
|
5
|
+
import { timestamp } from '../../timestamp/index.js';
|
|
6
|
+
import { initDayjs } from '../../common/init-dayjs.js';
|
|
7
|
+
describe('DateTimeRangeResponse unit tests', () => {
|
|
8
|
+
before(() => {
|
|
9
|
+
initDayjs();
|
|
10
|
+
});
|
|
11
|
+
describe('constructor', () => {
|
|
12
|
+
it('Creates a DateTimeRangeResponse from a DateTimeRange', () => {
|
|
13
|
+
const range = new DateTimeRange(timestamp('2024-01-01T00:00:00.000Z'), timestamp('2024-01-31T23:59:59.999Z'));
|
|
14
|
+
const response = new DateTimeRangeResponse(range);
|
|
15
|
+
expect(response.from).toBe('2024-01-01T00:00:00.000Z');
|
|
16
|
+
expect(response.until).toBe('2024-01-31T23:59:59.999Z');
|
|
17
|
+
});
|
|
18
|
+
it('Converts Timestamp objects to ISO strings', () => {
|
|
19
|
+
const range = new DateTimeRange(timestamp('2024-06-15T12:30:00.000Z'), timestamp('2024-06-20T18:45:00.000Z'));
|
|
20
|
+
const response = new DateTimeRangeResponse(range);
|
|
21
|
+
expect(response.from).toBe('2024-06-15T12:30:00.000Z');
|
|
22
|
+
expect(response.until).toBe('2024-06-20T18:45:00.000Z');
|
|
23
|
+
});
|
|
24
|
+
it('Handles millisecond precision', () => {
|
|
25
|
+
const range = new DateTimeRange(timestamp('2024-03-15T10:20:30.123Z'), timestamp('2024-03-15T10:20:30.456Z'));
|
|
26
|
+
const response = new DateTimeRangeResponse(range);
|
|
27
|
+
expect(response.from).toBe('2024-03-15T10:20:30.123Z');
|
|
28
|
+
expect(response.until).toBe('2024-03-15T10:20:30.456Z');
|
|
29
|
+
});
|
|
30
|
+
});
|
|
31
|
+
describe('from static method', () => {
|
|
32
|
+
it('Creates a DateTimeRangeResponse from a non-null DateTimeRange', () => {
|
|
33
|
+
const range = new DateTimeRange(timestamp('2024-01-01T00:00:00.000Z'), timestamp('2024-12-31T23:59:59.999Z'));
|
|
34
|
+
const response = DateTimeRangeResponse.from(range);
|
|
35
|
+
expect(response).toBeInstanceOf(DateTimeRangeResponse);
|
|
36
|
+
expect(response?.from).toBe('2024-01-01T00:00:00.000Z');
|
|
37
|
+
expect(response?.until).toBe('2024-12-31T23:59:59.999Z');
|
|
38
|
+
});
|
|
39
|
+
it('Returns null when given null', () => {
|
|
40
|
+
const response = DateTimeRangeResponse.from(null);
|
|
41
|
+
expect(response).toBeNull();
|
|
42
|
+
});
|
|
43
|
+
it('Handles DateTimeRange spanning different timezones', () => {
|
|
44
|
+
const range = new DateTimeRange(timestamp('2024-03-10T08:00:00.000Z'), timestamp('2024-03-11T20:00:00.000Z'));
|
|
45
|
+
const response = DateTimeRangeResponse.from(range);
|
|
46
|
+
expect(response).toBeInstanceOf(DateTimeRangeResponse);
|
|
47
|
+
expect(response?.from).toBe('2024-03-10T08:00:00.000Z');
|
|
48
|
+
expect(response?.until).toBe('2024-03-11T20:00:00.000Z');
|
|
49
|
+
});
|
|
50
|
+
it('Handles DateTimeRange spanning year boundary', () => {
|
|
51
|
+
const range = new DateTimeRange(timestamp('2023-12-31T22:00:00.000Z'), timestamp('2024-01-01T02:00:00.000Z'));
|
|
52
|
+
const response = DateTimeRangeResponse.from(range);
|
|
53
|
+
expect(response).toBeInstanceOf(DateTimeRangeResponse);
|
|
54
|
+
expect(response?.from).toBe('2023-12-31T22:00:00.000Z');
|
|
55
|
+
expect(response?.until).toBe('2024-01-01T02:00:00.000Z');
|
|
56
|
+
});
|
|
57
|
+
it('Handles short duration ranges', () => {
|
|
58
|
+
const range = new DateTimeRange(timestamp('2024-05-15T14:30:00.000Z'), timestamp('2024-05-15T14:30:01.000Z'));
|
|
59
|
+
const response = DateTimeRangeResponse.from(range);
|
|
60
|
+
expect(response).toBeInstanceOf(DateTimeRangeResponse);
|
|
61
|
+
expect(response?.from).toBe('2024-05-15T14:30:00.000Z');
|
|
62
|
+
expect(response?.until).toBe('2024-05-15T14:30:01.000Z');
|
|
63
|
+
});
|
|
64
|
+
});
|
|
65
|
+
});
|
|
66
|
+
//# sourceMappingURL=date-time-range.response.unit.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"date-time-range.response.unit.test.js","sourceRoot":"","sources":["../../../lib/date-time-range/tests/date-time-range.response.unit.test.ts"],"names":[],"mappings":"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"}
|