TreeNode.test.tsx 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110
  1. import { screen } from "@testing-library/react";
  2. import userEvent from "@testing-library/user-event";
  3. import { renderWithProviders } from "test-utils";
  4. import { vi, describe, afterEach, it, expect } from "vitest";
  5. import TreeNode from "#/components/file-explorer/TreeNode";
  6. import OpenHands from "#/api/open-hands";
  7. const getFileSpy = vi.spyOn(OpenHands, "getFile");
  8. const getFilesSpy = vi.spyOn(OpenHands, "getFiles");
  9. vi.mock("../../services/fileService", async () => ({
  10. uploadFile: vi.fn(),
  11. }));
  12. describe.skip("TreeNode", () => {
  13. afterEach(() => {
  14. vi.clearAllMocks();
  15. });
  16. it("should render a file if property has no children", () => {
  17. renderWithProviders(<TreeNode path="/file.ts" defaultOpen />);
  18. expect(screen.getByText("file.ts")).toBeInTheDocument();
  19. });
  20. it("should render a folder if it's in a subdir", async () => {
  21. renderWithProviders(<TreeNode path="/folder1/" defaultOpen />);
  22. expect(getFilesSpy).toHaveBeenCalledWith("/folder1/");
  23. expect(await screen.findByText("folder1")).toBeInTheDocument();
  24. expect(await screen.findByText("file2.ts")).toBeInTheDocument();
  25. });
  26. it("should close a folder when clicking on it", async () => {
  27. const user = userEvent.setup();
  28. renderWithProviders(<TreeNode path="/folder1/" defaultOpen />);
  29. const folder1 = await screen.findByText("folder1");
  30. const file2 = await screen.findByText("file2.ts");
  31. expect(folder1).toBeInTheDocument();
  32. expect(file2).toBeInTheDocument();
  33. await user.click(folder1);
  34. expect(folder1).toBeInTheDocument();
  35. expect(screen.queryByText("file2.ts")).not.toBeInTheDocument();
  36. });
  37. it("should open a folder when clicking on it", async () => {
  38. const user = userEvent.setup();
  39. renderWithProviders(<TreeNode path="/folder1/" />);
  40. const folder1 = await screen.findByText("folder1");
  41. expect(folder1).toBeInTheDocument();
  42. expect(screen.queryByText("file2.ts")).not.toBeInTheDocument();
  43. await user.click(folder1);
  44. expect(getFilesSpy).toHaveBeenCalledWith("/folder1/");
  45. expect(folder1).toBeInTheDocument();
  46. expect(await screen.findByText("file2.ts")).toBeInTheDocument();
  47. });
  48. it("should call `OpenHands.getFile` and return the full path of a file when clicking on a file", async () => {
  49. const user = userEvent.setup();
  50. renderWithProviders(<TreeNode path="/folder1/file2.ts" defaultOpen />);
  51. const file2 = screen.getByText("file2.ts");
  52. await user.click(file2);
  53. expect(getFileSpy).toHaveBeenCalledWith("/folder1/file2.ts");
  54. });
  55. it("should render the full explorer given the defaultOpen prop", async () => {
  56. const user = userEvent.setup();
  57. renderWithProviders(<TreeNode path="/" defaultOpen />);
  58. expect(getFilesSpy).toHaveBeenCalledWith("/");
  59. const file1 = await screen.findByText("file1.ts");
  60. const folder1 = await screen.findByText("folder1");
  61. expect(file1).toBeInTheDocument();
  62. expect(folder1).toBeInTheDocument();
  63. expect(screen.queryByText("file2.ts")).not.toBeInTheDocument();
  64. await user.click(folder1);
  65. expect(getFilesSpy).toHaveBeenCalledWith("folder1/");
  66. expect(file1).toBeInTheDocument();
  67. expect(folder1).toBeInTheDocument();
  68. expect(await screen.findByText("file2.ts")).toBeInTheDocument();
  69. });
  70. it("should render all children as collapsed when defaultOpen is false", async () => {
  71. renderWithProviders(<TreeNode path="/folder1/" defaultOpen={false} />);
  72. const folder1 = await screen.findByText("folder1");
  73. expect(folder1).toBeInTheDocument();
  74. expect(screen.queryByText("file2.ts")).not.toBeInTheDocument();
  75. await userEvent.click(folder1);
  76. expect(getFilesSpy).toHaveBeenCalledWith("/folder1/");
  77. expect(folder1).toBeInTheDocument();
  78. expect(await screen.findByText("file2.ts")).toBeInTheDocument();
  79. });
  80. });