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