| import pytest | |
| import base64 | |
| from app.utils.base64_decoder import SubscriptionDecoder | |
| class TestBase64Decoder: | |
| def test_decode_simple_base64(self): | |
| original = "vmess://test123\nvless://test456" | |
| encoded = base64.b64encode(original.encode()).decode() | |
| decoded = SubscriptionDecoder.decode(encoded) | |
| assert decoded == original | |
| def test_decode_with_padding(self): | |
| original = "proxy list" | |
| encoded_with = base64.b64encode(original.encode()).decode() | |
| encoded_without = encoded_with.rstrip("=") | |
| assert SubscriptionDecoder.decode(encoded_with) == original | |
| assert SubscriptionDecoder.decode(encoded_without) == original | |
| def test_decode_multiline(self): | |
| original = "line1\nline2\nline3" | |
| encoded = base64.b64encode(original.encode()).decode() | |
| decoded = SubscriptionDecoder.decode(encoded) | |
| assert decoded.count("\n") == 2 | |
| assert "line1" in decoded | |
| def test_invalid_base64(self): | |
| with pytest.raises(ValueError): | |
| SubscriptionDecoder.decode("not!@#$%valid&*base64") | |
| def test_empty_string(self): | |
| result = SubscriptionDecoder.decode("") | |
| assert result == "" | |