@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,167 @@
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
+ eventType: "event",
51
+ eventTypePlural: "events",
52
+ });
53
+
54
+ expect(mockFind).toHaveBeenCalledWith(revision.id, "en");
55
+ expect(mockUpdate).toHaveBeenCalledWith(revision.id, "en", {
56
+ slug: updateSettings.slug,
57
+ title: updateSettings.title,
58
+ visibility: updateSettings.visibility,
59
+ publishAt: "2024-08-30T16:05:00Z",
60
+ startsAt: "2024-08-30T16:10:00Z",
61
+ endsAt: "2024-08-30T16:15:00Z",
62
+ widgets: JSON.stringify(revision.widgets),
63
+ tags: revision.tags.map((t) => t.id),
64
+ categories: revision.categories.map((c) => c.id),
65
+ settings: JSON.stringify({
66
+ ...revision.settings,
67
+ credentials: {
68
+ user: updateSettings.username,
69
+ password: updateSettings.password,
70
+ },
71
+ }),
72
+ });
73
+
74
+ expect(result).toEqual({
75
+ redirect: `/en/event_revisions/${revision.id}/general/edit`,
76
+ });
77
+ });
78
+
79
+ test("update failed", async () => {
80
+ const revision = Factory.build("event_revision");
81
+
82
+ const updateSettings = {
83
+ title: "Updated title",
84
+ slug: "/updated-url",
85
+ visibility: "protected",
86
+ publish_at: "2024-08-30T19:05",
87
+ starts_at: "2024-08-30T19:10",
88
+ ends_at: "2024-08-30T19:15",
89
+ username: "user",
90
+ password: "admin123!@#",
91
+ };
92
+
93
+ const ctx = buildCtx(revision, updateSettings);
94
+
95
+ const mockFind = jest
96
+ .spyOn(ctx.client.eventRevisions, "find")
97
+ .mockImplementation(() => revision);
98
+
99
+ const mockUpdate = jest
100
+ .spyOn(ctx.client.eventRevisions, "update")
101
+ .mockImplementation(() => ({
102
+ revision: {},
103
+ errors: [{ key: "slug", message: "has invalid format" }],
104
+ }));
105
+
106
+ const result = await GeneralHandler.update(ctx, {
107
+ eventType: "event",
108
+ eventTypePlural: "events",
109
+ });
110
+
111
+ expect(mockFind).toHaveBeenCalledWith(revision.id, "en");
112
+ expect(mockUpdate).toHaveBeenCalledWith(revision.id, "en", {
113
+ slug: updateSettings.slug,
114
+ title: updateSettings.title,
115
+ visibility: updateSettings.visibility,
116
+ publishAt: "2024-08-30T16:05:00Z",
117
+ startsAt: "2024-08-30T16:10:00Z",
118
+ endsAt: "2024-08-30T16:15:00Z",
119
+ widgets: JSON.stringify(revision.widgets),
120
+ tags: revision.tags.map((t) => t.id),
121
+ categories: revision.categories.map((c) => c.id),
122
+ settings: JSON.stringify({
123
+ ...revision.settings,
124
+ credentials: {
125
+ user: updateSettings.username,
126
+ password: updateSettings.password,
127
+ },
128
+ }),
129
+ });
130
+
131
+ expect(result).toEqual({
132
+ assigns: {
133
+ general_settings: {
134
+ ...updateSettings,
135
+ id: revision.id,
136
+ originalId: revision.originalId,
137
+ },
138
+ errors: {
139
+ general_settings: { slug: "has invalid format" },
140
+ },
141
+ visibilityOptions: ctx.client.events.visibilityOptions(),
142
+ _translations: [],
143
+ },
144
+ });
145
+ });
146
+
147
+ test("update when a revision does not exist", async () => {
148
+ const revision = Factory.build("event_revision");
149
+
150
+ const updateSettings = {};
151
+
152
+ const ctx = buildCtx(revision, updateSettings);
153
+
154
+ const mockFind = jest
155
+ .spyOn(ctx.client.eventRevisions, "find")
156
+ .mockImplementation(() => null);
157
+
158
+ expect(async () => {
159
+ await GeneralHandler.update(ctx, {
160
+ eventType: "event",
161
+ eventTypePlural: "events",
162
+ });
163
+ }).rejects.toThrow(`Missing revision #${revision.id}`);
164
+
165
+ expect(mockFind).toHaveBeenCalledWith(revision.id, "en");
166
+ });
167
+ });
@@ -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,156 @@
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
+ eventType: "event",
44
+ eventTypePlural: "events",
45
+ });
46
+
47
+ expect(mockFind).toHaveBeenCalledWith(revision.id, "en");
48
+ expect(mockUpdate).toHaveBeenCalledWith(revision.id, "en", {
49
+ slug: revision.slug,
50
+ title: revision.title,
51
+ visibility: revision.visibility,
52
+ publishAt: revision.publishAt,
53
+ startsAt: revision.startsAt,
54
+ endsAt: revision.endsAt,
55
+ widgets: JSON.stringify(revision.widgets),
56
+ tags: revision.tags.map((t) => t.id),
57
+ categories: revision.categories.map((c) => c.id),
58
+ settings: JSON.stringify({
59
+ ...revision.settings,
60
+ meta: {
61
+ title: updateSettings.title,
62
+ description: updateSettings.description,
63
+ image: { id: 42 },
64
+ },
65
+ }),
66
+ });
67
+
68
+ expect(result).toEqual({
69
+ redirect: `/en/event_revisions/${revision.id}/meta/edit`,
70
+ });
71
+ });
72
+
73
+ test("update failed", async () => {
74
+ const revision = Factory.build("event_revision");
75
+
76
+ const updateSettings = {
77
+ title: "An open graph title",
78
+ description: "An open graph description",
79
+ image: JSON.stringify({ id: 42 }),
80
+ };
81
+
82
+ const ctx = buildCtx(revision, updateSettings);
83
+
84
+ const mockFind = jest
85
+ .spyOn(ctx.client.eventRevisions, "find")
86
+ .mockImplementation(() => revision);
87
+
88
+ const mockUpdate = jest
89
+ .spyOn(ctx.client.eventRevisions, "update")
90
+ .mockImplementation(() => ({
91
+ revision: {},
92
+ errors: [{ key: "generalError", message: "some error" }],
93
+ }));
94
+
95
+ const result = await MetaHandler.update(ctx, {
96
+ eventType: "event",
97
+ eventTypePlural: "events",
98
+ });
99
+
100
+ expect(mockFind).toHaveBeenCalledWith(revision.id, "en");
101
+ expect(mockUpdate).toHaveBeenCalledWith(revision.id, "en", {
102
+ slug: revision.slug,
103
+ title: revision.title,
104
+ visibility: revision.visibility,
105
+ publishAt: revision.publishAt,
106
+ startsAt: revision.startsAt,
107
+ endsAt: revision.endsAt,
108
+ widgets: JSON.stringify(revision.widgets),
109
+ tags: revision.tags.map((t) => t.id),
110
+ categories: revision.categories.map((c) => c.id),
111
+ settings: JSON.stringify({
112
+ ...revision.settings,
113
+ meta: {
114
+ title: updateSettings.title,
115
+ description: updateSettings.description,
116
+ image: { id: 42 },
117
+ },
118
+ }),
119
+ });
120
+
121
+ expect(result).toEqual({
122
+ assigns: {
123
+ meta_settings: {
124
+ ...updateSettings,
125
+ id: revision.id,
126
+ originalId: revision.originalId,
127
+ },
128
+ errors: {
129
+ meta_settings: { generalError: "some error" },
130
+ },
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 MetaHandler.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,142 @@
1
+ import PublishesHandler from "../../../../handlers/event_revisions/PublishesHandler";
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, resourceParams) {
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
+ locale: "en",
16
+ };
17
+ }
18
+
19
+ describe("Publish event revision", () => {
20
+ test("create successful", async () => {
21
+ const revision = Factory.build("event_revision");
22
+ const publishing = {
23
+ title: "A new revision!",
24
+ description: "Nice!",
25
+ visibility: "protected",
26
+ username: "admin",
27
+ password: "admin123!@#",
28
+ };
29
+
30
+ const ctx = buildCtx(revision, {
31
+ publishing,
32
+ });
33
+
34
+ const updatedEvent = Factory.build("event", {
35
+ id: revision.originalId,
36
+ settings: {
37
+ credentials: {
38
+ user: "admin",
39
+ password: "admin123!@#",
40
+ },
41
+ },
42
+ });
43
+
44
+ const mockFind = jest
45
+ .spyOn(ctx.client.eventRevisions, "find")
46
+ .mockImplementation(() => revision);
47
+
48
+ const mockPublish = jest
49
+ .spyOn(ctx.client.eventRevisions, "publish")
50
+ .mockImplementation(() => ({ event: updatedEvent, errors: null }));
51
+
52
+ const result = await PublishesHandler.create(ctx, {
53
+ eventType: "event",
54
+ eventTypePlural: "events",
55
+ });
56
+
57
+ expect(mockFind).toHaveBeenCalledWith(revision.id, "en");
58
+ expect(mockPublish).toHaveBeenCalledWith(
59
+ revision.id,
60
+ "en",
61
+ {
62
+ title: publishing.title,
63
+ description: publishing.description,
64
+ },
65
+ {
66
+ visibility: publishing.visibility,
67
+ settings: JSON.stringify({
68
+ ...revision.settings,
69
+ credentials: {
70
+ user: publishing.username,
71
+ password: publishing.password,
72
+ },
73
+ }),
74
+ }
75
+ );
76
+
77
+ expect(result).toEqual({
78
+ redirect: `/en/events/${updatedEvent.id}`,
79
+ });
80
+ });
81
+
82
+ test("create failed", async () => {
83
+ const revision = Factory.build("event_revision");
84
+ const publishing = {
85
+ title: "A new revision!",
86
+ description: "Nice!",
87
+ visibility: "public",
88
+ };
89
+
90
+ const ctx = buildCtx(revision, {
91
+ publishing,
92
+ });
93
+
94
+ const mockFind = jest
95
+ .spyOn(ctx.client.eventRevisions, "find")
96
+ .mockImplementation(() => revision);
97
+
98
+ const mockPublish = jest
99
+ .spyOn(ctx.client.eventRevisions, "publish")
100
+ .mockImplementation(() => ({
101
+ event: null,
102
+ errors: [{ key: "url", message: "Oops" }],
103
+ }));
104
+
105
+ const result = await PublishesHandler.create(ctx, {
106
+ eventType: "event",
107
+ eventTypePlural: "events",
108
+ });
109
+
110
+ expect(mockFind).toHaveBeenCalledWith(revision.id, "en");
111
+ expect(mockPublish).toHaveBeenCalledWith(
112
+ revision.id,
113
+ "en",
114
+ {
115
+ title: publishing.title,
116
+ description: publishing.description,
117
+ },
118
+ {
119
+ visibility: publishing.visibility,
120
+ }
121
+ );
122
+
123
+ expect(result).toEqual({
124
+ assigns: {
125
+ publishing: {
126
+ id: revision.id,
127
+ originalId: revision.originalId,
128
+ title: publishing.title,
129
+ description: publishing.description,
130
+ visibility: publishing.visibility,
131
+ username: publishing.username,
132
+ password: publishing.password,
133
+ },
134
+ visibilityOptions: ctx.client.events.visibilityOptions(),
135
+ errors: {
136
+ url: "Oops",
137
+ },
138
+ _translations: [],
139
+ },
140
+ });
141
+ });
142
+ });
@@ -0,0 +1,47 @@
1
+ import PublishesHandler from "../../../../handlers/event_revisions/PublishesHandler";
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("Publish event revision", () => {
19
+ test("create_form", async () => {
20
+ const revision = Factory.build("event_revision");
21
+ const ctx = buildCtx(revision);
22
+ const mockFind = jest
23
+ .spyOn(ctx.client.eventRevisions, "find")
24
+ .mockImplementation(() => revision);
25
+
26
+ const result = await PublishesHandler.create_form(ctx);
27
+
28
+ expect(mockFind).toHaveBeenCalledWith(revision.id, "en");
29
+
30
+ expect(result).toEqual({
31
+ assigns: {
32
+ publishing: {
33
+ id: revision.id,
34
+ originalId: revision.originalId,
35
+ title: revision.meta.title,
36
+ description: revision.meta.description,
37
+ visibility: revision.visibility,
38
+ username: revision.settings?.credentials?.user,
39
+ password: revision.settings?.credentials?.password,
40
+ },
41
+ visibilityOptions: ctx.client.events.visibilityOptions(),
42
+ errors: {},
43
+ _translations: [],
44
+ },
45
+ });
46
+ });
47
+ });
@@ -0,0 +1,89 @@
1
+ import RevertsHandler from "../../../../handlers/event_revisions/RevertsHandler";
2
+ import EventRevisions from "../../../../cloud/EventRevisions";
3
+ import { testConfig } from "../../../../../test/handlersHelper";
4
+
5
+ function buildCtx(eventID, version) {
6
+ return {
7
+ client: {
8
+ eventRevisions: new EventRevisions(testConfig, "token"),
9
+ },
10
+ params: { parent_id: eventID },
11
+ resourceParams: { version },
12
+ locale: "en",
13
+ };
14
+ }
15
+
16
+ describe("Event revision revert", () => {
17
+ test("create successful", async () => {
18
+ const eventId = 42;
19
+ const version = 2;
20
+ const ctx = buildCtx(eventId, version);
21
+
22
+ const mockRevert = jest
23
+ .spyOn(ctx.client.eventRevisions, "revert")
24
+ .mockImplementation(() => ({
25
+ revision: {},
26
+ errors: null,
27
+ eventErrors: null,
28
+ }));
29
+
30
+ const result = await RevertsHandler.create(ctx, {
31
+ eventType: "event",
32
+ eventTypePlural: "events",
33
+ });
34
+
35
+ expect(mockRevert).toHaveBeenCalledWith(eventId, version, "en");
36
+
37
+ expect(result).toEqual({
38
+ redirect: `/en/events/${eventId}`,
39
+ });
40
+ });
41
+
42
+ test("create failed with errors", async () => {
43
+ const eventId = 42;
44
+ const version = 2;
45
+ const ctx = buildCtx(eventId, version);
46
+ const errors = [{ key: "generalError", message: "Some error" }];
47
+
48
+ const mockRevert = jest
49
+ .spyOn(ctx.client.eventRevisions, "revert")
50
+ .mockImplementation(() => ({
51
+ revision: null,
52
+ errors: errors,
53
+ eventErrors: null,
54
+ }));
55
+
56
+ expect(async () => {
57
+ await RevertsHandler.create(ctx, {
58
+ eventType: "event",
59
+ eventTypePlural: "events",
60
+ });
61
+ }).rejects.toThrow(`Failed to start revision: ${JSON.stringify(errors)}`);
62
+
63
+ expect(mockRevert).toHaveBeenCalledWith(eventId, version, "en");
64
+ });
65
+
66
+ test("create failed with event errors", async () => {
67
+ const eventId = 42;
68
+ const version = 2;
69
+ const ctx = buildCtx(eventId, version);
70
+ const errors = [{ key: "generalError", message: "Some error" }];
71
+
72
+ const mockRevert = jest
73
+ .spyOn(ctx.client.eventRevisions, "revert")
74
+ .mockImplementation(() => ({
75
+ revision: null,
76
+ errors: null,
77
+ eventErrors: errors,
78
+ }));
79
+
80
+ expect(async () => {
81
+ await RevertsHandler.create(ctx, {
82
+ eventType: "event",
83
+ eventTypePlural: "events",
84
+ });
85
+ }).rejects.toThrow(`Failed to start revision: ${JSON.stringify(errors)}`);
86
+
87
+ expect(mockRevert).toHaveBeenCalledWith(eventId, version, "en");
88
+ });
89
+ });