gecko-dev/browser/components/loop/test/shared/fxOSActiveRoomStore_test.js

212 lines
5.3 KiB
JavaScript

/* global chai, loop */
var expect = chai.expect;
var sharedActions = loop.shared.actions;
describe("loop.store.FxOSActiveRoomStore", function () {
"use strict";
var ROOM_STATES = loop.store.ROOM_STATES;
var sandbox;
var dispatcher;
var fakeMozLoop;
var store;
beforeEach(function() {
sandbox = sinon.sandbox.create();
sandbox.useFakeTimers();
dispatcher = new loop.Dispatcher();
sandbox.stub(dispatcher, "dispatch");
fakeMozLoop = {
setLoopPref: sandbox.stub(),
rooms: {
join: sinon.stub()
}
};
store = new loop.store.FxOSActiveRoomStore(dispatcher, {
mozLoop: fakeMozLoop
});
});
afterEach(function() {
sandbox.restore();
});
describe("#FxOSActiveRoomStore - constructor", function() {
it("should throw an error if mozLoop is missing", function() {
expect(function() {
new loop.store.FxOSActiveRoomStore(dispatcher);
}).to.Throw(/mozLoop/);
});
});
describe("#FxOSActiveRoomStore - fetchServerData", function() {
it("should save the token", function() {
store.fetchServerData(new sharedActions.FetchServerData({
windowType: "room",
token: "fakeToken"
}));
expect(store.getStoreState().roomToken).eql("fakeToken");
});
it("should set the state to `READY`", function() {
store.fetchServerData(new sharedActions.FetchServerData({
windowType: "room",
token: "fakeToken"
}));
expect(store.getStoreState().roomState).eql(ROOM_STATES.READY);
});
});
describe("#FxOSActiveRoomStore - setupOutgoingRoom", function() {
var realMozActivity;
var _activityDetail;
var _onerror;
function fireError(errorName) {
_onerror({
target: {
error: {
name: errorName
}
}
});
}
before(function() {
realMozActivity = window.MozActivity;
window.MozActivity = function(activityDetail) {
_activityDetail = activityDetail;
return {
set onerror(cbk) {
_onerror = cbk;
}
};
};
});
after(function() {
window.MozActivity = realMozActivity;
});
beforeEach(function() {
sandbox.stub(console, "error");
_activityDetail = undefined;
_onerror = undefined;
});
afterEach(function() {
sandbox.restore();
});
it("should reset failureReason", function() {
store.setStoreState({failureReason: "Test"});
store.joinRoom();
expect(store.getStoreState().failureReason).eql(undefined);
});
it("should create an activity", function() {
store.setStoreState({
roomToken: "fakeToken",
token: "fakeToken"
});
expect(_activityDetail).to.not.exist;
store.joinRoom();
expect(_activityDetail).to.exist;
expect(_activityDetail).eql({
name: "room-call",
data: {
type: "loop/rToken",
token: "fakeToken"
}
});
});
it("should change the store state when the activity fail with a " +
"NO_PROVIDER error", function() {
loop.config = {
marketplaceUrl: "http://market/"
};
store._setupOutgoingRoom(true);
fireError("NO_PROVIDER");
expect(store.getStoreState().marketplaceSrc).eql(
loop.config.marketplaceUrl
);
});
it("should log an error when the activity fail with a error different " +
"from NO_PROVIDER", function() {
loop.config = {
marketplaceUrl: "http://market/"
};
store._setupOutgoingRoom(true);
fireError("whatever");
sinon.assert.calledOnce(console.error);
sinon.assert.calledWith(console.error, "Unexpected whatever");
});
it("should log an error and exist if an activity error is received when " +
"the parameter is false ", function() {
loop.config = {
marketplaceUrl: "http://market/"
};
store._setupOutgoingRoom(false);
fireError("whatever");
sinon.assert.calledOnce(console.error);
sinon.assert.calledWith(console.error,
"Unexpected activity launch error after the app has been installed");
});
});
describe("#FxOSActiveRoomStore - _onMarketplaceMessage", function() {
var setupOutgoingRoom;
beforeEach(function() {
sandbox.stub(console, "error");
setupOutgoingRoom = sandbox.stub(store, "_setupOutgoingRoom");
});
afterEach(function() {
setupOutgoingRoom.restore();
});
it("We should call trigger a FxOS outgoing call if we get " +
"install-package message without error", function() {
sinon.assert.notCalled(setupOutgoingRoom);
store._onMarketplaceMessage({
data: {
name: "install-package"
}
});
sinon.assert.calledOnce(setupOutgoingRoom);
});
it("We should log an error if we get install-package message with an " +
"error", function() {
sinon.assert.notCalled(setupOutgoingRoom);
store._onMarketplaceMessage({
data: {
name: "install-package",
error: { error: "whatever error" }
}
});
sinon.assert.notCalled(setupOutgoingRoom);
sinon.assert.calledOnce(console.error);
sinon.assert.calledWith(console.error, "whatever error");
});
});
});