@raketa-cloud/admin 0.0.15 → 0.0.16
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/package.json +1 -1
- package/src/cloud/EventChanges.js +15 -0
- package/src/cloud/EventRevisions.js +149 -0
- package/src/cloud/Events.js +135 -0
- package/src/cloud/documents/common.js +10 -0
- package/src/cloud/documents/eventsDocuments.js +254 -0
- package/src/handlers/event_revisions/CodeHandler.js +86 -0
- package/src/handlers/event_revisions/EventRevisionsHandler.js +47 -0
- package/src/handlers/event_revisions/GeneralHandler.js +93 -0
- package/src/handlers/event_revisions/LocksHandler.js +51 -0
- package/src/handlers/event_revisions/MetaHandler.js +86 -0
- package/src/handlers/event_revisions/PublishesHandler.js +84 -0
- package/src/handlers/event_revisions/RevertsHandler.js +26 -0
- package/src/handlers/event_revisions/TagHandler.js +85 -0
- package/src/handlers/event_revisions/UnlocksHandler.js +22 -0
- package/src/handlers/event_revisions/VisualHandler.js +80 -0
- package/src/handlers/event_revisions/WidgetHandler.js +41 -0
- package/src/handlers/events/ClonesHandler.js +17 -0
- package/src/handlers/events/DeletesHandler.js +68 -0
- package/src/handlers/events/EventsHandler.js +121 -0
- package/src/handlers/events/TranslationsHandler.js +99 -0
- package/src/handlers/events/URLsHandler.js +71 -0
- package/src/index.js +22 -0
- package/src/routeEvents.js +55 -0
- package/src/routeStandard.js +2 -0
- package/src/setupCloud.js +12 -0
- package/src/tests/handlers/article_revisions/CodesHandler.test/edit_form.test.js +56 -0
- package/src/tests/handlers/article_revisions/CodesHandler.test/update.test.js +139 -0
- package/src/tests/handlers/article_revisions/GeneralHandler.test/edit_form.test.js +65 -0
- package/src/tests/handlers/article_revisions/GeneralHandler.test/update.test.js +150 -0
- package/src/tests/handlers/article_revisions/MetaHandler.test/edit_form.test.js +57 -0
- package/src/tests/handlers/article_revisions/MetaHandler.test/update.test.js +143 -0
- package/src/tests/handlers/article_revisions/PageRevisionsHandler.test/create.test.js +75 -0
- package/src/tests/handlers/article_revisions/PageRevisionsHandler.test/destroy.test.js +53 -0
- package/src/tests/handlers/article_revisions/PublishesHandler.test/create.test.js +136 -0
- package/src/tests/handlers/article_revisions/PublishesHandler.test/create_form.test.js +47 -0
- package/src/tests/handlers/article_revisions/RevertsHandler.test/create.test.js +80 -0
- package/src/tests/handlers/article_revisions/TagHandler.test/edit_form.test.js +69 -0
- package/src/tests/handlers/article_revisions/TagHandler.test/update.test.js +143 -0
- package/src/tests/handlers/article_revisions/VisualHandler.test.test/edit_form.test.js +55 -0
- package/src/tests/handlers/article_revisions/VisualHandler.test.test/update.test.js +131 -0
- package/src/tests/handlers/article_revisions/WidgetHandler.test/show.test.js +46 -0
- package/src/tests/handlers/article_revisions/WidgetHandler.test/update.test.js +103 -0
- package/src/tests/handlers/event_revisions/CodesHandler.test/edit_form.test.js +56 -0
- package/src/tests/handlers/event_revisions/CodesHandler.test/update.test.js +143 -0
- package/src/tests/handlers/event_revisions/GeneralHandler.test/edit_form.test.js +69 -0
- package/src/tests/handlers/event_revisions/GeneralHandler.test/update.test.js +158 -0
- package/src/tests/handlers/event_revisions/MetaHandler.test/edit_form.test.js +57 -0
- package/src/tests/handlers/event_revisions/MetaHandler.test/update.test.js +147 -0
- package/src/tests/handlers/event_revisions/PageRevisionsHandler.test/create.test.js +75 -0
- package/src/tests/handlers/event_revisions/PageRevisionsHandler.test/destroy.test.js +53 -0
- package/src/tests/handlers/event_revisions/PublishesHandler.test/create.test.js +136 -0
- package/src/tests/handlers/event_revisions/PublishesHandler.test/create_form.test.js +47 -0
- package/src/tests/handlers/event_revisions/RevertsHandler.test/create.test.js +80 -0
- package/src/tests/handlers/event_revisions/TagHandler.test/edit_form.test.js +69 -0
- package/src/tests/handlers/event_revisions/TagHandler.test/update.test.js +147 -0
- package/src/tests/handlers/event_revisions/VisualHandler.test.test/edit_form.test.js +55 -0
- package/src/tests/handlers/event_revisions/VisualHandler.test.test/update.test.js +135 -0
- package/src/tests/handlers/event_revisions/WidgetHandler.test/show.test.js +46 -0
- package/src/tests/handlers/event_revisions/WidgetHandler.test/update.test.js +103 -0
- package/src/tests/handlers/events/ConesHandler.test/create.test.js +54 -0
- package/src/tests/handlers/events/DeletesHandler.test/create.test.js +110 -0
- package/src/tests/handlers/events/DeletesHandler.test/create_form.test.js +54 -0
- package/src/tests/handlers/events/EventsHandler.test/create.test.js +152 -0
- package/src/tests/handlers/events/EventsHandler.test/create_form.test.js +41 -0
- package/src/tests/handlers/events/EventsHandler.test/index.test.js +49 -0
- package/src/tests/handlers/events/EventsHandler.test/show.test.js +105 -0
- package/src/tests/handlers/events/URLsHandler.test/create.test.js +155 -0
- package/src/tests/handlers/events/URLsHandler.test/create_form.test.js +51 -0
- package/src/views/articles/translations/create_form.ejs +2 -2
- package/src/views/event_revisions/_nav.ejs +40 -0
- package/src/views/event_revisions/codes/edit_form.ejs +39 -0
- package/src/views/event_revisions/general/edit_form.ejs +72 -0
- package/src/views/event_revisions/locks/create_form.ejs +35 -0
- package/src/views/event_revisions/meta/edit_form.ejs +41 -0
- package/src/views/event_revisions/publishes/_form.ejs +57 -0
- package/src/views/event_revisions/publishes/create_form.ejs +10 -0
- package/src/views/event_revisions/tags/edit_form.ejs +64 -0
- package/src/views/event_revisions/visuals/edit_form.ejs +42 -0
- package/src/views/events/_form.ejs +88 -0
- package/src/views/events/create_form.ejs +9 -0
- package/src/views/events/deletes/create_form.ejs +55 -0
- package/src/views/events/edit_form.ejs +3 -0
- package/src/views/events/index.ejs +161 -0
- package/src/views/events/show.ejs +281 -0
- package/src/views/events/translations/_form.ejs +79 -0
- package/src/views/events/translations/create_form.ejs +11 -0
- package/src/views/events/urls/create_form.ejs +31 -0
- package/test/factory.js +42 -3
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
import CodeHandler from "../../../../handlers/event_revisions/CodeHandler";
|
|
2
|
+
import EventRevisions from "../../../../cloud/EventRevisions";
|
|
3
|
+
import { testConfig } from "../../../../../test/handlersHelper";
|
|
4
|
+
import Factory from "../../../../../test/factory";
|
|
5
|
+
|
|
6
|
+
function buildCtx(revision, updateSettings) {
|
|
7
|
+
return {
|
|
8
|
+
client: {
|
|
9
|
+
eventRevisions: new EventRevisions(testConfig, "token"),
|
|
10
|
+
},
|
|
11
|
+
params: { parent_id: revision.id },
|
|
12
|
+
resourceParams: {
|
|
13
|
+
code_settings: updateSettings,
|
|
14
|
+
},
|
|
15
|
+
locale: "en",
|
|
16
|
+
};
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
describe("Event revision code settings", () => {
|
|
20
|
+
test("update successful", async () => {
|
|
21
|
+
const revision = Factory.build("event_revision");
|
|
22
|
+
|
|
23
|
+
const updateSettings = {
|
|
24
|
+
scripts: JSON.stringify([{ type: "bla" }]),
|
|
25
|
+
structured_data: JSON.stringify({ type: "event" }),
|
|
26
|
+
};
|
|
27
|
+
|
|
28
|
+
const ctx = buildCtx(revision, updateSettings);
|
|
29
|
+
|
|
30
|
+
const mockFind = jest
|
|
31
|
+
.spyOn(ctx.client.eventRevisions, "find")
|
|
32
|
+
.mockImplementation(() => revision);
|
|
33
|
+
|
|
34
|
+
const mockUpdate = jest
|
|
35
|
+
.spyOn(ctx.client.eventRevisions, "update")
|
|
36
|
+
.mockImplementation(() => ({
|
|
37
|
+
revision: {},
|
|
38
|
+
errors: null,
|
|
39
|
+
}));
|
|
40
|
+
|
|
41
|
+
const result = await CodeHandler.update(ctx);
|
|
42
|
+
|
|
43
|
+
expect(mockFind).toHaveBeenCalledWith(revision.id, "en");
|
|
44
|
+
expect(mockUpdate).toHaveBeenCalledWith(revision.id, "en", {
|
|
45
|
+
slug: revision.slug,
|
|
46
|
+
title: revision.title,
|
|
47
|
+
visibility: revision.visibility,
|
|
48
|
+
publishAt: revision.publishAt,
|
|
49
|
+
startsAt: revision.startsAt,
|
|
50
|
+
endsAt: revision.endsAt,
|
|
51
|
+
widgets: JSON.stringify(revision.widgets),
|
|
52
|
+
tags: revision.tags.map((t) => t.id),
|
|
53
|
+
categories: revision.categories.map((c) => c.id),
|
|
54
|
+
settings: JSON.stringify({
|
|
55
|
+
...revision.settings,
|
|
56
|
+
codes: {
|
|
57
|
+
scripts: [{ type: "bla" }],
|
|
58
|
+
structured_data: { type: "event" },
|
|
59
|
+
},
|
|
60
|
+
}),
|
|
61
|
+
});
|
|
62
|
+
|
|
63
|
+
expect(result).toEqual({
|
|
64
|
+
redirect: `/en/event_revisions/${revision.id}/codes/edit`,
|
|
65
|
+
});
|
|
66
|
+
});
|
|
67
|
+
|
|
68
|
+
test("update failed", async () => {
|
|
69
|
+
const revision = Factory.build("event_revision");
|
|
70
|
+
|
|
71
|
+
const updateSettings = {
|
|
72
|
+
scripts: JSON.stringify([{ type: "bla" }]),
|
|
73
|
+
structured_data: JSON.stringify({ type: "event" }),
|
|
74
|
+
};
|
|
75
|
+
|
|
76
|
+
const ctx = buildCtx(revision, updateSettings);
|
|
77
|
+
|
|
78
|
+
const mockFind = jest
|
|
79
|
+
.spyOn(ctx.client.eventRevisions, "find")
|
|
80
|
+
.mockImplementation(() => revision);
|
|
81
|
+
|
|
82
|
+
const mockUpdate = jest
|
|
83
|
+
.spyOn(ctx.client.eventRevisions, "update")
|
|
84
|
+
.mockImplementation(() => ({
|
|
85
|
+
revision: {},
|
|
86
|
+
errors: [{ key: "generalError", message: "some error" }],
|
|
87
|
+
}));
|
|
88
|
+
|
|
89
|
+
const result = await CodeHandler.update(ctx);
|
|
90
|
+
|
|
91
|
+
expect(mockFind).toHaveBeenCalledWith(revision.id, "en");
|
|
92
|
+
expect(mockUpdate).toHaveBeenCalledWith(revision.id, "en", {
|
|
93
|
+
slug: revision.slug,
|
|
94
|
+
title: revision.title,
|
|
95
|
+
visibility: revision.visibility,
|
|
96
|
+
publishAt: revision.publishAt,
|
|
97
|
+
startsAt: revision.startsAt,
|
|
98
|
+
endsAt: revision.endsAt,
|
|
99
|
+
widgets: JSON.stringify(revision.widgets),
|
|
100
|
+
tags: revision.tags.map((t) => t.id),
|
|
101
|
+
categories: revision.categories.map((c) => c.id),
|
|
102
|
+
settings: JSON.stringify({
|
|
103
|
+
...revision.settings,
|
|
104
|
+
codes: {
|
|
105
|
+
scripts: [{ type: "bla" }],
|
|
106
|
+
structured_data: { type: "event" },
|
|
107
|
+
},
|
|
108
|
+
}),
|
|
109
|
+
});
|
|
110
|
+
|
|
111
|
+
expect(result).toEqual({
|
|
112
|
+
assigns: {
|
|
113
|
+
code_settings: {
|
|
114
|
+
...updateSettings,
|
|
115
|
+
id: revision.id,
|
|
116
|
+
originalId: revision.originalId,
|
|
117
|
+
},
|
|
118
|
+
errors: {
|
|
119
|
+
code_settings: { generalError: "some error" },
|
|
120
|
+
},
|
|
121
|
+
_translations: [],
|
|
122
|
+
},
|
|
123
|
+
});
|
|
124
|
+
});
|
|
125
|
+
|
|
126
|
+
test("update when a revision does not exist", async () => {
|
|
127
|
+
const revision = Factory.build("event_revision");
|
|
128
|
+
|
|
129
|
+
const updateSettings = {};
|
|
130
|
+
|
|
131
|
+
const ctx = buildCtx(revision, updateSettings);
|
|
132
|
+
|
|
133
|
+
const mockFind = jest
|
|
134
|
+
.spyOn(ctx.client.eventRevisions, "find")
|
|
135
|
+
.mockImplementation(() => null);
|
|
136
|
+
|
|
137
|
+
expect(async () => {
|
|
138
|
+
await CodeHandler.update(ctx);
|
|
139
|
+
}).rejects.toThrow(`Missing revision #${revision.id}`);
|
|
140
|
+
|
|
141
|
+
expect(mockFind).toHaveBeenCalledWith(revision.id, "en");
|
|
142
|
+
});
|
|
143
|
+
});
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import GeneralHandler from "../../../../handlers/event_revisions/GeneralHandler";
|
|
2
|
+
import EventRevisions from "../../../../cloud/EventRevisions";
|
|
3
|
+
import Events from "../../../../cloud/Events";
|
|
4
|
+
import { testConfig } from "../../../../../test/handlersHelper";
|
|
5
|
+
import Factory from "../../../../../test/factory";
|
|
6
|
+
|
|
7
|
+
function buildCtx(revision) {
|
|
8
|
+
return {
|
|
9
|
+
client: {
|
|
10
|
+
eventRevisions: new EventRevisions(testConfig, "token"),
|
|
11
|
+
events: new Events(testConfig, "token"),
|
|
12
|
+
},
|
|
13
|
+
params: { parent_id: revision.id },
|
|
14
|
+
locale: "en",
|
|
15
|
+
};
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
describe("Event revision genereal settings", () => {
|
|
19
|
+
test("edit_form when a revision exists", async () => {
|
|
20
|
+
const revision = Factory.build("event_revision", {
|
|
21
|
+
publishAt: "2024-08-30T19:05:00Z",
|
|
22
|
+
startsAt: "2024-08-30T19:10:00Z",
|
|
23
|
+
endsAt: "2024-08-30T19:15:00Z",
|
|
24
|
+
});
|
|
25
|
+
const ctx = buildCtx(revision);
|
|
26
|
+
|
|
27
|
+
const mockFind = jest
|
|
28
|
+
.spyOn(ctx.client.eventRevisions, "find")
|
|
29
|
+
.mockImplementation(() => revision);
|
|
30
|
+
|
|
31
|
+
const result = await GeneralHandler.edit_form(ctx);
|
|
32
|
+
|
|
33
|
+
expect(mockFind).toHaveBeenCalledWith(revision.id, "en");
|
|
34
|
+
|
|
35
|
+
expect(result).toEqual({
|
|
36
|
+
assigns: {
|
|
37
|
+
general_settings: {
|
|
38
|
+
id: revision.id,
|
|
39
|
+
originalId: revision.originalId,
|
|
40
|
+
title: revision.title,
|
|
41
|
+
slug: revision.slug,
|
|
42
|
+
visibility: revision.visibility,
|
|
43
|
+
publish_at: "2024-08-30T22:05",
|
|
44
|
+
starts_at: "2024-08-30T22:10",
|
|
45
|
+
ends_at: "2024-08-30T22:15",
|
|
46
|
+
username: revision.settings?.credentials?.user || "",
|
|
47
|
+
password: revision.settings?.credentials?.password || "",
|
|
48
|
+
},
|
|
49
|
+
errors: {},
|
|
50
|
+
visibilityOptions: ctx.client.events.visibilityOptions(),
|
|
51
|
+
_translations: [],
|
|
52
|
+
},
|
|
53
|
+
});
|
|
54
|
+
});
|
|
55
|
+
|
|
56
|
+
test("edit_form when a revision does not exist", async () => {
|
|
57
|
+
const ctx = buildCtx({ id: "42" });
|
|
58
|
+
|
|
59
|
+
const mockFind = jest
|
|
60
|
+
.spyOn(ctx.client.eventRevisions, "find")
|
|
61
|
+
.mockImplementation(() => null);
|
|
62
|
+
|
|
63
|
+
expect(async () => {
|
|
64
|
+
await GeneralHandler.edit_form(ctx);
|
|
65
|
+
}).rejects.toThrow("Missing revision #42");
|
|
66
|
+
|
|
67
|
+
expect(mockFind).toHaveBeenCalledWith("42", "en");
|
|
68
|
+
});
|
|
69
|
+
});
|
|
@@ -0,0 +1,158 @@
|
|
|
1
|
+
import GeneralHandler from "../../../../handlers/event_revisions/GeneralHandler";
|
|
2
|
+
import EventRevisions from "../../../../cloud/EventRevisions";
|
|
3
|
+
import Events from "../../../../cloud/Events";
|
|
4
|
+
import { testConfig } from "../../../../../test/handlersHelper";
|
|
5
|
+
import Factory from "../../../../../test/factory";
|
|
6
|
+
|
|
7
|
+
function buildCtx(revision, updateSettings) {
|
|
8
|
+
return {
|
|
9
|
+
client: {
|
|
10
|
+
eventRevisions: new EventRevisions(testConfig, "token"),
|
|
11
|
+
events: new Events(testConfig, "token"),
|
|
12
|
+
},
|
|
13
|
+
params: { parent_id: revision.id },
|
|
14
|
+
resourceParams: {
|
|
15
|
+
general_settings: updateSettings,
|
|
16
|
+
},
|
|
17
|
+
locale: "en",
|
|
18
|
+
};
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
describe("Event revision general settings", () => {
|
|
22
|
+
test("update successful", async () => {
|
|
23
|
+
const revision = Factory.build("event_revision");
|
|
24
|
+
|
|
25
|
+
const updateSettings = {
|
|
26
|
+
title: "Updated title",
|
|
27
|
+
slug: "/updated-url",
|
|
28
|
+
visibility: "protected",
|
|
29
|
+
publish_at: "2024-08-30T19:05",
|
|
30
|
+
starts_at: "2024-08-30T19:10",
|
|
31
|
+
ends_at: "2024-08-30T19:15",
|
|
32
|
+
username: "user",
|
|
33
|
+
password: "admin123!@#",
|
|
34
|
+
};
|
|
35
|
+
|
|
36
|
+
const ctx = buildCtx(revision, updateSettings);
|
|
37
|
+
|
|
38
|
+
const mockFind = jest
|
|
39
|
+
.spyOn(ctx.client.eventRevisions, "find")
|
|
40
|
+
.mockImplementation(() => revision);
|
|
41
|
+
|
|
42
|
+
const mockUpdate = jest
|
|
43
|
+
.spyOn(ctx.client.eventRevisions, "update")
|
|
44
|
+
.mockImplementation(() => ({
|
|
45
|
+
revision: {},
|
|
46
|
+
errors: null,
|
|
47
|
+
}));
|
|
48
|
+
|
|
49
|
+
const result = await GeneralHandler.update(ctx);
|
|
50
|
+
|
|
51
|
+
expect(mockFind).toHaveBeenCalledWith(revision.id, "en");
|
|
52
|
+
expect(mockUpdate).toHaveBeenCalledWith(revision.id, "en", {
|
|
53
|
+
slug: updateSettings.slug,
|
|
54
|
+
title: updateSettings.title,
|
|
55
|
+
visibility: updateSettings.visibility,
|
|
56
|
+
publishAt: "2024-08-30T16:05:00Z",
|
|
57
|
+
startsAt: "2024-08-30T16:10:00Z",
|
|
58
|
+
endsAt: "2024-08-30T16:15:00Z",
|
|
59
|
+
widgets: JSON.stringify(revision.widgets),
|
|
60
|
+
tags: revision.tags.map((t) => t.id),
|
|
61
|
+
categories: revision.categories.map((c) => c.id),
|
|
62
|
+
settings: JSON.stringify({
|
|
63
|
+
...revision.settings,
|
|
64
|
+
credentials: {
|
|
65
|
+
user: updateSettings.username,
|
|
66
|
+
password: updateSettings.password,
|
|
67
|
+
},
|
|
68
|
+
}),
|
|
69
|
+
});
|
|
70
|
+
|
|
71
|
+
expect(result).toEqual({
|
|
72
|
+
redirect: `/en/event_revisions/${revision.id}/general/edit`,
|
|
73
|
+
});
|
|
74
|
+
});
|
|
75
|
+
|
|
76
|
+
test("update failed", async () => {
|
|
77
|
+
const revision = Factory.build("event_revision");
|
|
78
|
+
|
|
79
|
+
const updateSettings = {
|
|
80
|
+
title: "Updated title",
|
|
81
|
+
slug: "/updated-url",
|
|
82
|
+
visibility: "protected",
|
|
83
|
+
publish_at: "2024-08-30T19:05",
|
|
84
|
+
starts_at: "2024-08-30T19:10",
|
|
85
|
+
ends_at: "2024-08-30T19:15",
|
|
86
|
+
username: "user",
|
|
87
|
+
password: "admin123!@#",
|
|
88
|
+
};
|
|
89
|
+
|
|
90
|
+
const ctx = buildCtx(revision, updateSettings);
|
|
91
|
+
|
|
92
|
+
const mockFind = jest
|
|
93
|
+
.spyOn(ctx.client.eventRevisions, "find")
|
|
94
|
+
.mockImplementation(() => revision);
|
|
95
|
+
|
|
96
|
+
const mockUpdate = jest
|
|
97
|
+
.spyOn(ctx.client.eventRevisions, "update")
|
|
98
|
+
.mockImplementation(() => ({
|
|
99
|
+
revision: {},
|
|
100
|
+
errors: [{ key: "slug", message: "has invalid format" }],
|
|
101
|
+
}));
|
|
102
|
+
|
|
103
|
+
const result = await GeneralHandler.update(ctx);
|
|
104
|
+
|
|
105
|
+
expect(mockFind).toHaveBeenCalledWith(revision.id, "en");
|
|
106
|
+
expect(mockUpdate).toHaveBeenCalledWith(revision.id, "en", {
|
|
107
|
+
slug: updateSettings.slug,
|
|
108
|
+
title: updateSettings.title,
|
|
109
|
+
visibility: updateSettings.visibility,
|
|
110
|
+
publishAt: "2024-08-30T16:05:00Z",
|
|
111
|
+
startsAt: "2024-08-30T16:10:00Z",
|
|
112
|
+
endsAt: "2024-08-30T16:15:00Z",
|
|
113
|
+
widgets: JSON.stringify(revision.widgets),
|
|
114
|
+
tags: revision.tags.map((t) => t.id),
|
|
115
|
+
categories: revision.categories.map((c) => c.id),
|
|
116
|
+
settings: JSON.stringify({
|
|
117
|
+
...revision.settings,
|
|
118
|
+
credentials: {
|
|
119
|
+
user: updateSettings.username,
|
|
120
|
+
password: updateSettings.password,
|
|
121
|
+
},
|
|
122
|
+
}),
|
|
123
|
+
});
|
|
124
|
+
|
|
125
|
+
expect(result).toEqual({
|
|
126
|
+
assigns: {
|
|
127
|
+
general_settings: {
|
|
128
|
+
...updateSettings,
|
|
129
|
+
id: revision.id,
|
|
130
|
+
originalId: revision.originalId,
|
|
131
|
+
},
|
|
132
|
+
errors: {
|
|
133
|
+
general_settings: { slug: "has invalid format" },
|
|
134
|
+
},
|
|
135
|
+
visibilityOptions: ctx.client.events.visibilityOptions(),
|
|
136
|
+
_translations: [],
|
|
137
|
+
},
|
|
138
|
+
});
|
|
139
|
+
});
|
|
140
|
+
|
|
141
|
+
test("update when a revision does not exist", async () => {
|
|
142
|
+
const revision = Factory.build("event_revision");
|
|
143
|
+
|
|
144
|
+
const updateSettings = {};
|
|
145
|
+
|
|
146
|
+
const ctx = buildCtx(revision, updateSettings);
|
|
147
|
+
|
|
148
|
+
const mockFind = jest
|
|
149
|
+
.spyOn(ctx.client.eventRevisions, "find")
|
|
150
|
+
.mockImplementation(() => null);
|
|
151
|
+
|
|
152
|
+
expect(async () => {
|
|
153
|
+
await GeneralHandler.update(ctx);
|
|
154
|
+
}).rejects.toThrow(`Missing revision #${revision.id}`);
|
|
155
|
+
|
|
156
|
+
expect(mockFind).toHaveBeenCalledWith(revision.id, "en");
|
|
157
|
+
});
|
|
158
|
+
});
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import MetaHandler from "../../../../handlers/event_revisions/MetaHandler";
|
|
2
|
+
import EventRevisions from "../../../../cloud/EventRevisions";
|
|
3
|
+
import { testConfig } from "../../../../../test/handlersHelper";
|
|
4
|
+
import Factory from "../../../../../test/factory";
|
|
5
|
+
|
|
6
|
+
function buildCtx(revision) {
|
|
7
|
+
return {
|
|
8
|
+
client: {
|
|
9
|
+
eventRevisions: new EventRevisions(testConfig, "token"),
|
|
10
|
+
},
|
|
11
|
+
params: { parent_id: revision.id },
|
|
12
|
+
locale: "en",
|
|
13
|
+
};
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
describe("Event revision meta settings", () => {
|
|
17
|
+
test("edit_form when a revision exists", async () => {
|
|
18
|
+
const revision = Factory.build("event_revision");
|
|
19
|
+
const ctx = buildCtx(revision);
|
|
20
|
+
|
|
21
|
+
const mockFind = jest
|
|
22
|
+
.spyOn(ctx.client.eventRevisions, "find")
|
|
23
|
+
.mockImplementation(() => revision);
|
|
24
|
+
|
|
25
|
+
const result = await MetaHandler.edit_form(ctx);
|
|
26
|
+
|
|
27
|
+
expect(mockFind).toHaveBeenCalledWith(revision.id, "en");
|
|
28
|
+
|
|
29
|
+
expect(result).toEqual({
|
|
30
|
+
assigns: {
|
|
31
|
+
meta_settings: {
|
|
32
|
+
id: revision.id,
|
|
33
|
+
originalId: revision.originalId,
|
|
34
|
+
title: revision.settings.meta.title,
|
|
35
|
+
description: revision.settings.meta.description,
|
|
36
|
+
image: revision.settings.meta.image,
|
|
37
|
+
},
|
|
38
|
+
errors: {},
|
|
39
|
+
_translations: [],
|
|
40
|
+
},
|
|
41
|
+
});
|
|
42
|
+
});
|
|
43
|
+
|
|
44
|
+
test("edit_form when a revision does not exist", async () => {
|
|
45
|
+
const ctx = buildCtx({ id: "42" });
|
|
46
|
+
|
|
47
|
+
const mockFind = jest
|
|
48
|
+
.spyOn(ctx.client.eventRevisions, "find")
|
|
49
|
+
.mockImplementation(() => null);
|
|
50
|
+
|
|
51
|
+
expect(async () => {
|
|
52
|
+
await MetaHandler.edit_form(ctx);
|
|
53
|
+
}).rejects.toThrow("Missing revision #42");
|
|
54
|
+
|
|
55
|
+
expect(mockFind).toHaveBeenCalledWith("42", "en");
|
|
56
|
+
});
|
|
57
|
+
});
|
|
@@ -0,0 +1,147 @@
|
|
|
1
|
+
import MetaHandler from "../../../../handlers/event_revisions/MetaHandler";
|
|
2
|
+
import EventRevisions from "../../../../cloud/EventRevisions";
|
|
3
|
+
import { testConfig } from "../../../../../test/handlersHelper";
|
|
4
|
+
import Factory from "../../../../../test/factory";
|
|
5
|
+
|
|
6
|
+
function buildCtx(revision, updateSettings) {
|
|
7
|
+
return {
|
|
8
|
+
client: {
|
|
9
|
+
eventRevisions: new EventRevisions(testConfig, "token"),
|
|
10
|
+
},
|
|
11
|
+
params: { parent_id: revision.id },
|
|
12
|
+
resourceParams: {
|
|
13
|
+
meta_settings: updateSettings,
|
|
14
|
+
},
|
|
15
|
+
locale: "en",
|
|
16
|
+
};
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
describe("Event revision meta settings", () => {
|
|
20
|
+
test("update successful", async () => {
|
|
21
|
+
const revision = Factory.build("event_revision");
|
|
22
|
+
|
|
23
|
+
const updateSettings = {
|
|
24
|
+
title: "An open graph title",
|
|
25
|
+
description: "An open graph description",
|
|
26
|
+
image: JSON.stringify({ id: 42 }),
|
|
27
|
+
};
|
|
28
|
+
|
|
29
|
+
const ctx = buildCtx(revision, updateSettings);
|
|
30
|
+
|
|
31
|
+
const mockFind = jest
|
|
32
|
+
.spyOn(ctx.client.eventRevisions, "find")
|
|
33
|
+
.mockImplementation(() => revision);
|
|
34
|
+
|
|
35
|
+
const mockUpdate = jest
|
|
36
|
+
.spyOn(ctx.client.eventRevisions, "update")
|
|
37
|
+
.mockImplementation(() => ({
|
|
38
|
+
revision: {},
|
|
39
|
+
errors: null,
|
|
40
|
+
}));
|
|
41
|
+
|
|
42
|
+
const result = await MetaHandler.update(ctx);
|
|
43
|
+
|
|
44
|
+
expect(mockFind).toHaveBeenCalledWith(revision.id, "en");
|
|
45
|
+
expect(mockUpdate).toHaveBeenCalledWith(revision.id, "en", {
|
|
46
|
+
slug: revision.slug,
|
|
47
|
+
title: revision.title,
|
|
48
|
+
visibility: revision.visibility,
|
|
49
|
+
publishAt: revision.publishAt,
|
|
50
|
+
startsAt: revision.startsAt,
|
|
51
|
+
endsAt: revision.endsAt,
|
|
52
|
+
widgets: JSON.stringify(revision.widgets),
|
|
53
|
+
tags: revision.tags.map((t) => t.id),
|
|
54
|
+
categories: revision.categories.map((c) => c.id),
|
|
55
|
+
settings: JSON.stringify({
|
|
56
|
+
...revision.settings,
|
|
57
|
+
meta: {
|
|
58
|
+
title: updateSettings.title,
|
|
59
|
+
description: updateSettings.description,
|
|
60
|
+
image: { id: 42 },
|
|
61
|
+
},
|
|
62
|
+
}),
|
|
63
|
+
});
|
|
64
|
+
|
|
65
|
+
expect(result).toEqual({
|
|
66
|
+
redirect: `/en/event_revisions/${revision.id}/meta/edit`,
|
|
67
|
+
});
|
|
68
|
+
});
|
|
69
|
+
|
|
70
|
+
test("update failed", async () => {
|
|
71
|
+
const revision = Factory.build("event_revision");
|
|
72
|
+
|
|
73
|
+
const updateSettings = {
|
|
74
|
+
title: "An open graph title",
|
|
75
|
+
description: "An open graph description",
|
|
76
|
+
image: JSON.stringify({ id: 42 }),
|
|
77
|
+
};
|
|
78
|
+
|
|
79
|
+
const ctx = buildCtx(revision, updateSettings);
|
|
80
|
+
|
|
81
|
+
const mockFind = jest
|
|
82
|
+
.spyOn(ctx.client.eventRevisions, "find")
|
|
83
|
+
.mockImplementation(() => revision);
|
|
84
|
+
|
|
85
|
+
const mockUpdate = jest
|
|
86
|
+
.spyOn(ctx.client.eventRevisions, "update")
|
|
87
|
+
.mockImplementation(() => ({
|
|
88
|
+
revision: {},
|
|
89
|
+
errors: [{ key: "generalError", message: "some error" }],
|
|
90
|
+
}));
|
|
91
|
+
|
|
92
|
+
const result = await MetaHandler.update(ctx);
|
|
93
|
+
|
|
94
|
+
expect(mockFind).toHaveBeenCalledWith(revision.id, "en");
|
|
95
|
+
expect(mockUpdate).toHaveBeenCalledWith(revision.id, "en", {
|
|
96
|
+
slug: revision.slug,
|
|
97
|
+
title: revision.title,
|
|
98
|
+
visibility: revision.visibility,
|
|
99
|
+
publishAt: revision.publishAt,
|
|
100
|
+
startsAt: revision.startsAt,
|
|
101
|
+
endsAt: revision.endsAt,
|
|
102
|
+
widgets: JSON.stringify(revision.widgets),
|
|
103
|
+
tags: revision.tags.map((t) => t.id),
|
|
104
|
+
categories: revision.categories.map((c) => c.id),
|
|
105
|
+
settings: JSON.stringify({
|
|
106
|
+
...revision.settings,
|
|
107
|
+
meta: {
|
|
108
|
+
title: updateSettings.title,
|
|
109
|
+
description: updateSettings.description,
|
|
110
|
+
image: { id: 42 },
|
|
111
|
+
},
|
|
112
|
+
}),
|
|
113
|
+
});
|
|
114
|
+
|
|
115
|
+
expect(result).toEqual({
|
|
116
|
+
assigns: {
|
|
117
|
+
meta_settings: {
|
|
118
|
+
...updateSettings,
|
|
119
|
+
id: revision.id,
|
|
120
|
+
originalId: revision.originalId,
|
|
121
|
+
},
|
|
122
|
+
errors: {
|
|
123
|
+
meta_settings: { generalError: "some error" },
|
|
124
|
+
},
|
|
125
|
+
_translations: [],
|
|
126
|
+
},
|
|
127
|
+
});
|
|
128
|
+
});
|
|
129
|
+
|
|
130
|
+
test("update when a revision does not exist", async () => {
|
|
131
|
+
const revision = Factory.build("event_revision");
|
|
132
|
+
|
|
133
|
+
const updateSettings = {};
|
|
134
|
+
|
|
135
|
+
const ctx = buildCtx(revision, updateSettings);
|
|
136
|
+
|
|
137
|
+
const mockFind = jest
|
|
138
|
+
.spyOn(ctx.client.eventRevisions, "find")
|
|
139
|
+
.mockImplementation(() => null);
|
|
140
|
+
|
|
141
|
+
expect(async () => {
|
|
142
|
+
await MetaHandler.update(ctx);
|
|
143
|
+
}).rejects.toThrow(`Missing revision #${revision.id}`);
|
|
144
|
+
|
|
145
|
+
expect(mockFind).toHaveBeenCalledWith(revision.id, "en");
|
|
146
|
+
});
|
|
147
|
+
});
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
import EventRevisionsHandler from "../../../../handlers/event_revisions/EventRevisionsHandler";
|
|
2
|
+
import EventRevisions from "../../../../cloud/EventRevisions";
|
|
3
|
+
import { testConfig } from "../../../../../test/handlersHelper";
|
|
4
|
+
import Factory from "../../../../../test/factory";
|
|
5
|
+
|
|
6
|
+
function buildCtx(eventID) {
|
|
7
|
+
return {
|
|
8
|
+
client: {
|
|
9
|
+
eventRevisions: new EventRevisions(testConfig, "token"),
|
|
10
|
+
},
|
|
11
|
+
params: { parent_id: eventID },
|
|
12
|
+
locale: "en",
|
|
13
|
+
};
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
describe("Event revisions", () => {
|
|
17
|
+
test("create successful", async () => {
|
|
18
|
+
const revision = Factory.build("event_revision", { originalId: 1 });
|
|
19
|
+
const ctx = buildCtx(revision.originalId);
|
|
20
|
+
|
|
21
|
+
const mockCreate = jest
|
|
22
|
+
.spyOn(ctx.client.eventRevisions, "create")
|
|
23
|
+
.mockImplementation(() => ({
|
|
24
|
+
revision,
|
|
25
|
+
errors: null,
|
|
26
|
+
eventErrors: null,
|
|
27
|
+
}));
|
|
28
|
+
|
|
29
|
+
const result = await EventRevisionsHandler.create(ctx);
|
|
30
|
+
|
|
31
|
+
expect(mockCreate).toHaveBeenCalledWith(revision.originalId, "en");
|
|
32
|
+
|
|
33
|
+
expect(result).toEqual({
|
|
34
|
+
redirect: `/en/events/${revision.originalId}`,
|
|
35
|
+
});
|
|
36
|
+
});
|
|
37
|
+
|
|
38
|
+
test("create failed with errors", async () => {
|
|
39
|
+
const ctx = buildCtx(1);
|
|
40
|
+
const errors = [{ key: "generalError", message: "something went wrong" }];
|
|
41
|
+
|
|
42
|
+
const mockCreate = jest
|
|
43
|
+
.spyOn(ctx.client.eventRevisions, "create")
|
|
44
|
+
.mockImplementation(() => ({
|
|
45
|
+
revision: null,
|
|
46
|
+
errors,
|
|
47
|
+
eventErrors: null,
|
|
48
|
+
}));
|
|
49
|
+
|
|
50
|
+
expect(async () => {
|
|
51
|
+
await EventRevisionsHandler.create(ctx);
|
|
52
|
+
}).rejects.toThrow(`Failed to start revision: ${JSON.stringify(errors)}`);
|
|
53
|
+
|
|
54
|
+
expect(mockCreate).toHaveBeenCalledWith(1, "en");
|
|
55
|
+
});
|
|
56
|
+
|
|
57
|
+
test("create failed with event errors", async () => {
|
|
58
|
+
const ctx = buildCtx(1);
|
|
59
|
+
const errors = [{ key: "generalError", message: "something went wrong" }];
|
|
60
|
+
|
|
61
|
+
const mockCreate = jest
|
|
62
|
+
.spyOn(ctx.client.eventRevisions, "create")
|
|
63
|
+
.mockImplementation(() => ({
|
|
64
|
+
revision: null,
|
|
65
|
+
errors: null,
|
|
66
|
+
eventErrors: errors,
|
|
67
|
+
}));
|
|
68
|
+
|
|
69
|
+
expect(async () => {
|
|
70
|
+
await EventRevisionsHandler.create(ctx);
|
|
71
|
+
}).rejects.toThrow(`Failed to start revision: ${JSON.stringify(errors)}`);
|
|
72
|
+
|
|
73
|
+
expect(mockCreate).toHaveBeenCalledWith(1, "en");
|
|
74
|
+
});
|
|
75
|
+
});
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import EventRevisionsHandler from "../../../../handlers/event_revisions/EventRevisionsHandler";
|
|
2
|
+
import EventRevisions from "../../../../cloud/EventRevisions";
|
|
3
|
+
import { testConfig } from "../../../../../test/handlersHelper";
|
|
4
|
+
import Factory from "../../../../../test/factory";
|
|
5
|
+
|
|
6
|
+
function buildCtx(revisionID) {
|
|
7
|
+
return {
|
|
8
|
+
client: {
|
|
9
|
+
eventRevisions: new EventRevisions(testConfig, "token"),
|
|
10
|
+
},
|
|
11
|
+
params: { id: revisionID },
|
|
12
|
+
locale: "en",
|
|
13
|
+
};
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
describe("Event revisions", () => {
|
|
17
|
+
test("destroy successful", async () => {
|
|
18
|
+
const revision = Factory.build("event_revision");
|
|
19
|
+
const ctx = buildCtx(1);
|
|
20
|
+
|
|
21
|
+
const mockDelete = jest
|
|
22
|
+
.spyOn(ctx.client.eventRevisions, "delete")
|
|
23
|
+
.mockImplementation(() => ({ revision, errors: null }));
|
|
24
|
+
|
|
25
|
+
const result = await EventRevisionsHandler.destroy(ctx);
|
|
26
|
+
|
|
27
|
+
expect(mockDelete).toHaveBeenCalledWith(1, "en");
|
|
28
|
+
|
|
29
|
+
expect(result).toEqual({
|
|
30
|
+
headers: {
|
|
31
|
+
"HX-Redirect": `/en/events/${revision.originalId}`,
|
|
32
|
+
},
|
|
33
|
+
json: {},
|
|
34
|
+
});
|
|
35
|
+
});
|
|
36
|
+
|
|
37
|
+
test("destroy failed", async () => {
|
|
38
|
+
const ctx = buildCtx(1);
|
|
39
|
+
const errors = [{ key: "generalError", message: "something went wrong" }];
|
|
40
|
+
|
|
41
|
+
const mockDelete = jest
|
|
42
|
+
.spyOn(ctx.client.eventRevisions, "delete")
|
|
43
|
+
.mockImplementation(() => ({ revision: null, errors }));
|
|
44
|
+
|
|
45
|
+
expect(async () => {
|
|
46
|
+
await EventRevisionsHandler.destroy(ctx);
|
|
47
|
+
}).rejects.toThrow(
|
|
48
|
+
`Failed to delete revision#${1}: ${JSON.stringify(errors)}`
|
|
49
|
+
);
|
|
50
|
+
|
|
51
|
+
expect(mockDelete).toHaveBeenCalledWith(1, "en");
|
|
52
|
+
});
|
|
53
|
+
});
|