Bug 1120003 Hoist Loop REST errnos and websocket reasons, patch=jaws,dmose r=Standard8

This commit is contained in:
Dan Mosedale 2015-01-20 13:15:21 -08:00
Родитель 1f329e4468
Коммит 5fd298ebbf
16 изменённых файлов: 118 добавлений и 88 удалений

Просмотреть файл

@ -11,6 +11,8 @@ loop.conversationViews = (function(mozL10n) {
var CALL_STATES = loop.store.CALL_STATES;
var CALL_TYPES = loop.shared.utils.CALL_TYPES;
var REST_ERRNOS = loop.shared.utils.REST_ERRNOS;
var WEBSOCKET_REASONS = loop.shared.utils.WEBSOCKET_REASONS;
var sharedActions = loop.shared.actions;
var sharedUtils = loop.shared.utils;
var sharedViews = loop.shared.views;
@ -770,8 +772,8 @@ loop.conversationViews = (function(mozL10n) {
var callStateReason =
this.props.store.getStoreState("callStateReason");
if (callStateReason === "reject" || callStateReason === "busy" ||
callStateReason === "user-unknown") {
if (callStateReason === WEBSOCKET_REASONS.REJECT || callStateReason === WEBSOCKET_REASONS.BUSY ||
callStateReason === REST_ERRNOS.USER_UNAVAILABLE) {
var contactDisplayName = _getContactDisplayName(this.props.contact);
if (contactDisplayName.length) {
return mozL10n.get(

Просмотреть файл

@ -11,6 +11,8 @@ loop.conversationViews = (function(mozL10n) {
var CALL_STATES = loop.store.CALL_STATES;
var CALL_TYPES = loop.shared.utils.CALL_TYPES;
var REST_ERRNOS = loop.shared.utils.REST_ERRNOS;
var WEBSOCKET_REASONS = loop.shared.utils.WEBSOCKET_REASONS;
var sharedActions = loop.shared.actions;
var sharedUtils = loop.shared.utils;
var sharedViews = loop.shared.views;
@ -770,8 +772,8 @@ loop.conversationViews = (function(mozL10n) {
var callStateReason =
this.props.store.getStoreState("callStateReason");
if (callStateReason === "reject" || callStateReason === "busy" ||
callStateReason === "user-unknown") {
if (callStateReason === WEBSOCKET_REASONS.REJECT || callStateReason === WEBSOCKET_REASONS.BUSY ||
callStateReason === REST_ERRNOS.USER_UNAVAILABLE) {
var contactDisplayName = _getContactDisplayName(this.props.contact);
if (contactDisplayName.length) {
return mozL10n.get(

Просмотреть файл

@ -11,15 +11,11 @@ loop.store.ActiveRoomStore = (function() {
"use strict";
var sharedActions = loop.shared.actions;
var FAILURE_REASONS = loop.shared.utils.FAILURE_REASONS;
var FAILURE_DETAILS = loop.shared.utils.FAILURE_DETAILS;
// Error numbers taken from
// https://github.com/mozilla-services/loop-server/blob/master/loop/errno.json
var SERVER_CODES = loop.store.SERVER_CODES = {
INVALID_TOKEN: 105,
EXPIRED: 111,
ROOM_FULL: 202
};
var REST_ERRNOS = loop.shared.utils.REST_ERRNOS;
var ROOM_STATES = loop.store.ROOM_STATES;
/**
@ -84,11 +80,11 @@ loop.store.ActiveRoomStore = (function() {
roomFailure: function(actionData) {
function getReason(serverCode) {
switch (serverCode) {
case SERVER_CODES.INVALID_TOKEN:
case SERVER_CODES.EXPIRED:
return FAILURE_REASONS.EXPIRED_OR_INVALID;
case REST_ERRNOS.INVALID_TOKEN:
case REST_ERRNOS.EXPIRED:
return FAILURE_DETAILS.EXPIRED_OR_INVALID;
default:
return FAILURE_REASONS.UNKNOWN;
return FAILURE_DETAILS.UNKNOWN;
}
}
@ -100,7 +96,7 @@ loop.store.ActiveRoomStore = (function() {
failureReason: getReason(actionData.error.errno)
});
this._leaveRoom(actionData.error.errno === SERVER_CODES.ROOM_FULL ?
this._leaveRoom(actionData.error.errno === REST_ERRNOS.ROOM_FULL ?
ROOM_STATES.FULL : ROOM_STATES.FAILED);
},

Просмотреть файл

@ -11,6 +11,7 @@ loop.store = loop.store || {};
var sharedActions = loop.shared.actions;
var CALL_TYPES = loop.shared.utils.CALL_TYPES;
var REST_ERRNOS = loop.shared.utils.REST_ERRNOS;
/**
* Websocket states taken from:
* https://docs.services.mozilla.com/loop/apis.html#call-progress-state-change-progress
@ -375,8 +376,8 @@ loop.store = loop.store || {};
if (err) {
console.error("Failed to get outgoing call data", err);
var failureReason = "setup";
if (err.errno == 122) {
failureReason = "user-unknown";
if (err.errno == REST_ERRNOS.USER_UNAVAILABLE) {
failureReason = REST_ERRNOS.USER_UNAVAILABLE;
}
this.dispatcher.dispatch(
new sharedActions.ConnectionFailure({reason: failureReason}));

Просмотреть файл

@ -8,7 +8,7 @@ var loop = loop || {};
loop.OTSdkDriver = (function() {
var sharedActions = loop.shared.actions;
var FAILURE_REASONS = loop.shared.utils.FAILURE_REASONS;
var FAILURE_DETAILS = loop.shared.utils.FAILURE_DETAILS;
/**
* This is a wrapper for the OT sdk. It is used to translate the SDK events into
@ -160,7 +160,7 @@ loop.OTSdkDriver = (function() {
if (error) {
console.error("Failed to complete connection", error);
this.dispatcher.dispatch(new sharedActions.ConnectionFailure({
reason: FAILURE_REASONS.COULD_NOT_CONNECT
reason: FAILURE_DETAILS.COULD_NOT_CONNECT
}));
return;
}
@ -197,10 +197,10 @@ loop.OTSdkDriver = (function() {
var reason;
switch (event.reason) {
case "networkDisconnected":
reason = FAILURE_REASONS.NETWORK_DISCONNECTED;
reason = FAILURE_DETAILS.NETWORK_DISCONNECTED;
break;
case "forceDisconnected":
reason = FAILURE_REASONS.EXPIRED_OR_INVALID;
reason = FAILURE_DETAILS.EXPIRED_OR_INVALID;
break;
default:
// Other cases don't need to be handled.
@ -278,7 +278,7 @@ loop.OTSdkDriver = (function() {
event.preventDefault();
this.dispatcher.dispatch(new sharedActions.ConnectionFailure({
reason: FAILURE_REASONS.MEDIA_DENIED
reason: FAILURE_DETAILS.MEDIA_DENIED
}));
},

Просмотреть файл

@ -17,7 +17,24 @@ loop.shared.utils = (function(mozL10n) {
AUDIO_ONLY: "audio"
};
var FAILURE_REASONS = {
var REST_ERRNOS = {
INVALID_TOKEN: 105,
EXPIRED: 111,
USER_UNAVAILABLE: 122,
ROOM_FULL: 202
};
var WEBSOCKET_REASONS = {
ANSWERED_ELSEWHERE: "answered-elsewhere",
BUSY: "busy",
CANCEL: "cancel",
CLOSED: "closed",
MEDIA_FAIL: "media-fail",
REJECT: "reject",
TIMEOUT: "timeout"
};
var FAILURE_DETAILS = {
MEDIA_DENIED: "reason-media-denied",
COULD_NOT_CONNECT: "reason-could-not-connect",
NETWORK_DISCONNECTED: "reason-network-disconnected",
@ -118,7 +135,9 @@ loop.shared.utils = (function(mozL10n) {
return {
CALL_TYPES: CALL_TYPES,
FAILURE_REASONS: FAILURE_REASONS,
FAILURE_DETAILS: FAILURE_DETAILS,
REST_ERRNOS: REST_ERRNOS,
WEBSOCKET_REASONS: WEBSOCKET_REASONS,
Helper: Helper,
composeCallUrlEmail: composeCallUrlEmail,
formatDate: formatDate,

Просмотреть файл

@ -8,6 +8,8 @@ var loop = loop || {};
loop.CallConnectionWebSocket = (function() {
"use strict";
var WEBSOCKET_REASONS = loop.shared.utils.WEBSOCKET_REASONS;
// Response timeout is 5 seconds as per API.
var kResponseTimeout = 5000;
@ -66,7 +68,7 @@ loop.CallConnectionWebSocket = (function() {
var timeout = setTimeout(function() {
if (this.connectDetails && this.connectDetails.reject) {
this.connectDetails.reject("timeout");
this.connectDetails.reject(WEBSOCKET_REASONS.TIMEOUT);
this._clearConnectionFlags();
}
}.bind(this), kResponseTimeout);
@ -139,7 +141,7 @@ loop.CallConnectionWebSocket = (function() {
this._send({
messageType: "action",
event: "terminate",
reason: "reject"
reason: WEBSOCKET_REASONS.REJECT
});
},
@ -172,7 +174,7 @@ loop.CallConnectionWebSocket = (function() {
this._send({
messageType: "action",
event: "terminate",
reason: "cancel"
reason: WEBSOCKET_REASONS.CANCEL
});
},
@ -183,7 +185,7 @@ loop.CallConnectionWebSocket = (function() {
this._send({
messageType: "action",
event: "terminate",
reason: "media-fail"
reason: WEBSOCKET_REASONS.MEDIA_FAIL
});
},
@ -228,9 +230,9 @@ loop.CallConnectionWebSocket = (function() {
* @param {Object} event The websocket onmessage event.
*/
_onmessage: function(event) {
var msg;
var msgData;
try {
msg = JSON.parse(event.data);
msgData = JSON.parse(event.data);
} catch (x) {
console.error("Error parsing received message:", x);
return;
@ -239,15 +241,15 @@ loop.CallConnectionWebSocket = (function() {
this._log("WS Receiving", event.data);
var previousState = this._lastServerState;
this._lastServerState = msg.state;
this._lastServerState = msgData.state;
switch(msg.messageType) {
switch(msgData.messageType) {
case "hello":
this._completeConnection(msg.state);
this._completeConnection(msgData.state);
break;
case "progress":
this.trigger("progress:" + msg.state);
this.trigger("progress", msg, previousState);
this.trigger("progress:" + msgData.state);
this.trigger("progress", msgData, previousState);
break;
}
},

Просмотреть файл

@ -11,7 +11,7 @@ var loop = loop || {};
loop.standaloneRoomViews = (function(mozL10n) {
"use strict";
var FAILURE_REASONS = loop.shared.utils.FAILURE_REASONS;
var FAILURE_DETAILS = loop.shared.utils.FAILURE_DETAILS;
var ROOM_STATES = loop.store.ROOM_STATES;
var sharedActions = loop.shared.actions;
var sharedMixins = loop.shared.mixins;
@ -59,9 +59,9 @@ loop.standaloneRoomViews = (function(mozL10n) {
*/
_getFailureString: function() {
switch(this.props.failureReason) {
case FAILURE_REASONS.MEDIA_DENIED:
case FAILURE_DETAILS.MEDIA_DENIED:
return mozL10n.get("rooms_media_denied_message");
case FAILURE_REASONS.EXPIRED_OR_INVALID:
case FAILURE_DETAILS.EXPIRED_OR_INVALID:
return mozL10n.get("rooms_unavailable_notification_message");
default:
return mozL10n.get("status_error");

Просмотреть файл

@ -11,7 +11,7 @@ var loop = loop || {};
loop.standaloneRoomViews = (function(mozL10n) {
"use strict";
var FAILURE_REASONS = loop.shared.utils.FAILURE_REASONS;
var FAILURE_DETAILS = loop.shared.utils.FAILURE_DETAILS;
var ROOM_STATES = loop.store.ROOM_STATES;
var sharedActions = loop.shared.actions;
var sharedMixins = loop.shared.mixins;
@ -59,9 +59,9 @@ loop.standaloneRoomViews = (function(mozL10n) {
*/
_getFailureString: function() {
switch(this.props.failureReason) {
case FAILURE_REASONS.MEDIA_DENIED:
case FAILURE_DETAILS.MEDIA_DENIED:
return mozL10n.get("rooms_media_denied_message");
case FAILURE_REASONS.EXPIRED_OR_INVALID:
case FAILURE_DETAILS.EXPIRED_OR_INVALID:
return mozL10n.get("rooms_unavailable_notification_message");
default:
return mozL10n.get("status_error");

Просмотреть файл

@ -19,6 +19,7 @@ loop.webapp = (function($, _, OT, mozL10n) {
var sharedModels = loop.shared.models;
var sharedViews = loop.shared.views;
var sharedUtils = loop.shared.utils;
var WEBSOCKET_REASONS = loop.shared.utils.WEBSOCKET_REASONS;
var multiplexGum = loop.standaloneMedia.multiplexGum;
@ -892,7 +893,7 @@ loop.webapp = (function($, _, OT, mozL10n) {
_handleCallTerminated: function(reason) {
multiplexGum.reset();
if (reason === "cancel") {
if (reason === WEBSOCKET_REASONS.CANCEL) {
this.setState({callStatus: "start"});
return;
}

Просмотреть файл

@ -12,6 +12,8 @@ describe("loop.conversationViews", function () {
var fakeMozLoop, fakeWindow;
var CALL_STATES = loop.store.CALL_STATES;
var REST_ERRNOS = loop.shared.utils.REST_ERRNOS;
var WEBSOCKET_REASONS = loop.shared.utils.WEBSOCKET_REASONS;
// XXX refactor to Just Work with "sandbox.stubComponent" or else
// just pass in the sandbox and put somewhere generally usable
@ -415,18 +417,18 @@ describe("loop.conversationViews", function () {
expect(fakeAudio.loop).to.equal(false);
});
it("should show 'something went wrong' when the reason is 'media-fail'",
it("should show 'something went wrong' when the reason is WEBSOCKET_REASONS.MEDIA_FAIL",
function () {
store.setStoreState({callStateReason: "media-fail"});
store.setStoreState({callStateReason: WEBSOCKET_REASONS.MEDIA_FAIL});
view = mountTestComponent({contact: contact});
sinon.assert.calledWith(document.mozL10n.get, "generic_failure_title");
});
it("should show 'contact unavailable' when the reason is 'reject'",
it("should show 'contact unavailable' when the reason is WEBSOCKET_REASONS.REJECT",
function () {
store.setStoreState({callStateReason: "reject"});
store.setStoreState({callStateReason: WEBSOCKET_REASONS.REJECT});
view = mountTestComponent({contact: contact});
@ -435,9 +437,9 @@ describe("loop.conversationViews", function () {
{contactName: loop.conversationViews._getContactDisplayName(contact)});
});
it("should show 'contact unavailable' when the reason is 'busy'",
it("should show 'contact unavailable' when the reason is WEBSOCKET_REASONS.BUSY",
function () {
store.setStoreState({callStateReason: "busy"});
store.setStoreState({callStateReason: WEBSOCKET_REASONS.BUSY});
view = mountTestComponent({contact: contact});
@ -456,9 +458,9 @@ describe("loop.conversationViews", function () {
"generic_failure_title");
});
it("should show 'contact unavailable' when the reason is 'user-unknown'",
it("should show 'contact unavailable' when the reason is REST_ERRNOS.USER_UNAVAILABLE",
function () {
store.setStoreState({callStateReason: "user-unknown"});
store.setStoreState({callStateReason: REST_ERRNOS.USER_UNAVAILABLE});
view = mountTestComponent({contact: contact});
@ -468,8 +470,8 @@ describe("loop.conversationViews", function () {
});
it("should display a generic contact unavailable msg when the reason is" +
" 'busy' and no display name is available", function() {
store.setStoreState({callStateReason: "busy"});
" WEBSOCKET_REASONS.BUSY and no display name is available", function() {
store.setStoreState({callStateReason: WEBSOCKET_REASONS.BUSY});
var phoneOnlyContact = {
tel: [{"pref": true, type: "work", value: ""}]
};
@ -858,7 +860,7 @@ describe("loop.conversationViews", function () {
promise.then(function() {
icView._websocket.trigger("progress", {
state: "terminated",
reason: "timeout"
reason: WEBSOCKET_REASONS.TIMEOUT
}, "alerting");
sinon.assert.calledOnce(navigator.mozLoop.stopAlerting);
@ -870,7 +872,7 @@ describe("loop.conversationViews", function () {
promise.then(function() {
icView._websocket.trigger("progress", {
state: "terminated",
reason: "closed"
reason: WEBSOCKET_REASONS.CLOSED
}, "alerting");
sinon.assert.calledOnce(icView._websocket.close);
@ -882,7 +884,7 @@ describe("loop.conversationViews", function () {
promise.then(function() {
icView._websocket.trigger("progress", {
state: "terminated",
reason: "answered-elsewhere"
reason: WEBSOCKET_REASONS.ANSWERED_ELSEWHERE
}, "alerting");
sandbox.clock.tick(1);
@ -901,7 +903,7 @@ describe("loop.conversationViews", function () {
promise.then(function() {
icView._websocket.trigger("progress", {
state: "terminated",
reason: "media-fail"
reason: WEBSOCKET_REASONS.MEDIA_FAIL
}, "connecting");
expect(icView.state.callStatus).eql("end");
@ -913,7 +915,7 @@ describe("loop.conversationViews", function () {
promise.then(function() {
icView._websocket.trigger("progress", {
state: "terminated",
reason: "media-fail"
reason: WEBSOCKET_REASONS.MEDIA_FAIL
}, "connecting");
sinon.assert.calledOnce(navigator.mozLoop.stopAlerting);

Просмотреть файл

@ -6,9 +6,9 @@ var sharedActions = loop.shared.actions;
describe("loop.store.ActiveRoomStore", function () {
"use strict";
var SERVER_CODES = loop.store.SERVER_CODES;
var REST_ERRNOS = loop.shared.utils.REST_ERRNOS;
var ROOM_STATES = loop.store.ROOM_STATES;
var FAILURE_REASONS = loop.shared.utils.FAILURE_REASONS;
var FAILURE_DETAILS = loop.shared.utils.FAILURE_DETAILS;
var sandbox, dispatcher, store, fakeMozLoop, fakeSdkDriver;
var fakeMultiplexGum;
@ -94,7 +94,7 @@ describe("loop.store.ActiveRoomStore", function () {
});
it("should set the state to `FULL` on server error room full", function() {
fakeError.errno = SERVER_CODES.ROOM_FULL;
fakeError.errno = REST_ERRNOS.ROOM_FULL;
store.roomFailure({error: fakeError});
@ -105,27 +105,27 @@ describe("loop.store.ActiveRoomStore", function () {
store.roomFailure({error: fakeError});
expect(store._storeState.roomState).eql(ROOM_STATES.FAILED);
expect(store._storeState.failureReason).eql(FAILURE_REASONS.UNKNOWN);
expect(store._storeState.failureReason).eql(FAILURE_DETAILS.UNKNOWN);
});
it("should set the failureReason to EXPIRED_OR_INVALID on server error: " +
"invalid token", function() {
fakeError.errno = SERVER_CODES.INVALID_TOKEN;
fakeError.errno = REST_ERRNOS.INVALID_TOKEN;
store.roomFailure({error: fakeError});
expect(store._storeState.roomState).eql(ROOM_STATES.FAILED);
expect(store._storeState.failureReason).eql(FAILURE_REASONS.EXPIRED_OR_INVALID);
expect(store._storeState.failureReason).eql(FAILURE_DETAILS.EXPIRED_OR_INVALID);
});
it("should set the failureReason to EXPIRED_OR_INVALID on server error: " +
"expired", function() {
fakeError.errno = SERVER_CODES.EXPIRED;
fakeError.errno = REST_ERRNOS.EXPIRED;
store.roomFailure({error: fakeError});
expect(store._storeState.roomState).eql(ROOM_STATES.FAILED);
expect(store._storeState.failureReason).eql(FAILURE_REASONS.EXPIRED_OR_INVALID);
expect(store._storeState.failureReason).eql(FAILURE_DETAILS.EXPIRED_OR_INVALID);
});
it("should reset the multiplexGum", function() {

Просмотреть файл

@ -8,6 +8,7 @@ describe("loop.store.ConversationStore", function () {
var CALL_STATES = loop.store.CALL_STATES;
var WS_STATES = loop.store.WS_STATES;
var WEBSOCKET_REASONS = loop.shared.utils.WEBSOCKET_REASONS;
var sharedActions = loop.shared.actions;
var sharedUtils = loop.shared.utils;
var sandbox, dispatcher, client, store, fakeSessionData, sdkDriver;
@ -759,7 +760,7 @@ describe("loop.store.ConversationStore", function () {
it("should dispatch a connection failure action on 'terminate'", function() {
store._websocket.trigger("progress", {
state: WS_STATES.TERMINATED,
reason: "reject"
reason: WEBSOCKET_REASONS.REJECT
});
sinon.assert.calledOnce(dispatcher.dispatch);
@ -767,7 +768,7 @@ describe("loop.store.ConversationStore", function () {
sinon.assert.calledWithMatch(dispatcher.dispatch,
sinon.match.hasOwn("name", "connectionFailure"));
sinon.assert.calledWithMatch(dispatcher.dispatch,
sinon.match.hasOwn("reason", "reject"));
sinon.match.hasOwn("reason", WEBSOCKET_REASONS.REJECT));
});
it("should dispatch a connection progress action on 'alerting'", function() {

Просмотреть файл

@ -7,7 +7,7 @@ describe("loop.OTSdkDriver", function () {
"use strict";
var sharedActions = loop.shared.actions;
var FAILURE_REASONS = loop.shared.utils.FAILURE_REASONS;
var FAILURE_DETAILS = loop.shared.utils.FAILURE_DETAILS;
var sandbox;
var dispatcher, driver, publisher, sdk, session, sessionData;
var fakeLocalElement, fakeRemoteElement, publisherConfig, fakeEvent;
@ -153,7 +153,7 @@ describe("loop.OTSdkDriver", function () {
sinon.assert.calledWithMatch(dispatcher.dispatch,
sinon.match.hasOwn("name", "connectionFailure"));
sinon.assert.calledWithMatch(dispatcher.dispatch,
sinon.match.hasOwn("reason", FAILURE_REASONS.COULD_NOT_CONNECT));
sinon.match.hasOwn("reason", FAILURE_DETAILS.COULD_NOT_CONNECT));
});
});
});
@ -265,7 +265,7 @@ describe("loop.OTSdkDriver", function () {
sinon.assert.calledWithMatch(dispatcher.dispatch,
sinon.match.hasOwn("name", "connectionFailure"));
sinon.assert.calledWithMatch(dispatcher.dispatch,
sinon.match.hasOwn("reason", FAILURE_REASONS.NETWORK_DISCONNECTED));
sinon.match.hasOwn("reason", FAILURE_DETAILS.NETWORK_DISCONNECTED));
});
it("should dispatch a connectionFailure action if the session was " +
@ -278,7 +278,7 @@ describe("loop.OTSdkDriver", function () {
sinon.assert.calledWithMatch(dispatcher.dispatch,
sinon.match.hasOwn("name", "connectionFailure"));
sinon.assert.calledWithMatch(dispatcher.dispatch,
sinon.match.hasOwn("reason", FAILURE_REASONS.EXPIRED_OR_INVALID));
sinon.match.hasOwn("reason", FAILURE_DETAILS.EXPIRED_OR_INVALID));
});
});
@ -376,7 +376,7 @@ describe("loop.OTSdkDriver", function () {
sinon.assert.calledWithMatch(dispatcher.dispatch,
sinon.match.hasOwn("name", "connectionFailure"));
sinon.assert.calledWithMatch(dispatcher.dispatch,
sinon.match.hasOwn("reason", FAILURE_REASONS.MEDIA_DENIED));
sinon.match.hasOwn("reason", FAILURE_DETAILS.MEDIA_DENIED));
});
});

Просмотреть файл

@ -6,9 +6,12 @@
var expect = chai.expect;
describe("loop.CallConnectionWebSocket", function() {
"use strict";
var WEBSOCKET_REASONS = loop.shared.utils.WEBSOCKET_REASONS;
var sandbox,
dummySocket;
@ -80,7 +83,7 @@ describe("loop.CallConnectionWebSocket", function() {
sandbox.clock.tick(5101);
promise.then(function() {}, function(error) {
expect(error).to.be.equal("timeout");
expect(error).to.be.equal(WEBSOCKET_REASONS.TIMEOUT);
done();
});
});
@ -157,7 +160,7 @@ describe("loop.CallConnectionWebSocket", function() {
sinon.assert.calledWithExactly(dummySocket.send, JSON.stringify({
messageType: "action",
event: "terminate",
reason: "reject"
reason: WEBSOCKET_REASONS.REJECT
}));
});
});
@ -191,7 +194,7 @@ describe("loop.CallConnectionWebSocket", function() {
});
describe("#cancel", function() {
it("should send a terminate message to the server with a reason of cancel",
it("should send a terminate message to the server with a reason of WEBSOCKET_REASONS.CANCEL",
function() {
callWebSocket.promiseConnect();
@ -201,13 +204,13 @@ describe("loop.CallConnectionWebSocket", function() {
sinon.assert.calledWithExactly(dummySocket.send, JSON.stringify({
messageType: "action",
event: "terminate",
reason: "cancel"
reason: WEBSOCKET_REASONS.CANCEL
}));
});
});
describe("#mediaFail", function() {
it("should send a terminate message to the server with a reason of media-fail",
it("should send a terminate message to the server with a reason of WEBSOCKET_REASONS.MEDIA_FAIL",
function() {
callWebSocket.promiseConnect();
@ -217,7 +220,7 @@ describe("loop.CallConnectionWebSocket", function() {
sinon.assert.calledWithExactly(dummySocket.send, JSON.stringify({
messageType: "action",
event: "terminate",
reason: "media-fail"
reason: WEBSOCKET_REASONS.MEDIA_FAIL
}));
});
});
@ -234,7 +237,7 @@ describe("loop.CallConnectionWebSocket", function() {
var eventData = {
messageType: "progress",
state: "terminate",
reason: "reject"
reason: WEBSOCKET_REASONS.REJECT
};
dummySocket.onmessage({
@ -261,7 +264,7 @@ describe("loop.CallConnectionWebSocket", function() {
var currentEventData = {
messageType: "progress",
state: "terminate",
reason: "reject"
reason: WEBSOCKET_REASONS.REJECT
};
dummySocket.onmessage({
@ -277,7 +280,7 @@ describe("loop.CallConnectionWebSocket", function() {
var eventData = {
messageType: "progress",
state: "terminate",
reason: "reject"
reason: WEBSOCKET_REASONS.REJECT
};
dummySocket.onmessage({

Просмотреть файл

@ -20,7 +20,8 @@ describe("loop.webapp", function() {
stubGetPermsAndCacheMedia,
fakeAudioXHR,
dispatcher,
feedbackStore;
feedbackStore,
WEBSOCKET_REASONS = loop.shared.utils.WEBSOCKET_REASONS;
beforeEach(function() {
sandbox = sinon.sandbox.create();
@ -242,7 +243,7 @@ describe("loop.webapp", function() {
it("should display the FailedConversationView", function() {
ocView._websocket.trigger("progress", {
state: "terminated",
reason: "reject"
reason: WEBSOCKET_REASONS.REJECT
});
TestUtils.findRenderedComponentWithType(ocView,
@ -257,17 +258,17 @@ describe("loop.webapp", function() {
ocView._websocket.trigger("progress", {
state: "terminated",
reason: "reject"
reason: WEBSOCKET_REASONS.REJECT
});
sinon.assert.calledOnce(multiplexGum.reset);
});
it("should display an error message if the reason is not 'cancel'",
it("should display an error message if the reason is not WEBSOCKET_REASONS.CANCEL",
function() {
ocView._websocket.trigger("progress", {
state: "terminated",
reason: "reject"
reason: WEBSOCKET_REASONS.REJECT
});
sinon.assert.calledOnce(notifications.errorL10n);
@ -275,11 +276,11 @@ describe("loop.webapp", function() {
"call_timeout_notification_text");
});
it("should not display an error message if the reason is 'cancel'",
it("should not display an error message if the reason is WEBSOCKET_REASONS.CANCEL",
function() {
ocView._websocket.trigger("progress", {
state: "terminated",
reason: "cancel"
reason: WEBSOCKET_REASONS.CANCEL
});
sinon.assert.notCalled(notifications.errorL10n);