1
1
import { module , test } from ' qunit' ;
2
2
import { setupRenderingTest } from ' dummy/tests/helpers' ;
3
3
import { typeIn , fillIn , render , triggerKeyEvent } from ' @ember/test-helpers' ;
4
- import { hbs } from 'ember-cli-htmlbars' ;
4
+ import AuDateInput from ' @appuniversum/ember-appuniversum/components/au-date-input' ;
5
+ import { tracked } from ' @glimmer/tracking' ;
6
+ import { settled } from ' @ember/test-helpers' ;
5
7
8
+ class TestState {
9
+ @tracked value? : string | Date ;
10
+ }
6
11
module (' Integration | Component | au-date-input' , function (hooks ) {
7
12
setupRenderingTest (hooks );
8
13
9
14
test (' it adds attributes to the input element' , async function (assert ) {
10
- await render ( hbs `
11
- <AuDateInput data-test-date-input />
12
- ` ) ;
15
+ await render (<template ><AuDateInput data-test-date-input /></template >);
13
16
14
17
assert .dom (' [data-test-date-input]' ).hasTagName (' input' );
15
18
});
16
19
17
20
test (' it supports disabling the date input' , async function (assert ) {
18
- await render ( hbs `
19
- <AuDateInput @disabled={{true}} data-test-date-input />
20
- ` ) ;
21
+ await render (
22
+ <template >
23
+ <AuDateInput @ disabled ={{ true }} data-test-date-input />
24
+ </template >,
25
+ );
21
26
22
27
assert .dom (' [data-test-date-input]' ).hasAttribute (' disabled' );
23
28
});
24
29
25
30
test (' it accepts an iso date string or date object as a value' , async function (assert ) {
26
- this . value = '2023-02-02' ;
31
+ const state = new TestState ();
32
+ state .value = ' 2023-02-02' ;
27
33
28
- await render ( hbs `
29
- <AuDateInput data-test-date-input @value={{this.value}} />
30
- ` ) ;
34
+ await render (
35
+ <template >
36
+ <AuDateInput data-test-date-input @ value ={{state.value }} />
37
+ </template >,
38
+ );
31
39
32
40
assert .dom (' [data-test-date-input]' ).hasValue (' 02-02-2023' );
33
41
34
- this . set ( 'value' , new Date ( 2024 , 5 , 3 ) ) ;
42
+ state .value = new Date (2024 , 5 , 3 );
43
+ await settled ();
35
44
assert .dom (' [data-test-date-input]' ).hasValue (' 03-06-2024' );
36
45
37
- this . set ( 'value' , undefined ) ;
46
+ state .value = undefined ;
47
+ await settled ();
38
48
assert .dom (' [data-test-date-input]' ).hasNoValue ();
39
49
});
40
50
41
51
test (' it calls @onChange with the correct date' , async function (assert ) {
42
- this . onChange = ( isoDate , date ) => {
52
+ const onChange = (isoDate : string | null , date : Date | null ) => {
43
53
assert .strictEqual (
44
54
isoDate ,
45
55
' 2023-02-02' ,
@@ -51,16 +61,18 @@ module('Integration | Component | au-date-input', function (hooks) {
51
61
);
52
62
};
53
63
54
- await render ( hbs `
55
- <AuDateInput data-test-date-input @onChange={{this.onChange}} />
56
- ` ) ;
64
+ await render (
65
+ <template >
66
+ <AuDateInput data-test-date-input @ onChange ={{onChange }} />
67
+ </template >,
68
+ );
57
69
58
70
await fillIn (' [data-test-date-input]' , ' 0202202' );
59
71
await typeIn (' [data-test-date-input]' , ' 3' ); // fillIn alone doesn't do the trick, but typeIn has issues when typing all the characters..
60
72
});
61
73
62
74
test (' it calls @onChange with `null` if the input is cleared' , async function (assert ) {
63
- this . onChange = ( isoDate , date ) => {
75
+ const onChange = (isoDate : string | null , date : Date | null ) => {
64
76
assert .strictEqual (
65
77
isoDate ,
66
78
null ,
@@ -69,17 +81,25 @@ module('Integration | Component | au-date-input', function (hooks) {
69
81
assert .strictEqual (date , null , ' it returns null if the input is cleared' );
70
82
};
71
83
72
- await render ( hbs `
73
- <AuDateInput data-test-date-input @value="2023-02-02" @onChange={{this.onChange}} />
74
- ` ) ;
84
+ await render (
85
+ <template >
86
+ <AuDateInput
87
+ data-test-date-input
88
+ @ value =" 2023-02-02"
89
+ @ onChange ={{onChange }}
90
+ />
91
+ </template >,
92
+ );
75
93
76
- let input = document . querySelector ( '[data-test-date-input]' ) ;
94
+ const input = document .querySelector (
95
+ ' [data-test-date-input]' ,
96
+ ) as HTMLInputElement ;
77
97
78
98
await clearInput (input );
79
99
});
80
100
});
81
101
82
- async function clearInput ( input ) {
102
+ async function clearInput(input : HTMLInputElement ) {
83
103
// Focus seems to be needed to make the backspace work
84
104
input .focus ();
85
105
0 commit comments