diff --git a/package-lock.json b/package-lock.json index e0a3dbf1..1c1e8ec1 100644 --- a/package-lock.json +++ b/package-lock.json @@ -8,7 +8,7 @@ "devDependencies": { "@seamapi/fake-seam-connect": "1.73.6", "@seamapi/nextlove-sdk-generator": "1.14.17", - "@seamapi/types": "1.313.0", + "@seamapi/types": "1.315.0", "del": "^7.1.0", "prettier": "^3.2.5" } @@ -474,9 +474,9 @@ } }, "node_modules/@seamapi/types": { - "version": "1.313.0", - "resolved": "https://registry.npmjs.org/@seamapi/types/-/types-1.313.0.tgz", - "integrity": "sha512-uk/fRmMvtAgTjZwRLmjvfxIkS6+BR1V5b9M6oA5+5Q3y9iTK2e/57fRat5qsyb+R00rmlb8Lh/rqs7W0nHu2IA==", + "version": "1.315.0", + "resolved": "https://registry.npmjs.org/@seamapi/types/-/types-1.315.0.tgz", + "integrity": "sha512-/j+5WmOWD2QdHLvaXIZihfQdc+RilxPUCVhY1xwoqTmQ0jvies0TDNhDmVEqGmsxp6e7YA7vqdmRVwDkE/aZbQ==", "dev": true, "engines": { "node": ">=18.12.0", diff --git a/package.json b/package.json index fbe073df..6a3d11a0 100644 --- a/package.json +++ b/package.json @@ -12,7 +12,7 @@ "devDependencies": { "@seamapi/fake-seam-connect": "1.73.6", "@seamapi/nextlove-sdk-generator": "1.14.17", - "@seamapi/types": "1.313.0", + "@seamapi/types": "1.315.0", "del": "^7.1.0", "prettier": "^3.2.5" } diff --git a/seam/routes/acs_encoders_simulate.py b/seam/routes/acs_encoders_simulate.py new file mode 100644 index 00000000..d63857c6 --- /dev/null +++ b/seam/routes/acs_encoders_simulate.py @@ -0,0 +1,93 @@ +from typing import Optional, Any, List, Dict, Union +from ..client import SeamHttpClient +from .models import AbstractAcsEncodersSimulate + + +class AcsEncodersSimulate(AbstractAcsEncodersSimulate): + def __init__(self, client: SeamHttpClient, defaults: Dict[str, Any]): + self.client = client + self.defaults = defaults + + def next_credential_encode_will_fail( + self, + *, + acs_encoder_id: str, + error_code: Optional[str] = None, + acs_credential_id: Optional[str] = None + ) -> None: + json_payload = {} + + if acs_encoder_id is not None: + json_payload["acs_encoder_id"] = acs_encoder_id + if error_code is not None: + json_payload["error_code"] = error_code + if acs_credential_id is not None: + json_payload["acs_credential_id"] = acs_credential_id + + self.client.post( + "/acs/encoders/simulate/next_credential_encode_will_fail", json=json_payload + ) + + return None + + def next_credential_encode_will_succeed( + self, *, acs_encoder_id: str, scenario: Optional[str] = None + ) -> None: + json_payload = {} + + if acs_encoder_id is not None: + json_payload["acs_encoder_id"] = acs_encoder_id + if scenario is not None: + json_payload["scenario"] = scenario + + self.client.post( + "/acs/encoders/simulate/next_credential_encode_will_succeed", + json=json_payload, + ) + + return None + + def next_credential_scan_will_fail( + self, + *, + acs_encoder_id: str, + error_code: Optional[str] = None, + acs_credential_id_on_seam: Optional[str] = None + ) -> None: + json_payload = {} + + if acs_encoder_id is not None: + json_payload["acs_encoder_id"] = acs_encoder_id + if error_code is not None: + json_payload["error_code"] = error_code + if acs_credential_id_on_seam is not None: + json_payload["acs_credential_id_on_seam"] = acs_credential_id_on_seam + + self.client.post( + "/acs/encoders/simulate/next_credential_scan_will_fail", json=json_payload + ) + + return None + + def next_credential_scan_will_succeed( + self, + *, + acs_encoder_id: str, + acs_credential_id_on_seam: Optional[str] = None, + scenario: Optional[str] = None + ) -> None: + json_payload = {} + + if acs_encoder_id is not None: + json_payload["acs_encoder_id"] = acs_encoder_id + if acs_credential_id_on_seam is not None: + json_payload["acs_credential_id_on_seam"] = acs_credential_id_on_seam + if scenario is not None: + json_payload["scenario"] = scenario + + self.client.post( + "/acs/encoders/simulate/next_credential_scan_will_succeed", + json=json_payload, + ) + + return None diff --git a/seam/routes/models.py b/seam/routes/models.py index 96ee8d2f..fe7fbea1 100644 --- a/seam/routes/models.py +++ b/seam/routes/models.py @@ -1252,6 +1252,45 @@ def scan_credential( raise NotImplementedError() +class AbstractAcsEncodersSimulate(abc.ABC): + + @abc.abstractmethod + def next_credential_encode_will_fail( + self, + *, + acs_encoder_id: str, + error_code: Optional[str] = None, + acs_credential_id: Optional[str] = None + ) -> None: + raise NotImplementedError() + + @abc.abstractmethod + def next_credential_encode_will_succeed( + self, *, acs_encoder_id: str, scenario: Optional[str] = None + ) -> None: + raise NotImplementedError() + + @abc.abstractmethod + def next_credential_scan_will_fail( + self, + *, + acs_encoder_id: str, + error_code: Optional[str] = None, + acs_credential_id_on_seam: Optional[str] = None + ) -> None: + raise NotImplementedError() + + @abc.abstractmethod + def next_credential_scan_will_succeed( + self, + *, + acs_encoder_id: str, + acs_credential_id_on_seam: Optional[str] = None, + scenario: Optional[str] = None + ) -> None: + raise NotImplementedError() + + class AbstractAcsEntrances(abc.ABC): @abc.abstractmethod