diff --git a/scm-ui/src/permissions/modules/permissions.js b/scm-ui/src/permissions/modules/permissions.js index 3bf46394d5..2dec35b075 100644 --- a/scm-ui/src/permissions/modules/permissions.js +++ b/scm-ui/src/permissions/modules/permissions.js @@ -5,10 +5,15 @@ import type { Action } from "../../types/Action"; import type { Permission, Permissions } from "../types/Permissions"; export const FETCH_PERMISSIONS = "scm/repos/FETCH_PERMISSIONS"; -export const FETCH_PERMISSIONS_PENDING = `${FETCH_PERMISSIONS}_${types.PENDING_SUFFIX}`; -export const FETCH_PERMISSIONS_SUCCESS = `${FETCH_PERMISSIONS}_${types.SUCCESS_SUFFIX}`; -export const FETCH_PERMISSIONS_FAILURE = `${FETCH_PERMISSIONS}_${types.FAILURE_SUFFIX}`; - +export const FETCH_PERMISSIONS_PENDING = `${FETCH_PERMISSIONS}_${ + types.PENDING_SUFFIX +}`; +export const FETCH_PERMISSIONS_SUCCESS = `${FETCH_PERMISSIONS}_${ + types.SUCCESS_SUFFIX +}`; +export const FETCH_PERMISSIONS_FAILURE = `${FETCH_PERMISSIONS}_${ + types.FAILURE_SUFFIX +}`; const REPOS_URL = "repositories"; const PERMISSIONS_URL = "permissions"; @@ -30,7 +35,10 @@ export function fetchPermissions(namespace: string, name: string) { }; } -export function fetchPermissionsPending(namespace: string, name: string): Action { +export function fetchPermissionsPending( + namespace: string, + name: string +): Action { return { type: FETCH_PERMISSIONS_PENDING, payload: { @@ -41,7 +49,11 @@ export function fetchPermissionsPending(namespace: string, name: string): Action }; } -export function fetchPermissionsSuccess(permissions: Permissions, namespace: string, name: string): Action { +export function fetchPermissionsSuccess( + permissions: Permissions, + namespace: string, + name: string +): Action { return { type: FETCH_PERMISSIONS_SUCCESS, payload: permissions, @@ -64,3 +76,20 @@ export function fetchPermissionsFailure( itemId: namespace + "/" + name }; } + +// reducer +export default function reducer( + state: Object = {}, + action: Action = { type: "UNKNOWN" } +): Object { + if (!action.payload) { + return state; + } + + switch (action.type) { + case FETCH_PERMISSIONS_SUCCESS: + return state; + default: + return state; + } +} diff --git a/scm-ui/src/permissions/modules/permissions.test.js b/scm-ui/src/permissions/modules/permissions.test.js index 94e894453b..1221837995 100644 --- a/scm-ui/src/permissions/modules/permissions.test.js +++ b/scm-ui/src/permissions/modules/permissions.test.js @@ -2,8 +2,9 @@ import configureMockStore from "redux-mock-store"; import thunk from "redux-thunk"; import fetchMock from "fetch-mock"; -import { +import reducer, { fetchPermissions, + fetchPermissionsSuccess, FETCH_PERMISSIONS_PENDING, FETCH_PERMISSIONS_SUCCESS, FETCH_PERMISSIONS_FAILURE @@ -80,3 +81,26 @@ describe("permission fetch", () => { }); }); }); + +describe("repos reducer", () => { + it("should return empty object, if state and action is undefined", () => { + expect(reducer()).toEqual({}); + }); + + it("should return the same state, if the action is undefined", () => { + const state = { x: true }; + expect(reducer(state)).toBe(state); + }); + + it("should return the same state, if the action is unknown to the reducer", () => { + const state = { x: true }; + expect(reducer(state, { type: "EL_SPECIALE" })).toBe(state); + }); + + it("should store the permissions on FETCH_PERMISSION_SUCCESS", () => { + const newState = reducer( + {}, + fetchPermissionsSuccess(s_bPermissions, "s", "b") + ); + }); +});