@amityco/ts-sdk 0.0.1-beta.37 → 0.0.1-beta.39

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 (251) hide show
  1. package/.eslintrc.json +3 -5
  2. package/dist/@types/core/events.d.ts +1 -0
  3. package/dist/@types/core/events.d.ts.map +1 -1
  4. package/dist/@types/core/model.d.ts +2 -0
  5. package/dist/@types/core/model.d.ts.map +1 -1
  6. package/dist/@types/domains/category.d.ts +7 -0
  7. package/dist/@types/domains/category.d.ts.map +1 -1
  8. package/dist/@types/domains/channel.d.ts +2 -2
  9. package/dist/@types/domains/channel.d.ts.map +1 -1
  10. package/dist/@types/domains/community.d.ts +12 -0
  11. package/dist/@types/domains/community.d.ts.map +1 -1
  12. package/dist/@types/domains/feed.d.ts +1 -2
  13. package/dist/@types/domains/feed.d.ts.map +1 -1
  14. package/dist/@types/domains/message.d.ts +1 -1
  15. package/dist/@types/domains/message.d.ts.map +1 -1
  16. package/dist/@types/domains/post.d.ts +1 -1
  17. package/dist/@types/domains/post.d.ts.map +1 -1
  18. package/dist/@types/domains/user.d.ts +8 -0
  19. package/dist/@types/domains/user.d.ts.map +1 -1
  20. package/dist/@types/global.d.ts +5 -0
  21. package/dist/@types/global.d.ts.map +1 -1
  22. package/dist/category/api/queryCategories.d.ts +1 -5
  23. package/dist/category/api/queryCategories.d.ts.map +1 -1
  24. package/dist/category/observers/index.d.ts +2 -0
  25. package/dist/category/observers/index.d.ts.map +1 -0
  26. package/dist/category/observers/liveCategories.d.ts +18 -0
  27. package/dist/category/observers/liveCategories.d.ts.map +1 -0
  28. package/dist/category/observers/tests/liveCategories.test.d.ts +2 -0
  29. package/dist/category/observers/tests/liveCategories.test.d.ts.map +1 -0
  30. package/dist/channel/api/tests/getChannels.test.d.ts +2 -0
  31. package/dist/channel/api/tests/getChannels.test.d.ts.map +1 -0
  32. package/dist/channel/api/tests/leaveChannel.test.d.ts +2 -0
  33. package/dist/channel/api/tests/leaveChannel.test.d.ts.map +1 -0
  34. package/dist/channel/observers/liveChannel.d.ts.map +1 -1
  35. package/dist/channel/observers/liveChannels.d.ts.map +1 -1
  36. package/dist/client/api/accessTokenExpiryWatcher.d.ts +4 -1
  37. package/dist/client/api/accessTokenExpiryWatcher.d.ts.map +1 -1
  38. package/dist/client/api/connectClient.d.ts.map +1 -1
  39. package/dist/client/api/getToken.d.ts +3 -1
  40. package/dist/client/api/getToken.d.ts.map +1 -1
  41. package/dist/client/utils/setClientToken.d.ts +3 -3
  42. package/dist/comment/api/deleteComment.d.ts.map +1 -1
  43. package/dist/comment/api/getComment.d.ts.map +1 -1
  44. package/dist/comment/observers/index.d.ts +1 -0
  45. package/dist/comment/observers/index.d.ts.map +1 -1
  46. package/dist/comment/observers/liveComment.d.ts +21 -0
  47. package/dist/comment/observers/liveComment.d.ts.map +1 -0
  48. package/dist/comment/observers/tests/liveComment.test.d.ts +2 -0
  49. package/dist/comment/observers/tests/liveComment.test.d.ts.map +1 -0
  50. package/dist/community/api/queryCommunities.d.ts +1 -10
  51. package/dist/community/api/queryCommunities.d.ts.map +1 -1
  52. package/dist/community/events/index.d.ts +1 -0
  53. package/dist/community/events/index.d.ts.map +1 -1
  54. package/dist/community/events/onCommunityUserChanged.d.ts +17 -0
  55. package/dist/community/events/onCommunityUserChanged.d.ts.map +1 -0
  56. package/dist/community/events/utils.d.ts +1 -0
  57. package/dist/community/events/utils.d.ts.map +1 -1
  58. package/dist/community/observers/index.d.ts +1 -0
  59. package/dist/community/observers/index.d.ts.map +1 -1
  60. package/dist/community/observers/liveCommunities.d.ts +20 -0
  61. package/dist/community/observers/liveCommunities.d.ts.map +1 -0
  62. package/dist/community/observers/tests/liveCommunities.test.d.ts +2 -0
  63. package/dist/community/observers/tests/liveCommunities.test.d.ts.map +1 -0
  64. package/dist/core/events.d.ts +3 -3
  65. package/dist/core/events.d.ts.map +1 -1
  66. package/dist/core/model/idResolvers.d.ts.map +1 -1
  67. package/dist/core/model/identifyModel.d.ts.map +1 -1
  68. package/dist/core/model/index.d.ts.map +1 -1
  69. package/dist/core/query/filtering.d.ts +10 -0
  70. package/dist/core/query/filtering.d.ts.map +1 -1
  71. package/dist/core/query/paging.d.ts +2 -2
  72. package/dist/core/query/paging.d.ts.map +1 -1
  73. package/dist/core/query/sorting.d.ts +6 -0
  74. package/dist/core/query/sorting.d.ts.map +1 -1
  75. package/dist/core/query/tests/paging.test.d.ts +2 -0
  76. package/dist/core/query/tests/paging.test.d.ts.map +1 -0
  77. package/dist/core/transports/http.d.ts +0 -5
  78. package/dist/core/transports/http.d.ts.map +1 -1
  79. package/dist/file/api/test/createImage.test.d.ts +2 -0
  80. package/dist/file/api/test/createImage.test.d.ts.map +1 -0
  81. package/dist/file/api/test/createVideo.test.d.ts +2 -0
  82. package/dist/file/api/test/createVideo.test.d.ts.map +1 -0
  83. package/dist/index.cjs.js +607 -252
  84. package/dist/index.d.ts +1 -0
  85. package/dist/index.d.ts.map +1 -1
  86. package/dist/index.esm.js +599 -251
  87. package/dist/index.umd.js +4 -4
  88. package/dist/message/api/queryMessages.d.ts +2 -2
  89. package/dist/message/api/queryMessages.d.ts.map +1 -1
  90. package/dist/message/observers/liveMessage.d.ts.map +1 -1
  91. package/dist/post/observers/index.d.ts +1 -0
  92. package/dist/post/observers/index.d.ts.map +1 -1
  93. package/dist/post/observers/livePost.d.ts +21 -0
  94. package/dist/post/observers/livePost.d.ts.map +1 -0
  95. package/dist/post/observers/livePosts.d.ts +2 -2
  96. package/dist/post/observers/livePosts.d.ts.map +1 -1
  97. package/dist/post/observers/tests/livePost.test.d.ts +2 -0
  98. package/dist/post/observers/tests/livePost.test.d.ts.map +1 -0
  99. package/dist/report/api/createReport.d.ts.map +1 -1
  100. package/dist/report/api/deleteReport.d.ts.map +1 -1
  101. package/dist/report/api/tests/createReport.test.d.ts +2 -0
  102. package/dist/report/api/tests/createReport.test.d.ts.map +1 -0
  103. package/dist/report/api/tests/deleteReport.test.d.ts +2 -0
  104. package/dist/report/api/tests/deleteReport.test.d.ts.map +1 -0
  105. package/dist/subChannel/api/tests/deleteSubChannel.test.d.ts +2 -0
  106. package/dist/subChannel/api/tests/deleteSubChannel.test.d.ts.map +1 -0
  107. package/dist/subChannel/api/tests/getSubChannel.test.d.ts +2 -0
  108. package/dist/subChannel/api/tests/getSubChannel.test.d.ts.map +1 -0
  109. package/dist/subChannel/api/tests/getSubChannels.test.d.ts +2 -0
  110. package/dist/subChannel/api/tests/getSubChannels.test.d.ts.map +1 -0
  111. package/dist/subChannel/api/tests/updateSubChannel.test.d.ts +2 -0
  112. package/dist/subChannel/api/tests/updateSubChannel.test.d.ts.map +1 -0
  113. package/dist/subChannel/observers/liveSubChannel.d.ts.map +1 -1
  114. package/dist/user/api/queryUsers.d.ts +1 -6
  115. package/dist/user/api/queryUsers.d.ts.map +1 -1
  116. package/dist/user/api/tests/updateUser.test.d.ts +2 -0
  117. package/dist/user/api/tests/updateUser.test.d.ts.map +1 -0
  118. package/dist/user/observers/index.d.ts +1 -0
  119. package/dist/user/observers/index.d.ts.map +1 -1
  120. package/dist/user/observers/liveUser.d.ts.map +1 -1
  121. package/dist/user/observers/liveUsers.d.ts +18 -0
  122. package/dist/user/observers/liveUsers.d.ts.map +1 -0
  123. package/dist/user/observers/tests/liveUsers.test.d.ts +2 -0
  124. package/dist/user/observers/tests/liveUsers.test.d.ts.map +1 -0
  125. package/dist/utils/liveObject.d.ts +2 -0
  126. package/dist/utils/liveObject.d.ts.map +1 -0
  127. package/dist/utils/tests/dummy/category.d.ts +64 -0
  128. package/dist/utils/tests/dummy/category.d.ts.map +1 -0
  129. package/dist/utils/tests/dummy/channel.d.ts +50 -0
  130. package/dist/utils/tests/dummy/channel.d.ts.map +1 -1
  131. package/dist/utils/tests/dummy/community.d.ts +132 -0
  132. package/dist/utils/tests/dummy/community.d.ts.map +1 -1
  133. package/dist/utils/tests/dummy/feed.d.ts +21 -0
  134. package/dist/utils/tests/dummy/feed.d.ts.map +1 -0
  135. package/dist/utils/tests/dummy/file.d.ts +3 -0
  136. package/dist/utils/tests/dummy/file.d.ts.map +1 -1
  137. package/dist/utils/tests/dummy/index.d.ts +2 -0
  138. package/dist/utils/tests/dummy/index.d.ts.map +1 -1
  139. package/dist/utils/tests/dummy/post.d.ts +11 -0
  140. package/dist/utils/tests/dummy/post.d.ts.map +1 -1
  141. package/dist/utils/tests/dummy/subChannel.d.ts +0 -20
  142. package/dist/utils/tests/dummy/subChannel.d.ts.map +1 -1
  143. package/dist/utils/tests/dummy/user.d.ts +81 -0
  144. package/dist/utils/tests/dummy/user.d.ts.map +1 -1
  145. package/dist/utils/tests/liveObject.test.d.ts +2 -0
  146. package/dist/utils/tests/liveObject.test.d.ts.map +1 -0
  147. package/package.json +4 -4
  148. package/src/@types/core/events.ts +1 -0
  149. package/src/@types/core/model.ts +4 -0
  150. package/src/@types/domains/category.ts +13 -0
  151. package/src/@types/domains/channel.ts +2 -2
  152. package/src/@types/domains/community.ts +25 -0
  153. package/src/@types/domains/feed.ts +1 -3
  154. package/src/@types/domains/message.ts +4 -1
  155. package/src/@types/domains/post.ts +1 -1
  156. package/src/@types/domains/user.ts +14 -0
  157. package/src/@types/global.ts +5 -0
  158. package/src/cache/api/tests/ingestInCache.test.ts +2 -0
  159. package/src/category/api/queryCategories.ts +3 -5
  160. package/src/category/observers/index.ts +1 -0
  161. package/src/category/observers/liveCategories.ts +141 -0
  162. package/src/category/observers/tests/liveCategories.test.ts +147 -0
  163. package/src/channel/api/tests/createChannel.test.ts +30 -6
  164. package/src/channel/api/tests/getChannel.test.ts +3 -1
  165. package/src/channel/api/tests/getChannels.test.ts +97 -0
  166. package/src/channel/api/tests/joinChannel.test.ts +62 -3
  167. package/src/channel/api/tests/leaveChannel.test.ts +90 -0
  168. package/src/channel/api/tests/queryChannels.test.ts +38 -1
  169. package/src/channel/observers/liveChannel.ts +8 -80
  170. package/src/channel/observers/liveChannels.ts +29 -24
  171. package/src/client/api/accessTokenExpiryWatcher.ts +7 -5
  172. package/src/client/api/connectClient.ts +0 -2
  173. package/src/client/api/tests/accessTokenExpiryWatcher.test.ts +8 -5
  174. package/src/comment/api/deleteComment.ts +5 -5
  175. package/src/comment/api/getComment.ts +8 -3
  176. package/src/comment/observers/index.ts +1 -0
  177. package/src/comment/observers/liveComment.ts +43 -0
  178. package/src/comment/observers/tests/liveComment.test.ts +95 -0
  179. package/src/community/api/queryCommunities.ts +3 -10
  180. package/src/community/api/test/addCommunityMember.test.ts +14 -2
  181. package/src/community/api/test/joinCommunity.test.ts +14 -2
  182. package/src/community/api/test/leaveCommunity.test.ts +11 -1
  183. package/src/community/api/test/removeCommunityMembers.test.ts +11 -1
  184. package/src/community/events/index.ts +1 -0
  185. package/src/community/events/onCommunityUserChanged.ts +20 -0
  186. package/src/community/events/test/onCommunityJoined.test.ts +1 -1
  187. package/src/community/events/test/onCommunityUserAdded.test.ts +1 -1
  188. package/src/community/events/test/onCommunityUserBanned.test.ts +1 -1
  189. package/src/community/events/test/onCommunityUserUnbaned.test.ts +1 -1
  190. package/src/community/events/test/utils.test.ts +52 -3
  191. package/src/community/events/utils.ts +49 -0
  192. package/src/community/observers/index.ts +1 -0
  193. package/src/community/observers/liveCommunities.ts +188 -0
  194. package/src/community/observers/tests/liveCommunities.test.ts +284 -0
  195. package/src/core/model/idResolvers.ts +2 -0
  196. package/src/core/model/identifyModel.ts +1 -0
  197. package/src/core/model/index.ts +2 -0
  198. package/src/core/query/filtering.ts +33 -3
  199. package/src/core/query/paging.ts +5 -4
  200. package/src/core/query/sorting.ts +8 -0
  201. package/src/core/query/tests/paging.test.ts +66 -0
  202. package/src/core/transports/http.ts +17 -13
  203. package/src/core/transports/test/http.test.ts +49 -60
  204. package/src/file/api/createFile.ts +1 -1
  205. package/src/file/api/createImage.ts +1 -1
  206. package/src/file/api/createVideo.ts +1 -1
  207. package/src/file/api/test/createImage.test.ts +69 -0
  208. package/src/file/api/test/createVideo.test.ts +81 -0
  209. package/src/index.ts +1 -0
  210. package/src/message/api/queryMessages.ts +7 -7
  211. package/src/message/api/tests/queryMessages.test.ts +6 -6
  212. package/src/message/observers/liveMessage.ts +11 -83
  213. package/src/message/tests/observers/liveMessage.test.ts +1 -143
  214. package/src/message/tests/observers/liveMessages.test.ts +4 -4
  215. package/src/post/observers/index.ts +1 -0
  216. package/src/post/observers/livePost.ts +47 -0
  217. package/src/post/observers/livePosts.ts +14 -22
  218. package/src/post/observers/tests/livePost.test.ts +97 -0
  219. package/src/post/observers/tests/livePosts.test.ts +65 -8
  220. package/src/report/api/createReport.ts +1 -6
  221. package/src/report/api/deleteReport.ts +2 -6
  222. package/src/report/api/tests/createReport.test.ts +93 -0
  223. package/src/report/api/tests/deleteReport.test.ts +93 -0
  224. package/src/stream/api/tests/createStream.test.ts +3 -11
  225. package/src/stream/api/tests/deleteStream.test.ts +5 -3
  226. package/src/subChannel/api/tests/createSubChannel.test.ts +21 -14
  227. package/src/subChannel/api/tests/deleteSubChannel.test.ts +112 -0
  228. package/src/subChannel/api/tests/getSubChannel.test.ts +97 -0
  229. package/src/subChannel/api/tests/getSubChannels.test.ts +97 -0
  230. package/src/subChannel/api/tests/updateSubChannel.test.ts +86 -0
  231. package/src/subChannel/observers/liveSubChannel.ts +6 -56
  232. package/src/subChannel/observers/tests/liveSubChannel.test.ts +0 -82
  233. package/src/user/api/queryUsers.ts +1 -6
  234. package/src/user/api/tests/updateUser.test.ts +60 -0
  235. package/src/user/observers/index.ts +1 -0
  236. package/src/user/observers/liveUser.ts +9 -61
  237. package/src/user/observers/liveUsers.ts +162 -0
  238. package/src/user/observers/tests/liveUsers.test.ts +202 -0
  239. package/src/user/tests/observers/liveUser.test.ts +1 -154
  240. package/src/utils/liveObject.ts +86 -0
  241. package/src/utils/tests/dummy/category.ts +57 -0
  242. package/src/utils/tests/dummy/channel.ts +52 -1
  243. package/src/utils/tests/dummy/community.ts +94 -0
  244. package/src/utils/tests/dummy/feed.ts +13 -0
  245. package/src/utils/tests/dummy/file.ts +32 -0
  246. package/src/utils/tests/dummy/index.ts +3 -0
  247. package/src/utils/tests/dummy/post.ts +62 -47
  248. package/src/utils/tests/dummy/stream.ts +73 -73
  249. package/src/utils/tests/dummy/subChannel.ts +0 -22
  250. package/src/utils/tests/dummy/user.ts +57 -0
  251. package/src/utils/tests/liveObject.test.ts +172 -0
@@ -1,86 +1,86 @@
1
1
  export const streamResponse = {
2
2
  data: {
3
- "videoStreamings": [
3
+ videoStreamings: [
4
4
  {
5
- streamId: "123",
6
- "userId": "123",
7
- "thumbnailFileId": "123",
8
- "title": "Test Stream",
9
- "status": "idle",
10
- "isLive": true,
11
- "isDeleted": true,
12
- "description": "Test Stream Description",
13
- "platform": {
14
- "name": "x86",
15
- "version": "123"
5
+ streamId: '123',
6
+ userId: '123',
7
+ thumbnailFileId: '123',
8
+ title: 'Test Stream',
9
+ status: 'idle',
10
+ isLive: true,
11
+ isDeleted: true,
12
+ description: 'Test Stream Description',
13
+ platform: {
14
+ name: 'x86',
15
+ version: '123',
16
16
  },
17
- "startedAt": "2023-01-17T07:19:06.414Z",
18
- "endedAt": "2023-01-17T07:19:06.414Z",
19
- "createdAt": "2023-01-17T07:19:06.414Z",
20
- "updatedAt": "2023-01-17T07:19:06.414Z",
21
- "metadata": {},
22
- "resolution": "SD",
23
- "streamerUrl": {
24
- "url": "https://test-stream.test",
25
- "components": {
26
- "origin": "origin",
27
- "appName": "stream app",
28
- "streamName": "stream name",
29
- "query": "123"
30
- }
17
+ startedAt: '2023-01-17T07:19:06.414Z',
18
+ endedAt: '2023-01-17T07:19:06.414Z',
19
+ createdAt: '2023-01-17T07:19:06.414Z',
20
+ updatedAt: '2023-01-17T07:19:06.414Z',
21
+ metadata: {},
22
+ resolution: 'SD',
23
+ streamerUrl: {
24
+ url: 'https://test-stream.test',
25
+ components: {
26
+ origin: 'origin',
27
+ appName: 'stream app',
28
+ streamName: 'stream name',
29
+ query: '123',
30
+ },
31
31
  },
32
- "recordings": [
32
+ recordings: [
33
33
  {
34
- "flv": {
35
- "url": "https://test-stream-flv.test",
36
- "duration": 0,
37
- "startTime": 0,
38
- "stopTime": 0
34
+ flv: {
35
+ url: 'https://test-stream-flv.test',
36
+ duration: 0,
37
+ startTime: 0,
38
+ stopTime: 0,
39
+ },
40
+ mp4: {
41
+ url: 'https://test-stream-mp4.test',
42
+ duration: 0,
43
+ startTime: 0,
44
+ stopTime: 0,
39
45
  },
40
- "mp4": {
41
- "url": "https://test-stream-mp4.test",
42
- "duration": 0,
43
- "startTime": 0,
44
- "stopTime": 0
46
+ m3u8: {
47
+ url: 'https://test-stream-m3u8.test',
48
+ duration: 0,
49
+ startTime: 0,
50
+ stopTime: 0,
45
51
  },
46
- "m3u8": {
47
- "url": "https://test-stream-m3u8.test",
48
- "duration": 0,
49
- "startTime": 0,
50
- "stopTime": 0
51
- }
52
- }
52
+ },
53
53
  ],
54
- "watcherUrl": {
55
- "flv": {
56
- "url": "https://test-stream-flv.test",
57
- "components": {
58
- "origin": "1",
59
- "appName": "2",
60
- "streamName": "3",
61
- "query": "4"
62
- }
54
+ watcherUrl: {
55
+ flv: {
56
+ url: 'https://test-stream-flv.test',
57
+ components: {
58
+ origin: '1',
59
+ appName: '2',
60
+ streamName: '3',
61
+ query: '4',
62
+ },
63
63
  },
64
- "hls": {
65
- "url": "https://test-stream-hls.test",
66
- "components": {
67
- "origin": "1",
68
- "appName": "2",
69
- "streamName": "3",
70
- "query": "4"
71
- }
64
+ hls: {
65
+ url: 'https://test-stream-hls.test',
66
+ components: {
67
+ origin: '1',
68
+ appName: '2',
69
+ streamName: '3',
70
+ query: '4',
71
+ },
72
+ },
73
+ rtmp: {
74
+ url: 'https://test-stream-rtmp.test',
75
+ components: {
76
+ origin: '1',
77
+ appName: '2',
78
+ streamName: '3',
79
+ query: '4',
80
+ },
72
81
  },
73
- "rtmp": {
74
- "url": "https://test-stream-rtmp.test",
75
- "components": {
76
- "origin": "1",
77
- "appName": "2",
78
- "streamName": "3",
79
- "query": "4"
80
- }
81
- }
82
- }
83
- }
82
+ },
83
+ },
84
84
  ],
85
- }
85
+ },
86
86
  };
@@ -27,25 +27,3 @@ export function generateSubChannel(params?: Record<string, any>): Amity.SubChann
27
27
  ...params,
28
28
  };
29
29
  }
30
-
31
- export const createSubChannelError400400 = {
32
- status: 'error',
33
- message: 'Channel not found.',
34
- code: 400400,
35
- data: {
36
- detail: {
37
- channelId: '63d0ccbc5defa46a1cab73a',
38
- },
39
- },
40
- };
41
-
42
- export const createSubChannelError400301 = {
43
- status: 'error',
44
- message: 'You are not a member of this channel.',
45
- code: 400301,
46
- data: {
47
- detail: {
48
- channelId: '63be2ef7827ef6bfc6798192',
49
- },
50
- },
51
- };
@@ -26,6 +26,17 @@ export const user14: Amity.User = {
26
26
  userId: 'user4',
27
27
  };
28
28
 
29
+ export const user21: Amity.User = {
30
+ ...user11,
31
+ displayName: 'displayName',
32
+ userId: 'user21',
33
+ };
34
+
35
+ export const user22: Amity.User = {
36
+ ...user11,
37
+ userId: 'user22',
38
+ };
39
+
29
40
  export const userQueryResponse = {
30
41
  data: {
31
42
  users: [user11, user12],
@@ -36,6 +47,52 @@ export const userQueryResponse = {
36
47
  },
37
48
  },
38
49
  };
50
+
51
+ export const userQueryResponsePage2 = {
52
+ data: {
53
+ users: [user21, user22],
54
+ files: [],
55
+ paging: {
56
+ previous: 'eyJiZWZvcmUiOjU1LCJsYXN0IjoxMH0=',
57
+ next: 'eyJiZWZvcmUiOjU1LCJsYXN0IjoxMH0=',
58
+ },
59
+ },
60
+ };
61
+
62
+ export const flaggedUser = {
63
+ ...user11,
64
+ userId: 'to-be-flagged',
65
+ flagCount: 1,
66
+ };
67
+
68
+ export const flaggedUserQueryResponse = {
69
+ data: {
70
+ users: [flaggedUser],
71
+ files: [],
72
+ },
73
+ };
74
+
75
+ export const userUpdateResponse = {
76
+ data: {
77
+ users: [
78
+ {
79
+ isDeleted: false,
80
+ displayName: 'updated-display-name',
81
+ userId: 'test-user',
82
+ metadata: {},
83
+ roles: [],
84
+ permissions: [],
85
+ flagCount: 0,
86
+ hashFlag: null,
87
+ avatarCustomUrl: 'updated-avatarUrl',
88
+ avatarFileId: null,
89
+ isGlobalBan: false,
90
+ },
91
+ ],
92
+ files: [],
93
+ },
94
+ };
95
+
39
96
  export const users = [user11, user12, user13, user14];
40
97
 
41
98
  // user payload with file
@@ -0,0 +1,172 @@
1
+ import { generatePost } from '~/utils/tests/dummy';
2
+ import { pause } from '~/utils/tests/utils';
3
+ import { connectClient, disconnectClient } from '~/utils/tests/client';
4
+ import { disableCache, enableCache } from '~/cache/api';
5
+ import { getFutureDate, getPastDate } from '~/core/model';
6
+ import { LIVE_OBJECT_ENABLE_CACHE_MESSAGE } from '~/utils/constants';
7
+ import { liveObject } from '../liveObject';
8
+
9
+ describe('liveObject', () => {
10
+ let post: Amity.Post;
11
+ let fetcher: jest.Mock;
12
+ let callback: jest.Mock;
13
+ let eventCallback: Amity.Listener<Amity.Post>;
14
+ let eventUnsubscriber: jest.Mock;
15
+ const onEvent = (fn: Amity.Listener<Amity.Post>) => {
16
+ eventCallback = fn;
17
+ eventUnsubscriber = jest.fn();
18
+
19
+ return eventUnsubscriber;
20
+ };
21
+ let unsubscribe: Amity.Unsubscriber;
22
+
23
+ beforeAll(async () => {
24
+ await connectClient();
25
+ });
26
+
27
+ afterAll(async () => {
28
+ await disconnectClient();
29
+ });
30
+
31
+ beforeEach(() => {
32
+ enableCache();
33
+
34
+ callback = jest.fn();
35
+ post = generatePost({ postId: 'my-post-id' });
36
+ fetcher = jest.fn().mockResolvedValue(post);
37
+ });
38
+
39
+ afterEach(() => {
40
+ disableCache();
41
+ unsubscribe();
42
+ });
43
+
44
+ test('it should show message if cache not enabled', () => {
45
+ /*
46
+ * NOTE: at the time of writing this test cache is disabled by default, but
47
+ * there is a proposal to enable cache by default. So I'm disabling cache
48
+ * here to ensure cache is disabled
49
+ */
50
+ disableCache();
51
+ jest.spyOn(global.console, 'log');
52
+
53
+ unsubscribe = liveObject<Amity.Post, 'postId'>(post.postId, callback, 'postId', fetcher, []);
54
+
55
+ expect(console.log).toBeCalledWith(LIVE_OBJECT_ENABLE_CACHE_MESSAGE);
56
+ });
57
+
58
+ it('should fetch the model', async () => {
59
+ unsubscribe = liveObject<Amity.Post, 'postId'>(post.postId, callback, 'postId', fetcher, []);
60
+ await pause();
61
+
62
+ expect(callback).toHaveBeenCalledTimes(2);
63
+ expect(callback).toHaveBeenNthCalledWith(
64
+ 1,
65
+ expect.objectContaining({ data: undefined, loading: true }),
66
+ );
67
+ expect(callback).toHaveBeenNthCalledWith(
68
+ 2,
69
+ expect.objectContaining({
70
+ data: post,
71
+ loading: false,
72
+ }),
73
+ );
74
+ });
75
+
76
+ it('should provide the error if fetch is failed', async () => {
77
+ const error = new Error('can not fetch');
78
+
79
+ unsubscribe = liveObject<Amity.Post, 'postId'>(
80
+ post.postId,
81
+ callback,
82
+ 'postId',
83
+ () => {
84
+ return Promise.reject(error);
85
+ },
86
+ [onEvent],
87
+ );
88
+ await pause();
89
+
90
+ expect(callback).toHaveBeenCalledTimes(2);
91
+ expect(callback).toHaveBeenNthCalledWith(
92
+ 1,
93
+ expect.objectContaining({ data: undefined, loading: true }),
94
+ );
95
+ expect(callback).toHaveBeenNthCalledWith(
96
+ 2,
97
+ expect.objectContaining({
98
+ data: undefined,
99
+ error,
100
+ loading: false,
101
+ }),
102
+ );
103
+ expect(eventUnsubscriber).toHaveBeenCalledTimes(1);
104
+ });
105
+
106
+ it('should update the model on the event', async () => {
107
+ const update = {
108
+ ...post,
109
+ data: { text: 'new-text' },
110
+ updatedAt: getFutureDate(post.updatedAt),
111
+ };
112
+
113
+ unsubscribe = liveObject<Amity.Post, 'postId'>(post.postId, callback, 'postId', fetcher, [
114
+ onEvent,
115
+ ]);
116
+ await pause();
117
+ eventCallback(update);
118
+ await pause();
119
+
120
+ expect(callback).toHaveBeenCalledTimes(3);
121
+ expect(callback).toHaveBeenNthCalledWith(
122
+ 3,
123
+ expect.objectContaining({
124
+ data: update,
125
+ loading: false,
126
+ }),
127
+ );
128
+ });
129
+
130
+ it('should not update the model on the event if the model is already the latest', async () => {
131
+ const update = {
132
+ ...post,
133
+ data: { text: 'new-text' },
134
+ updatedAt: getPastDate(post.updatedAt),
135
+ };
136
+
137
+ unsubscribe = liveObject<Amity.Post, 'postId'>(post.postId, callback, 'postId', fetcher, [
138
+ onEvent,
139
+ ]);
140
+ await pause();
141
+ eventCallback(update);
142
+ await pause();
143
+
144
+ expect(callback).toHaveBeenCalledTimes(2);
145
+ });
146
+
147
+ it('should not update the model on the event if the model has different id', async () => {
148
+ const post2 = generatePost({
149
+ postId: 'my-post-id-2',
150
+ updatedAt: getFutureDate(post.updatedAt),
151
+ });
152
+
153
+ unsubscribe = liveObject<Amity.Post, 'postId'>(post.postId, callback, 'postId', fetcher, [
154
+ onEvent,
155
+ ]);
156
+ await pause();
157
+ eventCallback(post2);
158
+ await pause();
159
+
160
+ expect(callback).toHaveBeenCalledTimes(2);
161
+ });
162
+
163
+ it('should unsubscribe from events on liveObject disposing', async () => {
164
+ unsubscribe = liveObject<Amity.Post, 'postId'>(post.postId, callback, 'postId', fetcher, [
165
+ onEvent,
166
+ ]);
167
+ await pause();
168
+ unsubscribe();
169
+
170
+ expect(eventUnsubscriber).toHaveBeenCalledTimes(1);
171
+ });
172
+ });