예제 #1
0
def test_setup_service_manager_creates_wirelesscar_service_as_expected(
    service_manager_mock_setup,
    patched_wirelesscar_client_service_class,
    mock_config_manager,
):
    mock_config_manager.retrieve_config.return_value = "fooConfig"
    setup_service_manager("subaru", CtsVersion.TWO_DOT_ZERO)
    patched_wirelesscar_client_service_class.assert_called_once_with(
        config="fooConfig")
예제 #2
0
def test_setup_service_manager_creates_siriusxm_service_as_expected(
    service_manager_mock_setup,
    patched_siriusxm_client_service_class,
    patched_get_main_table,
    mock_config_manager,
):
    mock_config_manager.retrieve_config.return_value = "fooConfig"
    patched_get_main_table.return_value = "foo"
    setup_service_manager(ProgramCode.TOYOTA, CtsVersion.ONE_DOT_ZERO)
    patched_siriusxm_client_service_class.assert_called_once_with(
        config="fooConfig", table="foo")
예제 #3
0
def test_setup_service_manager_creates_aeris_service_as_expected(
    service_manager_mock_setup,
    patched_aeris_client_service_class,
    mock_config_manager,
    patched_get_main_table,
):
    mock_config_manager.retrieve_config.return_value = "fooConfig"
    patched_get_main_table.return_value = "foo"
    setup_service_manager("vwcarnet", CtsVersion.TWO_DOT_ZERO)
    patched_aeris_client_service_class.assert_called_once_with(
        config="fooConfig", table="foo")
예제 #4
0
def test_setup_service_manager_creates_siriusxm_service_as_expected(
    service_manager_mock_setup,
    patched_siriusxm_client_service_class,
    patched_get_main_table,
    mock_config_manager,
    programcode,
):
    mock_config_manager.retrieve_config.return_value = "fooConfig"
    patched_get_main_table.return_value = "foo"
    setup_service_manager(programcode)
    patched_siriusxm_client_service_class.assert_called_once_with(
        config="fooConfig", table="foo")
예제 #5
0
def test_setup_service_manager_creates_vodafone_service_as_expected(
    service_manager_mock_setup,
    patched_vodafone_client_service_class,
    patched_get_main_table,
    patched_get_supplement_table,
    mock_config_manager,
):
    mock_config_manager.retrieve_config.return_value = "fooConfig"
    patched_get_main_table.return_value = "foo"
    patched_get_supplement_table.return_value = "foosupplement"
    setup_service_manager("porsche")
    patched_vodafone_client_service_class.assert_called_once_with(
        config="fooConfig",
        table="foo",
        supplementtable="foosupplement",
    )
예제 #6
0
async def create_agentAssignment(agentassignment_input: CreateAgentAssignmentCommand):
    logger.info(
        "AgentAssignment: Payload received for Referenceid: {} programcode: {}".format(
            agentassignment_input.referenceid, agentassignment_input.programcode
        ),
        extra={
            "programcode": agentassignment_input.programcode,
            "referenceid": agentassignment_input.referenceid,
            "action": "AgentAssignment",
        },
    )

    # Model creation.
    agentassignment = AgentAssignment(
        referenceid=agentassignment_input.referenceid,
        isassigned=agentassignment_input.isassigned,
        programcode=agentassignment_input.programcode,
    )

    service_manager = setup_service_manager(agentassignment.programcode)

    # service manager should pick service e.g. SiriusXm, FCA correctly.
    if service_manager.client_service.assign_agent(agentassignment):
        mappedresponse = CreateAgentAssignmentResponse(
            reference_id=agentassignment.response_referenceid,
            agent_assigned=agentassignment.isassigned,
            status=Status.CREATED,
        )

        logger.info(
            "AgentAssignment: Success for Referenceid:{} and programcode:{}".format(
                agentassignment.referenceid, agentassignment.programcode
            ),
            extra={
                "programcode": agentassignment.programcode,
                "referenceid": agentassignment.referenceid,
                "status-code": mappedresponse.status,
                "action": "AgentAssignment",
            },
        )
        return JSONApiSuccessResponse[CreateAgentAssignmentResponse](
            data=mappedresponse
        )
    else:
        exceptiontype = handle_error_responsestatus(agentassignment.responsestatus)
        logger.error(
            "Agentassignment:Failed for Referenceid:{} status:{} reason:{} programcode:{}".format(
                agentassignment.referenceid,
                agentassignment.responsestatus,
                agentassignment.responsemessage,
                agentassignment.programcode,
            ),
            extra={
                "programcode": agentassignment.programcode,
                "referenceid": agentassignment.referenceid,
                "status-code": exceptiontype().status_code,
                "action": "AgentAssignment",
            },
        )
        raise exceptiontype(agentassignment.responsemessage)
예제 #7
0
def test_setup_service_manager_creates_verizon_service_as_expected(
    service_manager_mock_setup,
    patched_verizon_client_service_class,
    patched_get_main_table,
    patched_get_supplement_table,
    mock_config_manager,
    programcode,
    ctsversion,
):
    mock_config_manager.retrieve_config.return_value = "fooConfig"
    patched_get_main_table.return_value = "foo"
    patched_get_supplement_table.return_value = "foosupplement"
    setup_service_manager(programcode, ctsversion)
    patched_verizon_client_service_class.assert_called_once_with(
        config="fooConfig",
        table="foo",
        supplementtable="foosupplement",
    )
예제 #8
0
async def getvehicleinfo(phonecontact:str):
    """
    Get vehicle data with ctsversion picks a service based on client telemtics version and returns vehicle data for msisdn.
    """
    getvehicle_input = GetVehicleDataCommand(
        msisdn=phonecontact,
        programcode=ProgramCode.PORSCHE,
        ctsversion=CtsVersion.ONE_DOT_ZERO,
    )
    logger.info(
        "GetVehicleInfo: Payload received for msisdn:{}".format(
            getvehicle_input.msisdn
        ),
        extra={
            "programcode": getvehicle_input.programcode,
            "cts-version": getvehicle_input.ctsversion,
            "action": "GetVehicleInfo",
        },
    )

    service_manager = setup_service_manager(
        getvehicle_input.programcode, getvehicle_input.ctsversion
    )
    dataresponse = service_manager.client_service.get_vehicleinfo(
        getvehicle_input.msisdn
    )
    if dataresponse.status == InternalStatusType.SUCCESS:
        logger.info(
            "GetVehicleInfo: Success for msisdn:{} status:{}".format(
                getvehicle_input.msisdn, dataresponse.status
            ),
            extra={
                "programcode": getvehicle_input.programcode,
                "cts-version": getvehicle_input.ctsversion,
                "status-code": dataresponse.status,
                "action": "GetVehicleInfo",
            },
        )
        
        return dataresponse.JSONData
    else:
        exceptiontype = handle_error_responsestatus(dataresponse.status)
        logger.error(
            "GetVehicleInfo::Failed for msisdn:{} status:{} reason:{}".format(
                getvehicle_input.msisdn,
                dataresponse.status,
                dataresponse.responsemessage,
            ),
            extra={
                "programcode": getvehicle_input.programcode,
                "cts-version": getvehicle_input.ctsversion,
                "status-code": exceptiontype().status_code,
                "action": "GetVehicleInfo",
            },
        )
        raise exceptiontype(dataresponse.responsemessage)
예제 #9
0
async def get_vehicledata(id: str, programcode: ProgramCode):
    """
    Get Vehicle  Data end point will return basic vehicle data.
    """
    logger.info(
        "GetVehicleData: Payload received for Id:{} ".format(id, programcode),
        extra={"programcode": programcode, "id": id, "action": "GetVehicleData"},
    )

    # service manager should pick service e.g. SiriusXm, FCA correctly.
    service_manager = setup_service_manager(programcode)
    dataresponse = service_manager.client_service.get_vehicledata(id, programcode)

    if dataresponse.status == InternalStatusType.SUCCESS:
        logger.info(
            "GetVehicleData: Success for Id:{} programcode:{}".format(id, programcode),
            extra={
                "programcode": programcode,
                "id": id,
                "status-code": dataresponse.status,
                "action": "GetVehicleData",
            },
        )

        mappedresponse = GetVehicleDataResponse(
            status=Status.SUCCESS,
            responsemessage="Successfully retrieved",
            header=Header(
                language=dataresponse.language,
                programcode=dataresponse.programcode,
                referenceid=dataresponse.referenceid,
                calldate=dataresponse.calldate,
                calltime=dataresponse.calltime,
                timestamp=dataresponse.timestamp,
            ),
            location=Location(
                latitude=dataresponse.latitude, longitude=dataresponse.longitude
            ),
            vehicle=Vehicle(vin=dataresponse.vin),
        )
        return JSONApiSuccessResponse[GetVehicleDataResponse](data=mappedresponse)
    else:
        exceptiontype = handle_error_responsestatus(dataresponse.status)
        logger.error(
            "GetVehicleData::Failed for id:{} status:{} reason:{} programcode:{}".format(
                id, dataresponse.status, dataresponse.responsemessage, programcode
            ),
            extra={
                "programcode": programcode,
                "id": id,
                "status-code": exceptiontype().status_code,
                "action": "GetVehicleData",
            },
        )
        raise exceptiontype(dataresponse.responsemessage)
예제 #10
0
async def terminate(
    msisdn: str,
    programcode: ProgramCode,
    ctsversion: CtsVersion,
    request: dict = Body(...),
):
    """
    Terminate msisdn with ctsversion picks a service based on client telematics version and terminate the call associated with msisdn.
    """
    logger.info(
        "Terminate: Payload received for msisdn:{}".format(msisdn),
        extra={
            "msisdn": msisdn,
            "programcode": programcode,
            "cts-version": ctsversion,
            "payload": request,
            "action": "Terminate",
        },
    )

    service_manager = setup_service_manager(programcode, ctsversion)
    dataresponse = service_manager.client_service.terminate(
        msisdn, programcode, request
    )
    if dataresponse.status == InternalStatusType.SUCCESS:
        mappedresponse = CreateTerminateResponse(msisdn=msisdn, status=Status.CREATED)
        logger.info(
            "Terminate: Success for msisdn:{}".format(msisdn),
            extra={
                "msisdn": msisdn,
                "programcode": programcode,
                "cts-version": ctsversion,
                "payload": request,
                "status-code": mappedresponse.status,
                "action": "Terminate",
            },
        )
        return JSONApiSuccessResponse[CreateTerminateResponse](data=mappedresponse)
    else:
        exceptiontype = handle_error_responsestatus(dataresponse.status)
        logger.error(
            "Terminate: Failed for msisdn:{} status:{} reason:{}".format(
                msisdn, dataresponse.status, dataresponse.responsemessage
            ),
            extra={
                "msisdn": msisdn,
                "programcode": programcode,
                "cts-version": ctsversion,
                "payload": request,
                "status-code": exceptiontype().status_code,
                "action": "Terminate",
            },
        )
        raise exceptiontype(dataresponse.responsemessage)
예제 #11
0
async def save_vehicledata(
    msisdn: str,
    programcode: ProgramCode,
    ctsversion: CtsVersion,
    request: dict = Body(...),
):
    """
    Save_VehicleData msisdn with ctsversion picks a service based on client telematics version and saves the vehicle data.
    """
    logger.info(
        "SaveVehicleData: Payload received for msisdn:{} data:{}".format(
            msisdn, request
        ),
        extra={
            "msisdn": msisdn,
            "programcode": programcode,
            "cts-version": ctsversion,
            "action": "SaveVehicleData",
        },
    )

    service_manager = setup_service_manager(programcode, ctsversion)

    saveresponse = service_manager.client_service.save_vehicledata(
        msisdn, programcode, request
    )
    if saveresponse.status == InternalStatusType.SUCCESS:
        mappedresponse = CreateSaveVehicleDataResponse(
            msisdn=msisdn,
            status=Status.CREATED,
            responsemessage=saveresponse.responsemessage,
        )
        logger.info(
            "SaveVehicleData: Success for msisdn:{}".format(msisdn),
            extra={
                "msisdn": msisdn,
                "programcode": programcode,
                "cts-version": ctsversion,
                "status-code": mappedresponse.status,
                "action": "SaveVehicleData",
            },
        )
        return JSONApiSuccessResponse[CreateSaveVehicleDataResponse](
            data=mappedresponse
        )
    else:
        raise save_msisdn_error(
            saveresponse.status,
            saveresponse.responsemessage,
            msisdn,
            programcode,
            ctsversion,
        )
예제 #12
0
async def create_terminate(terminate_input: CreateTerminateCommand):
    logger.info(
        "Terminate: Payload received for Referenceid:{} and programcode:{}".format(
            terminate_input.referenceid, terminate_input.programcode
        ),
        extra={
            "programcode": terminate_input.programcode,
            "referenceid": terminate_input.referenceid,
            "action": "Terminate",
        },
    )
    # model creation.
    terminate = Terminate(
        referenceid=terminate_input.referenceid,
        reasoncode=terminate_input.reasoncode,
        programcode=terminate_input.programcode,
    )

    service_manager = setup_service_manager(terminate.programcode)
    if service_manager.client_service.terminate(terminate):
        mappedresponse = CreateTerminateResponse(
            reference_id=terminate.response_referenceid, status=Status.CREATED
        )
        logger.info(
            "Terminate: Success for Referenceid:{} programcode:{}".format(
                terminate.response_referenceid, terminate.programcode
            ),
            extra={
                "programcode": terminate.programcode,
                "referenceid": terminate.referenceid,
                "status-code": mappedresponse.status,
                "action": "Terminate",
            },
        )
        return JSONApiSuccessResponse[CreateTerminateResponse](data=mappedresponse)
    else:
        exceptiontype = handle_error_responsestatus(terminate.status)
        logger.error(
            "Terminate: Failed for Referenceid:{} status:{} reason:{} programcode:{}".format(
                terminate.referenceid,
                terminate.status,
                terminate.responsemessage,
                terminate.programcode,
            ),
            extra={
                "programcode": terminate.programcode,
                "referenceid": terminate.referenceid,
                "status-code": exceptiontype().status_code,
                "action": "Terminate",
            },
        )
        raise exceptiontype(terminate.responsemessage)
예제 #13
0
async def health(programcode: ProgramCode, ctsversion: CtsVersion):
    """
    Performs a health check of an external service based on programcode and ctsversion
    """
    logger.info(
        "Health: Programcode {}, cts-version {} received for performing the healthcheck".format(
            programcode, ctsversion
        ),
        extra={
            "programcode": programcode,
            "cts-version": ctsversion,
            "action": "Health",
        },
    )

    service_manager = setup_service_manager(programcode, ctsversion)

    dataresponse = service_manager.client_service.health(programcode, ctsversion)

    if dataresponse.status == InternalStatusType.SUCCESS:
        logger.info(
            "Health: Success for programcode:{} cts-version:{}".format(
                programcode, ctsversion
            ),
            extra={
                "programcode": programcode,
                "cts-version": ctsversion,
                "status-code": dataresponse.status,
                "action": "Health",
            },
        )

        return JSONApiSuccessResponse[HealthCheckResponse](
            data=HealthCheckResponse(
                success=True, responsemessage=dataresponse.responsemessage
            )
        )
    else:
        exceptiontype = handle_error_responsestatus(dataresponse.status)
        logger.error(
            "Health: Failed for programcode:{} cts-version:{}, reason:{}".format(
                programcode, ctsversion, dataresponse.responsemessage
            ),
            extra={
                "programcode": programcode,
                "cts-version": ctsversion,
                "status-code": exceptiontype().status_code,
                "action": "Health",
            },
        )
        raise exceptiontype(dataresponse.responsemessage)
예제 #14
0
async def getvehicledata(msisdn: str, programcode: ProgramCode, ctsversion: CtsVersion):
    """
    Get vehicle data with ctsversion picks a service based on client telemtics version and returns vehicle data for msisdn.
    """
    getvehicle_input = GetVehicleDataCommand(
        msisdn=msisdn, programcode=programcode, ctsversion=ctsversion
    )
    logger.info(
        "GetVehicleData: Payload received for msisdn:{}".format(
            getvehicle_input.msisdn
        ),
        extra={
            "msisdn": getvehicle_input.msisdn,
            "programcode": getvehicle_input.programcode,
            "cts-version": getvehicle_input.ctsversion,
            "action": "GetVehicleData",
        },
    )

    service_manager = setup_service_manager(
        getvehicle_input.programcode, getvehicle_input.ctsversion
    )
    dataresponse = service_manager.client_service.get_vehicledata(
        getvehicle_input.msisdn, getvehicle_input.programcode
    )
    if dataresponse.status == InternalStatusType.SUCCESS:
        logger.info(
            "GetVehicleData: Success for msisdn:{} status:{}".format(
                getvehicle_input.msisdn, dataresponse.status
            ),
            extra={
                "msisdn": getvehicle_input.msisdn,
                "programcode": getvehicle_input.programcode,
                "cts-version": getvehicle_input.ctsversion,
                "status-code": dataresponse.status,
                "action": "GetVehicleData",
            },
        )
        mappedresponse = GetVehicleDataResponse(
            status=Status.SUCCESS,
            responsemessage="Successfully retrieved",
            header=Header(
                msisdn=dataresponse.msisdn,
                programcode=dataresponse.programcode,
                version=getvehicle_input.ctsversion,
                calldate=dataresponse.calldate,
                calltime=dataresponse.calltime,
                timestamp=dataresponse.timestamp,
                odometer=dataresponse.odometer,
                odometerscale=dataresponse.odometerscale,
                countrycode=dataresponse.countrycode,
            ),
            location=Location(
                latitude=dataresponse.latitude,
                longitude=dataresponse.longitude,
                headingdirection=dataresponse.headingdirection,
            ),
            vehicle=Vehicle(
                vin=dataresponse.vin,
                brand=Brand(
                    brandname=dataresponse.brand,
                    modelname=dataresponse.modelname,
                    modelyear=dataresponse.modelyear,
                    modelcode=dataresponse.modelcode,
                    modeldesc=dataresponse.modeldesc,
                ),
                mileage=dataresponse.mileage,
                mileageunit=dataresponse.mileageunit,
            ),
        )
        return JSONApiSuccessResponse[GetVehicleDataResponse](data=mappedresponse)
    else:
        exceptiontype = handle_error_responsestatus(dataresponse.status)
        logger.error(
            "GetVehicleData::Failed for msisdn: {} status: {} reason: {}".format(
                getvehicle_input.msisdn,
                dataresponse.status,
                dataresponse.responsemessage,
            ),
            extra={
                "msisdn": getvehicle_input.msisdn,
                "programcode": getvehicle_input.programcode,
                "cts-version": getvehicle_input.ctsversion,
                "status-code": exceptiontype().status_code,
                "action": "GetVehicleData",
            },
        )

        raise exceptiontype(dataresponse.responsemessage)
예제 #15
0
def test_setup_service_manager_siriusxm_creates_service_manager_as_expected(
        service_manager_mock_setup, mock_siriusxm_client_service, programcode):
    service_manager = setup_service_manager(programcode)
    assert service_manager.client_service == mock_siriusxm_client_service
예제 #16
0
def test_setup_service_manager_calls_config_manager_retrieve_vodafone_config_as_expected(
        service_manager_mock_setup, mock_config_manager):
    setup_service_manager("porsche", CtsVersion.ONE_DOT_ZERO)
    mock_config_manager.retrieve_config.assert_has_calls(
        [call(VodafoneConfig)])
예제 #17
0
def test_setup_service_manager_calls_config_manager_retrieve_aeris_config_as_expected(
        service_manager_mock_setup, mock_config_manager):
    setup_service_manager("vwcarnet", CtsVersion.TWO_DOT_ZERO)
    mock_config_manager.retrieve_config.assert_has_calls([call(AerisConfig)])
예제 #18
0
async def save_vehicledata(
    request: dict = Body(...),
):  # Get the request as dict object in body
    """
    Saves the Vehicle Data and Return the Hex Data Response back for OCCAS.
    """
    logger.info(
        "Payload received: {}".format(request),
        extra={
            "programcode": request["programcode"] if "programcode" in request else None,
            "cts-version": None,
            "referenceid": request["referenceid"] if "referenceid" in request else None,
            "action": "SaveVehicleData",
        },
    )

    if "programcode" not in request or "referenceid" not in request:
        exceptiontype = handle_error_responsestatus(InternalStatusType.BADREQUEST)
        logger.error(
            "SaveVehicleData: Json payload: {} is invalid".format(
                request,
            ),
            exc_info=True,
            stack_info=True,
            extra={
                "programcode": request["programcode"]
                if "programcode" in request
                else None,
                "cts-version": None,
                "payload": request,
                "referenceid": request["referenceid"]
                if "referenceid" in request
                else None,
                "status-code": exceptiontype().status_code,
                "action": "SaveVehicleData",
            },
        )
        raise exceptiontype(
            "SaveVehicleData: Json payload is invalid. Payload requires programcode and referenceid"
        )

    # service manager should pick service e.g. SiriusXm, FCA correctly.
    service_manager = setup_service_manager(request["programcode"])

    saveresponse = service_manager.client_service.save_vehicledata(request)
    if saveresponse.status == InternalStatusType.SUCCESS:
        # For OCCAS save data, we need to return very simple HEX data response back.
        hexdata = saveresponse.hexvehicledata
        hexdataviewmodel = CreateVehicleHexData(
            VarName=hexdata.VarName, Value=hexdata.Value
        )
        logger.info(
            "SaveVehicleData: Success for Referenceid: {} programcode: {}".format(
                request["referenceid"], request["programcode"]
            ),
            extra={
                "programcode": request["programcode"],
                "cts-version": None,
                "payload": request,
                "referenceid": request["referenceid"],
                "status-code": saveresponse.status,
                "action": "SaveVehicleData",
            },
        )
        return [hexdataviewmodel]
    else:
        exceptiontype = handle_error_responsestatus(saveresponse.status)
        logger.error(
            "SaveVehicleData::Failed for Referenceid:{} status:{} reason:{} programcode:{}".format(
                saveresponse.referenceid,
                saveresponse.status,
                saveresponse.responsemessage,
                saveresponse.programcode,
            ),
            extra={
                "programcode": saveresponse.programcode,
                "cts-version": None,
                "payload": request,
                "referenceid": saveresponse.referenceid,
                "status-code": exceptiontype().status_code,
                "action": "SaveVehicleData",
            },
        )
        raise exceptiontype(saveresponse.responsemessage)
예제 #19
0
def test_setup_service_manager_calls_config_manager_retrieve_siriusxm_config_as_expected(
        service_manager_mock_setup, mock_config_manager):
    setup_service_manager("toyota", CtsVersion.ONE_DOT_ZERO)
    mock_config_manager.retrieve_config.assert_has_calls(
        [call(SiriusXmConfig)])
예제 #20
0
def test_setup_service_manager_toyota_with_version_creates_service_manager_as_expected(
        service_manager_mock_setup, mock_tmna_client_service):
    service_manager = setup_service_manager("toyota", "2.0")
    assert service_manager.client_service == mock_tmna_client_service
예제 #21
0
def test_setup_service_manager_subaru_with_version_creates_service_manager_as_expected(
        service_manager_mock_setup, mock_wirelesscar_client_service):
    service_manager = setup_service_manager("subaru", "2.0")
    assert service_manager.client_service == mock_wirelesscar_client_service
예제 #22
0
def test_setup_service_manager_toyota_creates_service_manager_as_expected(
        service_manager_mock_setup, mock_siriusxm_client_service):
    service_manager = setup_service_manager("toyota")
    assert service_manager.client_service == mock_siriusxm_client_service
예제 #23
0
def test_setup_service_manager_porsche_with_version_creates_service_manager_as_expected(
        service_manager_mock_setup, mock_vodafone_client_service):
    service_manager = setup_service_manager("porsche", "1.0")
    assert service_manager.client_service == mock_vodafone_client_service
예제 #24
0
def test_setup_service_manager_calls_config_manager_retrieve_fca_config_as_expected(
        service_manager_mock_setup, mock_config_manager):
    setup_service_manager("fca")
    mock_config_manager.retrieve_config.assert_has_calls([call(FcaConfig)])
예제 #25
0
def test_setup_service_manager_calls_config_manager_retrieve_tmna_config_as_expected(
        service_manager_mock_setup, mock_config_manager):
    setup_service_manager("toyota", CtsVersion.TWO_DOT_ZERO)
    mock_config_manager.retrieve_config.assert_has_calls([call(TmnaConfig)])
예제 #26
0
def test_setup_service_manager_calls_config_manager_retrieve_wirelesscar_config_as_expected(
        service_manager_mock_setup, mock_config_manager):
    setup_service_manager("subaru", CtsVersion.TWO_DOT_ZERO)
    mock_config_manager.retrieve_config.assert_has_calls(
        [call(WirelessCarConfig)])
예제 #27
0
async def save_vehicleinfo(request: dict = Body(...)):
    """
    Save_VehicleData for PORSCHE picks vodafone service based on extracted msisdn and client telematics version from the payload, and saves the vehicle data.
    """
    if (
        "userData" not in request
        or "phoneContact" not in request["userData"]
        or request["userData"]["phoneContact"] is None
    ):
        raise save_msisdn_error(
            InternalStatusType.BADREQUEST,
            "Missing PhoneContact/Msisdn",
            "NotAvailable",
            ProgramCode.PORSCHE,
            CtsVersion.ONE_DOT_ZERO,
        )

    getvehicle_input = GetVehicleDataCommand(
        msisdn=request["userData"]["phoneContact"],
        programcode=ProgramCode.PORSCHE,
        ctsversion=CtsVersion.ONE_DOT_ZERO,
    )

    getvehicle_input.msisdn = reformat_msisdn(getvehicle_input.msisdn)

    logger.info(
        "SaveVehicleData: Payload received for msisdn:{} data:{}".format(
            getvehicle_input.msisdn, request
        ),
        extra={
            "msisdn": getvehicle_input.msisdn,
            "programcode": getvehicle_input.programcode,
            "cts-version": getvehicle_input.ctsversion,
            "action": "SaveVehicleData",
        },
    )

    service_manager = setup_service_manager(
        getvehicle_input.programcode, getvehicle_input.ctsversion
    )

    saveresponse = service_manager.client_service.save_vehicledata(
        getvehicle_input.msisdn, getvehicle_input.programcode, request
    )
    if saveresponse.status == InternalStatusType.SUCCESS:
        mappedresponse = CreateSaveVehicleDataResponse(
            msisdn=getvehicle_input.msisdn,
            status=Status.SUCCESS,
            responsemessage=saveresponse.responsemessage,
        )
        logger.info(
            "SaveVehicleData: Success for msisdn:{}".format(getvehicle_input.msisdn),
            extra={
                "msisdn": getvehicle_input.msisdn,
                "programcode": getvehicle_input.programcode,
                "cts-version": getvehicle_input.ctsversion,
                "status-code": mappedresponse.status,
                "action": "SaveVehicleData",
            },
        )
        return JSONApiSuccessResponse[CreateSaveVehicleDataResponse](
            data=mappedresponse
        )
    else:
        raise save_msisdn_error(
            saveresponse.status,
            saveresponse.responsemessage,
            getvehicle_input.msisdn,
            getvehicle_input.programcode,
            getvehicle_input.ctsversion,
        )
예제 #28
0
def test_setup_service_manager_verizon_creates_service_manager_as_expected(
        service_manager_mock_setup, mock_verizon_client_service, programcode,
        ctsversion):
    service_manager = setup_service_manager(programcode, ctsversion)
    assert service_manager.client_service == mock_verizon_client_service
예제 #29
0
def test_setup_service_manager_aeris_creates_service_manager_as_expected(
        service_manager_mock_setup, mock_aeris_client_service):
    service_manager = setup_service_manager(ProgramCode.VWCARNET,
                                            CtsVersion.TWO_DOT_ZERO)
    assert service_manager.client_service == mock_aeris_client_service
예제 #30
0
def test_setup_service_manager_calls_config_manager_retrieve_siriusxm_config_as_expected(
        service_manager_mock_setup, mock_config_manager, programcode):
    setup_service_manager(programcode)
    mock_config_manager.retrieve_config.assert_has_calls(
        [call(SiriusXmConfig)])