OpenMetadata/ingestion/tests/integration/powerbi/test_powerbi_file_client.py
Onkar Ravgan 38e2793705
MINOR: Enabled pbit file test (#16531)
* Enabled pbit file test

* Updated test

* update test

* fixed pylint
2024-06-07 17:59:45 +05:30

109 lines
3.3 KiB
Python

# Copyright 2024 Collate
# Licensed 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.
"""
PowerBI File Client tests
"""
import os
from unittest import TestCase
from metadata.generated.schema.entity.services.connections.dashboard.powerBIConnection import (
PowerBIConnection,
)
from metadata.ingestion.source.dashboard.powerbi.file_client import (
PowerBiFileClient,
_get_datamodel_schema_list,
)
current_dir = os.getcwd()
powerbi_connection_config = {
"type": "PowerBI",
"clientId": "client_id",
"clientSecret": "client_secret",
"tenantId": "tenant_id",
"scope": ["https://analysis.windows.net/powerbi/api/.default"],
"pagination_entity_per_page": 100,
"useAdminApis": False,
"pbitFilesSource": {
"pbitFileConfigType": "local",
"path": f"{current_dir}/ingestion/tests/integration/powerbi/resources",
"pbitFilesExtractDir": f"{current_dir}/ingestion/tests/integration/powerbi/resources/extracted",
},
}
EXPECTED_TABLE_NAMES = ["customers", "orders", "customers_model"]
EXPECTED_COLUMNS = {
"customer_id",
"first_name",
"number_of_orders",
"first_order",
"last_name",
"order_date",
"credit_card_amount",
"bank_transfer_amount",
"amount",
"gift_card_amount",
"customer_lifetime_value",
"order_id",
"status",
"coupon_amount",
"most_recent_order",
}
EXPECTED_DATASET_IDS = [
"c5bf4b57-1de4-4c7f-ae3a-b151f36a8260",
"a7026844-8de5-4419-b312-3162da41ff41",
]
EXPECTED_REPORT_IDS = [
"3c8875f2-f68c-4d9a-bacb-4c4b6bf03a12",
"c9b7a5c2-ffaa-4411-a8e9-9099f584dbe9",
]
class PowerBIFileClientTests(TestCase):
"""
Check methods from powerbi/file_client.py
"""
file_client = PowerBiFileClient(PowerBIConnection(**powerbi_connection_config))
def test_parsing_pbit_files(self):
"""
Test unzipping pbit files from local and extract the datamodels and connections
"""
datamodel_mappings = _get_datamodel_schema_list(
path=self.file_client.config.pbitFilesSource.path
)
all_tables = []
for schema in datamodel_mappings:
# test the table and columns from the pbit file
for table in schema.tables:
if table.name in EXPECTED_TABLE_NAMES:
all_tables.append(table.name)
for column in table.columns:
self.assertIn(column.name, EXPECTED_COLUMNS)
# test the connection objects from the pbit file
for connection in schema.connectionFile.RemoteArtifacts:
self.assertIn(connection.DatasetId, EXPECTED_DATASET_IDS)
self.assertIn(
connection.ReportId,
EXPECTED_REPORT_IDS,
)
EXPECTED_TABLE_NAMES.sort()
all_tables.sort()
self.assertEqual(EXPECTED_TABLE_NAMES, all_tables)