Skip to content

メモ機能のユニットテスト・ウィジェットテストを追加する #39

Description

@haino357

概要

#15 で追加したメモ機能(BookMemo)および関連コンポーネントのテストを作成する。現在テストは基本的なWidgetテスト(test/widget_test.dart)のみで、モデル・リポジトリ・画面のテストが存在しない。

背景・動機

メモ機能は6種類のメモタイプ、DBマイグレーション、CRUD操作、タイプ別グルーピング表示など多くのロジックを含んでおり、リグレッション防止のためにテストが必要。

テスト対象

1. モデルのユニットテスト

ファイル: test/models/book_memo_test.dart

  • MemoTypevalue/fromValueの双方向変換
  • MemoTypedisplayName/iconが全タイプで正しい値を返す
  • BookMemo.fromMapで正しくデシリアライズされる
  • BookMemo.toMapで正しくシリアライズされる
  • BookMemo.copyWithでフィールドが正しく更新される
  • BookMemo.copyWithでsentinelパターンによるnullクリアが動作する
  • isCompletedintbool変換が正しい(0=false, 1=true, null=null)
  • BookMemoの等価性比較(==hashCode

ファイル: test/models/book_test.dart

  • BookモデルのmemoフィールドがfromMap/toMap/copyWithで正しく動作する

2. リポジトリのユニットテスト

ファイル: test/repositories/book_memo_repository_test.dart

  • addMemoで正しいフィールドがDBに挿入される
  • getMemosByBookIdで指定した本のメモのみ取得される
  • updateMemoupdatedAtが自動更新される
  • deleteMemoで対象メモが削除される
  • deleteMemosByBookIdで対象本の全メモが削除される

3. Providerのテスト

ファイル: test/providers/book_memo_provider_test.dart

  • bookMemosProviderが指定bookIdのメモリストを返す
  • メモ追加後にinvalidateで最新データが取得される

4. ウィジェットテスト

ファイル: test/screens/memo_form_screen_test.dart

  • メモタイプの選択Chipが全6種類表示される
  • タイプ変更でページ番号・セクション名フィールドの表示/非表示が切り替わる
  • 本文未入力でバリデーションエラーが表示される
  • 編集モード時に既存データがフォームにプリセットされる

ファイル: test/screens/book_detail_memo_section_test.dart

  • メモがない場合「メモはまだありません」が表示される
  • メモがタイプ別にグルーピング表示される
  • TODOメモにチェックボックスが表示される
  • ページ番号付きメモに「p.XX」プレフィックスが表示される

5. DBマイグレーションテスト

ファイル: test/database/database_migration_test.dart

  • v3→v4マイグレーションでbook_memosテーブルが作成される
  • 既存のbook.memoデータがbook_memosテーブルに移行される(type=note)
  • memoが空文字・nullの場合は移行されない

テスト環境の準備

  • sqflite_common_ffiパッケージの導入(テスト用SQLiteバックエンド)
  • テスト用のDatabaseHelper初期化ヘルパーの作成
  • Riverpod Providerのオーバーライド用テストユーティリティの作成

優先度

高(メモ機能のPRマージ前または直後に実施)

関連Issue

Metadata

Metadata

Assignees

Labels

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions