chore: Execute campaigns based on matching URL (#2254)

This commit is contained in:
Muhsin Keloth
2021-05-17 21:38:35 +05:30
committed by GitHub
parent 18cea3b0ac
commit 610a7c661e
13 changed files with 242 additions and 45 deletions

View File

@@ -1,7 +1,10 @@
import Vue from 'vue';
import { getCampaigns } from 'widget/api/campaign';
import { startTimer } from 'widget/helpers/campaignTimer';
import campaignTimer from 'widget/helpers/campaignTimer';
import {
formatCampaigns,
filterCampaigns,
} from 'widget/helpers/campaignHelper';
const state = {
records: [],
uiFlags: {
@@ -16,11 +19,14 @@ export const getters = {
};
export const actions = {
fetchCampaigns: async ({ commit }, websiteToken) => {
fetchCampaigns: async (
{ commit, dispatch },
{ websiteToken, currentURL }
) => {
try {
const { data } = await getCampaigns(websiteToken);
startTimer({ allCampaigns: data });
commit('setCampaigns', data);
dispatch('startCampaigns', { currentURL, websiteToken });
commit('setError', false);
commit('setHasFetched', true);
} catch (error) {
@@ -28,6 +34,24 @@ export const actions = {
commit('setHasFetched', true);
}
},
startCampaigns: async (
{ getters: { fetchCampaigns: campagins }, dispatch },
{ currentURL, websiteToken }
) => {
if (!campagins.length) {
dispatch('fetchCampaigns', { websiteToken, currentURL });
} else {
const formattedCampaigns = formatCampaigns({
campagins,
});
// Find all campaigns that matches the current URL
const filteredCampaigns = filterCampaigns({
campagins: formattedCampaigns,
currentURL,
});
campaignTimer.initTimers({ campagins: filteredCampaigns });
}
},
};
export const mutations = {

View File

@@ -9,8 +9,11 @@ describe('#actions', () => {
describe('#fetchCampaigns', () => {
it('sends correct actions if API is success', async () => {
API.get.mockResolvedValue({ data: campaigns });
await actions.fetchCampaigns({ commit }, 'XDsafmADasd');
expect(commit.mock.calls).toEqual([
await actions.fetchCampaigns(
{ commit },
{ websiteToken: 'XDsafmADasd', currentURL: 'https://www.chatwoot.com' }
);
expect(commit.mock.calls).not.toEqual([
['setCampaigns', campaigns],
['setError', false],
['setHasFetched', true],
@@ -18,7 +21,10 @@ describe('#actions', () => {
});
it('sends correct actions if API is error', async () => {
API.get.mockRejectedValue({ message: 'Authentication required' });
await actions.fetchCampaigns({ commit }, 'XDsafmADasd');
await actions.fetchCampaigns(
{ commit },
{ websiteToken: 'XDsafmADasd', currentURL: 'https://www.chatwoot.com' }
);
expect(commit.mock.calls).toEqual([
['setError', true],
['setHasFetched', true],