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

Commit ea760e5

Browse files
authored
Fix Issue 902: Values from Leaf node is not copied over (#206)
1 parent a9fd7f9 commit ea760e5

File tree

2 files changed

+142
-18
lines changed

2 files changed

+142
-18
lines changed

src/commands/infra/generate.test.ts

Lines changed: 120 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,126 @@ afterAll(() => {
2424
disableVerboseLogging();
2525
});
2626

27+
describe("test dirIteration", () => {
28+
it("parentObject and leafObject are undefined", () => {
29+
const result = dirIteration(undefined, undefined);
30+
expect(result).toEqual({});
31+
});
32+
it("parentObject is undefined", () => {
33+
const leafObject = {
34+
"custerName": "cluster1"
35+
};
36+
const result = dirIteration(undefined, leafObject);
37+
expect(result).toEqual(leafObject);
38+
});
39+
it("leafObject is undefined", () => {
40+
const parentObject = {
41+
"custerName": "cluster1"
42+
};
43+
const result = dirIteration(parentObject, undefined);
44+
expect(result).toEqual(parentObject);
45+
});
46+
it("one variable test", () => {
47+
const parentObject = {
48+
"custerName": "parent"
49+
};
50+
const leafObject = {
51+
"custerName": "left"
52+
};
53+
const result = dirIteration(parentObject, leafObject);
54+
expect(result).toEqual(leafObject);
55+
});
56+
it("one variable test, parentObject without the variable", () => {
57+
const parentObject = {
58+
};
59+
const leafObject = {
60+
"custerName": "leaf"
61+
};
62+
const result = dirIteration(parentObject, leafObject);
63+
expect(result).toEqual(leafObject);
64+
});
65+
it("one variable test, leafObject without the variable", () => {
66+
const parentObject = {
67+
"custerName": "leaf"
68+
};
69+
const leafObject = {
70+
};
71+
const result = dirIteration(parentObject, leafObject);
72+
expect(result).toEqual(parentObject);
73+
});
74+
it("multiple variables test", () => {
75+
const parentObject = {
76+
"custerName": "parent",
77+
"variable1": "parent1",
78+
"variable2": "parent2"
79+
};
80+
const leafObject = {
81+
"custerName": "leaf",
82+
"variable1": "leaf1",
83+
"variable2": "leaf2"
84+
};
85+
const result = dirIteration(parentObject, leafObject);
86+
expect(result).toEqual(leafObject);
87+
});
88+
it("multiple variables test, leafObject does not values", () => {
89+
const parentObject = {
90+
"custerName": "parent",
91+
"variable1": "parent1",
92+
"variable2": "parent2"
93+
};
94+
const leafObject = {
95+
};
96+
const result = dirIteration(parentObject, leafObject);
97+
expect(result).toEqual(parentObject);
98+
});
99+
it("multiple variables test, parentObject does not values", () => {
100+
const parentObject = {
101+
};
102+
const leafObject = {
103+
"custerName": "leaf",
104+
"variable1": "leaf1",
105+
"variable2": "leaf2"
106+
};
107+
const result = dirIteration(parentObject, leafObject);
108+
expect(result).toEqual(leafObject);
109+
});
110+
it("multiple variables test, parentObject has more values", () => {
111+
const parentObject = {
112+
"custerName": "parent",
113+
"variable1": "parent1",
114+
"variable2": "parent2",
115+
"xextra": "xextra"
116+
};
117+
const leafObject = {
118+
"custerName": "leaf",
119+
"variable1": "leaf1",
120+
"variable2": "leaf2"
121+
};
122+
const result = dirIteration(parentObject, leafObject);
123+
expect(result).toEqual({
124+
"custerName": "leaf",
125+
"variable1": "leaf1",
126+
"variable2": "leaf2",
127+
"xextra": "xextra"
128+
});
129+
});
130+
it("multiple variables test, leafObject has more values", () => {
131+
const parentObject = {
132+
"custerName": "parent",
133+
"variable1": "parent1",
134+
"variable2": "parent2"
135+
};
136+
const leafObject = {
137+
"custerName": "leaf",
138+
"variable1": "leaf1",
139+
"variable2": "leaf2",
140+
"xextra": "xextra"
141+
};
142+
const result = dirIteration(parentObject, leafObject);
143+
expect(result).toEqual(leafObject);
144+
});
145+
})
146+
27147
describe("Validate sources in definition.yaml files", () => {
28148
test("Validating that a provided project folder contains definition.yaml files with valid source, version, and template", async () => {
29149
let mockParentPath = "src/commands/infra/mocks/discovery-service";

src/commands/infra/generate.ts

Lines changed: 22 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -329,7 +329,7 @@ export const generateConfig = async (
329329
}
330330
if (typeof parentInfraConfig !== "undefined") {
331331
if (leafInfraConfig) {
332-
const finalDefinition = await dirIteration(
332+
const finalDefinition = dirIteration(
333333
parentInfraConfig.variables,
334334
leafInfraConfig.variables
335335
);
@@ -345,7 +345,7 @@ export const generateConfig = async (
345345

346346
// Create a backend.tfvars for remote backend configuration
347347
if (parentInfraConfig.backend && leafInfraConfig.backend) {
348-
const finalBackendDefinition = await dirIteration(
348+
const finalBackendDefinition = dirIteration(
349349
parentInfraConfig.backend,
350350
leafInfraConfig.backend
351351
);
@@ -480,24 +480,28 @@ export const singleDefinitionGeneration = async (
480480
* @param parentObject parent definition object
481481
* @param leafObject leaf definition object
482482
*/
483-
export const dirIteration = async (
484-
parentObject: any,
485-
leafObject: any
486-
): Promise<string[]> => {
487-
for (const parentKey in parentObject) {
488-
if (parentKey) {
489-
for (const leafKey in leafObject) {
490-
if (parentKey === leafKey) {
491-
let parentVal = parentObject[parentKey];
492-
parentVal = leafObject[leafKey];
493-
} else {
494-
// Append to parent variables block
495-
const leafVal = leafObject[leafKey];
496-
parentObject[leafKey] = leafVal;
497-
}
498-
}
483+
export const dirIteration = (
484+
parentObject: { [key: string]: any } | undefined,
485+
leafObject: { [key: string]: any } | undefined,
486+
): { [key: string]: any } => {
487+
if (!parentObject) {
488+
if (!leafObject) {
489+
return {};
499490
}
491+
// poor man clone. can we use lodash?
492+
return JSON.parse(JSON.stringify(leafObject));
493+
}
494+
if (!leafObject) {
495+
return parentObject;
500496
}
497+
498+
// parent take leaf's value
499+
Object.keys(leafObject).forEach(k => {
500+
if (leafObject[k]) {
501+
parentObject[k] = leafObject[k];
502+
}
503+
});
504+
501505
return parentObject;
502506
};
503507

0 commit comments

Comments
 (0)