224 lines
		
	
	
	
		
			7.9 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			224 lines
		
	
	
	
		
			7.9 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
'use strict';
 | 
						|
 | 
						|
const config = require('../lib/config');
 | 
						|
const web = require('../lib/web');
 | 
						|
const mail = require('../lib/mail');
 | 
						|
const expect = require('chai').expect;
 | 
						|
 | 
						|
const fieldHelpers = list => ({
 | 
						|
    async fillFields(subscription) {
 | 
						|
        if (subscription.EMAIL && this.url === `/subscription/${list.cid}`) {
 | 
						|
            await this.setValue('emailInput', subscription.EMAIL);
 | 
						|
        }
 | 
						|
 | 
						|
        if (subscription.FIRST_NAME) {
 | 
						|
            await this.setValue('firstNameInput', subscription.FIRST_NAME);
 | 
						|
        }
 | 
						|
 | 
						|
        if (subscription.LAST_NAME) {
 | 
						|
            await this.setValue('lastNameInput', subscription.LAST_NAME);
 | 
						|
        }
 | 
						|
 | 
						|
        for (const field of list.customFields) {
 | 
						|
            if (field.key in subscription) {
 | 
						|
                await this.setValue(`[name="${field.key}"]`, subscription[field.key]);
 | 
						|
            }
 | 
						|
        }
 | 
						|
    },
 | 
						|
 | 
						|
    async assertFields(subscription) {
 | 
						|
        if (subscription.EMAIL) {
 | 
						|
            expect(await this.getValue('emailInput')).to.equal(subscription.EMAIL);
 | 
						|
        }
 | 
						|
 | 
						|
        if (subscription.FIRST_NAME) {
 | 
						|
            expect(await this.getValue('firstNameInput')).to.equal(subscription.FIRST_NAME);
 | 
						|
        }
 | 
						|
 | 
						|
        if (subscription.LAST_NAME) {
 | 
						|
            expect(await this.getValue('lastNameInput')).to.equal(subscription.LAST_NAME);
 | 
						|
        }
 | 
						|
 | 
						|
        for (const field of list.customFields) {
 | 
						|
            if (field.key in subscription) {
 | 
						|
                expect(await this.getValue(`[name="${field.key}"]`)).to.equal(subscription[field.key]);
 | 
						|
            }
 | 
						|
        }
 | 
						|
    }
 | 
						|
});
 | 
						|
 | 
						|
module.exports = list => ({
 | 
						|
 | 
						|
    webSubscribe: web({
 | 
						|
        baseUrl: config.basePublicUrl,
 | 
						|
        url: `/subscription/${list.cid}`,
 | 
						|
        elementsToWaitFor: ['form'],
 | 
						|
        textsToWaitFor: ['Subscribe to list'],
 | 
						|
        elements: {
 | 
						|
            form: `form[action="/subscription/${list.cid}/subscribe"]`,
 | 
						|
            emailInput: '#main-form input[name="EMAIL"]',
 | 
						|
            firstNameInput: '#main-form input[name="FIRST_NAME"]',
 | 
						|
            lastNameInput: '#main-form input[name="LAST_NAME"]',
 | 
						|
            submitButton: 'a[href="#submit"]'
 | 
						|
        }
 | 
						|
    }, fieldHelpers(list)),
 | 
						|
 | 
						|
    webSubscribeAfterPost: web({
 | 
						|
        baseUrl: config.basePublicUrl,
 | 
						|
        url: `/subscription/${list.cid}/subscribe`,
 | 
						|
        elementsToWaitFor: ['form'],
 | 
						|
        textsToWaitFor: ['Subscribe to list'],
 | 
						|
        elements: {
 | 
						|
            form: `form[action="/subscription/${list.cid}/subscribe"]`,
 | 
						|
            emailInput: '#main-form input[name="EMAIL"]',
 | 
						|
            firstNameInput: '#main-form input[name="FIRST_NAME"]',
 | 
						|
            lastNameInput: '#main-form input[name="LAST_NAME"]',
 | 
						|
            submitButton: 'a[href="#submit"]'
 | 
						|
        }
 | 
						|
    }, fieldHelpers(list)),
 | 
						|
 | 
						|
    webSubscribeNonPublic: web({
 | 
						|
        baseUrl: config.basePublicUrl,
 | 
						|
        url: `/subscription/${list.cid}`,
 | 
						|
        textsToWaitFor: ['Permission denied'],
 | 
						|
    }),
 | 
						|
 | 
						|
    webConfirmSubscriptionNotice: web({
 | 
						|
        baseUrl: config.basePublicUrl,
 | 
						|
        url: `/subscription/${list.cid}/confirm-subscription-notice`,
 | 
						|
        textsToWaitFor: ['We need to confirm your email address']
 | 
						|
    }),
 | 
						|
 | 
						|
    mailConfirmSubscription: mail({
 | 
						|
        elementsToWaitFor: ['confirmLink'],
 | 
						|
        textsToWaitFor: ['Please Confirm Subscription'],
 | 
						|
        elements: {
 | 
						|
            confirmLink: `a[href^="${config.settings['service-url']}subscription/confirm/subscribe/"]`
 | 
						|
        }
 | 
						|
    }),
 | 
						|
 | 
						|
    mailAlreadySubscribed: mail({
 | 
						|
        elementsToWaitFor: ['unsubscribeLink'],
 | 
						|
        textsToWaitFor: ['Email address already registered'],
 | 
						|
        elements: {
 | 
						|
            unsubscribeLink: `a[href^="${config.settings['service-url']}subscription/${list.cid}/unsubscribe/"]`,
 | 
						|
            manageLink: `a[href^="${config.settings['service-url']}subscription/${list.cid}/manage/"]`
 | 
						|
        },
 | 
						|
        links: {
 | 
						|
            unsubscribeLink: `/subscription/${list.cid}/unsubscribe/:ucid`,
 | 
						|
            manageLink: `/subscription/${list.cid}/manage/:ucid`
 | 
						|
        }
 | 
						|
    }),
 | 
						|
 | 
						|
    webSubscribedNotice: web({
 | 
						|
        baseUrl: config.basePublicUrl,
 | 
						|
        url: `/subscription/${list.cid}/subscribed-notice`,
 | 
						|
        textsToWaitFor: ['Subscription Confirmed']
 | 
						|
    }),
 | 
						|
 | 
						|
    mailSubscriptionConfirmed: mail({
 | 
						|
        elementsToWaitFor: ['unsubscribeLink'],
 | 
						|
        textsToWaitFor: ['Subscription Confirmed'],
 | 
						|
        elements: {
 | 
						|
            unsubscribeLink: `a[href^="${config.settings['service-url']}subscription/${list.cid}/unsubscribe/"]`,
 | 
						|
            manageLink: `a[href^="${config.settings['service-url']}subscription/${list.cid}/manage/"]`
 | 
						|
        },
 | 
						|
        links: {
 | 
						|
            unsubscribeLink: `/subscription/${list.cid}/unsubscribe/:ucid`,
 | 
						|
            manageLink: `/subscription/${list.cid}/manage/:ucid`
 | 
						|
        }
 | 
						|
    }),
 | 
						|
 | 
						|
    webManage: web({
 | 
						|
        baseUrl: config.basePublicUrl,
 | 
						|
        url: `/subscription/${list.cid}/manage/:ucid`,
 | 
						|
        elementsToWaitFor: ['form'],
 | 
						|
        textsToWaitFor: ['Update Your Preferences'],
 | 
						|
        elements: {
 | 
						|
            form: `form[action="/subscription/${list.cid}/manage"]`,
 | 
						|
            emailInput: '#main-form input[name="EMAIL"]',
 | 
						|
            firstNameInput: '#main-form input[name="FIRST_NAME"]',
 | 
						|
            lastNameInput: '#main-form input[name="LAST_NAME"]',
 | 
						|
            submitButton: 'a[href="#submit"]',
 | 
						|
            manageAddressLink: `a[href^="/subscription/${list.cid}/manage-address/"]`
 | 
						|
        },
 | 
						|
        links: {
 | 
						|
            manageAddressLink: `/subscription/${list.cid}/manage-address/:ucid`
 | 
						|
        }
 | 
						|
    }, fieldHelpers(list)),
 | 
						|
 | 
						|
    webManageAddress: web({
 | 
						|
        baseUrl: config.basePublicUrl,
 | 
						|
        url: `/subscription/${list.cid}/manage-address/:ucid`,
 | 
						|
        elementsToWaitFor: ['form'],
 | 
						|
        textsToWaitFor: ['Update Your Email Address'],
 | 
						|
        elements: {
 | 
						|
            form: `form[action="/subscription/${list.cid}/manage-address"]`,
 | 
						|
            emailInput: '#main-form input[name="EMAIL"]',
 | 
						|
            emailNewInput: '#main-form input[name="EMAIL_NEW"]',
 | 
						|
            submitButton: 'a[href="#submit"]'
 | 
						|
        }
 | 
						|
    }),
 | 
						|
 | 
						|
    mailConfirmAddressChange: mail({
 | 
						|
        elementsToWaitFor: ['confirmLink'],
 | 
						|
        textsToWaitFor: ['Please Confirm Subscription Address Change'],
 | 
						|
        elements: {
 | 
						|
            confirmLink: `a[href^="${config.settings['service-url']}subscription/confirm/change-address/"]`
 | 
						|
        }
 | 
						|
    }),
 | 
						|
 | 
						|
    webUpdatedNotice: web({
 | 
						|
        baseUrl: config.basePublicUrl,
 | 
						|
        url: `/subscription/${list.cid}/updated-notice`,
 | 
						|
        textsToWaitFor: ['Profile Updated']
 | 
						|
    }),
 | 
						|
 | 
						|
    webUnsubscribedNotice: web({
 | 
						|
        baseUrl: config.basePublicUrl,
 | 
						|
        url: `/subscription/${list.cid}/unsubscribed-notice`,
 | 
						|
        textsToWaitFor: ['Unsubscribe Successful']
 | 
						|
    }),
 | 
						|
 | 
						|
    mailUnsubscriptionConfirmed: mail({
 | 
						|
        elementsToWaitFor: ['resubscribeLink'],
 | 
						|
        textsToWaitFor: ['You Are Now Unsubscribed'],
 | 
						|
        elements: {
 | 
						|
            resubscribeLink: `a[href^="${config.settings['service-url']}subscription/${list.cid}"]`
 | 
						|
        }
 | 
						|
    }),
 | 
						|
 | 
						|
    webUnsubscribe: web({
 | 
						|
        baseUrl: config.basePublicUrl,
 | 
						|
        elementsToWaitFor: ['submitButton'],
 | 
						|
        textsToWaitFor: ['Unsubscribe'],
 | 
						|
        elements: {
 | 
						|
            submitButton: 'a[href="#submit"]'
 | 
						|
        }
 | 
						|
    }),
 | 
						|
 | 
						|
    webConfirmUnsubscriptionNotice: web({
 | 
						|
        baseUrl: config.basePublicUrl,
 | 
						|
        url: `/subscription/${list.cid}/confirm-unsubscription-notice`,
 | 
						|
        textsToWaitFor: ['We need to confirm your email address']
 | 
						|
    }),
 | 
						|
 | 
						|
    mailConfirmUnsubscription: mail({
 | 
						|
        elementsToWaitFor: ['confirmLink'],
 | 
						|
        textsToWaitFor: ['Please Confirm Unsubscription'],
 | 
						|
        elements: {
 | 
						|
            confirmLink: `a[href^="${config.settings['service-url']}subscription/confirm/unsubscribe/"]`
 | 
						|
        }
 | 
						|
    }),
 | 
						|
 | 
						|
    webManualUnsubscribeNotice: web({
 | 
						|
        baseUrl: config.basePublicUrl,
 | 
						|
        url: `/subscription/${list.cid}/manual-unsubscribe-notice`,
 | 
						|
        elementsToWaitFor: ['contactLink'],
 | 
						|
        textsToWaitFor: ['Online Unsubscription Is Not Possible', config.settings['admin-email']],
 | 
						|
        elements: {
 | 
						|
            contactLink: `a[href^="mailto:${config.settings['admin-email']}"]`
 | 
						|
        }
 | 
						|
    }),
 | 
						|
 | 
						|
});
 |