Skip to content

Instantly share code, notes, and snippets.

@imtapps
Created August 29, 2012 16:57
Show Gist options
  • Save imtapps/3515600 to your computer and use it in GitHub Desktop.
Save imtapps/3515600 to your computer and use it in GitHub Desktop.
REST Kata
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