Play frameworkのdownのテストをしたい

Gitflowのような開発フローにおいて、ブランチでそれぞれの開発者が、それぞれ開発を進めると
色々なところでDBマイグレーションのためのSQLが追加され、マージするのが割と面倒なんですが、
それはまぁ頑張って手動マージするとして、もっと問題なのが、
EvolutionのDOWNをテストする手段が用意されていない、ということです。

僕が実際に遭遇したケースは、UPで追加した特定のカラムに
開発中に値が挿入され、それが原因でDOWNに書かれたALTER TABLE DROP COLUMN
がエラーを出していました。DOWNスクリプトに、値を初期化する記述が
抜けていたのです。

この問題をCIで発見するために、上司のアドバイスのもとEvolution Downを
テストすることにしました。

※下記のコードはテスト用にDBが初期化されていて
(テスト用のデータが入っていて)、PlayFrameworkにバンドルされている
DBPluginの利用が前提です。(flyway等を利用していても、テーブル名を変えれば
実現できるとは思いますが検証していません。)

ポイントとしてはplayが提供しているEvolutionのAPIでは、指定のリビジョンまでDownするだけのものが
提供されていないので、直接SQLでplay_evolutionsテーブルのハッシュを編集して壊します。

その状態でEvolutions.applyForを行うことによって、Evolutionをハッシュが
壊れていない部分までDownして、その後に最新までUPします。

これでEvolutionのDownが正常に実行され、その後Upもされたことが確認できます。

注意するべき点としては、テスト用データです。
これにちゃんとDownを検証できるデータが入っていないと意味がありません。
(削除される対象のカラムのデータが空だったりすると、僕の遭遇したケースでは意味がなくなる)

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です