Skip to content
This repository was archived by the owner on Jul 3, 2020. It is now read-only.

Commit 799656a

Browse files
committed
regression and submit error test
1 parent 9486563 commit 799656a

File tree

5 files changed

+63
-22
lines changed

5 files changed

+63
-22
lines changed

docs/model.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -244,9 +244,9 @@ listener:
244244
}
245245
```
246246
``data`` is an optional data to be passed to listeners while ``originModel`` is the
247-
model which originally triggered the evnet via ``$emit``.
248-
The ``$emit`` propagate through all the ancestor chain and trigger the listeners if found.
249-
It is possible to stopt the propagation by returning ``false``:
247+
model which originally triggered the event via ``$emit``.
248+
The ``$emit`` propagate through the ancestor chain and trigger listeners when found.
249+
It is possible to stop the propagation by returning ``false``:
250250
```javascript
251251
{
252252
$something (data, originModel) {

src/forms/actions.js

Lines changed: 8 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -55,19 +55,18 @@ function submit (e) {
5555
form.$setSubmitDone();
5656
} else {
5757
options.method = endpoint.method;
58-
view.json(endpoint.url, options).then(done, error);
58+
view.json(endpoint.url, options).then(done, done);
5959
}
6060

6161

6262
function done (response) {
6363
form.$setSubmitDone();
64-
form.$response(response);
65-
}
66-
67-
function error (err) {
68-
form.$emit('formMessage', {
69-
level: 'error',
70-
message: messages[err.message] || messages.default,
71-
});
64+
if (response.status && response.headers)
65+
form.$response(response);
66+
else
67+
form.$emit('formMessage', {
68+
level: 'error',
69+
message: messages[response.message] || messages.default,
70+
});
7271
}
7372
}

test/fixtures/fetch.js

Lines changed: 15 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -5,41 +5,49 @@ import jsonform from './jsonform';
55
export default function (url, ...o) {
66
if (isAbsoluteUrl(url)) url = new URL(url).pathname;
77
var result = fixtures[url];
8-
if (result) return Promise.resolve(result(...o));
9-
else return Promise.resolve(error(404));
8+
if (result) {
9+
try {
10+
return Promise.resolve(result(...o));
11+
} catch (err) {
12+
return Promise.reject(err);
13+
}
14+
} else return Promise.resolve(error(404));
1015
}
1116

1217

1318
const fixtures = {
1419
'/test': (o) => {
15-
if (!o || o.method === 'get')
20+
if (!o || o.method === 'GET')
1621
return asText('<p>This is a test</p>');
1722
else
1823
return error(405);
1924
},
2025
'/fake/test': (o) => {
21-
if (!o || o.method === 'get')
26+
if (!o || o.method === 'GET')
2227
return asText('<p>This is a test</p>');
2328
else
2429
return error(405);
2530
},
2631
'/submitTest': (o) => {
27-
if (o.method === 'post')
32+
if (o.method === 'POST')
2833
return asJson(o, {success: true});
2934
else
3035
return error(405);
3136
},
3237
'/sidebar': (o) => {
33-
if (!o || o.method === 'get')
38+
if (!o || o.method === 'GET')
3439
return asText(sidebar);
3540
else
3641
return error(405);
3742
},
3843
'/jsonform': (o) => {
39-
if (!o || o.method === 'get')
44+
if (!o || o.method === 'GET')
4045
return asJson(o, JSON.parse(jsonform));
4146
else
4247
return error(405);
48+
},
49+
'/error': () => {
50+
throw new Error('error');
4351
}
4452
};
4553

test/fixtures/jsonform3.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ export default JSON.stringify({
4545
endpoint: {
4646
url: '/submitTest',
4747
contentType: 'multipart/form-data',
48-
method: 'put'
48+
method: 'PUT'
4949
}
5050
}
5151
]

test/test-form-submit.js

Lines changed: 36 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -73,8 +73,8 @@ describe('form submit -', () => {
7373
//
7474
// test the redirect
7575
var submit = button.model();
76-
expect(submit.endpoint.method).toBe('put');
77-
submit.endpoint.method = 'post';
76+
expect(submit.endpoint.method).toBe('PUT');
77+
submit.endpoint.method = 'POST';
7878
trigger(button.node(), 'click');
7979
await nextTick();
8080
expect(messages.length).toBe(1);
@@ -90,4 +90,38 @@ describe('form submit -', () => {
9090
trigger(button.node(), 'click');
9191
expect(logger.pop(1)[0]).toBe('[d3-form-submit] No url, cannot submit form');
9292
});
93+
94+
test ('error', async () => {
95+
var messages = [],
96+
vm = view({
97+
model: {
98+
$formMessage (data) {
99+
messages.push(data);
100+
}
101+
}
102+
}).use(viewForms);
103+
104+
await vm.mount(vm.viewElement(`<div><d3form schema='${jsonform3}'></d3form></div>`));
105+
var form = vm.sel.select('form').model(),
106+
button = vm.sel.select('button');
107+
108+
form.inputs.foo.value = 'vhcgdsv';
109+
form.inputs.token.value = 'hsjdgvchgjdc';
110+
await nextTick();
111+
expect(form.$isValid()).toBe(true);
112+
trigger(button.node(), 'click');
113+
await nextTick();
114+
expect(messages.length).toBe(1);
115+
expect(messages[0].level).toBe('error');
116+
expect(messages[0].response.status).toBe(405);
117+
//
118+
// test the redirect
119+
var submit = button.model();
120+
submit.endpoint.url = '/error';
121+
trigger(button.node(), 'click');
122+
await nextTick();
123+
expect(messages.length).toBe(2);
124+
expect(messages[1].level).toBe('error');
125+
expect(messages[1].response).toBe(undefined);
126+
});
93127
});

0 commit comments

Comments
 (0)