def test_add_user_inactive(self): add_user('test', '*****@*****.**', 'test') user = User.query.filter_by(email='*****@*****.**').first() #set user active to False user.active = True db.session.commit() with self.client: resp_login = self.client.post('/auth/login', data=json.dumps( dict(email='*****@*****.**', password='******')), content_type='application/json') response = self.client.post( '/users', data=json.dumps(dict(email='*****@*****.**', password='******')), content_type='application/json', headers=dict( Authorization='Bearer ' + json.loads(resp_login.data.decode())['auth_token'])) data = json.loads(response.data.decode()) self.assertTrue(data['status'] == 'error') self.assertTrue( data['message'] == 'Something went wrong. Please contact us.') self.assertTrue(response.status_code, 401)
def test_all_articles(self): '''Ensure get all articles correctly''' user_tab = add_user('tab', '*****@*****.**', 'test') user_shirting = add_user('shirting', '*****@*****.**', 'test') add_article('test', 'This is a test content', user_tab.id) add_article('test2', 'This is a another test content', user_shirting.id) with self.client: response = self.client.get('/articles') data = json.loads(response.data.decode()) # asserts self.assertEqual(response.status_code, 200) self.assertIn('success', data['status']) # 数据条数 self.assertEqual(len(data['data']['articles']), 2) # 返回是否包含created_at self.assertTrue('pub_at' in data['data']['articles'][0]) self.assertTrue('pub_at' in data['data']['articles'][1]) # 对应的article是否在返回数据中 self.assertTrue('test' in data['data']['articles'][0]['title']) self.assertIn('This is a test content', data['data']['articles'][0]['body']) self.assertTrue('test2' in data['data']['articles'][1]['title']) self.assertIn('This is a another test content', data['data']['articles'][1]['body'])
def test_add_user_duppicate_emial(self): add_user('test', '*****@*****.**', 'test') d_user = User(username='******', email='*****@*****.**', password='******') db.session.add(d_user) self.assertRaises(IntegrityError, db.session.commit)
def test_add_user_not_admin(self): add_user('test', '*****@*****.**', 'test') user = User.query.filter_by(email='*****@*****.**').first() db.session.commit() #user_login resp_login = self.client.post('/auth/login', data=json.dumps( dict(email='*****@*****.**', password='******')), content_type='application/json') #add_user with self.client: response = self.client.post( '/users', data=json.dumps( dict(username='******', email='*****@*****.**', password='******')), content_type='application/json', headers=dict( Authorization='Bearer ' + json.loads(resp_login.data.decode())['auth_token'])) data = json.loads(response.data.decode()) self.assertTrue(response.status_code, 401) self.assertTrue(data['status'] == 'error') self.assertTrue( data['message'] == 'You do not have permission to do that.')
def test_add_user_invalid_json_keys(self): '''Ensure error is thrown if the JSON object does not have username key''' add_user('test', '*****@*****.**', 'test') user = User.query.filter_by(email='*****@*****.**').first() user.admin = True db.session.commit() resp_login = self.client.post('/auth/login', data=json.dumps( dict(email='*****@*****.**', password='******')), content_type='application/json') with self.client: response = self.client.post( '/users', data=json.dumps(dict(email='*****@*****.**')), content_type='application/json', headers=dict( Authorization='Bearer ' + json.loads(resp_login.data.decode())['auth_token'])) data = json.loads(response.data.decode()) self.assertEqual(response.status_code, 400) self.assertIn('Invalid payload.', data['message']) self.assertIn('fail', data['status'])
def test_user_register_duplicate_username(self): add_user('test', '*****@*****.**', 'test') with self.client: response = self.client.post('/auth/register', data=json.dumps( dict(username='******', email='*****@*****.**', password='******')), content_type='application/json') data = json.loads(response.data.decode()) self.assertTrue(data['status'] == 'error') self.assertTrue( data['message'] == 'Sorry, That user already exits.') self.assertTrue(response.status_code == 400)
def test_add_user(self): user = add_user('test', '*****@*****.**', 'test1') self.assertTrue(user.id) self.assertEqual(user.username, 'test') self.assertEqual(user.email, '*****@*****.**') self.assertTrue(user.password) self.assertFalse(user.active) self.assertTrue(user.created_at)
def test_all_users(self): '''Ensure get all users behaviors correctly''' created = datetime.datetime.now() + datetime.timedelta(-30) add_user('tab', '*****@*****.**', 'test', created) add_user('shirting', '*****@*****.**', 'test') with self.client: response = self.client.get('/users') data = json.loads(response.data.decode()) self.assertEqual(response.status_code, 200) self.assertEqual(len(data['data']['users']), 2) self.assertTrue('created_at' in data['data']['users'][0]) self.assertTrue('created_at' in data['data']['users'][1]) self.assertIn('tab', data['data']['users'][1]['username']) self.assertIn('*****@*****.**', data['data']['users'][1]['email']) self.assertIn('shirting', data['data']['users'][0]['username']) self.assertIn('*****@*****.**', data['data']['users'][0]['email']) self.assertIn('success', data['status'])
def test_add_user_duplicate_user(self): '''Ensure error is thrown if the email already exits.''' add_user('test', '*****@*****.**', 'test') user = User.query.filter_by(email='*****@*****.**').first() user.admin = True db.session.commit() resp_login = self.client.post('/auth/login', data=json.dumps( dict(email='*****@*****.**', password='******')), content_type='application/json') with self.client: self.client.post( '/users', data=json.dumps( dict(username='******', email='*****@*****.**', password='******')), content_type='application/json', headers=dict( Authorization='Bearer ' + json.loads(resp_login.data.decode())['auth_token'])) # 模拟post请求,绑定'users'接口返回的数据 response = self.client.post( '/users', data=json.dumps( dict(username='******', email='*****@*****.**', password='******')), content_type='application/json', headers=dict( Authorization='Bearer ' + json.loads(resp_login.data.decode())['auth_token'])) # 解码返回的数据 data = json.loads(response.data.decode()) self.assertEqual(response.status_code, 400) self.assertIn('Sorry, That email has already exist.', data['message']) self.assertIn('fail', data['status'])
def test_valid_logout(self): add_user('test', '*****@*****.**', 'test') with self.client: #user login response resp_login = self.client.post('/auth/login', data=json.dumps( dict(email='*****@*****.**', password='******')), content_type='application/json') #valid logout response response = self.client.get( '/auth/logout', headers=dict( Authorization='Bearer ' + json.loads(resp_login.data.decode())['auth_token'])) data = json.loads(response.data.decode()) self.assertTrue(data['status'] == 'success') self.assertTrue(data['message'] == 'Successfully logged out.') self.assertEqual(response.status_code, 200)
def test_user_status(self): add_user('test', '*****@*****.**', 'test') with self.client: resp_login = self.client.post('/auth/login', data=json.dumps( dict(email='*****@*****.**', password='******')), content_type='application/json') response = self.client.get( '/auth/status', headers=dict( Authorization='Bearer ' + json.loads(resp_login.data.decode())['auth_token'])) data = json.loads(response.data.decode()) self.assertTrue(data['status'], 'success') self.assertTrue(data['data'] is not None) self.assertTrue(data['data']['username'] == 'test') self.assertTrue(data['data']['email'] == '*****@*****.**') self.assertTrue(data['data']['active'] == False) self.assertTrue(data['data']['created_at']) self.assertEqual(response.status_code, 200)
def test_invalid_logout_expired_token(self): add_user('test', '*****@*****.**', 'test') with self.client: resp_login = self.client.post('/auth/login', data=json.dumps( dict(email='*****@*****.**', password='******')), content_type='application/json') # user invalid logout time.sleep(4) response = self.client.get( '/auth/logout', headers=dict( Authorization='Bearer ' + json.loads(resp_login.data.decode())['auth_token'])) data = json.loads(response.data.decode()) self.assertTrue(data['status'] == 'error') self.assertTrue( data['message'] == 'Signature expired. Please log in again') self.assertEqual(response.status_code, 401)
def test_single_user(self): '''Ensures get single user behaves correctly''' # add user first user = add_user('tab', '*****@*****.**', 'test') with self.client: response = self.client.get(f'/users/{user.id}') data = json.loads(response.data.decode()) self.assertEqual(response.status_code, 200) self.assertTrue('created_at' in data['data']) self.assertIn('tab', data['data']['username']) self.assertIn('*****@*****.**', data['data']['email']) self.assertIn('success', data['status'])
def test_registered_user_login(self): with self.client: user = add_user('test', '*****@*****.**', 'test') response = self.client.post('/auth/login', data=json.dumps( dict(email='*****@*****.**', password='******')), content_type='application/json') data = json.loads(response.data.decode()) self.assertTrue(data['status'] == 'success') self.assertTrue(data['message'] == 'Login success!') self.assertTrue(data['auth_token']) self.assertTrue(response.status_code, 200)
def test_add_articles(self): '''Ensure add user with user id''' user = add_user(username='******', email='*****@*****.**', password='******') with self.client: response = self.client.post('/articles', data=json.dumps( dict(title='test', body='test content', user_id=user.id)), content_type='application/json') data = json.loads(response.data.decode()) self.assertEqual(response.status_code, 200) self.assertIn('success', data['status']) self.assertIn('The article has been added', data['message'])
def test_get_user_articles(self): '''Ensure get user's articles correctly''' # add user's article first user = add_user('tab', '*****@*****.**', 'test') # get the users's id and as foreign key article = add_article('test', 'This is tab\' first article', user.id) with self.client: response = self.client.get(f'/articles/{user.id}') data = json.loads(response.data.decode()) self.assertEqual(response.status_code, 200) self.assertTrue(len(data['data']['articles']), 1) self.assertIn('test', data['data']['articles'][0]['title']) self.assertIn('This is tab\' first article', data['data']['articles'][0]['body']) self.assertEqual(user.id, data['data']['articles'][0]['user_id'])
def test_add_user(self): '''Ensure a new user can be added to the database''' user = add_user('test', '*****@*****.**', 'test') self.assertTrue(user.id) self.assertTrue(user.email, '*****@*****.**') self.assertTrue(user.username, 'test') self.assertTrue(user.password) self.assertFalse(user.active) self.assertTrue(user.created_at) self.assertTrue(user.admin == False) test_user = User.query.filter_by(email='*****@*****.**').first() test_user.admin = True db.session.commit() resp_login = self.client.post('/auth/login', data=json.dumps( dict(email='*****@*****.**', password='******')), content_type='application/json') with self.client: response = self.client.post( '/users', data=json.dumps( dict(username='******', email='*****@*****.**', password='******')), content_type='application/json', headers=dict( Authorization='Bearer ' + json.loads(resp_login.data.decode())['auth_token'])) data = json.loads(response.data.decode()) self.assertEqual(response.status_code, 201) self.assertIn('[email protected] was added!', data['message']) self.assertIn('success', data['status'])
def test_passwords_are_random(self): user_one = add_user('*****@*****.**', '*****@*****.**', 'test') user_two = add_user('*****@*****.**', '*****@*****.**', 'test') self.assertNotEqual(user_one.password, user_two.password)