Coverage for benefits/enrollment_littlepay/models.py: 100%
29 statements
« prev ^ index » next coverage.py v7.10.2, created at 2025-08-08 16:26 +0000
« prev ^ index » next coverage.py v7.10.2, created at 2025-08-08 16:26 +0000
1from django.core.exceptions import ValidationError
2from django.db import models
4from benefits.core.models import SecretNameField, Environment, EnrollmentGroup, TransitProcessorConfig
5from benefits.secrets import get_secret_by_name
8class LittlepayConfig(TransitProcessorConfig):
9 """Configuration for connecting to Littlepay, an entity that applies transit agency fare rules to rider transactions."""
11 audience = models.TextField(
12 help_text="This agency's audience value used to access the TransitProcessor's API.", default="", blank=True
13 )
14 client_id = models.TextField(
15 help_text="This agency's client_id value used to access the TransitProcessor's API.", default="", blank=True
16 )
17 client_secret_name = SecretNameField(
18 help_text="The name of the secret containing this agency's client_secret value used to access the TransitProcessor's API.", # noqa: E501
19 default="",
20 blank=True,
21 )
23 @property
24 def api_base_url(self):
25 if self.environment == Environment.QA.value:
26 return get_secret_by_name("littlepay-qa-api-base-url")
27 elif self.environment == Environment.PROD.value:
28 return get_secret_by_name("littlepay-prod-api-base-url")
29 else:
30 raise ValueError(f"Unexpected value for environment: {self.environment}")
32 @property
33 def client_secret(self):
34 secret_field = self._meta.get_field("client_secret_name")
35 return secret_field.secret_value(self)
37 def clean(self):
38 field_errors = {}
40 if self.transit_agency and self.transit_agency.active:
41 message = "This field is required when this configuration is referenced by an active transit agency."
42 needed = dict(audience=self.audience, client_id=self.client_id, client_secret_name=self.client_secret_name)
43 field_errors.update({k: ValidationError(message) for k, v in needed.items() if not v})
45 if field_errors:
46 raise ValidationError(field_errors)
49class LittlepayGroup(EnrollmentGroup):
50 group_id = models.UUIDField(default=None, blank=True, help_text="The ID of the Littlepay group for user enrollment.")