Skip to content
This repository was archived by the owner on Dec 7, 2021. It is now read-only.

Commit 4d99c1c

Browse files
committed
test: Verify tag update/delete project actions
1 parent d1cd728 commit 4d99c1c

File tree

2 files changed

+84
-2
lines changed

2 files changed

+84
-2
lines changed

src/react/components/common/tagInput/tagInput.tsx

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,6 @@ import TagInputItem, { ITagInputItemProps, ITagClickProps } from "./tagInputItem
1010
import TagInputToolbar from "./tagInputToolbar";
1111
import { toast } from "react-toastify";
1212
import { strings } from "../../../../common/strings";
13-
import { string } from "prop-types";
1413
// tslint:disable-next-line:no-var-requires
1514
const tagColors = require("../../common/tagColors.json");
1615

src/redux/actions/projectActions.test.ts

Lines changed: 84 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import _ from "lodash";
12
import createMockStore, { MockStoreEnhanced } from "redux-mock-store";
23
import { ActionTypes } from "./actionTypes";
34
import * as projectActions from "./projectActions";
@@ -11,24 +12,29 @@ jest.mock("../../services/assetService");
1112
import { AssetService } from "../../services/assetService";
1213
import { ExportProviderFactory } from "../../providers/export/exportProviderFactory";
1314
import { ExportAssetState, IExportProvider } from "../../providers/export/exportProvider";
14-
import { IApplicationState } from "../../models/applicationState";
15+
import { IApplicationState, IProject } from "../../models/applicationState";
1516
import initialState from "../store/initialState";
1617
import { appInfo } from "../../common/appInfo";
18+
import registerMixins from "../../registerMixins";
1719

1820
describe("Project Redux Actions", () => {
1921
let store: MockStoreEnhanced<IApplicationState>;
2022
let projectServiceMock: jest.Mocked<typeof ProjectService>;
2123
const appSettings = MockFactory.appSettings();
2224

25+
beforeAll(registerMixins);
26+
2327
beforeEach(() => {
2428
const middleware = [thunk];
2529
const mockState: IApplicationState = {
2630
...initialState,
2731
appSettings,
2832
};
33+
2934
store = createMockStore<IApplicationState>(middleware)(mockState);
3035
projectServiceMock = ProjectService as jest.Mocked<typeof ProjectService>;
3136
projectServiceMock.prototype.load = jest.fn((project) => Promise.resolve(project));
37+
projectServiceMock.prototype.save = jest.fn((project) => Promise.resolve(project));
3238
});
3339

3440
it("Load Project action resolves a promise and dispatches redux action", async () => {
@@ -255,4 +261,81 @@ describe("Project Redux Actions", () => {
255261

256262
expect(mockExportProvider.export).toHaveBeenCalled();
257263
});
264+
265+
describe("Updating project tags", () => {
266+
let project: IProject = null;
267+
268+
beforeEach(() => {
269+
project = MockFactory.createTestProject("TestProject");
270+
const middleware = [thunk];
271+
const mockState: IApplicationState = {
272+
...initialState,
273+
currentProject: project,
274+
appSettings,
275+
};
276+
277+
store = createMockStore<IApplicationState>(middleware)(mockState);
278+
});
279+
280+
it("Updates tags across all project assets when a tag is renamed", async () => {
281+
const projectAssets = _.values(project.assets);
282+
const updatedTag = project.tags[project.tags.length - 1];
283+
284+
const updatedAssets = [
285+
MockFactory.createTestAssetMetadata(projectAssets[0]),
286+
MockFactory.createTestAssetMetadata(projectAssets[1]),
287+
];
288+
289+
const expectedTagName = `${updatedTag.name} - updated`;
290+
291+
const assetServiceMock = AssetService as jest.Mocked<typeof AssetService>;
292+
assetServiceMock.prototype.renameTag = jest.fn(() => Promise.resolve(updatedAssets));
293+
294+
const actualUpdatedAssets = await projectActions.updateProjectTag(
295+
project,
296+
updatedTag.name,
297+
expectedTagName,
298+
)(store.dispatch, store.getState);
299+
300+
const actions = store.getActions();
301+
302+
expect(actions.length).toEqual(5);
303+
expect(actions[0].type).toEqual(ActionTypes.SAVE_ASSET_METADATA_SUCCESS);
304+
expect(actions[1].type).toEqual(ActionTypes.SAVE_ASSET_METADATA_SUCCESS);
305+
expect(actions[2].type).toEqual(ActionTypes.SAVE_PROJECT_SUCCESS);
306+
expect(actions[3].type).toEqual(ActionTypes.LOAD_PROJECT_SUCCESS);
307+
expect(actions[4].type).toEqual(ActionTypes.UPDATE_PROJECT_TAG_SUCCESS);
308+
309+
expect(actualUpdatedAssets).toEqual(updatedAssets);
310+
});
311+
312+
it("Deletes tags across all project assets when a tag is renamed", async () => {
313+
const projectAssets = _.values(project.assets);
314+
const deletedTag = project.tags[project.tags.length - 1];
315+
316+
const updatedAssets = [
317+
MockFactory.createTestAssetMetadata(projectAssets[0]),
318+
MockFactory.createTestAssetMetadata(projectAssets[1]),
319+
];
320+
321+
const assetServiceMock = AssetService as jest.Mocked<typeof AssetService>;
322+
assetServiceMock.prototype.deleteTag = jest.fn(() => Promise.resolve(updatedAssets));
323+
324+
const actualUpdatedAssets = await projectActions.deleteProjectTag(
325+
project,
326+
deletedTag.name,
327+
)(store.dispatch, store.getState);
328+
329+
const actions = store.getActions();
330+
331+
expect(actions.length).toEqual(5);
332+
expect(actions[0].type).toEqual(ActionTypes.SAVE_ASSET_METADATA_SUCCESS);
333+
expect(actions[1].type).toEqual(ActionTypes.SAVE_ASSET_METADATA_SUCCESS);
334+
expect(actions[2].type).toEqual(ActionTypes.SAVE_PROJECT_SUCCESS);
335+
expect(actions[3].type).toEqual(ActionTypes.LOAD_PROJECT_SUCCESS);
336+
expect(actions[4].type).toEqual(ActionTypes.DELETE_PROJECT_TAG_SUCCESS);
337+
338+
expect(actualUpdatedAssets).toEqual(updatedAssets);
339+
});
340+
});
258341
});

0 commit comments

Comments
 (0)