Files

49 lines
2.1 KiB
Python

import hashlib
import pytest
from simple_prompt.core import data_update
def test_validate_release_url_allows_only_expected_github_release_path():
valid_url = "https://api.github.com/repos/0nikod/danbooru_tag_process/releases/latest"
assert data_update._validate_release_url(valid_url) == valid_url
with pytest.raises(ValueError, match="Unsupported release URL"):
data_update._validate_release_url("https://api.github.com/repos/other/repo/releases/latest")
with pytest.raises(ValueError, match="Unsupported release URL"):
data_update._validate_release_url("http://api.github.com/repos/0nikod/danbooru_tag_process/releases/latest")
def test_validate_asset_url_allows_only_github_asset_hosts():
valid_url = "https://github.com/0nikod/danbooru_tag_process/releases/download/v1/tags.parquet"
assert data_update._validate_asset_url(valid_url) == valid_url
redirected_url = "https://release-assets.githubusercontent.com/github-production-release-asset/test/tags.parquet"
assert data_update._validate_asset_url(redirected_url) == redirected_url
with pytest.raises(ValueError, match="Unsupported asset URL"):
data_update._validate_asset_url("https://example.com/tags.parquet")
def test_find_tag_asset_prefers_processed_asset_name():
release_info = {
"assets": [
{"name": "tags.parquet", "browser_download_url": "plain"},
{"name": "tags_processed.parquet", "browser_download_url": "processed"},
]
}
assert data_update._find_tag_asset(release_info) == {"name": "tags_processed.parquet", "browser_download_url": "processed"}
def test_extract_remote_sha256_and_local_sha256(tmp_path):
assert data_update._extract_remote_sha256({"digest": "sha256:abc123"}) == "abc123"
assert data_update._extract_remote_sha256({"digest": "abc123"}) == "abc123"
target = tmp_path / "tags.parquet"
target.write_bytes(b"tag-bytes")
assert data_update._calculate_local_sha256(str(target)) == hashlib.sha256(b"tag-bytes").hexdigest()
assert data_update._calculate_local_sha256(str(tmp_path / "missing.parquet")) == ""