You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
83 lines
2.6 KiB
83 lines
2.6 KiB
#!/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()
|
|
|