4
4
*/
5
5
6
6
import { loggerMock } from '@osd/logging/target/mocks' ;
7
- import { httpServerMock , savedObjectsClientMock , coreMock } from '../../../../core/server/mocks' ;
7
+ import {
8
+ httpServerMock ,
9
+ savedObjectsClientMock ,
10
+ coreMock ,
11
+ uiSettingsServiceMock ,
12
+ } from '../../../../core/server/mocks' ;
8
13
import { WorkspaceUiSettingsClientWrapper } from './workspace_ui_settings_client_wrapper' ;
9
14
import {
10
15
WORKSPACE_TYPE ,
11
16
CURRENT_WORKSPACE_PLACEHOLDER ,
12
17
SavedObjectsErrorHelpers ,
18
+ PackageInfo ,
19
+ UiSettingScope ,
13
20
} from '../../../../core/server' ;
14
21
import {
15
22
DEFAULT_DATA_SOURCE_UI_SETTINGS_ID ,
@@ -19,13 +26,34 @@ import * as utils from '../../../../core/server/utils';
19
26
20
27
jest . mock ( '../../../../core/server/utils' ) ;
21
28
29
+ const WORKSPACE_SCOPE_SETTING_WITHOUT_VALUE_ID = 'workspace_scope_setting_without_value' ;
30
+ const GLOBAL_SCOPE_SETTING_ID = 'global_scope_setting' ;
31
+
22
32
describe ( 'WorkspaceUiSettingsClientWrapper' , ( ) => {
23
33
const createWrappedClient = ( ) => {
24
34
const clientMock = savedObjectsClientMock . create ( ) ;
25
35
const getClientMock = jest . fn ( ) . mockReturnValue ( clientMock ) ;
26
36
const requestHandlerContext = coreMock . createRequestHandlerContext ( ) ;
27
37
const requestMock = httpServerMock . createOpenSearchDashboardsRequest ( ) ;
28
38
const logger = loggerMock . create ( ) ;
39
+ const uiSettingsMock = coreMock . createStart ( ) . uiSettings ;
40
+ const uiSettingsClientMock = uiSettingsServiceMock . createClient ( ) ;
41
+ uiSettingsMock . asScopedToClient . mockReturnValue ( uiSettingsClientMock ) ;
42
+ const pluginInitializerContext = coreMock . createPluginInitializerContext ( ) ;
43
+ ( pluginInitializerContext . env . packageInfo as PackageInfo ) . version = '3.0.0' ;
44
+
45
+ uiSettingsClientMock . getRegistered . mockReturnValue ( {
46
+ [ DEFAULT_DATA_SOURCE_UI_SETTINGS_ID ] : {
47
+ scope : [ UiSettingScope . GLOBAL , UiSettingScope . WORKSPACE ] ,
48
+ } ,
49
+ [ DEFAULT_INDEX_PATTERN_UI_SETTINGS_ID ] : {
50
+ scope : UiSettingScope . WORKSPACE ,
51
+ } ,
52
+ [ WORKSPACE_SCOPE_SETTING_WITHOUT_VALUE_ID ] : {
53
+ scope : UiSettingScope . WORKSPACE ,
54
+ } ,
55
+ [ GLOBAL_SCOPE_SETTING_ID ] : { } ,
56
+ } ) ;
29
57
30
58
clientMock . get . mockImplementation ( async ( type , id ) => {
31
59
if ( type === 'config' ) {
@@ -55,8 +83,20 @@ describe('WorkspaceUiSettingsClientWrapper', () => {
55
83
return Promise . reject ( ) ;
56
84
} ) ;
57
85
58
- const wrapper = new WorkspaceUiSettingsClientWrapper ( logger ) ;
86
+ clientMock . update . mockResolvedValue ( {
87
+ id : '3.0.0' ,
88
+ references : [ ] ,
89
+ type : 'config' ,
90
+ attributes : {
91
+ defaultDashboard : 'default-dashboard-global' ,
92
+ [ DEFAULT_DATA_SOURCE_UI_SETTINGS_ID ] : 'default-ds-global' ,
93
+ [ DEFAULT_INDEX_PATTERN_UI_SETTINGS_ID ] : 'default-index-global' ,
94
+ } ,
95
+ } ) ;
96
+
97
+ const wrapper = new WorkspaceUiSettingsClientWrapper ( logger , pluginInitializerContext . env ) ;
59
98
wrapper . setScopedClient ( getClientMock ) ;
99
+ wrapper . setAsScopedUISettingsClient ( uiSettingsMock . asScopedToClient ) ;
60
100
61
101
return {
62
102
wrappedClient : wrapper . wrapperFactory ( {
@@ -94,14 +134,18 @@ describe('WorkspaceUiSettingsClientWrapper', () => {
94
134
95
135
const { wrappedClient } = createWrappedClient ( ) ;
96
136
97
- const result = await wrappedClient . get ( `config` , `${ CURRENT_WORKSPACE_PLACEHOLDER } _3.0.0` ) ;
98
- expect ( result ) . toEqual ( {
137
+ const result = await wrappedClient . get < {
138
+ [ key : string ] : unknown ;
139
+ } > ( `config` , `${ CURRENT_WORKSPACE_PLACEHOLDER } _3.0.0` ) ;
140
+ expect ( result ) . toStrictEqual ( {
99
141
id : '3.0.0' ,
100
142
references : [ ] ,
101
143
type : 'config' ,
102
144
attributes : {
103
145
defaultDashboard : 'default-dashboard-workspace' ,
104
146
[ DEFAULT_DATA_SOURCE_UI_SETTINGS_ID ] : 'default-ds-workspace' ,
147
+ [ DEFAULT_INDEX_PATTERN_UI_SETTINGS_ID ] : undefined ,
148
+ [ WORKSPACE_SCOPE_SETTING_WITHOUT_VALUE_ID ] : undefined ,
105
149
} ,
106
150
} ) ;
107
151
} ) ;
@@ -182,7 +226,7 @@ describe('WorkspaceUiSettingsClientWrapper', () => {
182
226
expect ( error . message ) . toEqual ( 'Bad Request' ) ;
183
227
} ) ;
184
228
185
- it ( 'should update global ui settings' , async ( ) => {
229
+ it ( 'should update global ui settings when out of workspace ' , async ( ) => {
186
230
// Currently NOT in a workspace
187
231
jest . spyOn ( utils , 'getWorkspaceState' ) . mockReturnValue ( { } ) ;
188
232
@@ -199,4 +243,28 @@ describe('WorkspaceUiSettingsClientWrapper', () => {
199
243
{ }
200
244
) ;
201
245
} ) ;
246
+
247
+ it ( 'should update workspace settings when inside workspace and config id equals global setting' , async ( ) => {
248
+ jest . spyOn ( utils , 'getWorkspaceState' ) . mockReturnValue ( { requestWorkspaceId : 'workspace-id' } ) ;
249
+
250
+ const { wrappedClient, clientMock, logger } = createWrappedClient ( ) ;
251
+
252
+ await wrappedClient . update ( 'config' , '3.0.0' , {
253
+ [ DEFAULT_DATA_SOURCE_UI_SETTINGS_ID ] : 'data_source_id' ,
254
+ } ) ;
255
+
256
+ expect ( clientMock . update ) . toHaveBeenCalledWith (
257
+ WORKSPACE_TYPE ,
258
+ 'workspace-id' ,
259
+ {
260
+ uiSettings : expect . objectContaining ( {
261
+ [ DEFAULT_DATA_SOURCE_UI_SETTINGS_ID ] : 'data_source_id' ,
262
+ } ) ,
263
+ } ,
264
+ { }
265
+ ) ;
266
+ expect ( logger . warn ) . toBeCalledWith (
267
+ 'Deprecation warning: updating workspace settings through global scope will no longer be supported.'
268
+ ) ;
269
+ } ) ;
202
270
} ) ;
0 commit comments