Skip to content

Commit 8d2c1dd

Browse files
committed
Test cases
1 parent 2246059 commit 8d2c1dd

File tree

3 files changed

+140
-22
lines changed

3 files changed

+140
-22
lines changed

src/formGenerator.vue

+1-1
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@
77
span.help(v-if="field.help")
88
i.fa.fa-question-circle
99
.helpText {{{field.help}}}
10-
1110
| {{ field.label }}
1211
td
1312
.field-wrap
@@ -87,6 +86,7 @@
8786
let baseClasses = {
8887
error: field.errors && field.errors.length > 0,
8988
disabled: this.fieldDisabled(field),
89+
readonly: field.readonly,
9090
featured: field.featured,
9191
required: field.required
9292
};

src/index.js

+5-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,9 @@
11
module.exports = {
22
component: require("./formGenerator.vue"),
33
schema: require("./utils/schema.js"),
4-
validators: require("./utils/validators.js")
4+
validators: require("./utils/validators.js"),
5+
6+
install(Vue, options) {
7+
Vue.component("VueFormGenerator", module.exports.component);
8+
}
59
};

test/unit/specs/VueFormGenerator.spec.js

+134-20
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,14 @@ import { expect } from "chai";
33
import Vue from "vue";
44
import VueFormGenerator from "src/index";
55

6-
function createFormGenerator(schema, model, options, done) {
7-
let el = document.createElement("div");
8-
el.innerHTML = `<vue-form-generator :schema="schema" :model="model" :options="options"></vue-form-generator>`;
6+
Vue.use(VueFormGenerator);
7+
8+
let el, vm;
99

10-
let vm = new Vue({
10+
function createFormGenerator(schema = {}, model = null, options = {}) {
11+
el = document.createElement("div");
12+
el.innerHTML = `<vue-form-generator :schema="schema" :model="model" :options="options"></vue-form-generator>`;
13+
vm = new Vue({
1114
el: el,
1215
data: {
1316
schema,
@@ -16,35 +19,146 @@ function createFormGenerator(schema, model, options, done) {
1619
}
1720
});
1821

19-
vm.$nextTick(() => {
20-
console.log(el);
21-
done(el, vm);
22-
});
22+
console.log(el);
23+
24+
return [el, vm];
2325
}
2426

2527
describe("VueFormGenerator.vue", () => {
2628

27-
let el, vm;
29+
describe("with empty schema", () => {
30+
let schema = {};
31+
let model = null;
2832

29-
Vue.component("VueFormGenerator", VueFormGenerator.component);
33+
beforeEach( () => {
34+
createFormGenerator(schema);
35+
});
3036

31-
beforeEach((done) => {
32-
createFormGenerator({}, null, {}, (_el, _vm) => {
33-
el = _el;
34-
vm = _vm;
35-
done();
37+
it("should be create HTML table", () => {
38+
expect(vm.$el).to.be.exist;
39+
expect(el.getElementsByTagName("table")).to.be.length(1);
40+
41+
let table = el.getElementsByTagName("table")[0];
42+
expect(table.getElementsByTagName("tbody")).to.be.length(1);
3643
});
44+
3745
});
3846

39-
it("should be create HTML divs", () => {
40-
expect(vm.$el).to.be.exist;
41-
expect(el.getElementsByTagName("table")).to.be.length(1);
47+
describe("check form row classes", () => {
48+
let tr;
49+
let schema = {
50+
fields: [
51+
{
52+
type: "text",
53+
label: "Name",
54+
model: "name",
55+
readonly: false,
56+
featured: false,
57+
required: false,
58+
disabled: false,
59+
hint: null,
60+
helpText: null,
61+
placeholder: "User's name"
62+
}
63+
]
64+
};
4265

43-
let table = el.getElementsByTagName("table")[0];
66+
before( () => {
67+
createFormGenerator(schema);
68+
tr = el.getElementsByTagName("tr")[0];
69+
});
4470

45-
});
71+
it("should be empty classList", () => {
72+
expect(tr.classList.length).to.be.equal(0);
73+
});
4674

75+
it("should be featured class", (done) => {
76+
vm.schema.fields[0].featured = true;
77+
vm.$nextTick(() => {
78+
expect(tr.classList.contains("featured")).to.be.true;
79+
done();
80+
})
81+
});
82+
83+
it("should be readonly class", (done) => {
84+
vm.schema.fields[0].readonly = true;
85+
vm.$nextTick(() => {
86+
expect(tr.classList.contains("readonly")).to.be.true;
87+
done();
88+
})
89+
});
90+
91+
it("should be disabled class", (done) => {
92+
vm.schema.fields[0].disabled = true;
93+
vm.$nextTick(() => {
94+
expect(tr.classList.contains("disabled")).to.be.true;
95+
done();
96+
})
97+
});
98+
99+
it("should be required class", (done) => {
100+
vm.schema.fields[0].required = true;
101+
vm.$nextTick(() => {
102+
expect(tr.classList.contains("required")).to.be.true;
103+
done();
104+
})
105+
});
106+
107+
it("should be error class", (done) => {
108+
vm.$set("schema.fields[0].errors", [ "!!!" ]);
109+
vm.$nextTick(() => {
110+
expect(tr.classList.contains("error")).to.be.true;
111+
done();
112+
})
113+
});
114+
115+
});
116+
/*
117+
describe("check form row classes", () => {
118+
let schema = {
119+
fields: [
120+
{
121+
type: "text",
122+
label: "Name",
123+
model: "name",
124+
readonly: false,
125+
featured: false,
126+
required: false,
127+
disabled: false,
128+
hint: null,
129+
helpText: null,
130+
placeholder: "User's name"
131+
}
132+
]
133+
};
134+
let model = null;
47135
136+
beforeEach((done) => {
137+
createFormGenerator(schema, model, {}, (_el, _vm) => {
138+
el = _el;
139+
vm = _vm;
140+
done();
141+
});
142+
});
143+
144+
it("should be create a row and an input text field with empty value", () => {
145+
// check row
146+
let tr = el.getElementsByTagName("tr")[0];
147+
expect(tr).to.be.exist;
148+
expect(tr.classList.length).to.be.equal(0);
149+
150+
let tdCaption = tr.getElementsByTagName("td")[0];
151+
expect(tdCaption).to.be.exist;
152+
expect(tdCaption.textContent.trim()).to.be.equal("Name"); // TODO why need to trim?
153+
154+
let tdField = tr.getElementsByTagName("td")[1];
155+
expect(tdField).to.be.exist;
156+
157+
let input = tdField.getElementsByTagName("input")[0];
158+
expect(input).to.be.exist;
159+
expect(input.type).to.be.equal("text");
160+
});
48161
162+
}); */
49163

50164
});

0 commit comments

Comments
 (0)