Skip to content

Commit

Permalink
Add test for dynamicReassign method
Browse files Browse the repository at this point in the history
  • Loading branch information
sjwmoveon committed May 3, 2024
1 parent 217d23a commit 4be13a6
Show file tree
Hide file tree
Showing 4 changed files with 105 additions and 2 deletions.
102 changes: 102 additions & 0 deletions __test__/server/api/campaign/campaign.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,7 @@ import {
sleep,
startCampaign
} from "../../../test_helpers";
import { dynamicReassignMutation } from "../../../../src/containers/AssignReplies";

let testAdminUser;
let testInvite;
Expand Down Expand Up @@ -828,6 +829,8 @@ describe("Reassignments", () => {
},
testTexterUser2
);
// TEXTER 1 (60 needsMessage, 2 needsResponse, 4 messaged)
// TEXTER 2 (25 needsMessage, 3 convo, 1 messaged)
expect(texterCampaignDataResults.data.assignment.contacts.length).toEqual(
2
);
Expand All @@ -840,6 +843,105 @@ describe("Reassignments", () => {
expect(texterCampaignDataResults2.data.assignment.allContactsCount).toEqual(
29
);
await runGql(
dynamicReassignMutation,
{
organizationUuid: testCampaign.joinToken,
campaignId: testCampaign.id,
},
testTexterUser2
);
// TEXTER 1 (60 needsMessage, 4 messaged)
// TEXTER 2 (25 needsMessage, 2 needsResponse, 3 convo, 1 messaged)
texterCampaignDataResults = await runGql(
TexterTodoQuery,
{
contactsFilter: {
messageStatus: "needsResponse",
isOptedOut: false,
validTimezone: true
},
assignmentId,
organizationId
},
testTexterUser
);

texterCampaignDataResults2 = await runGql(
TexterTodoQuery,
{
contactsFilter: {
messageStatus: "needsResponse",
isOptedOut: false,
validTimezone: true
},
assignmentId: assignmentId2,
organizationId
},
testTexterUser2
);
expect(texterCampaignDataResults.data.assignment.contacts.length).toEqual(
2
);
expect(texterCampaignDataResults.data.assignment.allContactsCount).toEqual(
66
);
expect(texterCampaignDataResults2.data.assignment.contacts.length).toEqual(
0
);
expect(texterCampaignDataResults2.data.assignment.allContactsCount).toEqual(
29
);
jest.useFakeTimers()
jest.advanceTimersByTime(4000000)
await runGql(
dynamicReassignMutation,
{
organizationUuid: testCampaign.joinToken,
campaignId: testCampaign.id,
},
testTexterUser2
);
jest.useRealTimers()
texterCampaignDataResults = await runGql(
TexterTodoQuery,
{
contactsFilter: {
messageStatus: "needsResponse",
isOptedOut: false,
validTimezone: true
},
assignmentId,
organizationId
},
testTexterUser
);

texterCampaignDataResults2 = await runGql(
TexterTodoQuery,
{
contactsFilter: {
messageStatus: "needsResponse",
isOptedOut: false,
validTimezone: true
},
assignmentId: assignmentId2,
organizationId
},
testTexterUser2
);
expect(texterCampaignDataResults.data.assignment.contacts.length).toEqual(
0
);
expect(texterCampaignDataResults.data.assignment.allContactsCount).toEqual(
64
);
expect(texterCampaignDataResults2.data.assignment.contacts.length).toEqual(
2
);
expect(texterCampaignDataResults2.data.assignment.allContactsCount).toEqual(
31
);
}, 10000); // long test can exceed default 5seconds
});

Expand Down
1 change: 1 addition & 0 deletions __test__/test_helpers.js
Original file line number Diff line number Diff line change
Expand Up @@ -359,6 +359,7 @@ export async function createCampaign(
const campaignQuery = `mutation createCampaign($input: CampaignInput!) {
createCampaign(campaign: $input) {
id
joinToken
}
}`;
const variables = {
Expand Down
1 change: 1 addition & 0 deletions src/api/schema.js
Original file line number Diff line number Diff line change
Expand Up @@ -101,6 +101,7 @@ const rootSchema = gql`
inventoryPhoneNumberCounts: [CampaignPhoneNumberInput!]
useDynamicReplies: Boolean
replyBatchSize: Int
joinToken: String
}
input OrganizationInput {
Expand Down
3 changes: 1 addition & 2 deletions src/server/api/schema.js
Original file line number Diff line number Diff line change
Expand Up @@ -1468,8 +1468,7 @@ const rootMutations = {
if (!organization) {
throw INVALID_REASSIGN();
}

const maxContacts = getConfig("MAX_REPLIES_PER_TEXTER", organization);
const maxContacts = getConfig("MAX_REPLIES_PER_TEXTER", organization) ?? 200;
let d = new Date();
d.setHours(d.getHours() - 1);
const contactsFilter = { messageStatus: 'needsResponse', isOptedOut: false, listSize: maxContacts, orderByRaw: "updated_at DESC", updatedAtLt: d}
Expand Down

0 comments on commit 4be13a6

Please sign in to comment.