Files
core2026/app/game-frontend/test/gameFeedback.test.ts
T

57 lines
1.9 KiB
TypeScript

import assert from 'node:assert/strict';
import test from 'node:test';
import { createGameFeedbackStore } from '../src/composables/useGameFeedback.ts';
void test('keeps four recent toasts and replaces an exact duplicate', () => {
const feedback = createGameFeedbackStore();
feedback.info('첫 번째', 0);
feedback.success('두 번째', 0);
feedback.error('세 번째', 0);
feedback.info('네 번째', 0);
feedback.success('다섯 번째', 0);
assert.deepEqual(
feedback.toasts.value.map((toast) => toast.message),
['두 번째', '세 번째', '네 번째', '다섯 번째']
);
feedback.error('세 번째', 0);
assert.deepEqual(
feedback.toasts.value.map((toast) => `${toast.kind}:${toast.message}`),
['success:두 번째', 'info:네 번째', 'success:다섯 번째', 'error:세 번째']
);
});
void test('queues acknowledgement dialogs and resolves each request in order', async () => {
const feedback = createGameFeedbackStore();
let firstResolved = false;
let secondResolved = false;
const first = feedback
.showDialog({ kind: 'error', title: '첫 알림', message: '먼저 확인' })
.then(() => (firstResolved = true));
const second = feedback
.showDialog({ kind: 'success', message: '다음 확인', acknowledgeLabel: '계속' })
.then(() => (secondResolved = true));
assert.equal(feedback.dialog.value?.title, '첫 알림');
feedback.acknowledgeDialog();
await first;
assert.equal(firstResolved, true);
assert.equal(secondResolved, false);
assert.deepEqual(feedback.dialog.value, {
id: 2,
kind: 'success',
title: '완료',
message: '다음 확인',
acknowledgeLabel: '계속',
});
feedback.acknowledgeDialog();
await second;
assert.equal(secondResolved, true);
assert.equal(feedback.dialog.value, null);
});