~launchpad-pqm/launchpad/devel

« back to all changes in this revision

Viewing changes to lib/lp/testing/tests/test_yuixhr_fixture.js

  • Committer: Gary Poster
  • Date: 2011-09-20 22:33:07 UTC
  • mto: This revision was merged to the branch mainline in revision 14015.
  • Revision ID: gary.poster@canonical.com-20110920223307-zt1kr1px2ixjg9mn
Add yui xhr integration test support.

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
YUI({
 
2
    base: '/+icing/yui/',
 
3
    filter: 'raw', combine: false, fetchCSS: false
 
4
}).use('test', 'console', 'json', 'cookie', 'lp.testing.serverfixture',
 
5
       function(Y) {
 
6
 
 
7
var suite = new Y.Test.Suite("lp.testing.yuixhr Tests");
 
8
var module = Y.lp.testing.serverfixture;
 
9
 
 
10
 
 
11
/**
 
12
 * Test setup and teardown of yuixhr fixtures, and the asociated JS module.
 
13
 */
 
14
suite.add(new Y.Test.Case({
 
15
    name: 'Fixture setup and teardown tests',
 
16
 
 
17
    tearDown: function() {
 
18
        delete this._lp_fixture_setups;
 
19
        delete this._lp_fixture_data;
 
20
    },
 
21
 
 
22
    _should: {
 
23
        error: {
 
24
            test_bad_http_call_raises_error: true,
 
25
            test_bad_http_teardown_raises_error: true
 
26
        }
 
27
    },
 
28
 
 
29
    test_simple_setup: function() {
 
30
        var data = module.setup(this, 'baseline');
 
31
        Y.ArrayAssert.itemsAreEqual(['baseline'], this._lp_fixture_setups);
 
32
        Y.ObjectAssert.areEqual({'hello': 'world'}, data);
 
33
        Y.ObjectAssert.areEqual({'hello': 'world'}, this._lp_fixture_data);
 
34
        module.teardown(this); // Just for cleanliness, not for testing.
 
35
    },
 
36
 
 
37
    test_setup_with_multiple_fixtures: function() {
 
38
        var data = module.setup(this, 'baseline', 'second');
 
39
        Y.ArrayAssert.itemsAreEqual(
 
40
            ['baseline', 'second'], this._lp_fixture_setups);
 
41
        Y.ObjectAssert.areEqual({'hello': 'world', 'second': 'here'}, data);
 
42
        Y.ObjectAssert.areEqual(
 
43
            {'hello': 'world', 'second': 'here'}, this._lp_fixture_data);
 
44
        module.teardown(this); // Just for cleanliness, not for testing.
 
45
    },
 
46
 
 
47
    test_multiple_setup_calls: function() {
 
48
        var data = module.setup(this, 'baseline');
 
49
        var second_data = module.setup(this, 'second');
 
50
        Y.ArrayAssert.itemsAreEqual(
 
51
            ['baseline', 'second'], this._lp_fixture_setups);
 
52
        Y.ObjectAssert.areEqual({'hello': 'world'}, data);
 
53
        Y.ObjectAssert.areEqual({'second': 'here'}, second_data);
 
54
        Y.ObjectAssert.areEqual(
 
55
            {'hello': 'world', 'second': 'here'}, this._lp_fixture_data);
 
56
        module.teardown(this); // Just for cleanliness, not for testing.
 
57
    },
 
58
 
 
59
    test_teardown_clears_attributes: function() {
 
60
        var data = module.setup(this, 'baseline');
 
61
        module.teardown(this);
 
62
        Y.Assert.isUndefined(this._lp_fixture_setups);
 
63
        Y.Assert.isUndefined(this._lp_fixture_data);
 
64
    },
 
65
 
 
66
    test_bad_http_call_raises_error: function() {
 
67
        module.setup(this, 'does not exist');
 
68
    },
 
69
 
 
70
    test_bad_http_call_shows_traceback: function() {
 
71
        try {module.setup(this, 'does not exist');}
 
72
        catch (err) {
 
73
            Y.Assert.areEqual('Traceback (most recent call last)',
 
74
                              err.message.substring(0, 33));
 
75
        }      
 
76
    },
 
77
 
 
78
    test_bad_http_teardown_raises_error: function() {
 
79
        module.setup(this, 'teardown_will_fail');
 
80
        module.teardown(this);
 
81
    },
 
82
 
 
83
    test_bad_http_teardown_shows_traceback: function() {
 
84
        module.setup(this, 'teardown_will_fail');
 
85
        try {module.teardown(this);}
 
86
        catch (err) {
 
87
            Y.Assert.areEqual('Traceback (most recent call last)',
 
88
                              err.message.substring(0, 33));
 
89
        }
 
90
    },
 
91
 
 
92
    test_setup_called_twice_with_same_fixture: function() {
 
93
        // This is arguably not desirable, but it is the way it works now.
 
94
        var data = module.setup(this, 'baseline');
 
95
        var second_data = module.setup(this, 'baseline');
 
96
        Y.ArrayAssert.itemsAreEqual(
 
97
            ['baseline', 'baseline'], this._lp_fixture_setups);
 
98
        Y.ObjectAssert.areEqual({'hello': 'world'}, data);
 
99
        Y.ObjectAssert.areEqual({'hello': 'world'}, second_data);
 
100
        Y.ObjectAssert.areEqual(
 
101
            {'hello': 'world'}, this._lp_fixture_data);
 
102
        module.teardown(this); // Just for cleanliness, not for testing.
 
103
    },
 
104
 
 
105
    test_teardown: function() {
 
106
        module.setup(this, 'faux_database_thing');
 
107
        module.teardown(this);
 
108
        var data = module.setup(this, 'faux_database_thing');
 
109
        Y.ObjectAssert.areEqual(
 
110
            {'previous_value': 'teardown was called'}, data);
 
111
    },
 
112
 
 
113
    test_teardown_receives_data_from_setup: function() {
 
114
        module.setup(this, 'show_teardown_value');
 
115
        module.teardown(this);
 
116
        var data = module.setup(this, 'faux_database_thing');
 
117
        Y.ObjectAssert.areEqual(
 
118
            {'setup_data': 'Hello world'}, data.previous_value);
 
119
    },
 
120
 
 
121
    test_teardown_resets_database: function() {
 
122
        var data = module.setup(this, 'make_product');
 
123
        var response = Y.io(
 
124
            data.product.self_link,
 
125
            {sync: true}
 
126
            );
 
127
        Y.Assert.areEqual(200, response.status);
 
128
        module.teardown(this);
 
129
        var response = Y.io(
 
130
            data.product.self_link,
 
131
            {sync: true}
 
132
            );
 
133
        Y.Assert.areEqual(404, response.status);
 
134
    },
 
135
 
 
136
    test_login_works: function() {
 
137
        // Make sure the session cookie is cleared out at start of test.
 
138
        Y.Cookie.remove('launchpad_tests');
 
139
        // Make a product
 
140
        var data = module.setup(this, 'make_product');
 
141
        // We can't see this because only Launchpad and Registry admins can.
 
142
        Y.Assert.areEqual(
 
143
            'tag:launchpad.net:2008:redacted', data.product.project_reviewed);
 
144
        // Login as a Launchpad admin.
 
145
        module.setup(this, 'login_as_admin');
 
146
        // The session cookie is set.
 
147
        Y.Assert.isTrue(Y.Cookie.exists('launchpad_tests'));
 
148
        // We can now see things that only a Launchpad admin can see.
 
149
        var response = Y.io(
 
150
            data.product.self_link,
 
151
            {sync: true, headers: {Accept: 'application/json'}}
 
152
            );
 
153
        var result = Y.JSON.parse(response.responseText);
 
154
        Y.Assert.areEqual(false, result.project_reviewed);
 
155
        module.teardown(this);
 
156
        // After teardown, the database is cleared out, as shown in other
 
157
        // tests, so we are not logged in practically--the user is gone--but
 
158
        // also our session cookie is gone.
 
159
        Y.Assert.isFalse(Y.Cookie.exists('launchpad_tests'));
 
160
    }
 
161
}));
 
162
 
 
163
var handle_complete = function(data) {
 
164
    window.status = '::::' + Y.JSON.stringify(data);
 
165
    };
 
166
Y.Test.Runner.on('complete', handle_complete);
 
167
Y.Test.Runner.add(suite);
 
168
 
 
169
var console = new Y.Console({newestOnTop: false});
 
170
 
 
171
Y.on('domready', function() {
 
172
    console.render('#log');
 
173
    Y.Test.Runner.run();
 
174
});
 
175
});