from argparse import Namespace from types import SimpleNamespace import pytest from flask import current_app from buku import BukuDb from bukuserver import server from bukuserver.views import BookmarkModelView, TagModelView @pytest.fixture def client(tmp_path): test_db = tmp_path / 'test.db' app = server.create_app(test_db.as_posix()) app_context = app.test_request_context() app_context.push() client = app.test_client() return client @pytest.mark.parametrize('disable_favicon', [False, True]) def test_bookmark_model_view(tmp_path, client, disable_favicon): test_db = tmp_path / 'test.db' bukudb = BukuDb(dbfile=test_db.as_posix()) inst = BookmarkModelView(bukudb) model = Namespace( description='randomdesc', id=1, tags='tags1', title='Example Domain', url='http://example.com') current_app.config['BUKUSERVER_DISABLE_FAVICON'] = disable_favicon img_html = '' if not disable_favicon: img_html = \ ' ' res = inst._list_entry(None, model, 'Entry') exp_res = \ ( 'Example Domain
' 'http://example.com
' 'netloc:example.com' 'tags1' '
randomdesc') exp_res = ''.join([img_html, exp_res]) assert str(res) == exp_res @pytest.fixture def tmv_instance(tmp_path): """define tag model view instance""" test_db = tmp_path / 'test.db' bukudb = BukuDb(dbfile=test_db.as_posix()) inst = TagModelView(bukudb) return inst def test_tag_model_view_get_list_empty_db(tmv_instance): res = tmv_instance.get_list(None, None, None, None, []) assert res == (0, []) @pytest.mark.parametrize('sort_field, sort_desc, filters, exp_res', [ [ None, False, [], (3, [ SimpleNamespace(name='t1', usage_count=1), SimpleNamespace(name='t2', usage_count=2), SimpleNamespace(name='t3', usage_count=3), ]) ], [ None, False, [(0, 'name', 't2')], (1, [ SimpleNamespace(name='t2', usage_count=2) ]) ], [ 'name', False, [], (3, [ SimpleNamespace(name='t1', usage_count=1), SimpleNamespace(name='t2', usage_count=2), SimpleNamespace(name='t3', usage_count=3), ]) ], [ 'name', True, [], (3, [ SimpleNamespace(name='t3', usage_count=3), SimpleNamespace(name='t2', usage_count=2), SimpleNamespace(name='t1', usage_count=1), ]) ], [ 'usage_count', True, [], (3, [ SimpleNamespace(name='t3', usage_count=3), SimpleNamespace(name='t2', usage_count=2), SimpleNamespace(name='t1', usage_count=1), ]) ], ]) def test_tag_model_view_get_list(tmv_instance, sort_field, sort_desc, filters, exp_res): tmv_instance.bukudb.add_rec('http://example.com/1.jpg', tags_in='t1,t2,t3') tmv_instance.bukudb.add_rec('http://example.com/2.jpg', tags_in='t2,t3') tmv_instance.bukudb.add_rec('http://example.com/3.jpg', tags_in='t3') res = tmv_instance.get_list(0, sort_field, sort_desc, None, filters) assert res == exp_res