Skip to content

Commit 9ee0d2c

Browse files
Improved unit test for create broker and formatting code
1 parent 48dab99 commit 9ee0d2c

File tree

2 files changed

+119
-34
lines changed

2 files changed

+119
-34
lines changed

src/commands/missionctrl/broker/create.ts

Lines changed: 17 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
1-
import { Flags } from '@oclif/core'
1+
import {Flags} from '@oclif/core'
22

3-
import { ScCommand } from '../../../sc-command.js'
4-
import { EventBrokerCreateApiResponse, EventBrokerCreateDetail } from '../../../types/broker.js'
5-
import { camelCaseToTitleCase, renderKeyValueTable } from '../../../util/internal.js'
6-
import { ScConnection } from '../../../util/sc-connection.js'
3+
import {ScCommand} from '../../../sc-command.js'
4+
import {EventBrokerCreateApiResponse, EventBrokerCreateDetail} from '../../../types/broker.js'
5+
import {camelCaseToTitleCase, renderKeyValueTable} from '../../../util/internal.js'
6+
import {ScConnection} from '../../../util/sc-connection.js'
77

88
export default class MissionctrlBrokerCreate extends ScCommand<typeof MissionctrlBrokerCreate> {
99
static override args = {}
@@ -12,7 +12,9 @@ export default class MissionctrlBrokerCreate extends ScCommand<typeof Missionctr
1212
Your token must have one of the permissions listed in the Token Permissions.
1313
1414
Token Permissions: [ \`services:post\` ]`
15-
static override examples = ['<%= config.bin %> <%= command.id %> --name=MyBrokerName --datacenter-id=eks-ca-central-1a --service-class-id=DEVELOPER']
15+
static override examples = [
16+
'<%= config.bin %> <%= command.id %> --name=MyBrokerName --datacenter-id=eks-ca-central-1a --service-class-id=DEVELOPER',
17+
]
1618
static override flags = {
1719
'datacenter-id': Flags.string({
1820
char: 'd',
@@ -21,8 +23,7 @@ Token Permissions: [ \`services:post\` ]`
2123
}),
2224
'env-name': Flags.string({
2325
char: 'e',
24-
description:
25-
`The name of the environment environment where you want to create the service.
26+
description: `The name of the environment environment where you want to create the service.
2627
You can only specify an environment identifier when creating services in a Public Region.
2728
You cannot specify an environment identifier when creating a service in a Dedicated Region.
2829
If no name is provided, the service will be created in the default environment.`,
@@ -45,7 +46,7 @@ Token Permissions: [ \`services:post\` ]`
4546
name: Flags.string({
4647
char: 'n',
4748
description: 'Name of the event broker service to create.',
48-
required: true
49+
required: true,
4950
}),
5051
'redundancy-group-ssl-enabled': Flags.boolean({
5152
char: 'r',
@@ -65,7 +66,7 @@ Token Permissions: [ \`services:post\` ]`
6566
}
6667

6768
public async run(): Promise<EventBrokerCreateDetail> {
68-
const { flags } = await this.parse(MissionctrlBrokerCreate)
69+
const {flags} = await this.parse(MissionctrlBrokerCreate)
6970

7071
const datacenterId = flags['datacenter-id'] ?? ''
7172
const envName = flags['env-name'] ?? ''
@@ -86,7 +87,7 @@ Token Permissions: [ \`services:post\` ]`
8687
// If envName is provided, retrieve the environment ID
8788
if (envName) {
8889
const envApiUrl = `/platform/environments?name=${envName}`
89-
const envResp = await conn.get<{ data: { id: string }[] }>(envApiUrl)
90+
const envResp = await conn.get<{data: {id: string}[]}>(envApiUrl)
9091
if (envResp.data.length > 1) {
9192
this.error(`Multiple environments found with: ${name}. Exactly one environment must match the provided name.`)
9293
} else {
@@ -96,12 +97,12 @@ Token Permissions: [ \`services:post\` ]`
9697

9798
// API body
9899
const body = {
99-
...(datacenterId && { datacenterId }),
100-
...(envId) && { environmentId: envId },
101-
...(eventBrokerVersion && { eventBrokerVersion }),
100+
...(datacenterId && {datacenterId}),
101+
...(envId && {environmentId: envId}),
102+
...(eventBrokerVersion && {eventBrokerVersion}),
102103
locked,
103-
...(maxSpoolUsage && { maxSpoolUsage }),
104-
...(msgVpnName && { msgVpnName }),
104+
...(maxSpoolUsage && {maxSpoolUsage}),
105+
...(msgVpnName && {msgVpnName}),
105106
name,
106107
redundancyGroupSslEnabled,
107108
serviceClassId,
Lines changed: 102 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,11 @@
1-
import { runCommand } from '@oclif/test'
2-
import { expect } from 'chai'
1+
import {runCommand} from '@oclif/test'
2+
import {expect} from 'chai'
33
import * as sinon from 'sinon'
44

5-
import { ScConnection } from '../../../../src/util/sc-connection.js'
6-
import { anEnv, setEnvVariables } from '../../../util/test-utils'
5+
import {EventBrokerCreateApiResponse, EventBrokerCreateDetail} from '../../../../src/types/broker.js'
6+
import {camelCaseToTitleCase, renderKeyValueTable} from '../../../../src/util/internal.js'
7+
import {ScConnection} from '../../../../src/util/sc-connection.js'
8+
import {aBroker, anEnv, setEnvVariables} from '../../../util/test-utils'
79

810
describe('missionctrl:broker:create', () => {
911
setEnvVariables()
@@ -25,39 +27,121 @@ describe('missionctrl:broker:create', () => {
2527
})
2628

2729
it('runs missionctrl:broker:create cmd', async () => {
28-
const { stdout } = await runCommand('missionctrl:broker:create')
30+
const {stdout} = await runCommand('missionctrl:broker:create')
2931
expect(stdout).to.contain('')
3032
})
3133

3234
it(`runs missionctrl:broker:create -n ${brokerName} -d ${brokerDC} -c ${brokerSvcClassId}`, async () => {
33-
const createOutputMsg = 'Event broker service created successfully.'
34-
scConnPostStub.returns(createOutputMsg)
35+
// Arrange
36+
const expectBody = {
37+
datacenterId: brokerDC,
38+
locked: false,
39+
name: brokerName,
40+
redundancyGroupSslEnabled: false,
41+
serviceClassId: brokerSvcClassId,
42+
}
43+
const expectBroker: EventBrokerCreateDetail = aBroker(brokerName, brokerDC)
44+
const expectResponse: EventBrokerCreateApiResponse = {
45+
data: expectBroker,
46+
meta: {},
47+
}
48+
49+
scConnPostStub.returns(expectResponse)
50+
51+
const tableRows = [
52+
['Key', 'Value'],
53+
...Object.entries(expectResponse.data).map(([key, value]) => [camelCaseToTitleCase(key), value]),
54+
]
3555

36-
const { stdout } = await runCommand(`missionctrl:broker:create -n ${brokerName} -d ${brokerDC} -c ${brokerSvcClassId}`)
37-
expect(stdout).to.contain(createOutputMsg)
56+
// Act
57+
const {stdout} = await runCommand(
58+
`missionctrl:broker:create -n ${brokerName} -d ${brokerDC} -c ${brokerSvcClassId}`,
59+
)
60+
61+
// Assert
62+
expect(scConnPostStub.getCall(0).calledWith('/missionControl/eventBrokerServices', expectBody)).to.be.true
63+
expect(stdout).to.contain(renderKeyValueTable(tableRows))
64+
})
65+
66+
it(`runs missionctrl:broker:create -n ${brokerName} -d ${brokerDC} -c ${brokerSvcClassId} -l -s 10 -m MyTestMsgVpn -r -v 10.0.0.1`, async () => {
67+
// Arrange
68+
const expectBody = {
69+
datacenterId: brokerDC,
70+
eventBrokerVersion: '10.0.0.1',
71+
locked: true,
72+
maxSpoolUsage: '10',
73+
msgVpnName: 'MyTestMsgVpn',
74+
name: brokerName,
75+
redundancyGroupSslEnabled: true,
76+
serviceClassId: brokerSvcClassId,
77+
}
78+
const expectBroker: EventBrokerCreateDetail = aBroker(brokerName, brokerDC)
79+
const expectResponse: EventBrokerCreateApiResponse = {
80+
data: expectBroker,
81+
meta: {},
82+
}
83+
84+
scConnPostStub.returns(expectResponse)
85+
86+
const tableRows = [
87+
['Key', 'Value'],
88+
...Object.entries(expectResponse.data).map(([key, value]) => [camelCaseToTitleCase(key), value]),
89+
]
90+
91+
// Act
92+
const {stdout} = await runCommand(
93+
`missionctrl:broker:create -n ${brokerName} -d ${brokerDC} -c ${brokerSvcClassId} -l -s 10 -m MyTestMsgVpn -r -v 10.0.0.1`,
94+
)
95+
96+
// Assert
97+
expect(scConnPostStub.getCall(0).calledWith('/missionControl/eventBrokerServices', expectBody)).to.be.true
98+
expect(stdout).to.contain(renderKeyValueTable(tableRows))
3899
})
39100

40101
it(`runs missionctrl:broker:create -e ${envName} -n ${brokerName} -d ${brokerDC} -c ${brokerSvcClassId}`, async () => {
41102
// Arrange
42-
const envName = 'Default'
43103
const envs = {
44-
data: [anEnv(envName, true, false)],
104+
data: [anEnv(envName, false, false)],
45105
meta: {
46106
pagination: {
47107
count: 1,
48108
nextPage: null,
49109
pageNumber: 1,
50110
pageSize: 10,
51-
totalPages: 1
52-
}
53-
}
111+
totalPages: 1,
112+
},
113+
},
54114
}
115+
const expectBody = {
116+
datacenterId: brokerDC,
117+
environmentId: envs.data[0].id,
118+
locked: false,
119+
name: brokerName,
120+
redundancyGroupSslEnabled: false,
121+
serviceClassId: brokerSvcClassId,
122+
}
123+
const expectBroker: EventBrokerCreateDetail = aBroker(brokerName, brokerDC)
124+
const expectResponse: EventBrokerCreateApiResponse = {
125+
data: expectBroker,
126+
meta: {},
127+
}
128+
55129
scConnGetStub.returns(Promise.resolve(envs))
130+
scConnPostStub.returns(expectResponse)
131+
132+
const tableRows = [
133+
['Key', 'Value'],
134+
...Object.entries(expectResponse.data).map(([key, value]) => [camelCaseToTitleCase(key), value]),
135+
]
56136

57-
const createOutputMsg = 'Event broker service created successfully.'
58-
scConnPostStub.returns(createOutputMsg)
137+
// Act
138+
const {stdout} = await runCommand(
139+
`missionctrl:broker:create -e ${envName} -n ${brokerName} -d ${brokerDC} -c ${brokerSvcClassId}`,
140+
)
59141

60-
const { stdout } = await runCommand(`missionctrl:broker:create -e ${envName} -n ${brokerName} -d ${brokerDC} -c ${brokerSvcClassId}`)
61-
expect(stdout).to.contain(createOutputMsg)
142+
// Assert
143+
expect(scConnGetStub.getCall(0).args[0]).to.contain(`?name=${envName}`)
144+
expect(scConnPostStub.getCall(0).calledWith('/missionControl/eventBrokerServices', expectBody)).to.be.true
145+
expect(stdout).to.contain(renderKeyValueTable(tableRows))
62146
})
63147
})

0 commit comments

Comments
 (0)