aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/client/sync/manager.test.ts
diff options
context:
space:
mode:
authornsfisis <nsfisis@gmail.com>2025-12-07 23:34:03 +0900
committernsfisis <nsfisis@gmail.com>2025-12-07 23:34:03 +0900
commit0c042ac89fc0822fcbe09c48702857faa5494ae1 (patch)
treeea1f1d180f747613343040d441a07f92b2760840 /src/client/sync/manager.test.ts
parentae5a0bb97fbf013417a6962f7e077f0408b2a951 (diff)
downloadkioku-0c042ac89fc0822fcbe09c48702857faa5494ae1.tar.gz
kioku-0c042ac89fc0822fcbe09c48702857faa5494ae1.tar.zst
kioku-0c042ac89fc0822fcbe09c48702857faa5494ae1.zip
feat(client): add sync status indicator component
Add SyncStatusIndicator component to display current sync state in the UI header. The component shows online/offline status, syncing progress, pending changes count, and sync errors. - Create SyncProvider context to wrap SyncManager for React components - Add SyncStatusIndicator component with visual status indicators - Integrate indicator into HomePage header - Add comprehensive tests for SyncStatusIndicator and SyncProvider - Update existing tests to include SyncProvider wrapper 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Diffstat (limited to 'src/client/sync/manager.test.ts')
-rw-r--r--src/client/sync/manager.test.ts23
1 files changed, 10 insertions, 13 deletions
diff --git a/src/client/sync/manager.test.ts b/src/client/sync/manager.test.ts
index 1e53bd4..96fb97d 100644
--- a/src/client/sync/manager.test.ts
+++ b/src/client/sync/manager.test.ts
@@ -8,8 +8,8 @@ import {
describe,
expect,
it,
- vi,
type Mock,
+ vi,
} from "vitest";
import { db } from "../db/index";
import { localDeckRepository } from "../db/repositories";
@@ -42,9 +42,8 @@ describe("SyncManager", () => {
/**
* Create a pending deck in the database that will need to be synced
*/
- async function createPendingDeck(id = "deck-1") {
+ async function createPendingDeck() {
return localDeckRepository.create({
- id,
userId: "user-1",
name: "Test Deck",
description: null,
@@ -169,12 +168,10 @@ describe("SyncManager", () => {
manager.start();
// Should only be called once for each event type
- expect(
- addSpy.mock.calls.filter((c) => c[0] === "online").length,
- ).toBe(1);
- expect(
- addSpy.mock.calls.filter((c) => c[0] === "offline").length,
- ).toBe(1);
+ expect(addSpy.mock.calls.filter((c) => c[0] === "online").length).toBe(1);
+ expect(addSpy.mock.calls.filter((c) => c[0] === "offline").length).toBe(
+ 1,
+ );
manager.stop();
addSpy.mockRestore();
@@ -354,20 +351,20 @@ describe("SyncManager", () => {
it("should resolve conflicts when present", async () => {
// Create pending data so pushToServer will be called
- await createPendingDeck();
+ const deck = await createPendingDeck();
const pushResult: SyncPushResult = {
- decks: [{ id: "deck-1", syncVersion: 1 }],
+ decks: [{ id: deck.id, syncVersion: 1 }],
cards: [],
reviewLogs: [],
- conflicts: { decks: ["deck-1"], cards: [] },
+ conflicts: { decks: [deck.id], cards: [] },
};
pushToServer.mockResolvedValue(pushResult);
const pullResult: SyncPullResult = {
decks: [
{
- id: "deck-1",
+ id: deck.id,
userId: "user-1",
name: "Server Deck",
description: null,