Skip to content

Commit 25474df

Browse files
committed
issue #296 - add validation for form, planConfig and priceConfig object keys
1 parent 866c8f5 commit 25474df

File tree

6 files changed

+116
-66
lines changed

6 files changed

+116
-66
lines changed

src/routes/productTemplates/create.js

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,10 @@ const schema = {
2424
details: Joi.string().max(255).required(),
2525
aliases: Joi.array().required(),
2626
template: Joi.object().empty(null),
27-
form: Joi.object().empty(null),
27+
form: Joi.object().keys({
28+
key: Joi.string().required(),
29+
version: Joi.number(),
30+
}).empty(null),
2831
disabled: Joi.boolean().optional(),
2932
hidden: Joi.boolean().optional(),
3033
isAddOn: Joi.boolean().optional(),

src/routes/productTemplates/update.js

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,10 @@ const schema = {
2727
details: Joi.string().max(255),
2828
aliases: Joi.array(),
2929
template: Joi.object().empty(null),
30-
form: Joi.object().empty(null),
30+
form: Joi.object().keys({
31+
key: Joi.string().required(),
32+
version: Joi.number(),
33+
}).empty(null),
3134
disabled: Joi.boolean().optional(),
3235
hidden: Joi.boolean().optional(),
3336
isAddOn: Joi.boolean().optional(),

src/routes/projectTemplates/create.js

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -24,9 +24,18 @@ const schema = {
2424
aliases: Joi.array().required(),
2525
scope: Joi.object().empty(null),
2626
phases: Joi.object().empty(null),
27-
form: Joi.object().empty(null),
28-
planConfig: Joi.object().empty(null),
29-
priceConfig: Joi.object().empty(null),
27+
form: Joi.object().keys({
28+
key: Joi.string().required(),
29+
version: Joi.number(),
30+
}).empty(null),
31+
planConfig: Joi.object().keys({
32+
key: Joi.string().required(),
33+
version: Joi.number(),
34+
}).empty(null),
35+
priceConfig: Joi.object().keys({
36+
key: Joi.string().required(),
37+
version: Joi.number(),
38+
}).empty(null),
3039
disabled: Joi.boolean().optional(),
3140
hidden: Joi.boolean().optional(),
3241
createdAt: Joi.any().strip(),

src/routes/projectTemplates/create.spec.js

Lines changed: 49 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -12,23 +12,51 @@ import testUtil from '../../tests/util';
1212
const should = chai.should();
1313

1414
describe('CREATE project template', () => {
15-
before((done) => {
16-
testUtil.clearDb()
17-
.then(() => models.ProjectType.bulkCreate([
18-
{
19-
key: 'generic',
20-
displayName: 'Generic',
21-
icon: 'http://example.com/icon1.ico',
22-
question: 'question 1',
23-
info: 'info 1',
24-
aliases: ['key-1', 'key_1'],
25-
metadata: {},
26-
createdBy: 1,
27-
updatedBy: 1,
28-
},
29-
]))
30-
.then(() => done());
31-
});
15+
before(() => testUtil.clearDb()
16+
.then(() => models.ProjectType.bulkCreate([
17+
{
18+
key: 'generic',
19+
displayName: 'Generic',
20+
icon: 'http://example.com/icon1.ico',
21+
question: 'question 1',
22+
info: 'info 1',
23+
aliases: ['key-1', 'key_1'],
24+
metadata: {},
25+
createdBy: 1,
26+
updatedBy: 1,
27+
},
28+
]))
29+
.then(() => models.Form.create({
30+
key: 'test',
31+
config: {
32+
test: 'test1',
33+
},
34+
version: 1,
35+
revision: 1,
36+
createdBy: 1,
37+
updatedBy: 1,
38+
}))
39+
.then(() => models.PlanConfig.create({
40+
key: 'test',
41+
config: {
42+
test: 'test1',
43+
},
44+
version: 1,
45+
revision: 1,
46+
createdBy: 1,
47+
updatedBy: 1,
48+
}))
49+
.then(() => models.PriceConfig.create({
50+
key: 'test',
51+
config: {
52+
test: 'test1',
53+
},
54+
version: 1,
55+
revision: 1,
56+
createdBy: 1,
57+
updatedBy: 1,
58+
})),
59+
);
3260

3361
describe('POST /projects/metadata/projectTemplates', () => {
3462
const body = {
@@ -80,30 +108,14 @@ describe('CREATE project template', () => {
80108
disabled: true,
81109
hidden: true,
82110
form: {
83-
scope1: {
84-
subScope1A: 1,
85-
subScope1B: 2,
86-
},
87-
scope2: [1, 2, 3],
111+
key: 'test',
112+
version: 1,
88113
},
89114
priceConfig: {
90-
first: '$800',
115+
key: 'test',
91116
},
92117
planConfig: {
93-
phase1: {
94-
name: 'phase 1',
95-
details: {
96-
anyDetails: 'any details 1',
97-
},
98-
others: ['others 11', 'others 12'],
99-
},
100-
phase2: {
101-
name: 'phase 2',
102-
details: {
103-
anyDetails: 'any details 2',
104-
},
105-
others: ['others 21', 'others 22'],
106-
},
118+
key: 'test',
107119
},
108120
},
109121
};

src/routes/projectTemplates/update.js

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -27,9 +27,18 @@ const schema = {
2727
aliases: Joi.array(),
2828
scope: Joi.object().empty(null),
2929
phases: Joi.object().empty(null),
30-
form: Joi.object().empty(null),
31-
planConfig: Joi.object().empty(null),
32-
priceConfig: Joi.object().empty(null),
30+
form: Joi.object().keys({
31+
key: Joi.string().required(),
32+
version: Joi.number(),
33+
}).empty(null),
34+
planConfig: Joi.object().keys({
35+
key: Joi.string().required(),
36+
version: Joi.number(),
37+
}).empty(null),
38+
priceConfig: Joi.object().keys({
39+
key: Joi.string().required(),
40+
version: Joi.number(),
41+
}).empty(null),
3342
disabled: Joi.boolean().optional(),
3443
hidden: Joi.boolean().optional(),
3544
createdAt: Joi.any().strip(),

src/routes/projectTemplates/update.spec.js

Lines changed: 35 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -81,7 +81,37 @@ describe('UPDATE project template', () => {
8181
.then((createdTemplate) => {
8282
templateId = createdTemplate.id;
8383
return Promise.resolve();
84-
}),
84+
})
85+
.then(() => models.Form.create({
86+
key: 'test',
87+
config: {
88+
test: 'test1',
89+
},
90+
version: 1,
91+
revision: 1,
92+
createdBy: 1,
93+
updatedBy: 1,
94+
}))
95+
.then(() => models.PlanConfig.create({
96+
key: 'test',
97+
config: {
98+
test: 'test1',
99+
},
100+
version: 1,
101+
revision: 1,
102+
createdBy: 1,
103+
updatedBy: 1,
104+
}))
105+
.then(() => models.PriceConfig.create({
106+
key: 'test',
107+
config: {
108+
test: 'test1',
109+
},
110+
version: 1,
111+
revision: 1,
112+
createdBy: 1,
113+
updatedBy: 1,
114+
})),
85115
);
86116
after(testUtil.clearDb);
87117

@@ -131,30 +161,14 @@ describe('UPDATE project template', () => {
131161
disabled: true,
132162
hidden: true,
133163
form: {
134-
scope1: {
135-
subScope1A: 1,
136-
subScope1B: 2,
137-
},
138-
scope2: [1, 2, 3],
164+
key: 'test',
165+
version: 1,
139166
},
140167
priceConfig: {
141-
first: '$800',
168+
key: 'test',
142169
},
143170
planConfig: {
144-
phase1: {
145-
name: 'phase 1',
146-
details: {
147-
anyDetails: 'any details 1',
148-
},
149-
others: ['others 11', 'others 12'],
150-
},
151-
phase2: {
152-
name: 'phase 2',
153-
details: {
154-
anyDetails: 'any details 2',
155-
},
156-
others: ['others 21', 'others 22'],
157-
},
171+
key: 'test',
158172
},
159173
},
160174
};

0 commit comments

Comments
 (0)