strapi-plugin-comments 2.0.10 → 2.1.0-beta.1

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 (266) hide show
  1. package/README.md +164 -120
  2. package/admin/src/components/ActionButton/styles.d.ts +2 -0
  3. package/admin/src/components/ActionButton/styles.js +13 -8
  4. package/admin/src/components/ConfirmationDialog/index.d.ts +26 -0
  5. package/admin/src/components/ConfirmationDialog/index.js +36 -55
  6. package/admin/src/components/DiscussionStatus/index.d.ts +9 -0
  7. package/admin/src/components/DiscussionStatus/index.js +22 -31
  8. package/admin/src/components/DiscussionThread/index.d.ts +16 -0
  9. package/admin/src/components/DiscussionThread/index.js +39 -56
  10. package/admin/src/components/DiscussionThreadItem/index.d.ts +9 -0
  11. package/admin/src/components/DiscussionThreadItem/index.js +28 -52
  12. package/admin/src/components/DiscussionThreadItem/styles.d.ts +4 -0
  13. package/admin/src/components/DiscussionThreadItem/styles.js +16 -11
  14. package/admin/src/components/DiscussionThreadItemActions/index.d.ts +19 -0
  15. package/admin/src/components/DiscussionThreadItemActions/index.js +121 -158
  16. package/admin/src/components/DiscussionThreadItemActions/styles.d.ts +2 -0
  17. package/admin/src/components/DiscussionThreadItemActions/styles.js +13 -7
  18. package/admin/src/components/DiscussionThreadItemApprovalFlowActions/index.d.ts +17 -0
  19. package/admin/src/components/DiscussionThreadItemApprovalFlowActions/index.js +38 -48
  20. package/admin/src/components/DiscussionThreadItemApprovalFlowActions/styles.d.ts +2 -0
  21. package/admin/src/components/DiscussionThreadItemApprovalFlowActions/styles.js +12 -6
  22. package/admin/src/components/DiscussionThreadItemFooter/index.d.ts +16 -0
  23. package/admin/src/components/DiscussionThreadItemFooter/index.js +35 -42
  24. package/admin/src/components/DiscussionThreadItemFooter/styles.d.ts +3 -0
  25. package/admin/src/components/DiscussionThreadItemFooter/styles.js +17 -12
  26. package/admin/src/components/DiscussionThreadItemReviewAction/index.d.ts +30 -0
  27. package/admin/src/components/DiscussionThreadItemReviewAction/index.js +77 -91
  28. package/admin/src/components/FormSwitch/index.d.ts +7 -0
  29. package/admin/src/components/FormSwitch/index.js +15 -18
  30. package/admin/src/components/FormSwitch/styles.d.ts +2 -0
  31. package/admin/src/components/FormSwitch/styles.js +14 -8
  32. package/admin/src/components/IconButton/styles.d.ts +2 -0
  33. package/admin/src/components/IconButton/styles.js +16 -9
  34. package/admin/src/components/Initializer/index.d.ts +5 -0
  35. package/admin/src/components/Initializer/index.js +12 -24
  36. package/admin/src/components/LoadingIndicatorOverlay/index.d.ts +3 -0
  37. package/admin/src/components/LoadingIndicatorOverlay/index.js +12 -15
  38. package/admin/src/components/LoadingIndicatorOverlay/styles.d.ts +3 -0
  39. package/admin/src/components/LoadingIndicatorOverlay/styles.js +22 -17
  40. package/admin/src/components/Nav/index.d.ts +7 -0
  41. package/admin/src/components/Nav/index.js +25 -48
  42. package/admin/src/components/PluginIcon/index.d.ts +3 -0
  43. package/admin/src/components/PluginIcon/index.js +10 -12
  44. package/admin/src/components/ReportsReviewModal/index.d.ts +21 -0
  45. package/admin/src/components/ReportsReviewModal/index.js +31 -46
  46. package/admin/src/components/ReportsReviewTable/index.d.ts +21 -0
  47. package/admin/src/components/ReportsReviewTable/index.js +120 -140
  48. package/admin/src/components/StatusBadge/index.d.ts +7 -0
  49. package/admin/src/components/StatusBadge/index.js +12 -17
  50. package/admin/src/components/StatusBadge/styles.d.ts +2 -0
  51. package/admin/src/components/StatusBadge/styles.js +19 -13
  52. package/admin/src/components/TableFilters/index.d.ts +10 -0
  53. package/admin/src/components/TableFilters/index.js +52 -49
  54. package/admin/src/components/TablePagination/index.d.ts +17 -0
  55. package/admin/src/components/TablePagination/index.js +27 -29
  56. package/admin/src/components/icons/comments.d.ts +6 -0
  57. package/admin/src/components/icons/comments.js +11 -8
  58. package/admin/src/components/icons/index.d.ts +6 -0
  59. package/admin/src/components/icons/index.js +15 -6
  60. package/admin/src/components/icons/lock.d.ts +7 -0
  61. package/admin/src/components/icons/lock.js +11 -21
  62. package/admin/src/components/icons/review.d.ts +7 -0
  63. package/admin/src/components/icons/review.js +11 -17
  64. package/admin/src/components/icons/unlock.d.ts +7 -0
  65. package/admin/src/components/icons/unlock.js +11 -19
  66. package/admin/src/hooks/useConfig.d.ts +8 -0
  67. package/admin/src/hooks/useConfig.js +40 -45
  68. package/admin/src/index.d.ts +7 -0
  69. package/admin/src/index.js +98 -92
  70. package/admin/src/pages/App/index.d.ts +4 -0
  71. package/admin/src/pages/App/index.js +43 -67
  72. package/admin/src/pages/App/reducer/actions.d.ts +8 -0
  73. package/admin/src/pages/App/reducer/actions.js +11 -7
  74. package/admin/src/pages/App/reducer/constants.d.ts +4 -0
  75. package/admin/src/pages/App/reducer/constants.js +7 -4
  76. package/admin/src/pages/App/reducer/index.d.ts +9 -0
  77. package/admin/src/pages/App/reducer/index.js +24 -22
  78. package/admin/src/pages/App/reducer/init.d.ts +3 -0
  79. package/admin/src/pages/App/reducer/init.js +6 -4
  80. package/admin/src/pages/App/reducer/selectors.d.ts +6 -0
  81. package/admin/src/pages/App/reducer/selectors.js +17 -34
  82. package/admin/src/pages/App/utils/api.d.ts +2 -0
  83. package/admin/src/pages/App/utils/api.js +14 -11
  84. package/admin/src/pages/ComingSoonPage/index.d.ts +3 -0
  85. package/admin/src/pages/ComingSoonPage/index.js +42 -24
  86. package/admin/src/pages/Details/components/DetailsEntity/index.d.ts +18 -0
  87. package/admin/src/pages/Details/components/DetailsEntity/index.js +49 -77
  88. package/admin/src/pages/Details/components/DetailsFilters/index.d.ts +12 -0
  89. package/admin/src/pages/Details/components/DetailsFilters/index.js +19 -26
  90. package/admin/src/pages/Details/components/DetailsFilters/styles.d.ts +2 -0
  91. package/admin/src/pages/Details/components/DetailsFilters/styles.js +14 -8
  92. package/admin/src/pages/Details/index.d.ts +4 -0
  93. package/admin/src/pages/Details/index.js +94 -133
  94. package/admin/src/pages/Discover/components/DiscoverTableRow/index.d.ts +20 -0
  95. package/admin/src/pages/Discover/components/DiscoverTableRow/index.js +128 -139
  96. package/admin/src/pages/Discover/components/DiscoverTableRow/styles.d.ts +2 -0
  97. package/admin/src/pages/Discover/components/DiscoverTableRow/styles.js +14 -8
  98. package/admin/src/pages/Discover/index.d.ts +4 -0
  99. package/admin/src/pages/Discover/index.js +129 -170
  100. package/admin/src/pages/Discover/utils/api.d.ts +2 -0
  101. package/admin/src/pages/Discover/utils/api.js +15 -13
  102. package/admin/src/pages/Discover/utils/filtersSchema.d.ts +11 -0
  103. package/admin/src/pages/Discover/utils/filtersSchema.js +8 -6
  104. package/admin/src/pages/Settings/components/RestartAlert/styles.d.ts +2 -0
  105. package/admin/src/pages/Settings/components/RestartAlert/styles.js +14 -8
  106. package/admin/src/pages/Settings/index.d.ts +3 -0
  107. package/admin/src/pages/Settings/index.js +225 -391
  108. package/admin/src/pages/Settings/utils/api.d.ts +7 -0
  109. package/admin/src/pages/Settings/utils/api.js +60 -55
  110. package/admin/src/pages/utils/api.d.ts +12 -0
  111. package/admin/src/pages/utils/api.js +58 -53
  112. package/admin/src/permissions.d.ts +28 -0
  113. package/admin/src/permissions.js +31 -17
  114. package/admin/src/pluginId.d.ts +2 -0
  115. package/admin/src/pluginId.js +29 -5
  116. package/admin/src/reducers.d.ts +7 -0
  117. package/admin/src/reducers.js +10 -6
  118. package/admin/src/translations/en.json +131 -131
  119. package/admin/src/translations/fr.json +1 -1
  120. package/admin/src/utils/axiosInstance.d.ts +3 -0
  121. package/admin/src/utils/axiosInstance.js +21 -27
  122. package/admin/src/utils/constants.d.ts +25 -0
  123. package/admin/src/utils/constants.js +23 -22
  124. package/admin/src/utils/getApiUrl.d.ts +3 -0
  125. package/admin/src/utils/getApiUrl.js +6 -5
  126. package/admin/src/utils/getMessage.d.ts +4 -0
  127. package/admin/src/utils/getMessage.js +15 -15
  128. package/admin/src/utils/getRelatedGroups.d.ts +4 -0
  129. package/admin/src/utils/getRelatedGroups.js +5 -3
  130. package/admin/src/utils/getUrl.d.ts +3 -0
  131. package/admin/src/utils/getUrl.js +6 -5
  132. package/admin/src/utils/handleAPIError.d.ts +4 -0
  133. package/admin/src/utils/handleAPIError.js +12 -11
  134. package/admin/src/utils/index.d.ts +12 -0
  135. package/admin/src/utils/index.js +29 -11
  136. package/admin/src/utils/parseRegExp.d.ts +6 -0
  137. package/admin/src/utils/parseRegExp.js +6 -5
  138. package/admin/src/utils/renderEntryTitle.d.ts +4 -0
  139. package/admin/src/utils/renderEntryTitle.js +11 -12
  140. package/admin/src/utils/renderInitials.d.ts +3 -0
  141. package/admin/src/utils/renderInitials.js +10 -5
  142. package/admin/src/utils/resolveCommentStatus.d.ts +4 -0
  143. package/admin/src/utils/resolveCommentStatus.js +17 -21
  144. package/admin/src/utils/resolveCommentStatusColor.d.ts +4 -0
  145. package/admin/src/utils/resolveCommentStatusColor.js +19 -19
  146. package/content-types/comment.d.ts +91 -0
  147. package/content-types/comment.js +87 -88
  148. package/content-types/index.d.ts +143 -0
  149. package/content-types/index.js +15 -10
  150. package/content-types/report.d.ts +48 -0
  151. package/content-types/report.js +44 -49
  152. package/package.json +24 -19
  153. package/permissions.d.ts +18 -0
  154. package/permissions.js +12 -13
  155. package/server/bootstrap.d.ts +4 -0
  156. package/server/bootstrap.js +56 -62
  157. package/server/config/index.d.ts +4 -0
  158. package/server/config/index.js +17 -15
  159. package/server/controllers/admin.d.ts +4 -0
  160. package/server/controllers/admin.js +134 -167
  161. package/server/controllers/client.d.ts +4 -0
  162. package/server/controllers/client.js +104 -112
  163. package/server/controllers/index.d.ts +6 -0
  164. package/server/controllers/index.js +12 -8
  165. package/server/controllers/utils/functions.d.ts +7 -0
  166. package/server/controllers/utils/functions.js +22 -17
  167. package/server/controllers/utils/parsers.d.ts +15 -0
  168. package/server/controllers/utils/parsers.js +17 -17
  169. package/server/destroy.d.ts +3 -0
  170. package/server/destroy.js +3 -4
  171. package/server/graphql/index.d.ts +4 -0
  172. package/server/graphql/index.js +27 -25
  173. package/server/graphql/mutations/createAbuseReport.d.ts +11 -0
  174. package/server/graphql/mutations/createAbuseReport.js +22 -24
  175. package/server/graphql/mutations/createComment.d.ts +14 -0
  176. package/server/graphql/mutations/createComment.js +22 -24
  177. package/server/graphql/mutations/index.d.ts +4 -0
  178. package/server/graphql/mutations/index.js +24 -19
  179. package/server/graphql/mutations/removeComment.d.ts +11 -0
  180. package/server/graphql/mutations/removeComment.js +22 -24
  181. package/server/graphql/mutations/updateComment.d.ts +11 -0
  182. package/server/graphql/mutations/updateComment.js +22 -24
  183. package/server/graphql/queries/findAllFlat.d.ts +19 -0
  184. package/server/graphql/queries/findAllFlat.js +31 -34
  185. package/server/graphql/queries/findAllInHierarchy.d.ts +18 -0
  186. package/server/graphql/queries/findAllInHierarchy.js +26 -30
  187. package/server/graphql/queries/index.d.ts +4 -0
  188. package/server/graphql/queries/index.js +20 -17
  189. package/server/graphql/resolvers-config.d.ts +23 -0
  190. package/server/graphql/resolvers-config.js +11 -11
  191. package/server/graphql/types/comment-author.d.ts +4 -0
  192. package/server/graphql/types/comment-author.js +10 -8
  193. package/server/graphql/types/comment-nested.d.ts +4 -0
  194. package/server/graphql/types/comment-nested.js +17 -15
  195. package/server/graphql/types/comment.d.ts +4 -0
  196. package/server/graphql/types/comment.js +16 -14
  197. package/server/graphql/types/create-comment-author.d.ts +4 -0
  198. package/server/graphql/types/create-comment-author.js +10 -8
  199. package/server/graphql/types/create-comment.d.ts +4 -0
  200. package/server/graphql/types/create-comment.js +10 -8
  201. package/server/graphql/types/create-report.d.ts +4 -0
  202. package/server/graphql/types/create-report.js +10 -8
  203. package/server/graphql/types/id.d.ts +4 -0
  204. package/server/graphql/types/id.js +24 -23
  205. package/server/graphql/types/identify-comment-author.d.ts +4 -0
  206. package/server/graphql/types/identify-comment-author.js +7 -5
  207. package/server/graphql/types/index.d.ts +4 -0
  208. package/server/graphql/types/index.js +36 -17
  209. package/server/graphql/types/remove-comment.d.ts +4 -0
  210. package/server/graphql/types/remove-comment.js +9 -7
  211. package/server/graphql/types/report-reason.d.ts +4 -0
  212. package/server/graphql/types/report-reason.js +10 -8
  213. package/server/graphql/types/report.d.ts +4 -0
  214. package/server/graphql/types/report.js +12 -10
  215. package/server/graphql/types/response-find-all.d.ts +4 -0
  216. package/server/graphql/types/response-find-all.js +8 -6
  217. package/server/graphql/types/response-meta.d.ts +4 -0
  218. package/server/graphql/types/response-meta.js +7 -5
  219. package/server/graphql/types/response-pagination.d.ts +4 -0
  220. package/server/graphql/types/response-pagination.js +12 -10
  221. package/server/graphql/types/update-comment.d.ts +4 -0
  222. package/server/graphql/types/update-comment.js +10 -8
  223. package/server/index.d.ts +26 -0
  224. package/server/index.js +24 -21
  225. package/server/register.d.ts +3 -0
  226. package/server/register.js +3 -4
  227. package/server/routes/admin.d.ts +4 -0
  228. package/server/routes/admin.js +103 -109
  229. package/server/routes/client.d.ts +4 -0
  230. package/server/routes/client.js +48 -46
  231. package/server/routes/index.d.ts +11 -0
  232. package/server/routes/index.js +18 -14
  233. package/server/services/admin.d.ts +5 -0
  234. package/server/services/admin.js +126 -158
  235. package/server/services/client.d.ts +5 -0
  236. package/server/services/client.js +135 -151
  237. package/server/services/common.d.ts +5 -0
  238. package/server/services/common.js +165 -194
  239. package/server/services/graphql.d.ts +5 -0
  240. package/server/services/graphql.js +117 -182
  241. package/server/services/index.d.ts +8 -0
  242. package/server/services/index.js +15 -12
  243. package/server/services/utils/functions.d.ts +13 -0
  244. package/server/services/utils/functions.js +100 -109
  245. package/server/utils/constants.d.ts +9 -0
  246. package/server/utils/constants.js +19 -23
  247. package/server/utils/error.d.ts +19 -0
  248. package/server/utils/error.js +23 -18
  249. package/server/utils/functions.d.ts +6 -0
  250. package/server/utils/functions.js +35 -18
  251. package/strapi-admin.d.ts +3 -0
  252. package/strapi-admin.js +8 -3
  253. package/strapi-server.d.ts +177 -0
  254. package/strapi-server.js +43 -46
  255. package/tsconfig.tsbuildinfo +1 -0
  256. package/types/contentTypes.d.ts +44 -0
  257. package/types/contentTypes.js +3 -0
  258. package/.husky/pre-commit +0 -4
  259. package/LICENSE.md +0 -7
  260. package/__mocks__/initSetup.js +0 -108
  261. package/jest.config.js +0 -7
  262. package/server/controllers/utils/__tests__/functions.test.js +0 -43
  263. package/server/controllers/utils/__tests__/parsers.test.js +0 -94
  264. package/server/services/__tests__/common.test.js +0 -399
  265. package/server/services/utils/__tests__/functions.test.js +0 -53
  266. package/server/utils/__tests__/functions.test.js +0 -17
@@ -1,399 +0,0 @@
1
- const { CONFIG_PARAMS } = require('../../utils/constants');
2
- const PluginError = require('../../utils/error');
3
- const { getPluginService } = require('../../utils/functions');
4
-
5
- jest.mock
6
-
7
-
8
- const setup = function(config, toStore, database) {
9
- Object.defineProperty(global, 'strapi', {
10
- value: require('../../../__mocks__/initSetup')(config, toStore, database),
11
- writable: true,
12
- });
13
- }
14
-
15
- afterEach(() => {
16
- Object.defineProperty(global, 'strapi', {});
17
- })
18
-
19
- describe('Test Comments service functions utils', () => {
20
- describe('Get plugin store', () => {
21
- beforeEach(() => setup());
22
-
23
- test('Should return store', async () => {
24
- const pluginStore = await getPluginService('common').getPluginStore();
25
- expect(pluginStore).toHaveProperty('get');
26
- expect(pluginStore).toHaveProperty('set');
27
- expect(pluginStore).toHaveProperty('delete');
28
- });
29
- });
30
-
31
- describe('Get plugin config', () => {
32
- describe('Local config', () => {
33
- beforeEach(() => setup({
34
- test: 'sample',
35
- }));
36
-
37
- test('Should return config value', async () => {
38
- const result = await getPluginService('common').getConfig('test');
39
- expect(result).toEqual('sample');
40
- });
41
-
42
- test('Should return default config prop value if not set', async () => {
43
- const result = await getPluginService('common').getConfig('another', 'defaultValue');
44
- expect(result).toEqual('defaultValue');
45
- });
46
- });
47
-
48
- describe('Store config', () => {
49
- beforeEach(() => setup({
50
- test: 'sample',
51
- }, true));
52
-
53
- test('Should return config value', async () => {
54
- const result = await getPluginService('common').getConfig('test');
55
- expect(result).toEqual('sample');
56
- });
57
-
58
- test('Should return default config prop value if not set', async () => {
59
- const result = await getPluginService('common').getConfig('another', 'defaultValue');
60
- expect(result).toEqual('defaultValue');
61
- });
62
- });
63
- });
64
-
65
- describe('Validate user context', () => {
66
- beforeEach(() => setup());
67
-
68
- test('Should context be valid', () => {
69
- expect(getPluginService('common').isValidUserContext({ id: 1 })).toEqual(true);
70
- });
71
-
72
- test('Should context be invalid', () => {
73
- expect(getPluginService('common').isValidUserContext({ })).toEqual(false);
74
- });
75
-
76
- test('Should use fallback', () => {
77
- expect(getPluginService('common').isValidUserContext()).toEqual(true);
78
- });
79
- });
80
-
81
- describe('Sanitize comments entity', () => {
82
- beforeEach(() => setup());
83
-
84
- const sample = {
85
- id: 1,
86
- content: 'Test text',
87
- blocked: false,
88
- removed: true,
89
- };
90
-
91
- const authorSample = {
92
- id: 1,
93
- username: 'Joe Doe',
94
- email: 'test@example.com',
95
- password: 'xxx',
96
- };
97
-
98
- const authorGenericSample = {
99
- authorId: 1,
100
- authorName: 'Joe Doe',
101
- authorEmail: 'test@example.com',
102
- };
103
-
104
- const outputAuthorSample = {
105
- id: 1,
106
- name: 'Joe Doe',
107
- email: 'test@example.com',
108
- };
109
-
110
- test('Should return exact the same value', () => {
111
- const input = { ...sample };
112
- const output = getPluginService('common').sanitizeCommentEntity(input);
113
- expect(output).toHaveProperty('id', input.id);
114
- expect(output).toHaveProperty('content', input.content);
115
- expect(output).toHaveProperty('blocked', input.blocked);
116
- expect(output).toHaveProperty('removed', input.removed);
117
- });
118
-
119
- test('Should return entity with \'author\' property for generic author', () => {
120
- const input = {
121
- ...sample,
122
- ...authorGenericSample,
123
- };
124
- const output = getPluginService('common').sanitizeCommentEntity(input);
125
-
126
- expect(output).toHaveProperty('author');
127
- expect(output).toHaveProperty('author.id', input.authorId);
128
- expect(output).toHaveProperty('author.id', outputAuthorSample.id);
129
- expect(output).toHaveProperty('author.name', input.authorName);
130
- expect(output).toHaveProperty('author.name', outputAuthorSample.name);
131
- expect(output).toHaveProperty('author.email', input.authorEmail);
132
- expect(output).toHaveProperty('author.email', outputAuthorSample.email);
133
-
134
- expect(output).not.toHaveProperty('authorId');
135
- expect(output).not.toHaveProperty('authorName');
136
- expect(output).not.toHaveProperty('authorEmail');
137
- });
138
-
139
- test('Should return entity with \'author\' property for Strapi author', () => {
140
- const input = {
141
- ...sample,
142
- authorUser: authorSample,
143
- };
144
- const output = getPluginService('common').sanitizeCommentEntity(input);
145
-
146
- expect(output).toHaveProperty('author');
147
- expect(output).toHaveProperty('author.id', input.authorUser.id);
148
- expect(output).toHaveProperty('author.id', outputAuthorSample.id);
149
- expect(output).toHaveProperty('author.name', input.authorUser.username);
150
- expect(output).toHaveProperty('author.name', outputAuthorSample.name);
151
- expect(output).toHaveProperty('author.email', input.authorUser.email);
152
- expect(output).toHaveProperty('author.email', outputAuthorSample.email);
153
-
154
- expect(output).not.toHaveProperty('authorUser');
155
-
156
- expect(output).not.toHaveProperty('author.password');
157
- });
158
- });
159
-
160
- describe('Bad Words filtering', () => {
161
- beforeEach(() => setup());
162
-
163
- const text = 'Lorem ipsum dolor sit fuck amet';
164
-
165
- test('Should find bad words usage and throw error PluginError', async () => {
166
- expect.assertions(7);
167
- try {
168
- await getPluginService('common').checkBadWords(text);
169
- } catch (e) {
170
- expect(await getPluginService('common').getConfig('badWords')).toEqual(undefined);
171
- expect(e).toBeInstanceOf(PluginError);
172
- expect(e).toHaveProperty('status', 400);
173
- expect(e).toHaveProperty('name', 'Strapi:Plugin:Comments');
174
- expect(e).toHaveProperty('message', 'Bad language used! Please polite your comment...');
175
- expect(e).toHaveProperty('payload');
176
- expect(e.payload).toEqual(expect.objectContaining({
177
- content: {
178
- original: text,
179
- filtered: text.replace('fuck', '****'),
180
- }
181
- }));
182
- }
183
- });
184
- });
185
-
186
- describe('Bad Words filtering', () => {
187
- beforeEach(() => setup({ badWords: false }));
188
-
189
- const text = 'Lorem ipsum dolor sit fuck amet';
190
-
191
- test('Should skip bad words filtering because of configuration change', async () => {
192
- expect(await getPluginService('common').getConfig('badWords')).toEqual(false);
193
- expect(await getPluginService('common').checkBadWords(text)).toEqual(text);
194
- });
195
- });
196
-
197
- describe('Parse relation string (store config)', () => {
198
- const [uid, id] = ['api::my-collection.my-content-type', '1'];
199
- const validCollection = `${uid}:${id}`;
200
-
201
- const [wrongUid, wrongId] = ['api::wrong.type', '2'];
202
- const testCollection = `${wrongUid}:${wrongId}`;
203
-
204
- describe('Store config', () => {
205
- beforeEach(() => setup({ enabledCollections: [uid] }, true));
206
-
207
- test('Should pass', async () => {
208
- expect(await getPluginService('common').parseRelationString(validCollection));
209
- expect(await getPluginService('common').getConfig(CONFIG_PARAMS.ENABLED_COLLECTIONS)).toContain(uid);
210
- });
211
-
212
- test('Should fail with 403', async () => {
213
-
214
- try {
215
- await getPluginService('common').parseRelationString(testCollection);
216
- } catch(e) {
217
- expect(await getPluginService('common').getConfig(CONFIG_PARAMS.ENABLED_COLLECTIONS)).toContain(uid);
218
- expect(await getPluginService('common').getConfig(CONFIG_PARAMS.ENABLED_COLLECTIONS)).not.toContain(wrongUid);
219
- expect(e).toBeInstanceOf(PluginError);
220
- expect(e).toHaveProperty('status', 403);
221
- }
222
- });
223
- });
224
-
225
- describe('Local config', () => {
226
- beforeEach(() => setup({ enabledCollections: [uid] }));
227
-
228
- test('Should pass', async () => {
229
- expect(await getPluginService('common').parseRelationString(validCollection));
230
- expect(await getPluginService('common').getConfig(CONFIG_PARAMS.ENABLED_COLLECTIONS)).toContain(uid);
231
- });
232
-
233
- test('Should fail with 403', async () => {
234
-
235
- try {
236
- await getPluginService('common').parseRelationString(testCollection);
237
- } catch(e) {
238
- expect(await getPluginService('common').getConfig(CONFIG_PARAMS.ENABLED_COLLECTIONS)).toContain(uid);
239
- expect(await getPluginService('common').getConfig(CONFIG_PARAMS.ENABLED_COLLECTIONS)).not.toContain(wrongUid);
240
- expect(e).toBeInstanceOf(PluginError);
241
- expect(e).toHaveProperty('status', 403);
242
- }
243
- });
244
- });
245
-
246
- describe('Merge related entity', () => {
247
- beforeEach(() => setup({ enabledCollections: [uid] }));
248
- const collection = 'api::collection.test';
249
- const related = `${collection}:1`;
250
- const comment = {
251
- id: 1,
252
- content: 'ABC',
253
- threadOf: null,
254
- related,
255
- authorId: 1,
256
- authorName: 'Joe Doe',
257
- authorEmail: 'joe@example.com'
258
- };
259
- const relatedEntity = { id: 1, title: 'Test', uid: collection};
260
-
261
-
262
- test('Should merge related entity', async () => {
263
- const result = await getPluginService('common').mergeRelatedEntityTo(comment, [relatedEntity]);
264
- expect(result).toHaveProperty('id', 1);
265
- expect(result).not.toHaveProperty('related', related);
266
- expect(result).toHaveProperty(['related', 'title'], relatedEntity.title);
267
- });
268
- });
269
-
270
- describe('Client API', () => {
271
- const collection = 'api::collection.test';
272
- const related = `${collection}:1`;
273
- const db = [{
274
- id: 1,
275
- content: 'ABC',
276
- threadOf: null,
277
- related,
278
- authorId: 1,
279
- authorName: 'Joe Doe',
280
- authorEmail: 'joe@example.com'
281
- }, {
282
- id: 2,
283
- content: 'DEF',
284
- threadOf: 1,
285
- related,
286
- authorId: 1,
287
- authorName: 'Joe Doe',
288
- authorEmail: 'joe@example.com',
289
- blockedThread: true,
290
- }, {
291
- id: 3,
292
- content: 'GHJ',
293
- threadOf: null,
294
- related,
295
- authorId: 1,
296
- authorName: 'Joe Doe',
297
- authorEmail: 'joe@example.com'
298
- }, {
299
- id: 4,
300
- content: 'IKL',
301
- threadOf: 2,
302
- related,
303
- authorId: 1,
304
- authorName: 'Joe Doe',
305
- authorEmail: 'joe@example.com',
306
- }];
307
- const relatedEntity = { id: 1, title: 'Test', uid: collection};
308
-
309
- beforeEach(() => setup({ enabledCollections: [collection] }, true, {
310
- 'plugins::comments': db,
311
- 'api::collection': [relatedEntity, { id: 2, title: 'Test 2', uid: collection }],
312
- }));
313
-
314
- describe('findAllFlat', () => {
315
- test('Should return proper structure', async () => {
316
- const result = await getPluginService('common').findAllFlat({ query: { related }}, relatedEntity);
317
- expect(result).toHaveProperty('data');
318
- expect(result).not.toHaveProperty('meta');
319
- expect(result.data.length).toBe(4);
320
- expect(result).toHaveProperty(['data', 0, 'content'], db[0].content);
321
- expect(result).toHaveProperty(['data', 3, 'content'], db[3].content);
322
- });
323
-
324
- test('Should return structure with pagination', async () => {
325
- const result = await getPluginService('common').findAllFlat({ query: { related }, pagination: { page: 1, pageSize: 5 }}, relatedEntity);
326
- expect(result).toHaveProperty('data');
327
- expect(result).toHaveProperty('meta');
328
- expect(result.data.length).toBe(4);
329
- expect(result).toHaveProperty(['data', 0, 'content'], db[0].content);
330
- expect(result).toHaveProperty(['data', 0, 'author']);
331
- expect(result).toHaveProperty(['data', 0, 'author', 'id'], db[0].authorId);
332
- expect(result).toHaveProperty(['data', 0, 'author', 'name'], db[0].authorName);
333
- expect(result).toHaveProperty(['data', 0, 'author', 'email'], db[0].authorEmail);
334
- expect(result).toHaveProperty(['data', 3, 'content'], db[3].content);
335
- expect(result).toHaveProperty(['meta', 'pagination', 'page'], 1);
336
- expect(result).toHaveProperty(['meta', 'pagination', 'pageSize'], 5);
337
- });
338
- });
339
-
340
- describe('findAllInHierarchy', () => {
341
- test('Should return nested structure starting for root', async () => {
342
- const result = await getPluginService('common').findAllInHierarchy({ query: { related }}, relatedEntity);
343
- expect(result).not.toHaveProperty('data');
344
- expect(result).not.toHaveProperty('meta');
345
- expect(result.length).toBe(2);
346
- expect(result).toHaveProperty([0, 'content'], db[0].content);
347
- expect(result).toHaveProperty([0, 'children']);
348
- expect(result[0].children.length).toBe(1);
349
- expect(result).toHaveProperty([0, 'children', 0, 'content'], 'DEF');
350
- expect(result).toHaveProperty([0, 'children', 0, 'children']);
351
- expect(result[0].children[0].children.length).toBe(1);
352
- expect(result).toHaveProperty([0, 'children', 0, 'children', 0, 'content'], 'IKL');
353
- expect(result).toHaveProperty([1, 'content'], db[2].content);
354
- });
355
-
356
- test('Should return nested structure starting for comment id: 1', async () => {
357
- const result = await getPluginService('common').findAllInHierarchy({ query: { related }, startingFromId: 1}, relatedEntity);
358
- expect(result).not.toHaveProperty('data');
359
- expect(result).not.toHaveProperty('meta');
360
- expect(result.length).toBe(1);
361
- expect(result).toHaveProperty([0, 'content'], db[1].content);
362
- expect(result).toHaveProperty([0, 'children']);
363
- expect(result[0].children.length).toBe(1);
364
- expect(result).toHaveProperty([0, 'children', 0, 'content'], 'IKL');
365
- });
366
-
367
- test('Should return nested structure starting for comment id: 1 without blocked comments', async () => {
368
- const result = await getPluginService('common').findAllInHierarchy({ query: { related }, startingFromId: 1, dropBlockedThreads: true}, relatedEntity);
369
- expect(result).not.toHaveProperty('data');
370
- expect(result).not.toHaveProperty('meta');
371
- expect(result.length).toBe(1);
372
- expect(result).toHaveProperty([0, 'content'], db[1].content);
373
- expect(result).toHaveProperty([0, 'children']);
374
- expect(result[0].children.length).toBe(0);
375
- });
376
- });
377
-
378
- describe('findOne', () => {
379
- test('Should return proper structure', async () => {
380
- const result = await getPluginService('common').findOne({ related });
381
- expect(result).toHaveProperty('id', db[0].id);
382
- expect(result).toHaveProperty('content', db[0].content);
383
- expect(result).toHaveProperty(['author', 'id'], db[0].authorId);
384
- expect(result).toHaveProperty(['author', 'name'], db[0].authorName);
385
- expect(result).toHaveProperty(['author', 'email'], db[0].authorEmail);
386
- });
387
- });
388
-
389
- describe('findRelatedEntitiesFor', () => {
390
- test('Should return proper structure', async () => {
391
- const result = await getPluginService('common').findRelatedEntitiesFor(db);
392
- expect(result).toHaveProperty([0, 'id'], relatedEntity.id);
393
- expect(result).toHaveProperty([0, 'title'], relatedEntity.title);
394
- expect(result).toHaveProperty([0, 'uid'], relatedEntity.uid);
395
- });
396
- });
397
- });
398
- });
399
- });
@@ -1,53 +0,0 @@
1
- const PluginError = require('../../../utils/error');
2
- const { resolveUserContextError, getModelUid, buildConfigQueryProp } = require('../functions');
3
-
4
- beforeEach(() => {
5
- Object.defineProperty(global, 'strapi', {
6
- value: require('../../../../__mocks__/initSetup')(),
7
- writable: true,
8
- });
9
- })
10
-
11
- describe('Test service functions utils', () => {
12
-
13
- describe('Getting models uid\'s ', () => {
14
- test('Should get comments uid', () => {
15
- expect(getModelUid('comment')).toBe('plugins::comments.comment');
16
- });
17
-
18
- test('Should get report uid', () => {
19
- expect(getModelUid('comment-report')).toBe('plugins::comments.comment-report');
20
- });
21
- });
22
-
23
- describe('Resolve user context error', () => {
24
- test('Should throw 401', () => {
25
- try {
26
- resolveUserContextError({ id: 1 });
27
- } catch (e) {
28
- expect(e).toBeInstanceOf(PluginError);
29
- expect(e).toHaveProperty('status', 401);
30
- }
31
- });
32
-
33
- test('Should throw 403', () => {
34
- try {
35
- resolveUserContextError();
36
- } catch (e) {
37
- expect(e).toBeInstanceOf(PluginError);
38
- expect(e).toHaveProperty('status', 403);
39
- }
40
- });
41
- });
42
-
43
- describe('Building config query props', () => {
44
- test('Should return prop as is', () => {
45
- expect(buildConfigQueryProp('my.sample.prop')).toBe('my.sample.prop');
46
- });
47
-
48
- test('Should build query prop with \'.\'', () => {
49
- expect(buildConfigQueryProp(['my', 'sample', 'prop'])).toBe('my.sample.prop');
50
- });
51
- });
52
-
53
- });
@@ -1,17 +0,0 @@
1
- const { getPluginService } = require('../functions');
2
-
3
- beforeEach(() => {
4
- Object.defineProperty(global, 'strapi', {
5
- value: require('../../../__mocks__/initSetup')(),
6
- writable: true,
7
- });
8
- })
9
-
10
- describe('Test plugin functions utils', () => {
11
-
12
- describe('Get plugin service', () => {
13
- test('Should get common service', () => {
14
- expect(getPluginService('common')).toHaveProperty('findAllFlat');
15
- });
16
- });
17
- });