Pylons+memcacheDB...編集機能のテスト

忘れぬうちにテスト記述。

  • GETメソッドでsave()できないこと
  • 存在しないデータのidでsave()できないこと
  • PhoneBook以外の型をsave()できないこと
  • 不正なフォーム入力の場合save()できないこと
  • 上記以外の場合はsave()できること

を確認すればいいでしょ。

phonebook/tests/functional/test_phone.py

    #tests for save()
    def test_save_prohibit_get(self):
        """Tests to ensure that GET requests are prohibited"""
        response = self.app.get(
            url = url_for(controller = 'phone', action = 'save', id = self._id),
            params = {'mobile_number': u'000-0000-0000',
                      'name': u'name name',
                      'address': u'the address',
                      'home_number': u'111-1111-1111',
                      'dob': u'2000/01/01'},
            status = 405)

    def test_save_404_invalid_id(self):
        """Tests that a 404 response is returened if no ID is specified
        or if that ID doesn't exist"""
        response = self.app.post(
            url = url_for(controller = 'phone', action = 'save', id = ''),
            params = {'mobile_number': u'000-0000-0000',
                      'name': u'name name',
                      'address': u'the address',
                      'home_number': u'111-1111-1111',
                      'dob': u'2000/01/01'},
            status = 404)
        response = self.app.post(
            url = url_for(controller = 'phone', action = 'save', id = '2000'),
            params = {'mobile_number': u'000-0000-0000',
                      'name': u'name name',
                      'address': u'the address',
                      'home_number': u'111-1111-1111',
                      'dob': u'2000/01/01'},
            status = 404)


    def test_save_invalid_class_data(self):
        """Tests that a 404 response is returned if it tried to save non
        Phone class data"""
        class Hoge():
            pass

        mc = memcache.Client([config['app_conf']['memcachedb.servers']], debug = 0)
        h = Hoge()

        p = Pickler()
        ser = p.flatten(h)


        key = uuid.uuid4().hex
        mc.set(key, ser)

        response = self.app.post(
            url = url_for(controller = 'phone', action = 'save', id = key),
            params = {'mobile_number': u'000-0000-0000',
                      'name': u'name name',
                      'address': u'the address',
                      'home_number': u'111-1111-1111',
                      'dob': u'2000/01/01'},
            status = 404)


    def test_save_invalid_form_data(self):
        """Tests that invalid data results in the form being returned with
        error messages"""
        response = self.app.post(
            url = url_for(controller = 'phone', action = 'save', id = self._id),
            params = {'mobile_number': u'000-0000-0000',
                      'name': u'',
                      'address': u'',
                      'home_number': u'',
                      'dob': u'2000/01/01'},
            )
        assert 'Please enter a value' in response


    def test_save(self):
        """Tests that valid data is saved to the database, that the response
        redirects to the view() action that a flash message is set in the session"""
        response = self.app.post(
            url = url_for(controller = 'phone', action = 'save', id = self._id),
            params = {'mobile_number': u'Updated',
                      'name': u'Updated',
                      'address': u'Updated',
                      'home_number': u'Updated',
                      'dob': u'2000/01/01'},
            )

        mc = memcache.Client([config['app_conf']['memcachedb.servers']], debug = 0)
        ser = mc.get(self._id)

        u = Unpickler()
        c = u.restore(ser)

        assert c.__class__.__name__ == 'Phone'
        assert c.mobile_number == u'Updated'
        assert c.name == u'Updated'
        assert c.address == u'Updated'
        assert c.home_number == u'Updated'
        assert c.dob == u'2000/01/01'

        assert urlparse(response.response.location).path == url_for(
            controller = 'phone', action = 'view', id = self._id)
        assert response.status_int == 302
$ nosetests
.........
----------------------------------------------------------------------
Ran 9 tests in 1.610s

OK

Gitコミット先