deno.land / x / google_play_scraper@v10.0.0 / test / lib.app.js
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209import { assert } from 'chai';import validator from 'validator';import { assertValidUrl } from './common.js';import gplay from '../index.js';
const validateAppDetails = (app) => { assert.equal(app.appId, 'com.sgn.pandapop.gp'); assertValidUrl(app.icon);
assert.isBoolean(app.isAvailableInPlayPass);
assert.isNumber(app.score); assert(app.score > 0); assert(app.score <= 5);
assert.isNumber(app.minInstalls); assert.isNumber(app.reviews);
assert.isString(app.summary); assert.isString(app.description); assert.isString(app.descriptionHTML); assert.isString(app.released); assert.equal(app.genreId, 'GAME_PUZZLE');
assert.isArray(app.categories); assert.isAbove(app.categories.length, 1); assert.equal(app.categories[0].id, 'GAME_PUZZLE'); assert.notEqual(app.categories[1].id, 'GAME_PUZZLE'); assert.hasAllKeys(app.categories[0], ['name', 'id']);
assert.isString(app.version); if (app.size) { assert.isString(app.size); } assert.isString(app.contentRating);
assert.equal(app.androidVersion, '7.0'); assert.equal(app.androidMaxVersion, 'VARY');
assert.isBoolean(app.available); assert.equal(app.priceText, 'Free'); assert.equal(app.price, 0); assert.isTrue(app.free); assert.isTrue(app.offersIAP); assert.isString(app.IAPRange); assert.isFalse(app.preregister); assert.isFalse(app.earlyAccessEnabled); assert.isUndefined(app.originalPrice); assert.isUndefined(app.discountEndDate);
assert.equal(app.developer, 'Jam City, Inc.'); assert.equal(app.developerId, '5509190841173705883'); assert.equal(app.developerInternalID, '5509190841173705883'); assertValidUrl(app.developerWebsite); assert(validator.isEmail(app.developerEmail), `${app.developerEmail} is not an email`);
assertValidUrl(app.video); assertValidUrl(app.previewVideo); ['1', '2', '3', '4', '5'].map((v) => assert.property(app.histogram, v));
assert(app.screenshots.length); app.screenshots.map(assertValidUrl);
assert.isArray(app.comments); assert.isAbove(app.comments.length, 0); app.comments.map(assert.isString);
assert.isString(app.recentChanges);};
describe('App method', () => { it('should fetch valid application data', () => { return gplay.app({ appId: 'com.sgn.pandapop.gp' }) .then((app) => { assert.equal(app.url, 'https://play.google.com/store/apps/details?id=com.sgn.pandapop.gp&hl=en&gl=us'); assert.equal(app.genre, 'Puzzle'); assert.equal(app.androidVersionText, '7.0'); validateAppDetails(app); }); });
it('should fetch valid application data for country: es', () => { return gplay.app({ appId: 'com.sgn.pandapop.gp', country: 'es', lang: 'es' }) .then((app) => { assert.equal(app.url, 'https://play.google.com/store/apps/details?id=com.sgn.pandapop.gp&hl=es&gl=es'); assert.equal(app.genre, 'Puzles'); assert.equal(app.androidVersionText, '7.0'); assert.equal(app.available, true); validateAppDetails(app); }); });
it('should fetch valid application data for country: br', () => { return gplay.app({ appId: 'com.sgn.pandapop.gp', country: 'br', lang: 'pt' }) .then((app) => { assert.equal(app.url, 'https://play.google.com/store/apps/details?id=com.sgn.pandapop.gp&hl=pt&gl=br'); assert.equal(app.genre, 'Quebra-cabeça'); assert.equal(app.androidVersionText, '7.0'); assert.equal(app.available, true); validateAppDetails(app); }); });
it('should properly parse a VARY android version', () => { return gplay.app({ appId: 'com.facebook.katana' }) .then((app) => { assert.equal(app.androidVersion, 'VARY'); assert.equal(app.androidVersionText, 'Varies with device'); }); });
it('should get the developer physical address', () => { return gplay.app({ appId: 'com.snapchat.android' }) .then((app) => { assert.equal(app.developerAddress, '2772 Donald Douglas Loop, North\n' + 'Santa Monica, CA 90405\n' + 'USA'); }); });
it('should get the privacy policy', () => { return gplay.app({ appId: 'com.snapchat.android' }) .then((app) => { assert.equal(app.privacyPolicy, 'http://www.snapchat.com/privacy'); }); });
it('should fetch app in spanish', () => { return gplay.app({ appId: 'com.sgn.pandapop.gp', lang: 'es', country: 'ar' }) .then((app) => { assert.equal(app.appId, 'com.sgn.pandapop.gp'); assert.equal(app.title, 'Bubble Shooter: Panda Pop!'); assert.equal(app.url, 'https://play.google.com/store/apps/details?id=com.sgn.pandapop.gp&hl=es&gl=ar'); assert.isNumber(app.minInstalls);
assert.equal(app.androidVersion, '7.0'); assert.equal(app.androidVersionText, '7.0'); }); });
it('should fetch app in french', () => gplay.app({ appId: 'com.sgn.pandapop.gp', lang: 'fr', country: 'fr' }) .then((app) => { assert.equal(app.appId, 'com.sgn.pandapop.gp'); assert.equal(app.title, 'Panda Pop! Jeu de tir à bulles'); assert.equal(app.url, 'https://play.google.com/store/apps/details?id=com.sgn.pandapop.gp&hl=fr&gl=fr'); assert.isNumber(app.minInstalls);
assert.equal(app.androidVersion, '7.0'); assert.equal(app.androidVersionText, '7.0'); }));
it('should reject the promise for an invalid appId', () => gplay.app({ appId: 'com.dxco.pandavszombiesasdadad' }) .then(() => { throw Error('should not resolve'); }) .catch((err) => { assert.equal(err.message, 'App not found (404)'); }));
it('should reject the promise when appId is not passed', () => gplay.app({ Testkey: 'com.dxco.pandavszombiesasdadad' }) .then(() => { throw Error('should not resolve'); }) .catch((err) => { assert.equal(err.message, 'appId missing'); }));
it('should fetch PriceText for paid apps properly', () => { return gplay.app({ appId: 'com.teslacoilsw.launcher.prime', country: 'in' }) .then((app) => { assert.equal(app.priceText, `₹${app.price.toFixed(2)}`); assert.equal(app.currency, 'INR'); }); });
it('should fetch valid internal developer_id, if it differs from developer_id', () => { return gplay.app({ appId: 'air.com.bitrhymes.bingo' }) .then((app) => { assert.equal(app.developerInternalID, '9028773071151690823'); }); });
it('should fetch available false for an app is unavailable in country', () => { return gplay.app({ appId: 'com.jlr.landrover.incontrolremote.appstore', country: 'tr' }) .then((app) => { assert.equal(app.available, false); }); });
it('should fetch android version limit set for some old apps', () => { return gplay.app({ appId: 'air.com.zinkia.playset' }) .then((app) => { assert.equal(app.androidVersion, '4.2'); assert.equal(app.androidMaxVersion, '7.1.1'); }); });});
Version Info