TestScanner now inserts new capabilities in database.
test_scanner_uploader will now insert new capabilities in the database. Change-Id: I7a054b73ee8958c08c67dc2b01a6a3b83eff0e83 Signed-off-by: croy <Christian.Roy@windriver.com>
This commit is contained in:
@@ -1,7 +1,8 @@
|
|||||||
|
from psycopg2.extras import RealDictCursor
|
||||||
|
|
||||||
from framework.database.connection.database_operation_manager import DatabaseOperationManager
|
from framework.database.connection.database_operation_manager import DatabaseOperationManager
|
||||||
from framework.database.objects.capability import Capability
|
from framework.database.objects.capability import Capability
|
||||||
from framework.logging.automation_logger import get_logger
|
from framework.logging.automation_logger import get_logger
|
||||||
from psycopg2.extras import RealDictCursor
|
|
||||||
|
|
||||||
|
|
||||||
class CapabilityOperation:
|
class CapabilityOperation:
|
||||||
@@ -12,16 +13,36 @@ class CapabilityOperation:
|
|||||||
def __init__(self):
|
def __init__(self):
|
||||||
self.database_operation_manager = DatabaseOperationManager()
|
self.database_operation_manager = DatabaseOperationManager()
|
||||||
|
|
||||||
|
def insert_capability(self, capability_name: str, capability_marker: str) -> Capability:
|
||||||
|
"""
|
||||||
|
Inserts into the database a new capability with capability_name and capability_marker passed in.
|
||||||
|
|
||||||
|
Args:
|
||||||
|
capability_name (str): the name of the new capability
|
||||||
|
capability_marker (str): the marker associated with the new capability
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
Capability: A Capability object with the capability_id generated from the database.
|
||||||
|
"""
|
||||||
|
insert_query = f"INSERT INTO capability (capability_name, capability_marker) " f"VALUES ('{capability_name}', '{capability_marker}') " f"returning capability_id"
|
||||||
|
|
||||||
|
results = self.database_operation_manager.execute_query(insert_query, cursor_factory=RealDictCursor)
|
||||||
|
if results: # can only ever be 1 result
|
||||||
|
capability = Capability(results[0]["capability_id"], capability_name, capability_marker)
|
||||||
|
return capability
|
||||||
|
|
||||||
|
raise ValueError("Unable to insert the capability and get a capability_id.")
|
||||||
|
|
||||||
def get_capability_by_marker(self, capability_marker: str) -> Capability:
|
def get_capability_by_marker(self, capability_marker: str) -> Capability:
|
||||||
"""
|
"""
|
||||||
Getter for capability given a capability name
|
Getter for capability given a capability name
|
||||||
|
|
||||||
Args:
|
Args:
|
||||||
capability_marker (): the marker
|
capability_marker (str): The marker used to identify the capability.
|
||||||
|
|
||||||
Returns: The capability
|
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
Capability: The capability object if found, -1 if no capability is found.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
get_capability_query = f"SELECT * FROM capability where capability_marker='{capability_marker}'"
|
get_capability_query = f"SELECT * FROM capability where capability_marker='{capability_marker}'"
|
||||||
results = self.database_operation_manager.execute_query(get_capability_query, cursor_factory=RealDictCursor)
|
results = self.database_operation_manager.execute_query(get_capability_query, cursor_factory=RealDictCursor)
|
||||||
|
|
||||||
@@ -29,9 +50,9 @@ class CapabilityOperation:
|
|||||||
if len(results) > 1:
|
if len(results) > 1:
|
||||||
get_logger().log_info(f"WARNING: We have found more than one result matching the Capability Name: {capability_marker}")
|
get_logger().log_info(f"WARNING: We have found more than one result matching the Capability Name: {capability_marker}")
|
||||||
result = results[0]
|
result = results[0]
|
||||||
capability = Capability(result['capability_id'], result['capability_name'], result['capability_marker'])
|
capability = Capability(result["capability_id"], result["capability_name"], result["capability_marker"])
|
||||||
|
|
||||||
return capability
|
return capability
|
||||||
else:
|
else:
|
||||||
get_logger().log_error(f"ERROR: no capability with the name {capability_marker}")
|
get_logger().log_warning(f"There is no capability with the name {capability_marker}")
|
||||||
return -1
|
return -1
|
||||||
|
|||||||
@@ -6,6 +6,7 @@ from framework.database.objects.testcase import TestCase
|
|||||||
from framework.database.operations.capability_operation import CapabilityOperation
|
from framework.database.operations.capability_operation import CapabilityOperation
|
||||||
from framework.database.operations.test_capability_operation import TestCapabilityOperation
|
from framework.database.operations.test_capability_operation import TestCapabilityOperation
|
||||||
from framework.database.operations.test_info_operation import TestInfoOperation
|
from framework.database.operations.test_info_operation import TestInfoOperation
|
||||||
|
from framework.logging.automation_logger import get_logger
|
||||||
from framework.pytest_plugins.collection_plugin import CollectionPlugin
|
from framework.pytest_plugins.collection_plugin import CollectionPlugin
|
||||||
|
|
||||||
|
|
||||||
@@ -120,14 +121,15 @@ class TestScannerUploader:
|
|||||||
capability_test_operation = TestCapabilityOperation()
|
capability_test_operation = TestCapabilityOperation()
|
||||||
|
|
||||||
# get all the capabilities associated with this test
|
# get all the capabilities associated with this test
|
||||||
capabilities = test.get_markers()
|
capability_markers = test.get_markers()
|
||||||
for capability in capabilities:
|
for capability_marker in capability_markers:
|
||||||
|
|
||||||
capability_object = capability_operation.get_capability_by_marker(capability)
|
capability_object = capability_operation.get_capability_by_marker(capability_marker)
|
||||||
|
|
||||||
# If capability does not exist, raise an exception
|
# If capability does not exist, insert it in the database and update the capability_object with the returned capability_id.
|
||||||
if capability_object == -1:
|
if capability_object == -1:
|
||||||
raise ValueError(f"No capability with name {capability} exists")
|
get_logger().log_info(f"Inserting a new Capability in the database for marker: {capability_marker}")
|
||||||
|
capability_object = capability_operation.insert_capability(capability_marker, capability_marker)
|
||||||
|
|
||||||
capability_id = capability_object.get_capability_id()
|
capability_id = capability_object.get_capability_id()
|
||||||
|
|
||||||
@@ -136,15 +138,15 @@ class TestScannerUploader:
|
|||||||
if mapping_id == -1:
|
if mapping_id == -1:
|
||||||
capability_test_operation.create_new_mapping(capability_id, test_info_id)
|
capability_test_operation.create_new_mapping(capability_id, test_info_id)
|
||||||
|
|
||||||
self.check_for_capabilities_to_remove(test_info_id, capabilities)
|
self.check_for_capabilities_to_remove(test_info_id, capability_markers)
|
||||||
|
|
||||||
def check_for_capabilities_to_remove(self, test_info_id: int, capabilities: [str]):
|
def check_for_capabilities_to_remove(self, test_info_id: int, capability_markers: [str]):
|
||||||
"""
|
"""
|
||||||
Checks for capabilities in the db that no longer exist on the test
|
Checks for capabilities in the db that no longer exist on the test
|
||||||
|
|
||||||
Args:
|
Args:
|
||||||
test_info_id (int): the test_info_id
|
test_info_id (int): the test_info_id
|
||||||
capabilities ([str]): the capabilities on the test
|
capability_markers ([str]): the capability markers on the test
|
||||||
"""
|
"""
|
||||||
|
|
||||||
# next we need to remove capabilities that are in the database but no longer on the test
|
# next we need to remove capabilities that are in the database but no longer on the test
|
||||||
@@ -155,7 +157,7 @@ class TestScannerUploader:
|
|||||||
db_marker_names = map(lambda db_capability: db_capability.get_capability_marker(), db_capabilities)
|
db_marker_names = map(lambda db_capability: db_capability.get_capability_marker(), db_capabilities)
|
||||||
|
|
||||||
# this will get the capabilities that exist in the db but not on the test itself
|
# this will get the capabilities that exist in the db but not on the test itself
|
||||||
capabilities_to_be_removed = list(set(db_marker_names).difference(capabilities))
|
capabilities_to_be_removed = list(set(db_marker_names).difference(capability_markers))
|
||||||
|
|
||||||
for marker_name in capabilities_to_be_removed:
|
for marker_name in capabilities_to_be_removed:
|
||||||
# find the correct db_capability
|
# find the correct db_capability
|
||||||
|
|||||||
Reference in New Issue
Block a user