@raketa-cloud/admin 0.0.15 → 0.0.17

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.
Files changed (170) hide show
  1. package/package.json +1 -1
  2. package/src/Adapter.js +4 -4
  3. package/src/HonoAdapter.js +13 -19
  4. package/src/cloud/Articles.js +9 -5
  5. package/src/cloud/EventChanges.js +15 -0
  6. package/src/cloud/EventRevisions.js +149 -0
  7. package/src/cloud/Events.js +139 -0
  8. package/src/cloud/Pages.js +9 -5
  9. package/src/cloud/documents/common.js +10 -0
  10. package/src/cloud/documents/eventsDocuments.js +254 -0
  11. package/src/handlers/article_revisions/ArticleRevisionsHandler.js +4 -4
  12. package/src/handlers/article_revisions/CodeHandler.js +2 -2
  13. package/src/handlers/article_revisions/GeneralHandler.js +2 -2
  14. package/src/handlers/article_revisions/LocksHandler.js +2 -2
  15. package/src/handlers/article_revisions/MetaHandler.js +2 -2
  16. package/src/handlers/article_revisions/PublishesHandler.js +2 -2
  17. package/src/handlers/article_revisions/RevertsHandler.js +2 -2
  18. package/src/handlers/article_revisions/TagHandler.js +2 -2
  19. package/src/handlers/article_revisions/UnlocksHandler.js +2 -2
  20. package/src/handlers/article_revisions/VisualHandler.js +2 -2
  21. package/src/handlers/articles/ArticlesHandler.js +20 -16
  22. package/src/handlers/articles/ClonesHandler.js +5 -3
  23. package/src/handlers/articles/DeletesHandler.js +5 -5
  24. package/src/handlers/articles/TranslationsHandler.js +25 -22
  25. package/src/handlers/articles/URLsHandler.js +6 -6
  26. package/src/handlers/event_revisions/CodeHandler.js +86 -0
  27. package/src/handlers/event_revisions/EventRevisionsHandler.js +47 -0
  28. package/src/handlers/event_revisions/GeneralHandler.js +94 -0
  29. package/src/handlers/event_revisions/LocksHandler.js +51 -0
  30. package/src/handlers/event_revisions/MetaHandler.js +86 -0
  31. package/src/handlers/event_revisions/PublishesHandler.js +84 -0
  32. package/src/handlers/event_revisions/RevertsHandler.js +26 -0
  33. package/src/handlers/event_revisions/TagHandler.js +85 -0
  34. package/src/handlers/event_revisions/UnlocksHandler.js +22 -0
  35. package/src/handlers/event_revisions/VisualHandler.js +80 -0
  36. package/src/handlers/event_revisions/WidgetHandler.js +41 -0
  37. package/src/handlers/events/ClonesHandler.js +19 -0
  38. package/src/handlers/events/DeletesHandler.js +68 -0
  39. package/src/handlers/events/EventsHandler.js +125 -0
  40. package/src/handlers/events/TranslationsHandler.js +107 -0
  41. package/src/handlers/events/URLsHandler.js +71 -0
  42. package/src/handlers/page_revisions/CodeHandler.js +2 -2
  43. package/src/handlers/page_revisions/GeneralHandler.js +2 -2
  44. package/src/handlers/page_revisions/LocksHandler.js +2 -2
  45. package/src/handlers/page_revisions/MetaHandler.js +2 -2
  46. package/src/handlers/page_revisions/PageRevisionsHandler.js +4 -4
  47. package/src/handlers/page_revisions/PublishesHandler.js +2 -2
  48. package/src/handlers/page_revisions/RevertsHandler.js +2 -2
  49. package/src/handlers/page_revisions/TagHandler.js +2 -2
  50. package/src/handlers/page_revisions/UnlocksHandler.js +2 -2
  51. package/src/handlers/page_revisions/VisualHandler.js +2 -2
  52. package/src/handlers/pages/ClonesHandler.js +5 -3
  53. package/src/handlers/pages/DeletesHandler.js +5 -5
  54. package/src/handlers/pages/PagesHandler.js +21 -16
  55. package/src/handlers/pages/TranslationsHandler.js +24 -22
  56. package/src/handlers/pages/URLsHandler.js +6 -6
  57. package/src/index.js +24 -2
  58. package/src/routeArticlesModule.js +142 -0
  59. package/src/routeCollection.js +2 -2
  60. package/src/routeEventsModule.js +142 -0
  61. package/src/routeMember.js +2 -2
  62. package/src/routeNestedCollection.js +8 -2
  63. package/src/routeNestedMember.js +8 -2
  64. package/src/routePagesModule.js +155 -0
  65. package/src/routeStandard.js +6 -4
  66. package/src/setupCloud.js +12 -0
  67. package/src/tests/handlers/article_revisions/ArticleRevisionsHandler.test/create.test.js +84 -0
  68. package/src/tests/handlers/article_revisions/ArticleRevisionsHandler.test/destroy.test.js +59 -0
  69. package/src/tests/handlers/article_revisions/CodesHandler.test/edit_form.test.js +56 -0
  70. package/src/tests/handlers/article_revisions/CodesHandler.test/update.test.js +148 -0
  71. package/src/tests/handlers/article_revisions/GeneralHandler.test/edit_form.test.js +65 -0
  72. package/src/tests/handlers/article_revisions/GeneralHandler.test/update.test.js +159 -0
  73. package/src/tests/handlers/article_revisions/MetaHandler.test/edit_form.test.js +57 -0
  74. package/src/tests/handlers/article_revisions/MetaHandler.test/update.test.js +152 -0
  75. package/src/tests/handlers/article_revisions/PublishesHandler.test/create.test.js +142 -0
  76. package/src/tests/handlers/article_revisions/PublishesHandler.test/create_form.test.js +47 -0
  77. package/src/tests/handlers/article_revisions/RevertsHandler.test/create.test.js +89 -0
  78. package/src/tests/handlers/article_revisions/TagHandler.test/edit_form.test.js +69 -0
  79. package/src/tests/handlers/article_revisions/TagHandler.test/update.test.js +152 -0
  80. package/src/tests/handlers/article_revisions/VisualHandler.test.test/edit_form.test.js +55 -0
  81. package/src/tests/handlers/article_revisions/VisualHandler.test.test/update.test.js +140 -0
  82. package/src/tests/handlers/article_revisions/WidgetHandler.test/show.test.js +46 -0
  83. package/src/tests/handlers/article_revisions/WidgetHandler.test/update.test.js +103 -0
  84. package/src/tests/handlers/articles/ArticlesHandler.test/create.test.js +11 -5
  85. package/src/tests/handlers/articles/ArticlesHandler.test/create_form.test.js +5 -2
  86. package/src/tests/handlers/articles/ArticlesHandler.test/index.test.js +9 -2
  87. package/src/tests/handlers/articles/ArticlesHandler.test/show.test.js +9 -3
  88. package/src/tests/handlers/articles/{ConesHandler.test → ClonesHandler.test}/create.test.js +8 -2
  89. package/src/tests/handlers/articles/DeletesHandler.test/create.test.js +12 -3
  90. package/src/tests/handlers/articles/DeletesHandler.test/create_form.test.js +8 -2
  91. package/src/tests/handlers/articles/URLsHandler.test/create.test.js +18 -6
  92. package/src/tests/handlers/articles/URLsHandler.test/create_form.test.js +8 -2
  93. package/src/tests/handlers/event_revisions/CodesHandler.test/edit_form.test.js +56 -0
  94. package/src/tests/handlers/event_revisions/CodesHandler.test/update.test.js +152 -0
  95. package/src/tests/handlers/event_revisions/EventRevisionsHandler.test/create.test.js +84 -0
  96. package/src/tests/handlers/event_revisions/EventRevisionsHandler.test/destroy.test.js +59 -0
  97. package/src/tests/handlers/event_revisions/GeneralHandler.test/edit_form.test.js +69 -0
  98. package/src/tests/handlers/event_revisions/GeneralHandler.test/update.test.js +167 -0
  99. package/src/tests/handlers/event_revisions/MetaHandler.test/edit_form.test.js +57 -0
  100. package/src/tests/handlers/event_revisions/MetaHandler.test/update.test.js +156 -0
  101. package/src/tests/handlers/event_revisions/PublishesHandler.test/create.test.js +142 -0
  102. package/src/tests/handlers/event_revisions/PublishesHandler.test/create_form.test.js +47 -0
  103. package/src/tests/handlers/event_revisions/RevertsHandler.test/create.test.js +89 -0
  104. package/src/tests/handlers/event_revisions/TagHandler.test/edit_form.test.js +69 -0
  105. package/src/tests/handlers/event_revisions/TagHandler.test/update.test.js +156 -0
  106. package/src/tests/handlers/event_revisions/VisualHandler.test.test/edit_form.test.js +55 -0
  107. package/src/tests/handlers/event_revisions/VisualHandler.test.test/update.test.js +144 -0
  108. package/src/tests/handlers/event_revisions/WidgetHandler.test/show.test.js +46 -0
  109. package/src/tests/handlers/event_revisions/WidgetHandler.test/update.test.js +103 -0
  110. package/src/tests/handlers/events/ClonesHandler.test/create.test.js +60 -0
  111. package/src/tests/handlers/events/DeletesHandler.test/create.test.js +119 -0
  112. package/src/tests/handlers/events/DeletesHandler.test/create_form.test.js +60 -0
  113. package/src/tests/handlers/events/EventsHandler.test/create.test.js +158 -0
  114. package/src/tests/handlers/events/EventsHandler.test/create_form.test.js +44 -0
  115. package/src/tests/handlers/events/EventsHandler.test/index.test.js +52 -0
  116. package/src/tests/handlers/events/EventsHandler.test/show.test.js +111 -0
  117. package/src/tests/handlers/events/URLsHandler.test/create.test.js +167 -0
  118. package/src/tests/handlers/events/URLsHandler.test/create_form.test.js +57 -0
  119. package/src/tests/handlers/page_revisions/CodesHandler.test/update.test.js +12 -3
  120. package/src/tests/handlers/page_revisions/GeneralHandler.test/update.test.js +12 -3
  121. package/src/tests/handlers/page_revisions/MetaHandler.test/update.test.js +12 -3
  122. package/src/tests/handlers/page_revisions/PageRevisionsHandler.test/create.test.js +12 -3
  123. package/src/tests/handlers/page_revisions/PageRevisionsHandler.test/destroy.test.js +8 -2
  124. package/src/tests/handlers/page_revisions/PublishesHandler.test/create.test.js +8 -2
  125. package/src/tests/handlers/page_revisions/RevertsHandler.test/create.test.js +12 -3
  126. package/src/tests/handlers/page_revisions/TagHandler.test/update.test.js +8 -2
  127. package/src/tests/handlers/page_revisions/VisualHandler.test.test/update.test.js +12 -3
  128. package/src/tests/handlers/pages/ConesHandler.test/create.test.js +8 -2
  129. package/src/tests/handlers/pages/DeletesHandler.test/create.test.js +12 -3
  130. package/src/tests/handlers/pages/DeletesHandler.test/create_form.test.js +8 -2
  131. package/src/tests/handlers/pages/PagesHandler.test/create.test.js +11 -5
  132. package/src/tests/handlers/pages/PagesHandler.test/create_form.test.js +1 -1
  133. package/src/tests/handlers/pages/PagesHandler.test/index.test.js +5 -2
  134. package/src/tests/handlers/pages/PagesHandler.test/show.test.js +9 -3
  135. package/src/tests/handlers/pages/URLsHandler.test/create.test.js +16 -4
  136. package/src/tests/handlers/pages/URLsHandler.test/create_form.test.js +8 -2
  137. package/src/tests/routeCollection.test.js +118 -105
  138. package/src/tests/routeMember.test.js +60 -54
  139. package/src/tests/routeNestedCollection.test.js +132 -126
  140. package/src/tests/routeNestedMember.test.js +60 -54
  141. package/src/views/articles/_form.ejs +17 -17
  142. package/src/views/articles/show.ejs +9 -9
  143. package/src/views/articles/translations/_form.ejs +3 -3
  144. package/src/views/articles/translations/create_form.ejs +7 -9
  145. package/src/views/event_revisions/_nav.ejs +40 -0
  146. package/src/views/event_revisions/codes/edit_form.ejs +39 -0
  147. package/src/views/event_revisions/general/edit_form.ejs +72 -0
  148. package/src/views/event_revisions/locks/create_form.ejs +35 -0
  149. package/src/views/event_revisions/meta/edit_form.ejs +41 -0
  150. package/src/views/event_revisions/publishes/_form.ejs +57 -0
  151. package/src/views/event_revisions/publishes/create_form.ejs +10 -0
  152. package/src/views/event_revisions/tags/edit_form.ejs +64 -0
  153. package/src/views/event_revisions/visuals/edit_form.ejs +42 -0
  154. package/src/views/events/_form.ejs +88 -0
  155. package/src/views/events/create_form.ejs +9 -0
  156. package/src/views/events/deletes/create_form.ejs +55 -0
  157. package/src/views/events/edit_form.ejs +3 -0
  158. package/src/views/events/index.ejs +161 -0
  159. package/src/views/events/show.ejs +281 -0
  160. package/src/views/events/translations/_form.ejs +79 -0
  161. package/src/views/events/translations/create_form.ejs +10 -0
  162. package/src/views/events/urls/create_form.ejs +31 -0
  163. package/src/views/pages/_form.ejs +16 -16
  164. package/src/views/pages/create_form.ejs +1 -1
  165. package/src/views/pages/show.ejs +9 -9
  166. package/src/views/pages/translations/_form.ejs +3 -3
  167. package/src/views/pages/translations/create_form.ejs +7 -9
  168. package/test/factory.js +42 -3
  169. package/src/routeArticles.js +0 -65
  170. package/src/routePages.js +0 -55
@@ -0,0 +1,69 @@
1
+ import TagHandler from "../../../../handlers/event_revisions/TagHandler";
2
+ import EventRevisions from "../../../../cloud/EventRevisions";
3
+ import Tags from "../../../../cloud/Tags";
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
+ tags: new Tags(testConfig, "token"),
12
+ },
13
+ params: { parent_id: revision.id },
14
+ locale: "en",
15
+ };
16
+ }
17
+
18
+ describe("Event revision tags settings", () => {
19
+ test("edit_form when a revision exists", async () => {
20
+ const tags = [
21
+ Factory.build("tag", { id: 42 }),
22
+ Factory.build("tag", { id: 69 }),
23
+ ];
24
+ const revision = Factory.build("event_revision", { tags: [tags[0]] });
25
+ const ctx = buildCtx(revision);
26
+
27
+ const mockFind = jest
28
+ .spyOn(ctx.client.eventRevisions, "find")
29
+ .mockImplementation(() => revision);
30
+
31
+ const mockTags = jest
32
+ .spyOn(ctx.client.tags, "all")
33
+ .mockImplementation(() => ({
34
+ list: tags,
35
+ }));
36
+
37
+ const result = await TagHandler.edit_form(ctx);
38
+
39
+ expect(mockFind).toHaveBeenCalledWith(revision.id, "en");
40
+ expect(mockTags).toHaveBeenCalledWith("en");
41
+
42
+ expect(result).toEqual({
43
+ assigns: {
44
+ tag_settings: {
45
+ id: revision.id,
46
+ originalId: revision.originalId,
47
+ tags: revision.tags.map((t) => t.id),
48
+ },
49
+ tags: tags,
50
+ errors: {},
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 TagHandler.edit_form(ctx);
65
+ }).rejects.toThrow("Missing revision #42");
66
+
67
+ expect(mockFind).toHaveBeenCalledWith("42", "en");
68
+ });
69
+ });
@@ -0,0 +1,156 @@
1
+ import TagHandler from "../../../../handlers/event_revisions/TagHandler";
2
+ import EventRevisions from "../../../../cloud/EventRevisions";
3
+ import Tags from "../../../../cloud/Tags";
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
+ tags: new Tags(testConfig, "token"),
12
+ },
13
+ params: { parent_id: revision.id },
14
+ resourceParams: {
15
+ tag_settings: updateSettings,
16
+ },
17
+ locale: "en",
18
+ };
19
+ }
20
+
21
+ describe("Event revision tags settings", () => {
22
+ test("update successful", async () => {
23
+ const tags = [
24
+ Factory.build("tag", { id: 42 }),
25
+ Factory.build("tag", { id: 69 }),
26
+ ];
27
+ const revision = Factory.build("event_revision", { tags: [tags[0]] });
28
+
29
+ const updateSettings = {
30
+ tags: [tags.map((t) => t.id)],
31
+ };
32
+
33
+ const ctx = buildCtx(revision, updateSettings);
34
+
35
+ const mockFind = jest
36
+ .spyOn(ctx.client.eventRevisions, "find")
37
+ .mockImplementation(() => revision);
38
+
39
+ const mockUpdate = jest
40
+ .spyOn(ctx.client.eventRevisions, "update")
41
+ .mockImplementation(() => ({
42
+ revision: {},
43
+ errors: null,
44
+ }));
45
+
46
+ const result = await TagHandler.update(ctx, {
47
+ eventType: "event",
48
+ eventTypePlural: "events",
49
+ });
50
+
51
+ expect(mockFind).toHaveBeenCalledWith(revision.id, "en");
52
+ expect(mockUpdate).toHaveBeenCalledWith(revision.id, "en", {
53
+ slug: revision.slug,
54
+ title: revision.title,
55
+ visibility: revision.visibility,
56
+ publishAt: revision.publishAt,
57
+ startsAt: revision.startsAt,
58
+ endsAt: revision.endsAt,
59
+ widgets: JSON.stringify(revision.widgets),
60
+ tags: updateSettings.tags,
61
+ categories: revision.categories.map((c) => c.id),
62
+ settings: JSON.stringify(revision.settings),
63
+ });
64
+
65
+ expect(result).toEqual({
66
+ redirect: `/en/event_revisions/${revision.id}/tags/edit`,
67
+ });
68
+ });
69
+
70
+ test("update failed", async () => {
71
+ const tags = [
72
+ Factory.build("tag", { id: 42 }),
73
+ Factory.build("tag", { id: 69 }),
74
+ ];
75
+ const revision = Factory.build("event_revision", { tags: [tags[0]] });
76
+
77
+ const updateSettings = {
78
+ tags: [tags.map((t) => t.id)],
79
+ };
80
+
81
+ const ctx = buildCtx(revision, updateSettings);
82
+
83
+ const mockFind = jest
84
+ .spyOn(ctx.client.eventRevisions, "find")
85
+ .mockImplementation(() => revision);
86
+
87
+ const mockUpdate = jest
88
+ .spyOn(ctx.client.eventRevisions, "update")
89
+ .mockImplementation(() => ({
90
+ revision: {},
91
+ errors: [{ key: "generalError", message: "some error" }],
92
+ }));
93
+
94
+ const mockTags = jest
95
+ .spyOn(ctx.client.tags, "all")
96
+ .mockImplementation(() => ({
97
+ list: tags,
98
+ }));
99
+
100
+ const result = await TagHandler.update(ctx, {
101
+ eventType: "event",
102
+ eventTypePlural: "events",
103
+ });
104
+
105
+ expect(mockFind).toHaveBeenCalledWith(revision.id, "en");
106
+ expect(mockUpdate).toHaveBeenCalledWith(revision.id, "en", {
107
+ slug: revision.slug,
108
+ title: revision.title,
109
+ visibility: revision.visibility,
110
+ publishAt: revision.publishAt,
111
+ startsAt: revision.startsAt,
112
+ endsAt: revision.endsAt,
113
+ widgets: JSON.stringify(revision.widgets),
114
+ tags: updateSettings.tags,
115
+ categories: revision.categories.map((c) => c.id),
116
+ settings: JSON.stringify(revision.settings),
117
+ });
118
+ expect(mockTags).toHaveBeenCalledWith("en");
119
+
120
+ expect(result).toEqual({
121
+ assigns: {
122
+ tag_settings: {
123
+ ...updateSettings,
124
+ id: revision.id,
125
+ originalId: revision.originalId,
126
+ },
127
+ errors: {
128
+ tag_settings: { generalError: "some error" },
129
+ },
130
+ tags: tags,
131
+ _translations: [],
132
+ },
133
+ });
134
+ });
135
+
136
+ test("update when a revision does not exist", async () => {
137
+ const revision = Factory.build("event_revision");
138
+
139
+ const updateSettings = {};
140
+
141
+ const ctx = buildCtx(revision, updateSettings);
142
+
143
+ const mockFind = jest
144
+ .spyOn(ctx.client.eventRevisions, "find")
145
+ .mockImplementation(() => null);
146
+
147
+ expect(async () => {
148
+ await TagHandler.update(ctx, {
149
+ eventType: "event",
150
+ eventTypePlural: "events",
151
+ });
152
+ }).rejects.toThrow(`Missing revision #${revision.id}`);
153
+
154
+ expect(mockFind).toHaveBeenCalledWith(revision.id, "en");
155
+ });
156
+ });
@@ -0,0 +1,55 @@
1
+ import VisualHandler from "../../../../handlers/event_revisions/VisualHandler";
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 visuals 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 VisualHandler.edit_form(ctx);
26
+
27
+ expect(mockFind).toHaveBeenCalledWith(revision.id, "en");
28
+
29
+ expect(result).toEqual({
30
+ assigns: {
31
+ visual_settings: {
32
+ id: revision.id,
33
+ originalId: revision.originalId,
34
+ layout: revision.settings.layout,
35
+ },
36
+ errors: {},
37
+ _translations: [],
38
+ },
39
+ });
40
+ });
41
+
42
+ test("edit_form when a revision does not exist", async () => {
43
+ const ctx = buildCtx({ id: "42" });
44
+
45
+ const mockFind = jest
46
+ .spyOn(ctx.client.eventRevisions, "find")
47
+ .mockImplementation(() => null);
48
+
49
+ expect(async () => {
50
+ await VisualHandler.edit_form(ctx);
51
+ }).rejects.toThrow("Missing revision #42");
52
+
53
+ expect(mockFind).toHaveBeenCalledWith("42", "en");
54
+ });
55
+ });
@@ -0,0 +1,144 @@
1
+ import VisualHandler from "../../../../handlers/event_revisions/VisualHandler";
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
+ visual_settings: updateSettings,
14
+ },
15
+ locale: "en",
16
+ };
17
+ }
18
+
19
+ describe("Event revision visuals settings", () => {
20
+ test("update successful", async () => {
21
+ const revision = Factory.build("event_revision");
22
+
23
+ const updateSettings = {
24
+ layout: "bla",
25
+ };
26
+
27
+ const ctx = buildCtx(revision, updateSettings);
28
+
29
+ const mockFind = jest
30
+ .spyOn(ctx.client.eventRevisions, "find")
31
+ .mockImplementation(() => revision);
32
+
33
+ const mockUpdate = jest
34
+ .spyOn(ctx.client.eventRevisions, "update")
35
+ .mockImplementation(() => ({
36
+ revision: {},
37
+ errors: null,
38
+ }));
39
+
40
+ const result = await VisualHandler.update(ctx, {
41
+ eventType: "event",
42
+ eventTypePlural: "events",
43
+ });
44
+
45
+ expect(mockFind).toHaveBeenCalledWith(revision.id, "en");
46
+ expect(mockUpdate).toHaveBeenCalledWith(revision.id, "en", {
47
+ slug: revision.slug,
48
+ title: revision.title,
49
+ visibility: revision.visibility,
50
+ publishAt: revision.publishAt,
51
+ startsAt: revision.startsAt,
52
+ endsAt: revision.endsAt,
53
+ widgets: JSON.stringify(revision.widgets),
54
+ tags: revision.tags.map((t) => t.id),
55
+ categories: revision.categories.map((c) => c.id),
56
+ settings: JSON.stringify({
57
+ ...revision.settings,
58
+ layout: updateSettings.layout,
59
+ }),
60
+ });
61
+
62
+ expect(result).toEqual({
63
+ redirect: `/en/event_revisions/${revision.id}/visuals/edit`,
64
+ });
65
+ });
66
+
67
+ test("update failed", async () => {
68
+ const revision = Factory.build("event_revision");
69
+
70
+ const updateSettings = {
71
+ layout: "bla",
72
+ };
73
+
74
+ const ctx = buildCtx(revision, updateSettings);
75
+
76
+ const mockFind = jest
77
+ .spyOn(ctx.client.eventRevisions, "find")
78
+ .mockImplementation(() => revision);
79
+
80
+ const mockUpdate = jest
81
+ .spyOn(ctx.client.eventRevisions, "update")
82
+ .mockImplementation(() => ({
83
+ revision: {},
84
+ errors: [{ key: "generalError", message: "some error" }],
85
+ }));
86
+
87
+ const result = await VisualHandler.update(ctx, {
88
+ eventType: "event",
89
+ eventTypePlural: "events",
90
+ });
91
+
92
+ expect(mockFind).toHaveBeenCalledWith(revision.id, "en");
93
+ expect(mockUpdate).toHaveBeenCalledWith(revision.id, "en", {
94
+ slug: revision.slug,
95
+ title: revision.title,
96
+ visibility: revision.visibility,
97
+ publishAt: revision.publishAt,
98
+ startsAt: revision.startsAt,
99
+ endsAt: revision.endsAt,
100
+ widgets: JSON.stringify(revision.widgets),
101
+ tags: revision.tags.map((t) => t.id),
102
+ categories: revision.categories.map((c) => c.id),
103
+ settings: JSON.stringify({
104
+ ...revision.settings,
105
+ layout: updateSettings.layout,
106
+ }),
107
+ });
108
+
109
+ expect(result).toEqual({
110
+ assigns: {
111
+ visual_settings: {
112
+ ...updateSettings,
113
+ id: revision.id,
114
+ originalId: revision.originalId,
115
+ },
116
+ errors: {
117
+ visual_settings: { generalError: "some error" },
118
+ },
119
+ _translations: [],
120
+ },
121
+ });
122
+ });
123
+
124
+ test("update when a revision does not exist", async () => {
125
+ const revision = Factory.build("event_revision");
126
+
127
+ const updateSettings = {};
128
+
129
+ const ctx = buildCtx(revision, updateSettings);
130
+
131
+ const mockFind = jest
132
+ .spyOn(ctx.client.eventRevisions, "find")
133
+ .mockImplementation(() => null);
134
+
135
+ expect(async () => {
136
+ await VisualHandler.update(ctx, {
137
+ eventType: "event",
138
+ eventTypePlural: "events",
139
+ });
140
+ }).rejects.toThrow(`Missing revision #${revision.id}`);
141
+
142
+ expect(mockFind).toHaveBeenCalledWith(revision.id, "en");
143
+ });
144
+ });
@@ -0,0 +1,46 @@
1
+ import WidgetHandler from "../../../../handlers/event_revisions/WidgetHandler";
2
+ import EventRevisions from "../../../../cloud/EventRevisions";
3
+ import Settings from "../../../../cloud/Settings";
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
+ settings: new Settings(testConfig, "token"),
12
+ },
13
+ params: { parent_id: revision.id },
14
+ locale: "en",
15
+ };
16
+ }
17
+
18
+ describe("WidgetHandler", () => {
19
+ test("show", async () => {
20
+ const revision = Factory.build("event_revision");
21
+ const settings = Factory.build("settings");
22
+ const ctx = buildCtx(revision);
23
+
24
+ const mockFind = jest
25
+ .spyOn(ctx.client.eventRevisions, "find")
26
+ .mockImplementation(() => revision);
27
+
28
+ const mockSettings = jest
29
+ .spyOn(ctx.client.settings, "find")
30
+ .mockImplementation(() => settings);
31
+
32
+ const result = await WidgetHandler.show(ctx);
33
+
34
+ expect(mockFind).toHaveBeenCalledWith(revision.id, "en");
35
+ expect(mockSettings).toHaveBeenCalledWith("en");
36
+
37
+ expect(result).toEqual({
38
+ json: {
39
+ revision: {
40
+ ...revision,
41
+ websiteSettings: { ...settings },
42
+ },
43
+ },
44
+ });
45
+ });
46
+ });
@@ -0,0 +1,103 @@
1
+ import WidgetHandler from "../../../../handlers/event_revisions/WidgetHandler";
2
+ import EventRevisions from "../../../../cloud/EventRevisions";
3
+ import Settings from "../../../../cloud/Settings";
4
+ import { testConfig } from "../../../../../test/handlersHelper";
5
+ import Factory from "../../../../../test/factory";
6
+
7
+ function buildCtx(revision, newWidgets) {
8
+ return {
9
+ client: {
10
+ eventRevisions: new EventRevisions(testConfig, "token"),
11
+ settings: new Settings(testConfig, "token"),
12
+ },
13
+ params: { parent_id: revision.id },
14
+ resourceParams: {
15
+ widgets: newWidgets,
16
+ },
17
+ locale: "en",
18
+ };
19
+ }
20
+
21
+ describe("WidgetHandler", () => {
22
+ test("update successful", async () => {
23
+ const revision = Factory.build("event_revision");
24
+ const settings = Factory.build("settings");
25
+ const newWidgets = [
26
+ {
27
+ component: "SectionTitle",
28
+ settings: {},
29
+ id: "d2adwadw",
30
+ },
31
+ ];
32
+
33
+ const ctx = buildCtx(revision, newWidgets);
34
+
35
+ const mockFind = jest
36
+ .spyOn(ctx.client.eventRevisions, "find")
37
+ .mockImplementation(() => revision);
38
+
39
+ const mockSettings = jest
40
+ .spyOn(ctx.client.settings, "find")
41
+ .mockImplementation(() => settings);
42
+
43
+ const mockUpdate = jest
44
+ .spyOn(ctx.client.eventRevisions, "updateWidgets")
45
+ .mockImplementation(() => ({
46
+ revision: { ...revision, widgets: newWidgets },
47
+ errors: [],
48
+ }));
49
+
50
+ const result = await WidgetHandler.update(ctx);
51
+
52
+ expect(mockUpdate).toHaveBeenCalledWith(revision.id, "en", newWidgets);
53
+ expect(mockFind).toHaveBeenCalledWith(revision.id, "en");
54
+ expect(mockSettings).toHaveBeenCalledWith("en");
55
+
56
+ expect(result).toEqual({
57
+ json: {
58
+ revision: {
59
+ ...revision,
60
+ websiteSettings: { ...settings },
61
+ widgets: newWidgets,
62
+ },
63
+ errors: [],
64
+ },
65
+ });
66
+ });
67
+
68
+ test("update failed", async () => {
69
+ const revision = Factory.build("event_revision");
70
+ const newWidgets = [
71
+ {
72
+ component: "SectionTitle",
73
+ settings: {},
74
+ id: "d2adwadw",
75
+ },
76
+ ];
77
+
78
+ const ctx = buildCtx(revision, newWidgets);
79
+
80
+ const mockFind = jest
81
+ .spyOn(ctx.client.eventRevisions, "find")
82
+ .mockImplementation(() => revision);
83
+
84
+ const mockUpdate = jest
85
+ .spyOn(ctx.client.eventRevisions, "updateWidgets")
86
+ .mockImplementation(() => ({
87
+ revision: null,
88
+ errors: [{ key: "widgets", message: "Wrong format" }],
89
+ }));
90
+
91
+ const result = await WidgetHandler.update(ctx);
92
+
93
+ expect(mockUpdate).toHaveBeenCalledWith(revision.id, "en", newWidgets);
94
+ expect(mockFind).toHaveBeenCalledWith(revision.id, "en");
95
+
96
+ expect(result).toEqual({
97
+ json: {
98
+ revision: null,
99
+ errors: [{ key: "widgets", message: "Wrong format" }],
100
+ },
101
+ });
102
+ });
103
+ });
@@ -0,0 +1,60 @@
1
+ import Events from "../../../../cloud/Events";
2
+ import ClonesHandler from "../../../../handlers/events/ClonesHandler";
3
+ import Factory from "../../../../../test/factory";
4
+ import { testConfig } from "../../../../../test/handlersHelper";
5
+
6
+ function buildCtx(event) {
7
+ return {
8
+ client: {
9
+ events: new Events(testConfig, "token"),
10
+ },
11
+ params: { parent_id: event.id },
12
+ locale: "en",
13
+ };
14
+ }
15
+
16
+ describe("Clone event", () => {
17
+ test("clone successful", async () => {
18
+ const event = Factory.build("event");
19
+ const ctx = buildCtx(event);
20
+
21
+ const mockClone = jest
22
+ .spyOn(ctx.client.events, "clone")
23
+ .mockImplementation(() => event);
24
+
25
+ const result = await ClonesHandler.create(ctx, {
26
+ eventType: "event",
27
+ eventTypePlural: "events",
28
+ });
29
+
30
+ expect(mockClone).toHaveBeenCalledWith(event.id, "en");
31
+
32
+ expect(result).toEqual({
33
+ redirect: "/en/events",
34
+ });
35
+ });
36
+
37
+ test("clone failed", async () => {
38
+ const event = Factory.build("event");
39
+
40
+ const ctx = buildCtx(event);
41
+
42
+ const mockClone = jest
43
+ .spyOn(ctx.client.events, "clone")
44
+ .mockImplementation(() => ({
45
+ event: null,
46
+ errors: [{ key: "generalError", message: "some error" }],
47
+ }));
48
+
49
+ expect(async () => {
50
+ await ClonesHandler.create(ctx, {
51
+ eventType: "event",
52
+ eventTypePlural: "events",
53
+ });
54
+ }).rejects.toThrow(
55
+ `Error cloning event: ${JSON.stringify([{ key: "generalError", message: "some error" }])}`
56
+ );
57
+
58
+ expect(mockClone).toHaveBeenCalledWith(event.id, "en");
59
+ });
60
+ });