Files
crucible-agent-build-source…/tests/test_connectors.py

30 lines
1.9 KiB
Python

from source_connectors import GitHubConnector, SharePointConnector, StaticTokenProvider, Cursor
class FakeHTTP:
def __init__(self, responses): self.responses, self.urls = responses, []
def get(self, url, headers):
self.urls.append((url, headers)); return self.responses[url]
def test_github_enumeration_is_scoped_and_authenticated():
url = "https://api.github.com/repos/acme/docs/git/trees/main?recursive=1"
http = FakeHTTP({url: {"tree": [{"type": "blob", "path": "a.md", "sha": "s", "url": "u"}]}})
rows = list(GitHubConnector(StaticTokenProvider("t"), http).enumerate({"owner":"acme","repo":"docs","ref":"main"}))
assert rows[0].path == "a.md" and http.urls[0][1]["Authorization"] == "Bearer t"
def test_github_webhook_normalizes_delete():
event = GitHubConnector(StaticTokenProvider("t"), FakeHTTP({})).normalize_webhook({"X-GitHub-Delivery":"d","X-GitHub-Event":"push"}, {"ref":"refs/heads/main","after":"sha","repository":{"owner":{"login":"a"},"name":"r"}})
assert event.event_id == "d" and event.cursor_hint.value == "sha"
def test_sharepoint_delta_and_acl():
delta = "https://graph.microsoft.com/v1.0/sites/s/drives/d/root/delta"
acl = "https://graph.microsoft.com/v1.0/sites/s/drives/d/root/permissions"
http = FakeHTTP({delta: {"value":[{"id":"1","name":"x","file":{},"webUrl":"w"}], "@odata.deltaLink":"next"}, acl:{"value":[{"id":"p","roles":["read"],"grantedToV2":{"user":{"id":"u"}}}]}})
c = SharePointConnector(StaticTokenProvider("t"), http)
assert list(c.enumerate({"site_id":"s","drive_id":"d"}))[0].id == "1"
assert list(c.acl({"site_id":"s","drive_id":"d"}))[0].subject_id == "u"
def test_scope_rejects_path_injection():
try: list(GitHubConnector(StaticTokenProvider("t"), FakeHTTP({})).enumerate({"owner":"a/b","repo":"r"}))
except ValueError: pass
else: raise AssertionError("unsafe scope accepted")