ifcurl/tests/test_auth.py

81 lines
3.1 KiB
Python
Raw Normal View History

"""Tests for ifcurl.auth — token config and URL injection."""
from __future__ import annotations
import json
import pytest
from ifcurl.auth import get_token_for_host, inject_token
class TestGetTokenForHost:
def test_returns_token_for_known_host(self, tmp_path, monkeypatch):
config = tmp_path / "tokens.json"
config.write_text(json.dumps({"hosts": {"github.com": "ghp_abc123"}}))
monkeypatch.setattr("ifcurl.auth.config_path", lambda: config)
assert get_token_for_host("github.com") == "ghp_abc123"
def test_returns_none_for_unknown_host(self, tmp_path, monkeypatch):
config = tmp_path / "tokens.json"
config.write_text(json.dumps({"hosts": {"github.com": "ghp_abc123"}}))
monkeypatch.setattr("ifcurl.auth.config_path", lambda: config)
assert get_token_for_host("gitlab.com") is None
def test_returns_none_when_file_missing(self, tmp_path, monkeypatch):
monkeypatch.setattr(
"ifcurl.auth.config_path", lambda: tmp_path / "nonexistent.json"
)
assert get_token_for_host("github.com") is None
def test_returns_none_on_malformed_json(self, tmp_path, monkeypatch):
config = tmp_path / "tokens.json"
config.write_text("not json {{{")
monkeypatch.setattr("ifcurl.auth.config_path", lambda: config)
assert get_token_for_host("github.com") is None
def test_returns_none_for_empty_token(self, tmp_path, monkeypatch):
config = tmp_path / "tokens.json"
config.write_text(json.dumps({"hosts": {"github.com": ""}}))
monkeypatch.setattr("ifcurl.auth.config_path", lambda: config)
assert get_token_for_host("github.com") is None
def test_multiple_hosts(self, tmp_path, monkeypatch):
config = tmp_path / "tokens.json"
config.write_text(
json.dumps(
{
"hosts": {
"github.com": "ghp_token",
"gitlab.example.com": "glpat_token",
}
}
)
)
monkeypatch.setattr("ifcurl.auth.config_path", lambda: config)
assert get_token_for_host("github.com") == "ghp_token"
assert get_token_for_host("gitlab.example.com") == "glpat_token"
class TestInjectToken:
def test_basic_https_url(self):
result = inject_token("https://github.com/org/repo", "mytoken")
assert result == "https://mytoken@github.com/org/repo"
def test_preserves_path(self):
result = inject_token("https://example.com/org/repo", "tok")
assert result.endswith("/org/repo")
def test_preserves_custom_port(self):
result = inject_token("https://example.com:8080/org/repo", "tok")
assert "8080" in result
assert result == "https://tok@example.com:8080/org/repo"
def test_token_appears_before_host(self):
result = inject_token("https://github.com/org/repo", "ghp_xyz")
assert "ghp_xyz@github.com" in result
def test_scheme_preserved(self):
result = inject_token("https://github.com/org/repo", "tok")
assert result.startswith("https://")