test browser database load (#215)
* new: test: add chrome json test * chg: test: remove unused json * chg: dev: use gh uploaded file * chg: test: parametrize the test * new: test: chrome no parent tag pickle result file * new: test: load firefox db test * chg: test: merge same method on fixture * fix: dev: false variable name * chg: test: move zip extractor to its own method * chg: test: use external zip file for exp result * fix: test: flake8 fix * fix: test: use strpath from folder * fix: test: firefox nopt expected result * chg: test: remove test data file from repo
This commit is contained in:
parent
ca8d0f2d45
commit
7719f480b1
@ -4,9 +4,13 @@
|
|||||||
#
|
#
|
||||||
import math
|
import math
|
||||||
import os
|
import os
|
||||||
|
import pickle
|
||||||
import re
|
import re
|
||||||
|
import shutil
|
||||||
import sqlite3
|
import sqlite3
|
||||||
import sys
|
import sys
|
||||||
|
import urllib
|
||||||
|
import zipfile
|
||||||
from genericpath import exists
|
from genericpath import exists
|
||||||
from itertools import product
|
from itertools import product
|
||||||
from tempfile import TemporaryDirectory
|
from tempfile import TemporaryDirectory
|
||||||
@ -1121,9 +1125,98 @@ def test_browse_by_index(low, high, index, is_range, empty_database):
|
|||||||
raise ValueError
|
raise ValueError
|
||||||
bdb.delete_rec_all()
|
bdb.delete_rec_all()
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.fixture()
|
||||||
|
def bookmark_folder(tmpdir):
|
||||||
|
# database
|
||||||
|
zip_url = 'https://github.com/jarun/Buku/files/1319933/bookmarks.zip'
|
||||||
|
tmp_zip = tmpdir.join('bookmarks.zip')
|
||||||
|
extract_all_from_zip_url(zip_url, tmp_zip, tmpdir)
|
||||||
|
# expected res
|
||||||
|
zip_url = 'https://github.com/jarun/Buku/files/1321193/bookmarks_res.zip'
|
||||||
|
tmp_zip = tmpdir.join('bookmarks_res.zip')
|
||||||
|
extract_all_from_zip_url(zip_url, tmp_zip, tmpdir)
|
||||||
|
return tmpdir
|
||||||
|
|
||||||
|
@pytest.fixture()
|
||||||
|
def chrome_db(bookmark_folder):
|
||||||
|
# compatibility
|
||||||
|
tmpdir = bookmark_folder
|
||||||
|
|
||||||
|
json_file = [x.strpath for x in tmpdir.listdir() if x.basename == 'Bookmarks'][0]
|
||||||
|
res_pickle_file = [
|
||||||
|
x.strpath for x in tmpdir.listdir() if x.basename == '25491522_res.pickle'][0]
|
||||||
|
res_nopt_pickle_file = [
|
||||||
|
x.strpath for x in tmpdir.listdir() if x.basename == '25491522_res_nopt.pickle'][0]
|
||||||
|
return json_file, res_pickle_file, res_nopt_pickle_file
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.parametrize('add_pt', [True, False])
|
||||||
|
def test_load_chrome_database(chrome_db, add_pt):
|
||||||
|
"""test method."""
|
||||||
|
# compatibility
|
||||||
|
json_file = chrome_db[0]
|
||||||
|
res_pickle_file = chrome_db[1] if add_pt else chrome_db[2]
|
||||||
|
with open(res_pickle_file, 'rb') as f:
|
||||||
|
res_pickle = pickle.load(f)
|
||||||
|
# init
|
||||||
|
import buku
|
||||||
|
bdb = buku.BukuDb()
|
||||||
|
bdb.add_rec = mock.Mock()
|
||||||
|
bdb.load_chrome_database(json_file, None, add_pt)
|
||||||
|
call_args_list_dict = dict(bdb.add_rec.call_args_list)
|
||||||
|
# test
|
||||||
|
assert call_args_list_dict == res_pickle
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.fixture()
|
||||||
|
def firefox_db(bookmark_folder):
|
||||||
|
# compatibility
|
||||||
|
tmpdir = bookmark_folder
|
||||||
|
|
||||||
|
ff_db_path = [x.strpath for x in tmpdir.listdir() if x.basename == 'places.sqlite'][0]
|
||||||
|
res_pickle_file = [
|
||||||
|
x.strpath for x in tmpdir.listdir() if x.basename == 'firefox_res.pickle'][0]
|
||||||
|
res_nopt_pickle_file = [
|
||||||
|
x.strpath for x in tmpdir.listdir() if x.basename == 'firefox_res_nopt.pickle'][0]
|
||||||
|
return ff_db_path, res_pickle_file, res_nopt_pickle_file
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.parametrize('add_pt', [True, False])
|
||||||
|
def test_load_firefox_database(firefox_db, add_pt):
|
||||||
|
# compatibility
|
||||||
|
ff_db_path = firefox_db[0]
|
||||||
|
|
||||||
|
res_pickle_file = firefox_db[1] if add_pt else firefox_db[2]
|
||||||
|
with open(res_pickle_file, 'rb') as f:
|
||||||
|
res_pickle = pickle.load(f)
|
||||||
|
# init
|
||||||
|
import buku
|
||||||
|
bdb = buku.BukuDb()
|
||||||
|
bdb.add_rec = mock.Mock()
|
||||||
|
bdb.load_firefox_database(ff_db_path, None, add_pt)
|
||||||
|
call_args_list_dict = dict(bdb.add_rec.call_args_list)
|
||||||
|
# test
|
||||||
|
assert call_args_list_dict == res_pickle
|
||||||
|
|
||||||
|
|
||||||
# Helper functions for testcases
|
# Helper functions for testcases
|
||||||
|
|
||||||
|
|
||||||
|
def extract_all_from_zip_url(zip_url, tmp_zip, folder):
|
||||||
|
"""extra all files in zip from zip url.
|
||||||
|
|
||||||
|
Args:
|
||||||
|
zip_url (str): URL of zip file.
|
||||||
|
zip_filename: Temporary zip file to save from url.
|
||||||
|
folder: Extract all files inside this folder.
|
||||||
|
"""
|
||||||
|
with urllib.request.urlopen(zip_url) as response, open(tmp_zip.strpath, 'wb') as out_file:
|
||||||
|
shutil.copyfileobj(response, out_file)
|
||||||
|
zip_obj = zipfile.ZipFile(tmp_zip.strpath)
|
||||||
|
zip_obj.extractall(path=folder.strpath)
|
||||||
|
|
||||||
|
|
||||||
def split_and_test_membership(a, b):
|
def split_and_test_membership(a, b):
|
||||||
# :param a, b: comma separated strings to split
|
# :param a, b: comma separated strings to split
|
||||||
# test everything in a in b
|
# test everything in a in b
|
||||||
|
Loading…
Reference in New Issue
Block a user