@amityco/ts-sdk-react-native
Version:
Amity Social Cloud Typescript SDK
120 lines (112 loc) • 4.12 kB
text/typescript
import { createComment } from '../createComment';
import { updateComment } from '../updateComment';
import { getActiveClient } from '~/client/api';
import {
client,
connectClient,
disconnectClient,
comment11,
imageComment11,
textImageComment11,
textMentionComment11,
imageCommentResponse,
textCommentResponse,
textImageCommentResponse,
textMentionCommentResponse,
imageCommentRequestPayload,
textCommentRequestPayload,
textCommentWithMentionRequestPayload,
textImageCommentRequestPayload,
} from '~/utils/tests';
import { ASCApiError } from '~/core/errors';
import { LinkedObject } from '~/utils/linkedObject';
describe('updateComment', () => {
beforeAll(connectClient);
afterAll(disconnectClient);
// functional and logic test
[
{
// integration_test_id: 1f0c74da-863e-44eb-acf1-3de57b1a0e79
title: 'update comment with valid data and return a new data',
mockRequest: textCommentResponse,
mockFunction: textCommentRequestPayload,
expectResult: comment11,
extraCase: [],
},
{
// integration_test_id: 72550ea2-2943-4708-bc36-dd2b4fcf44b7
title: 'update text comment with mention and returns the new valid comment',
mockRequest: textMentionCommentResponse,
mockFunction: textCommentWithMentionRequestPayload,
expectResult: textMentionComment11,
extraCase: [],
},
{
// integration_test_id: 9df2ff6c-81b7-4bdd-bcd2-33d9752735ed
title: 'update an image + text comment and returns the new valid comment',
mockRequest: textImageCommentResponse,
mockFunction: textImageCommentRequestPayload,
expectResult: textImageComment11,
extraCase: [],
},
{
// integration_test_id: 75c77684-09f3-442e-8089-6d37e2182a65
title: 'add image to existing comment and returns the new valid comment',
mockRequest: textImageCommentResponse,
mockFunction: textImageCommentRequestPayload,
expectResult: textImageComment11,
extraCase: [],
},
{
// integration_test_id: b50d7783-ab5e-4473-be3b-08ffe8b5142a
title: 'remove image from existing comment and returns the new valid comment',
mockRequest: textCommentResponse,
mockFunction: textCommentRequestPayload,
expectResult: comment11,
extraCase: [{ attachments: [] }],
},
{
// integration_test_id: f31daa63-7214-400a-a7a1-d9b00d37137e
title: 'remove text from existing media comment and returns the new valid comment',
mockRequest: imageCommentResponse,
mockFunction: imageCommentRequestPayload,
expectResult: imageComment11,
extraCase: [{ data: { text: '' } }],
},
].forEach(({ title, mockRequest, mockFunction, expectResult, extraCase }) =>
it(title, async () => {
client.http.put = jest.fn().mockResolvedValueOnce(mockRequest);
const newComment = await updateComment(comment11.commentId, mockFunction);
expect(getActiveClient().http.put).toHaveBeenCalledWith(
`/api/v3/comments/${comment11.commentId}`,
mockFunction,
);
expect(newComment.data).toEqual(expectResult);
extraCase.forEach(value => {
expect(newComment.data).toEqual(expect.objectContaining(value));
});
}),
);
// Failed case
[
{
// integration_test_id: f2c24783-733e-4a4a-90c4-b518a8d584a1
title: 'edit text comment with invalid comment_id and returns 400400 error',
errorCode: Amity.ServerError.ITEM_NOT_FOUND,
payload: textCommentRequestPayload,
},
{
// integration_test_id: 2f556a4c-2148-4d59-b07e-f415d7c8928c
title: 'edit text comment which not own by current user and returns 400301 error',
errorCode: Amity.ServerError.PERMISSION_DENIED,
payload: textCommentRequestPayload,
},
].forEach(({ title, errorCode, payload }) =>
it(title, async () => {
client.http.put = jest
.fn()
.mockRejectedValueOnce(new ASCApiError('not found!', errorCode, Amity.ErrorLevel.ERROR));
await expect(createComment(payload)).rejects.toThrow();
}),
);
});