@raketa-cloud/admin 0.0.14 → 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/ArticleChanges.js +15 -0
- package/src/cloud/ArticleRevisions.js +152 -0
- package/src/cloud/Articles.js +133 -0
- 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/articlesDocuments.js +109 -469
- package/src/cloud/documents/common.js +20 -0
- package/src/cloud/documents/eventsDocuments.js +254 -0
- package/src/handlers/article_revisions/ArticleRevisionsHandler.js +49 -0
- package/src/handlers/article_revisions/CodeHandler.js +90 -0
- package/src/handlers/article_revisions/GeneralHandler.js +95 -0
- package/src/handlers/article_revisions/LocksHandler.js +54 -0
- package/src/handlers/article_revisions/MetaHandler.js +90 -0
- package/src/handlers/article_revisions/PublishesHandler.js +90 -0
- package/src/handlers/article_revisions/RevertsHandler.js +28 -0
- package/src/handlers/article_revisions/TagHandler.js +89 -0
- package/src/handlers/article_revisions/UnlocksHandler.js +22 -0
- package/src/handlers/article_revisions/VisualHandler.js +84 -0
- package/src/handlers/article_revisions/WidgetHandler.js +47 -0
- package/src/handlers/articles/ArticlesHandler.js +119 -0
- package/src/handlers/articles/ClonesHandler.js +17 -0
- package/src/handlers/articles/DeletesHandler.js +68 -0
- package/src/handlers/articles/TranslationsHandler.js +103 -0
- package/src/handlers/articles/URLsHandler.js +71 -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/handlers/pages/PagesHandler.js +4 -2
- package/src/handlers/pages/TranslationsHandler.js +7 -5
- package/src/index.js +44 -0
- package/src/routeArticles.js +65 -0
- package/src/routeEvents.js +55 -0
- package/src/routeStandard.js +4 -0
- package/src/setupCloud.js +24 -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/articles/ArticlesHandler.test/create.test.js +144 -0
- package/src/tests/handlers/articles/ArticlesHandler.test/create_form.test.js +41 -0
- package/src/tests/handlers/articles/ArticlesHandler.test/index.test.js +49 -0
- package/src/tests/handlers/articles/ArticlesHandler.test/show.test.js +105 -0
- package/src/tests/handlers/articles/ConesHandler.test/create.test.js +54 -0
- package/src/tests/handlers/articles/DeletesHandler.test/create.test.js +110 -0
- package/src/tests/handlers/articles/DeletesHandler.test/create_form.test.js +54 -0
- package/src/tests/handlers/articles/URLsHandler.test/create.test.js +155 -0
- package/src/tests/handlers/articles/URLsHandler.test/create_form.test.js +51 -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/tests/handlers/pages/PagesHandler.test/create.test.js +3 -3
- package/src/utils.js +46 -0
- package/src/views/article_revisions/_nav.ejs +40 -0
- package/src/views/article_revisions/codes/edit_form.ejs +39 -0
- package/src/views/article_revisions/general/edit_form.ejs +70 -0
- package/src/views/article_revisions/locks/create_form.ejs +35 -0
- package/src/views/article_revisions/meta/edit_form.ejs +41 -0
- package/src/views/article_revisions/publishes/_form.ejs +57 -0
- package/src/views/article_revisions/publishes/create_form.ejs +10 -0
- package/src/views/article_revisions/tags/edit_form.ejs +64 -0
- package/src/views/article_revisions/visuals/edit_form.ejs +42 -0
- package/src/views/articles/_form.ejs +86 -0
- package/src/views/articles/create_form.ejs +9 -0
- package/src/views/articles/deletes/create_form.ejs +55 -0
- package/src/views/articles/edit_form.ejs +3 -0
- package/src/views/articles/index.ejs +161 -0
- package/src/views/articles/show.ejs +281 -0
- package/src/views/articles/translations/_form.ejs +77 -0
- package/src/views/articles/translations/create_form.ejs +11 -0
- package/src/views/articles/urls/create_form.ejs +31 -0
- 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/src/views/page_revisions/locks/create_form.ejs +1 -1
- package/test/factory.js +76 -0
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
import DeletesHandler from "../../../../handlers/articles/DeletesHandler";
|
|
2
|
+
import Articles from "../../../../cloud/Articles";
|
|
3
|
+
import Factory from "../../../../../test/factory";
|
|
4
|
+
import { testConfig } from "../../../../../test//handlersHelper";
|
|
5
|
+
|
|
6
|
+
function buildCtx(article, updateSettings) {
|
|
7
|
+
return {
|
|
8
|
+
client: {
|
|
9
|
+
articles: new Articles(testConfig, "token"),
|
|
10
|
+
},
|
|
11
|
+
params: { parent_id: article.id },
|
|
12
|
+
resourceParams: {
|
|
13
|
+
deleteAction: updateSettings,
|
|
14
|
+
},
|
|
15
|
+
locale: "en",
|
|
16
|
+
};
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
describe("Article delete", () => {
|
|
20
|
+
test("create successful", async () => {
|
|
21
|
+
const article = Factory.build("article");
|
|
22
|
+
const updateSettings = {
|
|
23
|
+
redirect: "301",
|
|
24
|
+
destination: "/test-dest",
|
|
25
|
+
};
|
|
26
|
+
const ctx = buildCtx(article, updateSettings);
|
|
27
|
+
|
|
28
|
+
const mockFind = jest
|
|
29
|
+
.spyOn(ctx.client.articles, "find")
|
|
30
|
+
.mockImplementation(() => article);
|
|
31
|
+
|
|
32
|
+
const mockDelete = jest
|
|
33
|
+
.spyOn(ctx.client.articles, "delete")
|
|
34
|
+
.mockImplementation(() => ({ article, errors: null }));
|
|
35
|
+
|
|
36
|
+
const result = await DeletesHandler.create(ctx);
|
|
37
|
+
|
|
38
|
+
expect(mockFind).toHaveBeenCalledWith(article.id, "en");
|
|
39
|
+
expect(mockDelete).toHaveBeenCalledWith(article.id, "en", {
|
|
40
|
+
url: `/${article.slug}`,
|
|
41
|
+
destination: updateSettings.destination,
|
|
42
|
+
httpResponseCode: 301,
|
|
43
|
+
note: "Created via article deletion process",
|
|
44
|
+
});
|
|
45
|
+
|
|
46
|
+
expect(result).toEqual({
|
|
47
|
+
redirect: "/en/articles",
|
|
48
|
+
});
|
|
49
|
+
});
|
|
50
|
+
|
|
51
|
+
test("create failed due to redirect create", async () => {
|
|
52
|
+
const article = Factory.build("article");
|
|
53
|
+
const updateSettings = {
|
|
54
|
+
redirect: "410",
|
|
55
|
+
destination: "/test-dest",
|
|
56
|
+
};
|
|
57
|
+
const ctx = buildCtx(article, updateSettings);
|
|
58
|
+
|
|
59
|
+
const mockFind = jest
|
|
60
|
+
.spyOn(ctx.client.articles, "find")
|
|
61
|
+
.mockImplementation(() => article);
|
|
62
|
+
|
|
63
|
+
const mockDelete = jest
|
|
64
|
+
.spyOn(ctx.client.articles, "delete")
|
|
65
|
+
.mockImplementation(() => ({
|
|
66
|
+
article: null,
|
|
67
|
+
errors: [
|
|
68
|
+
{
|
|
69
|
+
codes: [],
|
|
70
|
+
key: "generalError",
|
|
71
|
+
message: "url: has already been taken",
|
|
72
|
+
},
|
|
73
|
+
],
|
|
74
|
+
}));
|
|
75
|
+
|
|
76
|
+
const result = await DeletesHandler.create(ctx);
|
|
77
|
+
|
|
78
|
+
expect(mockFind).toHaveBeenCalledWith(article.id, "en");
|
|
79
|
+
expect(mockDelete).toHaveBeenCalledWith(article.id, "en", {
|
|
80
|
+
url: `/${article.slug}`,
|
|
81
|
+
destination: "/",
|
|
82
|
+
httpResponseCode: 410,
|
|
83
|
+
note: "Created via article deletion process",
|
|
84
|
+
});
|
|
85
|
+
|
|
86
|
+
expect(result).toEqual({
|
|
87
|
+
assigns: {
|
|
88
|
+
deleteAction: { ...updateSettings, id: article.id },
|
|
89
|
+
errors: {
|
|
90
|
+
deleteAction: { redirect: "url: has already been taken" },
|
|
91
|
+
},
|
|
92
|
+
_translations: [],
|
|
93
|
+
},
|
|
94
|
+
});
|
|
95
|
+
});
|
|
96
|
+
|
|
97
|
+
test("create for non existing article", async () => {
|
|
98
|
+
const ctx = buildCtx({ id: "42" }, {});
|
|
99
|
+
|
|
100
|
+
const mockFind = jest
|
|
101
|
+
.spyOn(ctx.client.articles, "find")
|
|
102
|
+
.mockImplementation(() => null);
|
|
103
|
+
|
|
104
|
+
expect(async () => {
|
|
105
|
+
await DeletesHandler.create(ctx);
|
|
106
|
+
}).rejects.toThrow("Missing article #42");
|
|
107
|
+
|
|
108
|
+
expect(mockFind).toHaveBeenCalledWith("42", "en");
|
|
109
|
+
});
|
|
110
|
+
});
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import DeletesHandler from "../../../../handlers/articles/DeletesHandler";
|
|
2
|
+
import Articles from "../../../../cloud/Articles";
|
|
3
|
+
import Factory from "../../../../../test/factory";
|
|
4
|
+
import { testConfig } from "../../../../../test//handlersHelper";
|
|
5
|
+
|
|
6
|
+
function buildCtx(article) {
|
|
7
|
+
return {
|
|
8
|
+
client: {
|
|
9
|
+
articles: new Articles(testConfig, "token"),
|
|
10
|
+
},
|
|
11
|
+
params: { parent_id: article.id },
|
|
12
|
+
locale: "en",
|
|
13
|
+
};
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
describe("Article delete", () => {
|
|
17
|
+
test("create_form for existing article", async () => {
|
|
18
|
+
const article = Factory.build("article");
|
|
19
|
+
const ctx = buildCtx(article);
|
|
20
|
+
|
|
21
|
+
const mockFind = jest
|
|
22
|
+
.spyOn(ctx.client.articles, "find")
|
|
23
|
+
.mockImplementation(() => article);
|
|
24
|
+
|
|
25
|
+
const result = await DeletesHandler.create_form(ctx);
|
|
26
|
+
|
|
27
|
+
expect(mockFind).toHaveBeenCalledWith(article.id, "en");
|
|
28
|
+
|
|
29
|
+
expect(result).toEqual({
|
|
30
|
+
assigns: {
|
|
31
|
+
deleteAction: {
|
|
32
|
+
id: article.id,
|
|
33
|
+
redirect: "",
|
|
34
|
+
},
|
|
35
|
+
errors: {},
|
|
36
|
+
_translations: [],
|
|
37
|
+
},
|
|
38
|
+
});
|
|
39
|
+
});
|
|
40
|
+
|
|
41
|
+
test("create_form for non existing article", async () => {
|
|
42
|
+
const ctx = buildCtx({ id: "42" });
|
|
43
|
+
|
|
44
|
+
const mockFind = jest
|
|
45
|
+
.spyOn(ctx.client.articles, "find")
|
|
46
|
+
.mockImplementation(() => null);
|
|
47
|
+
|
|
48
|
+
expect(async () => {
|
|
49
|
+
await DeletesHandler.create_form(ctx);
|
|
50
|
+
}).rejects.toThrow("Missing article #42");
|
|
51
|
+
|
|
52
|
+
expect(mockFind).toHaveBeenCalledWith("42", "en");
|
|
53
|
+
});
|
|
54
|
+
});
|
|
@@ -0,0 +1,155 @@
|
|
|
1
|
+
import URLsHandler from "../../../../handlers/articles/URLsHandler";
|
|
2
|
+
import Articles from "../../../../cloud/Articles";
|
|
3
|
+
import Factory from "../../../../../test/factory";
|
|
4
|
+
import { testConfig } from "../../../../../test/handlersHelper";
|
|
5
|
+
|
|
6
|
+
function buildCtx(article, updateSettings) {
|
|
7
|
+
return {
|
|
8
|
+
client: {
|
|
9
|
+
articles: new Articles(testConfig, "token"),
|
|
10
|
+
},
|
|
11
|
+
params: { parent_id: article.id },
|
|
12
|
+
resourceParams: {
|
|
13
|
+
change: updateSettings,
|
|
14
|
+
},
|
|
15
|
+
locale: "en",
|
|
16
|
+
};
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
describe("Article change url", () => {
|
|
20
|
+
test("create successful", async () => {
|
|
21
|
+
const article = Factory.build("article");
|
|
22
|
+
const updateSettings = {
|
|
23
|
+
slug: "new-slug",
|
|
24
|
+
redirect: "1",
|
|
25
|
+
};
|
|
26
|
+
const ctx = buildCtx(article, updateSettings);
|
|
27
|
+
|
|
28
|
+
const mockFind = jest
|
|
29
|
+
.spyOn(ctx.client.articles, "find")
|
|
30
|
+
.mockImplementation(() => article);
|
|
31
|
+
|
|
32
|
+
const mockChange = jest
|
|
33
|
+
.spyOn(ctx.client.articles, "updateSlug")
|
|
34
|
+
.mockImplementation(() => ({ article, errors: null }));
|
|
35
|
+
|
|
36
|
+
const result = await URLsHandler.create(ctx);
|
|
37
|
+
|
|
38
|
+
expect(mockFind).toHaveBeenCalledWith(article.id, "en");
|
|
39
|
+
expect(mockChange).toHaveBeenCalledWith(
|
|
40
|
+
article.id,
|
|
41
|
+
updateSettings.slug,
|
|
42
|
+
"en",
|
|
43
|
+
{
|
|
44
|
+
url: `/${article.slug}`,
|
|
45
|
+
destination: updateSettings.slug,
|
|
46
|
+
httpResponseCode: 301,
|
|
47
|
+
note: "Created with changed URL for a article",
|
|
48
|
+
}
|
|
49
|
+
);
|
|
50
|
+
|
|
51
|
+
expect(result).toEqual({
|
|
52
|
+
redirect: `/en/articles/${article.id}`,
|
|
53
|
+
});
|
|
54
|
+
});
|
|
55
|
+
|
|
56
|
+
test("create failed due to slug error", async () => {
|
|
57
|
+
const article = Factory.build("article");
|
|
58
|
+
const updateSettings = {
|
|
59
|
+
slug: "new-slug",
|
|
60
|
+
};
|
|
61
|
+
const ctx = buildCtx(article, updateSettings);
|
|
62
|
+
|
|
63
|
+
const mockFind = jest
|
|
64
|
+
.spyOn(ctx.client.articles, "find")
|
|
65
|
+
.mockImplementation(() => article);
|
|
66
|
+
|
|
67
|
+
const mockChange = jest
|
|
68
|
+
.spyOn(ctx.client.articles, "updateSlug")
|
|
69
|
+
.mockImplementation(() => ({
|
|
70
|
+
article: null,
|
|
71
|
+
errors: [{ codes: [], key: "slug", message: "has already been taken" }],
|
|
72
|
+
}));
|
|
73
|
+
|
|
74
|
+
const result = await URLsHandler.create(ctx);
|
|
75
|
+
|
|
76
|
+
expect(mockFind).toHaveBeenCalledWith(article.id, "en");
|
|
77
|
+
expect(mockChange).toHaveBeenCalledWith(
|
|
78
|
+
article.id,
|
|
79
|
+
updateSettings.slug,
|
|
80
|
+
"en",
|
|
81
|
+
null
|
|
82
|
+
);
|
|
83
|
+
|
|
84
|
+
expect(result).toEqual({
|
|
85
|
+
assigns: {
|
|
86
|
+
change: { ...updateSettings, id: article.id },
|
|
87
|
+
errors: { change: { slug: "has already been taken" } },
|
|
88
|
+
_translations: [],
|
|
89
|
+
},
|
|
90
|
+
});
|
|
91
|
+
});
|
|
92
|
+
|
|
93
|
+
test("create failed due to redirect create", async () => {
|
|
94
|
+
const article = Factory.build("article");
|
|
95
|
+
const updateSettings = {
|
|
96
|
+
slug: "new-slug",
|
|
97
|
+
redirect: "1",
|
|
98
|
+
};
|
|
99
|
+
const ctx = buildCtx(article, updateSettings);
|
|
100
|
+
|
|
101
|
+
const mockFind = jest
|
|
102
|
+
.spyOn(ctx.client.articles, "find")
|
|
103
|
+
.mockImplementation(() => article);
|
|
104
|
+
|
|
105
|
+
const mockChange = jest
|
|
106
|
+
.spyOn(ctx.client.articles, "updateSlug")
|
|
107
|
+
.mockImplementation(() => ({
|
|
108
|
+
article: null,
|
|
109
|
+
errors: [
|
|
110
|
+
{
|
|
111
|
+
codes: [],
|
|
112
|
+
key: "generalError",
|
|
113
|
+
message: "url: has already been taken",
|
|
114
|
+
},
|
|
115
|
+
],
|
|
116
|
+
}));
|
|
117
|
+
|
|
118
|
+
const result = await URLsHandler.create(ctx);
|
|
119
|
+
|
|
120
|
+
expect(mockFind).toHaveBeenCalledWith(article.id, "en");
|
|
121
|
+
expect(mockChange).toHaveBeenCalledWith(
|
|
122
|
+
article.id,
|
|
123
|
+
updateSettings.slug,
|
|
124
|
+
"en",
|
|
125
|
+
{
|
|
126
|
+
url: `/${article.slug}`,
|
|
127
|
+
destination: updateSettings.slug,
|
|
128
|
+
httpResponseCode: 301,
|
|
129
|
+
note: "Created with changed URL for a article",
|
|
130
|
+
}
|
|
131
|
+
);
|
|
132
|
+
|
|
133
|
+
expect(result).toEqual({
|
|
134
|
+
assigns: {
|
|
135
|
+
change: { ...updateSettings, id: article.id },
|
|
136
|
+
errors: { change: { redirect: "url: has already been taken" } },
|
|
137
|
+
_translations: [],
|
|
138
|
+
},
|
|
139
|
+
});
|
|
140
|
+
});
|
|
141
|
+
|
|
142
|
+
test("create for non existing article", async () => {
|
|
143
|
+
const ctx = buildCtx({ id: "42" }, {});
|
|
144
|
+
|
|
145
|
+
const mockFind = jest
|
|
146
|
+
.spyOn(ctx.client.articles, "find")
|
|
147
|
+
.mockImplementation(() => null);
|
|
148
|
+
|
|
149
|
+
expect(async () => {
|
|
150
|
+
await URLsHandler.create(ctx);
|
|
151
|
+
}).rejects.toThrow("Cannot find article with id 42");
|
|
152
|
+
|
|
153
|
+
expect(mockFind).toHaveBeenCalledWith("42", "en");
|
|
154
|
+
});
|
|
155
|
+
});
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import URLsHandler from "../../../../handlers/articles/URLsHandler";
|
|
2
|
+
import Articles from "../../../../cloud/Articles";
|
|
3
|
+
import Factory from "../../../../../test/factory";
|
|
4
|
+
import { testConfig } from "../../../../../test/handlersHelper";
|
|
5
|
+
|
|
6
|
+
function buildCtx(article) {
|
|
7
|
+
return {
|
|
8
|
+
client: {
|
|
9
|
+
articles: new Articles(testConfig, "token"),
|
|
10
|
+
},
|
|
11
|
+
params: { parent_id: article.id },
|
|
12
|
+
locale: "en",
|
|
13
|
+
};
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
describe("Article change url", () => {
|
|
17
|
+
test("create_form for existing article", async () => {
|
|
18
|
+
const article = Factory.build("article");
|
|
19
|
+
const ctx = buildCtx(article);
|
|
20
|
+
|
|
21
|
+
const mockFind = jest
|
|
22
|
+
.spyOn(ctx.client.articles, "find")
|
|
23
|
+
.mockImplementation(() => article);
|
|
24
|
+
|
|
25
|
+
const result = await URLsHandler.create_form(ctx);
|
|
26
|
+
|
|
27
|
+
expect(mockFind).toHaveBeenCalledWith(article.id, "en");
|
|
28
|
+
|
|
29
|
+
expect(result).toEqual({
|
|
30
|
+
assigns: {
|
|
31
|
+
change: { slug: article.slug, id: article.id, redirect: null },
|
|
32
|
+
errors: {},
|
|
33
|
+
_translations: [],
|
|
34
|
+
},
|
|
35
|
+
});
|
|
36
|
+
});
|
|
37
|
+
|
|
38
|
+
test("create_form for non existing article", async () => {
|
|
39
|
+
const ctx = buildCtx({ id: "42" });
|
|
40
|
+
|
|
41
|
+
const mockFind = jest
|
|
42
|
+
.spyOn(ctx.client.articles, "find")
|
|
43
|
+
.mockImplementation(() => null);
|
|
44
|
+
|
|
45
|
+
expect(async () => {
|
|
46
|
+
await URLsHandler.create_form(ctx);
|
|
47
|
+
}).rejects.toThrow("Cannot find article with id 42");
|
|
48
|
+
|
|
49
|
+
expect(mockFind).toHaveBeenCalledWith("42", "en");
|
|
50
|
+
});
|
|
51
|
+
});
|
|
@@ -0,0 +1,56 @@
|
|
|
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) {
|
|
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 code 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 CodeHandler.edit_form(ctx);
|
|
26
|
+
|
|
27
|
+
expect(mockFind).toHaveBeenCalledWith(revision.id, "en");
|
|
28
|
+
|
|
29
|
+
expect(result).toEqual({
|
|
30
|
+
assigns: {
|
|
31
|
+
code_settings: {
|
|
32
|
+
id: revision.id,
|
|
33
|
+
originalId: revision.originalId,
|
|
34
|
+
scripts: JSON.stringify([]),
|
|
35
|
+
structured_data: JSON.stringify({}),
|
|
36
|
+
},
|
|
37
|
+
errors: {},
|
|
38
|
+
_translations: [],
|
|
39
|
+
},
|
|
40
|
+
});
|
|
41
|
+
});
|
|
42
|
+
|
|
43
|
+
test("edit_form when a revision does not exist", async () => {
|
|
44
|
+
const ctx = buildCtx({ id: "42" });
|
|
45
|
+
|
|
46
|
+
const mockFind = jest
|
|
47
|
+
.spyOn(ctx.client.eventRevisions, "find")
|
|
48
|
+
.mockImplementation(() => null);
|
|
49
|
+
|
|
50
|
+
expect(async () => {
|
|
51
|
+
await CodeHandler.edit_form(ctx);
|
|
52
|
+
}).rejects.toThrow("Missing revision #42");
|
|
53
|
+
|
|
54
|
+
expect(mockFind).toHaveBeenCalledWith("42", "en");
|
|
55
|
+
});
|
|
56
|
+
});
|
|
@@ -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
|
+
});
|