mirror of
https://github.com/mozilla/gecko-dev.git
synced 2025-11-13 06:38:48 +02:00
212 lines
5.3 KiB
JavaScript
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");
|
|
});
|
|
});
|
|
});
|
|
|