Skip to content

Commit

Permalink
Fix test_no_force_upload
Browse files Browse the repository at this point in the history
  • Loading branch information
kenodegard committed Jan 9, 2024
1 parent 345b8d1 commit 3b5550c
Showing 1 changed file with 42 additions and 18 deletions.
60 changes: 42 additions & 18 deletions tests/cli/test_main_build.py
Original file line number Diff line number Diff line change
@@ -1,10 +1,14 @@
# Copyright (C) 2014 Anaconda, Inc
# SPDX-License-Identifier: BSD-3-Clause
from __future__ import annotations

import os
import re
from pathlib import Path

import pytest
from pytest import FixtureRequest, MonkeyPatch
from pytest_mock import MockerFixture

from conda_build import api
from conda_build.cli import main_build, main_render
Expand All @@ -14,8 +18,13 @@
context,
reset_context,
)
from conda_build.config import Config, zstd_compression_level_default
from conda_build.config import (
Config,
zstd_compression_level_default,
)
from conda_build.exceptions import DependencyNeedsBuildingError
from conda_build.metadata import MetaData
from conda_build.os_utils.external import find_executable
from conda_build.utils import get_build_folders, on_win, package_has_file

from ..utils import metadata_dir
Expand Down Expand Up @@ -265,25 +274,40 @@ def test_purge_all(testing_workdir, testing_metadata):


@pytest.mark.serial
def test_no_force_upload(mocker, testing_workdir, testing_metadata, request):
with open(os.path.join(testing_workdir, ".condarc"), "w") as f:
f.write("anaconda_upload: True\n")
f.write("conda_build:\n")
f.write(" force_upload: False\n")
del testing_metadata.meta["test"]
api.output_yaml(testing_metadata, "meta.yaml")
args = ["--no-force-upload", testing_workdir]
call = mocker.patch("subprocess.call")
def test_no_force_upload(
mocker: MockerFixture,
monkeypatch: MonkeyPatch,
testing_workdir: str | os.PathLike | Path,
testing_metadata: MetaData,
request: FixtureRequest,
):
request.addfinalizer(_reset_config)
_reset_config([os.path.join(testing_workdir, ".condarc")])
main_build.execute(args)
call = mocker.patch("subprocess.call")
anaconda = find_executable("anaconda")

# render recipe
api.output_yaml(testing_metadata, "meta.yaml")
pkg = api.get_output_file_path(testing_metadata)
call.assert_called_once_with(["anaconda", "upload", pkg])
args = [testing_workdir]
with open(os.path.join(testing_workdir, ".condarc"), "w") as f:
f.write("anaconda_upload: True\n")
main_build.execute(args)
call.assert_called_once_with(["anaconda", "upload", "--force", pkg])

# mock Config.set_keys to always set anaconda_upload to True
# conda's Context + conda_build's MetaData & Config objects interact in such an
# awful way that mocking these configurations is ugly and confusing, all of it
# needs major refactoring
set_keys = Config.set_keys # store original method
monkeypatch.setattr(
Config,
"set_keys",
lambda self, **kwargs: set_keys(self, **{**kwargs, "anaconda_upload": True}),
)

# check for normal upload
main_build.execute(["--no-force-upload", testing_workdir])
call.assert_called_once_with([anaconda, "upload", *pkg])
call.reset_mock()

# check for force upload
main_build.execute([testing_workdir])
call.assert_called_once_with([anaconda, "upload", "--force", *pkg])


@pytest.mark.slow
Expand Down

0 comments on commit 3b5550c

Please sign in to comment.