diff options
author | 0xCmdrKeen <98132670+0xCmdrKeen@users.noreply.github.com> | 2023-10-17 11:58:51 -0700 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-10-17 19:58:51 +0100 |
commit | a3b01c2dd24ccf1d2a4fa8c89df7c4c861fc52ac (patch) | |
tree | 7225b4ace5f8919f04b442c0b39146459645d239 | |
parent | Bump actions/checkout from 3 to 4 (#80) (diff) | |
download | ferdium-server-a3b01c2dd24ccf1d2a4fa8c89df7c4c861fc52ac.tar.gz ferdium-server-a3b01c2dd24ccf1d2a4fa8c89df7c4c861fc52ac.tar.zst ferdium-server-a3b01c2dd24ccf1d2a4fa8c89df7c4c861fc52ac.zip |
Fix bugs in data import from Ferdium app (#82)
* Fixed misspelled field names
* Fixed broken tests
* Ensure service.settings and workspace.data are not JSON encoded twice
* Accept both snake_case and camelCase input files
* More tests for JSON fields
* Add filename to assertion messages
7 files changed, 261 insertions, 240 deletions
diff --git a/app/Controllers/Http/Dashboard/TransferController.ts b/app/Controllers/Http/Dashboard/TransferController.ts index a005c1b..b113e50 100644 --- a/app/Controllers/Http/Dashboard/TransferController.ts +++ b/app/Controllers/Http/Dashboard/TransferController.ts | |||
@@ -68,12 +68,16 @@ export default class TransferController { | |||
68 | userId: auth.user?.id, | 68 | userId: auth.user?.id, |
69 | serviceId, | 69 | serviceId, |
70 | name: service.name, | 70 | name: service.name, |
71 | recipeId: service.recipe_id, | 71 | recipeId: service.recipe_id || service.recipeId, |
72 | settings: JSON.stringify(service.settings), | 72 | settings: |
73 | typeof service.settings === 'string' | ||
74 | ? service.settings | ||
75 | : JSON.stringify(service.settings), | ||
73 | }); | 76 | }); |
74 | 77 | ||
75 | // @ts-expect-error Element implicitly has an 'any' type because expression of type 'any' can't be used to index type '{}' | 78 | // @ts-expect-error Element implicitly has an 'any' type because expression of type 'any' can't be used to index type '{}' |
76 | serviceIdTranslation[service.service_id] = serviceId; | 79 | serviceIdTranslation[service.service_id || service.serviceId] = |
80 | serviceId; | ||
77 | } | 81 | } |
78 | } catch (error) { | 82 | } catch (error) { |
79 | // eslint-disable-next-line no-console | 83 | // eslint-disable-next-line no-console |
@@ -109,7 +113,10 @@ export default class TransferController { | |||
109 | name: workspace.name, | 113 | name: workspace.name, |
110 | order: workspace.order, | 114 | order: workspace.order, |
111 | services: JSON.stringify(services), | 115 | services: JSON.stringify(services), |
112 | data: JSON.stringify(workspace.data), | 116 | data: |
117 | typeof workspace.data === 'string' | ||
118 | ? workspace.data | ||
119 | : JSON.stringify(workspace.data), | ||
113 | }); | 120 | }); |
114 | } | 121 | } |
115 | } catch (error) { | 122 | } catch (error) { |
diff --git a/tests/functional/dashboard/import-stubs/services-only.ferdium-data b/tests/functional/dashboard/import-stubs/services-only.ferdium-data index d95f3ef..cd3f381 100644 --- a/tests/functional/dashboard/import-stubs/services-only.ferdium-data +++ b/tests/functional/dashboard/import-stubs/services-only.ferdium-data | |||
@@ -5,31 +5,31 @@ | |||
5 | "services": [ | 5 | "services": [ |
6 | { | 6 | { |
7 | "id": 5641, | 7 | "id": 5641, |
8 | "userId": "1234", | 8 | "user_id": "1234", |
9 | "serviceId": "d6901fff-ec44-4251-93de-d7103ed9c44b", | 9 | "service_id": "d6901fff-ec44-4251-93de-d7103ed9c44b", |
10 | "name": "random-service-1", | 10 | "name": "random-service-1", |
11 | "recipeId": "random-service-1", | 11 | "recipe_id": "random-service-1", |
12 | "settings": "{}", | 12 | "settings": {"isEnabled": true}, |
13 | "created_at": "2022-06-21 08:29:13", | 13 | "created_at": "2022-06-21 08:29:13", |
14 | "updated_at": "2022-07-19 15:47:16" | 14 | "updated_at": "2022-07-19 15:47:16" |
15 | }, | 15 | }, |
16 | { | 16 | { |
17 | "id": 2134, | 17 | "id": 2134, |
18 | "userId": "1234", | 18 | "user_id": "1234", |
19 | "serviceId": "d6901fff-ec44-4251-93de-d7103ed9c44b", | 19 | "service_id": "d6901fff-ec44-4251-93de-d7103ed9c44b", |
20 | "name": "random-service-1", | 20 | "name": "random-service-1", |
21 | "recipeId": "random-service-1", | 21 | "recipe_id": "random-service-1", |
22 | "settings": "{}", | 22 | "settings": {"isEnabled": true}, |
23 | "created_at": "2022-06-21 08:29:13", | 23 | "created_at": "2022-06-21 08:29:13", |
24 | "updated_at": "2022-07-19 15:47:16" | 24 | "updated_at": "2022-07-19 15:47:16" |
25 | }, | 25 | }, |
26 | { | 26 | { |
27 | "id": 5343, | 27 | "id": 5343, |
28 | "userId": "1234", | 28 | "user_id": "1234", |
29 | "serviceId": "d6901fff-ec44-4251-93de-d7103ed9c44b", | 29 | "service_id": "d6901fff-ec44-4251-93de-d7103ed9c44b", |
30 | "name": "random-service-1", | 30 | "name": "random-service-1", |
31 | "recipeId": "random-service-1", | 31 | "recipe_id": "random-service-1", |
32 | "settings": "{}", | 32 | "settings": {"isEnabled": true}, |
33 | "created_at": "2022-06-21 08:29:13", | 33 | "created_at": "2022-06-21 08:29:13", |
34 | "updated_at": "2022-07-19 15:47:16" | 34 | "updated_at": "2022-07-19 15:47:16" |
35 | } | 35 | } |
diff --git a/tests/functional/dashboard/import-stubs/services-only.json b/tests/functional/dashboard/import-stubs/services-only.json index d95f3ef..c4a9147 100644 --- a/tests/functional/dashboard/import-stubs/services-only.json +++ b/tests/functional/dashboard/import-stubs/services-only.json | |||
@@ -9,7 +9,7 @@ | |||
9 | "serviceId": "d6901fff-ec44-4251-93de-d7103ed9c44b", | 9 | "serviceId": "d6901fff-ec44-4251-93de-d7103ed9c44b", |
10 | "name": "random-service-1", | 10 | "name": "random-service-1", |
11 | "recipeId": "random-service-1", | 11 | "recipeId": "random-service-1", |
12 | "settings": "{}", | 12 | "settings": "{\"isEnabled\":true}", |
13 | "created_at": "2022-06-21 08:29:13", | 13 | "created_at": "2022-06-21 08:29:13", |
14 | "updated_at": "2022-07-19 15:47:16" | 14 | "updated_at": "2022-07-19 15:47:16" |
15 | }, | 15 | }, |
@@ -19,7 +19,7 @@ | |||
19 | "serviceId": "d6901fff-ec44-4251-93de-d7103ed9c44b", | 19 | "serviceId": "d6901fff-ec44-4251-93de-d7103ed9c44b", |
20 | "name": "random-service-1", | 20 | "name": "random-service-1", |
21 | "recipeId": "random-service-1", | 21 | "recipeId": "random-service-1", |
22 | "settings": "{}", | 22 | "settings": "{\"isEnabled\":true}", |
23 | "created_at": "2022-06-21 08:29:13", | 23 | "created_at": "2022-06-21 08:29:13", |
24 | "updated_at": "2022-07-19 15:47:16" | 24 | "updated_at": "2022-07-19 15:47:16" |
25 | }, | 25 | }, |
@@ -29,7 +29,7 @@ | |||
29 | "serviceId": "d6901fff-ec44-4251-93de-d7103ed9c44b", | 29 | "serviceId": "d6901fff-ec44-4251-93de-d7103ed9c44b", |
30 | "name": "random-service-1", | 30 | "name": "random-service-1", |
31 | "recipeId": "random-service-1", | 31 | "recipeId": "random-service-1", |
32 | "settings": "{}", | 32 | "settings": "{\"isEnabled\":true}", |
33 | "created_at": "2022-06-21 08:29:13", | 33 | "created_at": "2022-06-21 08:29:13", |
34 | "updated_at": "2022-07-19 15:47:16" | 34 | "updated_at": "2022-07-19 15:47:16" |
35 | } | 35 | } |
diff --git a/tests/functional/dashboard/import-stubs/services-workspaces.ferdium-data b/tests/functional/dashboard/import-stubs/services-workspaces.ferdium-data index e999c0d..1d90f4a 100644 --- a/tests/functional/dashboard/import-stubs/services-workspaces.ferdium-data +++ b/tests/functional/dashboard/import-stubs/services-workspaces.ferdium-data | |||
@@ -5,31 +5,31 @@ | |||
5 | "services": [ | 5 | "services": [ |
6 | { | 6 | { |
7 | "id": 5641, | 7 | "id": 5641, |
8 | "userId": "1234", | 8 | "user_id": "1234", |
9 | "serviceId": "d6901fff-ec44-4251-93de-d7103ed9c44b", | 9 | "service_id": "d6901fff-ec44-4251-93de-d7103ed9c44b", |
10 | "name": "random-service-1", | 10 | "name": "random-service-1", |
11 | "recipeId": "random-service-1", | 11 | "recipe_id": "random-service-1", |
12 | "settings": "{}", | 12 | "settings": {"isEnabled": true}, |
13 | "created_at": "2022-06-21 08:29:13", | 13 | "created_at": "2022-06-21 08:29:13", |
14 | "updated_at": "2022-07-19 15:47:16" | 14 | "updated_at": "2022-07-19 15:47:16" |
15 | }, | 15 | }, |
16 | { | 16 | { |
17 | "id": 2134, | 17 | "id": 2134, |
18 | "userId": "1234", | 18 | "user_id": "1234", |
19 | "serviceId": "79769de5-a998-4af1-b7d0-89956a15b0ed", | 19 | "service_id": "79769de5-a998-4af1-b7d0-89956a15b0ed", |
20 | "name": "random-service-2", | 20 | "name": "random-service-2", |
21 | "recipeId": "random-service-2", | 21 | "recipe_id": "random-service-2", |
22 | "settings": "{}", | 22 | "settings": {"isEnabled": true}, |
23 | "created_at": "2022-06-21 08:29:13", | 23 | "created_at": "2022-06-21 08:29:13", |
24 | "updated_at": "2022-07-19 15:47:16" | 24 | "updated_at": "2022-07-19 15:47:16" |
25 | }, | 25 | }, |
26 | { | 26 | { |
27 | "id": 5343, | 27 | "id": 5343, |
28 | "userId": "1234", | 28 | "user_id": "1234", |
29 | "serviceId": "0ac973f8-40dc-4760-b2c2-55e1d2943747", | 29 | "service_id": "0ac973f8-40dc-4760-b2c2-55e1d2943747", |
30 | "name": "random-service-3", | 30 | "name": "random-service-3", |
31 | "recipeId": "random-service-2", | 31 | "recipe_id": "random-service-2", |
32 | "settings": "{}", | 32 | "settings": {"isEnabled": true}, |
33 | "created_at": "2022-06-21 08:29:13", | 33 | "created_at": "2022-06-21 08:29:13", |
34 | "updated_at": "2022-07-19 15:47:16" | 34 | "updated_at": "2022-07-19 15:47:16" |
35 | } | 35 | } |
@@ -39,13 +39,13 @@ | |||
39 | "name": "workspace1", | 39 | "name": "workspace1", |
40 | "order": 0, | 40 | "order": 0, |
41 | "services": [], | 41 | "services": [], |
42 | "data": "{\"name\":\"workspace1\"}" | 42 | "data": {"name":"workspace1"} |
43 | }, | 43 | }, |
44 | { | 44 | { |
45 | "name": "workspace2", | 45 | "name": "workspace2", |
46 | "order": 0, | 46 | "order": 0, |
47 | "services": ["d6901fff-ec44-4251-93de-d7103ed9c44b", "79769de5-a998-4af1-b7d0-89956a15b0ed"], | 47 | "services": ["d6901fff-ec44-4251-93de-d7103ed9c44b", "79769de5-a998-4af1-b7d0-89956a15b0ed"], |
48 | "data": "{\"name\":\"workspace2\"}" | 48 | "data": {"name":"workspace2"} |
49 | }, | 49 | }, |
50 | { | 50 | { |
51 | "name": "workspace3", | 51 | "name": "workspace3", |
@@ -55,7 +55,7 @@ | |||
55 | "79769de5-a998-4af1-b7d0-89956a15b0ed", | 55 | "79769de5-a998-4af1-b7d0-89956a15b0ed", |
56 | "0ac973f8-40dc-4760-b2c2-55e1d2943747" | 56 | "0ac973f8-40dc-4760-b2c2-55e1d2943747" |
57 | ], | 57 | ], |
58 | "data": "{\"name\":\"workspace3\"}" | 58 | "data": {"name":"workspace3"} |
59 | } | 59 | } |
60 | ] | 60 | ] |
61 | } | 61 | } |
diff --git a/tests/functional/dashboard/import-stubs/services-workspaces.json b/tests/functional/dashboard/import-stubs/services-workspaces.json index 54c6889..139b32c 100644 --- a/tests/functional/dashboard/import-stubs/services-workspaces.json +++ b/tests/functional/dashboard/import-stubs/services-workspaces.json | |||
@@ -9,7 +9,7 @@ | |||
9 | "serviceId": "d6901fff-ec44-4251-93de-d7103ed9c44b", | 9 | "serviceId": "d6901fff-ec44-4251-93de-d7103ed9c44b", |
10 | "name": "random-service-1", | 10 | "name": "random-service-1", |
11 | "recipeId": "random-service-1", | 11 | "recipeId": "random-service-1", |
12 | "settings": "{}", | 12 | "settings": "{\"isEnabled\":true}", |
13 | "created_at": "2022-06-21 08:29:13", | 13 | "created_at": "2022-06-21 08:29:13", |
14 | "updated_at": "2022-07-19 15:47:16" | 14 | "updated_at": "2022-07-19 15:47:16" |
15 | }, | 15 | }, |
@@ -19,7 +19,7 @@ | |||
19 | "serviceId": "79769de5-a998-4af1-b7d0-89956a15b0ed", | 19 | "serviceId": "79769de5-a998-4af1-b7d0-89956a15b0ed", |
20 | "name": "random-service-2", | 20 | "name": "random-service-2", |
21 | "recipeId": "random-service-2", | 21 | "recipeId": "random-service-2", |
22 | "settings": "{}", | 22 | "settings": "{\"isEnabled\":true}", |
23 | "created_at": "2022-06-21 08:29:13", | 23 | "created_at": "2022-06-21 08:29:13", |
24 | "updated_at": "2022-07-19 15:47:16" | 24 | "updated_at": "2022-07-19 15:47:16" |
25 | }, | 25 | }, |
@@ -29,7 +29,7 @@ | |||
29 | "serviceId": "0ac973f8-40dc-4760-b2c2-55e1d2943747", | 29 | "serviceId": "0ac973f8-40dc-4760-b2c2-55e1d2943747", |
30 | "name": "random-service-3", | 30 | "name": "random-service-3", |
31 | "recipeId": "random-service-3", | 31 | "recipeId": "random-service-3", |
32 | "settings": "{}", | 32 | "settings": "{\"isEnabled\":true}", |
33 | "created_at": "2022-06-21 08:29:13", | 33 | "created_at": "2022-06-21 08:29:13", |
34 | "updated_at": "2022-07-19 15:47:16" | 34 | "updated_at": "2022-07-19 15:47:16" |
35 | } | 35 | } |
diff --git a/tests/functional/dashboard/import-stubs/workspaces-only.ferdium-data b/tests/functional/dashboard/import-stubs/workspaces-only.ferdium-data index 13ea9c6..cf0fca0 100644 --- a/tests/functional/dashboard/import-stubs/workspaces-only.ferdium-data +++ b/tests/functional/dashboard/import-stubs/workspaces-only.ferdium-data | |||
@@ -8,19 +8,19 @@ | |||
8 | "name": "workspace1", | 8 | "name": "workspace1", |
9 | "order": 0, | 9 | "order": 0, |
10 | "services": [], | 10 | "services": [], |
11 | "data": "{\"name\":\"workspace1\"}" | 11 | "data": {"name":"workspace1"} |
12 | }, | 12 | }, |
13 | { | 13 | { |
14 | "name": "workspace2", | 14 | "name": "workspace2", |
15 | "order": 0, | 15 | "order": 0, |
16 | "services": [], | 16 | "services": [], |
17 | "data": "{\"name\":\"workspace2\"}" | 17 | "data": {"name":"workspace2"} |
18 | }, | 18 | }, |
19 | { | 19 | { |
20 | "name": "workspace3", | 20 | "name": "workspace3", |
21 | "order": 0, | 21 | "order": 0, |
22 | "services": [], | 22 | "services": [], |
23 | "data": "{\"name\":\"workspace3\"}" | 23 | "data": {"name":"workspace3"} |
24 | } | 24 | } |
25 | ] | 25 | ] |
26 | } | 26 | } |
diff --git a/tests/functional/dashboard/transfer.spec.ts b/tests/functional/dashboard/transfer.spec.ts index 0f8ee31..e40fca2 100644 --- a/tests/functional/dashboard/transfer.spec.ts +++ b/tests/functional/dashboard/transfer.spec.ts | |||
@@ -1,4 +1,5 @@ | |||
1 | import { test } from '@japa/runner'; | 1 | import { test } from '@japa/runner'; |
2 | import { readFileSync } from 'node:fs'; | ||
2 | import UserFactory from 'Database/factories/UserFactory'; | 3 | import UserFactory from 'Database/factories/UserFactory'; |
3 | 4 | ||
4 | test.group('Dashboard / Transfer page', () => { | 5 | test.group('Dashboard / Transfer page', () => { |
@@ -19,204 +20,217 @@ test.group('Dashboard / Transfer page', () => { | |||
19 | response.assertStatus(200); | 20 | response.assertStatus(200); |
20 | }); | 21 | }); |
21 | 22 | ||
22 | // TODO: Fix the following tests | 23 | test('returns a validation error when not uploading a file', async ({ |
23 | 24 | client, | |
24 | // test('returns a validation error when not uploading a file', async ({ | 25 | }) => { |
25 | // client, | 26 | const user = await UserFactory.create(); |
26 | // }) => { | 27 | const response = await client.post('/user/transfer').loginAs(user); |
27 | // const user = await UserFactory.create(); | 28 | |
28 | // const response = await client.put('/user/transfer').loginAs(user); | 29 | response.assertTextIncludes('Invalid Ferdium account file'); |
29 | 30 | }); | |
30 | // response.assertTextIncludes('File missing'); | 31 | |
31 | // }); | 32 | test('returns a validation error when trying to use anything but json', async ({ |
32 | 33 | client, | |
33 | // test('returns a validation error when trying to use anything but json', async ({ | 34 | }) => { |
34 | // client, | 35 | const user = await UserFactory.create(); |
35 | // }) => { | 36 | const response = await client |
36 | // const user = await UserFactory.create(); | 37 | .post('/user/transfer') |
37 | // const response = await client | 38 | .loginAs(user) |
38 | // .put('/user/transfer') | 39 | .field( |
39 | // .loginAs(user) | 40 | 'file', |
40 | // .file('file', 'tests/functional/dashboard/import-stubs/random-file.txt', { | 41 | readFileSync('tests/functional/dashboard/import-stubs/random-file.txt'), |
41 | // filename: 'random-file.txt', | 42 | ); |
42 | // }); | 43 | |
43 | 44 | response.assertTextIncludes('Invalid Ferdium account file'); | |
44 | // response.assertTextIncludes('File missing'); | 45 | }); |
45 | // }); | 46 | |
46 | 47 | test('returns a validation error when trying to use anything valid json', async ({ | |
47 | // test('returns a validation error when trying to use anything valid json', async ({ | 48 | client, |
48 | // client, | 49 | }) => { |
49 | // }) => { | 50 | const user = await UserFactory.create(); |
50 | // const user = await UserFactory.create(); | 51 | const response = await client |
51 | // const response = await client | 52 | .post('/user/transfer') |
52 | // .put('/user/transfer') | 53 | .loginAs(user) |
53 | // .loginAs(user) | 54 | .field( |
54 | // .file('file', 'tests/functional/dashboard/import-stubs/invalid.json', { | 55 | 'file', |
55 | // filename: 'invalid.json', | 56 | readFileSync('tests/functional/dashboard/import-stubs/invalid.json'), |
56 | // }); | 57 | ); |
57 | 58 | ||
58 | // response.assertTextIncludes('Invalid Ferdium account file'); | 59 | response.assertTextIncludes('Invalid Ferdium account file'); |
59 | // }); | 60 | }); |
60 | 61 | ||
61 | // test('returns a validation error when trying to use a json file with no ferdium structure', async ({ | 62 | test('returns a validation error when trying to use a json file with no ferdium structure', async ({ |
62 | // client, | 63 | client, |
63 | // }) => { | 64 | }) => { |
64 | // const user = await UserFactory.create(); | 65 | const user = await UserFactory.create(); |
65 | // const response = await client | 66 | const response = await client |
66 | // .put('/user/transfer') | 67 | .post('/user/transfer') |
67 | // .loginAs(user) | 68 | .loginAs(user) |
68 | // .file( | 69 | .field( |
69 | // 'file', | 70 | 'file', |
70 | // 'tests/functional/dashboard/import-stubs/valid-no-data.json', | 71 | readFileSync( |
71 | // { | 72 | 'tests/functional/dashboard/import-stubs/valid-no-data.json', |
72 | // filename: 'valid-no-data.json', | 73 | ), |
73 | // }, | 74 | ); |
74 | // ); | 75 | |
75 | 76 | response.assertTextIncludes('Invalid Ferdium account file'); | |
76 | // response.assertTextIncludes('Invalid Ferdium account file (2)'); | 77 | }); |
77 | // }); | 78 | |
78 | 79 | test('correctly transfers data from json/ferdi-data and ferdium-data file with only workspaces', async ({ | |
79 | // test('correctly transfers data from json/ferdi-data and ferdium-data file with only workspaces', async ({ | 80 | client, |
80 | // client, | 81 | assert, |
81 | // assert, | 82 | }) => { |
82 | // }) => { | 83 | // Repeat for all 3 file extension |
83 | // // Repeat for all 3 file extension | 84 | const files = [ |
84 | // const files = [ | 85 | 'workspaces-only.json', |
85 | // 'workspaces-only.json', | 86 | 'workspaces-only.ferdi-data', |
86 | // 'workspaces-only.ferdi-data', | 87 | 'workspaces-only.ferdium-data', |
87 | // 'workspaces-only.ferdium-data', | 88 | ]; |
88 | // ]; | 89 | |
89 | 90 | for (const file of files) { | |
90 | // for (const file of files) { | 91 | // eslint-disable-next-line no-await-in-loop |
91 | // // eslint-disable-next-line no-await-in-loop | 92 | const user = await UserFactory.create(); |
92 | // const user = await UserFactory.create(); | 93 | // eslint-disable-next-line no-await-in-loop |
93 | // // eslint-disable-next-line no-await-in-loop | 94 | const response = await client |
94 | // const response = await client | 95 | .post('/user/transfer') |
95 | // .put('/user/transfer') | 96 | .loginAs(user) |
96 | // .loginAs(user) | 97 | .field( |
97 | // .file('file', `tests/functional/dashboard/import-stubs/${file}`, { | 98 | 'file', |
98 | // filename: file, | 99 | readFileSync(`tests/functional/dashboard/import-stubs/${file}`), |
99 | // }); | 100 | ); |
100 | 101 | ||
101 | // response.assertTextIncludes( | 102 | response.assertTextIncludes( |
102 | // 'Your account has been imported, you can now login as usual!', | 103 | 'Your account has been imported, you can now login as usual!', |
103 | // ); | 104 | ); |
104 | // // eslint-disable-next-line no-await-in-loop | 105 | // eslint-disable-next-line no-await-in-loop |
105 | // await user.refresh(); | 106 | await user.refresh(); |
106 | 107 | ||
107 | // // eslint-disable-next-line no-await-in-loop | 108 | // eslint-disable-next-line no-await-in-loop |
108 | // const workspacesForUser = await user.related('workspaces').query(); | 109 | const workspacesForUser = await user.related('workspaces').query(); |
109 | // assert.equal(workspacesForUser.length, 3); | 110 | assert.equal(workspacesForUser.length, 3, file); |
110 | // } | 111 | |
111 | // }); | 112 | // ensure not JSON encoded twice |
112 | 113 | for (const workspace of workspacesForUser) { | |
113 | // test('correctly transfers data from json/ferdi-data and ferdium-data file with only services', async ({ | 114 | assert.isNull(workspace.data.match(/\\"/), file); |
114 | // client, | 115 | } |
115 | // assert, | 116 | } |
116 | // }) => { | 117 | }); |
117 | // // Repeat for all 3 file extension | 118 | |
118 | // const files = [ | 119 | test('correctly transfers data from json/ferdi-data and ferdium-data file with only services', async ({ |
119 | // 'services-only.json', | 120 | client, |
120 | // 'services-only.ferdi-data', | 121 | assert, |
121 | // 'services-only.ferdium-data', | 122 | }) => { |
122 | // ]; | 123 | // Repeat for all 3 file extension |
123 | 124 | const files = [ | |
124 | // for (const file of files) { | 125 | 'services-only.json', |
125 | // // eslint-disable-next-line no-await-in-loop | 126 | 'services-only.ferdi-data', |
126 | // const user = await UserFactory.create(); | 127 | 'services-only.ferdium-data', |
127 | // // eslint-disable-next-line no-await-in-loop | 128 | ]; |
128 | // const response = await client | 129 | |
129 | // .put('/user/transfer') | 130 | for (const file of files) { |
130 | // .loginAs(user) | 131 | // eslint-disable-next-line no-await-in-loop |
131 | // .file('file', `tests/functional/dashboard/import-stubs/${file}`, { | 132 | const user = await UserFactory.create(); |
132 | // filename: file, | 133 | // eslint-disable-next-line no-await-in-loop |
133 | // }); | 134 | const response = await client |
134 | 135 | .post('/user/transfer') | |
135 | // response.assertTextIncludes( | 136 | .loginAs(user) |
136 | // 'Your account has been imported, you can now login as usual!', | 137 | .field( |
137 | // ); | 138 | 'file', |
138 | // // eslint-disable-next-line no-await-in-loop | 139 | readFileSync(`tests/functional/dashboard/import-stubs/${file}`), |
139 | // await user.refresh(); | 140 | ); |
140 | 141 | ||
141 | // // eslint-disable-next-line no-await-in-loop | 142 | response.assertTextIncludes( |
142 | // const servicesForUser = await user.related('services').query(); | 143 | 'Your account has been imported, you can now login as usual!', |
143 | // assert.equal(servicesForUser.length, 3); | 144 | ); |
144 | // } | 145 | // eslint-disable-next-line no-await-in-loop |
145 | // }); | 146 | await user.refresh(); |
146 | 147 | ||
147 | // test('correctly transfers data from json/ferdi-data and ferdium-data file with workspaces and services', async ({ | 148 | // eslint-disable-next-line no-await-in-loop |
148 | // client, | 149 | const servicesForUser = await user.related('services').query(); |
149 | // assert, | 150 | assert.equal(servicesForUser.length, 3, file); |
150 | // }) => { | 151 | |
151 | // // Repeat for all 3 file extension | 152 | // ensure not JSON encoded twice |
152 | // const files = [ | 153 | for (const service of servicesForUser) { |
153 | // 'services-workspaces.json', | 154 | assert.isNull(service.settings.match(/\\"/), file); |
154 | // 'services-workspaces.ferdi-data', | 155 | } |
155 | // 'services-workspaces.ferdium-data', | 156 | } |
156 | // ]; | 157 | }); |
157 | 158 | ||
158 | // for (const file of files) { | 159 | test('correctly transfers data from json/ferdi-data and ferdium-data file with workspaces and services', async ({ |
159 | // // eslint-disable-next-line no-await-in-loop | 160 | client, |
160 | // const user = await UserFactory.create(); | 161 | assert, |
161 | // // eslint-disable-next-line no-await-in-loop | 162 | }) => { |
162 | // const response = await client | 163 | // Repeat for all 3 file extension |
163 | // .put('/user/transfer') | 164 | const files = [ |
164 | // .loginAs(user) | 165 | 'services-workspaces.json', |
165 | // .file('file', `tests/functional/dashboard/import-stubs/${file}`, { | 166 | 'services-workspaces.ferdi-data', |
166 | // filename: file, | 167 | 'services-workspaces.ferdium-data', |
167 | // }); | 168 | ]; |
168 | 169 | ||
169 | // response.assertTextIncludes( | 170 | for (const file of files) { |
170 | // 'Your account has been imported, you can now login as usual!', | 171 | // eslint-disable-next-line no-await-in-loop |
171 | // ); | 172 | const user = await UserFactory.create(); |
172 | // // eslint-disable-next-line no-await-in-loop | 173 | // eslint-disable-next-line no-await-in-loop |
173 | // await user.refresh(); | 174 | const response = await client |
174 | 175 | .post('/user/transfer') | |
175 | // // eslint-disable-next-line no-await-in-loop | 176 | .loginAs(user) |
176 | // const servicesForUser = await user.related('services').query(); | 177 | .field( |
177 | // // eslint-disable-next-line no-await-in-loop | 178 | 'file', |
178 | // const workspacesForUser = await user.related('workspaces').query(); | 179 | readFileSync(`tests/functional/dashboard/import-stubs/${file}`), |
179 | // assert.equal(servicesForUser.length, 3); | 180 | ); |
180 | // assert.equal(workspacesForUser.length, 3); | 181 | |
181 | 182 | response.assertTextIncludes( | |
182 | // const firstServiceUuid = servicesForUser.find( | 183 | 'Your account has been imported, you can now login as usual!', |
183 | // s => s.name === 'random-service-1', | 184 | ); |
184 | // )?.serviceId; | 185 | // eslint-disable-next-line no-await-in-loop |
185 | // const secondServiceUuid = servicesForUser.find( | 186 | await user.refresh(); |
186 | // s => s.name === 'random-service-2', | 187 | |
187 | // )?.serviceId; | 188 | // eslint-disable-next-line no-await-in-loop |
188 | // const thirdServiceUUid = servicesForUser.find( | 189 | const servicesForUser = await user.related('services').query(); |
189 | // s => s.name === 'random-service-3', | 190 | // eslint-disable-next-line no-await-in-loop |
190 | // )?.serviceId; | 191 | const workspacesForUser = await user.related('workspaces').query(); |
191 | 192 | assert.equal(servicesForUser.length, 3, file); | |
192 | // // Assert the first workspace to not have any services | 193 | assert.equal(workspacesForUser.length, 3, file); |
193 | // const firstWorkspace = workspacesForUser.find( | 194 | |
194 | // w => w.name === 'workspace1', | 195 | const firstServiceUuid = servicesForUser.find( |
195 | // ); | 196 | s => s.name === 'random-service-1', |
196 | // if (firstWorkspace?.services) { | 197 | )?.serviceId; |
197 | // assert.empty(JSON.parse(firstWorkspace.services)); | 198 | const secondServiceUuid = servicesForUser.find( |
198 | // } | 199 | s => s.name === 'random-service-2', |
199 | 200 | )?.serviceId; | |
200 | // const secondWorkspace = workspacesForUser.find( | 201 | const thirdServiceUUid = servicesForUser.find( |
201 | // w => w.name === 'workspace2', | 202 | s => s.name === 'random-service-3', |
202 | // ); | 203 | )?.serviceId; |
203 | // if (secondWorkspace?.services) { | 204 | |
204 | // assert.deepEqual(JSON.parse(secondWorkspace.services), [ | 205 | // Assert the first workspace to not have any services |
205 | // firstServiceUuid, | 206 | const firstWorkspace = workspacesForUser.find( |
206 | // secondServiceUuid, | 207 | w => w.name === 'workspace1', |
207 | // ]); | 208 | ); |
208 | // } | 209 | if (firstWorkspace?.services) { |
209 | 210 | assert.empty(JSON.parse(firstWorkspace.services), file); | |
210 | // const thirdWorkspace = workspacesForUser.find( | 211 | } |
211 | // w => w.name === 'workspace3', | 212 | |
212 | // ); | 213 | const secondWorkspace = workspacesForUser.find( |
213 | // if (thirdWorkspace?.services) { | 214 | w => w.name === 'workspace2', |
214 | // assert.deepEqual(JSON.parse(thirdWorkspace.services), [ | 215 | ); |
215 | // firstServiceUuid, | 216 | if (secondWorkspace?.services) { |
216 | // secondServiceUuid, | 217 | assert.deepEqual( |
217 | // thirdServiceUUid, | 218 | JSON.parse(secondWorkspace.services), |
218 | // ]); | 219 | [firstServiceUuid, secondServiceUuid], |
219 | // } | 220 | file, |
220 | // } | 221 | ); |
221 | // }); | 222 | } |
223 | |||
224 | const thirdWorkspace = workspacesForUser.find( | ||
225 | w => w.name === 'workspace3', | ||
226 | ); | ||
227 | if (thirdWorkspace?.services) { | ||
228 | assert.deepEqual( | ||
229 | JSON.parse(thirdWorkspace.services), | ||
230 | [firstServiceUuid, secondServiceUuid, thirdServiceUUid], | ||
231 | file, | ||
232 | ); | ||
233 | } | ||
234 | } | ||
235 | }); | ||
222 | }); | 236 | }); |