Skip to content

Commit 7b41220

Browse files
committed
Added odo catalog list components -o json to get list of available component types and versions
1 parent c984206 commit 7b41220

File tree

2 files changed

+43
-38
lines changed

2 files changed

+43
-38
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`;
@@ -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

+36-31
Original file line numberDiff line numberDiff line change
@@ -391,17 +391,35 @@ suite("odo", () => {
391391
});
392392

393393
suite("catalog integration", () => {
394-
const http = 'httpd';
395394
const nodejs = 'nodejs';
396-
const python = 'python';
397395

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

411429
setup(async () => {
412430
sandbox.stub(odo.OdoImpl.prototype, 'execute').resolves(catalogData);
413-
result = await odoCli.getComponentTypes();
414431
});
415432

416-
test("getComponentTypes returns correct number of component types", () => {
417-
assert.equal(result.length, 3);
433+
test("getComponentTypes returns correct component type names", async () => {
434+
const result = await odoCli.getComponentTypes();
435+
expect(result.length).equals(1);
436+
expect(result[0]).equals('nodejs');
418437
});
419438

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

0 commit comments

Comments
 (0)