# Licensed to the Apache Software Foundation (ASF) under one # or more contributor license agreements. See the NOTICE file # distributed with this work for additional information # regarding copyright ownership. The ASF licenses this file # to you under the Apache License, Version 2.0 (the # "License"); you may not use this file except in compliance # with the License. You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, # software distributed under the License is distributed on an # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY # KIND, either express or implied. See the License for the # specific language governing permissions and limitations # under the License. import re import subprocess from typing import Any, Dict, List, Optional, Union from unittest import mock from unittest.mock import patch import pytest from tests.unit_tests.fixtures.bash_mock import BashMock original_run = subprocess.run def wrapped(*args: List[str], **kwargs: Optional[Dict[str, Any]]) -> Any: return original_run(*args, **kwargs) # type: ignore @pytest.mark.parametrize( "tag, expected_output, branch", [ ("1.0.0", "LATEST_TAG is master", "master"), ("2.1.0", "LATEST_TAG is master", "master"), ("2.1.1", "LATEST_TAG is latest", "master"), ("3.0.0", "LATEST_TAG is latest", "master"), ("2.1.0rc1", "LATEST_TAG is 2.1.0", "2.1.0"), ("", "LATEST_TAG is foo", "foo"), ("2.1", "LATEST_TAG is 2.1", "2.1"), ("does_not_exist", "LATEST_TAG is does-not-exist", "does_not_exist"), ], ) def test_tag_latest_release(tag: str, expected_output: str, branch: str) -> None: with mock.patch( "tests.unit_tests.fixtures.bash_mock.subprocess.run", wraps=wrapped ) as subprocess_mock: result = BashMock.docker_build_push(tag, branch) subprocess_mock.assert_called_once_with( f"./scripts/docker_build_push.sh {tag}", shell=True, capture_output=True, text=True, env={"TEST_ENV": "true", "GITHUB_REF": f"refs/heads/{branch}"}, ) assert re.search(expected_output, result.stdout, re.MULTILINE)