Files
react-native-firebase/packages/admob/e2e/requestOptions.e2e.js
2019-09-14 22:24:12 +01:00

382 lines
10 KiB
JavaScript

/*
* Copyright (c) 2016-present Invertase Limited & Contributors
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this library except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
*/
let validator = null;
describe('admob() requestOptions', () => {
before(() => {
validator = jet.require('packages/admob/lib/validateAdRequestOptions');
});
it('returns an empty object is not defined', () => {
const v = validator();
v.should.eql(jet.contextify({}));
});
it('throws if options is not an object', () => {
try {
validator('foo');
return Promise.reject(new Error('Did not throw Error.'));
} catch (e) {
e.message.should.containEql("'options' expected an object value");
return Promise.resolve();
}
});
describe('requestNonPersonalizedAdsOnly', () => {
it('throws if requestNonPersonalizedAdsOnly is not a boolean', () => {
try {
validator({
requestNonPersonalizedAdsOnly: 'true',
});
return Promise.reject(new Error('Did not throw Error.'));
} catch (e) {
e.message.should.containEql(
"'options.requestNonPersonalizedAdsOnly' expected a boolean value",
);
return Promise.resolve();
}
});
it('accepts requestNonPersonalizedAdsOnly boolean', () => {
const v = validator({
requestNonPersonalizedAdsOnly: false,
});
v.requestNonPersonalizedAdsOnly.should.eql(false);
});
});
describe('networkExtras', () => {
it('throws if networkExtras is not an object', () => {
try {
validator({
networkExtras: ['foo', 'bar'],
});
return Promise.reject(new Error('Did not throw Error.'));
} catch (e) {
e.message.should.containEql(
"'options.networkExtras' expected an object of key/value pairs",
);
return Promise.resolve();
}
});
it('throws if networkExtras value is not a string', () => {
try {
validator({
networkExtras: {
foo: 'bar',
bar: 123,
},
});
return Promise.reject(new Error('Did not throw Error.'));
} catch (e) {
e.message.should.containEql(
'\'options.networkExtras\' expected a string value for object key "bar"',
);
return Promise.resolve();
}
});
it('accepts networkExtras object', () => {
const v = validator({
networkExtras: {
foo: 'bar',
bar: 'baz',
},
});
v.networkExtras.foo.should.eql('bar');
v.networkExtras.bar.should.eql('baz');
});
});
describe('keywords', () => {
it('throws if keywords is not an array', () => {
try {
validator({
keywords: { foo: 'bar' },
});
return Promise.reject(new Error('Did not throw Error.'));
} catch (e) {
e.message.should.containEql(
"'options.keywords' expected an array containing string values",
);
return Promise.resolve();
}
});
it('throws if a keyword is not a string', () => {
try {
validator({
keywords: ['foo', 123],
});
return Promise.reject(new Error('Did not throw Error.'));
} catch (e) {
e.message.should.containEql(
"'options.keywords' expected an array containing string values",
);
return Promise.resolve();
}
});
it('accepts keywords array', () => {
const v = validator({
keywords: ['foo', 'bar'],
});
v.keywords.should.be.Array();
v.keywords[0].should.eql('foo');
v.keywords[1].should.eql('bar');
});
});
describe('testDevices', () => {
it('throws if testDevices is not an array', () => {
try {
validator({
testDevices: { foo: 'bar' },
});
return Promise.reject(new Error('Did not throw Error.'));
} catch (e) {
e.message.should.containEql(
"'options.testDevices' expected an array containing string values",
);
return Promise.resolve();
}
});
it('throws if a testDevices is not a string', () => {
try {
validator({
testDevices: ['foo', 123],
});
return Promise.reject(new Error('Did not throw Error.'));
} catch (e) {
e.message.should.containEql(
"'options.testDevices' expected an array containing string values",
);
return Promise.resolve();
}
});
it('accepts testDevices array', () => {
const v = validator({
testDevices: ['foo', 'bar'],
});
v.testDevices.should.be.Array();
v.testDevices[0].should.eql('foo');
v.testDevices[1].should.eql('bar');
});
});
describe('contentUrl', () => {
it('throws if contentUrl is not a string', () => {
try {
validator({
contentUrl: 123,
});
return Promise.reject(new Error('Did not throw Error.'));
} catch (e) {
e.message.should.containEql("'options.contentUrl' expected a string value");
return Promise.resolve();
}
});
it('throws if contentUrl is not a valid url', () => {
try {
validator({
contentUrl: 'www.invertase.io',
});
return Promise.reject(new Error('Did not throw Error.'));
} catch (e) {
e.message.should.containEql("'options.contentUrl' expected a valid HTTP or HTTPS url");
return Promise.resolve();
}
});
it('throws if contentUrl is too long', () => {
let str = '';
for (let i = 0; i < 530; i++) {
str += i.toString();
}
try {
validator({
contentUrl: `https://invertase.io?${str}`,
});
return Promise.reject(new Error('Did not throw Error.'));
} catch (e) {
e.message.should.containEql(
"'options.contentUrl' maximum length of a content URL is 512 characters",
);
return Promise.resolve();
}
});
it('accepts a contentUrl', () => {
const v = validator({
contentUrl: 'http://invertase.io/privacy-policy',
});
v.contentUrl.should.be.eql('http://invertase.io/privacy-policy');
});
});
describe('location', () => {
it('throws if not an array', () => {
try {
validator({
location: 'United Kingdom',
});
return Promise.reject(new Error('Did not throw Error.'));
} catch (e) {
e.message.should.containEql(
"'options.location' expected an array value containing a latitude & longitude number value",
);
return Promise.resolve();
}
});
it('throws if latitude not a number', () => {
try {
validator({
location: ['123', 123],
});
return Promise.reject(new Error('Did not throw Error.'));
} catch (e) {
e.message.should.containEql(
"'options.location' expected an array value containing a latitude & longitude number value",
);
return Promise.resolve();
}
});
it('throws if latitude is invalid', () => {
try {
validator({
location: [-100, 100],
});
return Promise.reject(new Error('Did not throw Error.'));
} catch (e) {
e.message.should.containEql(
"'options.location' latitude value must be a number between -90 and 90",
);
return Promise.resolve();
}
});
it('throws if longitude not a number', () => {
try {
validator({
location: [10, '123'],
});
return Promise.reject(new Error('Did not throw Error.'));
} catch (e) {
e.message.should.containEql(
"'options.location' expected an array value containing a latitude & longitude number value",
);
return Promise.resolve();
}
});
it('throws if longitude is invalid', () => {
try {
validator({
location: [50, 200],
});
return Promise.reject(new Error('Did not throw Error.'));
} catch (e) {
e.message.should.containEql(
"'options.location' longitude value must be a number between -180 and 180",
);
return Promise.resolve();
}
});
it('accepts a latitude and longitude', () => {
const v = validator({
location: [10, 20],
});
v.location.should.be.Array();
v.location[0].should.be.eql(10);
v.location[1].should.be.eql(20);
});
});
describe('locationAccuracy', () => {
it('throws if not a number', () => {
try {
validator({
locationAccuracy: '10',
});
return Promise.reject(new Error('Did not throw Error.'));
} catch (e) {
e.message.should.containEql("'options.locationAccuracy' expected a number value");
return Promise.resolve();
}
});
it('throws if less than 0', () => {
try {
validator({
locationAccuracy: -1,
});
return Promise.reject(new Error('Did not throw Error.'));
} catch (e) {
e.message.should.containEql("'options.locationAccuracy' expected a number greater than 0");
return Promise.resolve();
}
});
it('accepts locationAccuracy', () => {
const v = validator({
locationAccuracy: 10.5,
});
v.locationAccuracy.should.eql(10.5);
});
it('uses a defaultValue', () => {
const v = validator({});
v.locationAccuracy.should.eql(5);
});
});
describe('requestAgent', () => {
it('throws if not a string', () => {
try {
validator({
requestAgent: 1,
});
return Promise.reject(new Error('Did not throw Error.'));
} catch (e) {
e.message.should.containEql("'options.requestAgent' expected a string value");
return Promise.resolve();
}
});
it('accepts a requestAgent', () => {
const v = validator({
requestAgent: 'CoolAds',
});
v.requestAgent.should.eql('CoolAds');
});
});
});