@appsemble/cli 0.29.11 → 0.30.2
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 +10 -10
- package/commands/app/create.d.ts +1 -1
- package/commands/app/create.js +5 -5
- package/commands/{team → group}/create.d.ts +3 -3
- package/commands/{team → group}/create.js +5 -5
- package/commands/{team → group}/delete.d.ts +3 -3
- package/commands/{team → group}/delete.js +5 -5
- package/commands/{team → group}/index.d.ts +2 -2
- package/commands/{team → group}/index.js +4 -4
- package/commands/{team → group}/member/delete.d.ts +3 -3
- package/commands/{team → group}/member/delete.js +5 -5
- package/commands/{team → group}/member/index.d.ts +1 -1
- package/commands/{team → group}/member/index.js +1 -3
- package/commands/{team → group}/member/invite.d.ts +3 -3
- package/commands/{team → group}/member/invite.js +5 -5
- package/commands/{team → group}/update.d.ts +3 -3
- package/commands/{team → group}/update.js +7 -7
- package/commands/migrateAppDefinitions.d.ts +13 -0
- package/commands/migrateAppDefinitions.js +73 -0
- package/commands/serve.d.ts +1 -1
- package/commands/serve.js +16 -16
- package/index.js +4 -2
- package/lib/app.js +13 -3
- package/lib/app.test.js +1266 -1262
- package/lib/asset.js +4 -2
- package/lib/asset.test.js +70 -67
- package/lib/block.test.js +144 -142
- package/lib/config.test.js +205 -203
- package/lib/createServers.js +3 -1
- package/lib/group.d.ts +61 -0
- package/lib/group.js +55 -0
- package/lib/group.test.js +610 -0
- package/lib/organization.test.js +189 -187
- package/lib/resource.js +3 -1
- package/lib/resource.test.js +322 -320
- package/lib/serverImport.d.ts +1 -1
- package/package.json +8 -7
- package/server/argv.d.ts +4 -4
- package/server/argv.js +1 -1
- package/server/controllers/apps/actions/index.d.ts +5 -0
- package/server/controllers/apps/actions/index.js +6 -0
- package/server/controllers/apps/actions/proxyDelete.d.ts +2 -0
- package/server/controllers/apps/actions/proxyDelete.js +4 -0
- package/server/controllers/apps/actions/proxyGet.d.ts +2 -0
- package/server/controllers/apps/actions/proxyGet.js +4 -0
- package/server/controllers/apps/actions/proxyPatch.d.ts +2 -0
- package/server/controllers/apps/actions/proxyPatch.js +4 -0
- package/server/controllers/apps/actions/proxyPost.d.ts +2 -0
- package/server/controllers/apps/actions/proxyPost.js +4 -0
- package/server/controllers/apps/actions/proxyPut.d.ts +2 -0
- package/server/controllers/apps/actions/proxyPut.js +4 -0
- package/server/controllers/apps/index.d.ts +2 -0
- package/server/controllers/apps/index.js +3 -0
- package/server/controllers/apps/members/current/getCurrentAppMember.d.ts +2 -0
- package/server/controllers/apps/members/current/getCurrentAppMember.js +4 -0
- package/server/controllers/apps/members/current/index.d.ts +1 -0
- package/server/controllers/apps/members/current/index.js +2 -0
- package/server/controllers/apps/members/index.d.ts +1 -0
- package/server/controllers/apps/members/index.js +2 -0
- package/server/controllers/common/apps/assets/getAppAssetById.d.ts +2 -0
- package/server/controllers/common/apps/assets/getAppAssetById.js +4 -0
- package/server/controllers/common/apps/assets/index.d.ts +1 -0
- package/server/controllers/common/apps/assets/index.js +2 -0
- package/server/controllers/common/apps/groups/getAppGroups.d.ts +2 -0
- package/server/controllers/common/apps/groups/getAppGroups.js +4 -0
- package/server/controllers/common/apps/groups/index.d.ts +1 -0
- package/server/controllers/common/apps/groups/index.js +2 -0
- package/server/controllers/common/apps/index.d.ts +5 -0
- package/server/controllers/common/apps/index.js +6 -0
- package/server/controllers/common/apps/messages/getAppMessages.d.ts +2 -0
- package/server/controllers/common/apps/messages/getAppMessages.js +4 -0
- package/server/controllers/common/apps/messages/index.d.ts +1 -0
- package/server/controllers/common/apps/messages/index.js +2 -0
- package/server/controllers/common/apps/resources/countAppResources.d.ts +2 -0
- package/server/controllers/common/apps/resources/countAppResources.js +4 -0
- package/server/controllers/common/apps/resources/createAppResource.d.ts +2 -0
- package/server/controllers/common/apps/resources/createAppResource.js +4 -0
- package/server/controllers/common/apps/resources/deleteAppResource.d.ts +2 -0
- package/server/controllers/common/apps/resources/deleteAppResource.js +4 -0
- package/server/controllers/common/apps/resources/getAppResourceById.d.ts +2 -0
- package/server/controllers/common/apps/resources/getAppResourceById.js +4 -0
- package/server/controllers/common/apps/resources/index.d.ts +6 -0
- package/server/controllers/common/apps/resources/index.js +7 -0
- package/server/controllers/common/apps/resources/queryAppResources.d.ts +2 -0
- package/server/controllers/common/apps/resources/queryAppResources.js +4 -0
- package/server/controllers/common/apps/resources/updateAppResource.d.ts +2 -0
- package/server/controllers/common/apps/resources/updateAppResource.js +4 -0
- package/server/controllers/common/apps/variables/getAppVariables.js +4 -0
- package/server/controllers/common/apps/variables/index.d.ts +1 -0
- package/server/controllers/common/apps/variables/index.js +2 -0
- package/server/controllers/common/index.d.ts +1 -0
- package/server/controllers/common/index.js +2 -0
- package/server/controllers/index.d.ts +3 -8
- package/server/controllers/index.js +3 -8
- package/server/controllers/main/apps/assets/createAppAsset.d.ts +2 -0
- package/server/controllers/main/apps/assets/createAppAsset.js +4 -0
- package/server/controllers/main/apps/assets/index.d.ts +1 -0
- package/server/controllers/main/apps/assets/index.js +2 -0
- package/server/controllers/main/apps/index.d.ts +1 -0
- package/server/controllers/main/apps/index.js +2 -0
- package/server/controllers/main/index.d.ts +1 -0
- package/server/controllers/main/index.js +2 -0
- package/server/options/checkAppMemberAppPermissions.d.ts +1 -0
- package/server/options/checkAppMemberAppPermissions.js +4 -0
- package/server/options/checkAppPermissions.d.ts +1 -0
- package/server/options/checkAppPermissions.js +4 -0
- package/server/options/checkAuthSubjectAppPermissions.d.ts +1 -0
- package/server/options/checkAuthSubjectAppPermissions.js +4 -0
- package/server/options/checkUserOrganizationPermissions.d.ts +1 -0
- package/server/options/checkUserOrganizationPermissions.js +4 -0
- package/server/options/getAppGroups.d.ts +2 -0
- package/server/options/getAppGroups.js +4 -0
- package/server/options/getCurrentAppMember.d.ts +3 -0
- package/server/options/getCurrentAppMember.js +4 -0
- package/server/options/index.d.ts +6 -5
- package/server/options/index.js +6 -5
- package/server/options/options.js +7 -6
- 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 +11 -0
- package/commands/team/member/update.d.ts +0 -16
- package/commands/team/member/update.js +0 -46
- package/lib/team.d.ts +0 -61
- package/lib/team.js +0 -83
- package/lib/team.test.js +0 -625
- package/server/controllers/action.d.ts +0 -6
- package/server/controllers/action.js +0 -8
- package/server/controllers/appMembers.d.ts +0 -2
- package/server/controllers/appMembers.js +0 -4
- package/server/controllers/appMessages.d.ts +0 -2
- package/server/controllers/appMessages.js +0 -4
- package/server/controllers/appVariables.js +0 -4
- package/server/controllers/assets.d.ts +0 -4
- package/server/controllers/assets.js +0 -6
- package/server/controllers/oauth2Provider.d.ts +0 -2
- package/server/controllers/oauth2Provider.js +0 -4
- package/server/controllers/resources.d.ts +0 -7
- package/server/controllers/resources.js +0 -9
- package/server/controllers/teams.d.ts +0 -2
- package/server/controllers/teams.js +0 -4
- package/server/options/checkRole.d.ts +0 -1
- package/server/options/checkRole.js +0 -2
- package/server/options/checkRole.test.d.ts +0 -1
- package/server/options/checkRole.test.js +0 -13
- package/server/options/getAppMembers.d.ts +0 -3
- package/server/options/getAppMembers.js +0 -4
- package/server/options/getAppTeams.d.ts +0 -2
- package/server/options/getAppTeams.js +0 -4
- package/server/options/getAppUserInfo.d.ts +0 -3
- package/server/options/getAppUserInfo.js +0 -4
- package/server/options/verifyResourceActionPermission.d.ts +0 -1
- package/server/options/verifyResourceActionPermission.js +0 -2
- /package/lib/{team.test.d.ts → group.test.d.ts} +0 -0
- /package/server/controllers/{appVariables.d.ts → common/apps/variables/getAppVariables.d.ts} +0 -0
package/lib/asset.js
CHANGED
|
@@ -12,8 +12,10 @@ export async function publishAsset({ appId, clonable, name, path, remote, seed,
|
|
|
12
12
|
if (name) {
|
|
13
13
|
formData.append('name', normalize(name));
|
|
14
14
|
}
|
|
15
|
-
const
|
|
16
|
-
|
|
15
|
+
const { data: { id }, } = await axios.post(`/api/apps/${appId}/assets`, formData, {
|
|
16
|
+
baseURL: remote,
|
|
17
|
+
params: { seed },
|
|
18
|
+
});
|
|
17
19
|
logger.info(`Published asset ${id}${name ? ` with name ${normalize(name)}` : ''}`);
|
|
18
20
|
}
|
|
19
21
|
catch (error) {
|
package/lib/asset.test.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { resolveFixture } from '@appsemble/node-utils';
|
|
2
|
-
import { createServer, createTestUser, models, setArgv
|
|
2
|
+
import { createServer, createTestUser, models, setArgv } from '@appsemble/server';
|
|
3
|
+
import { PredefinedOrganizationRole } from '@appsemble/types';
|
|
3
4
|
import { setTestApp } from 'axios-test-instance';
|
|
4
5
|
import { afterAll, beforeAll, beforeEach, describe, expect, it, vi } from 'vitest';
|
|
5
6
|
import { publishAsset } from './asset.js';
|
|
@@ -10,59 +11,60 @@ let user;
|
|
|
10
11
|
let organization;
|
|
11
12
|
let testApp;
|
|
12
13
|
const { App, Asset, Organization, OrganizationMember } = models;
|
|
13
|
-
|
|
14
|
-
beforeAll(() => {
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
});
|
|
18
|
-
beforeEach(async () => {
|
|
19
|
-
vi.clearAllTimers();
|
|
20
|
-
vi.setSystemTime(0);
|
|
21
|
-
const server = await createServer();
|
|
22
|
-
testApp = await setTestApp(server);
|
|
23
|
-
initAxios({ remote: testApp.defaults.baseURL });
|
|
24
|
-
user = await createTestUser();
|
|
25
|
-
organization = await Organization.create({
|
|
26
|
-
id: 'testorganization',
|
|
27
|
-
name: 'Test Organization',
|
|
28
|
-
});
|
|
29
|
-
await OrganizationMember.create({
|
|
30
|
-
OrganizationId: organization.id,
|
|
31
|
-
UserId: user.id,
|
|
32
|
-
role: 'Owner',
|
|
14
|
+
describe('asset', () => {
|
|
15
|
+
beforeAll(() => {
|
|
16
|
+
vi.useFakeTimers();
|
|
17
|
+
setArgv(argv);
|
|
33
18
|
});
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
vapidPublicKey: 'a',
|
|
45
|
-
vapidPrivateKey: 'b',
|
|
46
|
-
visibility: 'public',
|
|
47
|
-
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',
|
|
48
29
|
});
|
|
49
|
-
await
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
name: 'test',
|
|
54
|
-
path: resolveFixture('apps/tux.png'),
|
|
55
|
-
remote: testApp.defaults.baseURL,
|
|
56
|
-
seed: false,
|
|
30
|
+
await OrganizationMember.create({
|
|
31
|
+
OrganizationId: organization.id,
|
|
32
|
+
UserId: user.id,
|
|
33
|
+
role: PredefinedOrganizationRole.Owner,
|
|
57
34
|
});
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
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
|
+
}, `
|
|
63
64
|
{
|
|
64
65
|
"AppId": 1,
|
|
65
66
|
"AppMemberId": null,
|
|
67
|
+
"GroupId": null,
|
|
66
68
|
"ResourceId": null,
|
|
67
69
|
"clonable": false,
|
|
68
70
|
"created": 1970-01-01T00:00:00.000Z,
|
|
@@ -76,26 +78,27 @@ describe('publishAsset', () => {
|
|
|
76
78
|
"updated": 1970-01-01T00:00:00.000Z,
|
|
77
79
|
}
|
|
78
80
|
`);
|
|
79
|
-
});
|
|
80
|
-
it('should throw an error if the app does not exist', async () => {
|
|
81
|
-
const app = await App.create({
|
|
82
|
-
path: 'test-app',
|
|
83
|
-
definition: { name: 'Test App', defaultPage: 'Test Page' },
|
|
84
|
-
vapidPublicKey: 'a',
|
|
85
|
-
vapidPrivateKey: 'b',
|
|
86
|
-
visibility: 'public',
|
|
87
|
-
OrganizationId: organization.id,
|
|
88
81
|
});
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
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
|
+
});
|
|
99
102
|
});
|
|
100
103
|
});
|
|
101
104
|
//# sourceMappingURL=asset.test.js.map
|
package/lib/block.test.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { resolveFixture } from '@appsemble/node-utils';
|
|
2
|
-
import { createServer, createTestUser, models, setArgv
|
|
2
|
+
import { createServer, createTestUser, models, setArgv } from '@appsemble/server';
|
|
3
|
+
import { PredefinedOrganizationRole } from '@appsemble/types';
|
|
3
4
|
import { setTestApp } from 'axios-test-instance';
|
|
4
5
|
import concat from 'concat-stream';
|
|
5
6
|
import { afterAll, beforeAll, beforeEach, describe, expect, it, vi } from 'vitest';
|
|
@@ -7,52 +8,52 @@ import { deleteBlock, traverseBlockThemes } from './block.js';
|
|
|
7
8
|
import { initAxios } from './initAxios.js';
|
|
8
9
|
import { makeProjectPayload } from './project.js';
|
|
9
10
|
import { authorizeCLI } from './testUtils.js';
|
|
10
|
-
useTestDatabase(import.meta);
|
|
11
11
|
const argv = { host: 'http://localhost', secret: 'test', aesSecret: 'testSecret' };
|
|
12
12
|
let testApp;
|
|
13
13
|
let user;
|
|
14
14
|
let organization;
|
|
15
15
|
const { App, AppBlockStyle, BlockVersion, Organization, OrganizationMember, Theme } = models;
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
beforeEach(async () => {
|
|
21
|
-
vi.clearAllTimers();
|
|
22
|
-
vi.setSystemTime(0);
|
|
23
|
-
const server = await createServer();
|
|
24
|
-
testApp = await setTestApp(server);
|
|
25
|
-
initAxios({ remote: testApp.defaults.baseURL });
|
|
26
|
-
user = await createTestUser();
|
|
27
|
-
organization = await Organization.create({
|
|
28
|
-
id: 'testorganization',
|
|
29
|
-
name: 'Test Organization',
|
|
30
|
-
});
|
|
31
|
-
await OrganizationMember.create({
|
|
32
|
-
OrganizationId: organization.id,
|
|
33
|
-
UserId: user.id,
|
|
34
|
-
role: 'Owner',
|
|
16
|
+
describe('block', () => {
|
|
17
|
+
beforeAll(() => {
|
|
18
|
+
vi.useFakeTimers();
|
|
19
|
+
setArgv(argv);
|
|
35
20
|
});
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
name: '
|
|
46
|
-
output: 'output',
|
|
47
|
-
version: '1.2.3',
|
|
48
|
-
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',
|
|
49
31
|
});
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
32
|
+
await OrganizationMember.create({
|
|
33
|
+
OrganizationId: organization.id,
|
|
34
|
+
UserId: user.id,
|
|
35
|
+
role: PredefinedOrganizationRole.Owner,
|
|
54
36
|
});
|
|
55
|
-
|
|
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
|
|
56
57
|
Content-Disposition: form-data; name="actions"\r
|
|
57
58
|
\r
|
|
58
59
|
{"onClick":{}}\r
|
|
@@ -80,21 +81,21 @@ export const string = 'no-icon';
|
|
|
80
81
|
\r
|
|
81
82
|
--${boundary}--\r
|
|
82
83
|
`);
|
|
83
|
-
});
|
|
84
|
-
it('should include an icon if one is present', async () => {
|
|
85
|
-
const payload = await makeProjectPayload({
|
|
86
|
-
webpack: 'webpack.config',
|
|
87
|
-
name: '@org/block',
|
|
88
|
-
output: 'output',
|
|
89
|
-
version: '1.2.3',
|
|
90
|
-
dir: resolveFixture('makeProjectPayload/with-icon'),
|
|
91
|
-
});
|
|
92
|
-
const [formData] = payload;
|
|
93
|
-
const boundary = formData.getBoundary();
|
|
94
|
-
const buffer = await new Promise((resolve) => {
|
|
95
|
-
formData.pipe(concat(resolve));
|
|
96
84
|
});
|
|
97
|
-
|
|
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
|
|
98
99
|
Content-Disposition: form-data; name="actions"\r
|
|
99
100
|
\r
|
|
100
101
|
{"onClick":{}}\r
|
|
@@ -129,105 +130,106 @@ export const string = 'with-icon';
|
|
|
129
130
|
\r
|
|
130
131
|
--${boundary}--\r
|
|
131
132
|
`);
|
|
132
|
-
});
|
|
133
|
-
});
|
|
134
|
-
describe('deleteBlock', () => {
|
|
135
|
-
it('should delete a block', async () => {
|
|
136
|
-
const block = await BlockVersion.create({
|
|
137
|
-
OrganizationId: organization.id,
|
|
138
|
-
name: 'test',
|
|
139
|
-
version: '0.0.0',
|
|
140
|
-
});
|
|
141
|
-
const clientCredentials = await authorizeCLI('blocks:delete', testApp);
|
|
142
|
-
await deleteBlock({
|
|
143
|
-
remote: testApp.defaults.baseURL,
|
|
144
|
-
clientCredentials,
|
|
145
|
-
blockName: block.name,
|
|
146
|
-
blockVersion: block.version,
|
|
147
|
-
organization: organization.id,
|
|
148
133
|
});
|
|
149
|
-
const foundBlocks = await BlockVersion.findAll();
|
|
150
|
-
expect(foundBlocks).toStrictEqual([]);
|
|
151
134
|
});
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
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([]);
|
|
162
152
|
});
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
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
|
+
},
|
|
172
174
|
},
|
|
173
175
|
},
|
|
174
|
-
}
|
|
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
|
+
`);
|
|
175
191
|
});
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
`);
|
|
190
|
-
});
|
|
191
|
-
it('should throw if the block does not exist', async () => {
|
|
192
|
-
const app = await App.create({
|
|
193
|
-
path: 'test-app',
|
|
194
|
-
definition: { name: 'Test App', defaultPage: 'Test Page' },
|
|
195
|
-
vapidPublicKey: 'a',
|
|
196
|
-
vapidPrivateKey: 'b',
|
|
197
|
-
visibility: 'public',
|
|
198
|
-
OrganizationId: organization.id,
|
|
199
|
-
});
|
|
200
|
-
await authorizeCLI('apps:write', testApp);
|
|
201
|
-
await expect(() => traverseBlockThemes(resolveFixture('apps/test'), app.id, testApp.defaults.baseURL, false)).rejects.toThrow('Request failed with status code 404');
|
|
202
|
-
const style = await AppBlockStyle.findOne();
|
|
203
|
-
expect(style).toBeNull();
|
|
204
|
-
});
|
|
205
|
-
it('should not upload css from core and shared directories', async () => {
|
|
206
|
-
const app = await App.create({
|
|
207
|
-
path: 'test-app',
|
|
208
|
-
definition: { name: 'Test App', defaultPage: 'Test Page' },
|
|
209
|
-
vapidPublicKey: 'a',
|
|
210
|
-
vapidPrivateKey: 'b',
|
|
211
|
-
visibility: 'public',
|
|
212
|
-
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();
|
|
213
205
|
});
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
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
|
+
},
|
|
223
225
|
},
|
|
224
226
|
},
|
|
225
|
-
}
|
|
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([]);
|
|
226
232
|
});
|
|
227
|
-
await authorizeCLI('apps:write', testApp);
|
|
228
|
-
await traverseBlockThemes(resolveFixture('apps/test'), app.id, testApp.defaults.baseURL, false);
|
|
229
|
-
const style = await Theme.findAll();
|
|
230
|
-
expect(style).toStrictEqual([]);
|
|
231
233
|
});
|
|
232
234
|
});
|
|
233
235
|
//# sourceMappingURL=block.test.js.map
|