Skip to content

Commit 2e70650

Browse files
authored
Exit from command without calling odo if port is not selected (#444)
Fix #443.
1 parent 2382cb5 commit 2e70650

File tree

2 files changed

+19
-5
lines changed

2 files changed

+19
-5
lines changed

src/openshift/url.ts

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,11 +16,15 @@ export class Url {
1616
const portsResult: CliExitData = await Url.odo.execute(`oc get service ${context.getName()}-${app.getName()} --namespace ${project.getName()} -o jsonpath="{range .spec.ports[*]}{.port}{','}{end}"`);
1717
let ports: string[] = portsResult.stdout.trim().split(',');
1818
ports = ports.slice(0, ports.length-1);
19-
let port: string = ports[0];
20-
if (ports.length > 1) {
19+
let port: string;
20+
if (ports.length === 1) {
21+
port = ports[0];
22+
} else if (ports.length > 1) {
2123
port = await vscode.window.showQuickPick(ports, {placeHolder: "Select port to expose"});
24+
} else {
25+
return Promise.reject(`Component '${context.getName()}' has no ports decalred.`);
2226
}
23-
return Promise.resolve()
27+
return port === undefined ? undefined : Promise.resolve()
2428
.then(async () => Url.odo.execute(`odo url create --port ${port} --project ${project.getName()} --app ${app.getName()} --component ${context.getName()}`))
2529
.then(() => `URL for component '${context.getName()}' successfully created`)
2630
.catch((err) => Promise.reject(`Failed to create URL for component '${context.getName()}'`));

test/openshift/url.test.ts

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ suite('Openshift/URL', () => {
3535

3636
test('asks to select port if more that one exposed and returns message', async () => {
3737
execStub = sandbox.stub(OdoImpl.prototype, 'execute');
38-
execStub.onFirstCall().resolves({error: null, stdout: 'port1,port2,port3', stderr: ''});
38+
execStub.onFirstCall().resolves({error: null, stdout: 'port1,port2,port3,', stderr: ''});
3939
execStub.onSecondCall().resolves();
4040
sandbox.stub(vscode.window, 'showQuickPick').resolves('port1');
4141
const result = await Url.create(componentItem);
@@ -46,12 +46,22 @@ suite('Openshift/URL', () => {
4646

4747
test('rejects when fails to create Url', () => {
4848
execStub = sandbox.stub(OdoImpl.prototype, 'execute');
49-
execStub.onFirstCall().resolves({error: null, stdout: 'port1', stderr: ''});
49+
execStub.onFirstCall().resolves({error: null, stdout: 'port1,', stderr: ''});
5050
execStub.onSecondCall().rejects();
5151

5252
return Url.create(componentItem).catch((err) => {
5353
expect(err).equals(`Failed to create URL for component '${componentItem.getName()}'`);
5454
});
5555
});
56+
57+
test('rejects when component has no ports declared', () => {
58+
execStub = sandbox.stub(OdoImpl.prototype, 'execute');
59+
execStub.onFirstCall().resolves({error: null, stdout: '', stderr: ''});
60+
execStub.onSecondCall().rejects();
61+
62+
return Url.create(componentItem).catch((err) => {
63+
expect(err).equals(`Component '${componentItem.getName()}' has no ports decalred.`);
64+
});
65+
});
5666
});
5767
});

0 commit comments

Comments
 (0)