import logging
import uuid
from datetime import datetime, timezone
from pathlib import Path
from q2_sdk.models.cores.queries.base_query import BaseQuery
from ...query_helpers import JinjaBasedQuery
[docs]
class InitialSearchQuery(BaseQuery):
"""
Handles the construction of demographic core requests and mock responses for testing for FiservCleartouch core.
"""
def __init__(self, logger: logging.Logger, config, req_dict: dict):
"""
:param logger: reference to calling request's logger (self.logger in your extension)
:param req_dict: Required data dictionary for queries. Dictionary will contain requested information, using the SSN as the search value.
"""
self.initial_search_query = JinjaBasedQuery
self.config = config
self.req_dict = req_dict
self.context = {}
super().__init__(logger)
[docs]
def build(self) -> str:
"""
Constructs and returns the core request from a template and provided parameters.
"""
request_type = "initial_search"
path = Path(__file__).parent
templates_path = path / "templates"
request_template = f"{request_type}_request.xml"
mock_path = path / "mock_responses"
mock_response_template = f"{request_type}_mock_response.xml"
self.context = {
"configs": self.config,
"date": datetime.now(timezone.utc),
"tax_id": self.req_dict.get("ssn"),
"guid1": uuid.uuid4(),
"guid2": uuid.uuid4(),
}
self.initial_search_query = JinjaBasedQuery(
logger=self.logger,
templates_path=templates_path,
request_template=request_template,
mock_path=mock_path,
mock_response_template=mock_response_template,
context=self.context,
)
request = self.initial_search_query.build()
self.logger.info(f"Created a {request_type} call with {request_template}")
return request
[docs]
def mock_response(self, response_type: str = None) -> str:
"""
Constructs and returns a mock core response used for testing queries and mappers.
By default, mock response will return a successful cif core response. However, this can
be changed to handle various responses via the response_type param.
The response_type refers to the <expected_response>_mock_response.xml file located in
q2_core.FiservCommunicatorSignature.mock_responses directory. ``response_type`` defaults
to ``initial_search`` if not provided.
"""
if response_type:
self.initial_search_query.mock_response_template = (
f"{response_type}_mock_response.xml"
)
return self.initial_search_query.mock_response()