From 3f0a8e3716f5206e6c857e4821f5125a77b3ddaf Mon Sep 17 00:00:00 2001 From: Ryo Narita Date: Fri, 11 Dec 2020 14:08:59 +0900 Subject: [PATCH 1/2] Implement Update Application on the web --- .../web/src/__fixtures__/dummy-application.ts | 7 +- pkg/app/web/src/__fixtures__/dummy-piped.ts | 9 +- pkg/app/web/src/__fixtures__/dummy-repo.ts | 7 ++ pkg/app/web/src/api/applications.ts | 38 +++++++++ ...sx => application-form-drawer.stories.tsx} | 22 +++-- ...t.tsx => application-form-drawer.test.tsx} | 22 ++--- ...drawer.tsx => application-form-drawer.tsx} | 85 ++++++++++--------- .../web/src/components/application-list.tsx | 11 ++- .../edit-application-drawer.stories.tsx | 38 +++++++++ .../components/edit-application-drawer.tsx | 73 ++++++++++++++++ pkg/app/web/src/modules/index.ts | 2 + .../src/modules/update-application.test.ts | 11 +++ pkg/app/web/src/modules/update-application.ts | 79 +++++++++++++++++ pkg/app/web/src/pages/applications/index.tsx | 11 ++- 14 files changed, 342 insertions(+), 73 deletions(-) create mode 100644 pkg/app/web/src/__fixtures__/dummy-repo.ts rename pkg/app/web/src/components/{add-application-drawer.stories.tsx => application-form-drawer.stories.tsx} (62%) rename pkg/app/web/src/components/{add-application-drawer.test.tsx => application-form-drawer.test.tsx} (92%) rename pkg/app/web/src/components/{add-application-drawer.tsx => application-form-drawer.tsx} (85%) create mode 100644 pkg/app/web/src/components/edit-application-drawer.stories.tsx create mode 100644 pkg/app/web/src/components/edit-application-drawer.tsx create mode 100644 pkg/app/web/src/modules/update-application.test.ts create mode 100644 pkg/app/web/src/modules/update-application.ts diff --git a/pkg/app/web/src/__fixtures__/dummy-application.ts b/pkg/app/web/src/__fixtures__/dummy-application.ts index 26d2e4ad1f..c58cea3499 100644 --- a/pkg/app/web/src/__fixtures__/dummy-application.ts +++ b/pkg/app/web/src/__fixtures__/dummy-application.ts @@ -2,6 +2,7 @@ import { ApplicationKind } from "pipe/pkg/app/web/model/common_pb"; import { ApplicationSyncStatus } from "../modules/applications"; import { dummyEnv } from "./dummy-environment"; import { dummyPiped } from "./dummy-piped"; +import { dummyRepo } from "./dummy-repo"; export const dummyApplication = { id: "application-1", @@ -14,11 +15,7 @@ export const dummyApplication = { configFilename: "", path: "dir/dir1", url: "", - repo: { - id: "repo-1", - branch: "master", - remote: "xxx", - }, + repo: dummyRepo, }, kind: ApplicationKind.KUBERNETES, name: "DemoApp", diff --git a/pkg/app/web/src/__fixtures__/dummy-piped.ts b/pkg/app/web/src/__fixtures__/dummy-piped.ts index 0169600103..09643b6c8b 100644 --- a/pkg/app/web/src/__fixtures__/dummy-piped.ts +++ b/pkg/app/web/src/__fixtures__/dummy-piped.ts @@ -1,5 +1,6 @@ import { Piped, PipedModel } from "../modules/pipeds"; import { dummyEnv } from "./dummy-environment"; +import { dummyRepo } from "./dummy-repo"; export const dummyPiped: Piped = { cloudProvidersList: [ @@ -19,13 +20,7 @@ export const dummyPiped: Piped = { id: "piped-1", name: "dummy piped", projectId: "project-1", - repositoriesList: [ - { - id: "debug-repo", - remote: "git@github.com:pipe-cd/debug.git", - branch: "master", - }, - ], + repositoriesList: [dummyRepo], startedAt: 0, updatedAt: 0, version: "v0.1", diff --git a/pkg/app/web/src/__fixtures__/dummy-repo.ts b/pkg/app/web/src/__fixtures__/dummy-repo.ts new file mode 100644 index 0000000000..3a90d8c76d --- /dev/null +++ b/pkg/app/web/src/__fixtures__/dummy-repo.ts @@ -0,0 +1,7 @@ +import { ApplicationGitRepository } from "pipe/pkg/app/web/model/common_pb"; + +export const dummyRepo: ApplicationGitRepository.AsObject = { + id: "debug-repo", + remote: "git@github.com:pipe-cd/debug.git", + branch: "master", +}; diff --git a/pkg/app/web/src/api/applications.ts b/pkg/app/web/src/api/applications.ts index 68836af79a..d772c7a948 100644 --- a/pkg/app/web/src/api/applications.ts +++ b/pkg/app/web/src/api/applications.ts @@ -14,6 +14,8 @@ import { DisableApplicationResponse, EnableApplicationRequest, EnableApplicationResponse, + UpdateApplicationRequest, + UpdateApplicationResponse, } from "pipe/pkg/app/web/api_client/service_pb"; import { ApplicationGitPath } from "pipe/pkg/app/web/model/common_pb"; import { ApplicationGitRepository } from "pipe/pkg/app/web/model/common_pb"; @@ -121,3 +123,39 @@ export const enableApplication = async ({ req.setApplicationId(applicationId); return apiRequest(req, apiClient.enableApplication); }; + +export const updateApplication = async ({ + applicationId, + cloudProvider, + envId, + kind, + name, + pipedId, + gitPath, +}: Required): Promise< + UpdateApplicationResponse.AsObject +> => { + console.log(UpdateApplicationRequest); + + const req = new UpdateApplicationRequest(); + req.setApplicationId(applicationId); + req.setName(name); + req.setEnvId(envId); + req.setPipedId(pipedId); + req.setCloudProvider(cloudProvider); + req.setKind(kind); + const appGitPath = new ApplicationGitPath(); + const repository = new ApplicationGitRepository(); + if (gitPath.repo) { + repository.setId(gitPath.repo.id); + repository.setBranch(gitPath.repo.branch); + repository.setRemote(gitPath.repo.remote); + appGitPath.setRepo(repository); + } + appGitPath.setPath(gitPath.path); + if (gitPath.configFilename && gitPath.configFilename !== "") { + appGitPath.setConfigFilename(gitPath.configFilename); + } + req.setGitPath(appGitPath); + return apiRequest(req, apiClient.updateApplication); +}; diff --git a/pkg/app/web/src/components/add-application-drawer.stories.tsx b/pkg/app/web/src/components/application-form-drawer.stories.tsx similarity index 62% rename from pkg/app/web/src/components/add-application-drawer.stories.tsx rename to pkg/app/web/src/components/application-form-drawer.stories.tsx index 82eb2ebb1c..80fedb041b 100644 --- a/pkg/app/web/src/components/add-application-drawer.stories.tsx +++ b/pkg/app/web/src/components/application-form-drawer.stories.tsx @@ -1,13 +1,13 @@ import React from "react"; -import { AddApplicationDrawer } from "./add-application-drawer"; +import { ApplicationFormDrawer } from "./application-form-drawer"; import { action } from "@storybook/addon-actions"; import { createDecoratorRedux } from "../../.storybook/redux-decorator"; import { dummyEnv } from "../__fixtures__/dummy-environment"; import { dummyPiped } from "../__fixtures__/dummy-piped"; export default { - title: "APPLICATION/AddApplicationDrawer", - component: AddApplicationDrawer, + title: "APPLICATION/ApplicationFormDrawer", + component: ApplicationFormDrawer, decorators: [ createDecoratorRedux({ environments: { @@ -27,11 +27,21 @@ export default { }; export const overview: React.FC = () => ( - +); + +export const isProcessing: React.FC = () => ( + ); diff --git a/pkg/app/web/src/components/add-application-drawer.test.tsx b/pkg/app/web/src/components/application-form-drawer.test.tsx similarity index 92% rename from pkg/app/web/src/components/add-application-drawer.test.tsx rename to pkg/app/web/src/components/application-form-drawer.test.tsx index abb45b428d..d648162482 100644 --- a/pkg/app/web/src/components/add-application-drawer.test.tsx +++ b/pkg/app/web/src/components/application-form-drawer.test.tsx @@ -1,5 +1,5 @@ import React from "react"; -import { AddApplicationDrawer } from "./add-application-drawer"; +import { ApplicationFormDrawer } from "./application-form-drawer"; import { render, screen, waitFor } from "../../test-utils"; import { UI_TEXT_CANCEL, UI_TEXT_SAVE } from "../constants/ui-text"; import { dummyEnv } from "../__fixtures__/dummy-environment"; @@ -8,16 +8,16 @@ import { ApplicationKind } from "../modules/applications"; import { dummyPiped } from "../__fixtures__/dummy-piped"; import userEvent from "@testing-library/user-event"; -describe("AddApplicationDrawer", () => { +describe("ApplicationFormDrawer", () => { it("should calls onSubmit if clicked SAVE button", async () => { const onSubmit = jest.fn(); render( - , { initialState: { @@ -79,12 +79,12 @@ describe("AddApplicationDrawer", () => { it("should clear depended fields if change environment", async () => { const altEnv = { ...dummyEnv, id: "env-2", name: "env-2" }; render( - null} onClose={() => null} - isAdding={false} + isProcessing={false} />, { initialState: { @@ -151,12 +151,12 @@ describe("AddApplicationDrawer", () => { it("should calls onClose handler if clicked CANCEL button", () => { const onClose = jest.fn(); render( - , {} ); diff --git a/pkg/app/web/src/components/add-application-drawer.tsx b/pkg/app/web/src/components/application-form-drawer.tsx similarity index 85% rename from pkg/app/web/src/components/add-application-drawer.tsx rename to pkg/app/web/src/components/application-form-drawer.tsx index 154916ab55..03e641a2f3 100644 --- a/pkg/app/web/src/components/add-application-drawer.tsx +++ b/pkg/app/web/src/components/application-form-drawer.tsx @@ -131,28 +131,31 @@ const validationSchema = Yup.object().shape({ cloudProvider: Yup.string().required(), }); +export interface ApplicationFormValue { + name: string; + env: string; + kind: ApplicationKind; + pipedId: string; + repoPath: string; + configFilename: string; + cloudProvider: string; + repo: { + id: string; + remote: string; + branch: string; + }; +} + interface Props { + title: string; open: boolean; - isAdding: boolean; - projectName: string; - onSubmit: (state: { - name: string; - env: string; - kind: ApplicationKind; - pipedId: string; - repoPath: string; - configFilename: string; - cloudProvider: string; - repo: { - id: string; - remote: string; - branch: string; - }; - }) => void; + isProcessing: boolean; + onSubmit: (state: ApplicationFormValue) => void; onClose: () => void; + initialFormValues?: ApplicationFormValue; } -const initialFormValues = { +const emptyFormValues: ApplicationFormValue = { name: "", env: "", kind: ApplicationKind.KUBERNETES, @@ -167,21 +170,24 @@ const initialFormValues = { }, }; -export const AddApplicationDrawer: FC = memo( +export const ApplicationFormDrawer: FC = memo( function AddApplicationName({ + title, open, - isAdding, - projectName, + isProcessing, onSubmit, onClose, + initialFormValues = emptyFormValues, }) { const classes = useStyles(); const formik = useFormik({ initialValues: initialFormValues, validateOnMount: true, validationSchema, + enableReinitialize: true, onSubmit: (values) => { onSubmit(values); + formik.resetForm(); }, }); @@ -201,7 +207,7 @@ export const AddApplicationDrawer: FC = memo( const handleClose = (): void => { onClose(); - formik.resetForm({ values: initialFormValues }); + formik.resetForm(); }; const cloudProviders = createCloudProviderListFromPiped({ @@ -214,13 +220,12 @@ export const AddApplicationDrawer: FC = memo( anchor="right" open={open} onClose={handleClose} - ModalProps={{ disableBackdropClick: isAdding }} + ModalProps={{ disableBackdropClick: isProcessing }} > - {`Add a new application to "${projectName}" project`} + + {title} +
= memo( value={formik.values.name} fullWidth required - disabled={isAdding} + disabled={isProcessing} className={classes.textInput} /> @@ -249,7 +254,7 @@ export const AddApplicationDrawer: FC = memo( onChange={({ value }) => formik.setFieldValue("kind", parseInt(value, 10)) } - disabled={isAdding} + disabled={isProcessing} />
@@ -260,13 +265,13 @@ export const AddApplicationDrawer: FC = memo( items={environments.map((v) => ({ name: v.name, value: v.id }))} onChange={(item) => { formik.setValues({ - ...initialFormValues, + ...emptyFormValues, name: formik.values.name, kind: formik.values.kind, env: item.value, }); }} - disabled={isAdding} + disabled={isProcessing} />
= memo( value={formik.values.pipedId} onChange={({ value }) => { formik.setValues({ - ...initialFormValues, + ...emptyFormValues, name: formik.values.name, kind: formik.values.kind, env: formik.values.env, @@ -286,7 +291,9 @@ export const AddApplicationDrawer: FC = memo( name: `${piped.name} (${piped.id})`, value: piped.id, }))} - disabled={isAdding || !formik.values.env || pipeds.length === 0} + disabled={ + isProcessing || !formik.values.env || pipeds.length === 0 + } />
@@ -310,7 +317,7 @@ export const AddApplicationDrawer: FC = memo( remote: repo.remote, })) || [] } - disabled={selectedPiped === undefined || isAdding} + disabled={selectedPiped === undefined || isProcessing} />
@@ -320,7 +327,7 @@ export const AddApplicationDrawer: FC = memo( label="Path" variant="outlined" margin="dense" - disabled={selectedPiped === undefined || isAdding} + disabled={selectedPiped === undefined || isProcessing} onChange={formik.handleChange} value={formik.values.repoPath} fullWidth @@ -334,7 +341,7 @@ export const AddApplicationDrawer: FC = memo( label="Config Filename" variant="outlined" margin="dense" - disabled={selectedPiped === undefined || isAdding} + disabled={selectedPiped === undefined || isProcessing} onChange={formik.handleChange} value={formik.values.configFilename} fullWidth @@ -352,24 +359,24 @@ export const AddApplicationDrawer: FC = memo( disabled={ selectedPiped === undefined || cloudProviders.length === 0 || - isAdding + isProcessing } /> - diff --git a/pkg/app/web/src/components/application-list.tsx b/pkg/app/web/src/components/application-list.tsx index 1d53a478d6..ccb6c0ee28 100644 --- a/pkg/app/web/src/components/application-list.tsx +++ b/pkg/app/web/src/components/application-list.tsx @@ -18,7 +18,7 @@ import { import MenuIcon from "@material-ui/icons/MoreVert"; import { Dictionary } from "@reduxjs/toolkit"; import dayjs from "dayjs"; -import React, { FC, memo, useState } from "react"; +import React, { FC, memo, useCallback, useState } from "react"; import { useDispatch, useSelector } from "react-redux"; import { Link as RouterLink } from "react-router-dom"; import { PAGE_PATH_APPLICATIONS } from "../constants/path"; @@ -39,6 +39,7 @@ import { DisableApplicationDialog } from "./disable-application-dialog"; import { SyncStatusIcon } from "./sync-status-icon"; import { SealedSecretDialog } from "./sealed-secret-dialog"; import { APPLICATION_KIND_TEXT } from "../constants/application-kind"; +import { setUpdateTargetId } from "../modules/update-application"; const useStyles = makeStyles((theme) => ({ root: { @@ -140,6 +141,13 @@ export const ApplicationList: FC = memo(function ApplicationList() { dispatch(fetchApplications()); }; + const handleEditClick = useCallback(() => { + if (actionTarget) { + dispatch(setUpdateTargetId(actionTarget.id)); + } + closeMenu(); + }, [dispatch, actionTarget]); + return (
@@ -259,6 +267,7 @@ export const ApplicationList: FC = memo(function ApplicationList() { }, }} > + Edit {actionTarget && actionTarget.disabled ? ( Enable ) : ( diff --git a/pkg/app/web/src/components/edit-application-drawer.stories.tsx b/pkg/app/web/src/components/edit-application-drawer.stories.tsx new file mode 100644 index 0000000000..088e45e3f0 --- /dev/null +++ b/pkg/app/web/src/components/edit-application-drawer.stories.tsx @@ -0,0 +1,38 @@ +import React from "react"; +import { createDecoratorRedux } from "../../.storybook/redux-decorator"; +import { dummyApplication } from "../__fixtures__/dummy-application"; +import { dummyEnv } from "../__fixtures__/dummy-environment"; +import { dummyPiped } from "../__fixtures__/dummy-piped"; +import { EditApplicationDrawer } from "./edit-application-drawer"; + +export default { + title: "APPLICATION/EditApplicationDrawer", + component: EditApplicationDrawer, + decorators: [ + createDecoratorRedux({ + updateApplication: { + targetId: dummyApplication.id, + }, + applications: { + entities: { + [dummyApplication.id]: dummyApplication, + }, + ids: [dummyApplication.id], + }, + environments: { + entities: { + [dummyEnv.id]: dummyEnv, + }, + ids: [dummyEnv.id], + }, + pipeds: { + entities: { + [dummyPiped.id]: dummyPiped, + }, + ids: [dummyPiped.id], + }, + }), + ], +}; + +export const overview: React.FC = () => ; diff --git a/pkg/app/web/src/components/edit-application-drawer.tsx b/pkg/app/web/src/components/edit-application-drawer.tsx new file mode 100644 index 0000000000..f465d3d265 --- /dev/null +++ b/pkg/app/web/src/components/edit-application-drawer.tsx @@ -0,0 +1,73 @@ +import React, { FC, memo, useCallback } from "react"; +import { useDispatch, useSelector } from "react-redux"; +import { AppState } from "../modules"; +import { + clearUpdateTarget, + updateApplication, +} from "../modules/update-application"; +import { + Application, + fetchApplications, + selectById as selectAppById, +} from "../modules/applications"; +import { + ApplicationFormDrawer, + ApplicationFormValue, +} from "./application-form-drawer"; +import { AppDispatch } from "../store"; + +export const EditApplicationDrawer: FC = memo(function EditApplicationDrawer() { + const dispatch = useDispatch(); + const [applicationId, isUpdating] = useSelector< + AppState, + [string | null, boolean] + >((state) => [ + state.updateApplication.targetId, + state.updateApplication.updating, + ]); + + const app = useSelector((state) => + applicationId ? selectAppById(state.applications, applicationId) : undefined + ); + + const handleClose = useCallback(() => { + dispatch(clearUpdateTarget()); + }, [dispatch]); + + const handleSubmit = useCallback( + (values: ApplicationFormValue) => { + if (app) { + dispatch(updateApplication({ ...values, applicationId: app.id })).then( + () => { + dispatch(fetchApplications()); + } + ); + } + }, + [dispatch, app] + ); + + return ( + + ); +}); diff --git a/pkg/app/web/src/modules/index.ts b/pkg/app/web/src/modules/index.ts index 350c21765b..a2d3aacf96 100644 --- a/pkg/app/web/src/modules/index.ts +++ b/pkg/app/web/src/modules/index.ts @@ -17,6 +17,7 @@ import { projectSlice } from "./project"; import { deploymentConfigsSlice } from "./deployment-configs"; import { sealedSecretSlice } from "./sealed-secret"; import { apiKeysSlice } from "./api-keys"; +import { updateApplicationSlice } from "./update-application"; export const reducers = combineReducers({ deployments: deploymentsSlice.reducer, @@ -24,6 +25,7 @@ export const reducers = combineReducers({ applicationLiveState: applicationLiveStateSlice.reducer, applications: applicationsSlice.reducer, applicationFilterOptions: applicationFilterOptionsSlice.reducer, + updateApplication: updateApplicationSlice.reducer, stageLogs: stageLogsSlice.reducer, activeStage: activeStageSlice.reducer, pipeds: pipedsSlice.reducer, diff --git a/pkg/app/web/src/modules/update-application.test.ts b/pkg/app/web/src/modules/update-application.test.ts new file mode 100644 index 0000000000..ef030abb9f --- /dev/null +++ b/pkg/app/web/src/modules/update-application.test.ts @@ -0,0 +1,11 @@ +import { updateApplicationSlice } from "./update-application"; + +describe("updateApplicationSlice reducer", () => { + it("should handle initial state", () => { + expect( + updateApplicationSlice.reducer(undefined, { + type: "TEST_ACTION", + }) + ).toMatchInlineSnapshot(); + }); +}); \ No newline at end of file diff --git a/pkg/app/web/src/modules/update-application.ts b/pkg/app/web/src/modules/update-application.ts new file mode 100644 index 0000000000..dbbf8882eb --- /dev/null +++ b/pkg/app/web/src/modules/update-application.ts @@ -0,0 +1,79 @@ +import { createAsyncThunk, createSlice, PayloadAction } from "@reduxjs/toolkit"; +import { ApplicationGitRepository } from "pipe/pkg/app/web/model/common_pb"; +import * as applicationAPI from "../api/applications"; +import { ApplicationKind } from "./applications"; + +const MODULE_NAME = "updateApplication"; + +interface UpdateApplication { + updating: boolean; + targetId: string | null; +} + +const initialState: UpdateApplication = { + updating: false, + targetId: null, +}; + +export const updateApplication = createAsyncThunk< + void, + { + applicationId: string; + name: string; + env: string; + pipedId: string; + repo: ApplicationGitRepository.AsObject; + repoPath: string; + configPath?: string; + configFilename?: string; + kind: ApplicationKind; + cloudProvider: string; + } +>(`${MODULE_NAME}/update`, async (values) => { + await applicationAPI.updateApplication({ + applicationId: values.applicationId, + name: values.name, + envId: values.env, + pipedId: values.pipedId, + gitPath: { + repo: values.repo, + path: values.repoPath, + configPath: values.configPath || "", + configFilename: values.configFilename || "", + url: "", + }, + cloudProvider: values.cloudProvider, + kind: values.kind, + }); +}); + +export const updateApplicationSlice = createSlice({ + name: MODULE_NAME, + initialState, + reducers: { + setUpdateTargetId(state, action: PayloadAction) { + state.targetId = action.payload; + }, + clearUpdateTarget(state) { + state.targetId = null; + }, + }, + extraReducers: (builder) => { + builder + .addCase(updateApplication.pending, (state) => { + state.updating = true; + }) + .addCase(updateApplication.rejected, (state) => { + state.updating = false; + }) + .addCase(updateApplication.fulfilled, (state) => { + state.updating = false; + state.targetId = null; + }); + }, +}); + +export const { + clearUpdateTarget, + setUpdateTargetId, +} = updateApplicationSlice.actions; diff --git a/pkg/app/web/src/pages/applications/index.tsx b/pkg/app/web/src/pages/applications/index.tsx index 56890d0fab..61f6eac3e6 100644 --- a/pkg/app/web/src/pages/applications/index.tsx +++ b/pkg/app/web/src/pages/applications/index.tsx @@ -12,7 +12,7 @@ import FilterIcon from "@material-ui/icons/FilterList"; import RefreshIcon from "@material-ui/icons/Refresh"; import React, { FC, memo, useEffect, useState } from "react"; import { useDispatch, useSelector } from "react-redux"; -import { AddApplicationDrawer } from "../../components/add-application-drawer"; +import { ApplicationFormDrawer } from "../../components/application-form-drawer"; import { ApplicationFilter } from "../../components/application-filter"; import { ApplicationList } from "../../components/application-list"; import { AppState } from "../../modules"; @@ -21,6 +21,7 @@ import { AppDispatch } from "../../store"; import { selectProjectName } from "../../modules/me"; import { DeploymentConfigForm } from "../../components/deployment-config-form"; import { clearTemplateTarget } from "../../modules/deployment-configs"; +import { EditApplicationDrawer } from "../../components/edit-application-drawer"; const useStyles = makeStyles((theme) => ({ main: { @@ -118,9 +119,9 @@ export const ApplicationIndexPage: FC = memo(function ApplicationIndexPage() { />
- { dispatch(addApplication(state)).then(() => { setIsOpenForm(false); @@ -128,9 +129,11 @@ export const ApplicationIndexPage: FC = memo(function ApplicationIndexPage() { }); }} onClose={handleClose} - isAdding={isAdding} + isProcessing={isAdding} /> + + Date: Fri, 11 Dec 2020 16:12:02 +0900 Subject: [PATCH 2/2] Fix web test --- pkg/app/web/src/modules/update-application.test.ts | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/pkg/app/web/src/modules/update-application.test.ts b/pkg/app/web/src/modules/update-application.test.ts index ef030abb9f..34b692dbae 100644 --- a/pkg/app/web/src/modules/update-application.test.ts +++ b/pkg/app/web/src/modules/update-application.test.ts @@ -6,6 +6,11 @@ describe("updateApplicationSlice reducer", () => { updateApplicationSlice.reducer(undefined, { type: "TEST_ACTION", }) - ).toMatchInlineSnapshot(); + ).toMatchInlineSnapshot(` + Object { + "targetId": null, + "updating": false, + } + `); }); -}); \ No newline at end of file +});