diff --git a/app/javascript/shared/mixins/specs/inboxMixin.spec.js b/app/javascript/shared/mixins/specs/inboxMixin.spec.js index 0104c79bc..aca02b697 100644 --- a/app/javascript/shared/mixins/specs/inboxMixin.spec.js +++ b/app/javascript/shared/mixins/specs/inboxMixin.spec.js @@ -1,108 +1,68 @@ import { shallowMount } from '@vue/test-utils'; import inboxMixin from '../inboxMixin'; +function getComponentConfig(channelType, additionalConfig = {}) { + return { + render() {}, + mixins: [inboxMixin], + data() { + return { + inbox: { + channel_type: channelType, + ...additionalConfig, + }, + }; + }, + }; +} + describe('inboxMixin', () => { it('returns the correct channel type', () => { - const Component = { - render() {}, - mixins: [inboxMixin], - data() { - return { inbox: { channel_type: 'Channel::WebWidget' } }; - }, - }; + const Component = getComponentConfig('Channel::WebWidget'); const wrapper = shallowMount(Component); expect(wrapper.vm.channelType).toBe('Channel::WebWidget'); }); it('isAPIInbox returns true if channel type is API', () => { - const Component = { - render() {}, - mixins: [inboxMixin], - data() { - return { inbox: { channel_type: 'Channel::Api' } }; - }, - }; + const Component = getComponentConfig('Channel::Api'); const wrapper = shallowMount(Component); expect(wrapper.vm.isAPIInbox).toBe(true); }); it('isATwitterInbox returns true if channel type is twitter', () => { - const Component = { - render() {}, - mixins: [inboxMixin], - data() { - return { inbox: { channel_type: 'Channel::TwitterProfile' } }; - }, - }; + const Component = getComponentConfig('Channel::TwitterProfile'); const wrapper = shallowMount(Component); expect(wrapper.vm.isATwitterInbox).toBe(true); }); it('isAFacebookInbox returns true if channel type is Facebook', () => { - const Component = { - render() {}, - mixins: [inboxMixin], - data() { - return { inbox: { channel_type: 'Channel::FacebookPage' } }; - }, - }; + const Component = getComponentConfig('Channel::FacebookPage'); const wrapper = shallowMount(Component); expect(wrapper.vm.isAFacebookInbox).toBe(true); }); it('isAWebWidgetInbox returns true if channel type is Facebook', () => { - const Component = { - render() {}, - mixins: [inboxMixin], - data() { - return { inbox: { channel_type: 'Channel::WebWidget' } }; - }, - }; + const Component = getComponentConfig('Channel::WebWidget'); const wrapper = shallowMount(Component); expect(wrapper.vm.isAWebWidgetInbox).toBe(true); }); it('isASmsInbox returns true if channel type is sms', () => { - const Component = { - render() {}, - mixins: [inboxMixin], - data() { - return { inbox: { channel_type: 'Channel::Sms' } }; - }, - }; + const Component = getComponentConfig('Channel::Sms'); const wrapper = shallowMount(Component); expect(wrapper.vm.isASmsInbox).toBe(true); }); it('isATwilioChannel returns true if channel type is Twilio', () => { - const Component = { - render() {}, - mixins: [inboxMixin], - data() { - return { - inbox: { - channel_type: 'Channel::TwilioSms', - }, - }; - }, - }; + const Component = getComponentConfig('Channel::TwilioSms'); const wrapper = shallowMount(Component); expect(wrapper.vm.isATwilioChannel).toBe(true); }); it('isATwilioSMSChannel returns true if channel type is Twilio and medium is SMS', () => { - const Component = { - render() {}, - mixins: [inboxMixin], - data() { - return { - inbox: { - channel_type: 'Channel::TwilioSms', - medium: 'sms', - }, - }; - }, - }; + const Component = getComponentConfig('Channel::TwilioSms', { + medium: 'sms', + }); const wrapper = shallowMount(Component); expect(wrapper.vm.isATwilioChannel).toBe(true); expect(wrapper.vm.isATwilioSMSChannel).toBe(true); @@ -110,33 +70,16 @@ describe('inboxMixin', () => { }); it('isATwilioWhatsAppChannel returns true if channel type is Twilio and medium is WhatsApp', () => { - const Component = { - render() {}, - mixins: [inboxMixin], - data() { - return { - inbox: { - channel_type: 'Channel::TwilioSms', - medium: 'whatsapp', - }, - }; - }, - }; + const Component = getComponentConfig('Channel::TwilioSms', { + medium: 'whatsapp', + }); const wrapper = shallowMount(Component); expect(wrapper.vm.isATwilioChannel).toBe(true); expect(wrapper.vm.isATwilioWhatsAppChannel).toBe(true); }); it('isAnEmailChannel returns true if channel type is email', () => { - const Component = { - render() {}, - mixins: [inboxMixin], - data() { - return { - inbox: { channel_type: 'Channel::Email' }, - }; - }, - }; + const Component = getComponentConfig('Channel::Email'); const wrapper = shallowMount(Component); expect(wrapper.vm.isAnEmailChannel).toBe(true); }); @@ -161,18 +104,9 @@ describe('inboxMixin', () => { }); it('twilioBadge returns string sms if channel type is Twilio and medium is sms', () => { - const Component = { - render() {}, - mixins: [inboxMixin], - data() { - return { - inbox: { - channel_type: 'Channel::TwilioSms', - medium: 'sms', - }, - }; - }, - }; + const Component = getComponentConfig('Channel::TwilioSms', { + medium: 'sms', + }); const wrapper = shallowMount(Component); expect(wrapper.vm.isATwilioSMSChannel).toBe(true); expect(wrapper.vm.twilioBadge).toBe('sms'); @@ -199,53 +133,25 @@ describe('inboxMixin', () => { }); it('inboxBadge returns string Channel::Telegram if isATwilioChannel and isATwitterInbox is false', () => { - const Component = { - render() {}, - mixins: [inboxMixin], - data() { - return { - inbox: { - channel_type: 'Channel::Telegram', - }, - }; - }, - }; + const Component = getComponentConfig('Channel::Telegram'); const wrapper = shallowMount(Component); expect(wrapper.vm.isATwilioChannel).toBe(false); expect(wrapper.vm.isATwitterInbox).toBe(false); expect(wrapper.vm.channelType).toBe('Channel::Telegram'); }); + it('returns correct whatsAppAPIProvider', () => {}); + describe('#inboxHasFeature', () => { it('detects the correct feature', () => { - const Component = { - render() {}, - mixins: [inboxMixin], - data() { - return { - inbox: { - channel_type: 'Channel::Telegram', - }, - }; - }, - }; + const Component = getComponentConfig('Channel::Telegram'); const wrapper = shallowMount(Component); expect(wrapper.vm.inboxHasFeature('replyTo')).toBe(true); expect(wrapper.vm.inboxHasFeature('feature-does-not-exist')).toBe(false); }); it('returns false for feature not included', () => { - const Component = { - render() {}, - mixins: [inboxMixin], - data() { - return { - inbox: { - channel_type: 'Channel::SMS', - }, - }; - }, - }; + const Component = getComponentConfig('Channel::Sms'); const wrapper = shallowMount(Component); expect(wrapper.vm.inboxHasFeature('replyTo')).toBe(false); expect(wrapper.vm.inboxHasFeature('feature-does-not-exist')).toBe(false);