let expect = require("chai").expect; let freesewing = require("./dist"); it("Design constructor should return pattern constructor", () => { let design = new freesewing.Design({ foo: "bar", options: { constant: 2, percentage: { pct: 30, min: 0, max: 100 } } }); let pattern = new design(); expect(pattern.width).to.equal(0); expect(pattern.height).to.equal(0); expect(pattern.settings.complete).to.equal(true); expect(pattern.parts).to.eql({}); expect(pattern.settings.units).to.equal("metric"); expect(pattern.config.foo).to.equal("bar"); expect(pattern.settings.options.constant).to.equal(2); expect(pattern.settings.options.percentage).to.equal(0.3); }); it("Design constructor should load single plugin", () => { let plugin = { name: "example", version: 1, hooks: { preRender: function(svg, attributes) { svg.attributes.add("freesewing:plugin-example", version); } } }; let design = new freesewing.Design({}, plugin); let pattern = new design(); expect(pattern.hooks.preRender.length).to.equal(1); }); it("Design constructor should load array of plugins", () => { let plugin1 = { name: "example1", version: 1, hooks: { preRender: function(svg, attributes) { svg.attributes.add("freesewing:plugin-example1", version); } } }; let plugin2 = { name: "example2", version: 2, hooks: { preRender: function(svg, attributes) { svg.attributes.add("freesewing:plugin-example2", version); } } }; let design = new freesewing.Design({}, [plugin1, plugin2]); let pattern = new design(); expect(pattern.hooks.preRender.length).to.equal(2); }); it("Design constructor should construct basic part order", () => { let design = new freesewing.Design({ dependencies: { step4: "step3" }, inject: { step4: "step3" }, parts: ["step1", "step2"] }); let pattern = new design(); expect(pattern.config.draftOrder[0]).to.equal("step3"); expect(pattern.config.draftOrder[1]).to.equal("step4"); expect(pattern.config.draftOrder[2]).to.equal("step1"); expect(pattern.config.draftOrder[3]).to.equal("step2"); }); it("Design constructor should not require depencies for injected parts", () => { let design = new freesewing.Design({ inject: { step4: "step3" }, parts: ["step1", "step2"] }); let pattern = new design(); expect(pattern.config.draftOrder[0]).to.equal("step3"); expect(pattern.config.draftOrder[1]).to.equal("step4"); expect(pattern.config.draftOrder[2]).to.equal("step1"); expect(pattern.config.draftOrder[3]).to.equal("step2"); }); it("Design constructor should handle parts and dependencies overlap", () => { let design = new freesewing.Design({ inject: { step4: "step3" }, parts: ["step1", "step2", "step3"] }); let pattern = new design(); expect(pattern.config.draftOrder[0]).to.equal("step3"); expect(pattern.config.draftOrder[1]).to.equal("step4"); expect(pattern.config.draftOrder[2]).to.equal("step1"); expect(pattern.config.draftOrder[3]).to.equal("step2"); }); it("Design constructor discover all parts", () => { let design = new freesewing.Design({ inject: { step4: "step3", step5: "step4", step6: "step5", step7: "step6", step8: "step7", step9: "step8", step10: "step9", step11: "step10" }, hide: [], parts: ["step1", "step2"] }); let pattern = new design(); console.log("order is", pattern.config.draftOrder); expect(pattern.config.draftOrder[0]).to.equal("step3"); expect(pattern.config.draftOrder[1]).to.equal("step4"); expect(pattern.config.draftOrder[2]).to.equal("step5"); expect(pattern.config.draftOrder[3]).to.equal("step6"); expect(pattern.config.draftOrder[4]).to.equal("step7"); expect(pattern.config.draftOrder[5]).to.equal("step8"); expect(pattern.config.draftOrder[6]).to.equal("step9"); expect(pattern.config.draftOrder[7]).to.equal("step10"); expect(pattern.config.draftOrder[8]).to.equal("step11"); expect(pattern.config.draftOrder[9]).to.equal("step1"); expect(pattern.config.draftOrder[10]).to.equal("step2"); });