@appsemble/cli 0.30.1 → 0.30.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +4 -4
- package/commands/{cleanupDemoUsers.d.ts → cleanupDemoAppMembers.d.ts} +2 -2
- package/commands/{cleanupDemoUsers.js → cleanupDemoAppMembers.js} +5 -5
- package/index.js +2 -2
- package/lib/app.test.js +1265 -1264
- package/lib/asset.test.js +68 -67
- package/lib/block.test.js +143 -142
- package/lib/config.test.js +205 -203
- package/lib/group.test.js +543 -542
- package/lib/organization.test.js +188 -187
- package/lib/resource.test.js +321 -320
- package/lib/serverImport.d.ts +1 -1
- package/package.json +8 -7
- package/templates/apps/empty/app-definition.yaml +2 -2
- package/templates/blocks/mini-jsx/package.json +1 -1
- package/templates/blocks/preact/package.json +2 -2
- package/templates/blocks/vanilla/package.json +1 -1
- package/vitest.setup.js +18 -0
package/lib/asset.test.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { resolveFixture } from '@appsemble/node-utils';
|
|
2
|
-
import { createServer, createTestUser, models, setArgv
|
|
2
|
+
import { createServer, createTestUser, models, setArgv } from '@appsemble/server';
|
|
3
3
|
import { PredefinedOrganizationRole } from '@appsemble/types';
|
|
4
4
|
import { setTestApp } from 'axios-test-instance';
|
|
5
5
|
import { afterAll, beforeAll, beforeEach, describe, expect, it, vi } from 'vitest';
|
|
@@ -11,56 +11,56 @@ let user;
|
|
|
11
11
|
let organization;
|
|
12
12
|
let testApp;
|
|
13
13
|
const { App, Asset, Organization, OrganizationMember } = models;
|
|
14
|
-
|
|
15
|
-
beforeAll(() => {
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
});
|
|
19
|
-
beforeEach(async () => {
|
|
20
|
-
vi.clearAllTimers();
|
|
21
|
-
vi.setSystemTime(0);
|
|
22
|
-
const server = await createServer();
|
|
23
|
-
testApp = await setTestApp(server);
|
|
24
|
-
initAxios({ remote: testApp.defaults.baseURL });
|
|
25
|
-
user = await createTestUser();
|
|
26
|
-
organization = await Organization.create({
|
|
27
|
-
id: 'testorganization',
|
|
28
|
-
name: 'Test Organization',
|
|
29
|
-
});
|
|
30
|
-
await OrganizationMember.create({
|
|
31
|
-
OrganizationId: organization.id,
|
|
32
|
-
UserId: user.id,
|
|
33
|
-
role: PredefinedOrganizationRole.Owner,
|
|
14
|
+
describe('asset', () => {
|
|
15
|
+
beforeAll(() => {
|
|
16
|
+
vi.useFakeTimers();
|
|
17
|
+
setArgv(argv);
|
|
34
18
|
});
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
vapidPublicKey: 'a',
|
|
46
|
-
vapidPrivateKey: 'b',
|
|
47
|
-
visibility: 'public',
|
|
48
|
-
OrganizationId: organization.id,
|
|
19
|
+
beforeEach(async () => {
|
|
20
|
+
vi.clearAllTimers();
|
|
21
|
+
vi.setSystemTime(0);
|
|
22
|
+
const server = await createServer();
|
|
23
|
+
testApp = await setTestApp(server);
|
|
24
|
+
initAxios({ remote: testApp.defaults.baseURL });
|
|
25
|
+
user = await createTestUser();
|
|
26
|
+
organization = await Organization.create({
|
|
27
|
+
id: 'testorganization',
|
|
28
|
+
name: 'Test Organization',
|
|
49
29
|
});
|
|
50
|
-
await
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
name: 'test',
|
|
55
|
-
path: resolveFixture('apps/tux.png'),
|
|
56
|
-
remote: testApp.defaults.baseURL,
|
|
57
|
-
seed: false,
|
|
30
|
+
await OrganizationMember.create({
|
|
31
|
+
OrganizationId: organization.id,
|
|
32
|
+
UserId: user.id,
|
|
33
|
+
role: PredefinedOrganizationRole.Owner,
|
|
58
34
|
});
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
35
|
+
await Organization.create({ id: 'appsemble', name: 'Appsemble' });
|
|
36
|
+
});
|
|
37
|
+
afterAll(() => {
|
|
38
|
+
vi.useRealTimers();
|
|
39
|
+
});
|
|
40
|
+
describe('publishAsset', () => {
|
|
41
|
+
it('should publish an asset from a file', async () => {
|
|
42
|
+
const app = await App.create({
|
|
43
|
+
path: 'test-app',
|
|
44
|
+
definition: { name: 'Test App', defaultPage: 'Test Page' },
|
|
45
|
+
vapidPublicKey: 'a',
|
|
46
|
+
vapidPrivateKey: 'b',
|
|
47
|
+
visibility: 'public',
|
|
48
|
+
OrganizationId: organization.id,
|
|
49
|
+
});
|
|
50
|
+
await authorizeCLI('assets:write', testApp);
|
|
51
|
+
await publishAsset({
|
|
52
|
+
appId: app.id,
|
|
53
|
+
clonable: false,
|
|
54
|
+
name: 'test',
|
|
55
|
+
path: resolveFixture('apps/tux.png'),
|
|
56
|
+
remote: testApp.defaults.baseURL,
|
|
57
|
+
seed: false,
|
|
58
|
+
});
|
|
59
|
+
const asset = await Asset.findOne();
|
|
60
|
+
expect(asset.dataValues).toMatchInlineSnapshot({
|
|
61
|
+
id: expect.any(String),
|
|
62
|
+
data: expect.any(Buffer),
|
|
63
|
+
}, `
|
|
64
64
|
{
|
|
65
65
|
"AppId": 1,
|
|
66
66
|
"AppMemberId": null,
|
|
@@ -78,26 +78,27 @@ describe('publishAsset', () => {
|
|
|
78
78
|
"updated": 1970-01-01T00:00:00.000Z,
|
|
79
79
|
}
|
|
80
80
|
`);
|
|
81
|
-
});
|
|
82
|
-
it('should throw an error if the app does not exist', async () => {
|
|
83
|
-
const app = await App.create({
|
|
84
|
-
path: 'test-app',
|
|
85
|
-
definition: { name: 'Test App', defaultPage: 'Test Page' },
|
|
86
|
-
vapidPublicKey: 'a',
|
|
87
|
-
vapidPrivateKey: 'b',
|
|
88
|
-
visibility: 'public',
|
|
89
|
-
OrganizationId: organization.id,
|
|
90
81
|
});
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
82
|
+
it('should throw an error if the app does not exist', async () => {
|
|
83
|
+
const app = await App.create({
|
|
84
|
+
path: 'test-app',
|
|
85
|
+
definition: { name: 'Test App', defaultPage: 'Test Page' },
|
|
86
|
+
vapidPublicKey: 'a',
|
|
87
|
+
vapidPrivateKey: 'b',
|
|
88
|
+
visibility: 'public',
|
|
89
|
+
OrganizationId: organization.id,
|
|
90
|
+
});
|
|
91
|
+
await app.destroy();
|
|
92
|
+
await authorizeCLI('assets:write', testApp);
|
|
93
|
+
await expect(() => publishAsset({
|
|
94
|
+
appId: app.id,
|
|
95
|
+
clonable: false,
|
|
96
|
+
name: 'test',
|
|
97
|
+
path: resolveFixture('apps/tux.png'),
|
|
98
|
+
remote: testApp.defaults.baseURL,
|
|
99
|
+
seed: false,
|
|
100
|
+
})).rejects.toThrow('Request failed with status code 404');
|
|
101
|
+
});
|
|
101
102
|
});
|
|
102
103
|
});
|
|
103
104
|
//# sourceMappingURL=asset.test.js.map
|
package/lib/block.test.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { resolveFixture } from '@appsemble/node-utils';
|
|
2
|
-
import { createServer, createTestUser, models, setArgv
|
|
2
|
+
import { createServer, createTestUser, models, setArgv } from '@appsemble/server';
|
|
3
3
|
import { PredefinedOrganizationRole } from '@appsemble/types';
|
|
4
4
|
import { setTestApp } from 'axios-test-instance';
|
|
5
5
|
import concat from 'concat-stream';
|
|
@@ -8,52 +8,52 @@ import { deleteBlock, traverseBlockThemes } from './block.js';
|
|
|
8
8
|
import { initAxios } from './initAxios.js';
|
|
9
9
|
import { makeProjectPayload } from './project.js';
|
|
10
10
|
import { authorizeCLI } from './testUtils.js';
|
|
11
|
-
useTestDatabase(import.meta);
|
|
12
11
|
const argv = { host: 'http://localhost', secret: 'test', aesSecret: 'testSecret' };
|
|
13
12
|
let testApp;
|
|
14
13
|
let user;
|
|
15
14
|
let organization;
|
|
16
15
|
const { App, AppBlockStyle, BlockVersion, Organization, OrganizationMember, Theme } = models;
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
beforeEach(async () => {
|
|
22
|
-
vi.clearAllTimers();
|
|
23
|
-
vi.setSystemTime(0);
|
|
24
|
-
const server = await createServer();
|
|
25
|
-
testApp = await setTestApp(server);
|
|
26
|
-
initAxios({ remote: testApp.defaults.baseURL });
|
|
27
|
-
user = await createTestUser();
|
|
28
|
-
organization = await Organization.create({
|
|
29
|
-
id: 'testorganization',
|
|
30
|
-
name: 'Test Organization',
|
|
31
|
-
});
|
|
32
|
-
await OrganizationMember.create({
|
|
33
|
-
OrganizationId: organization.id,
|
|
34
|
-
UserId: user.id,
|
|
35
|
-
role: PredefinedOrganizationRole.Owner,
|
|
16
|
+
describe('block', () => {
|
|
17
|
+
beforeAll(() => {
|
|
18
|
+
vi.useFakeTimers();
|
|
19
|
+
setArgv(argv);
|
|
36
20
|
});
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
name: '
|
|
47
|
-
output: 'output',
|
|
48
|
-
version: '1.2.3',
|
|
49
|
-
dir: resolveFixture('makeProjectPayload/no-icon'),
|
|
21
|
+
beforeEach(async () => {
|
|
22
|
+
vi.clearAllTimers();
|
|
23
|
+
vi.setSystemTime(0);
|
|
24
|
+
const server = await createServer();
|
|
25
|
+
testApp = await setTestApp(server);
|
|
26
|
+
initAxios({ remote: testApp.defaults.baseURL });
|
|
27
|
+
user = await createTestUser();
|
|
28
|
+
organization = await Organization.create({
|
|
29
|
+
id: 'testorganization',
|
|
30
|
+
name: 'Test Organization',
|
|
50
31
|
});
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
32
|
+
await OrganizationMember.create({
|
|
33
|
+
OrganizationId: organization.id,
|
|
34
|
+
UserId: user.id,
|
|
35
|
+
role: PredefinedOrganizationRole.Owner,
|
|
55
36
|
});
|
|
56
|
-
|
|
37
|
+
await Organization.create({ id: 'appsemble', name: 'Appsemble' });
|
|
38
|
+
});
|
|
39
|
+
afterAll(() => {
|
|
40
|
+
vi.useRealTimers();
|
|
41
|
+
});
|
|
42
|
+
describe('makeProjectPayload', () => {
|
|
43
|
+
it('should create a form-data payload', async () => {
|
|
44
|
+
const payload = await makeProjectPayload({
|
|
45
|
+
webpack: 'webpack.config',
|
|
46
|
+
name: '@org/block',
|
|
47
|
+
output: 'output',
|
|
48
|
+
version: '1.2.3',
|
|
49
|
+
dir: resolveFixture('makeProjectPayload/no-icon'),
|
|
50
|
+
});
|
|
51
|
+
const [formData] = payload;
|
|
52
|
+
const boundary = formData.getBoundary();
|
|
53
|
+
const buffer = await new Promise((resolve) => {
|
|
54
|
+
formData.pipe(concat(resolve));
|
|
55
|
+
});
|
|
56
|
+
expect(String(buffer)).toBe(`--${boundary}\r
|
|
57
57
|
Content-Disposition: form-data; name="actions"\r
|
|
58
58
|
\r
|
|
59
59
|
{"onClick":{}}\r
|
|
@@ -81,21 +81,21 @@ export const string = 'no-icon';
|
|
|
81
81
|
\r
|
|
82
82
|
--${boundary}--\r
|
|
83
83
|
`);
|
|
84
|
-
});
|
|
85
|
-
it('should include an icon if one is present', async () => {
|
|
86
|
-
const payload = await makeProjectPayload({
|
|
87
|
-
webpack: 'webpack.config',
|
|
88
|
-
name: '@org/block',
|
|
89
|
-
output: 'output',
|
|
90
|
-
version: '1.2.3',
|
|
91
|
-
dir: resolveFixture('makeProjectPayload/with-icon'),
|
|
92
|
-
});
|
|
93
|
-
const [formData] = payload;
|
|
94
|
-
const boundary = formData.getBoundary();
|
|
95
|
-
const buffer = await new Promise((resolve) => {
|
|
96
|
-
formData.pipe(concat(resolve));
|
|
97
84
|
});
|
|
98
|
-
|
|
85
|
+
it('should include an icon if one is present', async () => {
|
|
86
|
+
const payload = await makeProjectPayload({
|
|
87
|
+
webpack: 'webpack.config',
|
|
88
|
+
name: '@org/block',
|
|
89
|
+
output: 'output',
|
|
90
|
+
version: '1.2.3',
|
|
91
|
+
dir: resolveFixture('makeProjectPayload/with-icon'),
|
|
92
|
+
});
|
|
93
|
+
const [formData] = payload;
|
|
94
|
+
const boundary = formData.getBoundary();
|
|
95
|
+
const buffer = await new Promise((resolve) => {
|
|
96
|
+
formData.pipe(concat(resolve));
|
|
97
|
+
});
|
|
98
|
+
expect(String(buffer)).toBe(`--${boundary}\r
|
|
99
99
|
Content-Disposition: form-data; name="actions"\r
|
|
100
100
|
\r
|
|
101
101
|
{"onClick":{}}\r
|
|
@@ -130,105 +130,106 @@ export const string = 'with-icon';
|
|
|
130
130
|
\r
|
|
131
131
|
--${boundary}--\r
|
|
132
132
|
`);
|
|
133
|
-
});
|
|
134
|
-
});
|
|
135
|
-
describe('deleteBlock', () => {
|
|
136
|
-
it('should delete a block', async () => {
|
|
137
|
-
const block = await BlockVersion.create({
|
|
138
|
-
OrganizationId: organization.id,
|
|
139
|
-
name: 'test',
|
|
140
|
-
version: '0.0.0',
|
|
141
|
-
});
|
|
142
|
-
const clientCredentials = await authorizeCLI('blocks:delete', testApp);
|
|
143
|
-
await deleteBlock({
|
|
144
|
-
remote: testApp.defaults.baseURL,
|
|
145
|
-
clientCredentials,
|
|
146
|
-
blockName: block.name,
|
|
147
|
-
blockVersion: block.version,
|
|
148
|
-
organization: organization.id,
|
|
149
133
|
});
|
|
150
|
-
const foundBlocks = await BlockVersion.findAll();
|
|
151
|
-
expect(foundBlocks).toStrictEqual([]);
|
|
152
134
|
});
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
135
|
+
describe('deleteBlock', () => {
|
|
136
|
+
it('should delete a block', async () => {
|
|
137
|
+
const block = await BlockVersion.create({
|
|
138
|
+
OrganizationId: organization.id,
|
|
139
|
+
name: 'test',
|
|
140
|
+
version: '0.0.0',
|
|
141
|
+
});
|
|
142
|
+
const clientCredentials = await authorizeCLI('blocks:delete', testApp);
|
|
143
|
+
await deleteBlock({
|
|
144
|
+
remote: testApp.defaults.baseURL,
|
|
145
|
+
clientCredentials,
|
|
146
|
+
blockName: block.name,
|
|
147
|
+
blockVersion: block.version,
|
|
148
|
+
organization: organization.id,
|
|
149
|
+
});
|
|
150
|
+
const foundBlocks = await BlockVersion.findAll();
|
|
151
|
+
expect(foundBlocks).toStrictEqual([]);
|
|
163
152
|
});
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
153
|
+
});
|
|
154
|
+
describe('traverseBlockThemes', () => {
|
|
155
|
+
it('should upload css from a file in the app directory', async () => {
|
|
156
|
+
const app = await App.create({
|
|
157
|
+
path: 'test-app',
|
|
158
|
+
definition: { name: 'Test App', defaultPage: 'Test Page' },
|
|
159
|
+
vapidPublicKey: 'a',
|
|
160
|
+
vapidPrivateKey: 'b',
|
|
161
|
+
visibility: 'public',
|
|
162
|
+
OrganizationId: organization.id,
|
|
163
|
+
});
|
|
164
|
+
await BlockVersion.create({
|
|
165
|
+
name: 'test',
|
|
166
|
+
OrganizationId: 'appsemble',
|
|
167
|
+
version: '0.0.0',
|
|
168
|
+
parameters: {
|
|
169
|
+
type: 'object',
|
|
170
|
+
properties: {
|
|
171
|
+
foo: {
|
|
172
|
+
type: 'number',
|
|
173
|
+
},
|
|
173
174
|
},
|
|
174
175
|
},
|
|
175
|
-
}
|
|
176
|
+
});
|
|
177
|
+
await authorizeCLI('apps:write', testApp);
|
|
178
|
+
await traverseBlockThemes(resolveFixture('apps/test'), app.id, testApp.defaults.baseURL, false);
|
|
179
|
+
const style = await AppBlockStyle.findOne();
|
|
180
|
+
expect(style.dataValues).toMatchInlineSnapshot(`
|
|
181
|
+
{
|
|
182
|
+
"AppId": 1,
|
|
183
|
+
"block": "@appsemble/test",
|
|
184
|
+
"created": 1970-01-01T00:00:00.000Z,
|
|
185
|
+
"style": ".tux {
|
|
186
|
+
color: rgb(0 0 0);
|
|
187
|
+
}",
|
|
188
|
+
"updated": 1970-01-01T00:00:00.000Z,
|
|
189
|
+
}
|
|
190
|
+
`);
|
|
176
191
|
});
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
`);
|
|
191
|
-
});
|
|
192
|
-
it('should throw if the block does not exist', async () => {
|
|
193
|
-
const app = await App.create({
|
|
194
|
-
path: 'test-app',
|
|
195
|
-
definition: { name: 'Test App', defaultPage: 'Test Page' },
|
|
196
|
-
vapidPublicKey: 'a',
|
|
197
|
-
vapidPrivateKey: 'b',
|
|
198
|
-
visibility: 'public',
|
|
199
|
-
OrganizationId: organization.id,
|
|
200
|
-
});
|
|
201
|
-
await authorizeCLI('apps:write', testApp);
|
|
202
|
-
await expect(() => traverseBlockThemes(resolveFixture('apps/test'), app.id, testApp.defaults.baseURL, false)).rejects.toThrow('Request failed with status code 404');
|
|
203
|
-
const style = await AppBlockStyle.findOne();
|
|
204
|
-
expect(style).toBeNull();
|
|
205
|
-
});
|
|
206
|
-
it('should not upload css from core and shared directories', async () => {
|
|
207
|
-
const app = await App.create({
|
|
208
|
-
path: 'test-app',
|
|
209
|
-
definition: { name: 'Test App', defaultPage: 'Test Page' },
|
|
210
|
-
vapidPublicKey: 'a',
|
|
211
|
-
vapidPrivateKey: 'b',
|
|
212
|
-
visibility: 'public',
|
|
213
|
-
OrganizationId: organization.id,
|
|
192
|
+
it('should throw if the block does not exist', async () => {
|
|
193
|
+
const app = await App.create({
|
|
194
|
+
path: 'test-app',
|
|
195
|
+
definition: { name: 'Test App', defaultPage: 'Test Page' },
|
|
196
|
+
vapidPublicKey: 'a',
|
|
197
|
+
vapidPrivateKey: 'b',
|
|
198
|
+
visibility: 'public',
|
|
199
|
+
OrganizationId: organization.id,
|
|
200
|
+
});
|
|
201
|
+
await authorizeCLI('apps:write', testApp);
|
|
202
|
+
await expect(() => traverseBlockThemes(resolveFixture('apps/test'), app.id, testApp.defaults.baseURL, false)).rejects.toThrow('Request failed with status code 404');
|
|
203
|
+
const style = await AppBlockStyle.findOne();
|
|
204
|
+
expect(style).toBeNull();
|
|
214
205
|
});
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
206
|
+
it('should not upload css from core and shared directories', async () => {
|
|
207
|
+
const app = await App.create({
|
|
208
|
+
path: 'test-app',
|
|
209
|
+
definition: { name: 'Test App', defaultPage: 'Test Page' },
|
|
210
|
+
vapidPublicKey: 'a',
|
|
211
|
+
vapidPrivateKey: 'b',
|
|
212
|
+
visibility: 'public',
|
|
213
|
+
OrganizationId: organization.id,
|
|
214
|
+
});
|
|
215
|
+
await BlockVersion.create({
|
|
216
|
+
name: 'test',
|
|
217
|
+
OrganizationId: 'appsemble',
|
|
218
|
+
version: '0.0.0',
|
|
219
|
+
parameters: {
|
|
220
|
+
type: 'object',
|
|
221
|
+
properties: {
|
|
222
|
+
foo: {
|
|
223
|
+
type: 'number',
|
|
224
|
+
},
|
|
224
225
|
},
|
|
225
226
|
},
|
|
226
|
-
}
|
|
227
|
+
});
|
|
228
|
+
await authorizeCLI('apps:write', testApp);
|
|
229
|
+
await traverseBlockThemes(resolveFixture('apps/test'), app.id, testApp.defaults.baseURL, false);
|
|
230
|
+
const style = await Theme.findAll();
|
|
231
|
+
expect(style).toStrictEqual([]);
|
|
227
232
|
});
|
|
228
|
-
await authorizeCLI('apps:write', testApp);
|
|
229
|
-
await traverseBlockThemes(resolveFixture('apps/test'), app.id, testApp.defaults.baseURL, false);
|
|
230
|
-
const style = await Theme.findAll();
|
|
231
|
-
expect(style).toStrictEqual([]);
|
|
232
233
|
});
|
|
233
234
|
});
|
|
234
235
|
//# sourceMappingURL=block.test.js.map
|