/**
* @vitest-environment jsdom
*/
import { cleanup, render, screen } from "@testing-library/react";
import { createStore, Provider } from "jotai";
import { afterEach, describe, expect, test } from "vitest";
import {
setCurrentTimestampAtom,
setDurationSecondsAtom,
setGameStartedAtAtom,
setLatestGameStateAtom,
} from "../../states/play";
import GolfPlayAppGaming from "./GolfPlayAppGaming";
afterEach(() => {
cleanup();
});
function createTestStore() {
const store = createStore();
const now = Math.floor(Date.now() / 1000);
store.set(setCurrentTimestampAtom);
store.set(setDurationSecondsAtom, 600);
store.set(setGameStartedAtAtom, now - 60);
store.set(setLatestGameStateAtom, {
status: "none",
code: "",
score: null,
best_score_submitted_at: null,
});
return store;
}
const defaultProps = {
gameDisplayName: "Test Game",
playerProfile: {
id: 1,
displayName: "Test Player",
iconPath: null,
},
problemTitle: "Test Problem",
problemDescription: "Description",
problemLanguage: "php" as const,
sampleCode: " {},
onCodeSubmit: () => {},
isFinished: false,
};
describe("GolfPlayAppGaming submission history", () => {
test("shows placeholder row when no submissions", () => {
const store = createTestStore();
render(
,
);
expect(screen.getByText("提出待ち")).toBeDefined();
const dashes = screen.getAllByText("-");
expect(dashes.length).toBe(3);
});
test("renders submission rows with status and code size", () => {
const store = createTestStore();
const submissions = [
{
submission_id: 1,
game_id: 1,
status: "success" as const,
code: "
,
);
expect(screen.getByText("成功")).toBeDefined();
expect(screen.getByText("テスト失敗")).toBeDefined();
expect(screen.getByText("7")).toBeDefined();
expect(screen.getByText("10")).toBeDefined();
});
test("renders table headers", () => {
const store = createTestStore();
render(
,
);
expect(screen.getByText("ステータス")).toBeDefined();
expect(screen.getByText("スコア")).toBeDefined();
expect(screen.getByText("提出時刻")).toBeDefined();
expect(screen.getByText("コード")).toBeDefined();
});
});