@antelopejs/dms 0.5.2 → 0.5.4
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/CHANGELOG.md +37 -0
- package/dist/attachments/access.d.ts +1 -0
- package/dist/attachments/access.js +7 -3
- package/dist/attachments/access.js.map +1 -1
- package/dist/attachments/constraints.d.ts +4 -0
- package/dist/attachments/constraints.js +28 -0
- package/dist/attachments/constraints.js.map +1 -0
- package/dist/attachments/save.js +23 -12
- package/dist/attachments/save.js.map +1 -1
- package/dist/attachments/uploads.js +2 -0
- package/dist/attachments/uploads.js.map +1 -1
- package/dist/implementations/dms-base/search-route.js +3 -4
- package/dist/implementations/dms-base/search-route.js.map +1 -1
- package/dist/pages/settings/users/invite-email-outcome.d.ts +6 -0
- package/dist/pages/settings/users/invite-email-outcome.js +9 -0
- package/dist/pages/settings/users/invite-email-outcome.js.map +1 -0
- package/dist/pages/settings/users/invites.d.ts +4 -1
- package/dist/pages/settings/users/invites.js +33 -28
- package/dist/pages/settings/users/invites.js.map +1 -1
- package/dist/pages/settings/users/members.d.ts +8 -3
- package/dist/pages/settings/users/members.js +16 -4
- package/dist/pages/settings/users/members.js.map +1 -1
- package/dist/test/attachment-host/native.d.ts +25 -0
- package/dist/test/attachment-host/native.js +54 -1
- package/dist/test/attachment-host/native.js.map +1 -1
- package/dist/test/helpers/attachments.d.ts +1 -1
- package/dist/test/helpers/attachments.js +2 -2
- package/dist/test/helpers/attachments.js.map +1 -1
- package/dist/test/integration/files/field-constraints.test.d.ts +1 -0
- package/dist/test/integration/files/field-constraints.test.js +100 -0
- package/dist/test/integration/files/field-constraints.test.js.map +1 -0
- package/dist/test/integration/files/page-mode-form-files.test.d.ts +1 -0
- package/dist/test/integration/files/page-mode-form-files.test.js +114 -0
- package/dist/test/integration/files/page-mode-form-files.test.js.map +1 -0
- package/dist/test/integration/files/resource-form-files.test.d.ts +1 -0
- package/dist/test/integration/files/resource-form-files.test.js +121 -0
- package/dist/test/integration/files/resource-form-files.test.js.map +1 -0
- package/dist/test/integration/files/shared-controller-files.test.d.ts +1 -0
- package/dist/test/integration/files/shared-controller-files.test.js +136 -0
- package/dist/test/integration/files/shared-controller-files.test.js.map +1 -0
- package/dist/test/unit/implementations/dms-base/table-view-shared-controller.test.d.ts +1 -0
- package/dist/test/unit/implementations/dms-base/table-view-shared-controller.test.js +113 -0
- package/dist/test/unit/implementations/dms-base/table-view-shared-controller.test.js.map +1 -0
- package/dist/test/unit/interfaces/dms-base/resource-form.test.js +19 -0
- package/dist/test/unit/interfaces/dms-base/resource-form.test.js.map +1 -1
- package/dist/test/unit/interfaces/dms-base/table-view-tenant-gate.test.js +2 -2
- package/dist/test/unit/interfaces/dms-base/table-view-tenant-gate.test.js.map +1 -1
- package/dist/test/unit/pages/settings/invite-email-delivery.test.d.ts +1 -0
- package/dist/test/unit/pages/settings/invite-email-delivery.test.js +141 -0
- package/dist/test/unit/pages/settings/invite-email-delivery.test.js.map +1 -0
- package/frontend-vue/layers/dms-layout/i18n/locales/layout-en-GB.json +2 -0
- package/frontend-vue/layers/dms-layout/i18n/locales/layout-fr-FR.json +2 -0
- package/frontend-vue/layers/dms-ui/app/build/composables/table-view/useTableViewRowActions.ts +9 -5
- package/frontend-vue/layers/dms-ui/app/components/form/components/File.vue +50 -21
- package/frontend-vue/layers/dms-ui/app/components/form/components/Image.vue +54 -21
- package/frontend-vue/layers/dms-ui/app/components/form/components/Relation.vue +4 -3
- package/frontend-vue/layers/dms-ui/app/composables/form/types/api.ts +2 -1
- package/frontend-vue/layers/dms-ui/app/composables/form/useForm.ts +15 -8
- package/frontend-vue/layers/dms-ui/app/composables/form/useUploadWithProgress.ts +44 -3
- package/frontend-vue/layers/dms-ui/app/utils/metadataRetry.ts +47 -0
- package/frontend-vue/layers/dms-ui/app/utils/responseWarning.ts +46 -0
- package/frontend-vue/layers/dms-ui/i18n/locales/ui-en-GB.json +4 -1
- package/frontend-vue/layers/dms-ui/i18n/locales/ui-fr-FR.json +4 -1
- package/frontend-vue/tests/file-unavailable.test.ts +107 -0
- package/frontend-vue/tests/image-hydration-ids.test.ts +87 -0
- package/frontend-vue/tests/image-reference-preservation.test.ts +12 -2
- package/frontend-vue/tests/metadata-retry.test.ts +187 -0
- package/frontend-vue/tests/response-warning-toast.test.ts +57 -0
- package/frontend-vue/tests/upload-forbidden-headers.test.ts +52 -0
- package/package.json +2 -2
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const interface_database_decorators_1 = require("@antelopejs/interface-database-decorators");
|
|
4
|
+
const interface_file_storage_1 = require("@antelopejs/interface-file-storage");
|
|
5
|
+
const chai_1 = require("chai");
|
|
6
|
+
const constants_1 = require("@antelopejs/interface-dms/constants");
|
|
7
|
+
const db_1 = require("@antelopejs/interface-dms/db");
|
|
8
|
+
const upload_token_1 = require("../../../utils/upload-token");
|
|
9
|
+
const attachments_1 = require("../../helpers/attachments");
|
|
10
|
+
const auth_1 = require("../../helpers/auth");
|
|
11
|
+
const db_2 = require("../../helpers/db");
|
|
12
|
+
const CONTENT = Buffer.from("shared-controller file");
|
|
13
|
+
const METADATA = "/api/files/metadata";
|
|
14
|
+
const LOCATION = "/api/native-attachments";
|
|
15
|
+
const FIRST_TABLE_SLUG = "/nativefiles";
|
|
16
|
+
const LAST_TABLE_SLUG = "/nativefiles-secondary";
|
|
17
|
+
const PROFILE_SLUG = "/settings/user/profile";
|
|
18
|
+
const RELATION_INPUT = `${LOCATION}/form/relation`;
|
|
19
|
+
async function ownerClient() {
|
|
20
|
+
const owner = await (0, auth_1.registerUser)({ owner: true });
|
|
21
|
+
return (0, auth_1.authorizedClient)(owner.accessToken);
|
|
22
|
+
}
|
|
23
|
+
async function stageFrom(client, slug) {
|
|
24
|
+
const token = await (0, attachments_1.nativeUploadToken)(client, "file", "new", slug);
|
|
25
|
+
const upload = await (0, attachments_1.uploadAttachment)({
|
|
26
|
+
client,
|
|
27
|
+
content: CONTENT,
|
|
28
|
+
mimetype: "text/plain",
|
|
29
|
+
claims: {},
|
|
30
|
+
filename: "file.txt",
|
|
31
|
+
token,
|
|
32
|
+
});
|
|
33
|
+
return upload.key;
|
|
34
|
+
}
|
|
35
|
+
async function tableClaims(client, slug) {
|
|
36
|
+
const claims = (0, upload_token_1.verifyUploadToken)(await (0, attachments_1.nativeUploadToken)(client, "file", "new", slug));
|
|
37
|
+
if (!claims?.pageId || !claims.componentId)
|
|
38
|
+
throw new Error(`No native claims on ${slug}`);
|
|
39
|
+
return { pageId: claims.pageId, componentId: claims.componentId };
|
|
40
|
+
}
|
|
41
|
+
describe("[integration] native files on a data controller shared by several TableViews", () => {
|
|
42
|
+
beforeEach(db_2.resetDatabase);
|
|
43
|
+
for (const slug of [FIRST_TABLE_SLUG, LAST_TABLE_SLUG]) {
|
|
44
|
+
it(`promotes a file staged from the TableView on ${slug}`, async () => {
|
|
45
|
+
const client = await ownerClient();
|
|
46
|
+
const key = await stageFrom(client, slug);
|
|
47
|
+
const saved = await client.post(`${LOCATION}/new`, { file: key });
|
|
48
|
+
(0, chai_1.expect)(saved.status, JSON.stringify(saved.data)).to.equal(200);
|
|
49
|
+
const promoted = await client.get(METADATA, {
|
|
50
|
+
params: { resourceKey: (0, interface_file_storage_1.stripStagingPrefix)(key) },
|
|
51
|
+
});
|
|
52
|
+
(0, chai_1.expect)(promoted.status, JSON.stringify(promoted.data)).to.equal(200);
|
|
53
|
+
});
|
|
54
|
+
}
|
|
55
|
+
it("still denies a file staged by a component that is no TableView of the controller", async () => {
|
|
56
|
+
const client = await ownerClient();
|
|
57
|
+
const layout = await client.get("/dms/pagelayout", {
|
|
58
|
+
params: { slug: PROFILE_SLUG },
|
|
59
|
+
});
|
|
60
|
+
(0, chai_1.expect)(layout.status, JSON.stringify(layout.data)).to.equal(200);
|
|
61
|
+
const token = (0, attachments_1.findUploadToken)(layout.data, "profile-avatar#avatar");
|
|
62
|
+
(0, chai_1.expect)(token).to.be.a("string");
|
|
63
|
+
const image = await (0, attachments_1.uploadAttachment)({
|
|
64
|
+
client,
|
|
65
|
+
content: CONTENT,
|
|
66
|
+
mimetype: "image/png",
|
|
67
|
+
claims: {},
|
|
68
|
+
filename: "avatar.png",
|
|
69
|
+
token,
|
|
70
|
+
});
|
|
71
|
+
const foreign = await client.post(`${LOCATION}/new`, {
|
|
72
|
+
image: { key: image.key },
|
|
73
|
+
});
|
|
74
|
+
(0, chai_1.expect)(foreign.status).to.equal(403);
|
|
75
|
+
(0, chai_1.expect)((await client.get(METADATA, { params: { resourceKey: image.key } }))
|
|
76
|
+
.status).to.equal(200);
|
|
77
|
+
});
|
|
78
|
+
it("lets a user granted add on the first TableView only create a row with an image", async () => {
|
|
79
|
+
const owner = await ownerClient();
|
|
80
|
+
const firstTable = await tableClaims(owner, FIRST_TABLE_SLUG);
|
|
81
|
+
const roles = (0, interface_database_decorators_1.GetModel)(db_1.RoleModel, constants_1.DEFAULT_TENANT_ID);
|
|
82
|
+
const [firstTableEditor] = await roles.insert({
|
|
83
|
+
name: "First table editor",
|
|
84
|
+
permissions: [
|
|
85
|
+
firstTable.pageId,
|
|
86
|
+
firstTable.componentId,
|
|
87
|
+
`${firstTable.componentId}.add`,
|
|
88
|
+
],
|
|
89
|
+
});
|
|
90
|
+
const editor = await (0, auth_1.registerUser)({ roles_ids: [firstTableEditor] });
|
|
91
|
+
const client = (0, auth_1.authorizedClient)(editor.accessToken);
|
|
92
|
+
const image = await (0, attachments_1.uploadAttachment)({
|
|
93
|
+
client,
|
|
94
|
+
content: CONTENT,
|
|
95
|
+
mimetype: "image/png",
|
|
96
|
+
claims: {},
|
|
97
|
+
filename: "image.png",
|
|
98
|
+
token: await (0, attachments_1.nativeUploadToken)(client, "image", "new", FIRST_TABLE_SLUG),
|
|
99
|
+
});
|
|
100
|
+
const created = await client.post(`${LOCATION}/new`, { image: { en: { key: image.key } } }, { headers: { "x-content-language": "*" } });
|
|
101
|
+
(0, chai_1.expect)(created.status, JSON.stringify(created.data)).to.equal(200);
|
|
102
|
+
const promoted = await client.get(METADATA, {
|
|
103
|
+
params: { resourceKey: (0, interface_file_storage_1.stripStagingPrefix)(image.key) },
|
|
104
|
+
});
|
|
105
|
+
(0, chai_1.expect)(promoted.status, JSON.stringify(promoted.data)).to.equal(200);
|
|
106
|
+
});
|
|
107
|
+
it("refuses a user granted add on none of the controller's TableViews", async () => {
|
|
108
|
+
const owner = await ownerClient();
|
|
109
|
+
const firstTable = await tableClaims(owner, FIRST_TABLE_SLUG);
|
|
110
|
+
const lastTable = await tableClaims(owner, LAST_TABLE_SLUG);
|
|
111
|
+
const [viewer] = await (0, interface_database_decorators_1.GetModel)(db_1.RoleModel, constants_1.DEFAULT_TENANT_ID).insert({
|
|
112
|
+
name: "Table viewer",
|
|
113
|
+
permissions: [
|
|
114
|
+
firstTable.pageId,
|
|
115
|
+
firstTable.componentId,
|
|
116
|
+
lastTable.pageId,
|
|
117
|
+
lastTable.componentId,
|
|
118
|
+
],
|
|
119
|
+
});
|
|
120
|
+
const user = await (0, auth_1.registerUser)({ roles_ids: [viewer] });
|
|
121
|
+
const refused = await (0, auth_1.authorizedClient)(user.accessToken).post(`${LOCATION}/new`, { readerId: "table-viewer" });
|
|
122
|
+
(0, chai_1.expect)(refused.status).to.equal(403);
|
|
123
|
+
});
|
|
124
|
+
it("offers a relation's inline add to the add grant of every TableView", async () => {
|
|
125
|
+
const owner = await ownerClient();
|
|
126
|
+
const firstTable = await tableClaims(owner, FIRST_TABLE_SLUG);
|
|
127
|
+
const lastTable = await tableClaims(owner, LAST_TABLE_SLUG);
|
|
128
|
+
const relation = await owner.get(RELATION_INPUT);
|
|
129
|
+
(0, chai_1.expect)(relation.status, JSON.stringify(relation.data)).to.equal(200);
|
|
130
|
+
(0, chai_1.expect)(relation.data.options.addPermissionIds).to.have.members([
|
|
131
|
+
`${firstTable.componentId}.add`,
|
|
132
|
+
`${lastTable.componentId}.add`,
|
|
133
|
+
]);
|
|
134
|
+
});
|
|
135
|
+
});
|
|
136
|
+
//# sourceMappingURL=shared-controller-files.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shared-controller-files.test.js","sourceRoot":"","sources":["../../../../src/test/integration/files/shared-controller-files.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
const interface_api_1 = require("@antelopejs/interface-api");
|
|
37
|
+
const interface_core_1 = require("@antelopejs/interface-core");
|
|
38
|
+
const chai_1 = require("chai");
|
|
39
|
+
const search_route_1 = require("../../../../implementations/dms-base/search-route");
|
|
40
|
+
const permissionsImpl = __importStar(require("../../../../implementations/dms/permissions"));
|
|
41
|
+
const permissionsInterface = __importStar(require("@antelopejs/interface-dms/permissions"));
|
|
42
|
+
const table_view_1 = require("@antelopejs/interface-dms/base/table-view");
|
|
43
|
+
const ARCHIVE_FIELD = "archived";
|
|
44
|
+
const VIEW_ARCHIVED_ACTION = "viewArchived";
|
|
45
|
+
const ARCHIVING_TABLE_PERMISSION = "pages.shared.archiving.table.viewArchived";
|
|
46
|
+
const HTTP_FORBIDDEN = 403;
|
|
47
|
+
function stampedBuilder(permissionIds = {}) {
|
|
48
|
+
return {
|
|
49
|
+
getAction: (actionId) => permissionIds[actionId]
|
|
50
|
+
? { permissionId: permissionIds[actionId] }
|
|
51
|
+
: undefined,
|
|
52
|
+
};
|
|
53
|
+
}
|
|
54
|
+
function requestShowingArchived() {
|
|
55
|
+
return {
|
|
56
|
+
url: new URL("http://localhost/list?showArchived=true"),
|
|
57
|
+
};
|
|
58
|
+
}
|
|
59
|
+
async function rejectionOf(promise) {
|
|
60
|
+
try {
|
|
61
|
+
await promise;
|
|
62
|
+
}
|
|
63
|
+
catch (error) {
|
|
64
|
+
(0, chai_1.expect)(error).to.be.instanceOf(interface_api_1.HTTPResult);
|
|
65
|
+
return error;
|
|
66
|
+
}
|
|
67
|
+
throw new Error("expected the archive filter to refuse");
|
|
68
|
+
}
|
|
69
|
+
describe("[unit] implementations/dms-base — data controller shared by several TableViews", () => {
|
|
70
|
+
const builders = [];
|
|
71
|
+
function sharedController(...tableViews) {
|
|
72
|
+
class Controller {
|
|
73
|
+
}
|
|
74
|
+
const meta = (0, interface_core_1.GetMetadata)(Controller, table_view_1.TableViewMeta);
|
|
75
|
+
meta.setArchiveField(ARCHIVE_FIELD);
|
|
76
|
+
for (const builder of tableViews) {
|
|
77
|
+
builders.push(builder);
|
|
78
|
+
meta.addComponentBuilder(builder);
|
|
79
|
+
}
|
|
80
|
+
return new Controller();
|
|
81
|
+
}
|
|
82
|
+
before(() => {
|
|
83
|
+
(0, interface_core_1.ImplementInterface)(permissionsInterface, permissionsImpl);
|
|
84
|
+
});
|
|
85
|
+
it("keeps every TableView built on the controller", () => {
|
|
86
|
+
const first = stampedBuilder();
|
|
87
|
+
const last = stampedBuilder();
|
|
88
|
+
const instance = sharedController(first, last);
|
|
89
|
+
const meta = (0, interface_core_1.GetMetadata)(instance.constructor, table_view_1.TableViewMeta);
|
|
90
|
+
(0, chai_1.expect)(meta.componentBuilders).to.deep.equal([first, last]);
|
|
91
|
+
});
|
|
92
|
+
it("collects an action's permission from each TableView that stamps it", () => {
|
|
93
|
+
const instance = sharedController(stampedBuilder({ add: "pages.a.table.add" }), stampedBuilder(), stampedBuilder({ add: "pages.b.table.add" }), stampedBuilder({ add: "pages.a.table.add" }));
|
|
94
|
+
const meta = (0, interface_core_1.GetMetadata)(instance.constructor, table_view_1.TableViewMeta);
|
|
95
|
+
(0, chai_1.expect)(meta.actionPermissionIds("add")).to.deep.equal([
|
|
96
|
+
"pages.a.table.add",
|
|
97
|
+
"pages.b.table.add",
|
|
98
|
+
]);
|
|
99
|
+
});
|
|
100
|
+
it("guards archived rows when only an earlier TableView declares viewArchived", async () => {
|
|
101
|
+
const instance = sharedController(stampedBuilder({ [VIEW_ARCHIVED_ACTION]: ARCHIVING_TABLE_PERMISSION }), stampedBuilder());
|
|
102
|
+
const error = await rejectionOf((0, search_route_1.applyArchiveFilter)(instance, requestShowingArchived(), undefined, new Set(), {}));
|
|
103
|
+
(0, chai_1.expect)(error.getStatus()).to.equal(HTTP_FORBIDDEN);
|
|
104
|
+
});
|
|
105
|
+
it("shows archived rows to a holder of any TableView's viewArchived", async () => {
|
|
106
|
+
const instance = sharedController(stampedBuilder({ [VIEW_ARCHIVED_ACTION]: ARCHIVING_TABLE_PERMISSION }), stampedBuilder({
|
|
107
|
+
[VIEW_ARCHIVED_ACTION]: "pages.shared.other.table.viewArchived",
|
|
108
|
+
}));
|
|
109
|
+
const filters = await (0, search_route_1.applyArchiveFilter)(instance, requestShowingArchived(), undefined, new Set([ARCHIVING_TABLE_PERMISSION]), {});
|
|
110
|
+
(0, chai_1.expect)(filters).to.have.property(ARCHIVE_FIELD);
|
|
111
|
+
});
|
|
112
|
+
});
|
|
113
|
+
//# sourceMappingURL=table-view-shared-controller.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"table-view-shared-controller.test.js","sourceRoot":"","sources":["../../../../../src/test/unit/implementations/dms-base/table-view-shared-controller.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -13,6 +13,7 @@ const interface_api_1 = require("@antelopejs/interface-api");
|
|
|
13
13
|
const interface_data_api_1 = require("@antelopejs/interface-data-api");
|
|
14
14
|
const metadata_1 = require("@antelopejs/interface-data-api/metadata");
|
|
15
15
|
const interface_database_decorators_1 = require("@antelopejs/interface-database-decorators");
|
|
16
|
+
const interface_core_1 = require("@antelopejs/interface-core");
|
|
16
17
|
const chai_1 = require("chai");
|
|
17
18
|
const block_types_1 = require("@antelopejs/interface-dms/base/block-types");
|
|
18
19
|
const default_types_1 = require("@antelopejs/interface-dms/base/data-types/default-types");
|
|
@@ -107,6 +108,24 @@ describe("[unit] interfaces/dms-base/resource-form — a form derived from its t
|
|
|
107
108
|
(0, chai_1.expect)(edited.submitUrl).to.equal(`${LOCATION}/edit?id={{params.ticket}}`);
|
|
108
109
|
(0, chai_1.expect)(edited, "the row token is the form's to resolve, not an option").to.not.have.property("rowId");
|
|
109
110
|
});
|
|
111
|
+
it("counts among the components writing to the table only when it submits", () => {
|
|
112
|
+
const meta = (0, interface_core_1.GetMetadata)(TicketAPI, meta_1.TableViewMeta);
|
|
113
|
+
const created = (0, resource_form_1.ResourceForm)(TicketAPI, { mode: "new" });
|
|
114
|
+
const edited = (0, resource_form_1.ResourceForm)(TicketAPI, { mode: "edit" });
|
|
115
|
+
const shown = (0, resource_form_1.ResourceForm)(TicketAPI, { mode: "view" });
|
|
116
|
+
const table = (0, factory_1.TableView)(TicketAPI);
|
|
117
|
+
(0, chai_1.expect)(meta.writingComponents).to.include.members([created, edited, table]);
|
|
118
|
+
(0, chai_1.expect)(meta.writingComponents).to.not.include(shown);
|
|
119
|
+
(0, chai_1.expect)(meta.componentBuilders, "a form carries no TableView action permission").to.not.include.members([created, edited]);
|
|
120
|
+
});
|
|
121
|
+
it("counts a TableView's own new and edit forms among the components writing to the table", () => {
|
|
122
|
+
const meta = (0, interface_core_1.GetMetadata)(TicketAPI, meta_1.TableViewMeta);
|
|
123
|
+
const built = meta.resourceFormBuilders.length;
|
|
124
|
+
(0, factory_1.TableView)(TicketAPI);
|
|
125
|
+
(0, chai_1.expect)(meta.resourceFormBuilders
|
|
126
|
+
.slice(built)
|
|
127
|
+
.map((form) => optionsOf(form).submitUrl)).to.deep.equal([`${LOCATION}/new`, `${LOCATION}/edit?id={{params.id}}`]);
|
|
128
|
+
});
|
|
110
129
|
it("is declared as a block over a table, picked by mode", () => {
|
|
111
130
|
const declared = (0, block_types_1.ListBlockTypes)().find((block) => block.type === "ResourceForm");
|
|
112
131
|
(0, chai_1.expect)(declared?.controllerArg).to.equal(true);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resource-form.test.js","sourceRoot":"","sources":["../../../../../src/test/unit/interfaces/dms-base/resource-form.test.ts"],"names":[],"mappings":";;;;;;;;;;;AAAA,6DAAuD;AACvD,uEAGwC;AACxC,sEAIiD;AACjD,6FAMmD;AACnD,+BAA8B;AAC9B,4EAA4E;AAC5E,2FAA2F;AAK3F,+EAA8E;AAC9E,
|
|
1
|
+
{"version":3,"file":"resource-form.test.js","sourceRoot":"","sources":["../../../../../src/test/unit/interfaces/dms-base/resource-form.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -66,9 +66,9 @@ function tableViewInstance(options, permissionId) {
|
|
|
66
66
|
meta.setBypassTenantAccessGate();
|
|
67
67
|
}
|
|
68
68
|
if (permissionId) {
|
|
69
|
-
meta.
|
|
69
|
+
meta.addComponentBuilder({
|
|
70
70
|
getAction: () => ({ permissionId }),
|
|
71
|
-
};
|
|
71
|
+
});
|
|
72
72
|
}
|
|
73
73
|
return new Controller();
|
|
74
74
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"table-view-tenant-gate.test.js","sourceRoot":"","sources":["../../../../../src/test/unit/interfaces/dms-base/table-view-tenant-gate.test.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,6DAAuD;AACvD,+DAA6E;AAC7E,6FAGmD;AACnD,+BAA8B;AAC9B,6FAA+E;AAC/E,8GAAgG;AAChG,gGAAkF;AAElF,mEAAyE;AACzE,qDAA4E;AAC5E,4FAA8E;AAC9E,6GAA+F;AAC/F,+FAAiF;AAEjF,0EAMmD;AACnD,8DAAiE;AAEjE,MAAM,aAAa,GAAG,uBAAuB,CAAC;AAC9C,MAAM,cAAc,GAAG,wBAAwB,CAAC;AAChD,MAAM,cAAc,GAAG,mBAAmB,CAAC;AAC3C,MAAM,WAAW,GAAG,MAAM,CAAC;AAC3B,MAAM,YAAY,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC;AAEhD,MAAM,aAAa,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC;AAChF,MAAM,aAAa,GAAG,kBAAkB,CAAC;AACzC,MAAM,cAAc,GAAG,GAAG,CAAC;AAC3B,MAAM,MAAM,GAAG,EAAE,GAAG,EAAE,gBAAgB,EAAU,CAAC;AAEjD,MAAM,QAAQ,GAAG,IAAA,+BAAiB,EAAC,SAAS,EAAE,aAAa,EAAE,cAAc,CAAC,CAAC;AAE7E,SAAS,iBAAiB,CACxB,OAAyB,EACzB,YAAqB;IAErB,MAAM,UAAU;KAAG;IACnB,MAAM,IAAI,GAAG,IAAA,4BAAW,EAAC,UAAU,EAAE,0BAAa,CAAC,CAAC;IACpD,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;IACzB,IAAI,OAAO,CAAC,sBAAsB,EAAE,CAAC;QACnC,IAAI,CAAC,yBAAyB,EAAE,CAAC;IACnC,CAAC;IACD,IAAI,YAAY,EAAE,CAAC;QACjB,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"table-view-tenant-gate.test.js","sourceRoot":"","sources":["../../../../../src/test/unit/interfaces/dms-base/table-view-tenant-gate.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,141 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const interface_core_1 = require("@antelopejs/interface-core");
|
|
4
|
+
const interface_database_decorators_1 = require("@antelopejs/interface-database-decorators");
|
|
5
|
+
const chai_1 = require("chai");
|
|
6
|
+
const auth_1 = require("@antelopejs/interface-dms/auth");
|
|
7
|
+
const db_1 = require("@antelopejs/interface-dms/db");
|
|
8
|
+
const invites_1 = require("@antelopejs/interface-dms/invites");
|
|
9
|
+
const actions_1 = require("../../../../automation/actions");
|
|
10
|
+
const invites_2 = require("../../../../pages/settings/users/invites");
|
|
11
|
+
const members_1 = require("../../../../pages/settings/users/members");
|
|
12
|
+
const db_2 = require("../../../helpers/db");
|
|
13
|
+
const WORKSPACE_ID = "invite-email-delivery-workspace";
|
|
14
|
+
const INVITEE_EMAIL = "invitee@delivery.test";
|
|
15
|
+
const SMTP_REFUSAL = "525 5.7.1 Unauthorized IP address";
|
|
16
|
+
const refuse = async () => {
|
|
17
|
+
throw new Error(`Failed to send email: ${SMTP_REFUSAL}`);
|
|
18
|
+
};
|
|
19
|
+
const accept = async () => undefined;
|
|
20
|
+
const automationCtx = {
|
|
21
|
+
procedureId: "procedure",
|
|
22
|
+
runId: "run",
|
|
23
|
+
nodeId: "node",
|
|
24
|
+
log: () => undefined,
|
|
25
|
+
};
|
|
26
|
+
function inviteThroughMembersRoute() {
|
|
27
|
+
return (0, invites_1.inviteUserToTenant)({
|
|
28
|
+
tenantId: WORKSPACE_ID,
|
|
29
|
+
email: INVITEE_EMAIL,
|
|
30
|
+
roleIds: [],
|
|
31
|
+
sendEmail: true,
|
|
32
|
+
awaitEmailDelivery: true,
|
|
33
|
+
});
|
|
34
|
+
}
|
|
35
|
+
async function createPendingInviteId() {
|
|
36
|
+
const result = await (0, invites_1.inviteUserToTenant)({
|
|
37
|
+
tenantId: WORKSPACE_ID,
|
|
38
|
+
email: INVITEE_EMAIL,
|
|
39
|
+
});
|
|
40
|
+
if (result.kind !== "invited")
|
|
41
|
+
throw new Error("Expected a pending invite");
|
|
42
|
+
return result.inviteId;
|
|
43
|
+
}
|
|
44
|
+
function pendingInvite() {
|
|
45
|
+
return (0, interface_database_decorators_1.GetModel)(db_1.UserInviteModel, WORKSPACE_ID).getByEmail(INVITEE_EMAIL);
|
|
46
|
+
}
|
|
47
|
+
describe("[unit] pages/settings — invitation email delivery", () => {
|
|
48
|
+
let sendEmail;
|
|
49
|
+
let sentCount;
|
|
50
|
+
before(() => {
|
|
51
|
+
(0, interface_core_1.ImplementInterface)({ sendAdminInviteEmail: auth_1.sendAdminInviteEmail }, {
|
|
52
|
+
sendAdminInviteEmail: () => {
|
|
53
|
+
sentCount += 1;
|
|
54
|
+
return sendEmail();
|
|
55
|
+
},
|
|
56
|
+
});
|
|
57
|
+
});
|
|
58
|
+
beforeEach(async () => {
|
|
59
|
+
await (0, db_2.resetDatabase)();
|
|
60
|
+
sendEmail = accept;
|
|
61
|
+
sentCount = 0;
|
|
62
|
+
const now = new Date();
|
|
63
|
+
await (0, interface_database_decorators_1.GetModel)(db_1.TenantModel).insert({
|
|
64
|
+
_id: WORKSPACE_ID,
|
|
65
|
+
name: "Delivery",
|
|
66
|
+
createdAt: now,
|
|
67
|
+
updatedAt: now,
|
|
68
|
+
});
|
|
69
|
+
});
|
|
70
|
+
describe("members invite route", () => {
|
|
71
|
+
it("keeps the invitation and tells the inviter when the email fails", async () => {
|
|
72
|
+
sendEmail = refuse;
|
|
73
|
+
const result = await inviteThroughMembersRoute();
|
|
74
|
+
(0, chai_1.expect)(result).to.include({ kind: "invited", emailDelivery: "failed" });
|
|
75
|
+
(0, chai_1.expect)(await pendingInvite()).to.exist;
|
|
76
|
+
const response = (0, members_1.memberInviteResponse)(result);
|
|
77
|
+
(0, chai_1.expect)(response).to.deep.equal({
|
|
78
|
+
redirectPath: members_1.INVITES_PAGE_PATH,
|
|
79
|
+
emailDelivery: "failed",
|
|
80
|
+
warning: members_1.INVITE_EMAIL_FAILED_WARNING,
|
|
81
|
+
});
|
|
82
|
+
(0, chai_1.expect)(JSON.stringify(response)).not.to.contain(SMTP_REFUSAL);
|
|
83
|
+
});
|
|
84
|
+
it("reports a sent email without a warning", async () => {
|
|
85
|
+
const result = await inviteThroughMembersRoute();
|
|
86
|
+
(0, chai_1.expect)(sentCount).to.equal(1);
|
|
87
|
+
(0, chai_1.expect)((0, members_1.memberInviteResponse)(result)).to.deep.equal({
|
|
88
|
+
redirectPath: members_1.INVITES_PAGE_PATH,
|
|
89
|
+
emailDelivery: "sent",
|
|
90
|
+
});
|
|
91
|
+
});
|
|
92
|
+
});
|
|
93
|
+
describe("resend", () => {
|
|
94
|
+
it("keeps the reissued invitation and warns when the email fails", async () => {
|
|
95
|
+
const inviteId = await createPendingInviteId();
|
|
96
|
+
sendEmail = refuse;
|
|
97
|
+
const outcome = await (0, invites_2.resendPendingInvite)(WORKSPACE_ID, inviteId);
|
|
98
|
+
(0, chai_1.expect)(outcome).to.deep.equal({
|
|
99
|
+
emailDelivery: "failed",
|
|
100
|
+
warning: invites_2.INVITE_RESEND_EMAIL_FAILED_WARNING,
|
|
101
|
+
});
|
|
102
|
+
(0, chai_1.expect)(await pendingInvite()).to.exist;
|
|
103
|
+
});
|
|
104
|
+
it("reports a sent email without a warning", async () => {
|
|
105
|
+
const inviteId = await createPendingInviteId();
|
|
106
|
+
const outcome = await (0, invites_2.resendPendingInvite)(WORKSPACE_ID, inviteId);
|
|
107
|
+
(0, chai_1.expect)(outcome).to.deep.equal({ emailDelivery: "sent" });
|
|
108
|
+
(0, chai_1.expect)(sentCount).to.equal(1);
|
|
109
|
+
});
|
|
110
|
+
});
|
|
111
|
+
describe("callers that do not opt in", () => {
|
|
112
|
+
it("still send in the background and report no delivery", async () => {
|
|
113
|
+
let releaseEmail = () => undefined;
|
|
114
|
+
const emailRequested = new Promise((requested) => {
|
|
115
|
+
sendEmail = () => {
|
|
116
|
+
requested();
|
|
117
|
+
return new Promise((resolve) => {
|
|
118
|
+
releaseEmail = resolve;
|
|
119
|
+
});
|
|
120
|
+
};
|
|
121
|
+
});
|
|
122
|
+
const result = await (0, invites_1.inviteUserToTenant)({
|
|
123
|
+
tenantId: WORKSPACE_ID,
|
|
124
|
+
email: INVITEE_EMAIL,
|
|
125
|
+
sendEmail: true,
|
|
126
|
+
});
|
|
127
|
+
await emailRequested;
|
|
128
|
+
releaseEmail();
|
|
129
|
+
(0, chai_1.expect)(result).to.have.property("kind", "invited");
|
|
130
|
+
(0, chai_1.expect)(result).not.to.have.property("emailDelivery");
|
|
131
|
+
});
|
|
132
|
+
it("leave the automation invite action's output unchanged", async () => {
|
|
133
|
+
sendEmail = refuse;
|
|
134
|
+
const action = actions_1.ACTIONS.find(({ id }) => id === "dms.invite-user");
|
|
135
|
+
const output = await action?.execute({ email: INVITEE_EMAIL, tenantId: WORKSPACE_ID }, automationCtx);
|
|
136
|
+
const invite = await pendingInvite();
|
|
137
|
+
(0, chai_1.expect)(output).to.deep.equal({ kind: "invited", inviteId: invite?._id });
|
|
138
|
+
});
|
|
139
|
+
});
|
|
140
|
+
});
|
|
141
|
+
//# sourceMappingURL=invite-email-delivery.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"invite-email-delivery.test.js","sourceRoot":"","sources":["../../../../../src/test/unit/pages/settings/invite-email-delivery.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -146,6 +146,7 @@
|
|
|
146
146
|
"description": "Enter the email address of the person to invite and click 'Send invitation' to grant them access.",
|
|
147
147
|
"submit": "Send invitation",
|
|
148
148
|
"success": "Invitation sent successfully",
|
|
149
|
+
"email_failed": "Invitation created, but the email could not be sent. Resend it from the pending invitations list once email sending works again.",
|
|
149
150
|
"field": {
|
|
150
151
|
"email": "Email address",
|
|
151
152
|
"firstname": "First name",
|
|
@@ -212,6 +213,7 @@
|
|
|
212
213
|
"action": {
|
|
213
214
|
"resend": "Resend",
|
|
214
215
|
"resend_success": "Invitation resent successfully",
|
|
216
|
+
"resend_email_failed": "Invitation renewed, but the email could not be sent. Try again once email sending works again.",
|
|
215
217
|
"resend_confirm_title": "Resend invitation",
|
|
216
218
|
"resend_confirm_description": "This will generate a new invitation link and send it to the user. The previous link will be invalidated.",
|
|
217
219
|
"cancel": "Cancel invite",
|
|
@@ -150,6 +150,7 @@
|
|
|
150
150
|
"description": "Saisissez l'adresse e-mail de la personne à inviter et cliquez sur 'Envoyer l'invitation' pour lui accorder l'accès.",
|
|
151
151
|
"submit": "Envoyer l'invitation",
|
|
152
152
|
"success": "Invitation envoyée avec succès",
|
|
153
|
+
"email_failed": "Invitation créée, mais l'e-mail n'a pas pu être envoyé. Renvoyez-la depuis la liste des invitations en attente une fois l'envoi des e-mails rétabli.",
|
|
153
154
|
"already_member": "Cet utilisateur est déjà enregistré",
|
|
154
155
|
"field": {
|
|
155
156
|
"email": "Adresse e-mail",
|
|
@@ -216,6 +217,7 @@
|
|
|
216
217
|
"action": {
|
|
217
218
|
"resend": "Renvoyer",
|
|
218
219
|
"resend_success": "Invitation renvoyée avec succès",
|
|
220
|
+
"resend_email_failed": "Invitation renouvelée, mais l'e-mail n'a pas pu être envoyé. Réessayez une fois l'envoi des e-mails rétabli.",
|
|
219
221
|
"resend_confirm_title": "Renvoyer l'invitation",
|
|
220
222
|
"resend_confirm_description": "Un nouveau lien d'invitation sera généré et envoyé à l'utilisateur. L'ancien lien sera invalidé.",
|
|
221
223
|
"cancel": "Annuler l'invitation",
|
package/frontend-vue/layers/dms-ui/app/build/composables/table-view/useTableViewRowActions.ts
CHANGED
|
@@ -18,6 +18,7 @@ import DmsForm from "../../../components/form/Form.vue";
|
|
|
18
18
|
import { get } from "@nuxt/ui/runtime/utils/index.js";
|
|
19
19
|
import type { ActionTarget } from "../../../composables/table-view/types/action-target";
|
|
20
20
|
import { TableViewEvents } from "../../../composables/table-view/types";
|
|
21
|
+
import { resolveResponseToast } from "../../../utils/responseWarning";
|
|
21
22
|
|
|
22
23
|
const DEFAULT_ROW_ID_KEY = "_id";
|
|
23
24
|
const DEFAULT_MODAL_SIZE = "xl";
|
|
@@ -592,13 +593,16 @@ export const useTableRowActions = <T extends Data>(
|
|
|
592
593
|
}
|
|
593
594
|
|
|
594
595
|
try {
|
|
595
|
-
await config.api(url, {
|
|
596
|
+
const response = await config.api(url, {
|
|
596
597
|
method: target.method || HttpMethod.post,
|
|
597
598
|
});
|
|
598
|
-
toast.add(
|
|
599
|
-
|
|
600
|
-
|
|
601
|
-
|
|
599
|
+
toast.add(
|
|
600
|
+
resolveResponseToast(
|
|
601
|
+
response,
|
|
602
|
+
{ color: Color.success, title: processI18n(target.successMessage) },
|
|
603
|
+
{ processI18n, processApiMessage },
|
|
604
|
+
),
|
|
605
|
+
);
|
|
602
606
|
config.refreshCallback?.();
|
|
603
607
|
} catch (error: unknown) {
|
|
604
608
|
handleApiError(error, t("dms.form.error_unknown"));
|