Skip to content

Commit a1af957

Browse files
committed
payment response status enum
1 parent 2ea3580 commit a1af957

File tree

3 files changed

+36
-21
lines changed

3 files changed

+36
-21
lines changed

tests/test_yookassa_api.pas

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -218,7 +218,7 @@ procedure TTestYooKassa.TestGetPaymentRequest_CreateResponse;
218218
aResp := aReq.CreateResponse(aRaw) as TYookassaPaymentResponse;
219219
try
220220
AssertEquals('pay_123', aResp.ID);
221-
AssertEquals('succeeded', aResp.Status);
221+
AssertEquals(Ord(psSucceeded), Ord(aResp.Status));
222222
AssertEquals(100.00, (aResp).Amount);
223223
finally
224224
aResp.Free;
@@ -254,7 +254,7 @@ procedure TTestYooKassa.TestGetPayment_StaticMethod;
254254
aResp := TTestableGetPaymentRequest.GetPayment('test_shop', 'test_key', 'pay_test_999');
255255
try
256256
AssertEquals('pay_test_999', aResp.ID);
257-
AssertEquals('waiting_for_capture', aResp.Status);
257+
AssertEquals(Ord(psWaitingForCapture), Ord(aResp.Status));
258258
AssertEquals(500.00, aResp.Amount);
259259
AssertEquals('https://yookassa.ru/checkout/pay/test', aResp.ConfirmationURL);
260260
finally
@@ -291,7 +291,7 @@ procedure TTestYooKassa.TestPaymentResponseParsing;
291291
aResp := TYookassaPaymentResponse.Create(aRaw);
292292
try
293293
AssertEquals('pay_123', aResp.ID);
294-
AssertEquals('pending', aResp.Status);
294+
AssertEquals(Ord(psPending), Ord(aResp.Status));
295295
AssertEquals('https://yookassa.ru/checkout/pay/abc', aResp.ConfirmationURL);
296296
AssertEquals(100.00, aResp.Amount);
297297
finally
@@ -491,7 +491,7 @@ procedure TTestYooKassa.TestReceiptResponseParsing;
491491
aResp := TYookassaReceiptResponse.Create(aRaw);
492492
try
493493
AssertEquals('rcpt_456', aResp.ID);
494-
AssertEquals('succeeded', aResp.GetStatus);
494+
AssertEquals('succeeded', aResp.Status);
495495
AssertEquals('pay_789', aResp.PaymentId);
496496
finally
497497
aResp.Free;

tests/test_yookassa_api_integration.pas

Lines changed: 3 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -215,7 +215,6 @@ procedure TTestYooKassaIntegration.TestCreatePaymentThenCreateReceiptAfterSucces
215215
var
216216
aConfirmationURL, aPaymentID: String;
217217
aPaymentResp: TYookassaPaymentResponse;
218-
aSucceeded: Boolean;
219218
begin
220219
LoadCreatePaymentConf(FPaymentRequest);
221220
FPaymentResp:=FPaymentRequest.Execute as TYookassaPaymentResponse;
@@ -227,16 +226,11 @@ procedure TTestYooKassaIntegration.TestCreatePaymentThenCreateReceiptAfterSucces
227226
{ Just pay using the link aConfirmationURL (you can view it in the file "~payment_response.json")
228227
within a minute (while the program is on Sleep(60*1000)) }
229228
JSONToFile('~payment_response.json', FPaymentResp.Raw);
230-
aSucceeded:=False;
231229
repeat
232230
Sleep(10*1000); // 10 seconds
233231
aPaymentResp:=TYookassaGetPaymentRequest.GetPayment(FPaymentRequest.ShopId, FPaymentRequest.SecretKey, aPaymentID);
234-
try
235-
aSucceeded:=aPaymentResp.Status='succeeded';
236-
finally
237-
aPaymentResp.Free;
238-
end;
239-
until aSucceeded;
232+
aPaymentResp.Free;
233+
until aPaymentResp.Status=psSucceeded;
240234
LoadCreateReceiptConf(FReceiptRequest);
241235
FReceiptRequest.Settlements.Add(TYookassaSettlement.Create(stPrepayment, FPaymentRequest.Amount,
242236
FPaymentRequest.Currency));
@@ -422,7 +416,7 @@ procedure TTestYooKassaIntegration.TestReceiptAfterPayment_Agent_Sandbox;
422416

423417
// check response
424418
AssertTrue('Receipt must be created', FReceiptResp.ID <> '');
425-
AssertEquals('succeeded', FReceiptResp.GetStatus);
419+
AssertEquals('succeeded', FReceiptResp.Status);
426420
AssertEquals(aPaymentId, FReceiptResp.PaymentId);
427421

428422
// check that supplier was sent

yookassa_api.pas

Lines changed: 29 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -16,37 +16,46 @@ TYookassaResponse = class
1616
private
1717
FRaw: TJSONObject;
1818
function GetId: string; virtual; abstract;
19-
function GetStatus: string; virtual; abstract;
2019
public
2120
constructor Create(ARaw: TJSONObject);
2221
destructor Destroy; override;
2322
property Raw: TJSONObject read FRaw;
2423
end;
2524

25+
TPaymentStatus = (
26+
psNone, // Не указан
27+
psUnknown, // Не распознан (нет в этом списке статусов)
28+
psPending, // Платеж создан и ожидает действий от пользователя
29+
psWaitingForCapture, // Платеж оплачен, деньги авторизованы и ожидают списания
30+
psSucceeded, // Платеж успешно завершен
31+
psCanceled // Платеж отменен
32+
);
33+
2634
{ TYookassaPaymentResponse }
2735
TYookassaPaymentResponse = class(TYookassaResponse)
2836
private
2937
function GetConfirmationURL: string;
3038
function GetAmount: Currency;
3139
function GetCurrency: String;
32-
function GetId: string; override;
33-
function GetStatus: string; override;
40+
function GetId: string; override;
41+
function GetStatus: TPaymentStatus;
3442
public
3543
property ConfirmationURL: string read GetConfirmationURL;
3644
property Amount: Currency read GetAmount;
3745
property Currency: String read GetCurrency;
3846
property ID: String read GetId;
39-
property Status: String read GetStatus;
47+
property Status: TPaymentStatus read GetStatus;
4048
end;
4149

4250
{ TYookassaReceiptResponse }
4351
TYookassaReceiptResponse = class(TYookassaResponse)
4452
private
4553
function GetPaymentId: String;
4654
function GetId: string; override;
55+
function GetStatus: string;
4756
public
48-
function GetStatus: string; override;
4957
property PaymentId: string read GetPaymentId;
58+
property Status: String read GetStatus;
5059
property ID: String read GetId;
5160
end;
5261

@@ -373,6 +382,19 @@ function SettlementTypeToString(aSettlementType: TSettlementType): String;
373382
end;
374383
end;
375384

385+
function StringToPaymentStatus(const aPaymentStatus: String): TPaymentStatus;
386+
begin
387+
case aPaymentStatus of
388+
'': Result:=psNone;
389+
'pending': Result:=psPending;
390+
'waiting_for_capture': Result:=psWaitingForCapture;
391+
'succeeded': Result:=psSucceeded;
392+
'canceled': Result:=psCanceled;
393+
else
394+
Result:=psUnknown;
395+
end;
396+
end;
397+
376398
{ TYookassaResponse }
377399

378400
constructor TYookassaResponse.Create(ARaw: TJSONObject);
@@ -393,9 +415,9 @@ function TYookassaPaymentResponse.GetId: string;
393415
Result := Raw.Get('id', EmptyStr);
394416
end;
395417

396-
function TYookassaPaymentResponse.GetStatus: string;
418+
function TYookassaPaymentResponse.GetStatus: TPaymentStatus;
397419
begin
398-
Result := Raw.Get('status', EmptyStr);
420+
Result := StringToPaymentStatus(Raw.Get('status', EmptyStr));
399421
end;
400422

401423
function TYookassaPaymentResponse.GetConfirmationURL: string;
@@ -749,7 +771,6 @@ function TYookassaReceipt.ToJSON: TJSONObject;
749771
procedure TYookassaReceipt.AppendJSON(aJSON: TJSONObject);
750772
var
751773
aItems: TJSONArray;
752-
aCustomer: TJSONObject;
753774
Item: TYookassaReceiptItem;
754775
begin
755776
if Assigned(FCustomer) then

0 commit comments

Comments
 (0)