Example #1
0
    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)
Example #2
0
    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'])
Example #3
0
 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)
Example #4
0
    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.')
Example #5
0
    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'])
Example #6
0
    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)
Example #7
0
 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)
Example #8
0
 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'])
Example #9
0
    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'])
Example #10
0
    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)
Example #11
0
    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)
Example #12
0
    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)
Example #13
0
    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'])
Example #14
0
    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)
Example #15
0
    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'])
Example #16
0
    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'])
Example #17
0
    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'])
Example #18
0
 def test_passwords_are_random(self):
     user_one = add_user('*****@*****.**', '*****@*****.**', 'test')
     user_two = add_user('*****@*****.**', '*****@*****.**', 'test')
     self.assertNotEqual(user_one.password, user_two.password)