Skip to content

Commit 82a6acd

Browse files
Merge pull request #233 from contentstack/test/DX-542-reinstall-command-unit-test
dx-542 reinstall command unit test
2 parents 691e962 + 313acd3 commit 82a6acd

File tree

1 file changed

+271
-0
lines changed

1 file changed

+271
-0
lines changed
Lines changed: 271 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,271 @@
1+
import { ux, cliux, configHandler } from "@contentstack/cli-utilities";
2+
import { expect, test } from "@oclif/test";
3+
import * as mock from "../../mock/common.mock.json";
4+
import messages, { $t } from "../../../../src/messages";
5+
6+
const region: { cma: string; cda: string; name: string } =
7+
configHandler.get("region");
8+
const developerHubBaseUrl = configHandler.get("developerHubBaseUrl");
9+
describe("app:reinstall", () => {
10+
describe("Reinstall an app on a stack", () => {
11+
test
12+
.stdout({ print: true })
13+
.stub(ux.action, "stop", () => {})
14+
.stub(ux.action, "start", () => {})
15+
.stub(cliux, "inquire", async (...args: any) => {
16+
const [prompt]: any = args;
17+
const cases = {
18+
App: mock.apps[0].name,
19+
Organization: mock.organizations[0].name,
20+
Stack: mock.stacks[0].name,
21+
};
22+
23+
return (cases as Record<string, any>)[prompt.name];
24+
})
25+
.nock(region.cma, (api) =>
26+
api
27+
.get("/v3/organizations?limit=100&asc=name&include_count=true&skip=0")
28+
.reply(200, { organizations: mock.organizations })
29+
)
30+
.nock(region.cma, (api) =>
31+
api
32+
.get(
33+
`/v3/organizations/${mock.organizations[0].uid}/stacks?limit=100&asc=name&include_count=true&skip=0`
34+
)
35+
.reply(200, { stacks: mock.stacks })
36+
)
37+
.nock(`https://${developerHubBaseUrl}`, (api) =>
38+
api
39+
.get(`/manifests?limit=50&asc=name&include_count=true&skip=0`)
40+
.reply(200, {
41+
data: mock.apps,
42+
})
43+
)
44+
.nock(`https://${developerHubBaseUrl}`, (api) =>
45+
api
46+
.put(`/manifests/${mock.apps[0].uid}/reinstall`, {
47+
target_type: mock.apps[0].target_type,
48+
target_uid: mock.stacks[0].api_key,
49+
})
50+
.reply(200, {
51+
data: mock.apps,
52+
})
53+
)
54+
.command(["app:reinstall"])
55+
.do(({ stdout }) => {
56+
expect(stdout).to.contain(
57+
$t(messages.APP_REINSTALLED_SUCCESSFULLY, {
58+
app: mock.apps[0].name,
59+
target: mock.stacks[0].name,
60+
})
61+
);
62+
})
63+
.it("should reinstall a stack app....");
64+
});
65+
66+
describe("Show error when stack is not selected", () => {
67+
test
68+
.stdout({ print: process.env.PRINT === "true" || false })
69+
.stub(ux.action, "stop", () => {})
70+
.stub(ux.action, "start", () => {})
71+
.stub(cliux, "inquire", async (...args: any) => {
72+
const [prompt]: any = args;
73+
const cases = {
74+
App: mock.apps[0].name,
75+
Organization: mock.organizations[0].name,
76+
Stack: mock.stacks[0].name,
77+
};
78+
79+
return (cases as Record<string, any>)[prompt.name];
80+
})
81+
.nock(region.cma, (api) =>
82+
api
83+
.get("/v3/organizations?limit=100&asc=name&include_count=true&skip=0")
84+
.reply(200, { organizations: mock.organizations })
85+
)
86+
.nock(region.cma, (api) =>
87+
api
88+
.get(
89+
`/v3/organizations/${mock.organizations[0].uid}/stacks?limit=100&asc=name&include_count=true&skip=0`
90+
)
91+
.reply(200, { stacks: mock.stacks })
92+
)
93+
.nock(`https://${developerHubBaseUrl}`, (api) =>
94+
api
95+
.get("/manifests?limit=50&asc=name&include_count=true&skip=0")
96+
.reply(200, {
97+
data: mock.apps,
98+
})
99+
)
100+
.nock(`https://${developerHubBaseUrl}`, (api) =>
101+
api
102+
.put(`/manifests/${mock.apps[0].uid}/reinstall`, {
103+
target_type: mock.apps[0].target_type,
104+
target_uid: mock.stacks[0].api_key,
105+
})
106+
.reply(200, {
107+
data: mock.apps,
108+
})
109+
)
110+
.command(["app:reinstall"])
111+
.do(({ stdout }) => {
112+
expect(stdout).to.contain(
113+
$t(messages.MISSING_STACK_API_KEY, {
114+
app: mock.apps[0].name,
115+
})
116+
);
117+
})
118+
.it(
119+
"should display an error message when trying to reinstall a stack app without selecting a stack"
120+
);
121+
});
122+
123+
describe("Reinstall an app on organization", () => {
124+
test
125+
.stdout({ print: process.env.PRINT === "true" || false })
126+
.stub(ux.action, "stop", () => {})
127+
.stub(ux.action, "start", () => {})
128+
.stub(cliux, "inquire", async (...args: any) => {
129+
const [prompt]: any = args;
130+
const cases = {
131+
App: mock.apps[1].name,
132+
Organization: mock.organizations[0].name,
133+
};
134+
135+
return (cases as Record<string, any>)[prompt.name];
136+
})
137+
.nock(region.cma, (api) =>
138+
api
139+
.get("/v3/organizations?limit=100&asc=name&include_count=true&skip=0")
140+
.reply(200, { organizations: mock.organizations })
141+
)
142+
.nock(`https://${developerHubBaseUrl}`, (api) =>
143+
api
144+
.get("/manifests?limit=50&asc=name&include_count=true&skip=0")
145+
.reply(200, {
146+
data: mock.apps,
147+
})
148+
)
149+
.nock(`https://${developerHubBaseUrl}`, (api) =>
150+
api
151+
.put(`/manifests/${mock.apps[1].uid}/reinstall`, {
152+
target_type: mock.apps[1].target_type,
153+
target_uid: mock.organizations[0].uid,
154+
})
155+
.reply(200, {
156+
data: mock.apps,
157+
})
158+
)
159+
.command(["app:reinstall"])
160+
.do(({ stdout }) => {
161+
expect(stdout).to.contain(
162+
$t(messages.REINSTALLING_APP_NOTICE, {
163+
app: mock.apps[1].name,
164+
type: mock.apps[1].target_type,
165+
target: mock.organizations[0].uid,
166+
})
167+
);
168+
})
169+
.it("should reinstall an organization app");
170+
});
171+
172+
describe("Stack API Key and App ID provided through flags", () => {
173+
test
174+
.stdout({ print: process.env.PRINT === "true" || false })
175+
.stub(ux.action, "stop", () => {})
176+
.stub(ux.action, "start", () => {})
177+
.stub(cliux, "inquire", async (...args: any) => {
178+
const [prompt]: any = args;
179+
const cases = {
180+
Organization: mock.organizations[0].name,
181+
};
182+
183+
return (cases as Record<string, any>)[prompt.name];
184+
})
185+
.nock(region.cma, (api) =>
186+
api
187+
.get("/v3/organizations?limit=100&asc=name&include_count=true&skip=0")
188+
.reply(200, { organizations: mock.organizations })
189+
)
190+
.nock(region.cma, (api) =>
191+
api.get(`/v3/stacks`).reply(200, { stack: mock.stacks[0] })
192+
)
193+
.nock(`https://${developerHubBaseUrl}`, (api) =>
194+
api.get(`/manifests/${mock.apps[0].uid}`).reply(200, {
195+
data: mock.apps[0],
196+
})
197+
)
198+
.nock(`https://${developerHubBaseUrl}`, (api) =>
199+
api
200+
.put(`/manifests/${mock.apps[0].uid}/reinstall`, {
201+
target_type: mock.apps[0].target_type,
202+
target_uid: mock.stacks[0].api_key,
203+
})
204+
.reply(200, {
205+
data: mock.apps,
206+
})
207+
)
208+
.command([
209+
"app:reinstall",
210+
"--stack-api-key",
211+
mock.stacks[0].api_key,
212+
"--app-uid",
213+
mock.apps[0].uid,
214+
])
215+
.do(({ stdout }) => {
216+
expect(stdout).to.contain(
217+
$t(messages.APP_REINSTALLED_SUCCESSFULLY, {
218+
app: mock.apps[0].name,
219+
target: mock.stacks[0].name,
220+
})
221+
);
222+
})
223+
.it("should reinstall a stack app");
224+
});
225+
226+
describe("App is already latest version", () => {
227+
test
228+
.stdout({ print: process.env.PRINT === "true" || false })
229+
.stub(ux.action, "stop", () => {})
230+
.stub(ux.action, "start", () => {})
231+
.stub(cliux, "inquire", async (...args: any) => {
232+
const [prompt]: any = args;
233+
const cases = {
234+
App: mock.apps[1].name,
235+
Organization: mock.organizations[0].name,
236+
};
237+
238+
return (cases as Record<string, any>)[prompt.name];
239+
})
240+
.nock(region.cma, (api) =>
241+
api
242+
.get("/v3/organizations?limit=100&asc=name&include_count=true&skip=0")
243+
.reply(200, { organizations: mock.organizations })
244+
)
245+
.nock(`https://${developerHubBaseUrl}`, (api) =>
246+
api
247+
.get("/manifests?limit=50&asc=name&include_count=true&skip=0")
248+
.reply(200, {
249+
data: mock.apps,
250+
})
251+
)
252+
.nock(`https://${developerHubBaseUrl}`, (api) =>
253+
api
254+
.put(`/manifests/${mock.apps[1].uid}/install`, {
255+
target_type: mock.apps[1].target_type,
256+
target_uid: mock.stacks[0].uid,
257+
})
258+
.replyWithError({
259+
status: 400,
260+
message: "You are already using the latest version.",
261+
error: "Bad Request",
262+
})
263+
)
264+
.command(["app:install"])
265+
.exit(1)
266+
.do(({ stdout }) => {
267+
expect(stdout).to.contain("You are already using the latest version.");
268+
})
269+
.it("should fail with an error that already using the latest version.");
270+
});
271+
});

0 commit comments

Comments
 (0)