Skip to content

Commit 31bc10b

Browse files
Adding unit tests for cli.py
1 parent 6816265 commit 31bc10b

File tree

1 file changed

+114
-0
lines changed

1 file changed

+114
-0
lines changed

tests/test_cli.py

Lines changed: 114 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,114 @@
1+
import unittest
2+
from unittest.mock import MagicMock, patch
3+
from src.cli import DLTMeta, OnboardCommand, DeployCommand, DLT_META_RUNNER_NOTEBOOK
4+
5+
6+
class CliTests(unittest.TestCase):
7+
onboarding_file_path = "tests/resources/onboarding.json"
8+
onboard_cmd = OnboardCommand(
9+
dbr_version="7.3",
10+
dbfs_path="/dbfs",
11+
onboarding_file_path=onboarding_file_path,
12+
onboarding_files_dir_path="tests/resources/",
13+
onboard_layer="bronze",
14+
env="dev",
15+
import_author="John Doe",
16+
version="1.0",
17+
cloud="aws",
18+
dlt_meta_schema="dlt_meta",
19+
bronze_dataflowspec_path="tests/resources/bronze_dataflowspec",
20+
silver_dataflowspec_path="tests/resources/silver_dataflowspec",
21+
uc_enabled=True,
22+
uc_catalog_name="uc_catalog",
23+
overwrite=True,
24+
bronze_dataflowspec_table="bronze_dataflowspec",
25+
silver_dataflowspec_table="silver_dataflowspec",
26+
update_paths=True
27+
)
28+
deploy_cmd = DeployCommand(
29+
layer="bronze",
30+
onboard_group="A1",
31+
dlt_meta_schema="dlt_meta",
32+
pipeline_name="unittest_dlt_pipeline",
33+
dataflowspec_table="dataflowspec_table",
34+
dlt_target_schema="dlt_target_schema",
35+
num_workers=1,
36+
uc_catalog_name="uc_catalog",
37+
dataflowspec_path="tests/resources/dataflowspec",
38+
uc_enabled=True,
39+
serverless=False,
40+
dbfs_path="/dbfs",
41+
)
42+
43+
@patch('src.cli.WorkspaceClient')
44+
def test_onboard(self, mock_workspace_client):
45+
mock_dbfs = MagicMock()
46+
mock_jobs = MagicMock()
47+
mock_workspace_client.dbfs = mock_dbfs
48+
mock_workspace_client.jobs = mock_jobs
49+
mock_workspace_client.dbfs.exists.return_value = False
50+
mock_workspace_client.dbfs.create.return_value = None
51+
mock_workspace_client.dbfs.upload.return_value = None
52+
mock_workspace_client.dbfs.copy.return_value = None
53+
mock_workspace_client.jobs.create.return_value = MagicMock(job_id="job_id")
54+
mock_workspace_client.jobs.run_now.return_value = MagicMock(run_id="run_id")
55+
56+
dltmeta = DLTMeta(mock_workspace_client)
57+
dltmeta._wsi = mock_workspace_client.return_value
58+
with patch.object(dltmeta._wsi, "_upload_wheel", return_value="/path/to/wheel"):
59+
dltmeta.onboard(self.onboard_cmd)
60+
61+
mock_workspace_client.dbfs.exists.assert_called_once_with('/dbfs/dltmeta_conf/')
62+
mock_workspace_client.dbfs.create.assert_called_once_with(
63+
path="/dbfs/dltmeta_conf/",
64+
overwrite=True
65+
)
66+
mock_workspace_client.dbfs.upload.assert_called_once()
67+
print(mock_workspace_client.dbfs.copy.call_args_list)
68+
mock_workspace_client.dbfs.copy.assert_called_once_with(
69+
"tests/resources/",
70+
"/dbfs/dltmeta_conf/",
71+
overwrite=True,
72+
recursive=True
73+
)
74+
mock_workspace_client.jobs.create.assert_called_once()
75+
mock_workspace_client.jobs.run_now.assert_called_once_with(job_id="job_id")
76+
77+
@patch('src.cli.WorkspaceClient')
78+
def test_create_onnboarding_job(self, mock_workspace_client):
79+
80+
mock_workspace_client.jobs.create.return_value = MagicMock(job_id="job_id")
81+
dltmeta = DLTMeta(mock_workspace_client)
82+
dltmeta._wsi = mock_workspace_client.return_value
83+
with patch.object(dltmeta._wsi, "_upload_wheel", return_value="/path/to/wheel"):
84+
job = dltmeta.create_onnboarding_job(self.onboard_cmd)
85+
86+
mock_workspace_client.jobs.create.assert_called_once()
87+
self.assertEqual(job.job_id, "job_id")
88+
89+
@patch('src.cli.WorkspaceClient')
90+
def test_install_folder(self, mock_workspace_client):
91+
dltmeta = DLTMeta(mock_workspace_client)
92+
dltmeta._wsi = mock_workspace_client.return_value
93+
dltmeta._install_folder = MagicMock(return_value="/Users/name/dlt-meta")
94+
folder = dltmeta._install_folder()
95+
self.assertEqual(folder, "/Users/name/dlt-meta")
96+
97+
@patch('src.cli.WorkspaceClient')
98+
def test_create_dlt_meta_pipeline(self, mock_workspace_client):
99+
mock_workspace_client.pipelines.create.return_value = MagicMock(pipeline_id="pipeline_id")
100+
mock_workspace_client.workspace.mkdirs.return_value = None
101+
mock_workspace_client.workspace.upload.return_value = None
102+
dltmeta = DLTMeta(mock_workspace_client)
103+
dltmeta._wsi = mock_workspace_client.return_value
104+
dltmeta._wsi._upload_wheel.return_value = None
105+
dltmeta._my_username = MagicMock(return_value="name")
106+
with patch.object(dltmeta._wsi, "_upload_wheel", return_value="/path/to/wheel"):
107+
dltmeta._create_dlt_meta_pipeline(self.deploy_cmd)
108+
runner_notebook_py = DLT_META_RUNNER_NOTEBOOK.format(remote_wheel='/path/to/wheel').encode("utf8")
109+
runner_notebook_path = f"{dltmeta._install_folder()}/init_dlt_meta_pipeline.py"
110+
mock_workspace_client.workspace.mkdirs.assert_called_once_with("/Users/name/dlt-meta")
111+
mock_workspace_client.workspace.upload.assert_called_once_with(runner_notebook_path,
112+
runner_notebook_py,
113+
overwrite=True)
114+
mock_workspace_client.pipelines.create.assert_called_once()

0 commit comments

Comments
 (0)