Revision 1c65dd5c
Added by koszko over 1 year ago
| test/unit/test_indexeddb.py | ||
|---|---|---|
| 6 | 6 |
|
| 7 | 7 |
# This file is part of Haketilo |
| 8 | 8 |
# |
| 9 |
# Copyright (C) 2021,2022 Wojtek Kosior <koszko@koszko.org> |
|
| 9 |
# Copyright (C) 2021, 2022 Wojtek Kosior <koszko@koszko.org>
|
|
| 10 | 10 |
# |
| 11 | 11 |
# This program is free software: you can redistribute it and/or modify |
| 12 | 12 |
# it under the terms of the CC0 1.0 Universal License as published by |
| ... | ... | |
| 73 | 73 |
.then(finalize_transaction); |
| 74 | 74 |
returnval(promise); |
| 75 | 75 |
}''', |
| 76 |
sample_item, sample_files_by_hash)
|
|
| 76 |
sample_item, {'sha256': sample_files_by_sha256})
|
|
| 77 | 77 |
|
| 78 | 78 |
database_contents = get_db_contents(execute_in_page) |
| 79 | 79 |
|
| 80 | 80 |
assert len(database_contents['files']) == 4 |
| 81 |
assert all([sample_files_by_hash[file['hash_key']] == file['contents']
|
|
| 81 |
assert all([sample_files_by_sha256[file['sha256']] == file['contents']
|
|
| 82 | 82 |
for file in database_contents['files']]) |
| 83 | 83 |
assert all([len(file) == 2 for file in database_contents['files']]) |
| 84 | 84 |
|
| 85 | 85 |
assert len(database_contents['file_uses']) == 4 |
| 86 | 86 |
assert all([uses['uses'] == 1 for uses in database_contents['file_uses']]) |
| 87 |
assert set([uses['hash_key'] for uses in database_contents['file_uses']]) \
|
|
| 88 |
== set([file['hash_key'] for file in database_contents['files']])
|
|
| 87 |
assert set([uses['sha256'] for uses in database_contents['file_uses']]) \
|
|
| 88 |
== set([file['sha256'] for file in database_contents['files']])
|
|
| 89 | 89 |
|
| 90 | 90 |
assert database_contents['mapping'] == [] |
| 91 | 91 |
assert database_contents['resource'] == [sample_item] |
| ... | ... | |
| 93 | 93 |
# See if trying to add an item without providing all its files ends in an |
| 94 | 94 |
# exception and aborts the transaction as it should. |
| 95 | 95 |
sample_item['scripts'].append(sample_file_ref('combined.js'))
|
| 96 |
incomplete_files = {**sample_files_by_hash}
|
|
| 97 |
incomplete_files.pop(sample_files['combined.js']['hash_key'])
|
|
| 96 |
incomplete_files = {**sample_files_by_sha256}
|
|
| 97 |
incomplete_files.pop(sample_files['combined.js']['sha256'])
|
|
| 98 | 98 |
exception = execute_in_page( |
| 99 | 99 |
'''{
|
| 100 | 100 |
const args = arguments; |
| ... | ... | |
| 112 | 112 |
} |
| 113 | 113 |
returnval(try_add_item()); |
| 114 | 114 |
}''', |
| 115 |
sample_item, incomplete_files)
|
|
| 115 |
sample_item, {'sha256': incomplete_files})
|
|
| 116 | 116 |
|
| 117 | 117 |
previous_database_contents = database_contents |
| 118 | 118 |
database_contents = get_db_contents(execute_in_page) |
| 119 | 119 |
|
| 120 | 120 |
assert 'file not present' in exception |
| 121 | 121 |
for key, val in database_contents.items(): |
| 122 |
keyfun = lambda item: item.get('hash_key') or item['identifier']
|
|
| 122 |
keyfun = lambda item: item.get('sha256') or item['identifier']
|
|
| 123 | 123 |
assert sorted(previous_database_contents[key], key=keyfun) \ |
| 124 | 124 |
== sorted(val, key=keyfun) |
| 125 | 125 |
|
| ... | ... | |
| 132 | 132 |
.then(finalize_transaction); |
| 133 | 133 |
returnval(promise); |
| 134 | 134 |
}''', |
| 135 |
sample_item, sample_files_by_hash)
|
|
| 135 |
sample_item, {'sha256': sample_files_by_sha256})
|
|
| 136 | 136 |
|
| 137 | 137 |
database_contents = get_db_contents(execute_in_page) |
| 138 | 138 |
|
| ... | ... | |
| 141 | 141 |
sample_files_list = [sample_files[name] for name in names] |
| 142 | 142 |
uses_list = [1, 2, 1, 1, 1] |
| 143 | 143 |
|
| 144 |
uses = dict([(uses['hash_key'], uses['uses'])
|
|
| 144 |
uses = dict([(uses['sha256'], uses['uses'])
|
|
| 145 | 145 |
for uses in database_contents['file_uses']]) |
| 146 |
assert uses == dict([(file['hash_key'], nr)
|
|
| 146 |
assert uses == dict([(file['sha256'], nr)
|
|
| 147 | 147 |
for file, nr in zip(sample_files_list, uses_list)]) |
| 148 | 148 |
|
| 149 |
files = dict([(file['hash_key'], file['contents'])
|
|
| 149 |
files = dict([(file['sha256'], file['contents'])
|
|
| 150 | 150 |
for file in database_contents['files']]) |
| 151 |
assert files == dict([(file['hash_key'], file['contents'])
|
|
| 151 |
assert files == dict([(file['sha256'], file['contents'])
|
|
| 152 | 152 |
for file in sample_files_list]) |
| 153 | 153 |
|
| 154 | 154 |
del database_contents['resource'][0]['source_copyright'][0]['extra_prop'] |
| ... | ... | |
| 174 | 174 |
sample_files_list = [sample_files[name] for name in names] |
| 175 | 175 |
uses_list = [1, 1] |
| 176 | 176 |
|
| 177 |
uses = dict([(uses['hash_key'], uses['uses'])
|
|
| 177 |
uses = dict([(uses['sha256'], uses['uses'])
|
|
| 178 | 178 |
for uses in results[0]['file_uses']]) |
| 179 |
assert uses == dict([(file['hash_key'], 1) for file in sample_files_list])
|
|
| 179 |
assert uses == dict([(file['sha256'], 1) for file in sample_files_list])
|
|
| 180 | 180 |
|
| 181 |
files = dict([(file['hash_key'], file['contents'])
|
|
| 181 |
files = dict([(file['sha256'], file['contents'])
|
|
| 182 | 182 |
for file in results[0]['files']]) |
| 183 |
assert files == dict([(file['hash_key'], file['contents'])
|
|
| 183 |
assert files == dict([(file['sha256'], file['contents'])
|
|
| 184 | 184 |
for file in sample_files_list]) |
| 185 | 185 |
|
| 186 | 186 |
assert results[0]['resource'] == [] |
| ... | ... | |
| 206 | 206 |
'0.1.1': sample_mapping |
| 207 | 207 |
} |
| 208 | 208 |
}, |
| 209 |
'files': sample_files_by_hash |
|
| 209 |
'file': {
|
|
| 210 |
'sha256': sample_files_by_sha256 |
|
| 211 |
} |
|
| 210 | 212 |
} |
| 211 | 213 |
|
| 212 | 214 |
clear_indexeddb(execute_in_page) |
| ... | ... | |
| 350 | 352 |
'0.1.1': sample_mapping |
| 351 | 353 |
} |
| 352 | 354 |
}, |
| 353 |
'files': sample_files_by_hash |
|
| 355 |
'file': {
|
|
| 356 |
'sha256': sample_files_by_sha256 |
|
| 357 |
} |
|
| 354 | 358 |
} |
| 355 | 359 |
driver.switch_to.window(windows[1]) |
| 356 | 360 |
execute_in_page('initial_data = arguments[0];', initial_data)
|
| ... | ... | |
| 423 | 427 |
'0.1.1': sample_mapping2 |
| 424 | 428 |
} |
| 425 | 429 |
}, |
| 426 |
'files': sample_files_by_hash |
|
| 430 |
'file': {
|
|
| 431 |
'sha256': sample_files_by_sha256 |
|
| 432 |
} |
|
| 427 | 433 |
} |
| 428 | 434 |
execute_in_page('returnval(save_items(arguments[0]));', sample_data)
|
| 429 | 435 |
execute_in_page('returnval(set_setting("option22", "abc"));')
|
Also available in: Unified diff
adapt to changes in file path format
From now on we assume Hydrilla serves file contents at 'file/sha256/' instead of 'file/sha256-'.
With this commit we also stop using the "hash_key" property internally.