+
{line}
);
@@ -54,4 +56,4 @@ export const DiffView: FC
= ({ content }) => {
})}
);
-};
+});
diff --git a/pkg/app/web/src/modules/active-stage.test.ts b/pkg/app/web/src/modules/active-stage.test.ts
index 2478b1592d..f7d1d6e8b1 100644
--- a/pkg/app/web/src/modules/active-stage.test.ts
+++ b/pkg/app/web/src/modules/active-stage.test.ts
@@ -5,7 +5,7 @@ import {
} from "./active-stage";
describe("activeStageSlice reducer", () => {
- it("should handle initial state", () => {
+ it("should return the initial state", () => {
expect(
activeStageSlice.reducer(undefined, {
type: "TEST_ACTION",
diff --git a/pkg/app/web/src/modules/api-keys.test.ts b/pkg/app/web/src/modules/api-keys.test.ts
index 81ec71f6d6..00e9f525b8 100644
--- a/pkg/app/web/src/modules/api-keys.test.ts
+++ b/pkg/app/web/src/modules/api-keys.test.ts
@@ -19,7 +19,7 @@ const baseState = {
};
describe("apiKeysSlice reducer", () => {
- it("should handle initial state", () => {
+ it("should return the initial state", () => {
expect(
apiKeysSlice.reducer(undefined, {
type: "TEST_ACTION",
diff --git a/pkg/app/web/src/modules/application-filter-options.test.ts b/pkg/app/web/src/modules/application-filter-options.test.ts
index 149240b27f..0baa8a4203 100644
--- a/pkg/app/web/src/modules/application-filter-options.test.ts
+++ b/pkg/app/web/src/modules/application-filter-options.test.ts
@@ -6,7 +6,7 @@ import {
} from "./application-filter-options";
describe("applicationFilterOptionsSlice reducer", () => {
- it("should handle initial state", () => {
+ it("should return the initial state", () => {
expect(
applicationFilterOptionsSlice.reducer(undefined, {
type: "TEST_ACTION",
diff --git a/pkg/app/web/src/modules/applications-live-state.test.ts b/pkg/app/web/src/modules/applications-live-state.test.ts
index d28eb85830..58175b2f88 100644
--- a/pkg/app/web/src/modules/applications-live-state.test.ts
+++ b/pkg/app/web/src/modules/applications-live-state.test.ts
@@ -1,17 +1,70 @@
-import { applicationLiveStateSlice } from "./applications-live-state";
+import { dummyApplicationLiveState } from "../__fixtures__/dummy-application-live-state";
+import {
+ applicationLiveStateSlice,
+ ApplicationLiveStateState,
+ fetchApplicationStateById,
+} from "./applications-live-state";
+
+const initialState: ApplicationLiveStateState = {
+ entities: {},
+ hasError: {},
+ ids: [],
+};
describe("applicationLiveStateSlice reducer", () => {
- it("should handle initial state", () => {
+ it("should return the initial state", () => {
expect(
applicationLiveStateSlice.reducer(undefined, {
type: "TEST_ACTION",
})
- ).toMatchInlineSnapshot(`
- Object {
- "entities": Object {},
- "hasError": Object {},
- "ids": Array [],
- }
- `);
+ ).toEqual(initialState);
+ });
+
+ describe("fetchApplicationStateById", () => {
+ it(`should handle ${fetchApplicationStateById.pending.type}`, () => {
+ expect(
+ applicationLiveStateSlice.reducer(initialState, {
+ type: fetchApplicationStateById.pending.type,
+ meta: {
+ arg: "application-1",
+ },
+ })
+ ).toEqual({ ...initialState, hasError: { "application-1": false } });
+ });
+
+ it(`should handle ${fetchApplicationStateById.rejected.type}`, () => {
+ expect(
+ applicationLiveStateSlice.reducer(
+ { ...initialState, hasError: { "application-1": false } },
+ {
+ type: fetchApplicationStateById.rejected.type,
+ meta: {
+ arg: "application-1",
+ },
+ }
+ )
+ ).toEqual({ ...initialState, hasError: { "application-1": true } });
+ });
+
+ it(`should handle ${fetchApplicationStateById.fulfilled.type}`, () => {
+ expect(
+ applicationLiveStateSlice.reducer(
+ { ...initialState, hasError: { "application-1": false } },
+ {
+ type: fetchApplicationStateById.fulfilled.type,
+ meta: {
+ arg: "application-1",
+ },
+ payload: dummyApplicationLiveState,
+ }
+ )
+ ).toEqual({
+ entities: {
+ [dummyApplicationLiveState.applicationId]: dummyApplicationLiveState,
+ },
+ ids: [dummyApplicationLiveState.applicationId],
+ hasError: { "application-1": false },
+ });
+ });
});
});
diff --git a/pkg/app/web/src/modules/applications-live-state.ts b/pkg/app/web/src/modules/applications-live-state.ts
index 11655222aa..cc16c4f419 100644
--- a/pkg/app/web/src/modules/applications-live-state.ts
+++ b/pkg/app/web/src/modules/applications-live-state.ts
@@ -44,8 +44,10 @@ const initialState = applicationLiveStateAdapter.getInitialState<{
hasError: {},
});
+export type ApplicationLiveStateState = typeof initialState;
+
export const selectHasError = (
- state: typeof initialState,
+ state: ApplicationLiveStateState,
applicationId: string
): boolean => {
return state.hasError[applicationId] || false;
diff --git a/pkg/app/web/src/modules/applications.test.ts b/pkg/app/web/src/modules/applications.test.ts
index 050fb416d9..da1515c22c 100644
--- a/pkg/app/web/src/modules/applications.test.ts
+++ b/pkg/app/web/src/modules/applications.test.ts
@@ -1,4 +1,7 @@
-import { dummyApplication } from "../__fixtures__/dummy-application";
+import {
+ dummyApplication,
+ dummyApplicationSyncState,
+} from "../__fixtures__/dummy-application";
import { createStore } from "../../test-utils";
import {
addApplication,
@@ -54,7 +57,7 @@ describe("fetchApplications", () => {
});
describe("applicationsSlice reducer", () => {
- it("should handle initial state", () => {
+ it("should return the initial state", () => {
expect(
applicationsSlice.reducer(undefined, {
type: "TEST_ACTION",
@@ -110,7 +113,7 @@ describe("applicationsSlice reducer", () => {
const updatedApplication: Application = {
...dummyApplication,
syncState: {
- ...dummyApplication.syncState,
+ ...dummyApplicationSyncState,
status: ApplicationSyncStatus.OUT_OF_SYNC,
},
};
diff --git a/pkg/app/web/src/modules/applications.ts b/pkg/app/web/src/modules/applications.ts
index d24007d31d..e498e57045 100644
--- a/pkg/app/web/src/modules/applications.ts
+++ b/pkg/app/web/src/modules/applications.ts
@@ -6,6 +6,7 @@ import {
} from "@reduxjs/toolkit";
import {
Application as ApplicationModel,
+ ApplicationSyncState as ApplicationSyncStateModel,
ApplicationSyncStatus,
} from "pipe/pkg/app/web/model/application_pb";
import * as applicationsAPI from "../api/applications";
@@ -20,6 +21,7 @@ import { AppState } from ".";
export type Application = ApplicationModel.AsObject;
export type ApplicationSyncStatusKey = keyof typeof ApplicationSyncStatus;
export type ApplicationKindKey = keyof typeof ApplicationKind;
+export type ApplicationSyncState = ApplicationSyncStateModel.AsObject;
export const applicationsAdapter = createEntityAdapter