Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 14 additions & 0 deletions craftgate/adapter/fraud_adapter.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,10 +5,12 @@
from craftgate.request.fraud_add_card_fingerprint_to_list_request import FraudAddCardFingerprintToListRequest
from craftgate.request.fraud_value_list_request import FraudValueListRequest
from craftgate.request.search_fraud_checks_request import SearchFraudChecksRequest
from craftgate.request.search_fraud_rule_request import SearchFraudRuleRequest
from craftgate.request.update_fraud_check_request import UpdateFraudCheckRequest
from craftgate.request_options import RequestOptions
from craftgate.response.fraud_all_value_lists_response import FraudAllValueListsResponse
from craftgate.response.fraud_check_list_response import FraudCheckListResponse
from craftgate.response.fraud_rule_response import FraudRuleResponse
from craftgate.response.fraud_value_list_response import FraudValueListResponse
from craftgate.utils.request_query_params_builder import RequestQueryParamsBuilder

Expand All @@ -30,6 +32,18 @@ def search_fraud_checks(self, request: SearchFraudChecksRequest) -> FraudCheckLi
response_type=FraudCheckListResponse
)

def search_fraud_rules(self, request: SearchFraudRuleRequest) -> FraudRuleResponse:
query = RequestQueryParamsBuilder.build_query_params(request)
path = "/fraud/v1/rules" + query
headers = self._create_headers(None, path)
return self._http_client.request(
method="GET",
url=self.request_options.base_url + path,
headers=headers,
body=None,
response_type=FraudCheckListResponse
)

def update_fraud_check_status(self, id: int, fraud_check_status: FraudCheckStatus) -> None:
path = "/fraud/v1/fraud-checks/{}/check-status".format(id)
body = UpdateFraudCheckRequest(check_status=fraud_check_status)
Expand Down
24 changes: 24 additions & 0 deletions craftgate/request/search_fraud_rule_request.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
from datetime import datetime
from typing import Optional

from craftgate.model.fraud_action import FraudAction
from craftgate.model.fraud_operation import FraudOperation

class SearchFraudRuleRequest(object):
def __init__(
self,
name: Optional[str] = None,
min_created_date: Optional[datetime] = None,
max_created_date: Optional[datetime] = None,
action: Optional[FraudAction] = None,
operation: Optional[FraudOperation] = None,
page: Optional[int] = None,
size: Optional[int] = None,
) -> None:
self.page = page
self.size = size
self.action = action
self.operation = operation
self.name = name
self.min_created_date = min_created_date
self.max_created_date = max_created_date
2 changes: 2 additions & 0 deletions craftgate/response/common/base_payment_response.py
Original file line number Diff line number Diff line change
Expand Up @@ -62,6 +62,7 @@ def __init__(
fraud_id: Optional[int] = None,
fraud_action: Optional[FraudAction] = None,
fraud_score: Optional[float] = None,
fraud_rule_id: Optional[int] = None,
pos: Optional[MerchantPos] = None,
loyalty: Optional[Loyalty] = None,
payment_error: Optional[PaymentError] = None
Expand Down Expand Up @@ -108,6 +109,7 @@ def __init__(
self.fraud_id = fraud_id
self.fraud_action = fraud_action
self.fraud_score = fraud_score
self.fraud_rule_id = fraud_rule_id
self.pos = pos
self.loyalty = loyalty
self.payment_error = payment_error
22 changes: 22 additions & 0 deletions craftgate/response/dto/fraud_rule.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
from typing import Optional, List

from craftgate.model.fraud_action import FraudAction
from craftgate.model.fraud_operation import FraudOperation
from craftgate.model.status import Status

class FraudRule(object):
def __init__(
self,
id: Optional[int] = None,
status: Optional[Status] = None,
name: Optional[str] = None,
action: Optional[FraudAction] = None,
conditions: Optional[str] = None,
operations: Optional[List[FraudOperation]] = None
) -> None:
self.id = id
self.status = status
self.action = action
self.name = name
self.conditions = conditions
self.operations = operations
5 changes: 5 additions & 0 deletions craftgate/response/fraud_rule_response.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
from craftgate.response.common.list_response import ListResponse
from craftgate.response.dto.fraud_rule import FraudRule

class FraudRuleResponse(ListResponse[FraudRule]):
item_type = FraudRule
13 changes: 13 additions & 0 deletions tests/test_fraud_adapter.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
from craftgate.model.fraud_operation import FraudOperation
from craftgate.request import FraudValueListRequest, SearchFraudChecksRequest
from craftgate.request.fraud_add_card_fingerprint_to_list_request import FraudAddCardFingerprintToListRequest
from craftgate.request.search_fraud_rule_request import SearchFraudRuleRequest


class FraudAdapterSample(unittest.TestCase):
Expand Down Expand Up @@ -80,6 +81,18 @@ def test_search_fraud_checks(self):
self.assertIsNotNone(resp)
self.assertTrue(resp.items)

def test_search_fraud_rules(self):
now = datetime.now()
req = SearchFraudRuleRequest(
min_created_date=now - timedelta(days=25),
max_created_date=now,
)
resp = self.fraud.search_fraud_rules(req)
print(resp)

self.assertIsNotNone(resp)
self.assertTrue(resp.items)

def test_update_fraud_check_status(self):
self.fraud.update_fraud_check_status(int(2613), FraudCheckStatus.FRAUD)

Expand Down