Skip to content

テストスイート導入 + CI(swift test を回せるようにする) #4

Description

@yancya

全体ロードマップ: https://github.com/yancya/reminder-cli/issues/3(P2-3)

背景

本ツールは日常運用(自動化・reminder-server のバックエンド)に組み込まれており後方互換が最重要だが、現状テストが1本もない。今後の機能追加(--format json の変更系対応、lists サブコマンド等)の前に、リグレッション検知の足場を作る。開発は TDD(t_wada 流)で進める方針。

現状ポインタ

  • Package.swift — test target なし
  • Sources/reminder-cli/OutputFormatter.swift(377行)— text/json/pretty-json/yaml の整形。ReminderOutput(Encodable な素の struct)を受けるので EventKit 非依存でテスト可能
  • Sources/reminder-cli/ReminderStore.swift(706行)— EventKit 依存が集中。日付パース等の純粋ロジックが混在している場合は切り出し対象
  • Sources/reminder-cli/reminder_cli.swift(382行)— ArgumentParser のコマンド定義

ゴールと受け入れ条件

  • swift test がローカルで緑
  • GitHub Actions(macos-latest)で push/PR ごとに swift build + swift test が回る
  • EventKit 非依存ロジックにユニットテストがある:
    • OutputFormatter: 各フォーマット(text / json / pretty-json / yaml)の出力スナップショット的検証(優先度絵文字 ‼️/❗/❕、期限表示、alarms 含む)
    • 日付文字列パース(YYYY-MM-DD / YYYY-MM-DD HH:MM / 不正入力)
    • list のソート比較ロジック(due-date / priority / title / created / status)
  • 既存コマンドの挙動・出力は一切変えない(テスト追加のためのリファクタは内部のみ。日付パースやソート比較が EventKit 型に癒着している場合は純粋関数として切り出してよい)
  • README の Development セクションに swift test を追記

手順

  • Package.swift.testTarget(name: "reminder-cliTests", dependencies: ["reminder-cli"]) を追加(executable target のままテストできない場合は core ロジックを library target に分離)
  • Tests/reminder-cliTests/ を作成し、まず OutputFormatter の JSON 出力テストを1本書いて赤→緑を確認
  • 日付パース・ソートのテストを追加(必要なら純粋関数へ切り出し)
  • .github/workflows/ci.yml を新設(release.yml とは別。macos-latest, swift build + swift test)
  • README 更新

備考

EventKit 実機アクセス(ReminderStore の CRUD)は CI で権限が取れないため対象外。将来 EKEventStore を protocol で抽象化して fake を注す案は、必要になったら別 issue に切る。

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions