UNPKG

onesignal-web-sdk

Version:

Web push notifications from OneSignal.

157 lines (124 loc) 7.16 kB
import '../../support/polyfills/polyfills'; import test from "ava"; import AltOriginManager from '../../../src/managers/AltOriginManager'; import { EnvironmentKind } from '../../../src/models/EnvironmentKind' import sinon from 'sinon'; import ProxyFrameHost from '../../../src/modules/frames/ProxyFrameHost'; import { TestEnvironment } from '../../support/sdk/TestEnvironment'; test(`should get correct canonical subscription URL for development environment`, async t => { const config = TestEnvironment.getFakeAppConfig(); config.subdomain = 'test'; config.httpUseOneSignalCom = true; const devUrlsOsTcDomain = AltOriginManager.getCanonicalSubscriptionUrls(config, EnvironmentKind.Development); t.is(devUrlsOsTcDomain.length, 2); t.is(devUrlsOsTcDomain[0].host, new URL('https://test.localhost:3001').host); t.is(devUrlsOsTcDomain[1].host, new URL('https://test.os.tc:3001').host); config.httpUseOneSignalCom = false; const devUrls = AltOriginManager.getCanonicalSubscriptionUrls(config, EnvironmentKind.Development); t.is(devUrls.length, 1); t.is(devUrls[0].host, new URL('https://test.os.tc:3001').host); }); test(`should get correct canonical subscription URL for staging environment`, async t => { const config = TestEnvironment.getFakeAppConfig(); config.subdomain = 'test'; config.httpUseOneSignalCom = true; const browser = await TestEnvironment.stubDomEnvironment(); browser.changeURL(window, "http://staging-01.onesignal.com"); const stagingUrlsOsTcDomain = AltOriginManager.getCanonicalSubscriptionUrls(config, EnvironmentKind.Staging); t.is(stagingUrlsOsTcDomain.length, 2); t.is(stagingUrlsOsTcDomain[0].host, new URL('https://test.staging-01.onesignal.com').host); t.is(stagingUrlsOsTcDomain[1].host, new URL('https://test.os.tc').host); config.httpUseOneSignalCom = false; const stagingUrls = AltOriginManager.getCanonicalSubscriptionUrls(config, EnvironmentKind.Staging); t.is(stagingUrls.length, 1); t.is(stagingUrls[0].host, new URL('https://test.os.tc').host); }); test(`should get correct canonical subscription URL for production environment`, async t => { const config = TestEnvironment.getFakeAppConfig(); config.subdomain = 'test'; config.httpUseOneSignalCom = true; const prodUrlsOsTcDomain = AltOriginManager.getCanonicalSubscriptionUrls(config, EnvironmentKind.Production); t.is(prodUrlsOsTcDomain.length, 2); t.is(prodUrlsOsTcDomain[0].host, new URL('https://test.onesignal.com').host); t.is(prodUrlsOsTcDomain[1].host, new URL('https://test.os.tc').host); config.httpUseOneSignalCom = false; const prodUrls = AltOriginManager.getCanonicalSubscriptionUrls(config, EnvironmentKind.Production); t.is(prodUrls.length, 1); t.is(prodUrls[0].host, new URL('https://test.os.tc').host); }); function setupDiscoverAltOriginTest(t: any) { const appConfig = TestEnvironment.getFakeAppConfig(); appConfig.subdomain = 'test'; appConfig.httpUseOneSignalCom = true; t.context.appConfig = appConfig; t.context.subdomainOneSignalHost = `${appConfig.subdomain}.onesignal.com`; t.context.subdomainOsTcHost = `${appConfig.subdomain}.os.tc`; t.context.stubIsSubscribedToOneSignalImpl = async function() { if (this.url.host === t.context.subdomainOneSignalHost) { return true; } else return false; } t.context.stubIsSubscribedToOsTcImpl = async function() { if (this.url.host === t.context.subdomainOsTcHost) { return true; } else return false; } t.context.stubIsSubscribedToNoneImpl = async function() { return false; } t.context.stubIsSubscribedToBothImpl = async function() { if (this.url.host === t.context.subdomainOneSignalHost || this.url.host === t.context.subdomainOsTcHost) { return true; } else return false; } } test(`should discover alt origin to be subdomain.onesignal.com if user is already subscribed there`, async t => { setupDiscoverAltOriginTest(t); const { appConfig } = t.context; const stubLoad = sinon.stub(ProxyFrameHost.prototype, 'load').resolves(undefined); const stubIsSubscribed = sinon.stub(ProxyFrameHost.prototype, 'isSubscribed').callsFake(t.context.stubIsSubscribedToOneSignalImpl); const stubRemoveDuplicatedAltOriginSubscription = sinon.stub(AltOriginManager, 'removeDuplicatedAltOriginSubscription').resolves(undefined); const proxyFrame = await AltOriginManager.discoverAltOrigin(appConfig); t.is(proxyFrame.url.host, t.context.subdomainOneSignalHost); stubRemoveDuplicatedAltOriginSubscription.restore(); stubIsSubscribed.restore(); stubLoad.restore(); }); test(`should discover alt origin to be subdomain.os.tc if user is not subscribed to onesignal.com but is subscribed to os.tc`, async t => { setupDiscoverAltOriginTest(t); const { appConfig } = t.context; const stubLoad = sinon.stub(ProxyFrameHost.prototype, 'load').resolves(undefined); const stubIsSubscribed = sinon.stub(ProxyFrameHost.prototype, 'isSubscribed').callsFake(t.context.stubIsSubscribedToOsTcImpl); const stubRemoveDuplicatedAltOriginSubscription = sinon.stub(AltOriginManager, 'removeDuplicatedAltOriginSubscription').resolves(undefined); const proxyFrame = await AltOriginManager.discoverAltOrigin(appConfig); t.is(proxyFrame.url.host, t.context.subdomainOsTcHost); stubRemoveDuplicatedAltOriginSubscription.restore(); stubIsSubscribed.restore(); stubLoad.restore(); }); test(`should discover alt origin to be subdomain.os.tc if user is not subscribed to either onesignal.com or os.tc`, async t => { setupDiscoverAltOriginTest(t); const { appConfig } = t.context; const stubLoad = sinon.stub(ProxyFrameHost.prototype, 'load').resolves(undefined); const stubIsSubscribed = sinon.stub(ProxyFrameHost.prototype, 'isSubscribed').callsFake(t.context.stubIsSubscribedToNoneImpl); const stubRemoveDuplicatedAltOriginSubscription = sinon.stub(AltOriginManager, 'removeDuplicatedAltOriginSubscription').resolves(undefined); const proxyFrame = await AltOriginManager.discoverAltOrigin(appConfig); t.is(proxyFrame.url.host, t.context.subdomainOsTcHost); stubRemoveDuplicatedAltOriginSubscription.restore(); stubIsSubscribed.restore(); stubLoad.restore(); }); test(`should discover alt origin to be subdomain.os.tc if user is subscribed to both onesignal.com and os.tc`, async t => { setupDiscoverAltOriginTest(t); const { appConfig } = t.context; const stubLoad = sinon.stub(ProxyFrameHost.prototype, 'load').resolves(undefined); const stubIsSubscribed = sinon.stub(ProxyFrameHost.prototype, 'isSubscribed').callsFake(t.context.stubIsSubscribedToBothImpl); const stubUnsubscribeFromPush = sinon.stub(ProxyFrameHost.prototype, 'unsubscribeFromPush').resolves(undefined); const proxyFrame = await AltOriginManager.discoverAltOrigin(appConfig); t.is(proxyFrame.url.host, t.context.subdomainOsTcHost); t.true(stubUnsubscribeFromPush.called); stubUnsubscribeFromPush.restore(); stubIsSubscribed.restore(); stubLoad.restore(); });