@amityco/ts-sdk 6.12.2-d74459e.0 → 6.12.2-e855934.0

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 (290) hide show
  1. package/README.md +8 -9
  2. package/dist/@types/core/marker.d.ts +4 -4
  3. package/dist/@types/core/marker.d.ts.map +1 -1
  4. package/dist/@types/core/model.d.ts +4 -4
  5. package/dist/@types/core/model.d.ts.map +1 -1
  6. package/dist/@types/core/payload.d.ts +17 -17
  7. package/dist/@types/core/payload.d.ts.map +1 -1
  8. package/dist/@types/domains/block.d.ts +1 -1
  9. package/dist/@types/domains/block.d.ts.map +1 -1
  10. package/dist/@types/domains/category.d.ts +5 -2
  11. package/dist/@types/domains/category.d.ts.map +1 -1
  12. package/dist/@types/domains/client.d.ts +3 -3
  13. package/dist/@types/domains/client.d.ts.map +1 -1
  14. package/dist/@types/domains/comment.d.ts +1 -1
  15. package/dist/@types/domains/comment.d.ts.map +1 -1
  16. package/dist/@types/domains/community.d.ts +4 -4
  17. package/dist/@types/domains/community.d.ts.map +1 -1
  18. package/dist/@types/domains/follow.d.ts +4 -4
  19. package/dist/@types/domains/follow.d.ts.map +1 -1
  20. package/dist/@types/domains/group.d.ts +2 -2
  21. package/dist/@types/domains/group.d.ts.map +1 -1
  22. package/dist/@types/domains/messagePreview.d.ts +2 -2
  23. package/dist/@types/domains/messagePreview.d.ts.map +1 -1
  24. package/dist/@types/domains/poll.d.ts +1 -1
  25. package/dist/@types/domains/poll.d.ts.map +1 -1
  26. package/dist/@types/domains/post.d.ts +1 -1
  27. package/dist/@types/domains/post.d.ts.map +1 -1
  28. package/dist/@types/domains/reaction.d.ts +1 -1
  29. package/dist/@types/domains/reaction.d.ts.map +1 -1
  30. package/dist/@types/domains/stream.d.ts +2 -2
  31. package/dist/@types/domains/stream.d.ts.map +1 -1
  32. package/dist/@types/domains/user.d.ts +7 -3
  33. package/dist/@types/domains/user.d.ts.map +1 -1
  34. package/dist/cache/api/pushToCache.d.ts +1 -1
  35. package/dist/cache/api/upsertInCache.d.ts +1 -1
  36. package/dist/categoryRepository/api/getCategory.d.ts.map +1 -1
  37. package/dist/categoryRepository/api/queryCategories.d.ts.map +1 -1
  38. package/dist/categoryRepository/observers/getCategories.d.ts.map +1 -1
  39. package/dist/channelRepsitory/channelMembership/api/addMembers.d.ts +4 -4
  40. package/dist/channelRepsitory/channelMembership/api/addMembers.d.ts.map +1 -1
  41. package/dist/channelRepsitory/channelMembership/api/removeMembers.d.ts +4 -4
  42. package/dist/channelRepsitory/channelMembership/api/removeMembers.d.ts.map +1 -1
  43. package/dist/channelRepsitory/channelModeration/api/addRole.d.ts +4 -4
  44. package/dist/channelRepsitory/channelModeration/api/addRole.d.ts.map +1 -1
  45. package/dist/channelRepsitory/channelModeration/api/banMembers.d.ts +2 -2
  46. package/dist/channelRepsitory/channelModeration/api/banMembers.d.ts.map +1 -1
  47. package/dist/channelRepsitory/channelModeration/api/removeRole.d.ts +4 -4
  48. package/dist/channelRepsitory/channelModeration/api/removeRole.d.ts.map +1 -1
  49. package/dist/channelRepsitory/channelModeration/api/unbanMembers.d.ts +2 -2
  50. package/dist/channelRepsitory/channelModeration/api/unbanMembers.d.ts.map +1 -1
  51. package/dist/channelRepsitory/events/onChannelMemberAdded.d.ts +1 -1
  52. package/dist/channelRepsitory/events/onChannelMemberBanned.d.ts +1 -1
  53. package/dist/channelRepsitory/events/onChannelMemberRemoved.d.ts +1 -1
  54. package/dist/channelRepsitory/events/onChannelMemberUnbanned.d.ts +1 -1
  55. package/dist/channelRepsitory/observers/tests/getChannel.test.d.ts +2 -0
  56. package/dist/channelRepsitory/observers/tests/getChannel.test.d.ts.map +1 -0
  57. package/dist/client/api/getToken.d.ts +3 -3
  58. package/dist/client/api/getToken.d.ts.map +1 -1
  59. package/dist/client/utils/setClientToken.d.ts +1 -1
  60. package/dist/communityRepository/communityMembership/api/addMembers.d.ts +4 -4
  61. package/dist/communityRepository/communityMembership/api/addMembers.d.ts.map +1 -1
  62. package/dist/communityRepository/communityMembership/api/removeMembers.d.ts +4 -4
  63. package/dist/communityRepository/communityMembership/api/removeMembers.d.ts.map +1 -1
  64. package/dist/communityRepository/communityModeration/api/addRoles.d.ts +4 -4
  65. package/dist/communityRepository/communityModeration/api/addRoles.d.ts.map +1 -1
  66. package/dist/communityRepository/communityModeration/api/banMembers.d.ts +2 -2
  67. package/dist/communityRepository/communityModeration/api/banMembers.d.ts.map +1 -1
  68. package/dist/communityRepository/communityModeration/api/removeRoles.d.ts +4 -4
  69. package/dist/communityRepository/communityModeration/api/removeRoles.d.ts.map +1 -1
  70. package/dist/communityRepository/communityModeration/api/unbanMembers.d.ts +2 -2
  71. package/dist/communityRepository/communityModeration/api/unbanMembers.d.ts.map +1 -1
  72. package/dist/core/device.d.ts +1 -1
  73. package/dist/core/device.d.ts.map +1 -1
  74. package/dist/core/query/filtering.d.ts +2 -2
  75. package/dist/core/query/filtering.d.ts.map +1 -1
  76. package/dist/external/api/createUserToken.d.ts +2 -2
  77. package/dist/external/api/createUserToken.d.ts.map +1 -1
  78. package/dist/group/utils/withUser.d.ts +3 -3
  79. package/dist/group/utils/withUser.d.ts.map +1 -1
  80. package/dist/index.cjs.js +206 -126
  81. package/dist/index.esm.js +206 -126
  82. package/dist/index.umd.js +4 -4
  83. package/dist/messagePreview/utils/getChannelMessagePreviewWithUser.d.ts +1 -1
  84. package/dist/messagePreview/utils/getSubChannelMessagePreviewWithUser.d.ts +1 -1
  85. package/dist/messageRepository/api/getDeliveredUsers.d.ts +6 -6
  86. package/dist/messageRepository/api/getDeliveredUsers.d.ts.map +1 -1
  87. package/dist/messageRepository/api/getReadUsers.d.ts +6 -6
  88. package/dist/messageRepository/api/getReadUsers.d.ts.map +1 -1
  89. package/dist/streamRepository/api/getStreams.d.ts +1 -1
  90. package/dist/streamRepository/api/getStreams.d.ts.map +1 -1
  91. package/dist/streamRepository/api/queryStreams.d.ts +1 -1
  92. package/dist/streamRepository/api/queryStreams.d.ts.map +1 -1
  93. package/dist/userRepository/api/flagUser.d.ts +1 -1
  94. package/dist/userRepository/api/flagUser.d.ts.map +1 -1
  95. package/dist/userRepository/api/getUser.d.ts.map +1 -1
  96. package/dist/userRepository/api/getUserByIds.d.ts +1 -1
  97. package/dist/userRepository/api/getUserByIds.d.ts.map +1 -1
  98. package/dist/userRepository/api/isUserFlaggedByMe.d.ts +1 -1
  99. package/dist/userRepository/api/isUserFlaggedByMe.d.ts.map +1 -1
  100. package/dist/userRepository/api/queryBlockedUsers.d.ts +5 -5
  101. package/dist/userRepository/api/queryBlockedUsers.d.ts.map +1 -1
  102. package/dist/userRepository/api/queryUsers.d.ts +6 -6
  103. package/dist/userRepository/api/queryUsers.d.ts.map +1 -1
  104. package/dist/userRepository/api/unflagUser.d.ts +1 -1
  105. package/dist/userRepository/api/unflagUser.d.ts.map +1 -1
  106. package/dist/userRepository/api/updateUser.d.ts +4 -4
  107. package/dist/userRepository/api/updateUser.d.ts.map +1 -1
  108. package/dist/userRepository/events/onUserDeleted.d.ts +2 -2
  109. package/dist/userRepository/events/onUserDeleted.d.ts.map +1 -1
  110. package/dist/userRepository/events/onUserFetched.d.ts +2 -2
  111. package/dist/userRepository/events/onUserFetched.d.ts.map +1 -1
  112. package/dist/userRepository/events/onUserFlagCleared.d.ts +2 -2
  113. package/dist/userRepository/events/onUserFlagCleared.d.ts.map +1 -1
  114. package/dist/userRepository/events/onUserFlagged.d.ts +2 -2
  115. package/dist/userRepository/events/onUserFlagged.d.ts.map +1 -1
  116. package/dist/userRepository/events/onUserUnflagged.d.ts +2 -2
  117. package/dist/userRepository/events/onUserUnflagged.d.ts.map +1 -1
  118. package/dist/userRepository/events/onUserUpdated.d.ts +2 -2
  119. package/dist/userRepository/events/onUserUpdated.d.ts.map +1 -1
  120. package/dist/userRepository/events/utils.d.ts +1 -1
  121. package/dist/userRepository/events/utils.d.ts.map +1 -1
  122. package/dist/userRepository/observers/getBlockedUsers.d.ts +4 -4
  123. package/dist/userRepository/observers/getBlockedUsers.d.ts.map +1 -1
  124. package/dist/userRepository/observers/getUser.d.ts +2 -2
  125. package/dist/userRepository/observers/getUser.d.ts.map +1 -1
  126. package/dist/userRepository/observers/getUsers.d.ts.map +1 -1
  127. package/dist/userRepository/observers/observeUser.d.ts +2 -2
  128. package/dist/userRepository/observers/observeUser.d.ts.map +1 -1
  129. package/dist/userRepository/observers/searchUserByDisplayName.d.ts +2 -2
  130. package/dist/userRepository/observers/searchUserByDisplayName.d.ts.map +1 -1
  131. package/dist/userRepository/relationship/block/api/blockUser.d.ts +4 -4
  132. package/dist/userRepository/relationship/block/api/blockUser.d.ts.map +1 -1
  133. package/dist/userRepository/relationship/block/api/unBlockUser.d.ts +4 -4
  134. package/dist/userRepository/relationship/block/api/unBlockUser.d.ts.map +1 -1
  135. package/dist/userRepository/relationship/block/observers/getBlockedUsers.d.ts +1 -1
  136. package/dist/userRepository/relationship/block/observers/getBlockedUsers.d.ts.map +1 -1
  137. package/dist/userRepository/relationship/follow/api/acceptFollower.d.ts +2 -2
  138. package/dist/userRepository/relationship/follow/api/acceptFollower.d.ts.map +1 -1
  139. package/dist/userRepository/relationship/follow/api/acceptMyFollower.d.ts +2 -2
  140. package/dist/userRepository/relationship/follow/api/acceptMyFollower.d.ts.map +1 -1
  141. package/dist/userRepository/relationship/follow/api/declineFollower.d.ts +2 -2
  142. package/dist/userRepository/relationship/follow/api/declineFollower.d.ts.map +1 -1
  143. package/dist/userRepository/relationship/follow/api/declineMyFollower.d.ts +2 -2
  144. package/dist/userRepository/relationship/follow/api/declineMyFollower.d.ts.map +1 -1
  145. package/dist/userRepository/relationship/follow/api/follow.d.ts +2 -2
  146. package/dist/userRepository/relationship/follow/api/follow.d.ts.map +1 -1
  147. package/dist/userRepository/relationship/follow/api/getFollowInfo.d.ts +4 -4
  148. package/dist/userRepository/relationship/follow/api/getFollowInfo.d.ts.map +1 -1
  149. package/dist/userRepository/relationship/follow/api/unfollow.d.ts +3 -3
  150. package/dist/userRepository/relationship/follow/api/unfollow.d.ts.map +1 -1
  151. package/dist/userRepository/relationship/follow/api/utils.d.ts +1 -1
  152. package/dist/userRepository/relationship/follow/api/utils.d.ts.map +1 -1
  153. package/dist/userRepository/relationship/follow/observers/getFollowers.d.ts +1 -1
  154. package/dist/userRepository/relationship/follow/observers/getFollowings.d.ts +1 -1
  155. package/dist/userRepository/relationship/follow/observers/observeFollowInfo.d.ts +1 -1
  156. package/dist/userRepository/relationship/follow/observers/observeFollowInfo.d.ts.map +1 -1
  157. package/dist/userRepository/relationship/follow/observers/observeFollowers.d.ts +2 -2
  158. package/dist/userRepository/relationship/follow/observers/observeFollowers.d.ts.map +1 -1
  159. package/dist/userRepository/relationship/follow/observers/observeFollowings.d.ts +2 -2
  160. package/dist/userRepository/relationship/follow/observers/observeFollowings.d.ts.map +1 -1
  161. package/dist/utils/linkedObject/categoryLinkedObject.d.ts +2 -0
  162. package/dist/utils/linkedObject/categoryLinkedObject.d.ts.map +1 -0
  163. package/dist/utils/linkedObject/index.d.ts +2 -0
  164. package/dist/utils/linkedObject/index.d.ts.map +1 -1
  165. package/dist/utils/linkedObject/userLinkedObject.d.ts +2 -0
  166. package/dist/utils/linkedObject/userLinkedObject.d.ts.map +1 -0
  167. package/dist/utils/tests/client.d.ts.map +1 -1
  168. package/dist/utils/tests/dummy/block.d.ts +4 -4
  169. package/dist/utils/tests/dummy/block.d.ts.map +1 -1
  170. package/dist/utils/tests/dummy/category.d.ts +7 -0
  171. package/dist/utils/tests/dummy/category.d.ts.map +1 -1
  172. package/dist/utils/tests/dummy/channel.d.ts +11 -1
  173. package/dist/utils/tests/dummy/channel.d.ts.map +1 -1
  174. package/dist/utils/tests/dummy/comment.d.ts +6 -6
  175. package/dist/utils/tests/dummy/follow.d.ts +1 -1
  176. package/dist/utils/tests/dummy/follow.d.ts.map +1 -1
  177. package/dist/utils/tests/dummy/user.d.ts +5 -1
  178. package/dist/utils/tests/dummy/user.d.ts.map +1 -1
  179. package/package.json +1 -1
  180. package/src/@types/core/marker.ts +4 -4
  181. package/src/@types/core/model.ts +4 -4
  182. package/src/@types/core/payload.ts +17 -17
  183. package/src/@types/domains/block.ts +1 -1
  184. package/src/@types/domains/category.ts +6 -2
  185. package/src/@types/domains/client.ts +3 -3
  186. package/src/@types/domains/comment.ts +1 -1
  187. package/src/@types/domains/community.ts +4 -4
  188. package/src/@types/domains/follow.ts +4 -4
  189. package/src/@types/domains/group.ts +2 -2
  190. package/src/@types/domains/messagePreview.ts +2 -2
  191. package/src/@types/domains/poll.ts +1 -1
  192. package/src/@types/domains/post.ts +1 -1
  193. package/src/@types/domains/reaction.ts +1 -1
  194. package/src/@types/domains/stream.ts +2 -2
  195. package/src/@types/domains/user.ts +8 -3
  196. package/src/cache/api/pushToCache.ts +1 -1
  197. package/src/cache/api/upsertInCache.ts +1 -1
  198. package/src/categoryRepository/api/getCategory.ts +3 -2
  199. package/src/categoryRepository/api/queryCategories.ts +7 -1
  200. package/src/categoryRepository/observers/getCategories.ts +3 -2
  201. package/src/categoryRepository/observers/tests/getCategories.test.ts +2 -1
  202. package/src/channelRepsitory/api/createChannel.ts +1 -1
  203. package/src/channelRepsitory/channelMembership/api/addMembers.ts +4 -4
  204. package/src/channelRepsitory/channelMembership/api/removeMembers.ts +4 -4
  205. package/src/channelRepsitory/channelMembership/observers/tests/getMembers.test.ts +1 -1
  206. package/src/channelRepsitory/channelMembership/observers/tests/searchMembers.test.ts +1 -3
  207. package/src/channelRepsitory/channelModeration/api/addRole.ts +4 -4
  208. package/src/channelRepsitory/channelModeration/api/banMembers.ts +2 -2
  209. package/src/channelRepsitory/channelModeration/api/removeRole.ts +4 -4
  210. package/src/channelRepsitory/channelModeration/api/unbanMembers.ts +2 -2
  211. package/src/channelRepsitory/events/onChannelMemberAdded.ts +1 -1
  212. package/src/channelRepsitory/events/onChannelMemberBanned.ts +1 -1
  213. package/src/channelRepsitory/events/onChannelMemberRemoved.ts +1 -1
  214. package/src/channelRepsitory/events/onChannelMemberUnbanned.ts +1 -1
  215. package/src/channelRepsitory/observers/tests/getChannel.test.ts +73 -0
  216. package/src/channelRepsitory/observers/tests/getChannels.test.ts +462 -50
  217. package/src/client/api/getToken.ts +3 -3
  218. package/src/client/api/login.ts +1 -1
  219. package/src/communityRepository/communityMembership/api/addMembers.ts +4 -4
  220. package/src/communityRepository/communityMembership/api/removeMembers.ts +4 -4
  221. package/src/communityRepository/communityMembership/events/utils.ts +2 -2
  222. package/src/communityRepository/communityMembership/observers/tests/getMembers.test.ts +1 -1
  223. package/src/communityRepository/communityModeration/api/addRoles.ts +4 -4
  224. package/src/communityRepository/communityModeration/api/banMembers.ts +2 -2
  225. package/src/communityRepository/communityModeration/api/removeRoles.ts +4 -4
  226. package/src/communityRepository/communityModeration/api/unbanMembers.ts +2 -2
  227. package/src/core/device.ts +1 -1
  228. package/src/core/query/filtering.ts +3 -1
  229. package/src/core/query/tests/filtering.test.ts +2 -2
  230. package/src/external/api/createUserToken.ts +2 -2
  231. package/src/group/utils/withUser.ts +8 -4
  232. package/src/liveStreamPlayer/api/getPlayer.ts +1 -1
  233. package/src/messagePreview/utils/getChannelMessagePreviewWithUser.ts +1 -1
  234. package/src/messagePreview/utils/getSubChannelMessagePreviewWithUser.ts +1 -1
  235. package/src/messageRepository/api/getDeliveredUsers.ts +11 -9
  236. package/src/messageRepository/api/getReadUsers.ts +11 -9
  237. package/src/messageRepository/observers/tests/getMessages.test.ts +766 -0
  238. package/src/streamRepository/api/getStreams.ts +1 -1
  239. package/src/streamRepository/api/queryStreams.ts +1 -1
  240. package/src/subChannelRepository/observers/tests/getSubChannels.test.ts +308 -15
  241. package/src/userRepository/api/flagUser.ts +1 -1
  242. package/src/userRepository/api/getUser.ts +2 -1
  243. package/src/userRepository/api/getUserByIds.ts +4 -3
  244. package/src/userRepository/api/isUserFlaggedByMe.ts +1 -1
  245. package/src/userRepository/api/queryBlockedUsers.ts +10 -8
  246. package/src/userRepository/api/queryUsers.ts +12 -10
  247. package/src/userRepository/api/unflagUser.ts +1 -1
  248. package/src/userRepository/api/updateUser.ts +6 -6
  249. package/src/userRepository/events/onUserDeleted.ts +2 -2
  250. package/src/userRepository/events/onUserFetched.ts +2 -2
  251. package/src/userRepository/events/onUserFlagCleared.ts +2 -2
  252. package/src/userRepository/events/onUserFlagged.ts +2 -2
  253. package/src/userRepository/events/onUserUnflagged.ts +2 -2
  254. package/src/userRepository/events/onUserUpdated.ts +2 -2
  255. package/src/userRepository/events/utils.ts +1 -1
  256. package/src/userRepository/observers/getBlockedUsers.ts +8 -7
  257. package/src/userRepository/observers/getUser.ts +3 -3
  258. package/src/userRepository/observers/getUsers.ts +2 -2
  259. package/src/userRepository/observers/observeUser.ts +9 -6
  260. package/src/userRepository/observers/searchUserByDisplayName.ts +2 -2
  261. package/src/userRepository/observers/tests/getUser.test.ts +1 -1
  262. package/src/userRepository/observers/tests/getUsers.test.ts +12 -11
  263. package/src/userRepository/observers/tests/searchUserByDisplayName.test.ts +1 -1
  264. package/src/userRepository/relationship/block/api/blockUser.ts +6 -4
  265. package/src/userRepository/relationship/block/api/unBlockUser.ts +6 -4
  266. package/src/userRepository/relationship/block/observers/getBlockedUsers.ts +1 -1
  267. package/src/userRepository/relationship/follow/api/acceptFollower.ts +2 -2
  268. package/src/userRepository/relationship/follow/api/acceptMyFollower.ts +2 -2
  269. package/src/userRepository/relationship/follow/api/declineFollower.ts +2 -2
  270. package/src/userRepository/relationship/follow/api/declineMyFollower.ts +2 -2
  271. package/src/userRepository/relationship/follow/api/follow.ts +2 -2
  272. package/src/userRepository/relationship/follow/api/getFollowInfo.ts +4 -4
  273. package/src/userRepository/relationship/follow/api/unfollow.ts +3 -3
  274. package/src/userRepository/relationship/follow/api/utils.ts +1 -1
  275. package/src/userRepository/relationship/follow/observers/getFollowers.ts +1 -1
  276. package/src/userRepository/relationship/follow/observers/getFollowings.ts +1 -1
  277. package/src/userRepository/relationship/follow/observers/observeFollowInfo.ts +1 -1
  278. package/src/userRepository/relationship/follow/observers/observeFollowers.ts +2 -2
  279. package/src/userRepository/relationship/follow/observers/observeFollowings.ts +2 -2
  280. package/src/utils/linkedObject/categoryLinkedObject.ts +40 -0
  281. package/src/utils/linkedObject/index.ts +4 -0
  282. package/src/utils/linkedObject/userLinkedObject.ts +36 -0
  283. package/src/utils/tests/client.ts +1 -0
  284. package/src/utils/tests/dummy/block.ts +3 -3
  285. package/src/utils/tests/dummy/category.ts +5 -0
  286. package/src/utils/tests/dummy/channel.ts +58 -1
  287. package/src/utils/tests/dummy/community.ts +1 -1
  288. package/src/utils/tests/dummy/follow.ts +1 -1
  289. package/src/utils/tests/dummy/user.ts +3 -1
  290. package/tsconfig.json +18 -23
@@ -370,4 +370,770 @@ describe('getMessages', () => {
370
370
  }),
371
371
  );
372
372
  });
373
+
374
+ describe('when querying the message collection with specific sort and filter options, the result should be sorted correctly', () => {
375
+ describe('sorting', () => {
376
+ test('default', async () => {
377
+ const { subChannelId } = messages;
378
+ const returnValue: Amity.RawMessage[] = [
379
+ generateRawMessage({ messageId: messages.page3[2], segment: 9 }),
380
+ generateRawMessage({ messageId: messages.page3[1], segment: 8 }),
381
+ generateRawMessage({ messageId: messages.page3[0], segment: 7 }),
382
+ ];
383
+
384
+ const callback = jest.fn();
385
+ const spyGet = jest.spyOn(client.http, 'get').mockResolvedValue({
386
+ data: {
387
+ messages: returnValue,
388
+ paging: {},
389
+ },
390
+ });
391
+
392
+ getMessages({ subChannelId }, callback);
393
+
394
+ expect(spyGet).toHaveBeenCalledWith('/api/v5/messages', {
395
+ params: {
396
+ isDeleted: false,
397
+ messageFeedId: 'message-feed-id',
398
+ options: { token: 'eyJsaW1pdCI6NX0=' },
399
+ },
400
+ });
401
+
402
+ expect(callback).toHaveBeenCalledTimes(1);
403
+ expect(callback).toHaveBeenCalledWith(
404
+ expect.objectContaining({
405
+ data: [],
406
+ error: undefined,
407
+ loading: true,
408
+ }),
409
+ );
410
+
411
+ await pause(100);
412
+
413
+ expect(callback.mock.calls.length).toBeGreaterThan(1);
414
+ expect(callback).lastCalledWith(
415
+ expect.objectContaining({
416
+ data: returnValue.map(convertRawMessage),
417
+ error: undefined,
418
+ loading: false,
419
+ }),
420
+ );
421
+ });
422
+
423
+ test('segmentDesc', async () => {
424
+ const { subChannelId } = messages;
425
+ const returnValue: Amity.RawMessage[] = [
426
+ generateRawMessage({ messageId: messages.page3[2], segment: 9 }),
427
+ generateRawMessage({ messageId: messages.page3[1], segment: 8 }),
428
+ generateRawMessage({ messageId: messages.page3[0], segment: 7 }),
429
+ ];
430
+
431
+ const callback = jest.fn();
432
+ const spyGet = jest.spyOn(client.http, 'get').mockResolvedValue({
433
+ data: {
434
+ messages: returnValue,
435
+ paging: {},
436
+ },
437
+ });
438
+
439
+ getMessages({ subChannelId, sortBy: 'segmentDesc' }, callback);
440
+
441
+ expect(spyGet).toHaveBeenCalledWith('/api/v5/messages', {
442
+ params: {
443
+ isDeleted: false,
444
+ messageFeedId: 'message-feed-id',
445
+ options: { sortBy: 'segmentDesc', token: 'eyJsaW1pdCI6NX0=' },
446
+ },
447
+ });
448
+
449
+ expect(callback).toHaveBeenCalledTimes(1);
450
+ expect(callback).toHaveBeenCalledWith(
451
+ expect.objectContaining({
452
+ data: [],
453
+ error: undefined,
454
+ loading: true,
455
+ }),
456
+ );
457
+
458
+ await pause(100);
459
+
460
+ expect(callback.mock.calls.length).toBeGreaterThan(1);
461
+ expect(callback).lastCalledWith(
462
+ expect.objectContaining({
463
+ data: returnValue.map(convertRawMessage),
464
+ error: undefined,
465
+ loading: false,
466
+ }),
467
+ );
468
+ });
469
+
470
+ test('segmentDesc + wrong ordering from server', async () => {
471
+ const { subChannelId } = messages;
472
+ const returnValue: Amity.RawMessage[] = [
473
+ generateRawMessage({ messageId: messages.page3[0], segment: 7 }),
474
+ generateRawMessage({ messageId: messages.page3[1], segment: 8 }),
475
+ generateRawMessage({ messageId: messages.page3[2], segment: 9 }),
476
+ ];
477
+
478
+ const callback = jest.fn();
479
+ const spyGet = jest.spyOn(client.http, 'get').mockResolvedValue({
480
+ data: {
481
+ messages: returnValue,
482
+ paging: {},
483
+ },
484
+ });
485
+
486
+ getMessages({ subChannelId, sortBy: 'segmentDesc' }, callback);
487
+
488
+ expect(spyGet).toHaveBeenCalledWith('/api/v5/messages', {
489
+ params: {
490
+ isDeleted: false,
491
+ messageFeedId: 'message-feed-id',
492
+ options: { sortBy: 'segmentDesc', token: 'eyJsaW1pdCI6NX0=' },
493
+ },
494
+ });
495
+
496
+ expect(callback).toHaveBeenCalledTimes(1);
497
+ expect(callback).toHaveBeenCalledWith(
498
+ expect.objectContaining({
499
+ data: [],
500
+ error: undefined,
501
+ loading: true,
502
+ }),
503
+ );
504
+
505
+ await pause(100);
506
+
507
+ expect(callback.mock.calls.length).toBeGreaterThan(1);
508
+ expect(callback).lastCalledWith(
509
+ expect.objectContaining({
510
+ data: [
511
+ convertRawMessage(returnValue[2]),
512
+ convertRawMessage(returnValue[1]),
513
+ convertRawMessage(returnValue[0]),
514
+ ],
515
+ error: undefined,
516
+ loading: false,
517
+ }),
518
+ );
519
+ });
520
+
521
+ test('segmentAsc', async () => {
522
+ const { subChannelId } = messages;
523
+ const returnValue: Amity.RawMessage[] = [
524
+ generateRawMessage({ messageId: messages.page1[0], segment: 1 }),
525
+ generateRawMessage({ messageId: messages.page1[1], segment: 2 }),
526
+ generateRawMessage({ messageId: messages.page1[2], segment: 3 }),
527
+ ];
528
+
529
+ const callback = jest.fn();
530
+ const spyGet = jest.spyOn(client.http, 'get').mockResolvedValue({
531
+ data: {
532
+ messages: returnValue,
533
+ paging: {},
534
+ },
535
+ });
536
+
537
+ getMessages({ subChannelId, sortBy: 'segmentAsc' }, callback);
538
+
539
+ expect(spyGet).toHaveBeenCalledWith('/api/v5/messages', {
540
+ params: {
541
+ isDeleted: false,
542
+ messageFeedId: 'message-feed-id',
543
+ options: { token: 'eyJsaW1pdCI6NX0=', sortBy: 'segmentAsc' },
544
+ },
545
+ });
546
+
547
+ expect(callback).toHaveBeenCalledTimes(1);
548
+ expect(callback).toHaveBeenCalledWith(
549
+ expect.objectContaining({
550
+ data: [],
551
+ error: undefined,
552
+ loading: true,
553
+ }),
554
+ );
555
+
556
+ await pause(100);
557
+
558
+ expect(callback.mock.calls.length).toBeGreaterThan(1);
559
+ expect(callback).lastCalledWith(
560
+ expect.objectContaining({
561
+ data: returnValue.map(convertRawMessage),
562
+ error: undefined,
563
+ loading: false,
564
+ }),
565
+ );
566
+ });
567
+
568
+ test('segmentAsc + wrong ordering from server', async () => {
569
+ const { subChannelId } = messages;
570
+ const returnValue: Amity.RawMessage[] = [
571
+ generateRawMessage({ messageId: messages.page1[2], segment: 3 }),
572
+ generateRawMessage({ messageId: messages.page1[1], segment: 2 }),
573
+ generateRawMessage({ messageId: messages.page1[0], segment: 1 }),
574
+ ];
575
+
576
+ const callback = jest.fn();
577
+ const spyGet = jest.spyOn(client.http, 'get').mockResolvedValue({
578
+ data: {
579
+ messages: returnValue,
580
+ paging: {},
581
+ },
582
+ });
583
+
584
+ getMessages({ subChannelId, sortBy: 'segmentAsc' }, callback);
585
+
586
+ expect(spyGet).toHaveBeenCalledWith('/api/v5/messages', {
587
+ params: {
588
+ isDeleted: false,
589
+ messageFeedId: 'message-feed-id',
590
+ options: { token: 'eyJsaW1pdCI6NX0=', sortBy: 'segmentAsc' },
591
+ },
592
+ });
593
+
594
+ expect(callback).toHaveBeenCalledTimes(1);
595
+ expect(callback).toHaveBeenCalledWith(
596
+ expect.objectContaining({
597
+ data: [],
598
+ error: undefined,
599
+ loading: true,
600
+ }),
601
+ );
602
+
603
+ await pause(100);
604
+
605
+ expect(callback.mock.calls.length).toBeGreaterThan(1);
606
+ expect(callback).lastCalledWith(
607
+ expect.objectContaining({
608
+ data: [
609
+ convertRawMessage(returnValue[2]),
610
+ convertRawMessage(returnValue[1]),
611
+ convertRawMessage(returnValue[0]),
612
+ ],
613
+ error: undefined,
614
+ loading: false,
615
+ }),
616
+ );
617
+ });
618
+ });
619
+
620
+ describe('filtering', () => {
621
+ test('tags', async () => {
622
+ const { subChannelId } = messages;
623
+ const returnValue: Amity.RawMessage[] = [
624
+ generateRawMessage({ messageId: messages.page3[2], tags: ['tag1'] }),
625
+ generateRawMessage({ messageId: messages.page3[1], tags: ['tag2'] }),
626
+ generateRawMessage({ messageId: messages.page3[0], tags: ['tag3'] }),
627
+ ];
628
+
629
+ const callback = jest.fn();
630
+ const spyGet = jest.spyOn(client.http, 'get').mockResolvedValue({
631
+ data: {
632
+ messages: returnValue,
633
+ paging: {},
634
+ },
635
+ });
636
+
637
+ getMessages({ subChannelId, tags: ['tag1', 'tag2'] }, callback);
638
+
639
+ expect(spyGet).toHaveBeenCalledWith('/api/v5/messages', {
640
+ params: {
641
+ isDeleted: false,
642
+ messageFeedId: 'message-feed-id',
643
+ includeTags: ['tag1', 'tag2'],
644
+ options: { token: 'eyJsaW1pdCI6NX0=' },
645
+ },
646
+ });
647
+
648
+ expect(callback).toHaveBeenCalledTimes(1);
649
+ expect(callback).toHaveBeenCalledWith(
650
+ expect.objectContaining({
651
+ data: [],
652
+ error: undefined,
653
+ loading: true,
654
+ }),
655
+ );
656
+
657
+ await pause(100);
658
+
659
+ expect(callback.mock.calls.length).toBeGreaterThan(1);
660
+ expect(callback).lastCalledWith(
661
+ expect.objectContaining({
662
+ data: [convertRawMessage(returnValue[0]), convertRawMessage(returnValue[1])],
663
+ error: undefined,
664
+ loading: false,
665
+ }),
666
+ );
667
+ });
668
+
669
+ test('excludeTags', async () => {
670
+ const { subChannelId } = messages;
671
+ const returnValue: Amity.RawMessage[] = [
672
+ generateRawMessage({ messageId: messages.page3[2], tags: ['tag1'] }),
673
+ generateRawMessage({ messageId: messages.page3[1], tags: ['tag2'] }),
674
+ generateRawMessage({ messageId: messages.page3[0], tags: ['tag3'] }),
675
+ ];
676
+
677
+ const callback = jest.fn();
678
+ const spyGet = jest.spyOn(client.http, 'get').mockResolvedValue({
679
+ data: {
680
+ messages: returnValue,
681
+ paging: {},
682
+ },
683
+ });
684
+
685
+ // filtering out doesn't work when put more than 1 tag in excludeTags
686
+ getMessages({ subChannelId, excludeTags: ['tag1'] }, callback);
687
+
688
+ expect(spyGet).toHaveBeenCalledWith('/api/v5/messages', {
689
+ params: {
690
+ isDeleted: false,
691
+ messageFeedId: 'message-feed-id',
692
+ excludeTags: ['tag1'],
693
+ options: { token: 'eyJsaW1pdCI6NX0=' },
694
+ },
695
+ });
696
+
697
+ expect(callback).toHaveBeenCalledTimes(1);
698
+ expect(callback).toHaveBeenCalledWith(
699
+ expect.objectContaining({
700
+ data: [],
701
+ error: undefined,
702
+ loading: true,
703
+ }),
704
+ );
705
+
706
+ await pause(100);
707
+
708
+ expect(callback.mock.calls.length).toBeGreaterThan(1);
709
+ expect(callback).lastCalledWith(
710
+ expect.objectContaining({
711
+ data: [convertRawMessage(returnValue[1]), convertRawMessage(returnValue[2])],
712
+ error: undefined,
713
+ loading: false,
714
+ }),
715
+ );
716
+ });
717
+
718
+ test('dataType', async () => {
719
+ const { subChannelId } = messages;
720
+ const returnValue: Amity.RawMessage[] = [
721
+ generateRawMessage({ messageId: messages.page3[2], dataType: 'text' }),
722
+ generateRawMessage({ messageId: messages.page3[1], dataType: 'image' }),
723
+ generateRawMessage({ messageId: messages.page3[0], dataType: 'video' }),
724
+ ];
725
+
726
+ const callback = jest.fn();
727
+ const spyGet = jest.spyOn(client.http, 'get').mockResolvedValue({
728
+ data: {
729
+ messages: returnValue,
730
+ paging: {},
731
+ },
732
+ });
733
+
734
+ getMessages({ subChannelId, dataType: 'image' }, callback);
735
+
736
+ expect(spyGet).toHaveBeenCalledWith('/api/v5/messages', {
737
+ params: {
738
+ isDeleted: false,
739
+ messageFeedId: 'message-feed-id',
740
+ dataType: 'image',
741
+ options: { token: 'eyJsaW1pdCI6NX0=' },
742
+ },
743
+ });
744
+
745
+ expect(callback).toHaveBeenCalledTimes(1);
746
+ expect(callback).toHaveBeenCalledWith(
747
+ expect.objectContaining({
748
+ data: [],
749
+ error: undefined,
750
+ loading: true,
751
+ }),
752
+ );
753
+
754
+ await pause(100);
755
+
756
+ expect(callback.mock.calls.length).toBeGreaterThan(1);
757
+ expect(callback).lastCalledWith(
758
+ expect.objectContaining({
759
+ data: [convertRawMessage(returnValue[1])],
760
+ error: undefined,
761
+ loading: false,
762
+ }),
763
+ );
764
+ });
765
+
766
+ test('parentId', async () => {
767
+ const { subChannelId } = messages;
768
+ const parentId = 'parent-id';
769
+ const returnValue: Amity.RawMessage[] = [
770
+ generateRawMessage({ messageId: messages.page3[2], parentId }),
771
+ generateRawMessage({ messageId: messages.page3[1], parentId }),
772
+ generateRawMessage({ messageId: messages.page3[0], parentId: 'parent-id-2' }),
773
+ ];
774
+
775
+ const callback = jest.fn();
776
+ const spyGet = jest.spyOn(client.http, 'get').mockResolvedValue({
777
+ data: {
778
+ messages: returnValue,
779
+ paging: {},
780
+ },
781
+ });
782
+
783
+ getMessages({ subChannelId, parentId }, callback);
784
+
785
+ expect(spyGet).toHaveBeenCalledWith('/api/v5/messages', {
786
+ params: {
787
+ isDeleted: false,
788
+ messageFeedId: 'message-feed-id',
789
+ parentId,
790
+ options: { token: 'eyJsaW1pdCI6NX0=' },
791
+ },
792
+ });
793
+
794
+ expect(callback).toHaveBeenCalledTimes(1);
795
+ expect(callback).toHaveBeenCalledWith(
796
+ expect.objectContaining({
797
+ data: [],
798
+ error: undefined,
799
+ loading: true,
800
+ }),
801
+ );
802
+
803
+ await pause(100);
804
+
805
+ expect(callback.mock.calls.length).toBeGreaterThan(1);
806
+ expect(callback).lastCalledWith(
807
+ expect.objectContaining({
808
+ data: [convertRawMessage(returnValue[0]), convertRawMessage(returnValue[1])],
809
+ error: undefined,
810
+ loading: false,
811
+ }),
812
+ );
813
+ });
814
+ });
815
+
816
+ describe('combine sorting + filtering', () => {
817
+ test('segmentAsc + tags', async () => {
818
+ const { subChannelId } = messages;
819
+ const returnValue: Amity.RawMessage[] = [
820
+ generateRawMessage({ messageId: messages.page3[2], tags: ['tag1'], segment: 9 }),
821
+ generateRawMessage({ messageId: messages.page3[1], tags: ['tag3'], segment: 8 }),
822
+ generateRawMessage({ messageId: messages.page3[0], tags: ['tag2'], segment: 7 }),
823
+ generateRawMessage({ messageId: messages.page2[2], tags: ['tag3'], segment: 6 }),
824
+ generateRawMessage({ messageId: messages.page2[1], tags: ['tag3'], segment: 5 }),
825
+ ];
826
+
827
+ const callback = jest.fn();
828
+ const spyGet = jest.spyOn(client.http, 'get').mockResolvedValue({
829
+ data: {
830
+ messages: returnValue,
831
+ paging: {},
832
+ },
833
+ });
834
+
835
+ getMessages({ subChannelId, tags: ['tag3'], sortBy: 'segmentAsc' }, callback);
836
+
837
+ expect(spyGet).toHaveBeenCalledWith('/api/v5/messages', {
838
+ params: {
839
+ isDeleted: false,
840
+ messageFeedId: 'message-feed-id',
841
+ includeTags: ['tag3'],
842
+ options: { sortBy: 'segmentAsc', token: 'eyJsaW1pdCI6NX0=' },
843
+ },
844
+ });
845
+
846
+ expect(callback).toHaveBeenCalledTimes(1);
847
+ expect(callback).toHaveBeenCalledWith(
848
+ expect.objectContaining({
849
+ data: [],
850
+ error: undefined,
851
+ loading: true,
852
+ }),
853
+ );
854
+
855
+ await pause(100);
856
+
857
+ expect(callback.mock.calls.length).toBeGreaterThan(1);
858
+ expect(callback).lastCalledWith(
859
+ expect.objectContaining({
860
+ data: [
861
+ convertRawMessage(returnValue[4]),
862
+ convertRawMessage(returnValue[3]),
863
+ convertRawMessage(returnValue[1]),
864
+ ],
865
+ error: undefined,
866
+ loading: false,
867
+ }),
868
+ );
869
+ });
870
+ });
871
+ });
872
+
873
+ test('when querying two message collections with the same subchannelId but different params, results do not mix with each other.', async () => {
874
+ const callback = jest.fn();
875
+ const callback2 = jest.fn();
876
+
877
+ const { subChannelId } = messages;
878
+ const returnValue: Amity.RawMessage[] = [
879
+ generateRawMessage({ messageId: messages.page3[2], segment: 9 }),
880
+ generateRawMessage({ messageId: messages.page3[1], segment: 8 }),
881
+ generateRawMessage({ messageId: messages.page3[0], segment: 7 }),
882
+ ];
883
+
884
+ const returnValue2: Amity.RawMessage[] = [
885
+ generateRawMessage({ messageId: messages.page1[0], segment: 1 }),
886
+ generateRawMessage({ messageId: messages.page1[1], segment: 2 }),
887
+ generateRawMessage({ messageId: messages.page1[2], segment: 3 }),
888
+ ];
889
+
890
+ const spyGet = jest.spyOn(client.http, 'get').mockImplementation((url: string, params) => {
891
+ if (params?.params?.options?.sortBy === 'segmentDesc') {
892
+ return Promise.resolve({
893
+ data: {
894
+ messages: returnValue,
895
+ paging: {},
896
+ },
897
+ });
898
+ }
899
+ return Promise.resolve({
900
+ data: {
901
+ messages: returnValue2,
902
+ paging: {},
903
+ },
904
+ });
905
+ });
906
+
907
+ getMessages({ subChannelId, sortBy: 'segmentDesc' }, callback);
908
+ getMessages({ subChannelId, sortBy: 'segmentAsc' }, callback2);
909
+
910
+ expect(spyGet).toHaveBeenCalledWith('/api/v5/messages', {
911
+ params: {
912
+ isDeleted: false,
913
+ messageFeedId: 'message-feed-id',
914
+ options: { sortBy: 'segmentDesc', token: 'eyJsaW1pdCI6NX0=' },
915
+ },
916
+ });
917
+
918
+ expect(spyGet).toHaveBeenCalledWith('/api/v5/messages', {
919
+ params: {
920
+ isDeleted: false,
921
+ messageFeedId: 'message-feed-id',
922
+ options: { sortBy: 'segmentAsc', token: 'eyJsaW1pdCI6NX0=' },
923
+ },
924
+ });
925
+
926
+ expect(callback).toHaveBeenCalledTimes(1);
927
+ expect(callback).toHaveBeenCalledWith(
928
+ expect.objectContaining({
929
+ data: [],
930
+ error: undefined,
931
+ loading: true,
932
+ }),
933
+ );
934
+
935
+ await pause(100);
936
+
937
+ expect(callback.mock.calls.length).toBeGreaterThan(1);
938
+ expect(callback).lastCalledWith(
939
+ expect.objectContaining({
940
+ data: returnValue.map(convertRawMessage),
941
+ error: undefined,
942
+ loading: false,
943
+ }),
944
+ );
945
+
946
+ expect(callback2.mock.calls.length).toBeGreaterThan(1);
947
+ expect(callback2).lastCalledWith(
948
+ expect.objectContaining({
949
+ data: returnValue2.map(convertRawMessage),
950
+ error: undefined,
951
+ loading: false,
952
+ }),
953
+ );
954
+ });
955
+
956
+ test('when querying two message collections with the same subchannelId but different params, pagination works correctly for each.', async () => {
957
+ const callback = jest.fn();
958
+ const callback2 = jest.fn();
959
+
960
+ const { subChannelId } = messages;
961
+ const returnValue1Page1: Amity.RawMessage[] = [
962
+ generateRawMessage({ messageId: messages.page3[2], segment: 100 }),
963
+ generateRawMessage({ messageId: messages.page3[1], segment: 99 }),
964
+ generateRawMessage({ messageId: messages.page3[0], segment: 98 }),
965
+ ];
966
+
967
+ const returnValue1Page2: Amity.RawMessage[] = [
968
+ generateRawMessage({ messageId: messages.page3[2], segment: 97 }),
969
+ generateRawMessage({ messageId: messages.page3[1], segment: 96 }),
970
+ generateRawMessage({ messageId: messages.page3[0], segment: 95 }),
971
+ ];
972
+
973
+ const returnValue2Page1: Amity.RawMessage[] = [
974
+ generateRawMessage({ messageId: messages.page1[0], segment: 1 }),
975
+ generateRawMessage({ messageId: messages.page1[1], segment: 2 }),
976
+ generateRawMessage({ messageId: messages.page1[2], segment: 3 }),
977
+ ];
978
+
979
+ const returnValue2Page2: Amity.RawMessage[] = [
980
+ generateRawMessage({ messageId: messages.page1[0], segment: 4 }),
981
+ generateRawMessage({ messageId: messages.page1[1], segment: 5 }),
982
+ generateRawMessage({ messageId: messages.page1[2], segment: 6 }),
983
+ ];
984
+
985
+ const returnValue2Page3: Amity.RawMessage[] = [
986
+ generateRawMessage({ messageId: messages.page1[0], segment: 7 }),
987
+ generateRawMessage({ messageId: messages.page1[1], segment: 8 }),
988
+ generateRawMessage({ messageId: messages.page1[2], segment: 9 }),
989
+ ];
990
+
991
+ const spyGet = jest.spyOn(client.http, 'get').mockImplementation((url: string, params) => {
992
+ if (url !== '/api/v5/messages') return Promise.resolve();
993
+ if (params?.params?.options?.sortBy === 'segmentDesc') {
994
+ if (
995
+ params.params.options.token === 'eyJsaW1pdCI6MiwiYmVmb3JlIjo2MzQ3MTYxNDM5MTExMTAwMDAwMH0='
996
+ ) {
997
+ return Promise.resolve({
998
+ data: {
999
+ messages: returnValue1Page2,
1000
+ paging: {
1001
+ previous: 'eyJsaW1pdCI6MiwiYmVmb3JlIjo2MzQ3MTYxNDM5MTExMTAwMDAwMH0',
1002
+ },
1003
+ },
1004
+ });
1005
+ }
1006
+ return Promise.resolve({
1007
+ data: {
1008
+ messages: returnValue1Page1,
1009
+ paging: {
1010
+ previous: 'eyJsaW1pdCI6MiwiYmVmb3JlIjo2MzQ3MTYxNDM5MTExMTAwMDAwMH0',
1011
+ next: 'eyJsaW1pdCI6MiwiYmVmb3JlIjo2MzQ3MTYxNDM5MTExMTAwMDAwMH0',
1012
+ },
1013
+ },
1014
+ });
1015
+ }
1016
+ if (
1017
+ params?.params?.options?.token ===
1018
+ 'eyJsaW1pdCI6MiwiYmVmb3JlIjo2MzQ3MTYxNDM5MTExMTAwMDAwMH0='
1019
+ ) {
1020
+ return Promise.resolve({
1021
+ data: {
1022
+ messages: returnValue2Page2,
1023
+ paging: {
1024
+ previous: 'eyJsaW1pdCI6MiwiYmVmb3JlIjo2MzQ3MTYxNDM5MTExMTAwMDAwMH0',
1025
+ next: 'eyJsaW1pdCI6MiwiYmVmb3JlIjo2MzQ3MTYxNDQ5MTExMTAwMDAwMH0=',
1026
+ },
1027
+ },
1028
+ });
1029
+ }
1030
+ if (
1031
+ params?.params?.options?.token ===
1032
+ 'eyJsaW1pdCI6MiwiYmVmb3JlIjo2MzQ3MTYxNDQ5MTExMTAwMDAwMH0='
1033
+ ) {
1034
+ return Promise.resolve({
1035
+ data: {
1036
+ messages: returnValue2Page3,
1037
+ paging: {
1038
+ previous: 'eyJsaW1pdCI6MiwiYmVmb3JlIjo2MzQ3MTYxNDM5MTExMTAwMDAwMH0',
1039
+ },
1040
+ },
1041
+ });
1042
+ }
1043
+
1044
+ return Promise.resolve({
1045
+ data: {
1046
+ messages: returnValue2Page1,
1047
+ paging: {
1048
+ previous: 'eyJsaW1pdCI6MiwiYmVmb3JlIjo2MzQ3MTYxNDM5MTExMTAwMDAwMH0',
1049
+ next: 'eyJsaW1pdCI6MiwiYmVmb3JlIjo2MzQ3MTYxNDM5MTExMTAwMDAwMH0=',
1050
+ },
1051
+ },
1052
+ });
1053
+ });
1054
+
1055
+ getMessages({ subChannelId, sortBy: 'segmentDesc' }, callback);
1056
+ getMessages({ subChannelId, sortBy: 'segmentAsc', limit: 3 }, callback2);
1057
+
1058
+ expect(spyGet).toHaveBeenCalledWith('/api/v5/messages', {
1059
+ params: {
1060
+ isDeleted: false,
1061
+ messageFeedId: 'message-feed-id',
1062
+ options: { sortBy: 'segmentDesc', token: 'eyJsaW1pdCI6NX0=' },
1063
+ },
1064
+ });
1065
+
1066
+ expect(spyGet).toHaveBeenCalledWith('/api/v5/messages', {
1067
+ params: {
1068
+ isDeleted: false,
1069
+ messageFeedId: 'message-feed-id',
1070
+ options: { sortBy: 'segmentAsc', token: 'eyJsaW1pdCI6M30=' },
1071
+ },
1072
+ });
1073
+
1074
+ expect(callback).toHaveBeenCalledTimes(1);
1075
+ expect(callback).toHaveBeenCalledWith(
1076
+ expect.objectContaining({
1077
+ data: [],
1078
+ error: undefined,
1079
+ loading: true,
1080
+ }),
1081
+ );
1082
+
1083
+ await pause(100);
1084
+
1085
+ expect(callback.mock.calls.length).toBeGreaterThan(1);
1086
+ expect(callback).lastCalledWith(
1087
+ expect.objectContaining({
1088
+ data: returnValue1Page1.map(convertRawMessage),
1089
+ error: undefined,
1090
+ loading: false,
1091
+ }),
1092
+ );
1093
+
1094
+ // get more page for live collection #2
1095
+ callback2.mock.lastCall[0].onNextPage();
1096
+
1097
+ await pause(100);
1098
+
1099
+ callback2.mock.lastCall[0].onNextPage();
1100
+
1101
+ await pause(100);
1102
+
1103
+ callback2.mock.lastCall[0].onNextPage();
1104
+
1105
+ await pause(100);
1106
+
1107
+ expect(callback.mock.calls.length).toBeGreaterThan(1);
1108
+ expect(callback).lastCalledWith(
1109
+ expect.objectContaining({
1110
+ data: returnValue1Page1.map(convertRawMessage),
1111
+ error: undefined,
1112
+ loading: false,
1113
+ }),
1114
+ );
1115
+
1116
+ expect(callback2.mock.calls.length).toBeGreaterThan(5);
1117
+ expect(callback2).lastCalledWith(
1118
+ expect.objectContaining({
1119
+ data: returnValue2Page3.map(convertRawMessage),
1120
+ error: undefined,
1121
+ loading: false,
1122
+ }),
1123
+ );
1124
+
1125
+ // get more page for live collection #1
1126
+
1127
+ callback.mock.lastCall[0].onNextPage();
1128
+
1129
+ await pause(100);
1130
+
1131
+ expect(callback).lastCalledWith(
1132
+ expect.objectContaining({
1133
+ data: returnValue1Page2.map(convertRawMessage),
1134
+ error: undefined,
1135
+ loading: false,
1136
+ }),
1137
+ );
1138
+ });
373
1139
  });