summaryrefslogtreecommitdiffstatshomepage
path: root/test/core/headers.js
blob: 9dc5fe21ee0034463008a347467ba0d876b8c997 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
describe("kutty AJAX headers", function() {
    beforeEach(function () {
        this.server = makeServer();
        clearWorkArea();
    });
    afterEach(function () {
        this.server.restore();
        clearWorkArea();
    });

    it("should include the X-KT-Request header", function(){
        this.server.respondWith("GET", "/test", function(xhr){
            xhr.requestHeaders['X-KT-Request'].should.be.equal('true');
            xhr.respond(200, {}, "");
        });
        var div = make('<div kt-get="/test"></div>');
        div.click();
        this.server.respond();
    })

    it("should include the X-KT-Trigger header", function(){
        this.server.respondWith("GET", "/test", function(xhr){
            xhr.requestHeaders['X-KT-Trigger'].should.equal('d1');
            xhr.respond(200, {}, "");
        });
        var div = make('<div id="d1" kt-get="/test"></div>');
        div.click();
        this.server.respond();
    })

    it("should include the X-KT-Trigger-Name header", function(){
        this.server.respondWith("GET", "/test", function(xhr){
            xhr.requestHeaders['X-KT-Trigger-Name'].should.equal('n1');
            xhr.respond(200, {}, "");
        });
        var div = make('<button name="n1" kt-get="/test"></button>');
        div.click();
        this.server.respond();
    })

    it("should include the X-KT-Target header", function(){
        this.server.respondWith("GET", "/test", function(xhr){
            xhr.requestHeaders['X-KT-Target'].should.equal('d1');
            xhr.respond(200, {}, "");
        });
        var div = make('<div kt-target="#d1" kt-get="/test"></div><div id="d1" ></div>');
        div.click();
        this.server.respond();
    })

    it("should handle simple string X-KT-Trigger response header properly", function(){
        this.server.respondWith("GET", "/test", [200, {"X-KT-Trigger" : "foo"}, ""]);

        var div = make('<div kt-get="/test"></div>');
        var invokedEvent = false;
        div.addEventListener("foo", function (evt) {
            invokedEvent = true;
        });
        div.click();
        this.server.respond();
        invokedEvent.should.equal(true);
    })

    it("should handle basic JSON X-KT-Trigger response header properly", function(){
        this.server.respondWith("GET", "/test", [200, {"X-KT-Trigger" : "{\"foo\":null}"}, ""]);

        var div = make('<div kt-get="/test"></div>');
        var invokedEvent = false;
        div.addEventListener("foo", function (evt) {
            invokedEvent = true;
            should.equal(null, evt.detail.value);
            evt.detail.elt.should.equal(div);
        });
        div.click();
        this.server.respond();
        invokedEvent.should.equal(true);
    })

    it("should handle JSON with array arg X-KT-Trigger response header properly", function(){
        this.server.respondWith("GET", "/test", [200, {"X-KT-Trigger" : "{\"foo\":[1, 2, 3]}"}, ""]);

        var div = make('<div kt-get="/test"></div>');
        var invokedEvent = false;
        div.addEventListener("foo", function (evt) {
            invokedEvent = true;
            evt.detail.elt.should.equal(div);
            evt.detail.value.should.deep.equal([1, 2, 3]);
        });
        div.click();
        this.server.respond();
        invokedEvent.should.equal(true);
    })

    it("should handle JSON with array arg X-KT-Trigger response header properly", function(){
        this.server.respondWith("GET", "/test", [200, {"X-KT-Trigger" : "{\"foo\":{\"a\":1, \"b\":2}}"}, ""]);

        var div = make('<div kt-get="/test"></div>');
        var invokedEvent = false;
        div.addEventListener("foo", function (evt) {
            invokedEvent = true;
            evt.detail.elt.should.equal(div);
            evt.detail.a.should.equal(1);
            evt.detail.b.should.equal(2);
        });
        div.click();
        this.server.respond();
        invokedEvent.should.equal(true);
    })

});