Skip to content

Commit f91092a

Browse files
authored
feat(amazonq): Using AB variation value as customization name when overridden (#6035)
## Problem When a customization is overridden via AB, the name of the customization is not shown to users ## Solution Uses the variation field from the customizationArnOverride feature as the name for the customization. This allows the UX to show a customization name when the customizationArn is overriden
1 parent 7282c40 commit f91092a

File tree

5 files changed

+36
-4
lines changed

5 files changed

+36
-4
lines changed
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
{
2+
"type": "Feature",
3+
"description": "Retrieve and display a customization name when a customization is overridden in an AB test"
4+
}

packages/core/src/codewhisperer/util/customizationUtil.ts

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ import { showMessageWithUrl } from '../../shared/utilities/messages'
1818
import { parse } from '@aws-sdk/util-arn-parser'
1919
import { Commands } from '../../shared/vscode/commands2'
2020
import { vsCodeState } from '../models/model'
21-
import { FeatureConfigProvider } from '../../shared/featureConfig'
21+
import { FeatureConfigProvider, Features } from '../../shared/featureConfig'
2222

2323
/**
2424
*
@@ -108,15 +108,17 @@ export const getSelectedCustomization = (): Customization => {
108108
const result = selectedCustomizationArr[AuthUtil.instance.conn.label] || baseCustomization
109109

110110
// A/B case
111-
const arnOverride = FeatureConfigProvider.instance.getCustomizationArnOverride()
111+
const customizationFeature = FeatureConfigProvider.getFeature(Features.customizationArnOverride)
112+
const arnOverride = customizationFeature?.value.stringValue
113+
const customizationOverrideName = customizationFeature?.variation
112114
if (arnOverride === undefined || arnOverride === '') {
113115
return result
114116
} else {
115117
// A trick to prioritize arn from A/B over user's currently selected(for request and telemetry)
116118
// but still shows customization info of user's currently selected.
117119
return {
118120
arn: arnOverride,
119-
name: result.name,
121+
name: customizationOverrideName,
120122
description: result.description,
121123
}
122124
}

packages/core/src/shared/featureConfig.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import {
99
ListFeatureEvaluationsRequest,
1010
ListFeatureEvaluationsResponse,
1111
} from '../codewhisperer/client/codewhispereruserclient'
12+
import * as vscode from 'vscode'
1213
import { codeWhispererClient as client } from '../codewhisperer/client/codewhisperer'
1314
import { AuthUtil } from '../codewhisperer/util/authUtil'
1415
import { getLogger } from './logger'
@@ -152,6 +153,8 @@ export class FeatureConfigProvider {
152153
)
153154
this.featureConfigs.delete(Features.customizationArnOverride)
154155
}
156+
157+
await vscode.commands.executeCommand('aws.amazonq.refreshStatusBar')
155158
}
156159
}
157160
if (Auth.instance.isInternalAmazonUser()) {

packages/core/src/test/fake/mockFeatureConfigData.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,4 +21,9 @@ export const mockFeatureConfigsData: FeatureEvaluation[] = [
2121
variation: 'TREATMENT',
2222
value: { stringValue: 'testValue' },
2323
},
24+
{
25+
feature: 'customizationArnOverride',
26+
variation: 'customizationName',
27+
value: { stringValue: 'customizationARN' },
28+
},
2429
]

packages/core/src/test/shared/featureConfig.test.ts

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ describe('FeatureConfigProvider', () => {
4848
it('test getFeatureConfigsTelemetry will return expected string', async () => {
4949
assert.strictEqual(
5050
FeatureConfigProvider.instance.getFeatureConfigsTelemetry(),
51-
`{testFeature: TREATMENT, featureA: CONTROL, featureB: TREATMENT}`
51+
`{testFeature: TREATMENT, featureA: CONTROL, featureB: TREATMENT, customizationArnOverride: customizationName}`
5252
)
5353
})
5454

@@ -77,6 +77,13 @@ describe('FeatureConfigProvider', () => {
7777
},
7878
variation: 'TREATMENT',
7979
},
80+
customizationArnOverride: {
81+
name: 'customizationArnOverride',
82+
value: {
83+
stringValue: 'customizationARN',
84+
},
85+
variation: 'customizationName',
86+
},
8087
}
8188

8289
assert.deepStrictEqual(Object.fromEntries(featureConfigs), expectedFeatureConfigs)
@@ -95,6 +102,17 @@ describe('FeatureConfigProvider', () => {
95102
assert.strictEqual(FeatureConfigProvider.isEnabled('feature-does-not-exist' as FeatureName), false)
96103
})
97104

105+
it('should retrieve customization override values', async () => {
106+
assert.strictEqual(
107+
FeatureConfigProvider.getFeature(Features.customizationArnOverride)?.value.stringValue,
108+
'customizationARN'
109+
)
110+
assert.strictEqual(
111+
FeatureConfigProvider.getFeature(Features.customizationArnOverride)?.variation,
112+
'customizationName'
113+
)
114+
})
115+
98116
describe('getProjectContextGroup', function () {
99117
beforeEach(function () {
100118
sinon.restore()

0 commit comments

Comments
 (0)