1
1
import React from 'react' ;
2
2
import {
3
3
render ,
4
+ renderHook ,
4
5
screen ,
5
6
userEvent ,
6
7
waitFor ,
@@ -10,6 +11,7 @@ import {
10
11
import {
11
12
AssistantProvider ,
12
13
CompassAssistantProvider ,
14
+ useAssistantActions ,
13
15
type AssistantMessage ,
14
16
} from './compass-assistant-provider' ;
15
17
import { expect } from 'chai' ;
@@ -41,6 +43,94 @@ const TestComponent: React.FunctionComponent<{
41
43
) ;
42
44
} ;
43
45
46
+ describe ( 'useAssistantActions' , function ( ) {
47
+ const createWrapper = ( chat : Chat < AssistantMessage > ) => {
48
+ function TestWrapper ( { children } : { children : React . ReactNode } ) {
49
+ return (
50
+ < DrawerContentProvider >
51
+ < AssistantProvider chat = { chat } > { children } </ AssistantProvider >
52
+ </ DrawerContentProvider >
53
+ ) ;
54
+ }
55
+ return TestWrapper ;
56
+ } ;
57
+
58
+ it ( 'returns empty object when AI features are disabled via isAIFeatureEnabled' , function ( ) {
59
+ const { result } = renderHook ( ( ) => useAssistantActions ( ) , {
60
+ wrapper : createWrapper ( createMockChat ( { messages : [ ] } ) ) ,
61
+ preferences : {
62
+ enableAIAssistant : true ,
63
+ // These control isAIFeatureEnabled
64
+ enableGenAIFeatures : false ,
65
+ enableGenAIFeaturesAtlasOrg : true ,
66
+ cloudFeatureRolloutAccess : { GEN_AI_COMPASS : true } ,
67
+ } ,
68
+ } ) ;
69
+
70
+ expect ( result . current ) . to . deep . equal ( { } ) ;
71
+ } ) ;
72
+
73
+ it ( 'returns empty object when enableGenAIFeaturesAtlasOrg is disabled' , function ( ) {
74
+ const { result } = renderHook ( ( ) => useAssistantActions ( ) , {
75
+ wrapper : createWrapper ( createMockChat ( { messages : [ ] } ) ) ,
76
+ preferences : {
77
+ enableAIAssistant : true ,
78
+ enableGenAIFeatures : true ,
79
+ enableGenAIFeaturesAtlasOrg : false ,
80
+ cloudFeatureRolloutAccess : { GEN_AI_COMPASS : true } ,
81
+ } ,
82
+ } ) ;
83
+
84
+ expect ( result . current ) . to . deep . equal ( { } ) ;
85
+ } ) ;
86
+
87
+ it ( 'returns empty object when cloudFeatureRolloutAccess is disabled' , function ( ) {
88
+ const { result } = renderHook ( ( ) => useAssistantActions ( ) , {
89
+ wrapper : createWrapper ( createMockChat ( { messages : [ ] } ) ) ,
90
+ preferences : {
91
+ enableAIAssistant : true ,
92
+ enableGenAIFeatures : true ,
93
+ enableGenAIFeaturesAtlasOrg : true ,
94
+ cloudFeatureRolloutAccess : { GEN_AI_COMPASS : false } ,
95
+ } ,
96
+ } ) ;
97
+
98
+ expect ( result . current ) . to . deep . equal ( { } ) ;
99
+ } ) ;
100
+
101
+ it ( 'returns empty object when enableAIAssistant preference is disabled' , function ( ) {
102
+ const { result } = renderHook ( ( ) => useAssistantActions ( ) , {
103
+ wrapper : createWrapper ( createMockChat ( { messages : [ ] } ) ) ,
104
+ preferences : {
105
+ enableAIAssistant : false ,
106
+ enableGenAIFeatures : true ,
107
+ enableGenAIFeaturesAtlasOrg : true ,
108
+ cloudFeatureRolloutAccess : { GEN_AI_COMPASS : true } ,
109
+ } ,
110
+ } ) ;
111
+
112
+ expect ( result . current ) . to . deep . equal ( { } ) ;
113
+ } ) ;
114
+
115
+ it ( 'returns actions when both AI features and assistant flag are enabled' , function ( ) {
116
+ const { result } = renderHook ( ( ) => useAssistantActions ( ) , {
117
+ wrapper : createWrapper ( createMockChat ( { messages : [ ] } ) ) ,
118
+ preferences : {
119
+ enableAIAssistant : true ,
120
+ enableGenAIFeatures : true ,
121
+ enableGenAIFeaturesAtlasOrg : true ,
122
+ cloudFeatureRolloutAccess : { GEN_AI_COMPASS : true } ,
123
+ } ,
124
+ } ) ;
125
+
126
+ expect ( Object . keys ( result . current ) ) . to . have . length . greaterThan ( 0 ) ;
127
+ expect ( result . current . interpretExplainPlan ) . to . be . a ( 'function' ) ;
128
+ expect ( result . current . interpretConnectionError ) . to . be . a ( 'function' ) ;
129
+ expect ( result . current . tellMoreAboutInsight ) . to . be . a ( 'function' ) ;
130
+ expect ( result . current . clearChat ) . to . be . a ( 'function' ) ;
131
+ } ) ;
132
+ } ) ;
133
+
44
134
describe ( 'AssistantProvider' , function ( ) {
45
135
const mockMessages : AssistantMessage [ ] = [
46
136
{
@@ -57,15 +147,25 @@ describe('AssistantProvider', function () {
57
147
58
148
it ( 'always renders children' , function ( ) {
59
149
render ( < TestComponent chat = { createMockChat ( { messages : [ ] } ) } /> , {
60
- preferences : { enableAIAssistant : true } ,
150
+ preferences : {
151
+ enableAIAssistant : true ,
152
+ enableGenAIFeatures : true ,
153
+ enableGenAIFeaturesAtlasOrg : true ,
154
+ cloudFeatureRolloutAccess : { GEN_AI_COMPASS : true } ,
155
+ } ,
61
156
} ) ;
62
157
63
158
expect ( screen . getByTestId ( 'provider-children' ) ) . to . exist ;
64
159
} ) ;
65
160
66
161
it ( 'does not render assistant drawer when AI assistant is disabled' , function ( ) {
67
162
render ( < TestComponent chat = { createMockChat ( { messages : [ ] } ) } /> , {
68
- preferences : { enableAIAssistant : false } ,
163
+ preferences : {
164
+ enableAIAssistant : false ,
165
+ enableGenAIFeatures : true ,
166
+ enableGenAIFeaturesAtlasOrg : true ,
167
+ cloudFeatureRolloutAccess : { GEN_AI_COMPASS : true } ,
168
+ } ,
69
169
} ) ;
70
170
71
171
expect ( screen . getByTestId ( 'provider-children' ) ) . to . exist ;
@@ -75,7 +175,12 @@ describe('AssistantProvider', function () {
75
175
76
176
it ( 'renders the assistant drawer as the first drawer item when AI assistant is enabled' , function ( ) {
77
177
render ( < TestComponent chat = { createMockChat ( { messages : [ ] } ) } /> , {
78
- preferences : { enableAIAssistant : true } ,
178
+ preferences : {
179
+ enableAIAssistant : true ,
180
+ enableGenAIFeatures : true ,
181
+ enableGenAIFeaturesAtlasOrg : true ,
182
+ cloudFeatureRolloutAccess : { GEN_AI_COMPASS : true } ,
183
+ } ,
79
184
} ) ;
80
185
81
186
expect ( screen . getByTestId ( 'lg-drawer-toolbar-icon_button-0' ) ) . to . have . attr (
@@ -96,7 +201,12 @@ describe('AssistantProvider', function () {
96
201
mockChat : Chat < AssistantMessage >
97
202
) : Promise < ReturnType < typeof render > > {
98
203
const result = render ( < TestComponent chat = { mockChat } autoOpen = { true } /> , {
99
- preferences : { enableAIAssistant : true } ,
204
+ preferences : {
205
+ enableAIAssistant : true ,
206
+ enableGenAIFeatures : true ,
207
+ enableGenAIFeaturesAtlasOrg : true ,
208
+ cloudFeatureRolloutAccess : { GEN_AI_COMPASS : true } ,
209
+ } ,
100
210
} ) ;
101
211
102
212
await waitFor ( ( ) => {
@@ -281,7 +391,12 @@ describe('AssistantProvider', function () {
281
391
< MockedProvider chat = { new Chat ( { } ) } />
282
392
</ DrawerContentProvider > ,
283
393
{
284
- preferences : { enableAIAssistant : true } ,
394
+ preferences : {
395
+ enableAIAssistant : true ,
396
+ enableGenAIFeatures : true ,
397
+ enableGenAIFeaturesAtlasOrg : true ,
398
+ cloudFeatureRolloutAccess : { GEN_AI_COMPASS : true } ,
399
+ } ,
285
400
}
286
401
) ;
287
402
0 commit comments