Skip to content

Commit

Permalink
fix initial yaml editor values
Browse files Browse the repository at this point in the history
  • Loading branch information
nemesis09 committed Aug 26, 2021
1 parent 30aca67 commit 01c3d4b
Show file tree
Hide file tree
Showing 9 changed files with 123 additions and 88 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ import { K8sResourceKind, k8sUpdate } from '@console/internal/module/k8s';
import { useExtensions, Perspective, isPerspective } from '@console/plugin-sdk';
import { useActivePerspective } from '@console/shared';
import { EditorType } from '@console/shared/src/components/synced-editor/editor-toggle';
import { safeJSToYAML } from '@console/shared/src/utils/yaml';
import { getResourcesType } from '../edit-application/edit-application-utils';
import { handleRedirect } from '../import/import-submit-utils';
import { Resources } from '../import/import-types';
Expand All @@ -33,7 +34,9 @@ const EditDeployment: React.FC<EditDeploymentProps> = ({ heading, resource, name

const initialValues = React.useRef({
editorType: EditorType.Form,
yamlData: '',
yamlData: safeJSToYAML(resource, 'yamlData', {
skipInvalid: true,
}),
formData: convertDeploymentToEditForm(resource),
});

Expand Down
71 changes: 45 additions & 26 deletions frontend/packages/knative-plugin/src/components/add/EventSource.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ import { RootState } from '@console/internal/redux';
import { isPerspective, Perspective, useExtensions } from '@console/plugin-sdk';
import { ALL_APPLICATIONS_KEY, useActivePerspective } from '@console/shared';
import { EditorType } from '@console/shared/src/components/synced-editor/editor-toggle';
import { safeJSToYAML } from '@console/shared/src/utils/yaml';
import { sanitizeApplicationValue } from '@console/topology/src/utils/application-utils';
import { KNATIVE_EVENT_SOURCE_APIGROUP } from '../../const';
import { CamelKameletBindingModel } from '../../models';
Expand All @@ -25,13 +26,19 @@ import {
getEventSourceData,
handleRedirect,
getKameletSourceData,
getEventSourceResource,
} from '../../utils/create-eventsources-utils';
import { getEventSourceModels } from '../../utils/fetch-dynamic-eventsources-utils';
import { EVENT_SOURCES_APP } from './const';
import { eventSourceValidationSchema } from './eventSource-validation-utils';
import EventSourceForm from './EventSourceForm';
import EventSourceMetaDescription from './EventSourceMetadataDescription';
import { EventSourceSyncFormData, SinkType, EventSourceMetaData } from './import-types';
import {
EventSourceSyncFormData,
SinkType,
EventSourceMetaData,
EventSourceFormData,
} from './import-types';

interface EventSourceProps {
namespace: string;
Expand Down Expand Up @@ -87,34 +94,46 @@ export const EventSource: React.FC<Props> = ({
const eventSourceMetaDescription = (
<EventSourceMetaDescription normalizedSource={normalizedSource} />
);

const initialFormData: EventSourceFormData = {
project: {
name: namespace || '',
displayName: '',
description: '',
},
application: {
initial: sanitizeApplicationValue(activeApplication),
name: sanitizeApplicationValue(activeApplication) || EVENT_SOURCES_APP,
selectedKey: activeApplication,
},
name: selSourceName,
apiVersion: selApiVersion,
sinkType: SinkType.Resource,
sink: {
apiVersion: sinkApiVersion,
kind: sinkKind,
name: sinkName,
key: sinkKey,
uri: '',
},
type: sourceKind,
data: sourceData,
};

const initialYamlData: string = safeJSToYAML(
getEventSourceResource(initialFormData),
'yamlData',
{
skipInvalid: true,
noRefs: true,
},
);

const catalogInitialValues: EventSourceSyncFormData = {
editorType: EditorType.Form,
showCanUseYAMLMessage: true,
formData: {
project: {
name: namespace || '',
displayName: '',
description: '',
},
application: {
initial: sanitizeApplicationValue(activeApplication),
name: sanitizeApplicationValue(activeApplication) || EVENT_SOURCES_APP,
selectedKey: activeApplication,
},
name: selSourceName,
apiVersion: selApiVersion,
sinkType: SinkType.Resource,
sink: {
apiVersion: sinkApiVersion,
kind: sinkKind,
name: sinkName,
key: sinkKey,
uri: '',
},
type: sourceKind,
data: sourceData,
},
yamlData: '',
formData: initialFormData,
yamlData: initialYamlData,
};

const createResources = (rawFormData: any): Promise<K8sResourceKind> => {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@ const AddBroker: React.FC<AddBrokerProps> = ({ namespace, selectedApplication })
): Promise<K8sResourceKind> => {
let broker: K8sResourceKind;
if (formValues.editorType === EditorType.Form) {
broker = convertFormToBrokerYaml(formValues);
broker = convertFormToBrokerYaml(formValues.formData);
} else {
try {
broker = safeLoad(formValues.yamlData);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -78,7 +78,7 @@ const AddBrokerForm: React.FC<FormikProps<AddBrokerFormYamlValues> & AddBrokerFo
};

const sanitizeToYaml = () =>
safeJSToYAML(convertFormToBrokerYaml(values), 'yamlData', {
safeJSToYAML(convertFormToBrokerYaml(values.formData), 'yamlData', {
skipInvalid: true,
});

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,38 +6,35 @@ import { convertFormToBrokerYaml, addBrokerInitialValues } from '../add-broker-u
describe('broker-utils: ', () => {
describe('convertFormToBrokerYaml', () => {
it('should contain all the top level keys for broker', () => {
const formValues = addBrokerInitialValues('test-ns', '');
const broker = convertFormToBrokerYaml(formValues);
const { formData } = addBrokerInitialValues('test-ns', '');
const broker = convertFormToBrokerYaml(formData);
expect(broker.apiVersion).toBe(apiVersionForModel(EventingBrokerModel));
expect(broker.kind).toBe(EventingBrokerModel.kind);
expect(broker.metadata).toBeDefined();
expect(broker.spec).toBeDefined();
});

it('should contain default application name', () => {
const formValues = addBrokerInitialValues('test-ns', '');
const broker = convertFormToBrokerYaml(formValues);
const { formData } = addBrokerInitialValues('test-ns', '');
const broker = convertFormToBrokerYaml(formData);
expect(broker.metadata.labels[LABEL_PART_OF]).toBe(EVENT_BROKER_APP);
});

it('should contain custom application name', () => {
const formValues = addBrokerInitialValues('test-ns', 'custom-group-name');
const broker = convertFormToBrokerYaml(formValues);
const { formData } = addBrokerInitialValues('test-ns', 'custom-group-name');
const broker = convertFormToBrokerYaml(formData);
expect(broker.metadata.labels[LABEL_PART_OF]).toBe('custom-group-name');
});

it('should not contain the metadata labels', () => {
const formValues = addBrokerInitialValues('test-ns', '');
const { formData } = addBrokerInitialValues('test-ns', '');

const broker = convertFormToBrokerYaml({
...formValues,
formData: {
...formValues.formData,
application: {
initial: null,
name: '',
selectedKey: '',
},
...formData,
application: {
initial: null,
name: '',
selectedKey: '',
},
});
expect(broker.metadata.labels).toBeUndefined();
Expand Down
Original file line number Diff line number Diff line change
@@ -1,42 +1,19 @@
import { apiVersionForModel, K8sResourceKind } from '@console/internal/module/k8s';
import { UNASSIGNED_APPLICATIONS_KEY } from '@console/shared';
import { EditorType } from '@console/shared/src/components/synced-editor/editor-toggle';
import { safeJSToYAML } from '@console/shared/src/utils/yaml';
import { sanitizeApplicationValue } from '@console/topology/src/utils';
import { EventingBrokerModel } from '../../../models';
import { LABEL_PART_OF, EVENT_BROKER_APP, DEFAULT_BROKER_NAME } from '../const';
import { AddBrokerFormYamlValues } from '../import-types';
import { AddBrokerFormYamlValues, BrokerFormData } from '../import-types';

export const addBrokerInitialValues = (
namespace: string,
selectedApplication: string,
): AddBrokerFormYamlValues => {
return {
showCanUseYAMLMessage: true,
editorType: EditorType.Form,
yamlData: '',
formData: {
name: DEFAULT_BROKER_NAME,
spec: {},
project: {
name: namespace || '',
displayName: '',
description: '',
},
application: {
initial: sanitizeApplicationValue(selectedApplication),
name: sanitizeApplicationValue(selectedApplication) || EVENT_BROKER_APP,
selectedKey: selectedApplication,
},
},
};
};
export const convertFormToBrokerYaml = (formValues: AddBrokerFormYamlValues): K8sResourceKind => {
export const convertFormToBrokerYaml = (formData: BrokerFormData): K8sResourceKind => {
const {
name,
project: { name: namespace },
application: { selectedKey, name: appName = null },
spec = {},
} = formValues.formData;
} = formData;

return {
apiVersion: apiVersionForModel(EventingBrokerModel),
Expand All @@ -54,3 +31,36 @@ export const convertFormToBrokerYaml = (formValues: AddBrokerFormYamlValues): K8
spec,
};
};

export const addBrokerInitialValues = (
namespace: string,
selectedApplication: string,
): AddBrokerFormYamlValues => {
const initialFormData: BrokerFormData = {
name: DEFAULT_BROKER_NAME,
spec: {},
project: {
name: namespace || '',
displayName: '',
description: '',
},
application: {
initial: sanitizeApplicationValue(selectedApplication),
name: sanitizeApplicationValue(selectedApplication) || EVENT_BROKER_APP,
selectedKey: selectedApplication,
},
};
const initialYamlData: string = safeJSToYAML(
convertFormToBrokerYaml(initialFormData),
'yamlData',
{
skipInvalid: true,
},
);
return {
showCanUseYAMLMessage: true,
editorType: EditorType.Form,
yamlData: initialYamlData,
formData: initialFormData,
};
};
Original file line number Diff line number Diff line change
Expand Up @@ -316,9 +316,9 @@ describe('sanitizeSourceToForm always returns valid Event Source', () => {
});

it('expect getKafkaSourceResource to return sasl and tls with secrets if enabled and present', () => {
const KafkaSourceData = getDefaultEventingData(EventSources.KafkaSource);
KafkaSourceData.formData.data[EventSources.KafkaSource] = {
...KafkaSourceData.formData.data[EventSources.KafkaSource],
const { formData: KafkaSourceFormData } = getDefaultEventingData(EventSources.KafkaSource);
KafkaSourceFormData.data[EventSources.KafkaSource] = {
...KafkaSourceFormData.data[EventSources.KafkaSource],
bootstrapServers: ['server1', 'server2'],
topics: ['topic1'],
consumerGroup: 'knative-group',
Expand All @@ -340,7 +340,7 @@ describe('sanitizeSourceToForm always returns valid Event Source', () => {
spec: {
net: { sasl, tls },
},
} = getKafkaSourceResource(KafkaSourceData);
} = getKafkaSourceResource(KafkaSourceFormData);
expect(sasl.enable).toBe(true);
expect(sasl.user).toEqual({
secretKeyRef: { name: 'username', key: 'userkey' },
Expand All @@ -349,9 +349,9 @@ describe('sanitizeSourceToForm always returns valid Event Source', () => {
});

it('expect getKafkaSourceResource to return sasl and tls without secrets if not enabled', () => {
const KafkaSourceData = getDefaultEventingData(EventSources.KafkaSource);
KafkaSourceData.formData.data[EventSources.KafkaSource] = {
...KafkaSourceData.formData.data[EventSources.KafkaSource],
const { formData: KafkaSourceFormData } = getDefaultEventingData(EventSources.KafkaSource);
KafkaSourceFormData.data[EventSources.KafkaSource] = {
...KafkaSourceFormData.data[EventSources.KafkaSource],
bootstrapServers: ['server1', 'server2'],
topics: ['topic1'],
consumerGroup: 'knative-group',
Expand All @@ -373,7 +373,7 @@ describe('sanitizeSourceToForm always returns valid Event Source', () => {
spec: {
net: { sasl, tls },
},
} = getKafkaSourceResource(KafkaSourceData);
} = getKafkaSourceResource(KafkaSourceFormData);
expect(sasl.enable).toBeUndefined();
expect(sasl).toEqual({ user: {}, password: {} });
expect(tls.enable).toBeUndefined();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -88,8 +88,8 @@ export const isSecretKeyRefPresent = (dataObj: {
secretKeyRef: { name: string; key: string };
}): boolean => !!(dataObj?.secretKeyRef?.name || dataObj?.secretKeyRef?.key);

export const getKafkaSourceResource = (sourceFormData: any): K8sResourceKind => {
const baseResource = getEventSourcesDepResource(sourceFormData.formData);
export const getKafkaSourceResource = (formData: any): K8sResourceKind => {
const baseResource = getEventSourcesDepResource(formData);
const { net } = baseResource.spec;
baseResource.spec.net = {
...net,
Expand Down Expand Up @@ -125,18 +125,23 @@ export const loadYamlData = (formData: EventSourceSyncFormData) => {
return yamlDataObj;
};

export const getEventSourceResource = (formData: EventSourceFormData) => {
switch (formData.type) {
case EventSources.KafkaSource:
return getKafkaSourceResource(formData);
default:
return getEventSourcesDepResource(formData);
}
};

export const getCatalogEventSourceResource = (
sourceFormData: EventSourceSyncFormData,
): K8sResourceKind => {
if (sourceFormData.editorType === EditorType.YAML) {
return loadYamlData(sourceFormData);
}
switch (sourceFormData.formData.type) {
case EventSources.KafkaSource:
return getKafkaSourceResource(sourceFormData);
default:
return getEventSourcesDepResource(sourceFormData.formData);
}
const { formData } = sourceFormData;
return getEventSourceResource(formData);
};

export const getEventSourceData = (source: string) => {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ import { EditorType } from '@console/shared/src/components/synced-editor/editor-
import { PipelineModel } from '../../../models';
import { PipelineKind } from '../../../types';
import { initialPipelineFormData } from './const';
import { sanitizeToYaml } from './form-switcher-validation';
import PipelineBuilderForm from './PipelineBuilderForm';
import { PipelineBuilderFormYamlValues, PipelineBuilderFormikValues } from './types';
import { convertBuilderFormToPipeline, convertPipelineToBuilderForm } from './utils';
Expand All @@ -32,7 +33,7 @@ const PipelineBuilderPage: React.FC<PipelineBuilderPageProps> = (props) => {

const initialValues: PipelineBuilderFormYamlValues = {
editorType: EditorType.Form,
yamlData: '',
yamlData: sanitizeToYaml(initialPipelineFormData, ns, existingPipeline),
formData: {
...initialPipelineFormData,
...(convertPipelineToBuilderForm(existingPipeline) || {}),
Expand Down

0 comments on commit 01c3d4b

Please sign in to comment.