import unpackTransactionParameters from "modules/transactions/helpers/unpack-transaction-parameters";

describe("modules/transactions/helpers/unpack-transaction-parameters.js", () => {
  test("unpacked sent transaction parameters (buy)", () => {
    const params = {
      tx: {
        type: "Bid",
        status: "sent",
        data: {
          events: ["CreateOrder", "sentCash"],
          gas: 725202,
          inputs: [
            "amount",
            "price",
            "market",
            "outcome",
            "minimumTradeSize",
            "tradeGroupId"
          ],
          label: "Bid",
          name: "buy",
          mutable: true,
          send: true,
          signature: [
            "int256",
            "int256",
            "int256",
            "int256",
            "int256",
            "int256"
          ],
          to: "0xd70c6e1f3857d23bd96c3e4d2ec346fa7c3931f3",
          from: "0xdceb761b558e202c993f447b470a89cec2a3b6e9",
          params: [
            "0x4563918244f40000",
            "0x6f05b59d3b20000",
            "0xf7f7c43852ae0a73fe2a668b1a74a111848abeeff1797789f5b900e59eab25a2",
            "2",
            "0x2386f26fc10000",
            "0x00000000000000000000000000000000f26324c70bfc4d83a68fd9e01c9fb036"
          ]
        },
        response: {
          hash:
            "0x5bde43fc683d39c9f449424760401b2de067c8bda09acbf4c61dc923c0c98878",
          txHash:
            "0x5bde43fc683d39c9f449424760401b2de067c8bda09acbf4c61dc923c0c98878",
          callReturn: null
        }
      }
    };

    const actual = unpackTransactionParameters(params.tx);

    expect(actual).toEqual({
      amount: "0x4563918244f40000",
      price: "0x6f05b59d3b20000",
      market:
        "0xf7f7c43852ae0a73fe2a668b1a74a111848abeeff1797789f5b900e59eab25a2",
      outcome: "2",
      minimumTradeSize: "0x2386f26fc10000",
      tradeGroupId:
        "0x00000000000000000000000000000000f26324c70bfc4d83a68fd9e01c9fb036",
      type: "Bid"
    });
  });

  test("unpacked successful transaction parameters (buy)", () => {
    const params = {
      tx: {
        type: "Bid",
        status: "success",
        data: {
          events: ["CreateOrder", "sentCash"],
          gas: 725202,
          inputs: [
            "amount",
            "price",
            "market",
            "outcome",
            "minimumTradeSize",
            "tradeGroupId"
          ],
          label: "Bid",
          name: "buy",
          mutable: true,
          send: true,
          signature: [
            "int256",
            "int256",
            "int256",
            "int256",
            "int256",
            "int256"
          ],
          to: "0xd70c6e1f3857d23bd96c3e4d2ec346fa7c3931f3",
          from: "0xdceb761b558e202c993f447b470a89cec2a3b6e9",
          params: [
            "0x4563918244f40000",
            "0x6f05b59d3b20000",
            "0xf7f7c43852ae0a73fe2a668b1a74a111848abeeff1797789f5b900e59eab25a2",
            "2",
            "0x2386f26fc10000",
            "0x00000000000000000000000000000000f26324c70bfc4d83a68fd9e01c9fb036"
          ]
        },
        response: {
          blockHash:
            "0xc7dbd9d454ca4ff9d846f1850c8c6c4f53ec92562b4076d415f1d68b89d278f7",
          blockNumber: 1741,
          from: "0xdceb761b558e202c993f447b470a89cec2a3b6e9",
          gas: "0x47e7c4",
          gasPrice: "0x4a817c800",
          hash:
            "0x5bde43fc683d39c9f449424760401b2de067c8bda09acbf4c61dc923c0c98878",
          input:
            "0x2187e6510000000000000000000000000000000000000000000000004563918244f4000000000000000000000000000000000000000000000000000006f05b59d3b20000f7f7c43852ae0a73fe2a668b1a74a111848abeeff1797789f5b900e59eab25a20000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000002386f26fc1000000000000000000000000000000000000f26324c70bfc4d83a68fd9e01c9fb036",
          nonce: "0x58",
          to: "0xd70c6e1f3857d23bd96c3e4d2ec346fa7c3931f3",
          transactionIndex: "0x0",
          value: "0x0",
          v: "0x1b",
          r:
            "0x204dd301bd7df803c7b906bfda582bae8eae92b44f926ac3cf852ff68d7b0689",
          s:
            "0x71565aa9a50e71c8a445ff734bf54382d0fa1733fb941c4616165fff6063180",
          timestamp: 1484208293,
          callReturn:
            "0x4a330392e495bdca39dd7d8617397502a21e5c6d975364471adfe76aea4b2ce7",
          gasFees: "0.00651868"
        }
      }
    };

    const actual = unpackTransactionParameters(params.tx);

    expect(actual).toEqual({
      amount: "0x4563918244f40000",
      price: "0x6f05b59d3b20000",
      market:
        "0xf7f7c43852ae0a73fe2a668b1a74a111848abeeff1797789f5b900e59eab25a2",
      outcome: "2",
      minimumTradeSize: "0x2386f26fc10000",
      tradeGroupId:
        "0x00000000000000000000000000000000f26324c70bfc4d83a68fd9e01c9fb036",
      type: "Bid"
    });
  });

  test("Unpacked pending transaction without input", () => {
    const params = {
      tx: {
        hash:
          "0x262f96eb267a36a58a8f6d870d8c8eb7cca78dfc26860db3a8302a72a1f0acaf",
        type: "emergencyStop",
        status: "pending",
        data: {
          constant: false,
          name: "emergencyStop",
          returns: "null",
          from: "0x913da4198e6be1d5f5e4a40d0667f70c0b5430eb",
          to: "0xfcaf25bf38e7c86612a25ff18cb8e09ab07c9885",
          params: [],
          send: true
        },
        response: {
          callReturn: null
        }
      }
    };

    const actual = unpackTransactionParameters(params.tx);

    expect(actual).toEqual({
      type: "emergencyStop"
    });
  });
});
