social media crossposting tool. 3rd time's the charm
mastodon
misskey
crossposting
bluesky
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 == {}