67 lines
1.7 KiB
JavaScript
67 lines
1.7 KiB
JavaScript
/**
|
|
* Tests for ScrollableContainer component
|
|
*/
|
|
|
|
const React = require("react");
|
|
|
|
describe("ScrollableContainer Component", () => {
|
|
test("should have proper component structure", () => {
|
|
const ScrollableContainer = require("../../../src/tui/components/common/ScrollableContainer.jsx");
|
|
|
|
expect(typeof ScrollableContainer).toBe("function");
|
|
});
|
|
|
|
test("should handle items array prop", () => {
|
|
const testItems = [
|
|
{ id: 1, name: "Item 1" },
|
|
{ id: 2, name: "Item 2" },
|
|
{ id: 3, name: "Item 3" },
|
|
];
|
|
|
|
expect(Array.isArray(testItems)).toBe(true);
|
|
expect(testItems.length).toBe(3);
|
|
});
|
|
|
|
test("should handle renderItem function prop", () => {
|
|
const renderItem = (item, index) => `${index}: ${item.name}`;
|
|
|
|
expect(typeof renderItem).toBe("function");
|
|
|
|
const testItem = { name: "Test Item" };
|
|
const result = renderItem(testItem, 0);
|
|
|
|
expect(result).toBe("0: Test Item");
|
|
});
|
|
|
|
test("should handle itemHeight prop", () => {
|
|
const itemHeights = [1, 2, 3, 4];
|
|
|
|
itemHeights.forEach((height) => {
|
|
expect(typeof height).toBe("number");
|
|
expect(height).toBeGreaterThan(0);
|
|
});
|
|
});
|
|
|
|
test("should handle showScrollIndicators prop", () => {
|
|
const showScrollIndicatorsOptions = [true, false];
|
|
|
|
showScrollIndicatorsOptions.forEach((option) => {
|
|
expect(typeof option).toBe("boolean");
|
|
});
|
|
});
|
|
|
|
test("should calculate scroll positions correctly", () => {
|
|
const totalItems = 100;
|
|
const visibleItems = 10;
|
|
const scrollPosition = 5;
|
|
|
|
const startIndex = scrollPosition;
|
|
const endIndex = Math.min(startIndex + visibleItems, totalItems);
|
|
const maxScroll = Math.max(0, totalItems - visibleItems);
|
|
|
|
expect(startIndex).toBe(5);
|
|
expect(endIndex).toBe(15);
|
|
expect(maxScroll).toBe(90);
|
|
});
|
|
});
|