buku/tests/test_server.py

109 lines
3.6 KiB
Python
Raw Normal View History

2019-02-09 08:49:45 +08:00
from click.testing import CliRunner
2019-05-07 20:14:36 +08:00
import flask
import pytest
from bukuserver import server
@pytest.mark.parametrize(
'args,word',
[
('--help', 'bukuserver'),
('--version', 'Buku')
]
)
def test_cli(args, word):
runner = CliRunner()
result = runner.invoke(server.cli, [args])
assert result.exit_code == 0
assert word in result.output
2019-05-07 20:14:36 +08:00
2019-05-14 02:47:29 +08:00
@pytest.fixture
def client(tmp_path):
2019-05-07 20:14:36 +08:00
test_db = tmp_path / 'test.db'
app = server.create_app(test_db.as_posix())
client = app.test_client()
2019-05-14 02:47:29 +08:00
return client
def test_home(client):
2019-05-07 20:14:36 +08:00
rd = client.get('/')
assert rd.status_code == 200
assert not flask.g.bukudb.get_rec_all()
2019-05-14 02:47:29 +08:00
@pytest.mark.parametrize(
'url, exp_res', [
['/api/tags', {'tags': []}],
['/api/bookmarks', {'bookmarks': []}],
['/api/bookmarks/search', {'bookmarks': []}]
]
)
def test_api_empty_db(client, url, exp_res):
rd = client.get(url)
assert rd.status_code == 200
assert rd.get_json() == exp_res
2019-05-14 04:56:03 +08:00
@pytest.mark.parametrize(
2019-05-14 13:15:37 +08:00
'url, exp_res, status_code, method', [
['/api/tags/1', {'message': 'This resource does not exist.'}, 404, 'get'],
['/api/tags/1', {'message': 'failure', 'status': 1}, 400, 'put'],
['/api/bookmarks/1', {'message': 'failure', 'status': 1}, 400, 'get'],
['/api/bookmarks/1', None, 400, 'put'],
['/api/bookmarks/1', {'message': 'failure', 'status': 1}, 400, 'delete'],
2019-05-14 04:56:03 +08:00
]
)
2019-05-14 13:15:37 +08:00
def test_invalid_id(client, url, exp_res, status_code, method):
rd = getattr(client, method)(url)
2019-05-14 04:56:03 +08:00
assert rd.status_code == status_code
assert rd.get_json() == exp_res
2019-05-14 14:05:50 +08:00
def test_tag_api(client):
url = 'http://google.com'
rd = client.post('/api/bookmarks', data={'url': url, 'tags': 'tag1,tag2'})
assert rd.status_code == 200
assert rd.get_json() == {'message': 'success', 'status': 0}
rd = client.get('/api/tags')
assert rd.status_code == 200
assert rd.get_json() == {'tags': ['tag1', 'tag2']}
rd = client.get('/api/tags/tag1')
assert rd.status_code == 200
assert rd.get_json() == {'name': 'tag1', 'usage_count': 1}
rd = client.put('/api/tags/tag1', data={'tags': 'tag3,tag4'})
assert rd.status_code == 200
assert rd.get_json() == {'message': 'success', 'status': 0}
rd = client.get('/api/tags')
assert rd.status_code == 200
assert rd.get_json() == {'tags': ['tag2', 'tag3 tag4']}
rd = client.put('/api/tags/tag2', data={'tags': 'tag5'})
assert rd.status_code == 200
assert rd.get_json() == {'message': 'success', 'status': 0}
rd = client.get('/api/tags')
assert rd.status_code == 200
assert rd.get_json() == {'tags': ['tag3 tag4', 'tag5']}
rd = client.get('/api/bookmarks/1')
assert rd.status_code == 200
assert rd.get_json() == {
'description': '', 'tags': ['tag3 tag4', 'tag5'], 'title': '',
'url': 'http://google.com'}
2019-05-14 13:15:37 +08:00
def test_bookmark_api(client):
2019-05-14 04:56:03 +08:00
url = 'http://google.com'
rd = client.post('/api/bookmarks', data={'url': url})
assert rd.status_code == 200
assert rd.get_json() == {'message': 'success', 'status': 0}
rd = client.post('/api/bookmarks', data={'url': url})
assert rd.status_code == 400
assert rd.get_json() == {'message': 'failure', 'status': 1}
rd = client.get('/api/bookmarks/search', query_string={'keywords': 'google.com'})
assert rd.status_code == 200
assert rd.get_json() == {'bookmarks': [
{'description': '', 'id': 1, 'tags': [], 'title': '', 'url': url}]}
rd = client.get('/api/bookmarks/1')
assert rd.status_code == 200
assert rd.get_json() == {
'description': '', 'tags': [], 'title': '', 'url': 'http://google.com'}