@@ -41,14 +41,15 @@ import { errors as opensearchErrors } from '@opensearch-project/opensearch';
41
41
import { SavedObjectsService } from './saved_objects_service' ;
42
42
import { mockCoreContext } from '../core_context.mock' ;
43
43
import { Env } from '../config' ;
44
- import { configServiceMock } from '../mocks' ;
44
+ import { configServiceMock , savedObjectsRepositoryMock } from '../mocks' ;
45
45
import { opensearchServiceMock } from '../opensearch/opensearch_service.mock' ;
46
46
import { opensearchClientMock } from '../opensearch/client/mocks' ;
47
47
import { httpServiceMock } from '../http/http_service.mock' ;
48
48
import { httpServerMock } from '../http/http_server.mocks' ;
49
49
import { SavedObjectsClientFactoryProvider } from './service/lib' ;
50
50
import { NodesVersionCompatibility } from '../opensearch/version_check/ensure_opensearch_version' ;
51
51
import { SavedObjectsRepository } from './service/lib/repository' ;
52
+ import { SavedObjectRepositoryFactoryProvider } from './service/lib/scoped_client_provider' ;
52
53
53
54
jest . mock ( './service/lib/repository' ) ;
54
55
@@ -169,6 +170,27 @@ describe('SavedObjectsService', () => {
169
170
expect ( typeRegistryInstanceMock . registerType ) . toHaveBeenCalledWith ( type ) ;
170
171
} ) ;
171
172
} ) ;
173
+
174
+ describe ( '#registerRepositoryFactoryProvider' , ( ) => {
175
+ it ( 'throws error if a repository is already registered' , async ( ) => {
176
+ const coreContext = createCoreContext ( ) ;
177
+ const soService = new SavedObjectsService ( coreContext ) ;
178
+ const setup = await soService . setup ( createSetupDeps ( ) ) ;
179
+
180
+ const firstRepository : SavedObjectRepositoryFactoryProvider = ( ) =>
181
+ savedObjectsRepositoryMock . create ( ) ;
182
+ const secondRepository : SavedObjectRepositoryFactoryProvider = ( ) =>
183
+ savedObjectsRepositoryMock . create ( ) ;
184
+
185
+ setup . registerRepositoryFactoryProvider ( firstRepository ) ;
186
+
187
+ expect ( ( ) => {
188
+ setup . registerRepositoryFactoryProvider ( secondRepository ) ;
189
+ } ) . toThrowErrorMatchingInlineSnapshot (
190
+ `"custom repository factory is already set, and can only be set once"`
191
+ ) ;
192
+ } ) ;
193
+ } ) ;
172
194
} ) ;
173
195
174
196
describe ( '#start()' , ( ) => {
@@ -281,6 +303,15 @@ describe('SavedObjectsService', () => {
281
303
} ) . toThrowErrorMatchingInlineSnapshot (
282
304
`"cannot call \`registerType\` after service startup."`
283
305
) ;
306
+
307
+ const customRpository : SavedObjectRepositoryFactoryProvider = ( ) =>
308
+ savedObjectsRepositoryMock . create ( ) ;
309
+
310
+ expect ( ( ) => {
311
+ setup . registerRepositoryFactoryProvider ( customRpository ) ;
312
+ } ) . toThrowErrorMatchingInlineSnapshot (
313
+ '"cannot call `registerRepositoryFactoryProvider` after service startup."'
314
+ ) ;
284
315
} ) ;
285
316
286
317
describe ( '#getTypeRegistry' , ( ) => {
@@ -368,6 +399,36 @@ describe('SavedObjectsService', () => {
368
399
369
400
expect ( includedHiddenTypes ) . toEqual ( [ 'someHiddenType' ] ) ;
370
401
} ) ;
402
+
403
+ it ( 'Should not create SavedObjectsRepository when custom repository is registered ' , async ( ) => {
404
+ const coreContext = createCoreContext ( { skipMigration : false } ) ;
405
+ const soService = new SavedObjectsService ( coreContext ) ;
406
+ const coreSetup = createSetupDeps ( ) ;
407
+ const setup = await soService . setup ( coreSetup ) ;
408
+
409
+ const customRpository : SavedObjectRepositoryFactoryProvider = ( ) =>
410
+ savedObjectsRepositoryMock . create ( ) ;
411
+ setup . registerRepositoryFactoryProvider ( customRpository ) ;
412
+
413
+ const coreStart = createStartDeps ( ) ;
414
+ const { createInternalRepository } = await soService . start ( coreStart ) ;
415
+ createInternalRepository ( ) ;
416
+
417
+ expect ( SavedObjectsRepository . createRepository as jest . Mocked < any > ) . not . toHaveBeenCalled ( ) ;
418
+ } ) ;
419
+
420
+ it ( 'Should create SavedObjectsRepository when no custom repository is registered ' , async ( ) => {
421
+ const coreContext = createCoreContext ( { skipMigration : false } ) ;
422
+ const soService = new SavedObjectsService ( coreContext ) ;
423
+ const coreSetup = createSetupDeps ( ) ;
424
+ await soService . setup ( coreSetup ) ;
425
+
426
+ const coreStart = createStartDeps ( ) ;
427
+ const { createInternalRepository } = await soService . start ( coreStart ) ;
428
+ createInternalRepository ( ) ;
429
+
430
+ expect ( SavedObjectsRepository . createRepository as jest . Mocked < any > ) . toHaveBeenCalled ( ) ;
431
+ } ) ;
371
432
} ) ;
372
433
} ) ;
373
434
} ) ;
0 commit comments