/**
 * Created by windy on 2018/01/23.
 */
describe("contextTest", function () {

    before(function () {
    });

    /**
     * test_author_guy
     */
    it("context测试", function () {

        var ParentStore = BI.inherit(Fix.Model, {
            state: function () {
                return {
                    context: "默认context"
                };
            },
            childContext: ["context"]
        });
        BI.model("demo.model.parent_store", ParentStore);

        var ChildStore = BI.inherit(Fix.Model, {
            context: ["context"],
            computed: {
                currContext: function () {
                    return this.model.context;
                }
            },
            actions: {
                changeContext: function () {
                    this.model.context = "改变后的context";
                }
            }
        });
        BI.model("demo.model.child_store", ChildStore);

        var Label = BI.inherit(BI.Widget, {
            _store: function () {
                return BI.Models.getModel("demo.model.child_store");
            },
            render: function () {
                return {
                    type: "bi.label",
                    text: this.model.currContext
                };
            }
        });
        BI.shortcut("demo.label", Label);

        var Demo = BI.inherit(BI.Widget, {
            _store: function () {
                return BI.Models.getModel("demo.model.parent_store");
            },

            render: function () {
                var self = this;
                return {
                    type: "demo.label",
                    ref: function (_ref) {
                        self.child = _ref;
                    }
                };
            }
        });
        BI.shortcut("demo.demo", Demo);

        var demo = BI.Test.createWidget({
            type: "demo.demo"
        });

        expect(demo.child.model.currContext).to.equal("默认context");
        demo.child.store.changeContext();
        expect(demo.model.context).to.equal("改变后的context");
        demo.destroy();

    });

    /**
     * test_author_guy
     */
    it("inject测试", function () {

        var ParentStore = BI.inherit(Fix.Model, {
            state: function () {
                return {
                    context: "默认context"
                };
            },
            childContext: ["context"]
        });
        BI.model("demo.model.parent_store", ParentStore);

        var ChildStore = BI.inherit(Fix.Model, {
            inject: ["context"],
            computed: {
                currContext: function () {
                    return this.model.context;
                }
            },
            actions: {
                changeContext: function () {
                    this.model.context = "改变后的context";
                }
            }
        });
        BI.model("demo.model.child_store", ChildStore);

        var Label = BI.inherit(BI.Widget, {
            _store: function () {
                return BI.Models.getModel("demo.model.child_store");
            },
            render: function () {
                return {
                    type: "bi.label",
                    text: this.model.currContext
                };
            }
        });
        BI.shortcut("demo.label", Label);

        var Demo = BI.inherit(BI.Widget, {
            _store: function () {
                return BI.Models.getModel("demo.model.parent_store");
            },

            render: function () {
                var self = this;
                return {
                    type: "demo.label",
                    ref: function (_ref) {
                        self.child = _ref;
                    }
                };
            }
        });
        BI.shortcut("demo.demo", Demo);

        var demo = BI.Test.createWidget({
            type: "demo.demo"
        });

        expect(demo.child.model.currContext).to.equal("默认context");
        demo.child.store.changeContext();
        expect(demo.model.context).to.equal("默认context");
        demo.destroy();

    });

});