@@ -4,6 +4,16 @@ import { mount } from 'enzyme';
4
4
import Toast from '../src/Toast' ;
5
5
6
6
describe ( '<Toast>' , ( ) => {
7
+ let clock ;
8
+
9
+ beforeEach ( ( ) => {
10
+ clock = sinon . useFakeTimers ( ) ;
11
+ } ) ;
12
+
13
+ afterEach ( ( ) => {
14
+ clock . restore ( ) ;
15
+ } ) ;
16
+
7
17
it ( 'should render an entire toast' , ( ) => {
8
18
mount (
9
19
< Toast >
@@ -44,58 +54,128 @@ describe('<Toast>', () => {
44
54
} ) ;
45
55
46
56
it ( 'should trigger the onClose event after the autohide delay' , ( ) => {
47
- const clock = sinon . useFakeTimers ( ) ;
48
-
49
- try {
50
- const onCloseSpy = sinon . spy ( ) ;
51
- mount (
52
- < Toast onClose = { onCloseSpy } delay = { 500 } show autohide >
53
- < Toast . Header > header-content</ Toast . Header >
54
- < Toast . Body > body-content</ Toast . Body >
55
- </ Toast > ,
56
- ) ;
57
- clock . tick ( 1000 ) ;
58
- expect ( onCloseSpy ) . to . have . been . calledOnce ;
59
- } finally {
60
- clock . restore ( ) ;
61
- }
57
+ const onCloseSpy = sinon . spy ( ) ;
58
+ mount (
59
+ < Toast onClose = { onCloseSpy } delay = { 500 } show autohide >
60
+ < Toast . Header > header-content</ Toast . Header >
61
+ < Toast . Body > body-content</ Toast . Body >
62
+ </ Toast > ,
63
+ ) ;
64
+ clock . tick ( 1000 ) ;
65
+ expect ( onCloseSpy ) . to . have . been . calledOnce ;
62
66
} ) ;
63
67
64
68
it ( 'should not trigger the onClose event if autohide is not set' , ( ) => {
65
- const clock = sinon . useFakeTimers ( ) ;
66
-
67
- try {
68
- const onCloseSpy = sinon . spy ( ) ;
69
- mount (
70
- < Toast onClose = { onCloseSpy } >
71
- < Toast . Header > header-content</ Toast . Header >
72
- < Toast . Body > body-content</ Toast . Body >
73
- </ Toast > ,
74
- ) ;
75
- clock . tick ( 3000 ) ;
76
- expect ( onCloseSpy ) . not . to . have . been . called ;
77
- } finally {
78
- clock . restore ( ) ;
79
- }
69
+ const onCloseSpy = sinon . spy ( ) ;
70
+ mount (
71
+ < Toast onClose = { onCloseSpy } >
72
+ < Toast . Header > header-content</ Toast . Header >
73
+ < Toast . Body > body-content</ Toast . Body >
74
+ </ Toast > ,
75
+ ) ;
76
+ clock . tick ( 3000 ) ;
77
+ expect ( onCloseSpy ) . not . to . have . been . called ;
80
78
} ) ;
81
79
82
80
it ( 'should clearTimeout after unmount' , ( ) => {
83
- const clock = sinon . useFakeTimers ( ) ;
84
-
85
- try {
86
- const onCloseSpy = sinon . spy ( ) ;
87
- const wrapper = mount (
88
- < Toast delay = { 500 } onClose = { onCloseSpy } show autohide >
89
- < Toast . Header > header-content</ Toast . Header >
90
- < Toast . Body > body-content</ Toast . Body >
91
- </ Toast > ,
92
- ) ;
93
- wrapper . unmount ( ) ;
94
- clock . tick ( 1000 ) ;
95
- expect ( onCloseSpy ) . not . to . have . been . called ;
96
- } finally {
97
- clock . restore ( ) ;
98
- }
81
+ const onCloseSpy = sinon . spy ( ) ;
82
+ const wrapper = mount (
83
+ < Toast delay = { 500 } onClose = { onCloseSpy } show autohide >
84
+ < Toast . Header > header-content</ Toast . Header >
85
+ < Toast . Body > body-content</ Toast . Body >
86
+ </ Toast > ,
87
+ ) ;
88
+ wrapper . unmount ( ) ;
89
+ clock . tick ( 1000 ) ;
90
+ expect ( onCloseSpy ) . not . to . have . been . called ;
91
+ } ) ;
92
+
93
+ it ( 'should not reset autohide timer when element re-renders with same props' , ( ) => {
94
+ const onCloseSpy = sinon . spy ( ) ;
95
+ const wrapper = mount (
96
+ < Toast delay = { 500 } onClose = { onCloseSpy } show autohide >
97
+ < Toast . Header > header-content</ Toast . Header >
98
+ < Toast . Body > body-content</ Toast . Body >
99
+ </ Toast > ,
100
+ ) ;
101
+
102
+ clock . tick ( 250 ) ;
103
+
104
+ // Trigger render with no props changes.
105
+ wrapper . setProps ( { } ) ;
106
+
107
+ clock . tick ( 300 ) ;
108
+ expect ( onCloseSpy ) . to . have . been . calledOnce ;
109
+ } ) ;
110
+
111
+ it ( 'should not reset autohide timer when delay is changed' , ( ) => {
112
+ const onCloseSpy = sinon . spy ( ) ;
113
+ const wrapper = mount (
114
+ < Toast delay = { 500 } onClose = { onCloseSpy } show autohide >
115
+ < Toast . Header > header-content</ Toast . Header >
116
+ < Toast . Body > body-content</ Toast . Body >
117
+ </ Toast > ,
118
+ ) ;
119
+
120
+ clock . tick ( 250 ) ;
121
+
122
+ wrapper . setProps ( { delay : 10000 } ) ;
123
+
124
+ clock . tick ( 300 ) ;
125
+ expect ( onCloseSpy ) . to . have . been . calledOnce ;
126
+ } ) ;
127
+
128
+ it ( 'should not reset autohide timer when onClosed is changed' , ( ) => {
129
+ const onCloseSpy = sinon . spy ( ) ;
130
+ const onCloseSpy2 = sinon . spy ( ) ;
131
+ const wrapper = mount (
132
+ < Toast delay = { 500 } onClose = { onCloseSpy } show autohide >
133
+ < Toast . Header > header-content</ Toast . Header >
134
+ < Toast . Body > body-content</ Toast . Body >
135
+ </ Toast > ,
136
+ ) ;
137
+
138
+ clock . tick ( 250 ) ;
139
+
140
+ wrapper . setProps ( { onClose : onCloseSpy2 } ) ;
141
+
142
+ clock . tick ( 300 ) ;
143
+ expect ( onCloseSpy ) . not . to . have . been . called ;
144
+ expect ( onCloseSpy2 ) . to . have . been . calledOnce ;
145
+ } ) ;
146
+
147
+ it ( 'should not call onClose if autohide is changed from true to false' , ( ) => {
148
+ const onCloseSpy = sinon . spy ( ) ;
149
+ const wrapper = mount (
150
+ < Toast delay = { 500 } onClose = { onCloseSpy } show autohide >
151
+ < Toast . Header > header-content</ Toast . Header >
152
+ < Toast . Body > body-content</ Toast . Body >
153
+ </ Toast > ,
154
+ ) ;
155
+
156
+ clock . tick ( 250 ) ;
157
+
158
+ wrapper . setProps ( { autohide : false } ) ;
159
+
160
+ clock . tick ( 300 ) ;
161
+ expect ( onCloseSpy ) . not . to . have . been . called ;
162
+ } ) ;
163
+
164
+ it ( 'should not call onClose if show is changed from true to false' , ( ) => {
165
+ const onCloseSpy = sinon . spy ( ) ;
166
+ const wrapper = mount (
167
+ < Toast delay = { 500 } onClose = { onCloseSpy } show autohide >
168
+ < Toast . Header > header-content</ Toast . Header >
169
+ < Toast . Body > body-content</ Toast . Body >
170
+ </ Toast > ,
171
+ ) ;
172
+
173
+ clock . tick ( 250 ) ;
174
+
175
+ wrapper . setProps ( { show : false } ) ;
176
+
177
+ clock . tick ( 300 ) ;
178
+ expect ( onCloseSpy ) . not . to . have . been . called ;
99
179
} ) ;
100
180
101
181
it ( 'should render with bsPrefix' , ( ) => {
0 commit comments