Rietveld Code Review Tool
Help | Bug tracker | Discussion group | Source code | Sign in
(1166)

Side by Side Diff: test/test_app.js

Issue 6856070: Remove "requires" from modules-debug.js
Patch Set: Remove "requires" from modules-debug.js Created 11 years, 4 months ago
Left:
Right:
Use n/p to move between diff chunks; N/P to move between comments. Please Sign in to add in-line comments.
Jump to:
View unified diff | Download patch
OLDNEW
1 'use strict'; 1 'use strict';
2 2
3 function injectData(app, data) { 3 function injectData(app, data) {
4 var d = data || { 4 var d = data || {
5 'result': [ 5 'result': [
6 ['service', 'add', 6 ['service', 'add',
7 {'charm': 'cs:precise/wordpress-6', 7 {'charm': 'cs:precise/wordpress-6',
8 'id': 'wordpress', 'exposed': false}], 8 'id': 'wordpress', 'exposed': false}],
9 ['service', 'add', {'charm': 'cs:precise/mysql-6', 'id': 'mysql'}], 9 ['service', 'add', {'charm': 'cs:precise/mysql-6', 'id': 'mysql'}],
10 ['relation', 'add', 10 ['relation', 'add',
(...skipping 13 matching lines...) Expand all
24 {'machine': 0, 'agent-state': 'started', 24 {'machine': 0, 'agent-state': 'started',
25 'public-address': '192.168.122.113', 'id': 'wordpress/0'}], 25 'public-address': '192.168.122.113', 'id': 'wordpress/0'}],
26 ['unit', 'add', 26 ['unit', 'add',
27 {'machine': 0, 'agent-state': 'started', 27 {'machine': 0, 'agent-state': 'started',
28 'public-address': '192.168.122.222', 'id': 'mysql/0'}]], 28 'public-address': '192.168.122.222', 'id': 'mysql/0'}]],
29 'op': 'delta'}; 29 'op': 'delta'};
30 app.env.dispatch_result(d); 30 app.env.dispatch_result(d);
31 return app; 31 return app;
32 } 32 }
33 33
34 describe('Application basics', function() { 34 YUI(GlobalConfig).use(['juju-gui', 'juju-tests-utils'], function(Y) {
gary.poster 2012/11/21 15:41:51 This looks good to me. However, it is a big chang
35 var Y, app, container; 35 describe('Application basics', function() {
36 var app, container;
36 37
37 before(function(done) { 38 beforeEach(function() {
38 Y = YUI(GlobalConfig).use(['juju-gui', 'juju-tests-utils'], function(Y) { 39 if (container) {
39 done(); 40 container.remove(true);
41 }
42 container = Y.one('#main')
43 .appendChild(Y.Node.create('<div/>'))
44 .set('id', 'test-container')
45 .addClass('container')
46 .append(Y.Node.create('<span/>')
47 .set('id', 'environment-name'))
48 .append(Y.Node.create('<span/>')
49 .set('id', 'provider-type'));
50 app = new Y.juju.App(
51 { container: container,
52 viewContainer: container});
53 injectData(app);
54 });
55
56 it('should produce a valid index', function() {
57 var container = app.get('container');
58 app.render();
59 container.getAttribute('id').should.equal('test-container');
60 container.getAttribute('class').should.include('container');
61 });
62
63 it('should be able to route objects to internal URLs', function() {
64 // take handles to database objects and ensure we can route to the view
65 // needed to show them
66 var wordpress = app.db.services.getById('wordpress'),
67 wp0 = app.db.units.get_units_for_service(wordpress)[0],
68 wp_charm = app.db.charms.add({id: wordpress.get('charm')});
69
70 // 'service/wordpress/' is the primary and so other URL are not returned
71 app.getModelURL(wordpress).should.equal('/service/wordpress/');
72 // however passing 'intent' can force selection of another
73 app.getModelURL(wordpress, 'config').should.equal(
74 '/service/wordpress/config');
75
76 // service units use argument rewriting (thus not /u/wp/0)
77 app.getModelURL(wp0).should.equal('/unit/wordpress-0/');
78
79 // charms also require a mapping but only a name, not a function
80 app.getModelURL(wp_charm).should.equal(
81 '/charms/charms/precise/wordpress-6/json');
82 });
83
84 it('should display the configured environment name', function() {
85 var environment_name = 'This is the environment name. Deal with it.';
86 app = new Y.juju.App(
87 { container: container,
88 viewContainer: container,
89 environment_name: environment_name});
90 assert.equal(
91 container.one('#environment-name').get('text'),
92 environment_name);
93 });
94
95 it('should show a generic environment name if none configured', function() {
96 app = new Y.juju.App(
97 { container: container,
98 viewContainer: container});
99 assert.equal(
100 container.one('#environment-name').get('text'),
101 'Environment');
102 });
103
104 it('should show the provider type, when available', function() {
105 var providerType = 'excellent provider';
106 // Since no provider type has been set yet, none is displayed.
107 assert.equal(
108 container.one('#provider-type').get('text'),
109 '');
110 app.env.set('providerType', providerType);
111 // The provider type has been displayed.
112 assert.equal(
113 container.one('#provider-type').get('text'),
114 'on ' + providerType);
115 });
116
117 });
118 });
119
120 YUI(GlobalConfig).use(['juju-gui', 'juju-tests-utils'], function(Y) {
121 describe('Application Connection State', function() {
122 var container;
123
124 before(function() {
125 container = Y.Node.create('<div id="test" class="container"></div>');
126 });
127
128 it('should be able to handle env connection status changes', function() {
129 var juju = Y.namespace('juju'),
130 conn = new(Y.namespace('juju-tests.utils')).SocketStub(),
131 env = new juju.Environment({conn: conn}),
132 app = new Y.juju.App({env: env, container: container}),
133 reset_called = false,
134 noop = function() {return this;};
135
136
137 // mock the db
138 app.db = {
139 // mock out notifications
140 // so app can start normally
141 notifications: {
142 addTarget: noop,
143 after: noop,
144 filter: noop,
145 map: noop,
146 on: noop,
147 size: function() {return 0;}
148 },
149 reset: function() {
150 reset_called = true;
151 }
152 };
153 env.connect();
154 conn.open();
155 reset_called.should.equal(true);
156
157 // trigger a second time and verify
158 reset_called = false;
159 conn.open();
160 reset_called.should.equal(true);
161 });
162
163 });
164 });
165
166 YUI(GlobalConfig).use(['juju-models', 'juju-gui', 'datasource-local',
167 'juju-tests-utils', 'json-stringify'], function(Y) {
168 describe('Application prefetching', function() {
169 var models, conn, env, app, container, charm_store, data, juju;
170
171 before(function() {
172 models = Y.namespace('juju.models');
173 });
174
175 beforeEach(function() {
176 conn = new (Y.namespace('juju-tests.utils')).SocketStub(),
177 env = new Y.juju.Environment({conn: conn});
178 env.connect();
179 conn.open();
180 container = Y.Node.create('<div id="test" class="container"></div>');
181 data = [];
182 app = new Y.juju.App(
183 { container: container,
184 viewContainer: container,
185 env: env,
186 charm_store: {} });
187
188 app.updateEndpoints = function() {};
189 env.get_endpoints = function() {};
190 });
191
192 afterEach(function() {
193 container.destroy();
194 app.destroy();
195 });
196
197 it('must prefetch charm and service for service pages', function() {
198 injectData(app);
199 var _ = expect(
200 app.db.charms.getById('cs:precise/wordpress-6')).to.not.exist;
201 app.show_service({params: {id: 'wordpress'}, query: {}});
202 // The app made a request of juju for the service info.
203 conn.messages[conn.messages.length - 2].op.should.equal('get_service');
204 // The app also requested juju (not the charm store--see discussion in
205 // app/models/charm.js) for the charm info.
206 conn.last_message().op.should.equal('get_charm');
207 // Tests of the actual load machinery are in the model and env tests, and
208 // so are not repeated here.
40 }); 209 });
41 }); 210 });
42
43 beforeEach(function(done) {
44 // XXX Apparently removing a DOM node is asynchronous (on Chrome at least)
45 // and we occasionally lose the race if this code is in the afterEach
46 // function, so instead we do it here, but only if one has previously been
47 // created.
48 if (container) {
49 container.remove(true);
50 }
51 container = Y.one('#main')
52 .appendChild(Y.Node.create('<div/>'))
53 .set('id', 'test-container')
54 .addClass('container')
55 .append(Y.Node.create('<span/>')
56 .set('id', 'environment-name'))
57 .append(Y.Node.create('<span/>')
58 .set('id', 'provider-type'));
59 app = new Y.juju.App(
60 { container: container,
61 viewContainer: container});
62 injectData(app);
63 done();
64 });
65
66 it('should produce a valid index', function() {
67 var container = app.get('container');
68 app.render();
69 container.getAttribute('id').should.equal('test-container');
70 container.getAttribute('class').should.include('container');
71 });
72
73 it('should be able to route objects to internal URLs', function() {
74 // take handles to database objects and ensure we can route to the view
75 // needed to show them
76 var wordpress = app.db.services.getById('wordpress'),
77 wp0 = app.db.units.get_units_for_service(wordpress)[0],
78 wp_charm = app.db.charms.add({id: wordpress.get('charm')});
79
80 // 'service/wordpress/' is the primary and so other URL are not returned
81 app.getModelURL(wordpress).should.equal('/service/wordpress/');
82 // however passing 'intent' can force selection of another
83 app.getModelURL(wordpress, 'config').should.equal(
84 '/service/wordpress/config');
85
86 // service units use argument rewriting (thus not /u/wp/0)
87 app.getModelURL(wp0).should.equal('/unit/wordpress-0/');
88
89 // charms also require a mapping but only a name, not a function
90 app.getModelURL(wp_charm).should.equal(
91 '/charms/charms/precise/wordpress-6/json');
92 });
93
94 it('should display the configured environment name', function() {
95 var environment_name = 'This is the environment name. Deal with it.';
96 app = new Y.juju.App(
97 { container: container,
98 viewContainer: container,
99 environment_name: environment_name});
100 assert.equal(
101 container.one('#environment-name').get('text'),
102 environment_name);
103 });
104
105 it('should show a generic environment name if none configured', function() {
106 app = new Y.juju.App(
107 { container: container,
108 viewContainer: container});
109 assert.equal(
110 container.one('#environment-name').get('text'),
111 'Environment');
112 });
113
114 it('should show the provider type, when available', function() {
115 var providerType = 'excellent provider';
116 // Since no provider type has been set yet, none is displayed.
117 assert.equal(
118 container.one('#provider-type').get('text'),
119 '');
120 app.env.set('providerType', providerType);
121 // The provider type has been displayed.
122 assert.equal(
123 container.one('#provider-type').get('text'),
124 'on ' + providerType);
125 });
126
127 }); 211 });
128
129
130 describe('Application Connection State', function() {
131 var Y, container;
132
133 before(function(done) {
134 Y = YUI(GlobalConfig).use(['juju-gui', 'juju-tests-utils'], function(Y) {
135 container = Y.Node.create('<div id="test" class="container"></div>');
136 done();
137 });
138
139 });
140
141 it('should be able to handle env connection status changes', function() {
142 var juju = Y.namespace('juju'),
143 conn = new(Y.namespace('juju-tests.utils')).SocketStub(),
144 env = new juju.Environment({conn: conn}),
145 app = new Y.juju.App({env: env, container: container}),
146 reset_called = false,
147 noop = function() {return this;};
148
149
150 // mock the db
151 app.db = {
152 // mock out notifications
153 // so app can start normally
154 notifications: {
155 addTarget: noop,
156 after: noop,
157 filter: noop,
158 map: noop,
159 on: noop,
160 size: function() {return 0;}
161 },
162 reset: function() {
163 reset_called = true;
164 }
165 };
166 env.connect();
167 conn.open();
168 reset_called.should.equal(true);
169
170 // trigger a second time and verify
171 reset_called = false;
172 conn.open();
173 reset_called.should.equal(true);
174 });
175
176 });
177
178 describe('Application prefetching', function() {
179 var Y, models, conn, env, app, container, charm_store, data, juju;
180
181 before(function(done) {
182 Y = YUI(GlobalConfig).use(
183 'juju-models', 'juju-gui', 'datasource-local', 'juju-tests-utils',
184 'json-stringify',
185 function(Y) {
186 models = Y.namespace('juju.models');
187 done();
188 });
189 });
190
191 beforeEach(function() {
192 conn = new (Y.namespace('juju-tests.utils')).SocketStub(),
193 env = new Y.juju.Environment({conn: conn});
194 env.connect();
195 conn.open();
196 container = Y.Node.create('<div id="test" class="container"></div>');
197 data = [];
198 app = new Y.juju.App(
199 { container: container,
200 viewContainer: container,
201 env: env,
202 charm_store: {} });
203
204 app.updateEndpoints = function() {};
205 env.get_endpoints = function() {};
206 });
207
208 afterEach(function() {
209 container.destroy();
210 app.destroy();
211 });
212
213 it('must prefetch charm and service for service pages', function() {
214 injectData(app);
215 var _ = expect(
216 app.db.charms.getById('cs:precise/wordpress-6')).to.not.exist;
217 app.show_service({params: {id: 'wordpress'}, query: {}});
218 // The app made a request of juju for the service info.
219 conn.messages[conn.messages.length - 2].op.should.equal('get_service');
220 // The app also requested juju (not the charm store--see discussion in
221 // app/models/charm.js) for the charm info.
222 conn.last_message().op.should.equal('get_charm');
223 // Tests of the actual load machinery are in the model and env tests, and
224 // so are not repeated here.
225 });
226 });
OLDNEW
« app/modules-debug.js ('K') | « app/store/charm.js ('k') | test/test_app_hotkeys.js » ('j') | no next file with comments »

Powered by Google App Engine
RSS Feeds Recent Issues | This issue
This is Rietveld f62528b