|
|
|
#!/usr/bin/env python
|
|
|
|
# -*- encoding: utf-8 -*-
|
|
|
|
|
|
|
|
import unittest
|
|
|
|
import json
|
|
|
|
|
|
|
|
from luncho import server
|
|
|
|
|
|
|
|
from luncho.server import User
|
|
|
|
|
|
|
|
|
|
|
|
class TestUsers(unittest.TestCase):
|
|
|
|
"""Test users request."""
|
|
|
|
|
|
|
|
def setUp(self):
|
|
|
|
# leave the database blank to make it in memory
|
|
|
|
server.app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite://'
|
|
|
|
server.app.config['TESTING'] = True
|
|
|
|
|
|
|
|
self.app = server.app.test_client()
|
|
|
|
server.db.create_all()
|
|
|
|
|
|
|
|
def tearDown(self):
|
|
|
|
server.db.drop_all(bind=None)
|
|
|
|
|
|
|
|
def test_create_user(self):
|
|
|
|
"""Simple user creation."""
|
|
|
|
request = {'username': 'username',
|
|
|
|
'full_name': 'full name',
|
|
|
|
'password': 'hash'}
|
|
|
|
rv = self.app.put('/user/',
|
|
|
|
data=json.dumps(request),
|
|
|
|
content_type='application/json')
|
|
|
|
|
|
|
|
self.assertEqual(rv.status_code, 200)
|
|
|
|
self.assertEqual(json.loads(rv.data), {'status': 'OK'})
|
|
|
|
|
|
|
|
# db check
|
|
|
|
self.assertIsNotNone(User.query.filter_by(username='username').first())
|
|
|
|
|
|
|
|
def test_duplicate_user(self):
|
|
|
|
"""Check the status for trying to create a user that it is already
|
|
|
|
in the database."""
|
|
|
|
self.test_create_user() # create the first user
|
|
|
|
|
|
|
|
# now duplicate
|
|
|
|
request = {'username': 'username',
|
|
|
|
'full_name': 'full name',
|
|
|
|
'password': 'hash'}
|
|
|
|
rv = self.app.put('/user/',
|
|
|
|
data=json.dumps(request),
|
|
|
|
content_type='application/json')
|
|
|
|
|
|
|
|
expected = {"status": "ERROR",
|
|
|
|
"error": "username already exists"}
|
|
|
|
|
|
|
|
self.assertEqual(rv.status_code, 409)
|
|
|
|
self.assertEqual(json.loads(rv.data), expected)
|
|
|
|
|
|
|
|
def test_no_json(self):
|
|
|
|
"""Check the status when doing a request that it's not JSON."""
|
|
|
|
rv = self.app.put('/user/',
|
|
|
|
data='',
|
|
|
|
content_type='text/html')
|
|
|
|
|
|
|
|
expected = {"error": "Request MUST be in JSON format",
|
|
|
|
"status": "ERROR"}
|
|
|
|
self.assertEqual(rv.status_code, 400)
|
|
|
|
self.assertEqual(json.loads(rv.data), expected)
|
|
|
|
|
|
|
|
def test_missing_fields(self):
|
|
|
|
request = {'password': 'hash'}
|
|
|
|
rv = self.app.put('/user/',
|
|
|
|
data=json.dumps(request),
|
|
|
|
content_type='application/json')
|
|
|
|
|
|
|
|
resp = {'error': 'Missing fields: username, full_name',
|
|
|
|
'status': 'ERROR'}
|
|
|
|
self.assertEqual(rv.status_code, 400)
|
|
|
|
self.assertEqual(json.loads(rv.data), resp)
|
|
|
|
|
|
|
|
if __name__ == '__main__':
|
|
|
|
unittest.main()
|