Exemple #1
0
def test_add_flow_to_github_already_added():
    storage = GitHub(repo="test/repo", path="flow.py")

    f = Flow("test")
    assert f.name not in storage
    assert storage.add_flow(f) == "flow.py"
    assert f.name in storage

    with pytest.raises(ValueError):
        storage.add_flow(f)
Exemple #2
0
def test_get_flow_missing_repo(github_client, caplog):
    github_client.get_repo.side_effect = github.UnknownObjectException(404, {})

    storage = GitHub(repo="test/repo", path="flow.py")
    storage.add_flow(Flow("test"))

    with pytest.raises(github.UnknownObjectException):
        storage.get_flow("test")

    assert "Repo 'test/repo' not found." in caplog.text
Exemple #3
0
def test_get_flow_missing_file(github_client, ref, caplog):
    repo = github_client.get_repo.return_value
    repo.get_contents.side_effect = github.UnknownObjectException(404, {})

    storage = GitHub(repo="test/repo", path="flow.py", ref=ref)
    storage.add_flow(Flow("test"))

    ref = ref or "main"

    with pytest.raises(github.UnknownObjectException):
        storage.get_flow("test")

    assert f"File 'flow.py' not found in repo 'test/repo', ref {ref!r}" in caplog.text
Exemple #4
0
def test_add_flow_to_github_storage():
    storage = GitHub(repo="test/repo", path="flow.py")

    f = Flow("test")
    assert f.name not in storage
    assert storage.add_flow(f) == "flow.py"
    assert f.name in storage
Exemple #5
0
def test_get_flow_github(monkeypatch):
    f = Flow("test")

    github = MagicMock()
    monkeypatch.setattr("prefect.utilities.git.Github", github)

    extract_flow_from_file = MagicMock(return_value=f)
    monkeypatch.setattr("prefect.storage.github.extract_flow_from_file",
                        extract_flow_from_file)

    storage = GitHub(repo="test/repo", path="flow", ref="my_branch")

    assert f.name not in storage
    storage.add_flow(f)

    new_flow = storage.get_flow(f.name)
    assert extract_flow_from_file.call_args[1]["flow_name"] == f.name
    assert new_flow.run()
Exemple #6
0
def test_get_flow(github_client, ref, caplog):
    storage = GitHub(repo="test/repo", path="flow.py", ref=ref)
    storage.add_flow(Flow("test"))

    f = storage.get_flow("test")
    assert github_client.get_repo.call_args[0][0] == "test/repo"
    repo = github_client.get_repo.return_value

    assert repo.get_commit.call_args[0][0] == ref or "main"
    assert repo.get_contents.call_args[0][0] == "flow.py"
    assert repo.get_contents.call_args[1]["ref"] == "mycommitsha"

    assert f.name == "test"
    state = f.run()
    assert state.is_successful()

    msg = "Downloading flow from GitHub storage - repo: 'test/repo', path: 'flow.py'"
    if ref is not None:
        msg += f", ref: {ref!r}"
    assert msg in caplog.text
    assert "Flow successfully downloaded. Using commit: mycommitsha" in caplog.text
Exemple #7
0
def test_get_flow_github(monkeypatch):
    f = Flow("test")

    github = MagicMock()
    monkeypatch.setattr("prefect.utilities.git.Github", github)

    monkeypatch.setattr(
        "prefect.storage.github.extract_flow_from_file",
        MagicMock(return_value=f),
    )

    with pytest.raises(ValueError):
        storage = GitHub(repo="test/repo")
        storage.get_flow()

    storage = GitHub(repo="test/repo", path="flow")

    assert f.name not in storage
    flow_location = storage.add_flow(f)

    new_flow = storage.get_flow(flow_location, ref="my_branch")
    assert new_flow.run()