def test_postal_fulfilment_request_payload():
    metadata = {"region_code": "GB-ENG", "case_id": str(uuid4())}
    fulfilment_request = FulfilmentRequest(metadata)

    assert isinstance(fulfilment_request.payload, bytes)

    postal_json_payload = json.loads(fulfilment_request.payload)
    transaction_id = postal_json_payload["event"].pop("transactionId")
    individual_case_id = postal_json_payload["payload"]["fulfilmentRequest"].pop(
        "individualCaseId"
    )
    case_id = postal_json_payload["payload"]["fulfilmentRequest"].pop("caseId")

    assert is_valid_uuid(transaction_id, version=4) is True
    assert is_valid_uuid(individual_case_id, version=4) is True
    assert is_valid_uuid(case_id, version=4) is True

    expected_sms_payload = {
        "event": {
            "type": "FULFILMENT_REQUESTED",
            "source": "QUESTIONNAIRE_RUNNER",
            "channel": "EQ",
            "dateTime": datetime.now(tz=tzutc()).isoformat(),
        },
        "payload": {
            "fulfilmentRequest": {
                "fulfilmentCode": "P_UAC_UACIP1",
                "contact": {},
            }
        },
    }
    assert postal_json_payload == expected_sms_payload
def use_jti_claim(jti_claim: str, expires_at: datetime) -> None:
    """
    Use a jti claim
    :param jti_claim: jti claim to mark as used.
    :param expires_at: the datetime at which the jti claim expires.
    :raises ValueError: when jti_claim is None.
    :raises TypeError: when jti_claim is not a valid uuid4.
    :raises JtiTokenUsed: when jti_claim has already been used.
    """
    if jti_claim is None:
        raise ValueError
    if not is_valid_uuid(jti_claim):
        logger.info("jti claim is invalid", jti_claim=jti_claim)
        raise TypeError

    try:
        # Make claim expire a little later than exp to avoid race conditions with out of sync clocks.
        expires_at += timedelta(seconds=60)

        jti = UsedJtiClaim(jti_claim, expires_at)
        current_app.eq["ephemeral_storage"].put(
            jti, overwrite=False)  # type: ignore
    except ItemAlreadyExistsError as e:
        logger.error("jti claim has already been used", jti_claim=jti_claim)
        raise JtiTokenUsed(jti_claim) from e
def test_get_address_lookup_api_auth_token(app: Flask):
    with app.test_request_context("/status"):
        app.config["ADDRESS_LOOKUP_API_AUTH_ENABLED"] = True
        secret = app.eq["secret_store"].get_secret_by_name(
            "ADDRESS_LOOKUP_API_AUTH_TOKEN_SECRET")
        session_timeout = app.config["EQ_SESSION_TIMEOUT_SECONDS"]
        leeway = app.config["ADDRESS_LOOKUP_API_AUTH_TOKEN_LEEWAY_IN_SECONDS"]
        expiry_time = (int(datetime.now(timezone.utc).timestamp()) +
                       session_timeout + leeway)

        token = get_address_lookup_api_auth_token()
        key = get_jwk_from_secret(secret)
        decoded_token = jwt.JWT(key=key, jwt=token)
        claims = json_loads(decoded_token.claims)

        assert claims["iss"] == "eq"
        assert claims["exp"] == expiry_time
        assert is_valid_uuid(claims["jti"])
def test_fulfilment_request_message():
    fulfilment_request = TestFulfilmentRequest()

    assert isinstance(fulfilment_request.message, bytes)
    json_message = json.loads(fulfilment_request.message)

    transaction_id = json_message["event"].pop("transactionId")
    assert is_valid_uuid(transaction_id, version=4) is True

    expected_json_message = {
        "event": {
            "type": "FULFILMENT_REQUESTED",
            "source": "QUESTIONNAIRE_RUNNER",
            "channel": "EQ",
            "dateTime": datetime.now(tz=tzutc()).isoformat(),
        },
        "payload": {},
    }

    assert json_message == expected_json_message
예제 #5
0
def validate_uuids_in_payload(payload):
    individual_case_id = payload["fulfilmentRequest"].pop("individualCaseId")
    case_id = payload["fulfilmentRequest"].pop("caseId")

    assert is_valid_uuid(individual_case_id, version=4) is True
    assert is_valid_uuid(case_id, version=4) is True
def test_convert_tx_id():
    tx_id_to_convert = "bc26d5ef-8475-4710-ac82-753a0a150708"

    assert is_valid_uuid(tx_id_to_convert)
    assert "bc26-d5ef-8475-4710" == convert_tx_id(tx_id_to_convert)