terriajs
Version:
Geospatial data visualization platform.
117 lines (101 loc) • 4.15 kB
JavaScript
;
/*global require*/
var CatalogGroup = require('../../lib/Models/CatalogGroup');
var createCatalogMemberFromType = require('../../lib/Models/createCatalogMemberFromType');
var Terria = require('../../lib/Models/Terria');
var updateApplicationOnMessageFromParentWindow = require('../../lib/ViewModels/updateApplicationOnMessageFromParentWindow');
describe('updateApplicationOnMessageFromParentWindow', function() {
var terria;
var fakeWindow;
beforeEach(function() {
terria = new Terria({
baseUrl: './'
});
createCatalogMemberFromType.register('group', CatalogGroup);
fakeWindow = jasmine.createSpyObj('window', ['addEventListener']);
fakeWindow.parent = jasmine.createSpyObj('parentWindow', ['postMessage']);
});
it('subscribes to messages', function() {
updateApplicationOnMessageFromParentWindow(terria, fakeWindow);
expect(fakeWindow.addEventListener.calls.count()).toBe(1);
expect(fakeWindow.addEventListener.calls.first().args[0]).toBe('message');
});
it('posts a message to its parent when ready', function() {
updateApplicationOnMessageFromParentWindow(terria, fakeWindow);
expect(fakeWindow.parent.postMessage.calls.count()).toBe(1);
expect(fakeWindow.parent.postMessage.calls.first().args).toEqual(['ready', '*']);
});
it('updates the model when it receives a message from the parent', function() {
var messageEventHandler;
fakeWindow.addEventListener.and.callFake(function(eventName, callback) {
messageEventHandler = callback;
});
updateApplicationOnMessageFromParentWindow(terria, fakeWindow);
messageEventHandler({
source: fakeWindow.parent,
data: {
initSources: [
{
catalog: [
{
name: "Foo",
type: "group"
}
]
}
]
}
});
var fooGroup = terria.catalog.group.findFirstItemByName('Foo');
expect(fooGroup).toBeDefined();
expect(fooGroup.type).toBe('group');
});
it('updates the model when it receives a message from the opener', function() {
var messageEventHandler;
fakeWindow.addEventListener.and.callFake(function(eventName, callback) {
messageEventHandler = callback;
});
updateApplicationOnMessageFromParentWindow(terria, fakeWindow);
messageEventHandler({
opener: fakeWindow.parent,
data: {
initSources: [
{
catalog: [
{
name: "Foo",
type: "group"
}
]
}
]
}
});
var fooGroup = terria.catalog.group.findFirstItemByName('Foo');
expect(fooGroup).toBeDefined();
expect(fooGroup.type).toBe('group');
});
it('ignores messages that are not from its parent or opener window', function() {
var messageEventHandler;
fakeWindow.addEventListener.and.callFake(function(eventName, callback) {
messageEventHandler = callback;
});
updateApplicationOnMessageFromParentWindow(terria, fakeWindow);
messageEventHandler({
source: {},
data: {
initSources: [
{
catalog: [
{
name: "Foo",
type: "group"
}
]
}
]
}
});
expect(terria.catalog.group.findFirstItemByName('Foo')).not.toBeDefined();
});
});