import * as React from "react";
import { render, screen, fireEvent, cleanup } from "@testing-library/react";
import { EditorObject, EditorObjectState } from "./EditorObject";
import { ComponentTypes } from "@sc/plugins/webcomponents/v2/types";
import { IconTypes } from "@sc/plugins/webcomponents/v2/Icon";
describe(" Tests", () => {
afterEach(cleanup);
it("Should render the Editor Object component when called", () => {
render(Inner Content);
expect(screen.getByTestId("Editor-EditorObject")).not.toBe(null);
});
it("Should show a caption in the editor object that reflects the title prop", () => {
render(Inner Content);
expect(screen.getByText("MY COMPONENT")).not.toBe(null);
});
it("Should show an icon if one is provided that reflects the icon prop", () => {
render(
Inner Content
);
expect(screen.getByTestId("WC-ICON-LIVE")).not.toBe(null);
});
it("Should render in hover mode when state is hovered", () => {
const { debug } = render(
Inner Content
);
// debug();
expect(screen.getByTestId("Editor-EditorObject-State-Hover")).not.toBe(
null
);
});
it("Should render in active mode when state is active", () => {
render(
Inner Content
);
// expect(true).toBe(false);
expect(screen.getByTestId("Editor-EditorObject-State-Active")).not.toBe(
null
);
});
it("Should show a list of menu items in the actions drop down menu that reflect the items in the actions prop", () => {
const actions = [{ caption: "Testing" }];
const { debug } = render(
Inner Content
);
fireEvent.click(screen.getByTestId("Editor-EditorObject-Dropdown"));
// debug();
expect(
screen.getAllByTestId("Editor-EditorObject-Dropdown-Items").length
).toEqual(actions.length + 2);
});
test.todo("Should render resize handles if isResizable prop is true");
test.todo(
"Should render the 'North' resize handle if resizeHandles prop has an 'N' as an array item"
);
test.todo(
"Should render the 'North West' resize handle if resizeHandles prop has an 'NW' as an array item"
);
test.todo(
"Should render the 'West' resize handle if resizeHandles prop has an 'W' as an array item"
);
test.todo(
"Should render the 'South West' resize handle if resizeHandles prop has an 'SW' as an array item"
);
test.todo(
"Should render the 'South' resize handle if resizeHandles prop has an 'S' as an array item"
);
test.todo(
"Should render the 'South East' resize handle if resizeHandles prop has an 'SE' as an array item"
);
test.todo(
"Should render the 'East' resize handle if resizeHandles prop has an 'E' as an array item"
);
test.todo(
"Should render the 'North East' resize handle if resizeHandles prop has an 'NE' as an array item"
);
test.skip("Should be styled according to the style prop if one is present", () => {});
test.skip("Should render a transparent div component if overlay prop is true", () => {});
test.skip("Should show an overlay prop across the entire editor object if one is showing", () => {});
test.skip("Should show a custom drag handle component if provided in the dragHandleComponent prop", () => {});
test.skip("Should show a custom resize handler component for resizable editor objects when one is provided in the resizeHandleComponent prop", () => {});
});
describe("Editor Module (Events)", () => {
afterEach(cleanup);
it("Should trigger the onClick event when the editor object is clicked", () => {
const onClick = jest.fn();
render(
Inner Content
);
fireEvent.click(screen.getByTestId("Editor-EditorObject"));
expect(onClick).toBeCalled();
});
test.skip("Should trigger the onResize event with an appropriate payload when a resize is supposed to take place", () => {});
test.skip("Should trigger the onResizeEnd event with an appropriate payload when a resize has ended", () => {});
test.skip("Shoudl trigger the onDragStart event when the editor object's drag handle has begun dragging", () => {});
});
describe("Editor Module (Actions)", () => {
afterEach(cleanup);
test.skip("Should delete the item if the [del] key is pressed (while not in edit mode", () => {});
test.skip("Should exit editing mode if the [esc] key is pressed", () => {});
});
describe("Editor Module (Hooks)", () => {
afterEach(cleanup);
test.skip("Should trigger the 'onEditorObjectResize' plugin hook when the resize is taking place", () => {});
test.skip("Should trigger the 'onEditorObjectDragDrop' plugin hook when the editor object drag and drop is taking place", () => {});
test.skip("Should trigger the 'onEditorObjectClick' plugin hook when the editor object is clicked", () => {});
test.skip("Should trigger the 'onEditorObjectContextMenu' plugin hook when the context menu is being showed", () => {});
test.skip("Should trigger the 'onEditorObjectRender' plugin hook when the editor object is being rendered", () => {});
test.skip("Should trigger the 'onEditorObjectResizeHandleRender' plugin hook when the editor object's resize handler is being rendered", () => {});
test.skip("Should trigger the 'onEditorObjectActionComponentRender' plugin hook when the editor object's action component is being rendered", () => {});
test.skip("Should trigger the 'onEditorObjectActionMenuList' plugin hook when the editor object's action menu list is being generated", () => {});
});