Created
August 29, 2012 16:57
-
-
Save imtapps/3515600 to your computer and use it in GitHub Desktop.
REST Kata
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import unittest | |
from urllib import urlencode | |
from webob import Request | |
import json | |
END_POINT = 'http://localhost:8000/person/' | |
def create_user(name): | |
request = Request.blank(END_POINT) | |
request.method = 'POST' | |
request.body = 'name={}'.format(name) | |
return request.send() | |
def get_user(id): | |
return Request.blank('{}{}/'.format(END_POINT, id)).send() | |
def update_user(user_data): | |
request = Request.blank('{}{}/'.format(END_POINT, user_data['id'])) | |
request.method = 'PUT' | |
request.body = urlencode(user_data) | |
return request.send() | |
def delete_user(id): | |
request = Request.blank('{}{}/'.format(END_POINT, id)) | |
request.method = 'DELETE' | |
return request.send() | |
class RestfulPersonPostTests(unittest.TestCase): | |
def setUp(self): | |
self.response = create_user('Kyle') | |
def test_status_code_is_201_on_successful_post(self): | |
self.assertEqual(201, self.response.status_code) | |
def test_person_is_returned_as_json(self): | |
person = json.loads(self.response.body) | |
self.assertEqual('Kyle', person['name']) | |
self.assertIn('id', person) | |
class RestfulPersonGetTests(unittest.TestCase): | |
def setUp(self): | |
response = create_user('Carl') | |
self.user_id = json.loads(response.body)['id'] | |
self.response = get_user(self.user_id) | |
def test_status_code_is_200_on_successful_get(self): | |
self.assertEqual(200, self.response.status_code) | |
def test_person_is_returned_as_json(self): | |
person = json.loads(self.response.body) | |
self.assertEqual('Carl', person['name']) | |
self.assertEqual(self.user_id, person['id']) | |
class RestfulPersonPutTests(unittest.TestCase): | |
def setUp(self): | |
response = create_user('Steve') | |
self.user = json.loads(response.body) | |
self.user['name'] += ' Jobs' | |
self.response = update_user(self.user) | |
def test_status_code_is_200_on_successful_put(self): | |
self.assertEqual(200, self.response.status_code) | |
def test_person_is_returned_as_json_with_updates(self): | |
person = json.loads(self.response.body) | |
self.assertEqual('Steve Jobs', person['name']) | |
class RestfulPersonDeleteTests(unittest.TestCase): | |
def setUp(self): | |
response = create_user('Fred') | |
self.user = json.loads(response.body) | |
self.response = delete_user(self.user['id']) | |
def test_status_code_is_204_on_successful_delete(self): | |
self.assertEqual(204, self.response.status_code) | |
if __name__ == '__main__': | |
unittest.main() |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment