From fef5f858fd801ffecdeb80e3bc87df5dc958affc Mon Sep 17 00:00:00 2001 From: Mukul Jangid <49061120+mukulljangid@users.noreply.github.com> Date: Wed, 18 Aug 2021 14:23:21 -0400 Subject: [PATCH] fix: resolve OfferCancel merge issues (#1546) * fix: resolve OfferCancel git issues --- src/models/transactions/index.ts | 1 + src/models/transactions/offerCancel.ts | 24 ++++++++++++ src/models/transactions/transaction.ts | 14 ++++--- test/models/checkCancel.ts | 2 +- test/models/offerCancel.ts | 53 ++++++++++++++++++++++++++ 5 files changed, 87 insertions(+), 7 deletions(-) create mode 100644 src/models/transactions/offerCancel.ts create mode 100644 test/models/offerCancel.ts diff --git a/src/models/transactions/index.ts b/src/models/transactions/index.ts index 2b68e41f..bcc57b3d 100644 --- a/src/models/transactions/index.ts +++ b/src/models/transactions/index.ts @@ -1,6 +1,7 @@ export * from './transaction' export * from './offerCreate' export * from './accountSet' +export * from './offerCancel' export * from './checkCreate' export * from './checkCash' export * from './checkCancel' diff --git a/src/models/transactions/offerCancel.ts b/src/models/transactions/offerCancel.ts new file mode 100644 index 00000000..622f81be --- /dev/null +++ b/src/models/transactions/offerCancel.ts @@ -0,0 +1,24 @@ +import { ValidationError } from "../../common/errors" +import { BaseTransaction, verifyBaseTransaction } from "./common" + +export interface OfferCancel extends BaseTransaction { + TransactionType: "OfferCancel" + OfferSequence: number +} + +/** + * Verify the form and type of an OfferCancel at runtime. + * + * @param tx - An OfferCancel Transaction + * @returns - Void. + * @throws - When the OfferCancel is Malformed. + */ + export function verifyOfferCancel(tx: OfferCancel): void { + verifyBaseTransaction(tx) + + if (tx.OfferSequence === undefined) + throw new ValidationError("OfferCancel: missing field OfferSequence") + + if (typeof tx.OfferSequence !== 'number') + throw new ValidationError("OfferCancel: OfferSequence must be a number") +} \ No newline at end of file diff --git a/src/models/transactions/transaction.ts b/src/models/transactions/transaction.ts index dc74ca51..4ca4568b 100644 --- a/src/models/transactions/transaction.ts +++ b/src/models/transactions/transaction.ts @@ -1,9 +1,10 @@ -import Metadata from "../common/metadata"; -import { OfferCreate } from "./offerCreate"; -import { CheckCash } from "./checkCash"; -import { CheckCancel } from "./checkCancel"; -import { CheckCreate } from "./checkCreate"; -import { SignerListSet } from "./signerListSet"; +import Metadata from "../common/metadata" +import { OfferCreate } from "./offerCreate" +import { OfferCancel } from "./offerCancel" +import { CheckCash } from "./checkCash" +import { CheckCancel } from "./checkCancel" +import { CheckCreate } from "./checkCreate" +import { SignerListSet } from "./signerListSet" import { AccountSet } from "./accountSet"; export type Transaction = @@ -16,6 +17,7 @@ export type Transaction = // | EscrowCancel // | EscrowCreate // | EscrowFinish + | OfferCancel // | OfferCancel | OfferCreate // | PaymentTransaction diff --git a/test/models/checkCancel.ts b/test/models/checkCancel.ts index 7e3768a1..2fc0dee9 100644 --- a/test/models/checkCancel.ts +++ b/test/models/checkCancel.ts @@ -7,7 +7,7 @@ import { assert } from 'chai' * * Providing runtime verification testing for each specific transaction type */ -describe('Transaction Verification', function () { +describe('CheckCancel Transaction Verification', function () { it (`verifies valid CheckCancel`, () => { const validCheckCancel = { diff --git a/test/models/offerCancel.ts b/test/models/offerCancel.ts new file mode 100644 index 00000000..7568581b --- /dev/null +++ b/test/models/offerCancel.ts @@ -0,0 +1,53 @@ +import { ValidationError } from 'xrpl-local/common/errors' +import { verifyOfferCancel } from './../../src/models/transactions/offerCancel' +import { assert } from 'chai' + +/** + * OfferCancel Transaction Verification Testing + * + * Providing runtime verification testing for each specific transaction type + */ +describe('OfferCancel Transaction Verification', function () { + let offer + + beforeEach(() => { + offer = { + Account: "rnKiczmiQkZFiDES8THYyLA2pQohC5C6EF", + Fee: "10", + LastLedgerSequence: 65477334, + OfferSequence: 60797528, + Sequence: 60797535, + SigningPubKey: "0361BFD43D1EEA54B77CC152887312949EBF052997FBFFCDAF6F2653164B55B21...", + TransactionType: "OfferCancel", + TxnSignature: "30450221008C43BDCFC68B4793857CA47DF454C07E5B45D3F80E8E6785CAB9292...", + date: "2021-08-06T21:04:11Z" + } as any + }) + + it (`verifies valid OfferCancel`, () => { + assert.doesNotThrow(() => verifyOfferCancel(offer)) + }) + + it (`verifies valid OfferCancel with flags`, () => { + offer.Flags = 2147483648 + assert.doesNotThrow(() => verifyOfferCancel(offer)) + }) + + it (`throws w/ OfferSequence must be a number`, () => { + offer.OfferSequence = '99' + assert.throws( + () => verifyOfferCancel(offer), + ValidationError, + "OfferCancel: OfferSequence must be a number" + ) + }) + + it (`throws w/ missing OfferSequence`, () => { + delete offer.OfferSequence + assert.throws( + () => verifyOfferCancel(offer), + ValidationError, + "OfferCancel: missing field OfferSequence" + ) + }) +}) \ No newline at end of file