Kay Framework でログイン必須のビューをテストする方法

Kay Framework に同梱されている werkzeug の Client クラスを使えば、ビューの単体テストができます。ただし万能ではなく、login_required デコレータがついたログイン必須のビューはテストできません。仕方ないので、テストしたい処理をログイン不要なメソッドに切り出したりして、今まで対処していました。

Kay 本体のテストコードを眺めていると、kay.utils.test に Client クラスがあることを発見。werkzueg の Client を拡張し、ログインとログアウトをエミュレートするメソッドが追加されているではないですか!これを使えばログイン必須のビューをテストできます。

from google.appengine.ext import db
from werkzeug import BaseResponse
from kay.app import get_application
from kay.ext.testutils.gae_test_base import GAETestBase
from kay.utils.test import Client
from core.models import Task

class TaskViewTest(GAETestBase):
    CLEANUP_USED_KIND = True

    def setUp(self):
        app = get_application()
        self.client = Client(app, BaseResponse)

    def tearDown(self):
        # テストメソッドが終わるたびにログアウトする
        self.client.test_logout()

    def test_create(self):
        # ログイン必須のビューをテストするために
        # ログインする
        self.client.test_login(email='test@example.com')

        data = {
            "name": "foo"
        }
        self.client.post('/', data=data)

        actual = Task.all().get()
        self.assertEquals("foo", actual.name)

ログイン必須のビューまでテストできるなんて、Kay 無敵すぎる。