{
  "oracle_origin": "Manually declared literal states and responses from contract; no expected result computed by transfer implementation.",
  "cases": [
    {
      "id": "missing-destination",
      "class": "negative",
      "request": {
        "source_id": "alice",
        "destination_id": "ghost",
        "amount_cents": 2000
      },
      "test_fault_after_debit": false,
      "expected_before": {
        "accounts": [
          [
            "alice",
            10000
          ],
          [
            "bob",
            2500
          ]
        ],
        "transfers": []
      },
      "expected_response": {
        "status": "rejected",
        "reason": "unknown_destination"
      },
      "expected_after": {
        "accounts": [
          [
            "alice",
            10000
          ],
          [
            "bob",
            2500
          ]
        ],
        "transfers": []
      }
    },
    {
      "id": "insufficient-balance",
      "class": "negative",
      "request": {
        "source_id": "alice",
        "destination_id": "bob",
        "amount_cents": 10001
      },
      "test_fault_after_debit": false,
      "expected_before": {
        "accounts": [
          [
            "alice",
            10000
          ],
          [
            "bob",
            2500
          ]
        ],
        "transfers": []
      },
      "expected_response": {
        "status": "rejected",
        "reason": "insufficient_balance"
      },
      "expected_after": {
        "accounts": [
          [
            "alice",
            10000
          ],
          [
            "bob",
            2500
          ]
        ],
        "transfers": []
      }
    },
    {
      "id": "zero-amount",
      "class": "negative",
      "request": {
        "source_id": "alice",
        "destination_id": "bob",
        "amount_cents": 0
      },
      "test_fault_after_debit": false,
      "expected_before": {
        "accounts": [
          [
            "alice",
            10000
          ],
          [
            "bob",
            2500
          ]
        ],
        "transfers": []
      },
      "expected_response": {
        "status": "rejected",
        "reason": "invalid_amount"
      },
      "expected_after": {
        "accounts": [
          [
            "alice",
            10000
          ],
          [
            "bob",
            2500
          ]
        ],
        "transfers": []
      }
    },
    {
      "id": "negative-amount",
      "class": "negative",
      "request": {
        "source_id": "alice",
        "destination_id": "bob",
        "amount_cents": -1
      },
      "test_fault_after_debit": false,
      "expected_before": {
        "accounts": [
          [
            "alice",
            10000
          ],
          [
            "bob",
            2500
          ]
        ],
        "transfers": []
      },
      "expected_response": {
        "status": "rejected",
        "reason": "invalid_amount"
      },
      "expected_after": {
        "accounts": [
          [
            "alice",
            10000
          ],
          [
            "bob",
            2500
          ]
        ],
        "transfers": []
      }
    },
    {
      "id": "record-failure-after-debit",
      "class": "negative",
      "request": {
        "source_id": "alice",
        "destination_id": "bob",
        "amount_cents": 2000
      },
      "test_fault_after_debit": true,
      "expected_before": {
        "accounts": [
          [
            "alice",
            10000
          ],
          [
            "bob",
            2500
          ]
        ],
        "transfers": []
      },
      "expected_response": {
        "status": "rejected",
        "reason": "processing_failed"
      },
      "expected_after": {
        "accounts": [
          [
            "alice",
            10000
          ],
          [
            "bob",
            2500
          ]
        ],
        "transfers": []
      }
    },
    {
      "id": "successful-transfer",
      "class": "positive",
      "request": {
        "source_id": "alice",
        "destination_id": "bob",
        "amount_cents": 2000
      },
      "test_fault_after_debit": false,
      "expected_before": {
        "accounts": [
          [
            "alice",
            10000
          ],
          [
            "bob",
            2500
          ]
        ],
        "transfers": []
      },
      "expected_response": {
        "status": "accepted",
        "transfer_id": 1
      },
      "expected_after": {
        "accounts": [
          [
            "alice",
            8000
          ],
          [
            "bob",
            4500
          ]
        ],
        "transfers": [
          [
            1,
            "alice",
            "bob",
            2000
          ]
        ]
      }
    },
    {
      "id": "successful-full-balance-transfer",
      "class": "positive",
      "request": {
        "source_id": "alice",
        "destination_id": "bob",
        "amount_cents": 10000
      },
      "test_fault_after_debit": false,
      "expected_before": {
        "accounts": [
          [
            "alice",
            10000
          ],
          [
            "bob",
            2500
          ]
        ],
        "transfers": []
      },
      "expected_response": {
        "status": "accepted",
        "transfer_id": 1
      },
      "expected_after": {
        "accounts": [
          [
            "alice",
            0
          ],
          [
            "bob",
            12500
          ]
        ],
        "transfers": [
          [
            1,
            "alice",
            "bob",
            10000
          ]
        ]
      }
    }
  ]
}
