social media crossposting tool. 3rd time's the charm
mastodon misskey crossposting bluesky
at next 1.9 kB view raw
1import util.util as u 2from unittest.mock import patch 3import pytest 4 5 6def test_normalize_service_url_http(): 7 assert u.normalize_service_url("http://example.com") == "http://example.com" 8 assert u.normalize_service_url("http://example.com/") == "http://example.com" 9 10 11def test_normalize_service_url_invalid_schemes(): 12 with pytest.raises(ValueError, match="Invalid service url"): 13 _ = u.normalize_service_url("ftp://example.com") 14 with pytest.raises(ValueError, match="Invalid service url"): 15 _ = u.normalize_service_url("example.com") 16 with pytest.raises(ValueError, match="Invalid service url"): 17 _ = u.normalize_service_url("//example.com") 18 19 20def test_read_env_missing_env_var(): 21 data = {"token": "env:MISSING_VAR", "keep": "value"} 22 with patch.dict("os.environ", {}, clear=True): 23 u.read_env(data) 24 assert data == {"keep": "value"} 25 assert "token" not in data 26 27 28def test_read_env_no_env_prefix(): 29 data = {"token": "literal_value", "number": 123} 30 u.read_env(data) 31 assert data == {"token": "literal_value", "number": 123} 32 33 34def test_read_env_deeply_nested(): 35 data = {"level1": {"level2": {"token": "env:DEEP_TOKEN"}}} 36 with patch.dict("os.environ", {"DEEP_TOKEN": "deep_secret"}): 37 u.read_env(data) 38 assert data["level1"]["level2"]["token"] == "deep_secret" 39 40 41def test_read_env_mixed_types(): 42 data = { 43 "string": "env:TOKEN", 44 "number": 42, 45 "list": [1, 2, 3], 46 "none": None, 47 "bool": True, 48 } 49 with patch.dict("os.environ", {"TOKEN": "secret"}): 50 u.read_env(data) 51 assert data["string"] == "secret" 52 assert data["number"] == 42 53 assert data["list"] == [1, 2, 3] 54 assert data["none"] is None 55 assert data["bool"] is True 56 57 58def test_read_env_empty_dict(): 59 data = {} 60 u.read_env(data) 61 assert data == {}