feat(game-ui): add action feedback layer
This commit is contained in:
@@ -0,0 +1,56 @@
|
||||
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);
|
||||
});
|
||||
Reference in New Issue
Block a user