mapillary-js/spec/Graph.spec.ts
2015-12-18 12:28:29 -08:00

163 lines
4.0 KiB
TypeScript

/// <reference path="../typings/jasmine/jasmine.d.ts" />
/// <reference path="../typings/when/when.d.ts" />
import * as when from "when";
import {Graph, Prefetcher, Node} from "../src/Graph";
import {IAPINavIm} from "../src/API";
describe("Graph", () => {
var graph: Graph;
beforeEach(() => {
graph = new Graph(new Prefetcher("clientId"));
});
it("exists", () => {
expect(graph).toBeDefined();
});
it("should have the correct sequence and skey", () => {
var key1: string = "key1";
var skey1: string = "skey1";
var data: IAPINavIm = {
hs: [],
ims: [
{ key: key1 }
],
ss: [
{ key: skey1, keys: [key1] }
]
};
graph.insertNodes(data);
var node = graph.node(key1);
expect(node.key).toEqual(key1);
expect(node.sequence.key).toEqual(skey1);
});
it("should have the same sequence key", () => {
var key1: string = "key1";
var key2: string = "key2";
var skey1: string = "skey1";
var data: IAPINavIm = {
hs: [],
ims: [
{ key: key1 },
{ key: key2 }
],
ss: [
{ key: skey1, keys: [key1, key2] }
]
};
graph.insertNodes(data);
var node: Node = graph.node(key1);
expect(node.key).toEqual(key1);
expect(node.sequence.key).toEqual(skey1);
node = graph.node(key2);
expect(node.key).toEqual(key2);
expect(node.sequence.key).toEqual(skey1);
});
it("should have different sequence keys", () => {
var key1 = "key1";
var key2 = "key2";
var skey1 = "skey1";
var skey2 = "skey2";
var data: IAPINavIm = {
hs: [],
ims: [
{ key: key1 },
{ key: key2 }
],
ss: [
{ key: skey1, keys: [key1] },
{ key: skey2, keys: [key2] }
]
};
graph.insertNodes(data);
var node: Node = graph.node(key1);
expect(node.key).toEqual(key1);
expect(node.sequence.key).toEqual(skey1);
node = graph.node(key2);
expect(node.key).toEqual(key2);
expect(node.sequence.key).toEqual(skey2);
});
});
describe("Graph.getNode", () => {
let prefetcher: Prefetcher;
let graph: Graph;
beforeEach(() => {
prefetcher = new Prefetcher("clientId");
graph = new Graph(prefetcher);
});
it("should prefetch and return node", (done) => {
let key: string = "key";
spyOn(prefetcher, 'loadFromKey').and.callFake(() => {
let result: IAPINavIm = {
hs: [],
ims: [{key: key}],
ss: [],
};
return when(result);
});
graph.getNode(key).then((node: Node) => {
expect(node.apiNavImIm.key).toBe(key);
expect(prefetcher.loadFromKey).toHaveBeenCalled();
done();
});
});
it("should not prefetch when in graph", (done) => {
let key1: string = "key1";
let key2: string = "key2";
spyOn(prefetcher, 'loadFromKey').and.callFake(() => {
let result: IAPINavIm = {
hs: [],
ims: [{key: key1}, {key: key2}],
ss: [],
};
return when(result);
});
let promise: when.Promise<void> = graph.getNode(key1).then((node: Node) => {
expect(node.apiNavImIm.key).toBe(key1);
expect(prefetcher.loadFromKey).toHaveBeenCalledWith(key1);
return;
});
promise.then(() => {
graph.getNode(key2).then((node: Node) => {
expect(node.apiNavImIm.key).toBe(key2);
expect(prefetcher.loadFromKey).not.toHaveBeenCalledWith(key2);
done();
});
});
});
});