Skip to content

Commit e9b6652

Browse files
sudhirvermamohitsuman
authored andcommitted
Added odo catalog list components -o json to get list of available component types and versions (#1213)
1 parent 6545e3d commit e9b6652

File tree

2 files changed

+44
-39
lines changed

2 files changed

+44
-39
lines changed

src/odo.ts

+7-7
Original file line numberDiff line numberDiff line change
@@ -96,7 +96,7 @@ export class Command {
9696
return `odo list --app ${app} --project ${project} -o json`;
9797
}
9898
static listCatalogComponents() {
99-
return `odo catalog list components`;
99+
return `odo catalog list components -o json`;
100100
}
101101
static listCatalogServices () {
102102
return `odo catalog list services -o json`;
@@ -706,7 +706,9 @@ export class OdoImpl implements Odo {
706706

707707
public async getComponentTypes(): Promise<string[]> {
708708
const result: cliInstance.CliExitData = await this.execute(Command.listCatalogComponents());
709-
return result.stdout.trim().split('\n').slice(1).map((value) => value.replace(/\*/g, '').trim().replace(/\s{1,}/g, '|').split('|')[0]);
709+
const items = JSON.parse(result.stdout).items;
710+
const componentTypes: Array<string> = items.map((value: { metadata: { name: any; }; }) => value.metadata.name);
711+
return componentTypes;
710712
}
711713

712714
public async getComponentChildren(component: OpenShiftObject): Promise<OpenShiftObject[]> {
@@ -764,11 +766,9 @@ export class OdoImpl implements Odo {
764766

765767
public async getComponentTypeVersions(componentName: string) {
766768
const result: cliInstance.CliExitData = await this.execute(Command.listCatalogComponents());
767-
const versions = result.stdout.trim().split('\n').slice(1).filter((value) => {
768-
const data = value.replace(/\*/g, '').trim().replace(/\s{1,}/g, '|').split('|');
769-
return data[0] === componentName;
770-
}).map((value) => value.replace(/\*/g, '').trim().replace(/\s{1,}/g, '|').split('|')[2]);
771-
return versions && versions.length > 0 ? versions[0].split(',') : [];
769+
const items = JSON.parse(result.stdout).items;
770+
const versions = items.find((value: { metadata: { name: string; }; }) => value.metadata.name === componentName);
771+
return versions.spec.allTags;
772772
}
773773

774774
public async getServiceTemplates(): Promise<string[]> {

test/unit/odo.test.ts

+37-32
Original file line numberDiff line numberDiff line change
@@ -394,17 +394,35 @@ suite("odo", () => {
394394
});
395395

396396
suite("catalog integration", () => {
397-
const http = 'httpd';
398397
const nodejs = 'nodejs';
399-
const python = 'python';
400-
401-
const odoCatalog: string = [
402-
`NAME PROJECT TAGS`,
403-
`${nodejs} openshift 1.0`,
404-
`${python} openshift 1.0,2.0`,
405-
`${http} openshift 2.2,2.3,latest`
406-
].join('\n');
407-
let result: string[];
398+
399+
const odoCatalog = JSON.stringify({
400+
kind : "ComponentTypeList",
401+
apiVersion : "odo.openshift.io/v1alpha1",
402+
items: [
403+
{
404+
kind : "ComponentType",
405+
apiVersion : "odo.openshift.io/v1alpha1",
406+
metadata: {
407+
name : "nodejs",
408+
namespace : "openshift",
409+
creationTimestamp : null
410+
},
411+
spec: {
412+
allTags: [
413+
"0.10",
414+
"10",
415+
"4",
416+
"6",
417+
"8",
418+
"8-RHOAR",
419+
"latest",
420+
]
421+
}
422+
}
423+
]
424+
});
425+
408426
const catalogData: CliExitData = {
409427
error: null,
410428
stderr: '',
@@ -413,32 +431,19 @@ suite("odo", () => {
413431

414432
setup(async () => {
415433
sandbox.stub(odo.OdoImpl.prototype, 'execute').resolves(catalogData);
416-
result = await odoCli.getComponentTypes();
417434
});
418435

419-
test("getComponentTypes returns correct number of component types", () => {
420-
assert.equal(result.length, 3);
436+
test("getComponentTypes returns correct component type names", async () => {
437+
const result = await odoCli.getComponentTypes();
438+
expect(result.length).equals(1);
439+
expect(result[0]).equals('nodejs');
421440
});
422441

423-
test("getComponentTypes returns correct component type names", () => {
424-
const resultArray = result.filter((element: string) => {
425-
return element === http || element === nodejs || element === python;
426-
});
427-
assert.equal(resultArray.length, 3);
428-
});
429-
430-
test("getComponentTypeVersions returns correct number of tags for component type", () => {
431-
return Promise.all([
432-
odoCli.getComponentTypeVersions(nodejs).then((result)=> {
433-
assert.equal(result.length, 1);
434-
}),
435-
odoCli.getComponentTypeVersions(python).then((result)=> {
436-
assert.equal(result.length, 2);
437-
}),
438-
odoCli.getComponentTypeVersions(http).then((result)=> {
439-
assert.equal(result.length, 3);
440-
})
441-
]);
442+
test("getComponentTypeVersions returns correct number of tags for component type", async () => {
443+
const result = await odoCli.getComponentTypeVersions(nodejs);
444+
expect(result.length).equals(7);
445+
expect(result[0]).equals("0.10");
446+
expect(result[6]).equals("latest");
442447
});
443448
});
444449

0 commit comments

Comments
 (0)