1
1
// Utilities
2
+ import { StringDateAdapter } from '../adapters/string'
2
3
import { VuetifyDateAdapter } from '../adapters/vuetify'
3
4
4
5
// Types
@@ -7,12 +8,16 @@ import type { DateAdapter } from '../DateAdapter'
7
8
8
9
function expectAssignable < T , T2 extends T = T > ( value : T2 ) : void { }
9
10
10
- describe ( 'date.ts' , ( ) => {
11
- // Cannot define properties that don't exist in date-io
12
- expectAssignable < DateAdapter > ( { } as IUtils < Date , string > )
13
- // @ts -expect-error Can implement a subset of date-io
14
- expectAssignable < IUtils < Date > > ( { } as DateAdapter )
11
+ describe ( 'date' , ( ) => {
12
+ it ( 'types' , ( ) => {
13
+ // Cannot define properties that don't exist in date-io
14
+ expectAssignable < DateAdapter > ( { } as IUtils < Date , string > )
15
+ // @ts -expect-error Can implement a subset of date-io
16
+ expectAssignable < IUtils < Date > > ( { } as DateAdapter )
17
+ } )
18
+ } )
15
19
20
+ describe ( 'VuetifyDateAdapter' , ( ) => {
16
21
it ( 'should have the correct days in a month' , ( ) => {
17
22
const adapter = new VuetifyDateAdapter ( { locale : 'en-US' } )
18
23
@@ -90,3 +95,82 @@ describe('date.ts', () => {
90
95
expect ( adapter2 . getWeek ( new Date ( '2025-01-06' ) ) ) . toBe ( 2 ) // monday
91
96
} )
92
97
} )
98
+
99
+ describe ( 'StringDateAdapter' , ( ) => {
100
+ it ( 'should have the correct days in a month' , ( ) => {
101
+ const adapter = new StringDateAdapter ( { locale : 'en-US' } )
102
+
103
+ expect ( adapter . getWeek ( '2023-10-10' ) ) . toBe ( 41 )
104
+ } )
105
+
106
+ it ( 'should correctly calculate weeks between years' , ( ) => {
107
+ const adapter = new StringDateAdapter ( { locale : 'en-US' } )
108
+
109
+ expect ( adapter . getWeek ( '2024-12-28' ) ) . toBe ( 52 )
110
+ expect ( adapter . getWeek ( '2024-12-29' ) ) . toBe ( 1 )
111
+ expect ( adapter . getWeek ( '2024-12-30' ) ) . toBe ( 1 )
112
+ expect ( adapter . getWeek ( '2024-12-31' ) ) . toBe ( 1 )
113
+ expect ( adapter . getWeek ( '2025-01-01' ) ) . toBe ( 1 )
114
+ expect ( adapter . getWeek ( '2025-01-02' ) ) . toBe ( 1 )
115
+ expect ( adapter . getWeek ( '2025-01-03' ) ) . toBe ( 1 )
116
+ expect ( adapter . getWeek ( '2025-01-04' ) ) . toBe ( 1 )
117
+ expect ( adapter . getWeek ( '2025-01-05' ) ) . toBe ( 2 )
118
+ } )
119
+
120
+ it ( 'should correctly calculate when year starts with a full week' , ( ) => {
121
+ const adapter1 = new StringDateAdapter ( { locale : 'en-US' } ) // first day = 7 | minimal days = 1
122
+
123
+ expect ( adapter1 . getWeek ( '2022-12-25' ) ) . toBe ( 53 )
124
+ expect ( adapter1 . getWeek ( '2022-12-31' ) ) . toBe ( 53 )
125
+ expect ( adapter1 . getWeek ( '2023-01-01' ) ) . toBe ( 1 )
126
+ expect ( adapter1 . getWeek ( '2023-01-07' ) ) . toBe ( 1 )
127
+
128
+ const adapter2 = new StringDateAdapter ( { locale : 'pt' } ) // first day = 7 | minimal days = 4
129
+
130
+ expect ( adapter2 . getWeek ( '2022-12-25' ) ) . toBe ( 52 )
131
+ expect ( adapter2 . getWeek ( '2022-12-31' ) ) . toBe ( 52 )
132
+ expect ( adapter2 . getWeek ( '2023-01-01' ) ) . toBe ( 1 )
133
+ expect ( adapter2 . getWeek ( '2023-01-07' ) ) . toBe ( 1 )
134
+ } )
135
+
136
+ it ( 'should adjust for start of a week' , ( ) => {
137
+ const adapter = new StringDateAdapter ( { locale : 'en-US' } ) // first day = 7 | minimal days = 1
138
+
139
+ expect ( adapter . getWeek ( '2028-12-25' , 1 ) ) . toBe ( 53 )
140
+ expect ( adapter . getWeek ( '2028-12-31' , 1 ) ) . toBe ( 53 )
141
+ expect ( adapter . getWeek ( '2029-01-01' , 1 ) ) . toBe ( 1 )
142
+ expect ( adapter . getWeek ( '2029-01-07' , 1 ) ) . toBe ( 1 )
143
+
144
+ const adapter2 = new StringDateAdapter ( { locale : 'pt-PT' } ) // first day = 7 | minimal days = 4
145
+
146
+ expect ( adapter2 . getWeek ( '2024-12-28' , 1 ) ) . toBe ( 52 )
147
+ expect ( adapter2 . getWeek ( '2024-12-29' , 1 ) ) . toBe ( 52 )
148
+ expect ( adapter2 . getWeek ( '2024-12-30' , 1 ) ) . toBe ( 1 )
149
+ expect ( adapter2 . getWeek ( '2024-12-31' , 1 ) ) . toBe ( 1 )
150
+ expect ( adapter2 . getWeek ( '2025-01-01' , 1 ) ) . toBe ( 1 )
151
+ expect ( adapter2 . getWeek ( '2025-01-02' , 1 ) ) . toBe ( 1 )
152
+ expect ( adapter2 . getWeek ( '2025-01-03' , 1 ) ) . toBe ( 1 )
153
+ expect ( adapter2 . getWeek ( '2025-01-04' , 1 ) ) . toBe ( 1 )
154
+ expect ( adapter2 . getWeek ( '2025-01-05' , 1 ) ) . toBe ( 1 )
155
+ expect ( adapter2 . getWeek ( '2025-01-06' , 1 ) ) . toBe ( 2 )
156
+ expect ( adapter2 . getWeek ( '2025-01-07' , 1 ) ) . toBe ( 2 )
157
+
158
+ expect ( adapter2 . getWeek ( '2028-12-25' , 1 ) ) . toBe ( 52 )
159
+ expect ( adapter2 . getWeek ( '2028-12-31' , 1 ) ) . toBe ( 52 )
160
+ expect ( adapter2 . getWeek ( '2029-01-01' , 1 ) ) . toBe ( 1 )
161
+ expect ( adapter2 . getWeek ( '2029-01-07' , 1 ) ) . toBe ( 1 )
162
+
163
+ const adapter3 = new StringDateAdapter ( { locale : 'pl-PL' } )
164
+ expect ( adapter3 . getWeek ( '2024-12-29' , 1 ) ) . toBe ( 52 )
165
+ } )
166
+
167
+ it ( 'should adjust fallback to week start from locale' , ( ) => {
168
+ const adapter1 = new StringDateAdapter ( { locale : 'en-US' } )
169
+ expect ( adapter1 . getWeek ( '2025-01-04' ) ) . toBe ( 1 ) // saturday
170
+ expect ( adapter1 . getWeek ( '2025-01-05' ) ) . toBe ( 2 ) // sunday
171
+
172
+ const adapter2 = new StringDateAdapter ( { locale : 'fr' } )
173
+ expect ( adapter2 . getWeek ( '2025-01-05' ) ) . toBe ( 1 ) // sunday
174
+ expect ( adapter2 . getWeek ( '2025-01-06' ) ) . toBe ( 2 ) // monday
175
+ } )
176
+ } )
0 commit comments