mirror of
https://github.com/mozilla/gecko-dev.git
synced 2025-11-11 13:48:23 +02:00
113 lines
3.8 KiB
JavaScript
113 lines
3.8 KiB
JavaScript
/* 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/. */
|
|
|
|
XPCOMUtils.defineLazyModuleGetter(this, "Chat",
|
|
"resource:///modules/Chat.jsm");
|
|
|
|
let openChatOrig = Chat.open;
|
|
|
|
const firstCallId = 4444333221;
|
|
const secondCallId = 1001100101;
|
|
|
|
function test_send_busy_on_call() {
|
|
let actionReceived = false;
|
|
|
|
let msgHandler = function(msg) {
|
|
if (msg.messageType &&
|
|
msg.messageType === "action" &&
|
|
msg.event === "terminate" &&
|
|
msg.reason === "busy") {
|
|
actionReceived = true;
|
|
}
|
|
};
|
|
|
|
let mockWebSocket = new MockWebSocketChannel({defaultMsgHandler: msgHandler});
|
|
Services.io.offline = false;
|
|
|
|
MozLoopService.register(mockPushHandler, mockWebSocket).then(() => {
|
|
let opened = 0;
|
|
Chat.open = function() {
|
|
opened++;
|
|
};
|
|
|
|
mockPushHandler.notify(1);
|
|
|
|
waitForCondition(() => {return actionReceived && opened > 0}).then(() => {
|
|
do_check_true(opened === 1, "should open only one chat window");
|
|
do_check_true(actionReceived, "should respond with busy/reject to second call");
|
|
MozLoopService.releaseCallData(firstCallId);
|
|
run_next_test();
|
|
}, () => {
|
|
do_throw("should have opened a chat window for first call and rejected second call");
|
|
});
|
|
|
|
});
|
|
}
|
|
|
|
add_test(test_send_busy_on_call); //FXA call accepted, Guest call rejected
|
|
add_test(test_send_busy_on_call); //No FXA call, first Guest call accepted, second rejected
|
|
|
|
function run_test()
|
|
{
|
|
setupFakeLoopServer();
|
|
|
|
// Setup fake login state so we get FxA requests.
|
|
const MozLoopServiceInternal = Cu.import("resource:///modules/loop/MozLoopService.jsm", {}).MozLoopServiceInternal;
|
|
MozLoopServiceInternal.fxAOAuthTokenData = {token_type:"bearer",access_token:"1bad3e44b12f77a88fe09f016f6a37c42e40f974bc7a8b432bb0d2f0e37e1752",scope:"profile"};
|
|
MozLoopServiceInternal.fxAOAuthProfile = {email: "test@example.com", uid: "abcd1234"};
|
|
|
|
// For each notification received from the PushServer, MozLoopService will first query
|
|
// for any pending calls on the FxA hawk session and then again using the guest session.
|
|
// A pair of response objects in the callsResponses array will be consumed for each
|
|
// notification. The even calls object is for the FxA session, the odd the Guest session.
|
|
|
|
let callsRespCount = 0;
|
|
let callsResponses = [
|
|
{calls: [{callId: firstCallId,
|
|
websocketToken: "0deadbeef0",
|
|
progressURL: "wss://localhost:5000/websocket"}]},
|
|
{calls: [{callId: secondCallId,
|
|
websocketToken: "1deadbeef1",
|
|
progressURL: "wss://localhost:5000/websocket"}]},
|
|
|
|
{calls: []},
|
|
{calls: [{callId: firstCallId,
|
|
websocketToken: "0deadbeef0",
|
|
progressURL: "wss://localhost:5000/websocket"},
|
|
{callId: secondCallId,
|
|
websocketToken: "1deadbeef1",
|
|
progressURL: "wss://localhost:5000/websocket"}]},
|
|
];
|
|
|
|
loopServer.registerPathHandler("/registration", (request, response) => {
|
|
response.setStatusLine(null, 200, "OK");
|
|
response.processAsync();
|
|
response.finish();
|
|
});
|
|
|
|
loopServer.registerPathHandler("/calls", (request, response) => {
|
|
response.setStatusLine(null, 200, "OK");
|
|
|
|
if (callsRespCount >= callsResponses.length) {
|
|
callsRespCount = 0;
|
|
}
|
|
|
|
response.write(JSON.stringify(callsResponses[callsRespCount++]));
|
|
response.processAsync();
|
|
response.finish();
|
|
});
|
|
|
|
do_register_cleanup(function() {
|
|
// Revert original Chat.open implementation
|
|
Chat.open = openChatOrig;
|
|
|
|
// Revert fake login state
|
|
MozLoopServiceInternal.fxAOAuthTokenData = null;
|
|
|
|
// clear test pref
|
|
Services.prefs.clearUserPref("loop.seenToS");
|
|
});
|
|
|
|
run_next_test();
|
|
}
|