OpenHands/frontend/__tests__/utils/toast-duration.test.ts

54 lines
2.1 KiB
TypeScript

import { describe, it, expect } from "vitest";
import { calculateToastDuration } from "#/utils/toast-duration";
describe("calculateToastDuration", () => {
it("should return minimum duration for short messages", () => {
const shortMessage = "OK";
const duration = calculateToastDuration(shortMessage, 5000);
expect(duration).toBe(5000);
});
it("should return minimum duration for messages that calculate below minimum", () => {
const shortMessage = "Settings saved";
const duration = calculateToastDuration(shortMessage, 5000);
expect(duration).toBe(5000);
});
it("should calculate longer duration for long messages", () => {
const longMessage =
"Settings saved. For old conversations, you will need to stop and restart the conversation to see the changes.";
const duration = calculateToastDuration(longMessage, 5000);
expect(duration).toBeGreaterThan(5000);
expect(duration).toBeLessThanOrEqual(10000);
});
it("should respect maximum duration cap", () => {
const veryLongMessage = "A".repeat(10000); // Very long message
const duration = calculateToastDuration(veryLongMessage, 5000, 10000);
expect(duration).toBe(10000);
});
it("should use custom minimum and maximum durations", () => {
const message = "Test message";
const customMin = 3000;
const customMax = 8000;
const duration = calculateToastDuration(message, customMin, customMax);
expect(duration).toBeGreaterThanOrEqual(customMin);
expect(duration).toBeLessThanOrEqual(customMax);
});
it("should calculate duration based on reading speed", () => {
// Test with a message that should take exactly the calculated time
// At 200 WPM (1000 chars/min), 60 chars should take 3.6 seconds
// With 1.5x buffer, that's 5.4 seconds
const message = "This is a test message that contains exactly sixty chars.";
expect(message.length).toBe(57); // Close to 60 chars
const duration = calculateToastDuration(message, 0, 20000); // No min/max constraints
// Should be around 5.4 seconds (5400ms) for 57 characters
expect(duration).toBeGreaterThan(5000);
expect(duration).toBeLessThan(6000);
});
});