Files
SCM-Manager/scm-ui/src/groups/modules/groups.test.js

185 lines
4.6 KiB
JavaScript
Raw Normal View History

2018-07-31 10:53:44 +02:00
//@flow
import configureMockStore from "redux-mock-store";
import thunk from "redux-thunk";
import fetchMock from "fetch-mock";
2018-07-31 11:30:30 +02:00
import reducer, {
fetchGroups,
2018-07-31 10:53:44 +02:00
FETCH_GROUPS_PENDING,
FETCH_GROUPS_SUCCESS,
2018-07-31 11:30:30 +02:00
FETCH_GROUPS_FAILURE,
fetchGroupsSuccess
2018-07-31 10:53:44 +02:00
} from "./groups"
const GROUPS_URL = "/scm/api/rest/v2/groups";
const groupZaphod = {
2018-07-31 11:30:30 +02:00
creationDate: "2018-07-31T08:39:07.860Z",
description: "This is a group",
name: "zaphodGroup",
type: "xml",
properties: {},
members: ["userZaphod"],
_links: {
self: {
href: "http://localhost:3000/scm/api/rest/v2/groups/zaphodGroup"
},
delete: {
href: "http://localhost:3000/scm/api/rest/v2/groups/zaphodGroup"
},
update: {
href:"http://localhost:3000/scm/api/rest/v2/groups/zaphodGroup"
}
},
_embedded: {
members: [{
name:"userZaphod",
_links: {
self :{
href: "http://localhost:3000/scm/api/rest/v2/users/userZaphod"
}
}
}]
}
2018-07-31 10:53:44 +02:00
};
const groupFord = {
2018-07-31 11:30:30 +02:00
creationDate: "2018-07-31T08:39:07.860Z",
description: "This is a group",
name: "fordGroup",
type: "xml",
properties: {},
members: [],
_links: {
self: {
href: "http://localhost:3000/scm/api/rest/v2/groups/fordGroup"
},
delete: {
href: "http://localhost:3000/scm/api/rest/v2/groups/fordGroup"
},
update: {
href:"http://localhost:3000/scm/api/rest/v2/groups/fordGroup"
}
},
_embedded: {
members: []
}
2018-07-31 10:53:44 +02:00
};
const responseBody = {
page: 0,
pageTotal: 1,
_links: {
self: {
href: "http://localhost:3000/scm/api/rest/v2/groups/?page=0&pageSize=10"
},
first: {
href: "http://localhost:3000/scm/api/rest/v2/groups/?page=0&pageSize=10"
},
last: {
href: "http://localhost:3000/scm/api/rest/v2/groups/?page=0&pageSize=10"
},
create: {
href: "http://localhost:3000/scm/api/rest/v2/groups/"
}
},
_embedded: {
groups: [groupZaphod, groupFord]
}
};
const response = {
headers: { "content-type": "application/json" },
responseBody
};
describe("groups fetch()", () => {
const mockStore = configureMockStore([thunk]);
afterEach(() => {
fetchMock.reset();
fetchMock.restore();
});
it("should successfully fetch groups", () => {
fetchMock.getOnce(GROUPS_URL, response);
const expectedActions = [
{ type: FETCH_GROUPS_PENDING },
{
type: FETCH_GROUPS_SUCCESS,
payload: response
}
];
const store = mockStore({});
return store.dispatch(fetchGroups()).then(() => {
expect(store.getActions()).toEqual(expectedActions);
});
});
it("should fail getting groups on HTTP 500", () => {
fetchMock.getOnce(GROUPS_URL, {
status: 500
});
const store = mockStore({});
return store.dispatch(fetchGroups()).then(() => {
const actions = store.getActions();
expect(actions[0].type).toEqual(FETCH_GROUPS_PENDING);
expect(actions[1].type).toEqual(FETCH_GROUPS_FAILURE);
expect(actions[1].payload).toBeDefined();
});
});
});
2018-07-31 11:30:30 +02:00
describe("groups reducer", () => {
it("should update state correctly according to FETCH_USERS_SUCCESS action", () => {
const newState = reducer({}, fetchGroupsSuccess(responseBody));
expect(newState.list).toEqual({
entries: ["zaphodGroup", "fordGroup"],
entry: {
groupCreatePermission: true,
page: 0,
pageTotal: 1,
_links: responseBody._links
}
});
expect(newState.byNames).toEqual({
zaphodGroup: groupZaphod,
fordGroup: groupFord
});
expect(newState.list.entry.groupCreatePermission).toBeTruthy();
});
it("should set groupCreatePermission to true if update link is present", () => {
const newState = reducer({}, fetchGroupsSuccess(responseBody));
expect(newState.list.entry.groupCreatePermission).toBeTruthy();
});
it("should not replace whole byNames map when fetching users", () => {
const oldState = {
byNames: {
fordGroup: groupFord
}
};
const newState = reducer(oldState, fetchGroupsSuccess(responseBody));
expect(newState.byNames["zaphodGroup"]).toBeDefined();
expect(newState.byNames["fordGroup"]).toBeDefined();
});
it("should set userCreatePermission to true if create link is present", () => {
const newState = reducer({}, fetchGroupsSuccess(responseBody));
expect(newState.list.entry.groupCreatePermission).toBeTruthy();
expect(newState.list.entries).toEqual(["zaphodGroup", "fordGroup"]);
expect(newState.byNames["fordGroup"]).toBeTruthy();
expect(newState.byNames["zaphodGroup"]).toBeTruthy();
});
});