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:
parent
a35269d275
commit
2c3e37b157
3 changed files with 29 additions and 20 deletions
|
@ -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);
|
||||
});
|
||||
};
|
||||
|
|
|
@ -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 }) => {
|
||||
|
|
|
@ -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 }
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue