@amityco/ts-sdk 6.2.0 → 6.2.1-0cf9bee.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.
- package/README.md +0 -4
- package/dist/@types/core/events.d.ts +1 -0
- package/dist/@types/core/events.d.ts.map +1 -1
- package/dist/@types/core/payload.d.ts +4 -0
- package/dist/@types/core/payload.d.ts.map +1 -1
- package/dist/@types/domains/channel.d.ts +5 -1
- package/dist/@types/domains/channel.d.ts.map +1 -1
- package/dist/@types/domains/marker.d.ts +2 -1
- package/dist/@types/domains/marker.d.ts.map +1 -1
- package/dist/channelRepsitory/api/createChannel.d.ts +1 -1
- package/dist/channelRepsitory/api/markAsRead.d.ts +1 -1
- package/dist/channelRepsitory/api/muteChannel.d.ts.map +1 -1
- package/dist/client/utils/markerSyncEngine.d.ts.map +1 -1
- package/dist/communityRepository/{communityModeration → communityMembership}/api/addMembers.d.ts.map +1 -1
- package/dist/communityRepository/communityMembership/api/index.d.ts +3 -0
- package/dist/communityRepository/communityMembership/api/index.d.ts.map +1 -0
- package/dist/communityRepository/{communityModeration → communityMembership}/api/removeMembers.d.ts.map +1 -1
- package/dist/communityRepository/communityMembership/api/tests/addMembers.test.d.ts.map +1 -0
- package/dist/communityRepository/communityMembership/api/tests/removeMembers.test.d.ts.map +1 -0
- package/dist/communityRepository/communityMembership/index.d.ts +1 -0
- package/dist/communityRepository/communityMembership/index.d.ts.map +1 -1
- package/dist/communityRepository/communityMembership/observers/getMembers.d.ts.map +1 -1
- package/dist/communityRepository/communityModeration/api/banMembers.d.ts +16 -0
- package/dist/communityRepository/communityModeration/api/banMembers.d.ts.map +1 -0
- package/dist/communityRepository/communityModeration/api/index.d.ts +2 -2
- package/dist/communityRepository/communityModeration/api/index.d.ts.map +1 -1
- package/dist/communityRepository/communityModeration/api/test/banMembers.test.d.ts +2 -0
- package/dist/communityRepository/communityModeration/api/test/banMembers.test.d.ts.map +1 -0
- package/dist/communityRepository/communityModeration/api/test/unbanMembers.test.d.ts +2 -0
- package/dist/communityRepository/communityModeration/api/test/unbanMembers.test.d.ts.map +1 -0
- package/dist/communityRepository/communityModeration/api/unbanMembers.d.ts +16 -0
- package/dist/communityRepository/communityModeration/api/unbanMembers.d.ts.map +1 -0
- package/dist/core/events.d.ts +3 -3
- package/dist/core/events.d.ts.map +1 -1
- package/dist/core/query/filtering.d.ts +1 -0
- package/dist/core/query/filtering.d.ts.map +1 -1
- package/dist/core/query/sorting.d.ts.map +1 -1
- package/dist/core/transports/mqtt.d.ts +1 -1
- package/dist/core/transports/mqtt.d.ts.map +1 -1
- package/dist/feedRepository/api/getCustomRankingGlobalFeed.d.ts +36 -0
- package/dist/feedRepository/api/getCustomRankingGlobalFeed.d.ts.map +1 -0
- package/dist/feedRepository/api/index.d.ts +1 -0
- package/dist/feedRepository/api/index.d.ts.map +1 -1
- package/dist/feedRepository/api/queryGlobalFeed.d.ts.map +1 -1
- package/dist/feedRepository/api/test/getCustomRankingGlobalFeed.test.d.ts +2 -0
- package/dist/feedRepository/api/test/getCustomRankingGlobalFeed.test.d.ts.map +1 -0
- package/dist/fileRepository/api/index.d.ts +3 -3
- package/dist/fileRepository/api/test/uploadFile.test.d.ts +2 -0
- package/dist/fileRepository/api/test/uploadFile.test.d.ts.map +1 -0
- package/dist/fileRepository/api/test/uploadImage.test.d.ts +2 -0
- package/dist/fileRepository/api/test/uploadImage.test.d.ts.map +1 -0
- package/dist/fileRepository/api/test/uploadVideo.test.d.ts +2 -0
- package/dist/fileRepository/api/test/uploadVideo.test.d.ts.map +1 -0
- package/dist/fileRepository/api/{createFile.d.ts → uploadFile.d.ts} +4 -4
- package/dist/fileRepository/api/uploadFile.d.ts.map +1 -0
- package/dist/fileRepository/api/{createImage.d.ts → uploadImage.d.ts} +4 -4
- package/dist/fileRepository/api/uploadImage.d.ts.map +1 -0
- package/dist/fileRepository/api/{createVideo.d.ts → uploadVideo.d.ts} +5 -5
- package/dist/fileRepository/api/uploadVideo.d.ts.map +1 -0
- package/dist/index.cjs.js +795 -193
- package/dist/index.esm.js +794 -194
- package/dist/index.umd.js +4 -4
- package/dist/marker/events/index.d.ts +1 -0
- package/dist/marker/events/index.d.ts.map +1 -1
- package/dist/marker/events/onFeedlMarkerUpdated.d.ts +17 -0
- package/dist/marker/events/onFeedlMarkerUpdated.d.ts.map +1 -0
- package/dist/messageRepository/api/createMessage.d.ts +1 -1
- package/dist/messageRepository/api/editMessage.d.ts +38 -0
- package/dist/messageRepository/api/editMessage.d.ts.map +1 -0
- package/dist/messageRepository/api/flagMessage.d.ts +14 -0
- package/dist/messageRepository/api/flagMessage.d.ts.map +1 -0
- package/dist/messageRepository/api/index.d.ts +5 -1
- package/dist/messageRepository/api/index.d.ts.map +1 -1
- package/dist/messageRepository/api/isMessageFlaggedByMe.d.ts +14 -0
- package/dist/messageRepository/api/isMessageFlaggedByMe.d.ts.map +1 -0
- package/dist/messageRepository/api/markAsDelivered.d.ts +2 -2
- package/dist/messageRepository/api/{deleteMessage.d.ts → softDeleteMessage.d.ts} +6 -6
- package/dist/messageRepository/api/softDeleteMessage.d.ts.map +1 -0
- package/dist/messageRepository/api/tests/editMessage.test.d.ts +2 -0
- package/dist/messageRepository/api/tests/editMessage.test.d.ts.map +1 -0
- package/dist/messageRepository/api/tests/flagMessage.test.d.ts +2 -0
- package/dist/messageRepository/api/tests/flagMessage.test.d.ts.map +1 -0
- package/dist/messageRepository/api/tests/unflagMessage.test.d.ts +2 -0
- package/dist/messageRepository/api/tests/unflagMessage.test.d.ts.map +1 -0
- package/dist/messageRepository/api/unflagMessage.d.ts +14 -0
- package/dist/messageRepository/api/unflagMessage.d.ts.map +1 -0
- package/dist/messageRepository/api/updateMessage.d.ts.map +1 -1
- package/dist/postRepository/api/deletePost.d.ts +1 -1
- package/dist/postRepository/api/deletePost.d.ts.map +1 -1
- package/dist/postRepository/api/editPost.d.ts +24 -0
- package/dist/postRepository/api/editPost.d.ts.map +1 -0
- package/dist/postRepository/api/flagPost.d.ts +14 -0
- package/dist/postRepository/api/flagPost.d.ts.map +1 -0
- package/dist/postRepository/api/hardDeletePost.d.ts +16 -0
- package/dist/postRepository/api/hardDeletePost.d.ts.map +1 -0
- package/dist/postRepository/api/index.d.ts +6 -0
- package/dist/postRepository/api/index.d.ts.map +1 -1
- package/dist/postRepository/api/isPostFlaggedByMe.d.ts +14 -0
- package/dist/postRepository/api/isPostFlaggedByMe.d.ts.map +1 -0
- package/dist/postRepository/api/softDeletePost.d.ts +16 -0
- package/dist/postRepository/api/softDeletePost.d.ts.map +1 -0
- package/dist/postRepository/api/unflagPost.d.ts +14 -0
- package/dist/postRepository/api/unflagPost.d.ts.map +1 -0
- package/dist/postRepository/api/updatePost.d.ts.map +1 -1
- package/dist/subChannelRepository/api/startReadingAPI.d.ts.map +1 -1
- package/dist/subChannelRepository/api/stopReadingAPI.d.ts.map +1 -1
- package/dist/userRepository/api/flagUser.d.ts +14 -0
- package/dist/userRepository/api/flagUser.d.ts.map +1 -0
- package/dist/userRepository/api/index.d.ts +3 -0
- package/dist/userRepository/api/index.d.ts.map +1 -1
- package/dist/userRepository/api/isUserFlaggedByMe.d.ts +14 -0
- package/dist/userRepository/api/isUserFlaggedByMe.d.ts.map +1 -0
- package/dist/userRepository/{relationship/block/api → api}/queryBlockedUsers.d.ts +2 -2
- package/dist/userRepository/api/queryBlockedUsers.d.ts.map +1 -0
- package/dist/userRepository/api/tests/flagUser.test.d.ts +2 -0
- package/dist/userRepository/api/tests/flagUser.test.d.ts.map +1 -0
- package/dist/userRepository/api/tests/queryBlockedUsers.test.d.ts.map +1 -0
- package/dist/userRepository/api/tests/unflagUser.test.d.ts +2 -0
- package/dist/userRepository/api/tests/unflagUser.test.d.ts.map +1 -0
- package/dist/userRepository/api/unflagUser.d.ts +14 -0
- package/dist/userRepository/api/unflagUser.d.ts.map +1 -0
- package/dist/userRepository/observers/getBlockedUsers.d.ts +2 -0
- package/dist/userRepository/observers/getBlockedUsers.d.ts.map +1 -0
- package/dist/userRepository/observers/index.d.ts +1 -0
- package/dist/userRepository/observers/index.d.ts.map +1 -1
- package/dist/userRepository/relationship/block/observers/getBlockedUsers.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/@types/core/events.ts +1 -0
- package/src/@types/core/payload.ts +5 -0
- package/src/@types/domains/channel.ts +7 -2
- package/src/@types/domains/marker.ts +1 -0
- package/src/categoryRepository/observers/getCategories.ts +4 -4
- package/src/channelRepsitory/api/markAsRead.ts +1 -1
- package/src/channelRepsitory/api/muteChannel.ts +8 -0
- package/src/channelRepsitory/api/tests/muteChannel.test.ts +12 -0
- package/src/channelRepsitory/channelMembership/observers/getMembers.ts +6 -6
- package/src/channelRepsitory/observers/getChannels.ts +5 -5
- package/src/channelRepsitory/observers/tests/getChannels.test.ts +3 -9
- package/src/client/utils/markerSyncEngine.ts +2 -14
- package/src/commentRepository/observers/getComments.ts +5 -5
- package/src/communityRepository/communityMembership/api/index.ts +2 -0
- package/src/communityRepository/{communityModeration/api/test → communityMembership/api/tests}/addMembers.test.ts +1 -1
- package/src/communityRepository/{communityModeration/api/test → communityMembership/api/tests}/removeMembers.test.ts +1 -1
- package/src/communityRepository/communityMembership/index.ts +1 -0
- package/src/communityRepository/communityMembership/observers/getMembers.ts +6 -8
- package/src/communityRepository/communityModeration/api/banMembers.ts +50 -0
- package/src/communityRepository/communityModeration/api/index.ts +3 -2
- package/src/communityRepository/communityModeration/api/test/banMembers.test.ts +70 -0
- package/src/communityRepository/communityModeration/api/test/unbanMembers.test.ts +70 -0
- package/src/communityRepository/communityModeration/api/unbanMembers.ts +50 -0
- package/src/communityRepository/observers/getCommunities.ts +5 -5
- package/src/core/query/filtering.ts +22 -2
- package/src/core/query/sorting.ts +2 -4
- package/src/core/query/tests/filtering.test.ts +6 -0
- package/src/core/query/tests/runQuery.test.ts +3 -3
- package/src/core/transports/mqtt.ts +3 -2
- package/src/feedRepository/api/getCustomRankingGlobalFeed.ts +117 -0
- package/src/feedRepository/api/index.ts +1 -0
- package/src/feedRepository/api/queryGlobalFeed.ts +12 -4
- package/src/feedRepository/api/test/getCustomRankingGlobalFeed.test.ts +130 -0
- package/src/feedRepository/api/test/queryGlobalFeed.test.ts +1 -15
- package/src/fileRepository/api/index.ts +3 -3
- package/src/fileRepository/api/test/uploadFile.test.ts +69 -0
- package/src/fileRepository/api/test/{createImage.test.ts → uploadImage.test.ts} +7 -7
- package/src/fileRepository/api/test/{createVideo.test.ts → uploadVideo.test.ts} +8 -8
- package/src/fileRepository/api/{createFile.ts → uploadFile.ts} +4 -6
- package/src/fileRepository/api/{createImage.ts → uploadImage.ts} +4 -6
- package/src/fileRepository/api/{createVideo.ts → uploadVideo.ts} +5 -7
- package/src/marker/events/index.ts +1 -0
- package/src/marker/events/onFeedlMarkerUpdated.ts +34 -0
- package/src/messageRepository/api/editMessage.ts +100 -0
- package/src/messageRepository/api/flagMessage.ts +40 -0
- package/src/messageRepository/api/index.ts +7 -1
- package/src/messageRepository/api/isMessageFlaggedByMe.ts +30 -0
- package/src/messageRepository/api/markAsDelivered.ts +2 -2
- package/src/messageRepository/api/{deleteMessage.ts → softDeleteMessage.ts} +8 -8
- package/src/messageRepository/api/tests/deleteMessage.test.ts +11 -11
- package/src/messageRepository/api/tests/{updateMessage.test.ts → editMessage.test.ts} +10 -10
- package/src/messageRepository/api/tests/flagMessage.test.ts +87 -0
- package/src/messageRepository/api/tests/unflagMessage.test.ts +87 -0
- package/src/messageRepository/api/unflagMessage.ts +40 -0
- package/src/messageRepository/api/updateMessage.ts +4 -0
- package/src/messageRepository/events/onMessageDeleted.ts +1 -1
- package/src/messageRepository/observers/getMessages.ts +5 -5
- package/src/postRepository/api/deletePost.ts +1 -7
- package/src/postRepository/api/editPost.ts +58 -0
- package/src/postRepository/api/flagPost.ts +38 -0
- package/src/postRepository/api/hardDeletePost.ts +30 -0
- package/src/postRepository/api/index.ts +8 -0
- package/src/postRepository/api/isPostFlaggedByMe.ts +33 -0
- package/src/postRepository/api/softDeletePost.ts +30 -0
- package/src/postRepository/api/unflagPost.ts +39 -0
- package/src/postRepository/api/updatePost.ts +4 -0
- package/src/postRepository/observers/getPosts.ts +5 -5
- package/src/reactionRepository/observers/getReactions.ts +4 -4
- package/src/report/api/createReport.ts +1 -1
- package/src/report/api/tests/createReport.test.ts +2 -62
- package/src/report/api/tests/deleteReport.test.ts +2 -62
- package/src/subChannelRepository/api/startReadingAPI.ts +13 -0
- package/src/subChannelRepository/api/stopReadingAPI.ts +13 -0
- package/src/userRepository/api/flagUser.ts +37 -0
- package/src/userRepository/api/index.ts +4 -0
- package/src/userRepository/api/isUserFlaggedByMe.ts +33 -0
- package/src/userRepository/{relationship/block/api → api}/queryBlockedUsers.ts +3 -2
- package/src/userRepository/api/tests/flagUser.test.ts +81 -0
- package/src/userRepository/{relationship/block/api → api}/tests/queryBlockedUsers.test.ts +1 -1
- package/src/userRepository/api/tests/unflagUser.test.ts +80 -0
- package/src/userRepository/api/unflagUser.ts +37 -0
- package/src/userRepository/observers/getBlockedUsers.ts +104 -0
- package/src/userRepository/observers/getUsers.ts +4 -4
- package/src/userRepository/observers/index.ts +1 -0
- package/src/userRepository/observers/tests/getUsers.test.ts +3 -9
- package/src/userRepository/relationship/block/observers/getBlockedUsers.ts +5 -96
- package/src/userRepository/relationship/follow/observers/getFollowers.ts +4 -4
- package/src/userRepository/relationship/follow/observers/getFollowings.ts +4 -4
- package/dist/communityRepository/communityModeration/api/test/addMembers.test.d.ts.map +0 -1
- package/dist/communityRepository/communityModeration/api/test/removeMembers.test.d.ts.map +0 -1
- package/dist/fileRepository/api/createFile.d.ts.map +0 -1
- package/dist/fileRepository/api/createImage.d.ts.map +0 -1
- package/dist/fileRepository/api/createVideo.d.ts.map +0 -1
- package/dist/fileRepository/api/test/createImage.test.d.ts +0 -2
- package/dist/fileRepository/api/test/createImage.test.d.ts.map +0 -1
- package/dist/fileRepository/api/test/createVideo.test.d.ts +0 -2
- package/dist/fileRepository/api/test/createVideo.test.d.ts.map +0 -1
- package/dist/messageRepository/api/deleteMessage.d.ts.map +0 -1
- package/dist/messageRepository/api/tests/updateMessage.test.d.ts +0 -2
- package/dist/messageRepository/api/tests/updateMessage.test.d.ts.map +0 -1
- package/dist/userRepository/relationship/block/api/queryBlockedUsers.d.ts.map +0 -1
- package/dist/userRepository/relationship/block/api/tests/queryBlockedUsers.test.d.ts.map +0 -1
- /package/dist/communityRepository/{communityModeration → communityMembership}/api/addMembers.d.ts +0 -0
- /package/dist/communityRepository/{communityModeration → communityMembership}/api/removeMembers.d.ts +0 -0
- /package/dist/communityRepository/{communityModeration/api/test → communityMembership/api/tests}/addMembers.test.d.ts +0 -0
- /package/dist/communityRepository/{communityModeration/api/test → communityMembership/api/tests}/removeMembers.test.d.ts +0 -0
- /package/dist/userRepository/{relationship/block/api → api}/tests/queryBlockedUsers.test.d.ts +0 -0
- /package/src/communityRepository/{communityModeration → communityMembership}/api/addMembers.ts +0 -0
- /package/src/communityRepository/{communityModeration → communityMembership}/api/removeMembers.ts +0 -0
|
@@ -1,14 +1,5 @@
|
|
|
1
|
-
import { disableCache
|
|
2
|
-
import {
|
|
3
|
-
client,
|
|
4
|
-
connectClient,
|
|
5
|
-
disconnectClient,
|
|
6
|
-
flaggedUser as unflaggedUser,
|
|
7
|
-
flaggedUserQueryResponse as unflaggedUserQueryResponse,
|
|
8
|
-
} from '~/utils/tests';
|
|
9
|
-
import { ASCApiError } from '~/core/errors';
|
|
10
|
-
|
|
11
|
-
import { onUserUnflagged } from '~/userRepository/events';
|
|
1
|
+
import { disableCache } from '~/cache/api';
|
|
2
|
+
import { client, connectClient, disconnectClient } from '~/utils/tests';
|
|
12
3
|
|
|
13
4
|
import { deleteReport } from '..';
|
|
14
5
|
import REFERENCE_TYPES from '../../constants/referenceTypes';
|
|
@@ -18,48 +9,10 @@ describe('deleteReport', () => {
|
|
|
18
9
|
beforeAll(connectClient);
|
|
19
10
|
afterAll(disconnectClient);
|
|
20
11
|
|
|
21
|
-
// integration_test_id: fddf1d63-98e2-4296-ab3a-4e2b55044f89
|
|
22
|
-
test('it should unflag user with userId', async () => {
|
|
23
|
-
const expected = true;
|
|
24
|
-
client.http.delete = jest.fn().mockResolvedValue(unflaggedUserQueryResponse);
|
|
25
|
-
|
|
26
|
-
const received = await deleteReport('user', unflaggedUser.userId);
|
|
27
|
-
|
|
28
|
-
expect(received).toBe(expected);
|
|
29
|
-
});
|
|
30
|
-
|
|
31
|
-
// integration_test_id: a95a0784-56ce-4b17-ac1b-0f1c50a361ef
|
|
32
|
-
test('it should throw error with 400400 when sending invalid userId', async () => {
|
|
33
|
-
client.http.delete = jest
|
|
34
|
-
.fn()
|
|
35
|
-
.mockRejectedValueOnce(
|
|
36
|
-
new ASCApiError('unauthorized', Amity.ServerError.ITEM_NOT_FOUND, Amity.ErrorLevel.ERROR),
|
|
37
|
-
);
|
|
38
|
-
|
|
39
|
-
await expect(deleteReport('user', unflaggedUser.userId)).rejects.toThrow('400400');
|
|
40
|
-
});
|
|
41
|
-
|
|
42
|
-
test('it should fire event for user', async () => {
|
|
43
|
-
let dispose;
|
|
44
|
-
const expected = unflaggedUser;
|
|
45
|
-
|
|
46
|
-
client.http.delete = jest.fn().mockResolvedValue(unflaggedUserQueryResponse);
|
|
47
|
-
|
|
48
|
-
const callbackPromise = new Promise(resolve => {
|
|
49
|
-
dispose = onUserUnflagged(resolve);
|
|
50
|
-
}).finally(dispose);
|
|
51
|
-
|
|
52
|
-
const recieved = await deleteReport('user', unflaggedUser.userId);
|
|
53
|
-
|
|
54
|
-
expect(recieved).toBe(true);
|
|
55
|
-
await expect(callbackPromise).resolves.toEqual(expect.objectContaining(expected));
|
|
56
|
-
});
|
|
57
|
-
|
|
58
12
|
test.todo('it should fire event for unflagging message');
|
|
59
13
|
test.todo('it should fire event for unflagging delete');
|
|
60
14
|
|
|
61
15
|
const tests: [keyof typeof REFERENCE_TYPES, string, string][] = [
|
|
62
|
-
['user', 'userId', `/api/v4/me/flags/${encodeURIComponent('userId')}`],
|
|
63
16
|
['post', 'postId', `/api/v3/posts/${encodeURIComponent('postId')}/unflag`],
|
|
64
17
|
['message', 'messageId', `/api/v5/messages/${encodeURIComponent('messageId')}/flags`],
|
|
65
18
|
];
|
|
@@ -78,17 +31,4 @@ describe('deleteReport', () => {
|
|
|
78
31
|
expect(received).toBe(expected);
|
|
79
32
|
},
|
|
80
33
|
);
|
|
81
|
-
|
|
82
|
-
test('it should add data to cache', async () => {
|
|
83
|
-
enableCache();
|
|
84
|
-
const expected = unflaggedUser;
|
|
85
|
-
client.http.delete = jest.fn().mockResolvedValue(unflaggedUserQueryResponse);
|
|
86
|
-
|
|
87
|
-
await deleteReport('user', unflaggedUser.userId);
|
|
88
|
-
const recieved = pullFromCache(['user', 'get', unflaggedUser.userId]);
|
|
89
|
-
|
|
90
|
-
expect(recieved?.data).toBe(expected);
|
|
91
|
-
|
|
92
|
-
disableCache();
|
|
93
|
-
});
|
|
94
34
|
});
|
|
@@ -1,5 +1,11 @@
|
|
|
1
1
|
import { ingestInCache } from '~/cache/api/ingestInCache';
|
|
2
2
|
import { getActiveClient } from '~/client/api';
|
|
3
|
+
import {
|
|
4
|
+
channelMarkerReducer,
|
|
5
|
+
feedMarkerReducer,
|
|
6
|
+
subChannelMarkerReducer,
|
|
7
|
+
userMarkerReducer,
|
|
8
|
+
} from '~/marker/utils/markerDispatcher';
|
|
3
9
|
|
|
4
10
|
/**
|
|
5
11
|
* ```js
|
|
@@ -26,8 +32,15 @@ export const startReadingAPI = async (
|
|
|
26
32
|
`/api/v1/markers/message-feeds/${messageFeedId}/start-reading`,
|
|
27
33
|
);
|
|
28
34
|
|
|
35
|
+
const { userEntityMarkers, userFeedMarkers, feedMarkers, userMarkers } = payload;
|
|
36
|
+
|
|
29
37
|
const cachedAt = client.cache && Date.now();
|
|
30
38
|
if (client.cache) ingestInCache(payload as Amity.StartReadingPayload, { cachedAt });
|
|
31
39
|
|
|
40
|
+
feedMarkerReducer('local.feedMarker.fetched', feedMarkers);
|
|
41
|
+
channelMarkerReducer('local.channelMarker.fetched', userEntityMarkers);
|
|
42
|
+
subChannelMarkerReducer('local.subChannelMarker.fetched', userFeedMarkers);
|
|
43
|
+
userMarkerReducer('local.userMarker.fetched', userMarkers);
|
|
44
|
+
|
|
32
45
|
return true;
|
|
33
46
|
};
|
|
@@ -1,5 +1,11 @@
|
|
|
1
1
|
import { ingestInCache } from '~/cache/api/ingestInCache';
|
|
2
2
|
import { getActiveClient } from '~/client/api';
|
|
3
|
+
import {
|
|
4
|
+
channelMarkerReducer,
|
|
5
|
+
feedMarkerReducer,
|
|
6
|
+
subChannelMarkerReducer,
|
|
7
|
+
userMarkerReducer,
|
|
8
|
+
} from '~/marker/utils/markerDispatcher';
|
|
3
9
|
|
|
4
10
|
/**
|
|
5
11
|
* ```js
|
|
@@ -26,8 +32,15 @@ export const stopReadingAPI = async (
|
|
|
26
32
|
`/api/v1/markers/message-feeds/${messageFeedId}/stop-reading`,
|
|
27
33
|
);
|
|
28
34
|
|
|
35
|
+
const { userEntityMarkers, userFeedMarkers, feedMarkers, userMarkers } = payload;
|
|
36
|
+
|
|
29
37
|
const cachedAt = client.cache && Date.now();
|
|
30
38
|
if (client.cache) ingestInCache(payload as Amity.StopReadingPayload, { cachedAt });
|
|
31
39
|
|
|
40
|
+
feedMarkerReducer('local.feedMarker.fetched', feedMarkers);
|
|
41
|
+
channelMarkerReducer('local.channelMarker.fetched', userEntityMarkers);
|
|
42
|
+
subChannelMarkerReducer('local.subChannelMarker.fetched', userFeedMarkers);
|
|
43
|
+
userMarkerReducer('local.userMarker.fetched', userMarkers);
|
|
44
|
+
|
|
32
45
|
return true;
|
|
33
46
|
};
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { getActiveClient } from '~/client/api/activeClient';
|
|
2
|
+
|
|
3
|
+
import { ingestInCache } from '~/cache/api/ingestInCache';
|
|
4
|
+
import { fireEvent } from '~/core/events';
|
|
5
|
+
|
|
6
|
+
/* begin_public_function
|
|
7
|
+
id: user.flag
|
|
8
|
+
*/
|
|
9
|
+
/**
|
|
10
|
+
* ```js
|
|
11
|
+
* import { UserRepository } from '@amityco/ts-sdk'
|
|
12
|
+
* const flagged = await UserRepository.flagUser('userId')
|
|
13
|
+
* ```
|
|
14
|
+
*
|
|
15
|
+
* @param userId The ID of the user to add a be flagged
|
|
16
|
+
* @returns the created report result
|
|
17
|
+
*
|
|
18
|
+
* @category User API
|
|
19
|
+
* @async
|
|
20
|
+
* */
|
|
21
|
+
export const flagUser = async (userId: Amity.User['userId']): Promise<boolean> => {
|
|
22
|
+
const client = getActiveClient();
|
|
23
|
+
client.log('user/flagUser', userId);
|
|
24
|
+
|
|
25
|
+
const { data: payload } = await client.http.post<Amity.UserPayload>(
|
|
26
|
+
`api/v4/me/flags/${encodeURIComponent(userId)}`,
|
|
27
|
+
);
|
|
28
|
+
|
|
29
|
+
if (client.cache) {
|
|
30
|
+
ingestInCache(payload);
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
fireEvent('user.flagged', payload);
|
|
34
|
+
|
|
35
|
+
return !!payload;
|
|
36
|
+
};
|
|
37
|
+
/* end_public_function */
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { getActiveClient } from '~/client/api/activeClient';
|
|
2
|
+
import { synchronousWSCall } from '~/core/transports';
|
|
3
|
+
|
|
4
|
+
/* begin_public_function
|
|
5
|
+
id: user.check_flag_by_me
|
|
6
|
+
*/
|
|
7
|
+
/**
|
|
8
|
+
* ```js
|
|
9
|
+
* import { UserRepository } from '@amityco/ts-sdk'
|
|
10
|
+
* const isFlagged = await UserRepository.isUserFlaggedByMe('post', postId)
|
|
11
|
+
* ```
|
|
12
|
+
*
|
|
13
|
+
* @param userId The ID of the thing to check a report to.
|
|
14
|
+
* @returns `true` if the report is created by me, `false` if doesn't.
|
|
15
|
+
*
|
|
16
|
+
* @category Report API
|
|
17
|
+
* @async
|
|
18
|
+
* */
|
|
19
|
+
export const isUserFlaggedByMe = async (userId: Amity.User['userId']): Promise<boolean> => {
|
|
20
|
+
const client = getActiveClient();
|
|
21
|
+
client.log('user/isUserFlaggedByMe', userId);
|
|
22
|
+
|
|
23
|
+
const { result, isFlagByMe } =
|
|
24
|
+
(await synchronousWSCall<{
|
|
25
|
+
result?: boolean;
|
|
26
|
+
isFlagByMe?: boolean;
|
|
27
|
+
}>(client, 'user.isFlagByMe', {
|
|
28
|
+
userId,
|
|
29
|
+
})) ?? {};
|
|
30
|
+
|
|
31
|
+
return result ?? isFlagByMe ?? false;
|
|
32
|
+
};
|
|
33
|
+
/* end_public_function */
|
|
@@ -6,8 +6,8 @@ import { toPageRaw } from '~/core/query';
|
|
|
6
6
|
|
|
7
7
|
/**
|
|
8
8
|
* ```js
|
|
9
|
-
* import {
|
|
10
|
-
* const { data: users, prevPage, nextPage, total } = await queryBlockedUsers({ page: Amity.PageRaw, limit: number })
|
|
9
|
+
* import { UserRepository } from '@amityco/ts-sdk'
|
|
10
|
+
* const { data: users, prevPage, nextPage, total } = await UserRepository.queryBlockedUsers({ page: Amity.PageRaw, limit: number })
|
|
11
11
|
* ```
|
|
12
12
|
*
|
|
13
13
|
* @param query The query parameters
|
|
@@ -16,6 +16,7 @@ import { toPageRaw } from '~/core/query';
|
|
|
16
16
|
* @category Block API
|
|
17
17
|
* @async
|
|
18
18
|
*/
|
|
19
|
+
|
|
19
20
|
export const queryBlockedUsers = async (
|
|
20
21
|
query?: Amity.QueryBlockedUser,
|
|
21
22
|
): Promise<
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
import { disableCache, enableCache, pullFromCache } from '~/cache/api';
|
|
2
|
+
import {
|
|
3
|
+
client,
|
|
4
|
+
connectClient,
|
|
5
|
+
disconnectClient,
|
|
6
|
+
flaggedUser,
|
|
7
|
+
flaggedUserQueryResponse,
|
|
8
|
+
} from '~/utils/tests';
|
|
9
|
+
import { ASCApiError } from '~/core/errors';
|
|
10
|
+
import { fireEvent } from '~/core/events';
|
|
11
|
+
|
|
12
|
+
import { flagUser } from '..';
|
|
13
|
+
|
|
14
|
+
jest.mock('~/core/events', () => ({
|
|
15
|
+
__esModule: true,
|
|
16
|
+
...jest.requireActual('~/core/events'),
|
|
17
|
+
fireEvent: jest.fn(),
|
|
18
|
+
}));
|
|
19
|
+
|
|
20
|
+
describe('flagUser', () => {
|
|
21
|
+
beforeEach(disableCache);
|
|
22
|
+
beforeAll(connectClient);
|
|
23
|
+
afterAll(disconnectClient);
|
|
24
|
+
|
|
25
|
+
// integration_test_id: ca4a760f-4342-4a99-9f3c-6c17cd205ca6
|
|
26
|
+
test('it should flag user with userId', async () => {
|
|
27
|
+
const expected = true;
|
|
28
|
+
client.http.post = jest.fn().mockResolvedValue(flaggedUserQueryResponse);
|
|
29
|
+
|
|
30
|
+
const received = await flagUser(flaggedUser.userId);
|
|
31
|
+
|
|
32
|
+
expect(received).toBe(expected);
|
|
33
|
+
});
|
|
34
|
+
|
|
35
|
+
// integration_test_id: e8d0f02c-3558-488f-bdae-e70835d8cefb
|
|
36
|
+
test('it should throw error with 400400 when sending invalid userId', async () => {
|
|
37
|
+
client.http.post = jest
|
|
38
|
+
.fn()
|
|
39
|
+
.mockRejectedValueOnce(
|
|
40
|
+
new ASCApiError('unauthorized', Amity.ServerError.ITEM_NOT_FOUND, Amity.ErrorLevel.ERROR),
|
|
41
|
+
);
|
|
42
|
+
|
|
43
|
+
await expect(flagUser(flaggedUser.userId)).rejects.toThrow('400400');
|
|
44
|
+
});
|
|
45
|
+
|
|
46
|
+
test('it should call fire event method', async () => {
|
|
47
|
+
client.http.post = jest.fn().mockResolvedValue(flaggedUserQueryResponse);
|
|
48
|
+
|
|
49
|
+
const recieved = await flagUser(flaggedUser.userId);
|
|
50
|
+
const [recievedMqttString] = (fireEvent as jest.Mock).mock.lastCall;
|
|
51
|
+
|
|
52
|
+
expect(recieved).toBe(true);
|
|
53
|
+
expect(recievedMqttString).toBe('user.flagged');
|
|
54
|
+
});
|
|
55
|
+
|
|
56
|
+
test('it should call the appropriate api', async () => {
|
|
57
|
+
const apimock = jest.fn();
|
|
58
|
+
const expected = `api/v4/me/flags/${encodeURIComponent('userId')}`;
|
|
59
|
+
|
|
60
|
+
client.http.post = apimock.mockResolvedValue({ data: {} });
|
|
61
|
+
|
|
62
|
+
await flagUser('userId');
|
|
63
|
+
|
|
64
|
+
const received = apimock.mock.lastCall[0];
|
|
65
|
+
|
|
66
|
+
expect(received).toBe(expected);
|
|
67
|
+
});
|
|
68
|
+
|
|
69
|
+
test('it should add data to cache', async () => {
|
|
70
|
+
enableCache();
|
|
71
|
+
const expected = flaggedUser;
|
|
72
|
+
client.http.post = jest.fn().mockResolvedValue(flaggedUserQueryResponse);
|
|
73
|
+
|
|
74
|
+
await flagUser(flaggedUser.userId);
|
|
75
|
+
const recieved = pullFromCache(['user', 'get', flaggedUser.userId]);
|
|
76
|
+
|
|
77
|
+
expect(recieved?.data).toBe(expected);
|
|
78
|
+
|
|
79
|
+
disableCache();
|
|
80
|
+
});
|
|
81
|
+
});
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { client, user12, user13 } from '~/utils/tests';
|
|
2
|
-
import { queryBlockedUsers } from '~/userRepository/
|
|
2
|
+
import { queryBlockedUsers } from '~/userRepository/api/queryBlockedUsers';
|
|
3
3
|
import { disableCache, enableCache } from '~/cache/api';
|
|
4
4
|
import { generateBlockedUsers } from '~/utils/tests/dummy/block';
|
|
5
5
|
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
import { disableCache, enableCache, pullFromCache } from '~/cache/api';
|
|
2
|
+
import {
|
|
3
|
+
client,
|
|
4
|
+
connectClient,
|
|
5
|
+
disconnectClient,
|
|
6
|
+
flaggedUser as unflaggedUser,
|
|
7
|
+
flaggedUserQueryResponse as unflaggedUserQueryResponse,
|
|
8
|
+
} from '~/utils/tests';
|
|
9
|
+
import { ASCApiError } from '~/core/errors';
|
|
10
|
+
import { fireEvent } from '~/core/events';
|
|
11
|
+
|
|
12
|
+
import { unflagUser } from '..';
|
|
13
|
+
|
|
14
|
+
jest.mock('~/core/events', () => ({
|
|
15
|
+
__esModule: true,
|
|
16
|
+
...jest.requireActual('~/core/events'),
|
|
17
|
+
fireEvent: jest.fn(),
|
|
18
|
+
}));
|
|
19
|
+
|
|
20
|
+
describe('unflagUser', () => {
|
|
21
|
+
beforeEach(disableCache);
|
|
22
|
+
beforeAll(connectClient);
|
|
23
|
+
afterAll(disconnectClient);
|
|
24
|
+
|
|
25
|
+
// integration_test_id: fddf1d63-98e2-4296-ab3a-4e2b55044f89
|
|
26
|
+
test('it should unflag user with userId', async () => {
|
|
27
|
+
const expected = true;
|
|
28
|
+
client.http.delete = jest.fn().mockResolvedValue(unflaggedUserQueryResponse);
|
|
29
|
+
|
|
30
|
+
const received = await unflagUser(unflaggedUser.userId);
|
|
31
|
+
|
|
32
|
+
expect(received).toBe(expected);
|
|
33
|
+
});
|
|
34
|
+
|
|
35
|
+
// integration_test_id: a95a0784-56ce-4b17-ac1b-0f1c50a361ef
|
|
36
|
+
test('it should throw error with 400400 when sending invalid userId', async () => {
|
|
37
|
+
client.http.delete = jest
|
|
38
|
+
.fn()
|
|
39
|
+
.mockRejectedValueOnce(
|
|
40
|
+
new ASCApiError('unauthorized', Amity.ServerError.ITEM_NOT_FOUND, Amity.ErrorLevel.ERROR),
|
|
41
|
+
);
|
|
42
|
+
|
|
43
|
+
await expect(unflagUser(unflaggedUser.userId)).rejects.toThrow('400400');
|
|
44
|
+
});
|
|
45
|
+
|
|
46
|
+
test('it should fire event for user', async () => {
|
|
47
|
+
client.http.delete = jest.fn().mockResolvedValue(unflaggedUserQueryResponse);
|
|
48
|
+
|
|
49
|
+
const recieved = await unflagUser(unflaggedUser.userId);
|
|
50
|
+
const [recievedMqttString] = (fireEvent as jest.Mock).mock.lastCall;
|
|
51
|
+
|
|
52
|
+
expect(recieved).toBe(true);
|
|
53
|
+
expect(recievedMqttString).toBe('user.unflagged');
|
|
54
|
+
});
|
|
55
|
+
|
|
56
|
+
test('it should call the appropriate api', async () => {
|
|
57
|
+
const apimock = jest.fn();
|
|
58
|
+
const expected = `/api/v4/me/flags/${encodeURIComponent('userId')}`;
|
|
59
|
+
|
|
60
|
+
client.http.delete = apimock.mockResolvedValue({ data: {} });
|
|
61
|
+
|
|
62
|
+
await unflagUser('userId');
|
|
63
|
+
const received = apimock.mock.lastCall[0];
|
|
64
|
+
|
|
65
|
+
expect(received).toBe(expected);
|
|
66
|
+
});
|
|
67
|
+
|
|
68
|
+
test('it should add data to cache', async () => {
|
|
69
|
+
enableCache();
|
|
70
|
+
const expected = unflaggedUser;
|
|
71
|
+
client.http.delete = jest.fn().mockResolvedValue(unflaggedUserQueryResponse);
|
|
72
|
+
|
|
73
|
+
await unflagUser(unflaggedUser.userId);
|
|
74
|
+
const recieved = pullFromCache(['user', 'get', unflaggedUser.userId]);
|
|
75
|
+
|
|
76
|
+
expect(recieved?.data).toBe(expected);
|
|
77
|
+
|
|
78
|
+
disableCache();
|
|
79
|
+
});
|
|
80
|
+
});
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { getActiveClient } from '~/client/api/activeClient';
|
|
2
|
+
|
|
3
|
+
import { ingestInCache } from '~/cache/api/ingestInCache';
|
|
4
|
+
import { fireEvent } from '~/core/events';
|
|
5
|
+
|
|
6
|
+
/* begin_public_function
|
|
7
|
+
id: user.unflag
|
|
8
|
+
*/
|
|
9
|
+
/**
|
|
10
|
+
* ```js
|
|
11
|
+
* import { UserRepository } from '@amityco/ts-sdk'
|
|
12
|
+
* const unflagged = await UserRepository.unflagUser('post', postId)
|
|
13
|
+
* ```
|
|
14
|
+
*
|
|
15
|
+
* @param userId The ID of the user to unflag
|
|
16
|
+
* @returns the deleted report result
|
|
17
|
+
*
|
|
18
|
+
* @category User API
|
|
19
|
+
* @async
|
|
20
|
+
* */
|
|
21
|
+
export const unflagUser = async (userId: Amity.User['userId']): Promise<boolean> => {
|
|
22
|
+
const client = getActiveClient();
|
|
23
|
+
client.log('user/unflag', userId);
|
|
24
|
+
|
|
25
|
+
const { data: payload } = await client.http.delete<Amity.UserPayload>(
|
|
26
|
+
`/api/v4/me/flags/${encodeURIComponent(userId)}`,
|
|
27
|
+
);
|
|
28
|
+
|
|
29
|
+
if (client.cache) {
|
|
30
|
+
ingestInCache(payload);
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
fireEvent('user.unflagged', payload);
|
|
34
|
+
|
|
35
|
+
return !!payload;
|
|
36
|
+
};
|
|
37
|
+
/* end_public_function */
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
/* eslint-disable no-use-before-define */
|
|
2
|
+
import { getActiveClient } from '~/client';
|
|
3
|
+
import {
|
|
4
|
+
COLLECTION_DEFAULT_CACHING_POLICY,
|
|
5
|
+
COLLECTION_DEFAULT_PAGINATION_LIMIT,
|
|
6
|
+
ENABLE_CACHE_MESSAGE,
|
|
7
|
+
} from '~/utils/constants';
|
|
8
|
+
import { dropFromCache, pullFromCache, pushToCache } from '~/cache/api';
|
|
9
|
+
import { createQuery, queryOptions, runQuery, toToken } from '~/core/query';
|
|
10
|
+
import { CACHE_SHORTEN_LIFESPAN } from '~/cache/utils';
|
|
11
|
+
import { getResolver } from '~/core/model';
|
|
12
|
+
import { queryBlockedUsers } from '../api/queryBlockedUsers';
|
|
13
|
+
|
|
14
|
+
export const getBlockedUsers = (
|
|
15
|
+
params: Amity.BlockedUsersLiveCollection,
|
|
16
|
+
callback: Amity.LiveCollectionCallback<Amity.User>,
|
|
17
|
+
config?: Amity.LiveCollectionConfig,
|
|
18
|
+
) => {
|
|
19
|
+
const { log, cache } = getActiveClient();
|
|
20
|
+
|
|
21
|
+
if (!cache) {
|
|
22
|
+
console.log(ENABLE_CACHE_MESSAGE);
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
const timestamp = Date.now();
|
|
26
|
+
log(`getBlockedUsers(tmpid: ${timestamp}) > listen`);
|
|
27
|
+
|
|
28
|
+
const { limit: queryLimit, token } = params;
|
|
29
|
+
|
|
30
|
+
const limit = queryLimit ?? COLLECTION_DEFAULT_PAGINATION_LIMIT;
|
|
31
|
+
const { policy = COLLECTION_DEFAULT_CACHING_POLICY } = config ?? {};
|
|
32
|
+
|
|
33
|
+
const disposers: Amity.Unsubscriber[] = [];
|
|
34
|
+
const cacheKey = ['blockedUsers', 'collection', {}];
|
|
35
|
+
|
|
36
|
+
const responder = (data: Amity.BlockedUserLiveCollectionCache) => {
|
|
37
|
+
const users: Amity.User[] =
|
|
38
|
+
data.data
|
|
39
|
+
.map(userId => pullFromCache<Amity.User>(['user', 'get', userId])!)
|
|
40
|
+
.filter(Boolean)
|
|
41
|
+
.map(({ data }) => data) ?? [];
|
|
42
|
+
|
|
43
|
+
callback({
|
|
44
|
+
onNextPage: onFetch,
|
|
45
|
+
data: users,
|
|
46
|
+
hasNextPage: !!data.params?.page,
|
|
47
|
+
loading: data.loading,
|
|
48
|
+
error: data.error,
|
|
49
|
+
});
|
|
50
|
+
};
|
|
51
|
+
|
|
52
|
+
/*
|
|
53
|
+
* const realtimeRouter = () => {
|
|
54
|
+
* @TODO: At the time of creating this method category does not have any
|
|
55
|
+
* observers
|
|
56
|
+
*};
|
|
57
|
+
*/
|
|
58
|
+
|
|
59
|
+
const onFetch = (initial = false) => {
|
|
60
|
+
const collection = pullFromCache<Amity.BlockedUserLiveCollectionCache>(cacheKey)?.data;
|
|
61
|
+
|
|
62
|
+
const users = collection?.data ?? [];
|
|
63
|
+
|
|
64
|
+
if (!initial && users.length > 0 && !collection?.params.page) return;
|
|
65
|
+
|
|
66
|
+
const query = createQuery(queryBlockedUsers, {
|
|
67
|
+
limit,
|
|
68
|
+
token: toToken(!initial ? collection?.params.page : undefined, 'afterbeforeraw'),
|
|
69
|
+
});
|
|
70
|
+
|
|
71
|
+
runQuery(
|
|
72
|
+
query,
|
|
73
|
+
// @ts-ignore
|
|
74
|
+
({ data: result, loading, error, nextPage: page, total }) => {
|
|
75
|
+
const data = {
|
|
76
|
+
loading,
|
|
77
|
+
error,
|
|
78
|
+
params: { page, total },
|
|
79
|
+
data: users,
|
|
80
|
+
};
|
|
81
|
+
|
|
82
|
+
if (result) {
|
|
83
|
+
data.data = [...new Set([...users, ...result.map(getResolver('user'))])];
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
pushToCache(cacheKey, data);
|
|
87
|
+
responder(data);
|
|
88
|
+
},
|
|
89
|
+
queryOptions(policy, CACHE_SHORTEN_LIFESPAN),
|
|
90
|
+
);
|
|
91
|
+
};
|
|
92
|
+
|
|
93
|
+
disposers.push(() => {
|
|
94
|
+
// @TODO -> update once observers added
|
|
95
|
+
});
|
|
96
|
+
|
|
97
|
+
onFetch(true);
|
|
98
|
+
|
|
99
|
+
return () => {
|
|
100
|
+
log(`getCategories(tmpid: ${timestamp}) > dispose`);
|
|
101
|
+
disposers.forEach(fn => fn());
|
|
102
|
+
dropFromCache(cacheKey);
|
|
103
|
+
};
|
|
104
|
+
};
|
|
@@ -114,16 +114,16 @@ export const getUsers = (
|
|
|
114
114
|
responder(collection);
|
|
115
115
|
};
|
|
116
116
|
|
|
117
|
-
const onFetch = () => {
|
|
117
|
+
const onFetch = (initial = false) => {
|
|
118
118
|
const collection = pullFromCache<Amity.UserLiveCollectionCache>(cacheKey)?.data;
|
|
119
119
|
|
|
120
120
|
const users = collection?.data ?? [];
|
|
121
121
|
|
|
122
|
-
if (users.length > 0 && !collection?.params.page) return;
|
|
122
|
+
if (!initial && users.length > 0 && !collection?.params.page) return;
|
|
123
123
|
|
|
124
124
|
const query = createQuery(queryUsers, {
|
|
125
125
|
...queryParams,
|
|
126
|
-
page: collection?.params.page ?? { limit },
|
|
126
|
+
page: (!initial ? collection?.params.page : undefined) ?? { limit },
|
|
127
127
|
});
|
|
128
128
|
|
|
129
129
|
runQuery(
|
|
@@ -156,7 +156,7 @@ export const getUsers = (
|
|
|
156
156
|
onUserFlagCleared(realtimeRouter('onFlagCleared')),
|
|
157
157
|
);
|
|
158
158
|
|
|
159
|
-
onFetch();
|
|
159
|
+
onFetch(true);
|
|
160
160
|
|
|
161
161
|
return () => {
|
|
162
162
|
log(`liveUsers(tmpid: ${timestamp}) > dispose`);
|
|
@@ -65,17 +65,11 @@ describe('getUsers', () => {
|
|
|
65
65
|
getUsers(params, callback);
|
|
66
66
|
await pause();
|
|
67
67
|
|
|
68
|
-
|
|
68
|
+
// The second `getUsers` call fetches data from the cache,
|
|
69
|
+
// so there is no loading state and the callback only fires once.
|
|
70
|
+
expect(callback).toHaveBeenCalledTimes(1);
|
|
69
71
|
expect(callback).toHaveBeenNthCalledWith(
|
|
70
72
|
1,
|
|
71
|
-
expect.objectContaining(
|
|
72
|
-
getSnapshot({
|
|
73
|
-
data: payload.users,
|
|
74
|
-
}),
|
|
75
|
-
),
|
|
76
|
-
);
|
|
77
|
-
expect(callback).toHaveBeenNthCalledWith(
|
|
78
|
-
2,
|
|
79
73
|
expect.objectContaining(
|
|
80
74
|
getSnapshot({
|
|
81
75
|
data: payload.users,
|