Skip to content

Commit

Permalink
Fix mds ref update on integration assets (#2240)
Browse files Browse the repository at this point in the history
* fix mds ref update on integration assests

Signed-off-by: Shenoy Pratik <[email protected]>

* add unit test for builder with mds enabled

Signed-off-by: Shenoy Pratik <[email protected]>

---------

Signed-off-by: Shenoy Pratik <[email protected]>
  • Loading branch information
ps48 authored Nov 4, 2024
1 parent 8c0face commit 10e6636
Show file tree
Hide file tree
Showing 3 changed files with 92 additions and 2 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -305,7 +305,7 @@ export async function addIntegrationRequest({
indexPattern,
workflows,
skipRedirect,
dataSourceInfo,
dataSourceInfo, // s3 datasource
dataSourceMDSId,
dataSourceMDSLabel,
}: AddIntegrationRequestParams): Promise<boolean> {
Expand Down Expand Up @@ -378,6 +378,7 @@ export async function addIntegrationRequest({
query: {
path: `${indexPattern}/_bulk?refresh=wait_for`,
method: 'POST',
dataSourceId: dataSourceMDSId,
},
})
.then((_) => {
Expand Down
89 changes: 89 additions & 0 deletions server/adaptors/integrations/__test__/builder.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -129,6 +129,95 @@ describe('IntegrationInstanceBuilder', () => {
expect(instance).toEqual(expectedInstance);
});

it('should build an integration instance with MDS reference', async () => {
const options = {
indexPattern: 'instance-datasource',
name: 'instance-name',
dataSourceMDSId: 'sampleMDSId',
dataSourceMDSLabel: 'sample MDS',
};

const remappedAssets = [
{
id: 'remapped-asset1',
references: [{ id: 'remapped-ref1' }],
},
{
id: 'remapped-asset2',
references: [{ id: 'remapped-ref2' }],
},
];
const postAssetsResponse = {
saved_objects: [
{ id: 'created-asset1', type: 'dashboard', attributes: { title: 'Dashboard 1' } },
{ id: 'created-asset2', type: 'visualization', attributes: { title: 'Visualization 1' } },
],
};
const expectedInstance = {
name: 'instance-name',
templateName: 'sample',
dataSource: 'instance-datasource',
creationDate: expect.any(String),
assets: [
{
assetType: 'dashboard',
assetId: 'created-asset1',
status: 'available',
isDefaultAsset: true,
description: 'Dashboard 1',
},
{
assetType: 'visualization',
assetId: 'created-asset2',
status: 'available',
isDefaultAsset: false,
description: 'Visualization 1',
},
],
references: [
{
id: 'sampleMDSId',
name: 'sample MDS',
type: 'data-source',
},
],
};

const mockTemplate: Partial<IntegrationConfig> = TEST_INTEGRATION_CONFIG;

jest
.spyOn(mockUtils, 'deepCheck')
.mockResolvedValue({ ok: true, value: mockTemplate as IntegrationConfig });

// Mock the implementation of the methods in the Integration class
// sampleIntegration.deepCheck = jest.fn().mockResolvedValue({ ok: true, value: mockTemplate });
sampleIntegration.getAssets = jest.fn().mockResolvedValue({
ok: true,
value: [{ type: 'savedObjectBundle', data: remappedAssets }],
});
sampleIntegration.getConfig = jest.fn().mockResolvedValue({ ok: true, value: mockTemplate });

// Mock builder sub-methods
const remapIDsSpy = jest.spyOn(builder, 'remapIDs');
const addMDSReferenceSpy = jest.spyOn(builder, 'addMDSReference');
const postAssetsSpy = jest.spyOn(builder, 'postAssets');

(mockSavedObjectsClient.bulkCreate as jest.Mock).mockResolvedValue(postAssetsResponse);

const instance = await builder.build(sampleIntegration, options);

expect(sampleIntegration.getAssets).toHaveBeenCalled();
expect(remapIDsSpy).toHaveBeenCalledWith(remappedAssets);
expect(addMDSReferenceSpy).toHaveBeenCalledWith(
remappedAssets,
undefined,
'sampleMDSId',
'sample MDS'
);
expect(postAssetsSpy).toHaveBeenCalledWith(remappedAssets);
expect(instance).toEqual(expectedInstance);
});

it('should reject with an error if integration is not valid', async () => {
const options = {
indexPattern: 'instance-datasource',
Expand Down
2 changes: 1 addition & 1 deletion server/adaptors/integrations/integrations_builder.ts
Original file line number Diff line number Diff line change
Expand Up @@ -207,7 +207,7 @@ export class IntegrationInstanceBuilder {
dataSourceMDSId?: string,
dataSourceMDSLabel?: string
): SavedObject[] {
if (!dataSource) {
if (!dataSourceMDSId) {
return assets;
}
return assets.map((asset) => {
Expand Down

0 comments on commit 10e6636

Please sign in to comment.