1
1
import { test , expect } from '@playwright/test' ;
2
-
2
+ import { mockEveryVoiceAPI } from './fixtures/data-fixture' ;
3
+ import fs from 'fs' ;
3
4
test . describe ( 'test creator interface' , ( ) => {
4
- test ( 'check UI' , async ( { page } ) => {
5
+ test . beforeEach ( 'Setup' , async ( { page } ) => {
6
+ mockEveryVoiceAPI ( page ) ;
5
7
await page . goto ( '/create' ) ;
8
+ } ) ;
9
+ test ( 'check UI' , async ( { page } ) => {
6
10
await expect (
7
11
page . getByTestId ( 'config-file-importer' ) ,
8
12
'should have config loader '
@@ -17,4 +21,249 @@ test.describe('test creator interface', () => {
17
21
'should have creator link'
18
22
) . toBeVisible ( ) ;
19
23
} ) ;
24
+ test ( 'check create configuration' , async ( { page } ) => {
25
+ await page . locator ( '#step-config-tab' ) . click ( { force : true } ) ;
26
+ await page . locator ( '#input-config-tab' ) . click ( { force : true } ) ;
27
+ await expect (
28
+ page . locator ( '#save_config' ) ,
29
+ 'save configuration should be disabled'
30
+ ) . toHaveAttribute ( 'disabled' ) ;
31
+ await page . getByLabel ( 'Title of activity' ) . fill ( 'transcribe test' ) ;
32
+
33
+ await page . getByLabel ( 'API' ) . fill ( 'https://mock-api.dev/' ) ;
34
+ await page
35
+ . getByLabel ( 'Instruction for this activity' )
36
+ . fill ( 'transcribe what you hear' ) ;
37
+ await expect (
38
+ page . getByText ( / A P I e n d p o i n t i s r e a c h a b l e / ) ,
39
+ 'alert api status'
40
+ ) . toBeVisible ( ) ;
41
+ await expect (
42
+ page . locator ( '#save_config' ) ,
43
+ 'save configuration should be enabled'
44
+ ) . not . toHaveAttribute ( 'disabled' ) ;
45
+ const download = page . waitForEvent ( 'download' ) ;
46
+ await page . locator ( '#save_config' ) . click ( ) ;
47
+ const configFile = JSON . parse (
48
+ fs . readFileSync ( await ( await download ) . path ( ) , {
49
+ encoding : 'utf8' ,
50
+ flag : 'r' ,
51
+ } )
52
+ ) ;
53
+ await expect (
54
+ configFile . title ,
55
+ 'Downloaded configuration file title is correct'
56
+ ) . toMatch ( 'transcribe test' ) ;
57
+ await expect (
58
+ configFile . text_instructions ,
59
+ 'Downloaded configuration file instruction is correct'
60
+ ) . toMatch ( 'transcribe what you hear' ) ;
61
+ await expect (
62
+ configFile . api ,
63
+ 'Downloaded configuration file api is correct'
64
+ ) . toMatch ( 'https://mock-api.dev/' ) ;
65
+ } ) ;
66
+ test ( 'check load configuration' , async ( { page } ) => {
67
+ const config = JSON . parse (
68
+ fs . readFileSync ( 'e2e/fixtures/test-config.json' , {
69
+ encoding : 'utf8' ,
70
+ flag : 'r' ,
71
+ } )
72
+ ) ;
73
+
74
+ await page . locator ( '#step-config-tab' ) . click ( { force : true } ) ;
75
+ await page . locator ( '#input-config-tab' ) . click ( { force : true } ) ;
76
+ await expect (
77
+ page . locator ( '#save_config' ) ,
78
+ 'save configuration should be disabled'
79
+ ) . toHaveAttribute ( 'disabled' ) ;
80
+ await expect (
81
+ page . getByLabel ( 'Title of activity' ) ,
82
+ 'title should be empty'
83
+ ) . toBeEmpty ( ) ;
84
+ await page . locator ( '#load-config-tab' ) . click ( { force : true } ) ;
85
+ await page
86
+ . getByTestId ( 'config-file-importer' )
87
+ . setInputFiles ( 'e2e/fixtures/test-config.json' ) ;
88
+ await expect (
89
+ page . getByText ( / A c t i v i t y p a r a m e t e r s h a v e b e e n l o a d e d / ) ,
90
+ 'alert config loaded'
91
+ ) . toBeVisible ( ) ;
92
+ await expect (
93
+ page . getByText ( / A P I e n d p o i n t i s r e a c h a b l e / ) ,
94
+ 'alert api status'
95
+ ) . toBeVisible ( ) ;
96
+ //go back config tab to verify data
97
+ await page . locator ( '#step-config-tab' ) . click ( { force : true } ) ;
98
+ await page . locator ( '#input-config-tab' ) . click ( { force : true } ) ;
99
+ await expect (
100
+ page . locator ( '#save_config' ) ,
101
+ 'save configuration should be enabled'
102
+ ) . not . toHaveAttribute ( 'disabled' ) ;
103
+ await expect (
104
+ page . getByLabel ( 'Title of activity' ) ,
105
+ 'title should have correct value'
106
+ ) . toHaveValue ( config . title ) ;
107
+ await expect (
108
+ page . getByLabel ( 'API' , { exact : true } ) ,
109
+ 'api should have correct value'
110
+ ) . toHaveValue ( config . api ) ;
111
+ } ) ;
112
+ test ( 'check create data' , async ( { page } ) => {
113
+ await page . locator ( '#step-data-tab' ) . click ( { force : true } ) ;
114
+ await page . locator ( '#input-data-tab' ) . click ( { force : true } ) ;
115
+
116
+ const textBox = page . getByLabel ( 'Data for this activity' ) ;
117
+ const addDataBtn = page . getByTestId ( 'add_data' ) ;
118
+ const exportDataBtn = page . getByTestId ( 'export_data' ) ;
119
+ const dataList = page . getByTestId ( 'data_list' ) ;
120
+ await expect ( textBox , 'text box should be visible' ) . toBeVisible ( ) ;
121
+ await expect (
122
+ addDataBtn ,
123
+ 'add data button should be disabled'
124
+ ) . toHaveAttribute ( 'disabled' ) ;
125
+ await expect (
126
+ exportDataBtn ,
127
+ 'export data button should be disabled'
128
+ ) . toHaveAttribute ( 'disabled' ) ;
129
+ await expect (
130
+ dataList . locator ( 'span' ) ,
131
+ 'data list should be empty'
132
+ ) . toHaveCount ( 0 ) ;
133
+
134
+ await textBox . fill ( 'X̱EX̱E ÁLḴ ȻEȻENSIEW̱' ) ;
135
+ await textBox . blur ( ) ;
136
+ await expect (
137
+ addDataBtn ,
138
+ 'add data button should be enabled'
139
+ ) . not . toHaveAttribute ( 'disabled' ) ;
140
+ await expect (
141
+ exportDataBtn ,
142
+ 'export data button should be disabled'
143
+ ) . toHaveAttribute ( 'disabled' ) ;
144
+ await addDataBtn . click ( { force : true } ) ;
145
+ await expect (
146
+ dataList . locator ( 'span' ) ,
147
+ 'data list should have data'
148
+ ) . toHaveCount ( 1 ) ;
149
+
150
+ await expect (
151
+ exportDataBtn ,
152
+ 'export data button should be enabled'
153
+ ) . not . toHaveAttribute ( 'disabled' ) ;
154
+ const download = page . waitForEvent ( 'download' ) ;
155
+ await exportDataBtn . click ( ) ;
156
+ const dataFile = JSON . parse (
157
+ fs . readFileSync ( await ( await download ) . path ( ) , {
158
+ encoding : 'utf8' ,
159
+ flag : 'r' ,
160
+ } )
161
+ ) ;
162
+ expect ( dataFile [ 0 ] . orthography , 'verify data file' ) . toMatch (
163
+ 'X̱EX̱E ÁLḴ ȻEȻENSIEW̱'
164
+ ) ;
165
+ } ) ;
166
+ test ( 'check load data' , async ( { page } ) => {
167
+ const data = JSON . parse (
168
+ fs . readFileSync ( 'e2e/fixtures/test-data.json' , {
169
+ encoding : 'utf8' ,
170
+ flag : 'r' ,
171
+ } )
172
+ ) ;
173
+ await page . locator ( '#step-data-tab' ) . click ( { force : true } ) ;
174
+ await page . locator ( '#input-data-tab' ) . click ( { force : true } ) ;
175
+ const dataList = page . getByTestId ( 'data_list' ) ;
176
+ await expect (
177
+ dataList . locator ( 'span' ) ,
178
+ 'data list should be empty'
179
+ ) . toHaveCount ( 0 ) ;
180
+ await page . locator ( '#load-data-tab' ) . click ( { force : true } ) ;
181
+ await page
182
+ . getByTestId ( 'data-file-importer' )
183
+ . setInputFiles ( 'e2e/fixtures/test-data.json' ) ;
184
+ await expect (
185
+ page . getByText ( / A c t i v i t y d a t a h a v e b e e n l o a d e d / ) ,
186
+ 'alert data loaded'
187
+ ) . toBeVisible ( ) ;
188
+ await expect (
189
+ dataList . locator ( 'span' ) ,
190
+ 'data list should have data'
191
+ ) . toHaveCount ( data . length ) ;
192
+ let r = 0 ;
193
+ for ( const row of await dataList . locator ( 'span' ) . all ( ) ) {
194
+ expect ( row , `should contain text ${ data [ r ] . orthography } ` ) . toContainText (
195
+ data [ r ] . orthography
196
+ ) ;
197
+ r ++ ;
198
+ }
199
+ } ) ;
200
+ test ( 'check preview and export' , async ( { page } ) => {
201
+ const data = JSON . parse (
202
+ fs . readFileSync ( 'e2e/fixtures/test-activity.json' , {
203
+ encoding : 'utf8' ,
204
+ flag : 'r' ,
205
+ } )
206
+ ) ;
207
+ const exportActivityButton = page . locator ( '#step-export-activity-button' ) ;
208
+ expect (
209
+ exportActivityButton ,
210
+ 'export button should be disabled'
211
+ ) . toHaveAttribute ( 'disabled' ) ;
212
+ await page . locator ( '#load-config-tab' ) . click ( { force : true } ) ;
213
+ await page
214
+ . getByTestId ( 'config-file-importer' )
215
+ . setInputFiles ( 'e2e/fixtures/test-config.json' ) ;
216
+ await expect (
217
+ page . getByText ( / A c t i v i t y p a r a m e t e r s h a v e b e e n l o a d e d / ) ,
218
+ 'alert config loaded'
219
+ ) . toBeVisible ( ) ;
220
+ expect (
221
+ exportActivityButton ,
222
+ 'export button should be disabled'
223
+ ) . toHaveAttribute ( 'disabled' ) ;
224
+ await page
225
+ . getByTestId ( 'data-file-importer' )
226
+ . setInputFiles ( 'e2e/fixtures/test-data.json' ) ;
227
+ await expect (
228
+ page . getByText ( / A c t i v i t y d a t a h a v e b e e n l o a d e d / ) ,
229
+ 'alert config loaded'
230
+ ) . toBeVisible ( ) ;
231
+ expect (
232
+ exportActivityButton ,
233
+ 'export button should be enabled'
234
+ ) . not . toHaveAttribute ( 'disabled' ) ;
235
+ await expect (
236
+ page . getByTestId ( 'start_activity' ) ,
237
+ 'should have start button'
238
+ ) . toBeVisible ( ) ;
239
+ await page . getByTestId ( 'start_activity' ) . click ( { force : true } ) ;
240
+ //Give the correct answer and check the results
241
+ await expect (
242
+ page . getByText ( 'Audio generated' ) ,
243
+ 'should display notice about audio'
244
+ ) . toBeVisible ( ) ;
245
+ await expect (
246
+ exportActivityButton ,
247
+ 'export data button should be enabled'
248
+ ) . not . toHaveAttribute ( 'disabled' ) ;
249
+ const download = page . waitForEvent ( 'download' ) ;
250
+ await exportActivityButton . click ( ) ;
251
+ const activityFile = JSON . parse (
252
+ fs . readFileSync ( await ( await download ) . path ( ) , {
253
+ encoding : 'utf8' ,
254
+ flag : 'r' ,
255
+ } )
256
+ ) ;
257
+ await expect (
258
+ activityFile . configuration . title ,
259
+ 'title should have correct value'
260
+ ) . toMatch ( data . configuration . title ) ;
261
+ await expect (
262
+ activityFile . configuration . api ,
263
+ 'api should have correct value'
264
+ ) . toMatch ( data . configuration . api ) ;
265
+ expect ( activityFile . data , 'data should have correct value' ) . toMatch (
266
+ data . data
267
+ ) ;
268
+ } ) ;
20
269
} ) ;
0 commit comments