from app import tiktok_api


def _capture(monkeypatch):
    seen = {}

    def fake_request(method, url, **kwargs):
        seen.update(url=url, body=kwargs.get("json"))
        return {"data": {"publish_id": "p1", "upload_url": "https://upload"}}

    monkeypatch.setattr(tiktok_api, "_request", fake_request)
    return seen


def test_draft_upload_goes_to_the_inbox_without_post_info(monkeypatch):
    seen = _capture(monkeypatch)
    tiktok_api.init_video_upload("tok", 10, 10, 1, title="caption", privacy_level="PUBLIC_TO_EVERYONE", mode="draft")
    assert seen["url"] == tiktok_api.INBOX_INIT_URL
    assert seen["body"] == {"source_info": {"source": "FILE_UPLOAD", "video_size": 10, "chunk_size": 10, "total_chunk_count": 1}}


def test_draft_pull_goes_to_the_inbox(monkeypatch):
    seen = _capture(monkeypatch)
    tiktok_api.init_video_pull("tok", "https://x/v.mp4", title="caption")
    assert seen["url"] == tiktok_api.INBOX_INIT_URL
    assert "post_info" not in seen["body"]


def test_direct_post_keeps_post_info(monkeypatch):
    seen = _capture(monkeypatch)
    tiktok_api.init_video_pull("tok", "https://x/v.mp4", title="caption", privacy_level="SELF_ONLY", mode="direct")
    assert seen["url"] == tiktok_api.PUBLISH_INIT_URL
    assert seen["body"]["post_info"] == {"privacy_level": "SELF_ONLY", "title": "caption"}
