Source code

Revision control

Copy as Markdown

Other Tools

Test Info: Warnings

/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
// Tests the weather related APIs in merino client.
"use strict";
ChromeUtils.defineESModuleGetters(this, {
MerinoClient: "moz-src:///browser/components/urlbar/MerinoClient.sys.mjs",
});
add_setup(async () => {
let cleanup = GeolocationTestUtils.stubGeolocation({
country_code: "JP",
region: "Kanagawa",
region_code: "14",
});
registerCleanupFunction(async function () {
await cleanup();
});
});
add_task(async function fetchWeather() {
const testData = [
{
params: {
source: "test",
timeoutMs: 100,
},
expected: {
query: "",
otherParams: {
source: "test",
country: "JP",
region: "14",
city: "Kanagawa",
},
timeoutMs: 100,
},
},
{
params: {
source: "test",
locationName: "location name",
},
expected: {
query: "location name",
otherParams: {
source: "test",
},
},
},
{
params: {
source: "test",
city: "test city",
},
expected: {
query: "",
otherParams: {
source: "test",
city: "test city",
},
},
},
{
params: {
source: "test",
country: "test country code",
},
expected: {
query: "",
otherParams: {
source: "test",
country: "test country code",
},
},
},
{
params: {
source: "test",
region: "r1,r2,r3",
},
expected: {
query: "",
otherParams: {
source: "test",
region: "r1,r2,r3",
},
},
},
{
params: {
source: "test",
city: "test city",
country: "test country code",
region: "r1,r2,r3",
},
expected: {
query: "",
otherParams: {
source: "test",
city: "test city",
country: "test country code",
region: "r1,r2,r3",
},
},
},
{
params: {
source: "test",
locationName: "location name",
city: "test city",
country: "test country code",
region: "r1,r2,r3",
},
expected: {
query: "location name",
otherParams: {
source: "test",
},
},
},
];
let merino = new MerinoClient("test");
for (let { params, expected } of testData) {
let stub = sinon.stub(merino, "fetch").resolves([]);
await merino.fetchWeather(params);
Assert.ok(stub.calledOnce);
Assert.deepEqual(stub.firstCall.args[0], {
providers: ["accuweather"],
query: expected.query,
otherParams: {
request_type: "weather",
...expected.otherParams,
},
timeoutMs: expected.timeoutMs,
});
stub.restore();
}
});
add_task(async function autoCompleteWeatherLocation() {
const testData = [
{
params: {
source: "test",
timeoutMs: 100,
},
expected: {
query: "",
otherParams: {
source: "test",
},
timeoutMs: 100,
},
},
{
params: {
source: "test",
query: "q",
timeoutMs: 100,
},
expected: {
query: "q",
otherParams: {
source: "test",
},
timeoutMs: 100,
},
},
];
let merino = new MerinoClient("test");
for (let { params, expected } of testData) {
let stub = sinon.stub(merino, "fetch").resolves([]);
await merino.autoCompleteWeatherLocation(params);
Assert.ok(stub.calledOnce);
Assert.deepEqual(stub.firstCall.args[0], {
providers: ["accuweather"],
query: expected.query,
otherParams: {
request_type: "location",
...expected.otherParams,
},
timeoutMs: expected.timeoutMs,
});
stub.restore();
}
});