-
Notifications
You must be signed in to change notification settings - Fork 414
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
#477: tooltips for long strings and edited cell textarea
- Loading branch information
1 parent
d4e6bca
commit 0582d3a
Showing
33 changed files
with
803 additions
and
159 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,102 @@ | ||
import { mount, shallow } from "enzyme"; | ||
import React from "react"; | ||
import { Provider } from "react-redux"; | ||
|
||
import { expect, it } from "@jest/globals"; | ||
|
||
import serverState from "../../../dtale/serverStateManagement"; | ||
import mockPopsicle from "../../MockPopsicle"; | ||
import reduxUtils from "../../redux-test-utils"; | ||
import { buildInnerHTML, withGlobalJquery } from "../../test-utils"; | ||
|
||
describe("DataViewerInfo tests", () => { | ||
let EditedCellInfo, ReactEditedCellInfo, store, props; | ||
|
||
beforeAll(() => { | ||
const mockBuildLibs = withGlobalJquery(() => | ||
mockPopsicle.mock(url => { | ||
const { urlFetcher } = require("../../redux-test-utils").default; | ||
return urlFetcher(url); | ||
}) | ||
); | ||
jest.mock("popsicle", () => mockBuildLibs); | ||
}); | ||
|
||
beforeEach(() => { | ||
store = reduxUtils.createDtaleStore(); | ||
const components = require("../../../dtale/edited/EditedCellInfo"); | ||
EditedCellInfo = components.EditedCellInfo; | ||
ReactEditedCellInfo = components.ReactEditedCellInfo; | ||
buildInnerHTML({ settings: "" }, store); | ||
}); | ||
|
||
const buildInfo = (additionalProps, editedCell) => { | ||
const columns = [{ name: "a", dtype: "string", index: 1, visible: true }]; | ||
const data = { 0: { a: { raw: "Hello World" } } }; | ||
props = { | ||
propagateState: jest.fn(), | ||
gridState: { data, columns }, | ||
...additionalProps, | ||
}; | ||
if (editedCell) { | ||
store.getState().editedCell = editedCell; | ||
} | ||
return mount( | ||
<Provider store={store}> | ||
<EditedCellInfo {...props} /> | ||
</Provider>, | ||
{ attachTo: document.getElementById("content") } | ||
); | ||
}; | ||
|
||
it("EditedCellInfo renders successfully", () => { | ||
const result = buildInfo({}); | ||
expect(result.find("div.edited-cell-info")).toHaveLength(1); | ||
}); | ||
|
||
it("EditedCellInfo renders edited data", () => { | ||
const result = buildInfo({}, "0|1"); | ||
expect(result.find("textarea").props().value).toBe("Hello World"); | ||
}); | ||
|
||
it("EditedCellInfo handles updates", () => { | ||
const shallowProps = { | ||
...props, | ||
openChart: jest.fn(), | ||
clearEdit: jest.fn(), | ||
updateHeight: jest.fn(), | ||
}; | ||
jest.spyOn(React, "createRef").mockReturnValueOnce({ current: document.createElement("textarea") }); | ||
const editCellSpy = jest.spyOn(serverState, "editCell"); | ||
editCellSpy.mockImplementation(() => undefined); | ||
const wrapper = shallow(<ReactEditedCellInfo {...shallowProps} />); | ||
wrapper.setProps({ editedCell: "0|1" }); | ||
expect(wrapper.find("textarea").props().value).toBe("Hello World"); | ||
expect(shallowProps.updateHeight).toHaveBeenCalled(); | ||
|
||
wrapper.instance().onKeyDown({ key: "Enter" }); | ||
expect(shallowProps.clearEdit).toHaveBeenCalledTimes(1); | ||
wrapper.setState({ value: "Hello World2" }); | ||
wrapper.instance().onKeyDown({ key: "Enter" }); | ||
expect(editCellSpy).toHaveBeenCalledTimes(1); | ||
jest.restoreAllMocks(); | ||
}); | ||
|
||
it("handles save errors", () => { | ||
const editCellSpy = jest.spyOn(serverState, "editCell"); | ||
editCellSpy.mockImplementation(() => undefined); | ||
const result = buildInfo({}, "0|1"); | ||
expect(result.find("textarea").props().value).toBe("Hello World"); | ||
|
||
result.find("textarea").simulate("change", { target: { value: "Hello World2" } }); | ||
expect(result.find(ReactEditedCellInfo).state().value).toBe("Hello World2"); | ||
result.find("textarea").simulate("keyPress", { key: "Enter" }); | ||
editCellSpy.mock.calls[0][4]({ error: "bad value" }); | ||
expect(store.getState().chartData).toEqual({ | ||
visible: true, | ||
error: "bad value", | ||
type: "error", | ||
}); | ||
jest.restoreAllMocks(); | ||
}); | ||
}); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,81 @@ | ||
import { mount } from "enzyme"; | ||
import React from "react"; | ||
import { Provider } from "react-redux"; | ||
|
||
import { describe, expect, it } from "@jest/globals"; | ||
|
||
import { MaxWidthOption, ReactMaxWidthOption } from "../../../dtale/menu/MaxWidthOption"; | ||
import serverState from "../../../dtale/serverStateManagement"; | ||
import { StyledSlider } from "../../../sliderUtils"; | ||
import reduxUtils from "../../redux-test-utils"; | ||
import { buildInnerHTML } from "../../test-utils"; | ||
|
||
describe("MaxWidthOption tests", () => { | ||
let result, store, udpateMaxColumnWidthSpy; | ||
|
||
const setupOption = (maxColumnWidth = null) => { | ||
store = reduxUtils.createDtaleStore(); | ||
buildInnerHTML({ settings: "", maxColumnWidth }, store); | ||
result = mount( | ||
<Provider store={store}> | ||
<MaxWidthOption />, | ||
</Provider>, | ||
{ | ||
attachTo: document.getElementById("content"), | ||
} | ||
); | ||
}; | ||
|
||
beforeEach(() => { | ||
udpateMaxColumnWidthSpy = jest.spyOn(serverState, "updateMaxColumnWidth"); | ||
udpateMaxColumnWidthSpy.mockImplementation(() => undefined); | ||
setupOption(); | ||
}); | ||
|
||
afterEach(jest.resetAllMocks); | ||
|
||
afterAll(jest.restoreAllMocks); | ||
|
||
it("renders successfully with defaults", () => { | ||
expect(result.find("i.ico-check-box-outline-blank")).toHaveLength(1); | ||
}); | ||
|
||
it("renders successfully with specified value", () => { | ||
setupOption("55"); | ||
expect(result.find("i.ico-check-box")).toHaveLength(1); | ||
expect(result.find("input").props().value).toBe("55"); | ||
}); | ||
|
||
it("handles changes to text input", () => { | ||
result.find("input").simulate("change", { target: { value: "f150" } }); | ||
expect(result.find(ReactMaxWidthOption).state().currMaxWidth).toBe(100); | ||
result.find("input").simulate("change", { target: { value: "150" } }); | ||
expect(result.find(ReactMaxWidthOption).state().currMaxWidth).toBe(150); | ||
result.find("input").simulate("keyPress", { key: "Enter" }); | ||
expect(udpateMaxColumnWidthSpy).toBeCalledTimes(1); | ||
udpateMaxColumnWidthSpy.mock.calls[0][1](); | ||
expect(store.getState().maxColumnWidth).toBe(150); | ||
}); | ||
|
||
it("handles changes to slider", () => { | ||
result.find(StyledSlider).props().onAfterChange(150); | ||
expect(result.find(ReactMaxWidthOption).state().currMaxWidth).toBe(150); | ||
expect(udpateMaxColumnWidthSpy).toBeCalledTimes(1); | ||
udpateMaxColumnWidthSpy.mock.calls[0][1](); | ||
expect(store.getState().maxColumnWidth).toBe(150); | ||
}); | ||
|
||
it("handles changes to checkbox", () => { | ||
result.find("i.ico-check-box-outline-blank").simulate("click"); | ||
expect(result.find(ReactMaxWidthOption).state().currMaxWidth).toBe(100); | ||
expect(udpateMaxColumnWidthSpy).toBeCalledTimes(1); | ||
udpateMaxColumnWidthSpy.mock.calls[0][1](); | ||
expect(store.getState().maxColumnWidth).toBe(100); | ||
result.update(); | ||
result.find("i.ico-check-box").simulate("click"); | ||
expect(udpateMaxColumnWidthSpy).toBeCalledTimes(2); | ||
expect(udpateMaxColumnWidthSpy.mock.calls[1][0]).toBe(""); | ||
udpateMaxColumnWidthSpy.mock.calls[1][1](); | ||
expect(store.getState().maxColumnWidth).toBe(null); | ||
}); | ||
}); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,34 @@ | ||
import { expect, it } from "@jest/globals"; | ||
|
||
import * as fetcher from "../../fetcher"; | ||
|
||
import serverStateManagement from "../../dtale/serverStateManagement"; | ||
|
||
describe("serverstateManagement", () => { | ||
let fetchJsonSpy; | ||
const callback = () => undefined; | ||
|
||
beforeEach(() => { | ||
fetchJsonSpy = jest.spyOn(fetcher, "fetchJson"); | ||
fetchJsonSpy.mockImplementation(() => undefined); | ||
}); | ||
|
||
afterEach(jest.resetAllMocks); | ||
|
||
afterAll(jest.restoreAllMocks); | ||
|
||
it("updatePinMenu calls right URL", () => { | ||
serverStateManagement.updatePinMenu(true, callback); | ||
expect(fetchJsonSpy).toHaveBeenLastCalledWith("/dtale/update-pin-menu?pinned=true", callback); | ||
}); | ||
|
||
it("updateLanguage calls right URL", () => { | ||
serverStateManagement.updateLanguage("cn", callback); | ||
expect(fetchJsonSpy).toHaveBeenLastCalledWith("/dtale/update-language?language=cn", callback); | ||
}); | ||
|
||
it("updateMaxColumnWidth calls right URL", () => { | ||
serverStateManagement.updateMaxColumnWidth(100, callback); | ||
expect(fetchJsonSpy).toHaveBeenLastCalledWith("/dtale/update-maximum-column-width?width=100", callback); | ||
}); | ||
}); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.