@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
@@ -22,7 +22,10 @@ describe("Clone article", () => {
22
22
  .spyOn(ctx.client.articles, "clone")
23
23
  .mockImplementation(() => article);
24
24
 
25
- const result = await ClonesHandler.create(ctx);
25
+ const result = await ClonesHandler.create(ctx, {
26
+ articleType: "article",
27
+ articleTypePlural: "articles",
28
+ });
26
29
 
27
30
  expect(mockClone).toHaveBeenCalledWith(article.id, "en");
28
31
 
@@ -44,7 +47,10 @@ describe("Clone article", () => {
44
47
  }));
45
48
 
46
49
  expect(async () => {
47
- await ClonesHandler.create(ctx);
50
+ await ClonesHandler.create(ctx, {
51
+ articleType: "article",
52
+ articleTypePlural: "articles",
53
+ });
48
54
  }).rejects.toThrow(
49
55
  `Error cloning article: ${JSON.stringify([{ key: "generalError", message: "some error" }])}`
50
56
  );
@@ -33,7 +33,10 @@ describe("Article delete", () => {
33
33
  .spyOn(ctx.client.articles, "delete")
34
34
  .mockImplementation(() => ({ article, errors: null }));
35
35
 
36
- const result = await DeletesHandler.create(ctx);
36
+ const result = await DeletesHandler.create(ctx, {
37
+ articleType: "article",
38
+ articleTypePlural: "articles",
39
+ });
37
40
 
38
41
  expect(mockFind).toHaveBeenCalledWith(article.id, "en");
39
42
  expect(mockDelete).toHaveBeenCalledWith(article.id, "en", {
@@ -73,7 +76,10 @@ describe("Article delete", () => {
73
76
  ],
74
77
  }));
75
78
 
76
- const result = await DeletesHandler.create(ctx);
79
+ const result = await DeletesHandler.create(ctx, {
80
+ articleType: "article",
81
+ articleTypePlural: "articles",
82
+ });
77
83
 
78
84
  expect(mockFind).toHaveBeenCalledWith(article.id, "en");
79
85
  expect(mockDelete).toHaveBeenCalledWith(article.id, "en", {
@@ -102,7 +108,10 @@ describe("Article delete", () => {
102
108
  .mockImplementation(() => null);
103
109
 
104
110
  expect(async () => {
105
- await DeletesHandler.create(ctx);
111
+ await DeletesHandler.create(ctx, {
112
+ articleType: "article",
113
+ articleTypePlural: "articles",
114
+ });
106
115
  }).rejects.toThrow("Missing article #42");
107
116
 
108
117
  expect(mockFind).toHaveBeenCalledWith("42", "en");
@@ -22,7 +22,10 @@ describe("Article delete", () => {
22
22
  .spyOn(ctx.client.articles, "find")
23
23
  .mockImplementation(() => article);
24
24
 
25
- const result = await DeletesHandler.create_form(ctx);
25
+ const result = await DeletesHandler.create_form(ctx, {
26
+ articleType: "article",
27
+ articleTypePlural: "articles",
28
+ });
26
29
 
27
30
  expect(mockFind).toHaveBeenCalledWith(article.id, "en");
28
31
 
@@ -46,7 +49,10 @@ describe("Article delete", () => {
46
49
  .mockImplementation(() => null);
47
50
 
48
51
  expect(async () => {
49
- await DeletesHandler.create_form(ctx);
52
+ await DeletesHandler.create_form(ctx, {
53
+ articleType: "article",
54
+ articleTypePlural: "articles",
55
+ });
50
56
  }).rejects.toThrow("Missing article #42");
51
57
 
52
58
  expect(mockFind).toHaveBeenCalledWith("42", "en");
@@ -33,7 +33,10 @@ describe("Article change url", () => {
33
33
  .spyOn(ctx.client.articles, "updateSlug")
34
34
  .mockImplementation(() => ({ article, errors: null }));
35
35
 
36
- const result = await URLsHandler.create(ctx);
36
+ const result = await URLsHandler.create(ctx, {
37
+ articleType: "article",
38
+ articleTypePlural: "articles",
39
+ });
37
40
 
38
41
  expect(mockFind).toHaveBeenCalledWith(article.id, "en");
39
42
  expect(mockChange).toHaveBeenCalledWith(
@@ -44,7 +47,7 @@ describe("Article change url", () => {
44
47
  url: `/${article.slug}`,
45
48
  destination: updateSettings.slug,
46
49
  httpResponseCode: 301,
47
- note: "Created with changed URL for a article",
50
+ note: "Created with changed URL for a resource of type article",
48
51
  }
49
52
  );
50
53
 
@@ -71,7 +74,10 @@ describe("Article change url", () => {
71
74
  errors: [{ codes: [], key: "slug", message: "has already been taken" }],
72
75
  }));
73
76
 
74
- const result = await URLsHandler.create(ctx);
77
+ const result = await URLsHandler.create(ctx, {
78
+ articleType: "article",
79
+ articleTypePlural: "articles",
80
+ });
75
81
 
76
82
  expect(mockFind).toHaveBeenCalledWith(article.id, "en");
77
83
  expect(mockChange).toHaveBeenCalledWith(
@@ -115,7 +121,10 @@ describe("Article change url", () => {
115
121
  ],
116
122
  }));
117
123
 
118
- const result = await URLsHandler.create(ctx);
124
+ const result = await URLsHandler.create(ctx, {
125
+ articleType: "article",
126
+ articleTypePlural: "articles",
127
+ });
119
128
 
120
129
  expect(mockFind).toHaveBeenCalledWith(article.id, "en");
121
130
  expect(mockChange).toHaveBeenCalledWith(
@@ -126,7 +135,7 @@ describe("Article change url", () => {
126
135
  url: `/${article.slug}`,
127
136
  destination: updateSettings.slug,
128
137
  httpResponseCode: 301,
129
- note: "Created with changed URL for a article",
138
+ note: "Created with changed URL for a resource of type article",
130
139
  }
131
140
  );
132
141
 
@@ -147,7 +156,10 @@ describe("Article change url", () => {
147
156
  .mockImplementation(() => null);
148
157
 
149
158
  expect(async () => {
150
- await URLsHandler.create(ctx);
159
+ await URLsHandler.create(ctx, {
160
+ articleType: "article",
161
+ articleTypePlural: "articles",
162
+ });
151
163
  }).rejects.toThrow("Cannot find article with id 42");
152
164
 
153
165
  expect(mockFind).toHaveBeenCalledWith("42", "en");
@@ -22,7 +22,10 @@ describe("Article change url", () => {
22
22
  .spyOn(ctx.client.articles, "find")
23
23
  .mockImplementation(() => article);
24
24
 
25
- const result = await URLsHandler.create_form(ctx);
25
+ const result = await URLsHandler.create_form(ctx, {
26
+ articleType: "article",
27
+ articleTypePlural: "articles",
28
+ });
26
29
 
27
30
  expect(mockFind).toHaveBeenCalledWith(article.id, "en");
28
31
 
@@ -43,7 +46,10 @@ describe("Article change url", () => {
43
46
  .mockImplementation(() => null);
44
47
 
45
48
  expect(async () => {
46
- await URLsHandler.create_form(ctx);
49
+ await URLsHandler.create_form(ctx, {
50
+ articleType: "article",
51
+ articleTypePlural: "articles",
52
+ });
47
53
  }).rejects.toThrow("Cannot find article with id 42");
48
54
 
49
55
  expect(mockFind).toHaveBeenCalledWith("42", "en");
@@ -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,152 @@
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
+ eventType: "event",
43
+ eventTypePlural: "events",
44
+ });
45
+
46
+ expect(mockFind).toHaveBeenCalledWith(revision.id, "en");
47
+ expect(mockUpdate).toHaveBeenCalledWith(revision.id, "en", {
48
+ slug: revision.slug,
49
+ title: revision.title,
50
+ visibility: revision.visibility,
51
+ publishAt: revision.publishAt,
52
+ startsAt: revision.startsAt,
53
+ endsAt: revision.endsAt,
54
+ widgets: JSON.stringify(revision.widgets),
55
+ tags: revision.tags.map((t) => t.id),
56
+ categories: revision.categories.map((c) => c.id),
57
+ settings: JSON.stringify({
58
+ ...revision.settings,
59
+ codes: {
60
+ scripts: [{ type: "bla" }],
61
+ structured_data: { type: "event" },
62
+ },
63
+ }),
64
+ });
65
+
66
+ expect(result).toEqual({
67
+ redirect: `/en/event_revisions/${revision.id}/codes/edit`,
68
+ });
69
+ });
70
+
71
+ test("update failed", async () => {
72
+ const revision = Factory.build("event_revision");
73
+
74
+ const updateSettings = {
75
+ scripts: JSON.stringify([{ type: "bla" }]),
76
+ structured_data: JSON.stringify({ type: "event" }),
77
+ };
78
+
79
+ const ctx = buildCtx(revision, updateSettings);
80
+
81
+ const mockFind = jest
82
+ .spyOn(ctx.client.eventRevisions, "find")
83
+ .mockImplementation(() => revision);
84
+
85
+ const mockUpdate = jest
86
+ .spyOn(ctx.client.eventRevisions, "update")
87
+ .mockImplementation(() => ({
88
+ revision: {},
89
+ errors: [{ key: "generalError", message: "some error" }],
90
+ }));
91
+
92
+ const result = await CodeHandler.update(ctx, {
93
+ eventType: "event",
94
+ eventTypePlural: "events",
95
+ });
96
+
97
+ expect(mockFind).toHaveBeenCalledWith(revision.id, "en");
98
+ expect(mockUpdate).toHaveBeenCalledWith(revision.id, "en", {
99
+ slug: revision.slug,
100
+ title: revision.title,
101
+ visibility: revision.visibility,
102
+ publishAt: revision.publishAt,
103
+ startsAt: revision.startsAt,
104
+ endsAt: revision.endsAt,
105
+ widgets: JSON.stringify(revision.widgets),
106
+ tags: revision.tags.map((t) => t.id),
107
+ categories: revision.categories.map((c) => c.id),
108
+ settings: JSON.stringify({
109
+ ...revision.settings,
110
+ codes: {
111
+ scripts: [{ type: "bla" }],
112
+ structured_data: { type: "event" },
113
+ },
114
+ }),
115
+ });
116
+
117
+ expect(result).toEqual({
118
+ assigns: {
119
+ code_settings: {
120
+ ...updateSettings,
121
+ id: revision.id,
122
+ originalId: revision.originalId,
123
+ },
124
+ errors: {
125
+ code_settings: { generalError: "some error" },
126
+ },
127
+ _translations: [],
128
+ },
129
+ });
130
+ });
131
+
132
+ test("update when a revision does not exist", async () => {
133
+ const revision = Factory.build("event_revision");
134
+
135
+ const updateSettings = {};
136
+
137
+ const ctx = buildCtx(revision, updateSettings);
138
+
139
+ const mockFind = jest
140
+ .spyOn(ctx.client.eventRevisions, "find")
141
+ .mockImplementation(() => null);
142
+
143
+ expect(async () => {
144
+ await CodeHandler.update(ctx, {
145
+ eventType: "event",
146
+ eventTypePlural: "events",
147
+ });
148
+ }).rejects.toThrow(`Missing revision #${revision.id}`);
149
+
150
+ expect(mockFind).toHaveBeenCalledWith(revision.id, "en");
151
+ });
152
+ });
@@ -0,0 +1,84 @@
1
+ import EventRevisionsHandler from "../../../../handlers/event_revisions/EventRevisionsHandler";
2
+ import EventRevisions from "../../../../cloud/EventRevisions";
3
+ import { testConfig } from "../../../../../test/handlersHelper";
4
+ import Factory from "../../../../../test/factory";
5
+
6
+ function buildCtx(eventID) {
7
+ return {
8
+ client: {
9
+ eventRevisions: new EventRevisions(testConfig, "token"),
10
+ },
11
+ params: { parent_id: eventID },
12
+ locale: "en",
13
+ };
14
+ }
15
+
16
+ describe("Event revisions", () => {
17
+ test("create successful", async () => {
18
+ const revision = Factory.build("event_revision", { originalId: 1 });
19
+ const ctx = buildCtx(revision.originalId);
20
+
21
+ const mockCreate = jest
22
+ .spyOn(ctx.client.eventRevisions, "create")
23
+ .mockImplementation(() => ({
24
+ revision,
25
+ errors: null,
26
+ eventErrors: null,
27
+ }));
28
+
29
+ const result = await EventRevisionsHandler.create(ctx, {
30
+ eventType: "event",
31
+ eventTypePlural: "events",
32
+ });
33
+
34
+ expect(mockCreate).toHaveBeenCalledWith(revision.originalId, "en");
35
+
36
+ expect(result).toEqual({
37
+ redirect: `/en/events/${revision.originalId}`,
38
+ });
39
+ });
40
+
41
+ test("create failed with errors", async () => {
42
+ const ctx = buildCtx(1);
43
+ const errors = [{ key: "generalError", message: "something went wrong" }];
44
+
45
+ const mockCreate = jest
46
+ .spyOn(ctx.client.eventRevisions, "create")
47
+ .mockImplementation(() => ({
48
+ revision: null,
49
+ errors,
50
+ eventErrors: null,
51
+ }));
52
+
53
+ expect(async () => {
54
+ await EventRevisionsHandler.create(ctx, {
55
+ eventType: "event",
56
+ eventTypePlural: "events",
57
+ });
58
+ }).rejects.toThrow(`Failed to start revision: ${JSON.stringify(errors)}`);
59
+
60
+ expect(mockCreate).toHaveBeenCalledWith(1, "en");
61
+ });
62
+
63
+ test("create failed with event errors", async () => {
64
+ const ctx = buildCtx(1);
65
+ const errors = [{ key: "generalError", message: "something went wrong" }];
66
+
67
+ const mockCreate = jest
68
+ .spyOn(ctx.client.eventRevisions, "create")
69
+ .mockImplementation(() => ({
70
+ revision: null,
71
+ errors: null,
72
+ eventErrors: errors,
73
+ }));
74
+
75
+ expect(async () => {
76
+ await EventRevisionsHandler.create(ctx, {
77
+ eventType: "event",
78
+ eventTypePlural: "events",
79
+ });
80
+ }).rejects.toThrow(`Failed to start revision: ${JSON.stringify(errors)}`);
81
+
82
+ expect(mockCreate).toHaveBeenCalledWith(1, "en");
83
+ });
84
+ });
@@ -0,0 +1,59 @@
1
+ import EventRevisionsHandler from "../../../../handlers/event_revisions/EventRevisionsHandler";
2
+ import EventRevisions from "../../../../cloud/EventRevisions";
3
+ import { testConfig } from "../../../../../test/handlersHelper";
4
+ import Factory from "../../../../../test/factory";
5
+
6
+ function buildCtx(revisionID) {
7
+ return {
8
+ client: {
9
+ eventRevisions: new EventRevisions(testConfig, "token"),
10
+ },
11
+ params: { id: revisionID },
12
+ locale: "en",
13
+ };
14
+ }
15
+
16
+ describe("Event revisions", () => {
17
+ test("destroy successful", async () => {
18
+ const revision = Factory.build("event_revision");
19
+ const ctx = buildCtx(1);
20
+
21
+ const mockDelete = jest
22
+ .spyOn(ctx.client.eventRevisions, "delete")
23
+ .mockImplementation(() => ({ revision, errors: null }));
24
+
25
+ const result = await EventRevisionsHandler.destroy(ctx, {
26
+ eventType: "event",
27
+ eventTypePlural: "events",
28
+ });
29
+
30
+ expect(mockDelete).toHaveBeenCalledWith(1, "en");
31
+
32
+ expect(result).toEqual({
33
+ headers: {
34
+ "HX-Redirect": `/en/events/${revision.originalId}`,
35
+ },
36
+ json: {},
37
+ });
38
+ });
39
+
40
+ test("destroy failed", async () => {
41
+ const ctx = buildCtx(1);
42
+ const errors = [{ key: "generalError", message: "something went wrong" }];
43
+
44
+ const mockDelete = jest
45
+ .spyOn(ctx.client.eventRevisions, "delete")
46
+ .mockImplementation(() => ({ revision: null, errors }));
47
+
48
+ expect(async () => {
49
+ await EventRevisionsHandler.destroy(ctx, {
50
+ eventType: "event",
51
+ eventTypePlural: "events",
52
+ });
53
+ }).rejects.toThrow(
54
+ `Failed to delete revision#${1}: ${JSON.stringify(errors)}`
55
+ );
56
+
57
+ expect(mockDelete).toHaveBeenCalledWith(1, "en");
58
+ });
59
+ });
@@ -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
+ });