コード例 #1
0
class TestAuthModule(unittest.TestCase):
    def setUp(self):
        self.app = create_app('testing')
        self.app_context = self.app.app_context()
        self.app_context.push()
        self.client = self.app.test_client()
        db.create_all()
        self.test_user = User(username='******')
        self.test_user.set_password('abc')
        db.session.add(self.test_user)
        db.session.commit()

    def tearDown(self):
        db.drop_all()

    def test_password_setter(self):
        user_1 = User(username='******')
        user_2 = User(username='******')
        user_1.set_password('abc')
        user_2.set_password('abc')
        self.assertNotEqual(user_1._password_hash, user_2._password_hash)

    def test_password_verification(self):
        self.assertTrue(self.test_user.verify_password('abc'))
        self.assertFalse(self.test_user.verify_password('xyz'))

    def test_login_view(self):
        response = self.client.post('http://localhost:5000/auth/login')
        self.assertEqual(response.status_code, 400)

    def test_fail_login(self):
        auth_string = base64.b64encode(b'abc:xyz').decode('utf-8')
        response = self.client.post(
            'http://localhost:5000/auth/login',
            headers=({
                'Authorization': 'Basic ' + auth_string,
            }),
        )
        self.assertEqual(response.status_code, 401)

    def test_login_succes(self):
        auth_string = base64.b64encode(b'abc:abc').decode('utf-8')
        response = self.client.post(
            'http://localhost:5000/auth/login',
            headers=({
                'Authorization': 'Basic ' + auth_string,
            }),
        )
        self.assertEqual(response.status_code, 200)
        self.assertTrue(response.headers.get('X-Auth-Token'))

    def test_get_token(self):
        token1 = self.test_user.get_token()
        token2 = self.test_user.get_token()
        self.assertEqual(token1, token2)

    def test_logout_view(self):
        token = self.test_user.get_token()
        response = self.client.post(
            'http://localhost:5000/auth/logout',
            headers={'X-Auth-Token': token},
        )
        self.assertEqual(response.status_code, 200)

    def test_fail_logout(self):
        response = self.client.post(
            'http://localhost:5000/auth/logout',
            headers={'X-Auth-Token': 'whatever'},
        )
        self.assertEqual(response.status_code, 401)
コード例 #2
0
class TestBandCollection(unittest.TestCase):
    def setUp(self):
        self.app = create_app('testing')
        self.app_context = self.app.app_context()
        self.app_context.push()
        self.client = self.app.test_client()
        db.create_all()

        self.test_band = Band(name='test1',
                              city='abc',
                              year_founded=1999,
                              country='lebanon')
        self.test_band_2 = Band(name='test2')
        self.test_user = User(username='******')
        self.test_user.set_password('abc')
        db.session.add(self.test_user)
        db.session.add(self.test_band_2)
        db.session.add(self.test_band)
        db.session.commit()

    def tearDown(self):
        db.drop_all()

    def test_get_bands(self):
        response = self.client.get(
            'http://localhost:5000/bands/',
            headers={'Accept': 'application/json'},
        )
        self.assertEqual(response.status_code, 200)

    def test_patch_band(self):
        response = self.client.patch('http://localhost:5000/bands/' +
                                     str(self.test_band.band_id),
                                     data=json.dumps({'city': 'xyz'}),
                                     headers={
                                         'Content-Type':
                                         'application/json',
                                         'Accept':
                                         'application/json',
                                         'X-Auth-Token':
                                         self.test_user.get_token(),
                                     })
        json_response = response.get_json()
        self.assertEqual(response.status_code, 200)
        self.assertEqual(json_response['name'], 'test1')
        self.assertEqual(json_response['year_founded'], 1999)
        self.assertEqual(json_response['year_disbanded'], None)
        self.assertEqual(json_response['city'], 'xyz')
        self.assertEqual(json_response['country'], 'lebanon')

    def test_fail_patch_band(self):
        response = self.client.patch('http://localhost:5000/bands/' +
                                     str(self.test_band.band_id),
                                     data=json.dumps({
                                         'city': 'xyz',
                                         'test': 'test'
                                     }),
                                     headers={
                                         'Content-Type':
                                         'application/json',
                                         'Accept':
                                         'application/json',
                                         'X-Auth-Token':
                                         self.test_user.get_token(),
                                     })
        self.assertEqual(response.status_code, 400)

    def test_put_band_create(self):
        response = self.client.put('http://localhost:5000/bands/99',
                                   data=json.dumps({
                                       'name': 'deftones',
                                       'year_founded': 1996,
                                       'city': 'somecity',
                                       'year_disbanded': 2011,
                                       'country': 'USA'
                                   }),
                                   headers={
                                       'Content-Type': 'application/json',
                                       'Accept': 'application/json',
                                       'X-Auth-Token':
                                       self.test_user.get_token(),
                                   })
        self.assertEqual(response.status_code, 201)

    def test_put_band_update(self):
        response = self.client.put(
            'http://localhost:5000/bands/' + str(self.test_band.band_id),
            data=json.dumps({
                'name': 'deftones',
                'year_founded': 1996,
                'city': 'somecity',
                'year_disbanded': 2011,
                'country': 'USA'
            }),
            headers={
                'Content-Type': 'application/json',
                'Accept': 'application/json',
                'X-Auth-Token': self.test_user.get_token(),
            })
        self.assertEqual(response.status_code, 200)

    def test_fail_put_band(self):
        response = self.client.put(
            'http://localhost:5000/bands/' + str(self.test_band.band_id),
            data=json.dumps({
                'name': 'deftones',
                'year_founded': 1996,
                'city': 'somecity',
                'year_disbanded': 2011,
            }),
            headers={
                'Content-Type': 'application/json',
                'Accept': 'application/json',
                'X-Auth-Token': self.test_user.get_token(),
            })
        self.assertEqual(response.status_code, 400)

    def test_post_bands(self):
        response = self.client.post(
            'http://localhost:5000/bands/',
            data=json.dumps({
                'name': 'deftones',
                'year_founded': 1996,
                'city': 'somecity',
                'year_disbanded': 2011,
                'country': 'USA'
            }),
            headers={
                'Content-Type': 'application/json',
                'X-Auth-Token': self.test_user.get_token(),
            },
        )
        self.assertEqual(response.status_code, 201)

    def test_fail_post_bands(self):
        response = self.client.post(
            'http://localhost:5000/bands/',
            data=json.dumps({
                'year_founded': 1996,
                'city': 'somecity',
                'year_disbanded': 2011,
                'country': 'USA'
            }),
            headers={
                'Content-Type': 'application/json',
                'X-Auth-Token': self.test_user.get_token(),
            },
        )
        self.assertEqual(response.status_code, 400)

    def test_fail_post_bands_2(self):
        response = self.client.post(
            'http://localhost:5000/bands/',
            data=json.dumps({
                'name': 'deftones',
                'year_founded': 1996,
                'city': 'somecity',
                'year_disbanded': 2011,
                'country': 'USA',
                'test': 'test'
            }),
            headers={
                'Content-Type': 'application/json',
                'Accept': 'application/json',
                'X-Auth-Token': self.test_user.get_token(),
            },
        )
        self.assertEqual(response.status_code, 400)

    def test_get_json_band(self):
        response = self.client.get(
            'http://localhost:5000/bands/{}'.format(self.test_band.band_id),
            headers={'Accept': 'application/json'},
        )
        self.assertEqual(response.status_code, 200)
        self.assertEqual(response.headers.get('Content-Type'),
                         'application/json')

    def test_get_xml_band(self):
        response = self.client.get(
            'http://localhost:5000/bands/{}'.format(self.test_band.band_id),
            headers={'Accept': 'application/xml'},
        )
        self.assertEqual(response.status_code, 200)
        self.assertEqual(response.headers.get('Content-Type'),
                         'application/xml')

    def test_delete_band(self):
        response = self.client.delete(
            'http://localhost:5000/bands/{}'.format(self.test_band_2.band_id),
            headers={'X-Auth-Token': self.test_user.get_token()},
        )
        self.assertEqual(response.status_code, 204)