Skip to content

Commit cd592d7

Browse files
authored
Merge pull request #13 from arenoir/ember-changeset-2-update
upgrade ember ember-changeset-validations refactor validate method an…
2 parents ba0c7a0 + 14b39f4 commit cd592d7

File tree

6 files changed

+84
-21
lines changed

6 files changed

+84
-21
lines changed

.travis.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ language: node_js
33
node_js:
44
# we recommend testing addons with the same minimum supported node version as Ember CLI
55
# so that your addon works for all apps
6-
- "4"
6+
- "6"
77

88
sudo: false
99
dist: trusty

addon/components/bs-form.js

Lines changed: 9 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,28 +1,23 @@
11
import { notEmpty } from '@ember/object/computed';
22
import { assert } from '@ember/debug';
33
import RSVP from 'rsvp';
4-
import { observer } from '@ember/object';
54
import BsForm from 'ember-bootstrap/components/bs-form';
65

76
export default BsForm.extend({
8-
init() {
9-
this._super(...arguments);
10-
11-
this._initValidation();
12-
},
137

148
hasValidator: notEmpty('model.validate'),
159

1610
validate(model) {
1711
let m = model;
1812

1913
assert('Model must be a Changeset instance', m && typeof m.validate === 'function');
20-
return m.get('isValid') ? RSVP.resolve() : RSVP.reject();
21-
},
22-
23-
_initValidation: observer('model', function() {
24-
if (this.get('hasValidator')) {
25-
this.get('model').validate();
26-
}
27-
})
14+
return new RSVP.Promise( function(resolve, reject) {
15+
m.validate().then(
16+
() => {
17+
model.get('isValid') ? resolve() : reject();
18+
},
19+
reject
20+
);
21+
});
22+
}
2823
});

addon/components/bs-form/element.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,4 +13,4 @@ export default BsFormElement.extend({
1313
return A(this.get(key));
1414
}));
1515
}
16-
});
16+
});

ember-cli-build.js

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,9 @@ const EmberAddon = require('ember-cli/lib/broccoli/ember-addon');
55
module.exports = function(defaults) {
66
let app = new EmberAddon(defaults, {
77
// Add options here
8+
'ember-bootstrap': {
9+
bootstrapVersion: 3
10+
},
811
});
912

1013
/*
@@ -14,5 +17,6 @@ module.exports = function(defaults) {
1417
behave. You most likely want to be modifying `./index.js` or app's build file
1518
*/
1619

20+
1721
return app.toTree();
1822
};

package.json

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -25,14 +25,14 @@
2525
"test:all": "ember try:each"
2626
},
2727
"dependencies": {
28-
"ember-changeset-validations": "^1.2.5",
28+
"ember-changeset-validations": "^2.1.0",
2929
"ember-cli-babel": "^6.6.0"
3030
},
3131
"devDependencies": {
3232
"bootstrap": "^3.3.7",
3333
"broccoli-asset-rev": "^2.4.5",
3434
"ember-ajax": "^3.0.0",
35-
"ember-bootstrap": "^1.2.2",
35+
"ember-bootstrap": "^2.5.0",
3636
"ember-cli": "~3.1.1",
3737
"ember-cli-dependency-checker": "^2.0.0",
3838
"ember-cli-eslint": "^4.2.1",
@@ -56,7 +56,7 @@
5656
"loader.js": "^4.2.3"
5757
},
5858
"engines": {
59-
"node": "^4.5 || 6.* || >= 7.*"
59+
"node": "6.* || 8.* || >= 10.*"
6060
},
6161
"ember-addon": {
6262
"configPath": "tests/dummy/config",

tests/integration/components/bs-form-element-test.js

Lines changed: 66 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,15 @@
11
import EmberObject from '@ember/object';
22
import { module, test } from 'qunit';
33
import { setupRenderingTest } from 'ember-qunit';
4-
import { render, find, triggerEvent } from '@ember/test-helpers';
4+
import { render, find, triggerEvent, fillIn, focus, blur } from '@ember/test-helpers';
5+
56
import hbs from 'htmlbars-inline-precompile';
67

78
import {
89
validatePresence,
9-
validateLength
10+
validateLength,
11+
validateConfirmation,
12+
validateFormat,
1013
} from 'ember-changeset-validations/validators';
1114

1215
module('Integration | Component | bs form element', function(hooks) {
@@ -24,6 +27,18 @@ module('Integration | Component | bs form element', function(hooks) {
2427
]
2528
};
2629

30+
const extendedValidation = {
31+
name: [
32+
validatePresence(true),
33+
validateLength({ min: 4 })
34+
],
35+
email: validateFormat({ type: 'email', allowBlank: true }),
36+
password: [
37+
validateLength({ min: 6 })
38+
],
39+
passwordConfirmation: validateConfirmation({ on: 'password' })
40+
}
41+
2742
test('valid validation is supported as expected', async function(assert) {
2843
let model = EmberObject.create({
2944
name: '1234'
@@ -79,4 +94,53 @@ module('Integration | Component | bs form element', function(hooks) {
7994
await triggerEvent('form', 'submit');
8095
assert.ok(find('.form-group').classList.contains('has-error'), 'form element group has error class');
8196
});
97+
98+
99+
test('more complicated validations', async function(assert) {
100+
let model = EmberObject.create({
101+
name: '',
102+
password: null,
103+
passwordConfirmation: null,
104+
email: ''
105+
});
106+
107+
this.set('model', model);
108+
this.set('validation', extendedValidation);
109+
this.actions.submitAction = function() {
110+
assert.ok(false, 'submit action must not been called.');
111+
};
112+
this.actions.invalidAction = function() {
113+
assert.ok(true, 'Invalid action has been called.');
114+
};
115+
116+
this.actions.validate = function() {
117+
return 'invalid';
118+
};
119+
120+
await render(hbs`
121+
{{#bs-form model=(changeset model validation) onSubmit=(action "submitAction") onInvalid=(action "invalidAction") as |form|}}
122+
{{form.element id="name" label="Name" property="name"}}
123+
{{form.element id="email" label="Email" property="email"}}
124+
{{form.element id="password" label="Password" property="password"}}
125+
{{form.element id="password-confirmation" label="Password confirmation" property="passwordConfirmation"}}
126+
{{/bs-form}}
127+
`);
128+
129+
assert.expect(6);
130+
131+
await fillIn('#password-field', 'bad');
132+
assert.notOk( find('#password').classList.contains('has-error'), 'password does not have error while typing.');
133+
await blur('#password-field');
134+
assert.ok( find('#password').classList.contains('has-error'), 'password does have error when focus out.');
135+
136+
await fillIn('#password-confirmation-field', 'betterpass');
137+
assert.notOk( find('#password-confirmation').classList.contains('has-error'), 'password confirmation does not have error while typing.');
138+
await focus('#password-field');
139+
assert.ok( find('#password-confirmation').classList.contains('has-error'), 'password confirmation does have error when focus out.');
140+
141+
142+
await triggerEvent('form', 'submit');
143+
assert.ok(find('.form-group').classList.contains('has-error'), 'form element group has error class');
144+
});
145+
82146
});

0 commit comments

Comments
 (0)