Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions packages/ui/src/models/citrus/citrus-catalog.ts
Original file line number Diff line number Diff line change
Expand Up @@ -37,4 +37,10 @@ export interface ICitrusComponentDefinition {

/** Optional JSON schema defining the component's configurable properties */
propertiesSchema?: KaotoSchemaDefinition['schema'];

/**
* Complete initial Citrus step inserted when this catalog entry is selected.
* The value must contain one valid action or container root key.
*/
defaultValue?: Record<string, unknown>;
}
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,32 @@ describe('CitrusTestDefaultService', () => {
});

describe('getDefaultTestActionDefinitionValue', () => {
const createCatalogPresetFixture = () => {
const catalogDefaultValue = {
applyTemplate: {
name: 'company-login',
parameters: [
{
name: 'username',
value: '${username}',
},
],
},
};

const definedComponent: DefinedComponent = {
name: 'company-login',
type: CatalogKind.TestAction,
definition: {
kind: CatalogKind.TestAction,
name: 'company-login',
defaultValue: catalogDefaultValue,
},
};

return { catalogDefaultValue, definedComponent };
};

it('should return the default value for a print action', () => {
const definitionValue = CitrusTestDefaultService.getDefaultTestActionDefinitionValue({
type: 'testAction',
Expand All @@ -28,14 +54,55 @@ describe('CitrusTestDefaultService', () => {
expect(definitionValue.print).toBeDefined();
});

it('should return the complete catalog-defined default value', () => {
const { catalogDefaultValue, definedComponent } = createCatalogPresetFixture();

const definitionValue = CitrusTestDefaultService.getDefaultTestActionDefinitionValue(definedComponent);

expect(definitionValue).toStrictEqual(catalogDefaultValue);
});

it('should return deeply independent copies of a catalog-defined default value', () => {
const { catalogDefaultValue, definedComponent } = createCatalogPresetFixture();

const firstDefinitionValue = CitrusTestDefaultService.getDefaultTestActionDefinitionValue(
definedComponent,
) as typeof catalogDefaultValue;

const secondDefinitionValue = CitrusTestDefaultService.getDefaultTestActionDefinitionValue(
definedComponent,
) as typeof catalogDefaultValue;

expect(firstDefinitionValue.applyTemplate.parameters).not.toBe(catalogDefaultValue.applyTemplate.parameters);
expect(secondDefinitionValue.applyTemplate.parameters).not.toBe(catalogDefaultValue.applyTemplate.parameters);
expect(firstDefinitionValue.applyTemplate.parameters).not.toBe(secondDefinitionValue.applyTemplate.parameters);

expect(firstDefinitionValue.applyTemplate.parameters[0]).not.toBe(
catalogDefaultValue.applyTemplate.parameters[0],
);
expect(secondDefinitionValue.applyTemplate.parameters[0]).not.toBe(
catalogDefaultValue.applyTemplate.parameters[0],
);
expect(firstDefinitionValue.applyTemplate.parameters[0]).not.toBe(
secondDefinitionValue.applyTemplate.parameters[0],
);

firstDefinitionValue.applyTemplate.parameters[0].value = 'changed';

expect(firstDefinitionValue.applyTemplate.parameters[0].value).toBe('changed');
expect(secondDefinitionValue.applyTemplate.parameters[0].value).toBe('${username}');
expect(catalogDefaultValue.applyTemplate.parameters[0].value).toBe('${username}');
});

it('should return the default value for a custom action', () => {
const definitionValue = CitrusTestDefaultService.getDefaultTestActionDefinitionValue({
type: 'testAction',
name: 'custom',
} as DefinedComponent);
expect(definitionValue).toBeDefined();
const json = definitionValue as Record<string, unknown>;
expect(json.custom).toBeDefined();

expect(definitionValue).toStrictEqual({
custom: {},
});
});

it('should return the default iterate container', () => {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
import { cloneDeep } from 'lodash';
import { parse } from 'yaml';

import { DefinedComponent } from '../../../camel/camel-catalog-index';
Expand Down Expand Up @@ -35,6 +36,10 @@ export class CitrusTestDefaultService {
definition = CitrusTestSchemaService.getTestActionDefinition(definedComponent.name);
}

if (definition?.defaultValue !== undefined) {
return cloneDeep(definition.defaultValue) as TestActions;
}

const groups: ICitrusComponentDefinition[] = CitrusTestSchemaService.getTestActionGroups(definition);

let yamlCode = '';
Expand Down
Loading