blob: 9986dae463bcf3b574e6319adb8a898e00ea96d8 [file]
# 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 subprocess
from unittest import mock
from hamilton import driver
from hamilton.cli import logic
from tests.cli.resources import module_v1, module_v2
def test_git_directory_exists():
completed_process = subprocess.CompletedProcess(
args=["git", "rev-parse", "--show-toplevel"],
returncode=0,
stdout="/tmp/fake-repo\n",
stderr="",
)
with mock.patch("subprocess.run", return_value=completed_process) as run_mock:
git_base_dir = logic.get_git_base_directory()
assert git_base_dir == "/tmp/fake-repo"
run_mock.assert_called_once_with(
["git", "rev-parse", "--show-toplevel"],
stdout=subprocess.PIPE,
stderr=subprocess.PIPE,
text=True,
)
def test_map_nodes_to_origins():
expected_mapping = {
"customers_path": "customers_df",
"customers_df": "customers_df",
"orders_path": "orders_df",
"orders_df": "orders_df",
"customers_orders_df": "customers_orders_df",
"amount": "customers_orders_df",
"age": "customers_orders_df",
"country": "customers_orders_df",
"orders_per_customer": "orders_per_customer",
"average_order_by_customer": "average_order_by_customer",
"customer_summary_table": "customer_summary_table",
}
dr = driver.Builder().with_modules(module_v1).build()
node_to_origin = logic.map_nodes_to_functions(dr)
assert node_to_origin == expected_mapping
def test_diff_versions():
reference_versions = {
"average_order_by_customer": "b58a6",
"customer_summary_table": "6bf52",
"customers_df": "480be",
"customers_orders_df": "883f0",
"orders_df": "58e65",
"orders_per_customer": "6af6d",
}
current_versions = {
"average_order_by_customer": "5296f",
"customer_summary_table": "6bf52",
"customers_df": "480be",
"customers_orders_df": "883f0",
"orders_df": "58e65",
"orders_per_distributor": "6d64l",
}
diff = logic.diff_versions(
current_map=current_versions,
reference_map=reference_versions,
)
assert diff["reference_only"] == ["orders_per_customer"]
assert diff["current_only"] == ["orders_per_distributor"]
assert diff["edit"] == ["average_order_by_customer"]
def test_diff_node_versions():
current_dr = driver.Builder().with_modules(module_v2).build()
reference_dr = driver.Builder().with_modules(module_v1).build()
current_nodes = logic.hash_hamilton_nodes(current_dr)
reference_nodes = logic.hash_hamilton_nodes(reference_dr)
diff = logic.diff_versions(
current_map=current_nodes,
reference_map=reference_nodes,
)
assert diff["reference_only"] == ["orders_per_customer"]
assert diff["current_only"] == ["orders_per_distributor"]
assert diff["edit"] == ["average_order_by_customer", "customer_summary_table"]