概要
#15 で追加したメモ機能(BookMemo)および関連コンポーネントのテストを作成する。現在テストは基本的なWidgetテスト(test/widget_test.dart)のみで、モデル・リポジトリ・画面のテストが存在しない。
背景・動機
メモ機能は6種類のメモタイプ、DBマイグレーション、CRUD操作、タイプ別グルーピング表示など多くのロジックを含んでおり、リグレッション防止のためにテストが必要。
テスト対象
1. モデルのユニットテスト
ファイル: test/models/book_memo_test.dart
ファイル: test/models/book_test.dart
2. リポジトリのユニットテスト
ファイル: test/repositories/book_memo_repository_test.dart
3. Providerのテスト
ファイル: test/providers/book_memo_provider_test.dart
4. ウィジェットテスト
ファイル: test/screens/memo_form_screen_test.dart
ファイル: test/screens/book_detail_memo_section_test.dart
5. DBマイグレーションテスト
ファイル: test/database/database_migration_test.dart
テスト環境の準備
優先度
高(メモ機能のPRマージ前または直後に実施)
関連Issue
概要
#15 で追加したメモ機能(BookMemo)および関連コンポーネントのテストを作成する。現在テストは基本的なWidgetテスト(
test/widget_test.dart)のみで、モデル・リポジトリ・画面のテストが存在しない。背景・動機
メモ機能は6種類のメモタイプ、DBマイグレーション、CRUD操作、タイプ別グルーピング表示など多くのロジックを含んでおり、リグレッション防止のためにテストが必要。
テスト対象
1. モデルのユニットテスト
ファイル:
test/models/book_memo_test.dartMemoTypeのvalue/fromValueの双方向変換MemoTypeのdisplayName/iconが全タイプで正しい値を返すBookMemo.fromMapで正しくデシリアライズされるBookMemo.toMapで正しくシリアライズされるBookMemo.copyWithでフィールドが正しく更新されるBookMemo.copyWithでsentinelパターンによるnullクリアが動作するisCompletedのint⇔bool変換が正しい(0=false, 1=true, null=null)BookMemoの等価性比較(==とhashCode)ファイル:
test/models/book_test.dartBookモデルのmemoフィールドがfromMap/toMap/copyWithで正しく動作する2. リポジトリのユニットテスト
ファイル:
test/repositories/book_memo_repository_test.dartaddMemoで正しいフィールドがDBに挿入されるgetMemosByBookIdで指定した本のメモのみ取得されるupdateMemoでupdatedAtが自動更新されるdeleteMemoで対象メモが削除されるdeleteMemosByBookIdで対象本の全メモが削除される3. Providerのテスト
ファイル:
test/providers/book_memo_provider_test.dartbookMemosProviderが指定bookIdのメモリストを返すinvalidateで最新データが取得される4. ウィジェットテスト
ファイル:
test/screens/memo_form_screen_test.dartファイル:
test/screens/book_detail_memo_section_test.dart5. DBマイグレーションテスト
ファイル:
test/database/database_migration_test.dartbook_memosテーブルが作成されるbook.memoデータがbook_memosテーブルに移行される(type=note)memoが空文字・nullの場合は移行されないテスト環境の準備
sqflite_common_ffiパッケージの導入(テスト用SQLiteバックエンド)優先度
高(メモ機能のPRマージ前または直後に実施)
関連Issue