mirror of
https://github.com/pupperpowell/bibdle.git
synced 2026-04-05 17:33:31 -04:00
146 tests covering evaluateGuess, grading, ordinals, bible data integrity, section counts, share text generation, and stat string helpers. Also fixes toOrdinal for 111-113 (was using >= 11 && <= 13 instead of % 100 check). Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
130 lines
3.6 KiB
TypeScript
130 lines
3.6 KiB
TypeScript
import { describe, test, expect } from "bun:test";
|
|
import {
|
|
formatDate,
|
|
getGradeColor,
|
|
getPerformanceMessage,
|
|
getStreakMessage,
|
|
} from "$lib/utils/stats";
|
|
|
|
describe("getGradeColor", () => {
|
|
test("S++ → purple", () => {
|
|
expect(getGradeColor("S++")).toBe("text-purple-600 bg-purple-100");
|
|
});
|
|
|
|
test("S+ → yellow", () => {
|
|
expect(getGradeColor("S+")).toBe("text-yellow-600 bg-yellow-100");
|
|
});
|
|
|
|
test("A+ → green", () => {
|
|
expect(getGradeColor("A+")).toBe("text-green-600 bg-green-100");
|
|
});
|
|
|
|
test("A → light green", () => {
|
|
expect(getGradeColor("A")).toBe("text-green-500 bg-green-50");
|
|
});
|
|
|
|
test("B+ → blue", () => {
|
|
expect(getGradeColor("B+")).toBe("text-blue-600 bg-blue-100");
|
|
});
|
|
|
|
test("B → light blue", () => {
|
|
expect(getGradeColor("B")).toBe("text-blue-500 bg-blue-50");
|
|
});
|
|
|
|
test("C+ → orange", () => {
|
|
expect(getGradeColor("C+")).toBe("text-orange-600 bg-orange-100");
|
|
});
|
|
|
|
test("C → red", () => {
|
|
expect(getGradeColor("C")).toBe("text-red-600 bg-red-100");
|
|
});
|
|
|
|
test("unknown grade → gray fallback", () => {
|
|
expect(getGradeColor("X")).toBe("text-gray-600 bg-gray-100");
|
|
expect(getGradeColor("")).toBe("text-gray-600 bg-gray-100");
|
|
});
|
|
});
|
|
|
|
describe("formatDate", () => {
|
|
test("formats a mid-year date", () => {
|
|
expect(formatDate("2024-07-04")).toBe("Jul 4");
|
|
});
|
|
|
|
test("formats a January date", () => {
|
|
expect(formatDate("2024-01-15")).toBe("Jan 15");
|
|
});
|
|
|
|
test("formats the last day of the year", () => {
|
|
expect(formatDate("2023-12-31")).toBe("Dec 31");
|
|
});
|
|
|
|
test("formats a single-digit day without leading zero", () => {
|
|
expect(formatDate("2025-03-01")).toBe("Mar 1");
|
|
});
|
|
|
|
test("year in input does not appear in output", () => {
|
|
expect(formatDate("2024-06-20")).not.toContain("2024");
|
|
});
|
|
});
|
|
|
|
describe("getStreakMessage", () => {
|
|
test("0 → prompt to start", () => {
|
|
expect(getStreakMessage(0)).toBe("Start your streak today!");
|
|
});
|
|
|
|
test("1 → encouragement", () => {
|
|
expect(getStreakMessage(1)).toBe("Keep it going!");
|
|
});
|
|
|
|
test("2 → X days strong", () => {
|
|
expect(getStreakMessage(2)).toBe("2 days strong!");
|
|
});
|
|
|
|
test("6 → X days strong (upper bound of that range)", () => {
|
|
expect(getStreakMessage(6)).toBe("6 days strong!");
|
|
});
|
|
|
|
test("7 → week streak message", () => {
|
|
expect(getStreakMessage(7)).toBe("7 day streak - amazing!");
|
|
});
|
|
|
|
test("29 → upper bound of week-streak range", () => {
|
|
expect(getStreakMessage(29)).toBe("29 day streak - amazing!");
|
|
});
|
|
|
|
test("30 → unstoppable message", () => {
|
|
expect(getStreakMessage(30)).toBe("30 days - you're unstoppable!");
|
|
});
|
|
|
|
test("100 → unstoppable message", () => {
|
|
expect(getStreakMessage(100)).toBe("100 days - you're unstoppable!");
|
|
});
|
|
});
|
|
|
|
describe("getPerformanceMessage", () => {
|
|
test("≤ 2 guesses → exceptional", () => {
|
|
expect(getPerformanceMessage(1)).toBe("Exceptional performance!");
|
|
expect(getPerformanceMessage(2)).toBe("Exceptional performance!");
|
|
});
|
|
|
|
test("≤ 4 guesses → great", () => {
|
|
expect(getPerformanceMessage(2.1)).toBe("Great performance!");
|
|
expect(getPerformanceMessage(4)).toBe("Great performance!");
|
|
});
|
|
|
|
test("≤ 6 guesses → good", () => {
|
|
expect(getPerformanceMessage(4.1)).toBe("Good performance!");
|
|
expect(getPerformanceMessage(6)).toBe("Good performance!");
|
|
});
|
|
|
|
test("≤ 8 guesses → room for improvement", () => {
|
|
expect(getPerformanceMessage(6.1)).toBe("Room for improvement!");
|
|
expect(getPerformanceMessage(8)).toBe("Room for improvement!");
|
|
});
|
|
|
|
test("> 8 guesses → keep practicing", () => {
|
|
expect(getPerformanceMessage(8.1)).toBe("Keep practicing!");
|
|
expect(getPerformanceMessage(20)).toBe("Keep practicing!");
|
|
});
|
|
});
|