aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLibravatar 0xCmdrKeen <98132670+0xCmdrKeen@users.noreply.github.com>2023-10-17 11:58:51 -0700
committerLibravatar GitHub <noreply@github.com>2023-10-17 19:58:51 +0100
commita3b01c2dd24ccf1d2a4fa8c89df7c4c861fc52ac (patch)
tree7225b4ace5f8919f04b442c0b39146459645d239
parentBump actions/checkout from 3 to 4 (#80) (diff)
downloadferdium-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
-rw-r--r--app/Controllers/Http/Dashboard/TransferController.ts15
-rw-r--r--tests/functional/dashboard/import-stubs/services-only.ferdium-data24
-rw-r--r--tests/functional/dashboard/import-stubs/services-only.json6
-rw-r--r--tests/functional/dashboard/import-stubs/services-workspaces.ferdium-data30
-rw-r--r--tests/functional/dashboard/import-stubs/services-workspaces.json6
-rw-r--r--tests/functional/dashboard/import-stubs/workspaces-only.ferdium-data6
-rw-r--r--tests/functional/dashboard/transfer.spec.ts414
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 @@
1import { test } from '@japa/runner'; 1import { test } from '@japa/runner';
2import { readFileSync } from 'node:fs';
2import UserFactory from 'Database/factories/UserFactory'; 3import UserFactory from 'Database/factories/UserFactory';
3 4
4test.group('Dashboard / Transfer page', () => { 5test.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});