Files
2017-11-07 09:23:57 +01:00

189 lines
6.7 KiB
JavaScript

import {Panel} from '../../helix/javascript/array_summary/panel';
import Colors from '../../helix/javascript/array_summary/colors';
describe("A Panel", function () {
var panelLocation = {x: 10, y: 20, width: 2, height: 1.5};
var subject;
var shapeSpy;
var panelData;
var graphicsSpy;
beforeEach(function () {
var graphicsMethods = ["setStrokeStyle", "beginStroke", "beginFill", "drawRect",
"endStroke", "endFill", "closePath", "moveTo", "lineTo"];
graphicsSpy = jasmine.createSpyObj("graphics", graphicsMethods);
graphicsMethods.forEach(function (method) {
graphicsSpy[method].and.returnValue(graphicsSpy);
});
shapeSpy = {
dispatchEvent: jasmine.createSpy("dispatchEvent"),
graphics: graphicsSpy
};
spyOn(createjs, "Shape").and.returnValue(shapeSpy);
panelData = {
x: 1,
y: 2,
width: 2,
height: 1.5,
data: {
ballast: 20,
wind_anchors: 2,
seismic_anchors: 1,
wind_zones: 'C',
cross_trays: 1,
link_trays: 1,
panel_id: 1,
subarray: 5,
panel_type: 4,
psf: 3.2379
}
};
subject = new Panel(panelData);
});
it("locates itself at the panel coordinates", function () {
expect(subject.x).toEqual(panelLocation.x - subject.width / 2);
expect(subject.y).toEqual(panelLocation.y - subject.height / 2);
});
it("has a bounds based on the width and height given", function () {
expect(graphicsSpy.drawRect).toHaveBeenCalledWith(0, 0, 20, 15);
});
it("has a single shape child", function () {
expect(subject.children).toContain(shapeSpy);
});
describe("background color with anchors", function () {
it("shows a panel with no anchors in navy", function () {
panelData.data.seismic_anchors = 0;
panelData.data.wind_anchors = 0;
subject = new Panel(panelData);
expect(graphicsSpy.beginFill).toHaveBeenCalledWith(Colors.default_background);
});
it("shows the seismic anchors in yellow", function () {
panelData.data.seismic_anchors = 2;
panelData.data.wind_anchors = 0;
subject = new Panel(panelData);
expect(graphicsSpy.beginFill).toHaveBeenCalledWith(Colors.seismic_background);
});
it("shows the wind anchors in light-blue", function () {
panelData.data.seismic_anchors = 0;
panelData.data.wind_anchors = 1;
subject = new Panel(panelData);
expect(graphicsSpy.beginFill).toHaveBeenCalledWith(Colors.wind_background);
});
it("shows a panel with both wind and seismic anchors with a split color", function () {
panelData.data.seismic_anchors = 1;
panelData.data.wind_anchors = 2;
subject = new Panel(panelData);
expect(graphicsSpy.beginFill).toHaveBeenCalledWith(Colors.wind_background);
expect(graphicsSpy.beginFill).toHaveBeenCalledWith(Colors.seismic_background);
});
});
describe("selecting the panel", function () {
beforeEach(function () {
subject.select();
});
it("marks the panel as selected", function () {
expect(subject.selected).toBeTruthy();
});
it("changes the background color", function () {
expect(graphicsSpy.beginFill).toHaveBeenCalledWith('white');
});
});
describe("changing the overlay", function () {
describe("to ANCHOR", function () {
beforeEach(function () {
subject.setOverlay("ANCHOR");
});
it("shows the ballast information", function () {
expect(subject.children).toContain(subject.textOverlays.ballast);
expect(subject.textOverlays.ballast.text).toEqual(20);
});
it("shows the sum of the anchor counts", function () {
expect(subject.children).toContain(subject.textOverlays.anchors);
expect(subject.textOverlays.anchors.text).toEqual(3);
});
it("does not show the other information", function () {
expect(subject.textOverlays.hasOwnProperty('panel_id')).toBeFalsy();
expect(subject.textOverlays.hasOwnProperty('wind_anchors')).toBeFalsy();
expect(subject.textOverlays.hasOwnProperty('seismic_anchors')).toBeFalsy();
expect(subject.textOverlays.hasOwnProperty('wind_zones')).toBeFalsy();
expect(subject.textOverlays.hasOwnProperty('cross_trays')).toBeFalsy();
expect(subject.textOverlays.hasOwnProperty('link_trays')).toBeFalsy();
expect(subject.textOverlays.hasOwnProperty('subarray')).toBeFalsy();
expect(subject.textOverlays.hasOwnProperty('psf')).toBeFalsy();
expect(subject.textOverlays.hasOwnProperty('panel_type')).toBeFalsy();
});
});
describe("to ALL", function () {
beforeEach(function () {
subject.setOverlay("ALL");
});
it("shows the panel_id information", function () {
expect(subject.textOverlays.panel_id.text).toEqual(1);
expect(subject.children).toContain(subject.textOverlays.panel_id);
});
it("shows the ballast information", function () {
expect(subject.children).toContain(subject.textOverlays.ballast);
expect(subject.textOverlays.ballast.text).toEqual(20);
});
it("shows the anchor information", function () {
expect(subject.children).toContain(subject.textOverlays.wind_anchors);
expect(subject.children).toContain(subject.textOverlays.seismic_anchors);
expect(subject.textOverlays.wind_anchors.text).toEqual(2);
expect(subject.textOverlays.seismic_anchors.text).toEqual('S');
});
it("shows the wind zone information", function () {
expect(subject.textOverlays.wind_zones.text).toEqual('C');
expect(subject.children).toContain(subject.textOverlays.wind_zones);
});
it("shows the cross trays information", function () {
expect(subject.textOverlays.cross_trays.text).toEqual(1);
expect(subject.children).toContain(subject.textOverlays.cross_trays);
});
it("shows the link trays information", function () {
expect(subject.textOverlays.link_trays.text).toEqual(1);
expect(subject.children).toContain(subject.textOverlays.link_trays);
});
it("shows the psf information", function () {
expect(subject.textOverlays.psf.text).toEqual('3.24');
expect(subject.children).toContain(subject.textOverlays.link_trays);
});
it("shows the subarray information", function () {
expect(subject.textOverlays.subarray.text).toEqual(5);
expect(subject.children).toContain(subject.textOverlays.link_trays);
});
it("shows the panel type information", function () {
expect(subject.textOverlays.panel_type.text).toEqual(4);
expect(subject.children).toContain(subject.textOverlays.panel_type);
});
});
});
});