fix: Disable triggering disabled ongoing campaigns (#3115)

* fixes: Triggering disabled ongoing campaigns.

* Fix the specs

Co-authored-by: Muhsin Keloth <muhsinkeramam@gmail.com>
This commit is contained in:
Sivin Varghese 2021-10-11 18:18:11 +05:30 committed by GitHub
parent a35269d275
commit 2c3e37b157
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 29 additions and 20 deletions

View file

@ -4,12 +4,12 @@ class CampaignTimer {
this.campaignTimers = [];
}
initTimers = ({ campaigns }) => {
initTimers = ({ campaigns }, websiteToken) => {
this.clearTimers();
campaigns.forEach(campaign => {
const { timeOnPage, id: campaignId } = campaign;
this.campaignTimers[campaignId] = setTimeout(() => {
store.dispatch('campaign/startCampaign', { campaignId });
store.dispatch('campaign/startCampaign', { campaignId, websiteToken });
}, timeOnPage * 1000);
});
};

View file

@ -14,14 +14,14 @@ const state = {
activeCampaign: {},
};
const resetCampaignTimers = (campaigns, currentURL) => {
const resetCampaignTimers = (campaigns, currentURL, websiteToken) => {
const formattedCampaigns = formatCampaigns({ campaigns });
// Find all campaigns that matches the current URL
const filteredCampaigns = filterCampaigns({
campaigns: formattedCampaigns,
currentURL,
});
campaignTimer.initTimers({ campaigns: filteredCampaigns });
campaignTimer.initTimers({ campaigns: filteredCampaigns }, websiteToken);
};
export const getters = {
@ -37,7 +37,7 @@ export const actions = {
commit('setCampaigns', campaigns);
commit('setError', false);
commit('setHasFetched', true);
resetCampaignTimers(campaigns, currentURL);
resetCampaignTimers(campaigns, currentURL, websiteToken);
} catch (error) {
commit('setError', true);
commit('setHasFetched', true);
@ -50,15 +50,15 @@ export const actions = {
if (!campaigns.length) {
dispatch('fetchCampaigns', { websiteToken, currentURL });
} else {
resetCampaignTimers(campaigns, currentURL);
resetCampaignTimers(campaigns, currentURL, websiteToken);
}
},
startCampaign: async (
{ getters: { getCampaigns: campaigns }, commit },
{ campaignId }
) => {
startCampaign: async ({ commit }, { websiteToken, campaignId }) => {
const { data: campaigns } = await getCampaigns(websiteToken);
const campaign = campaigns.find(item => item.id === campaignId);
commit('setActiveCampaign', campaign);
if (campaign) {
commit('setActiveCampaign', campaign);
}
},
executeCampaign: async ({ commit }, { campaignId, websiteToken }) => {

View file

@ -22,9 +22,14 @@ describe('#actions', () => {
['setError', false],
['setHasFetched', true],
]);
expect(campaignTimer.initTimers).toHaveBeenCalledWith({
campaigns: [{ id: 11, timeOnPage: '20', url: 'https://chatwoot.com' }],
});
expect(campaignTimer.initTimers).toHaveBeenCalledWith(
{
campaigns: [
{ id: 11, timeOnPage: '20', url: 'https://chatwoot.com' },
],
},
'XDsafmADasd'
);
});
it('sends correct actions if API is error', async () => {
API.get.mockRejectedValue({ message: 'Authentication required' });
@ -38,13 +43,11 @@ describe('#actions', () => {
]);
});
});
describe('#initCampaigns', () => {
const actionParams = {
websiteToken: 'XDsafmADasd',
currentURL: 'https://chatwoot.com',
};
it('sends correct actions if campaigns are empty', async () => {
await actions.initCampaigns(
{ dispatch, getters: { getCampaigns: [] } },
@ -59,20 +62,26 @@ describe('#actions', () => {
actionParams
);
expect(dispatch.mock.calls).toEqual([]);
expect(campaignTimer.initTimers).toHaveBeenCalledWith({
campaigns: [{ id: 11, timeOnPage: '20', url: 'https://chatwoot.com' }],
});
expect(campaignTimer.initTimers).toHaveBeenCalledWith(
{
campaigns: [
{ id: 11, timeOnPage: '20', url: 'https://chatwoot.com' },
],
},
'XDsafmADasd'
);
});
});
describe('#startCampaign', () => {
it('reset campaign if campaign id is not present in the campaign list', async () => {
API.get.mockResolvedValue({ data: campaigns });
await actions.startCampaign(
{ dispatch, getters: { getCampaigns: campaigns }, commit },
{ campaignId: 32 }
);
expect(commit.mock.calls).toEqual([['setActiveCampaign', undefined]]);
});
it('start campaign if campaign id passed', async () => {
API.get.mockResolvedValue({ data: campaigns });
await actions.startCampaign(
{ dispatch, getters: { getCampaigns: campaigns }, commit },
{ campaignId: 1 }