@@ -0,0 +1,5 @@
|
||||
---
|
||||
'@backstage/plugin-scaffolder': patch
|
||||
---
|
||||
|
||||
Fix issue with `secrets` not being forwarded properly to the backend when creating a task
|
||||
@@ -81,4 +81,75 @@ describe('useFormDecorators', () => {
|
||||
expect(mockApiImplementation.test).toHaveBeenCalledWith('hello');
|
||||
});
|
||||
});
|
||||
|
||||
it('should return existing secrets and formstate', async () => {
|
||||
const renderedHook = renderHook(() => useFormDecorators({ manifest }), {
|
||||
wrapper: ({ children }) => (
|
||||
<TestApiProvider
|
||||
apis={[
|
||||
[mockApiRef, mockApiImplementation],
|
||||
[
|
||||
formDecoratorsApiRef,
|
||||
DefaultScaffolderFormDecoratorsApi.create({
|
||||
decorators: [mockDecorator],
|
||||
}),
|
||||
],
|
||||
[errorApiRef, { post: () => {} }],
|
||||
]}
|
||||
>
|
||||
{children}
|
||||
</TestApiProvider>
|
||||
),
|
||||
});
|
||||
await waitFor(async () => {
|
||||
const result = renderedHook.result.current!;
|
||||
|
||||
const { secrets, formState } = await result.run({
|
||||
formState: { test: 'formState' },
|
||||
secrets: { test: 'hello' },
|
||||
});
|
||||
|
||||
expect(secrets).toEqual({ test: 'hello' });
|
||||
expect(formState).toEqual({ test: 'formState' });
|
||||
});
|
||||
});
|
||||
|
||||
it('should allow merging of existing secrets and formstate', async () => {
|
||||
const secretAndFormDataModifier = createScaffolderFormDecorator({
|
||||
id: 'test',
|
||||
async decorator({ setFormState, setSecrets }) {
|
||||
setFormState(state => ({ ...state, new: 'formState' }));
|
||||
setSecrets(state => ({ ...state, new: 'hello' }));
|
||||
},
|
||||
});
|
||||
const renderedHook = renderHook(() => useFormDecorators({ manifest }), {
|
||||
wrapper: ({ children }) => (
|
||||
<TestApiProvider
|
||||
apis={[
|
||||
[mockApiRef, mockApiImplementation],
|
||||
[
|
||||
formDecoratorsApiRef,
|
||||
DefaultScaffolderFormDecoratorsApi.create({
|
||||
decorators: [mockDecorator, secretAndFormDataModifier],
|
||||
}),
|
||||
],
|
||||
[errorApiRef, { post: () => {} }],
|
||||
]}
|
||||
>
|
||||
{children}
|
||||
</TestApiProvider>
|
||||
),
|
||||
});
|
||||
await waitFor(async () => {
|
||||
const result = renderedHook.result.current!;
|
||||
|
||||
const { secrets, formState } = await result.run({
|
||||
formState: { test: 'formState' },
|
||||
secrets: { test: 'hello' },
|
||||
});
|
||||
|
||||
expect(secrets).toEqual({ test: 'hello', new: 'hello' });
|
||||
expect(formState).toEqual({ test: 'formState', new: 'formState' });
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
@@ -75,7 +75,7 @@ export const useFormDecorators = ({
|
||||
secrets: Record<string, string>;
|
||||
}) => {
|
||||
let formState: Record<string, JsonValue> = { ...opts.formState };
|
||||
let secrets: Record<string, string> = {};
|
||||
let secrets: Record<string, string> = { ...opts.secrets };
|
||||
|
||||
if (manifest?.EXPERIMENTAL_formDecorators) {
|
||||
// for each of the form decorators, go and call the decorator with the context
|
||||
|
||||
Reference in New Issue
Block a user