Index: test/test_charm_panel.js |
=== modified file 'test/test_charm_panel.js' |
--- test/test_charm_panel.js 2013-05-17 14:51:05 +0000 |
+++ test/test_charm_panel.js 2013-06-13 16:15:01 +0000 |
@@ -73,6 +73,7 @@ |
app: { views: { environment: {}}} |
}), |
node = panel.node; |
+ panel.setActivePanelName('configuration'); |
node.getStyle('display').should.equal('none'); |
panel.show(); |
node.getStyle('display').should.equal('block'); |
@@ -84,102 +85,6 @@ |
node.getStyle('display').should.equal('none'); |
}); |
- it('must be able to search', function() { |
- var searchTriggered = false, |
- panel = Y.namespace('juju.views').CharmPanel.getInstance({ |
- container: container, |
- charm_store: new juju.CharmStore({datasource: { |
- sendRequest: function(params) { |
- searchTriggered = true; |
- // Stubbing the server callback value |
- params.callback.success({ |
- response: { |
- results: [{ |
- responseText: searchResult |
- }] |
- } |
- }); |
- } |
- }}), |
- testing: true, |
- app: { views: { environment: {} } } |
- }), |
- node = panel.node; |
- panel.show(true); |
- var field = Y.one('#charm-search-field'); |
- field.set('value', 'aaa'); |
- field.simulate('keydown', { keyCode: ENTER }); |
- |
- searchTriggered.should.equal(true); |
- node.one('.charm-entry .btn.deploy').getData('url').should.equal( |
- 'cs:precise/membase-6'); |
- }); |
- |
- it('must be able to trigger charm details', function() { |
- var db = new models.Database(), |
- panel = Y.namespace('juju.views').CharmPanel.getInstance({ |
- container: container, |
- charm_store: new juju.CharmStore({datasource: { |
- sendRequest: function(params) { |
- // Mocking the server callback value |
- params.callback.success({ |
- response: { |
- results: [{ |
- responseText: searchResult |
- }] |
- } |
- }); |
- } |
- }}), |
- app: {db: db, views: { environment: {} } }, |
- testing: true |
- }), |
- node = panel.node; |
- db.charms.add({id: 'cs:precise/membase-6'}); |
- |
- panel.show(); |
- var field = Y.one('#charm-search-field'); |
- field.set('value', 'aaa'); |
- field.simulate('keydown', { keyCode: ENTER }); |
- node.one('a.charm-detail').simulate('click'); |
- node.one('.charm-description h3').get('text').trim() |
- .should.equal('membase'); |
- }); |
- |
- it('must be able to deploy from the description panel by going to the ' + |
- 'configuration panel', function() { |
- var db = new models.Database(), |
- panel = Y.namespace('juju.views').CharmPanel.getInstance({ |
- container: container, |
- charm_store: new juju.CharmStore({datasource: { |
- sendRequest: function(params) { |
- // Mocking the server callback value |
- params.callback.success({ |
- response: { |
- results: [{ |
- responseText: searchResult |
- }] |
- } |
- }); |
- } |
- }}), |
- app: {db: db, views: { environment: {} } }, |
- testing: true |
- }), |
- node = panel.node, |
- charm = db.charms.add({id: 'cs:precise/membase-6'}); |
- charm.loaded = true; |
- panel.show(); |
- var field = Y.one('#charm-search-field'); |
- field.set('value', 'aaa'); |
- field.simulate('keydown', { keyCode: ENTER }); |
- node.one('a.charm-detail').simulate('click'); |
- node.one('.btn-primary').simulate('click'); |
- node.one('.control-label').get('text').trim() |
- .should.equal('Service name'); |
- }); |
- |
- |
describe('service ghost', function() { |
var app, db, env, panel, serviceName, store; |
@@ -191,7 +96,9 @@ |
callback({err: false}); |
}, |
update_annotations: function(service, type, annotations, callback) { |
- callback({err: false}); |
+ if (typeof callback === 'function') { |
+ callback({err: false}); |
+ } |
} |
}; |
// Mock the charm store. |
@@ -212,6 +119,7 @@ |
app = {db: db, views: {environment: {}}, env: env}; |
panel = views.CharmPanel.getInstance({container: container, |
charm_store: store, app: app}); |
+ panel.setActivePanelName('configuration'); |
panel.show(); |
}); |
@@ -224,10 +132,7 @@ |
// Start deploying a charm, without confirming. |
var startDeployment = function() { |
- search(serviceName); |
- var node = panel.node; |
- node.one('a.charm-detail').simulate('click'); |
- node.one('.btn-primary').simulate('click'); |
+ panel.deploy(new models.Charm({id: 'cs:precise/membase-6'})); |
}; |
// Cancel an unconfirmed deployment. |
@@ -250,18 +155,9 @@ |
it('is removed from the database if deployment is cancelled', function() { |
startDeployment(); |
- assert.strictEqual(1, db.services.size()); |
+ assert.equal(db.services.size(), 1); |
cancelDeployment(); |
- assert.strictEqual(0, db.services.size()); |
- assert.isNull(Y.one('#service-name')); |
- }); |
- |
- it('is removed from the database if the charm search is used', function() { |
- startDeployment(); |
- assert.strictEqual(1, db.services.size()); |
- search('foo bar'); |
- assert.strictEqual(0, db.services.size()); |
- assert.isNull(Y.one('#service-name')); |
+ assert.equal(db.services.size(), 0); |
}); |
it('is removed from the database if another ghost is created', function() { |
@@ -304,342 +200,8 @@ |
confirmDeployment(); |
assert.isFalse(service.get('pending')); |
assert.include(service.get('id'), serviceName); |
- // Test that data used in dragging the ghost is removed. |
- assert.equal(undefined, service.get('x')); |
- assert.equal(undefined, service.get('y')); |
- }); |
- |
- }); |
- |
-}); |
- |
- |
-describe('charm description', function() { |
- var Y, models, views, juju, conn, env, container, db, app, charm, |
- charm_store_data, charm_store, charms, |
- createdDate = 1349797266.032; |
- |
- before(function(done) { |
- Y = YUI(GlobalConfig).use( |
- 'juju-models', |
- 'juju-views', |
- 'juju-gui', |
- 'juju-env', |
- 'juju-tests-utils', |
- 'node-event-simulate', |
- 'node', |
- 'datasource-local', |
- 'json-stringify', |
- 'juju-charm-store', |
- 'datatype-date', |
- 'datatype-date-format', |
- |
- function(Y) { |
- models = Y.namespace('juju.models'); |
- views = Y.namespace('juju.views'); |
- juju = Y.namespace('juju'); |
- done(); |
- }); |
- |
- }); |
- |
- beforeEach(function() { |
- conn = new (Y.namespace('juju-tests.utils')).SocketStub(), |
- env = Y.namespace('juju').newEnvironment({conn: conn}); |
- env.connect(); |
- conn.open(); |
- container = Y.namespace('juju-tests.utils').makeContainer('test-container'); |
- db = new models.Database(); |
- charm = db.charms.add({ id: 'cs:precise/mysql-7' }); |
- charms = new models.CharmList(), |
- charm_store_data = {responseText: '{}'}; |
- charm_store = new juju.CharmStore( |
- {datasource: new Y.DataSource.Local({source: [charm_store_data]})}); |
- app = { db: db, env: env, charm_store: charm_store }; |
- }); |
- |
- afterEach(function() { |
- container.remove(true); |
- db.destroy(); |
- env.destroy(); |
- }); |
- |
- it('can render no charm', function() { |
- var view = new views.CharmDescriptionView( |
- { container: container, app: app }).render(); |
- container.one('div.alert').get('text').trim().should.equal( |
- 'Waiting on charm data...'); |
- }); |
- |
- it('can render incomplete charm', function() { |
- var view = new views.CharmDescriptionView( |
- { container: container, app: app, model: charm, |
- charmStore: charm_store }).render(), |
- html = container.one('.charm-description'), |
- description_div = html.one('.charm-section div'); |
- html.one('h3').get('text').trim().should.equal('mysql'); |
- description_div.getStyle('height').should.not.equal('0px'); |
- html.all('div.charm-section').size().should.equal(1); |
- }); |
- |
- it('can render fuller charm', function() { |
- charm.setAttrs( |
- { summary: 'A DB', |
- provides: {munin: {'interface': 'munin-node'}}, |
- last_change: |
- { created: createdDate, |
- committer: 'fred', |
- message: 'fixed EVERYTHING'}}); |
- charm_store_data.responseText = Y.JSON.stringify( |
- { matches: 1, |
- results: [ |
- { store_url: 'cs:precise/superthing-7', |
- summary: 'A super thing.'}]}); |
- var view = new views.CharmDescriptionView( |
- { container: container, app: app, model: charm, charms: charms, |
- charmStore: charm_store }).render(), |
- html = container.one('.charm-description'), |
- sections = html.all('.charm-section'), |
- description_div = sections.item(0).one('div'), |
- interface_div = sections.item(1).one('div'), |
- last_change_div = sections.item(2).one('div'), |
- related_div = sections.item(3).one('div'); |
- description_div.get('text').should.contain('A DB'); |
- interface_div.getStyle('height').should.equal('0px'); |
- interface_div.get('text').should.contain('munin'); |
- last_change_div.getStyle('height').should.equal('0px'); |
- last_change_div.get('text').should.contain('fixed EVERYTHING'); |
- |
- var cd = new Date(createdDate * 1000); |
- // '2012-10-09' on this side of the date line |
- last_change_div.get('text').should.contain(Y.Date.format(cd, '%F')); |
- |
- related_div.one('a').getAttribute('href').should.equal( |
- 'cs:precise/superthing-7'); |
- related_div.one('a').get('text').trim().should.equal('superthing'); |
- }); |
- |
- it('can toggle visibility of subsections', function() { |
- charm.setAttrs( |
- { summary: 'A DB', |
- provides: {munin: {'interface': 'munin-node'}}, |
- last_change: |
- { created: createdDate, |
- committer: 'fred', |
- message: 'fixed EVERYTHING'}}); |
- var view = new views.CharmDescriptionView( |
- { container: container, app: app, model: charm, |
- charmStore: charm_store }).render(), |
- html = container.one('.charm-description'), |
- // We use the last change div. |
- section_container = html.one('div.charm-section:last-child'); |
- section_container.one('div').getStyle('height').should.equal('0px'); |
- assert(section_container.one('h4 i').hasClass('chevron_down')); |
- section_container.one('h4').simulate('click'); |
- assert(section_container.one('h4 i').hasClass('chevron_up')); |
- section_container.one('div').getStyle('height').should.not.equal('0px'); |
- section_container.one('h4').simulate('click'); |
- assert(section_container.one('h4 i').hasClass('chevron_down')); |
- // The transition is still running, so we can't check display. |
- }); |
- |
- it('can respond to the "back" link', function(done) { |
- var view = new views.CharmDescriptionView( |
- { container: container, app: app, model: charm, |
- charmStore: charm_store }).render(); |
- view.on('changePanel', function(ev) { |
- ev.name.should.equal('charms'); |
- done(); |
- }); |
- container.one('.charm-nav-back').simulate('click'); |
- }); |
- |
-}); |
- |
-describe('charm panel filtering', function() { |
- |
- var Y, models, views, juju, conn, env, container, db, app, charm, |
- charm_store_data, charm_store, charms, ENTER; |
- |
- before(function(done) { |
- Y = YUI(GlobalConfig).use( |
- 'juju-models', |
- 'juju-views', |
- 'juju-gui', |
- 'juju-env', |
- 'juju-tests-utils', |
- 'node-event-simulate', |
- 'node', |
- 'datasource-local', |
- 'json-stringify', |
- 'juju-charm-store', |
- |
- function(Y) { |
- models = Y.namespace('juju.models'); |
- views = Y.namespace('juju.views'); |
- juju = Y.namespace('juju'); |
- ENTER = Y.Node.DOM_EVENTS.key.eventDef.KEY_MAP.enter; |
- done(); |
- }); |
- |
- }); |
- |
- beforeEach(function() { |
- conn = new (Y.namespace('juju-tests.utils')).SocketStub(), |
- env = Y.namespace('juju').newEnvironment({conn: conn}); |
- env.connect(); |
- conn.open(); |
- container = Y.namespace('juju-tests.utils').makeContainer('container'); |
- container.append( |
- Y.Node.create('<div />') |
- .setAttribute('id', 'charm-search-test').append( |
- Y.Node.create('<input />') |
- .setAttribute('type', 'text') |
- .setAttribute('id', 'charm-search-field') |
- ) |
- ); |
- db = new models.Database(); |
- charms = db.charms.add([ |
- { id: 'cs:precise/mysql-7' }, |
- { id: 'cs:precise/syslogd-1', is_subordinate: true}]); |
- charm_store_data = {responseText: '{}'}; |
- charm_store = new juju.CharmStore({ |
- datasource: { |
- sendRequest: function(params) { |
- params.callback.success({ |
- response: { |
- results: [{responseText: charm_store_data.responseText}]}}); |
- }}}); |
- app = { db: db, env: env, charm_store: charm_store }; |
- }); |
- |
- afterEach(function() { |
- Y.namespace('juju.views').CharmPanel.killInstance(); |
- Y.one('#charm-search-test').remove(true); |
- container.remove(true); |
- db.destroy(); |
- env.destroy(); |
- }); |
- |
- |
- it('should have `filters` default to `all`', function() { |
- var view = new views.CharmCollectionView({}); |
- view.get('filter').should.equal('all'); |
- }); |
- |
- it('should not filter entries when `all` is the filter', function() { |
- var entries = [ |
- { |
- series: 'precise', |
- charms: [ |
- new models.Charm({id: 'cs:precise/foo-1'}), |
- new models.Charm({id: 'cs:precise/logger-1', |
- is_subordinate: true}) |
- ] |
- } |
- ]; |
- |
- var filtered = views.filterEntries(entries, 'all'); |
- filtered.length.should.equal(1); |
- filtered[0].charms.length.should.equal(2); |
- }); |
- |
- it('should filter for `subordinate`', function() { |
- var entries = [ |
- { |
- series: 'precise', |
- charms: [ |
- new models.Charm({id: 'cs:precise/foo-1'}), |
- new models.Charm({id: 'cs:precise/logger-1', |
- is_subordinate: true}), |
- new models.Charm({id: 'cs:precise/sub-1', |
- is_subordinate: true}), |
- new models.Charm({id: 'cs:precise/nosub-3', |
- is_subordinate: false}) |
- ] |
- }, |
- { |
- series: 'oneiric', |
- charms: [ |
- new models.Charm({id: 'cs:precise/foo-1', |
- is_subordinate: true}) |
- ] |
- } |
- ]; |
- |
- var filtered = views.filterEntries(entries, 'subordinates'); |
- filtered.length.should.equal(2); |
- filtered[0].charms.length.should.equal(2); |
- filtered[0].charms[0].get('id').should.equal('cs:precise/logger-1'); |
- filtered[0].charms[0].get('is_subordinate').should.equal(true); |
- filtered[0].charms[1].get('id').should.equal('cs:precise/sub-1'); |
- filtered[0].charms[1].get('is_subordinate').should.equal(true); |
- }); |
- |
- it('should filter out series with no remaining charms', function() { |
- var entries = [ |
- { |
- series: 'precise', |
- charms: [ |
- new models.Charm({id: 'cs:precise/foo-1'}), |
- new models.Charm({id: 'cs:precise/logger-1', |
- is_subordinate: true}), |
- new models.Charm({id: 'cs:precise/sub-1', |
- is_subordinate: true}), |
- new models.Charm({id: 'cs:precise/nosub-3', |
- is_subordinate: false}) |
- ] |
- }, |
- { |
- series: 'oneiric', |
- charms: [ |
- new models.Charm({id: 'cs:oneiric/foo-1', |
- is_subordinate: false}) |
- ] |
- } |
- ]; |
- |
- var filtered = views.filterEntries(entries, 'subordinates'); |
- filtered.length.should.equal(1); |
- }); |
- |
- |
- it('should filter for `deployed` charms', function() { |
- var entries = [ |
- { |
- series: 'precise', |
- charms: [ |
- new models.Charm({id: 'cs:precise/foo-1'}), |
- new models.Charm({id: 'cs:precise/logger-1', |
- is_subordinate: true}), |
- new models.Charm({id: 'cs:precise/sub-1', |
- is_subordinate: true}), |
- new models.Charm({id: 'cs:precise/nosub-3', |
- is_subordinate: false}) |
- ] |
- }, |
- { |
- series: 'oneiric', |
- charms: [ |
- new models.Charm({id: 'cs:oneiric/foo-2', |
- is_subordinate: true}) |
- ] |
- } |
- ]; |
- |
- db.services.add([ |
- {id: 'wordpress', charm: 'cs:edgy/wordpress-9'}, |
- {id: 'foo', charm: 'cs:oneiric/foo-2'}, |
- {id: 'sub', charm: 'cs:precise/sub-1'}]); |
- |
- var filtered = views.filterEntries(entries, 'deployed', db.services); |
- |
- filtered.length.should.equal(2); |
- filtered[0].charms.length.should.equal(1); |
- filtered[0].charms[0].get('id').should.equal('cs:precise/sub-1'); |
- filtered[1].charms.length.should.equal(1); |
- filtered[1].charms[0].get('id').should.equal('cs:oneiric/foo-2'); |
- }); |
- |
+ }); |
+ |
+ }); |
}); |