node-deeplink
Version:
Easily create an endpoint in your web server that redirects deep links to mobile apps
167 lines (148 loc) • 3.27 kB
JavaScript
const assert = require('chai').assert;
const device = require('./lib/device');
const Browser = require('./lib/browser');
const url = 'app://test/';
const fallback = 'https://vandelay.com/';
const androidPackageName = 'ind.vandelay.art';
const iosStoreLink =
'https://itunes.apple.com/us/app/art-vandelay/id556462755?mt=8&uo=4';
describe('android', () => {
let browser;
beforeEach(() => {
browser = Browser(device.android);
});
afterEach(() => {
browser.close();
});
it('should return intent on android device', done => {
browser.go(
url,
{
fallback: fallback,
android_package_name: androidPackageName
},
res => {
assert.equal(
res,
'intent://test/#Intent;scheme=app;package=ind.vandelay.art;end;'
);
done();
}
);
});
it('should return intent on android device based on configured url', done => {
browser.go(
null,
{
fallback: fallback,
android_package_name: androidPackageName,
url: url
},
res => {
assert.equal(
res,
'intent://test/#Intent;scheme=app;package=ind.vandelay.art;end;'
);
done();
}
);
});
it('should return the fallback url when no package name defined in android', done => {
browser.go(
url,
{
fallback: fallback
},
res => {
assert.equal(res, fallback);
done();
}
);
});
});
describe('ios', () => {
let browser;
beforeEach(() => {
browser = Browser(device.ios);
});
afterEach(() => {
browser.close();
});
it('should return deeplink url on ios device', done => {
browser.go(
url,
{
fallback: fallback,
ios_store_link: iosStoreLink
},
res => {
assert.equal(res, url);
done();
}
);
});
it('should return deeplink url on ios device based on configured url', done => {
browser.go(
null,
{
fallback: fallback,
ios_store_link: iosStoreLink,
url: url
},
res => {
assert.equal(res, url);
done();
}
);
});
it('should return the fallback url when no ios store link defined in ios', done => {
browser.go(
url,
{
fallback: fallback
},
res => {
assert.equal(res, fallback);
done();
}
);
});
});
describe('general', () => {
let browser;
beforeEach(() => {
browser = Browser();
});
afterEach(() => {
browser.close();
});
it('should go to fallback url on an unsupported device', done => {
browser.go(
url,
{
fallback: fallback,
ios_store_link: iosStoreLink,
android_package_name: androidPackageName
},
res => {
assert.equal(res, fallback);
done();
}
);
});
it('should use the configured url if none was provided in the query params', done => {
browser.go(
null,
{
fallback: fallback,
ios_store_link: iosStoreLink,
android_package_name: androidPackageName,
url: url
},
res => {
assert.equal(res, fallback);
done();
}
);
});
});