1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
|
/**
* @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: "<?php echo 1;",
initialCode: "",
onCodeChange: () => {},
onCodeSubmit: () => {},
isFinished: false,
};
describe("GolfPlayAppGaming submission history", () => {
test("shows placeholder row when no submissions", () => {
const store = createTestStore();
render(
<Provider store={store}>
<GolfPlayAppGaming {...defaultProps} submissions={[]} />
</Provider>,
);
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: "<?php echo 1;",
code_size: 7,
created_at: 1740000000,
},
{
submission_id: 2,
game_id: 1,
status: "wrong_answer" as const,
code: "<?php echo 2;",
code_size: 10,
created_at: 1740000060,
},
];
render(
<Provider store={store}>
<GolfPlayAppGaming {...defaultProps} submissions={submissions} />
</Provider>,
);
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(
<Provider store={store}>
<GolfPlayAppGaming {...defaultProps} submissions={[]} />
</Provider>,
);
expect(screen.getByText("ステータス")).toBeDefined();
expect(screen.getByText("スコア")).toBeDefined();
expect(screen.getByText("提出時刻")).toBeDefined();
expect(screen.getByText("コード")).toBeDefined();
});
});
|