1+ import datetime as dt
12from unittest .mock import create_autospec
23
3- import pytest
4-
54from databricks .labs .ucx .framework .owners import Ownership
65from databricks .labs .ucx .framework .utils import escape_sql_identifier
76from databricks .labs .ucx .hive_metastore .table_migration_status import (
109)
1110from databricks .labs .ucx .hive_metastore .tables import Table
1211from databricks .labs .ucx .progress .tables import TableProgressEncoder
12+ from databricks .labs .ucx .source_code .base import LineageAtom , UsedTable
13+ from databricks .labs .ucx .source_code .used_table import UsedTablesCrawler
1314
1415
15- @pytest .mark .parametrize (
16- "table" ,
17- [
18- Table ("hive_metastore" , "schema" , "table" , "MANAGED" , "DELTA" ),
19- ],
20- )
21- def test_table_progress_encoder_no_failures (mock_backend , table : Table ) -> None :
16+ def test_table_progress_encoder_no_failures (mock_backend ) -> None :
17+ table = Table ("hive_metastore" , "schema" , "table" , "MANAGED" , "DELTA" )
2218 ownership = create_autospec (Ownership )
2319 ownership .owner_of .return_value = "user"
2420 migration_status_crawler = create_autospec (TableMigrationStatusRefresher )
2521 migration_status_crawler .snapshot .return_value = (
2622 TableMigrationStatus (table .database , table .name , "main" , "default" , table .name , update_ts = None ),
2723 )
24+ used_tables_crawler = create_autospec (UsedTablesCrawler )
25+ used_tables_crawler .snapshot .return_value = []
2826 encoder = TableProgressEncoder (
29- mock_backend , ownership , migration_status_crawler , run_id = 1 , workspace_id = 123456789 , catalog = "test"
27+ mock_backend ,
28+ ownership ,
29+ migration_status_crawler ,
30+ [used_tables_crawler ],
31+ run_id = 1 ,
32+ workspace_id = 123456789 ,
33+ catalog = "test" ,
3034 )
3135
3236 encoder .append_inventory_snapshot ([table ])
@@ -36,29 +40,44 @@ def test_table_progress_encoder_no_failures(mock_backend, table: Table) -> None:
3640 assert len (rows [0 ].failures ) == 0
3741 ownership .owner_of .assert_called_once ()
3842 migration_status_crawler .snapshot .assert_called_once ()
43+ used_tables_crawler .snapshot .assert_called_once ()
3944
4045
41- @pytest .mark .parametrize (
42- "table" ,
43- [
44- Table ("hive_metastore" , "schema" , "table" , "MANAGED" , "DELTA" ),
45- ],
46- )
47- def test_table_progress_encoder_pending_migration_failure (mock_backend , table : Table ) -> None :
46+ def test_table_progress_encoder_pending_migration_failure (mock_backend ) -> None :
47+ table = Table ("hive_metastore" , "schema" , "table" , "MANAGED" , "DELTA" )
4848 ownership = create_autospec (Ownership )
4949 ownership .owner_of .return_value = "user"
5050 migration_status_crawler = create_autospec (TableMigrationStatusRefresher )
5151 migration_status_crawler .snapshot .return_value = (
5252 TableMigrationStatus (table .database , table .name ), # No destination: therefore not yet migrated.
5353 )
54+ used_tables_crawler_for_paths = create_autospec (UsedTablesCrawler )
55+ used_table = UsedTable (
56+ catalog_name = table .catalog ,
57+ schema_name = table .database ,
58+ table_name = table .name ,
59+ source_id = "test/test.py" ,
60+ source_timestamp = dt .datetime .now (tz = dt .timezone .utc ),
61+ source_lineage = [LineageAtom (object_type = "NOTEBOOK" , object_id = "test/test.py" )],
62+ assessment_start_timestamp = dt .datetime .now (tz = dt .timezone .utc ),
63+ assessment_end_timestamp = dt .datetime .now (tz = dt .timezone .utc ),
64+ )
65+ used_tables_crawler_for_paths .snapshot .return_value = [used_table ]
5466 encoder = TableProgressEncoder (
55- mock_backend , ownership , migration_status_crawler , run_id = 1 , workspace_id = 123456789 , catalog = "test"
67+ mock_backend ,
68+ ownership ,
69+ migration_status_crawler ,
70+ [used_tables_crawler_for_paths ],
71+ run_id = 1 ,
72+ workspace_id = 123456789 ,
73+ catalog = "test" ,
5674 )
5775
5876 encoder .append_inventory_snapshot ([table ])
5977
6078 rows = mock_backend .rows_written_for (escape_sql_identifier (encoder .full_name ), "append" )
6179 assert len (rows ) > 0 , f"No rows written for: { encoder .full_name } "
62- assert rows [0 ].failures == ["Pending migration" ]
80+ assert rows [0 ].failures == ["Pending migration" , "Used by NOTEBOOK: test/test.py" ]
6381 ownership .owner_of .assert_called_once ()
6482 migration_status_crawler .snapshot .assert_called_once ()
83+ used_tables_crawler_for_paths .snapshot .assert_called_once ()
0 commit comments