-
-
Notifications
You must be signed in to change notification settings - Fork 4.8k
Expand file tree
/
Copy pathuseAssignIssueMutation.spec.tsx
More file actions
94 lines (81 loc) · 2.87 KB
/
Copy pathuseAssignIssueMutation.spec.tsx
File metadata and controls
94 lines (81 loc) · 2.87 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
import {ActorFixture} from 'sentry-fixture/actor';
import {GroupFixture} from 'sentry-fixture/group';
import {OrganizationFixture} from 'sentry-fixture/organization';
import {act, renderHookWithProviders, waitFor} from 'sentry-test/reactTestingLibrary';
import {GroupStore} from 'sentry/stores/groupStore';
import {useAssignIssueMutation} from 'sentry/views/issueDetails/useAssignIssueMutation';
import {useGroup} from 'sentry/views/issueDetails/useGroup';
describe('useAssignIssueMutation', () => {
const organization = OrganizationFixture();
beforeEach(() => {
MockApiClient.clearMockResponses();
GroupStore.reset();
});
it('assigns an issue', async () => {
const group = GroupFixture({id: '1'});
const assignee = ActorFixture({id: '2', type: 'user'});
const assignRequest = MockApiClient.addMockResponse({
method: 'PUT',
url: `/organizations/${organization.slug}/issues/${group.id}/`,
body: {...group, assignedTo: assignee},
});
const {result} = renderHookWithProviders(useAssignIssueMutation, {organization});
await act(async () => {
await result.current.mutateAsync({
actor: assignee,
assignedBy: 'assignee_selector',
groupId: group.id,
orgSlug: organization.slug,
});
});
expect(assignRequest).toHaveBeenCalledWith(
`/organizations/${organization.slug}/issues/${group.id}/`,
expect.objectContaining({
method: 'PUT',
data: {assignedTo: `user:${assignee.id}`, assignedBy: 'assignee_selector'},
})
);
});
it.each([
{
name: 'assignment',
assignedTo: ActorFixture({id: '2', type: 'user'}),
},
{
name: 'unassignment',
assignedTo: null,
},
])('invalidates the group query after an $name', async ({assignedTo}) => {
const group = GroupFixture({id: '1', activity: []});
const response = {...group, assignedTo};
GroupStore.add([group]);
const assignRequest = MockApiClient.addMockResponse({
method: 'PUT',
url: `/organizations/${organization.slug}/issues/${group.id}/`,
body: response,
});
const groupRequest = MockApiClient.addMockResponse({
method: 'GET',
url: `/organizations/${organization.slug}/issues/${group.id}/`,
body: group,
});
const {result} = renderHookWithProviders(
() => {
useGroup({groupId: group.id});
return useAssignIssueMutation();
},
{organization}
);
await waitFor(() => expect(groupRequest).toHaveBeenCalledTimes(1));
await act(async () => {
await result.current.mutateAsync({
actor: assignedTo,
groupId: group.id,
orgSlug: organization.slug,
});
});
expect(assignRequest).toHaveBeenCalledTimes(1);
await waitFor(() => expect(groupRequest).toHaveBeenCalledTimes(2));
expect(GroupStore.get(group.id)?.assignedTo).toEqual(assignedTo);
});
});