Skip to content

Commit

Permalink
feat: fix tests
Browse files Browse the repository at this point in the history
  • Loading branch information
Melisa Anabella Rossi committed Jul 17, 2024
1 parent 42d108c commit b1223b3
Show file tree
Hide file tree
Showing 2 changed files with 148 additions and 132 deletions.
268 changes: 140 additions & 128 deletions webapp/src/modules/bid/sagas.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -221,160 +221,172 @@ describe('when handling the accepting a bid action', () => {
wallet = { address } as Wallet
})

describe('and getting the contract fails', () => {
it('should dispatch an action signaling the failure of the action handling', () => {
const bid = {
contractAddress: '0x123'
} as Bid
describe('and offchain bids are not enabled', () => {
describe('and getting the contract fails', () => {
it('should dispatch an action signaling the failure of the action handling', () => {
const bid = {
contractAddress: '0x123'
} as Bid

return expectSaga(bidSaga, marketplaceAPI)
.provide([[select(getContract, { address: bid.contractAddress }), undefined]])
.put(acceptBidFailure(bid, `Couldn't find a valid vendor for contract ${bid.contractAddress}`))
.dispatch(acceptBidRequest(bid))
.run({ silenceTimeout: true })
return expectSaga(bidSaga, marketplaceAPI)
.provide([
[select(getContract, { address: bid.contractAddress }), undefined],
[select(getIsBidsOffChainEnabled), false]
])
.put(acceptBidFailure(bid, `Couldn't find a valid vendor for contract ${bid.contractAddress}`))
.dispatch(acceptBidRequest(bid))
.run({ silenceTimeout: true })
})
})
})

describe("when the contract doesn't exist for the given vendor", () => {
it('should dispatch an action signaling the failure of the action handling', () => {
const contractAddress = 'anAddress'
const contract = {
vendor: 'someVendor' as VendorName,
address: contractAddress
}
const error = `Couldn't find a valid vendor for contract ${contractAddress}`
const bid = {
contractAddress: contract.address
} as Bid
describe("when the contract doesn't exist for the given vendor", () => {
it('should dispatch an action signaling the failure of the action handling', () => {
const contractAddress = 'anAddress'
const contract = {
vendor: 'someVendor' as VendorName,
address: contractAddress
}
const error = `Couldn't find a valid vendor for contract ${contractAddress}`
const bid = {
contractAddress: contract.address
} as Bid

return expectSaga(bidSaga, marketplaceAPI)
.provide([
[select(getContract, { address: bid.contractAddress }), contract],
[select(getWallet), wallet],
[call([VendorFactory, 'build'], contract.vendor), throwError(new Error(error))]
])
.put(acceptBidFailure(bid, error))
.dispatch(acceptBidRequest(bid))
.run({ silenceTimeout: true })
return expectSaga(bidSaga, marketplaceAPI)
.provide([
[select(getContract, { address: bid.contractAddress }), contract],
[select(getIsBidsOffChainEnabled), false],
[select(getWallet), wallet],
[call([VendorFactory, 'build'], contract.vendor), throwError(new Error(error))]
])
.put(acceptBidFailure(bid, error))
.dispatch(acceptBidRequest(bid))
.run({ silenceTimeout: true })
})
})
})

describe('when accepting a bid request fails', () => {
it('should dispatch an action signaling the failure of the action handling', () => {
const bid = {
contractAddress: '0x123'
} as Bid
const error = { message: 'anError' }
const contract = {
vendor: VendorName.DECENTRALAND
}
const vendor = VendorFactory.build(contract.vendor)
describe('when accepting a bid request fails', () => {
it('should dispatch an action signaling the failure of the action handling', () => {
const bid = {
contractAddress: '0x123'
} as Bid
const error = { message: 'anError' }
const contract = {
vendor: VendorName.DECENTRALAND
}
const vendor = VendorFactory.build(contract.vendor)

return expectSaga(bidSaga, marketplaceAPI)
.provide([
[select(getContract, { address: bid.contractAddress }), contract],
[call([VendorFactory, 'build'], contract.vendor), vendor],
[select(getWallet), wallet],
[call([vendor.bidService!, 'accept'], wallet, bid), Promise.reject(error)]
])
.put(acceptBidFailure(bid, error.message))
.dispatch(acceptBidRequest(bid))
.run({ silenceTimeout: true })
return expectSaga(bidSaga, marketplaceAPI)
.provide([
[select(getContract, { address: bid.contractAddress }), contract],
[select(getIsBidsOffChainEnabled), false],
[call([VendorFactory, 'build'], contract.vendor), vendor],
[select(getWallet), wallet],
[call([vendor.bidService!, 'accept'], wallet, bid), Promise.reject(error)]
])
.put(acceptBidFailure(bid, error.message))
.dispatch(acceptBidRequest(bid))
.run({ silenceTimeout: true })
})
})
})

describe('and sending the transaction is successful', () => {
let nft: NFT
let contract: Contract
let vendor: Vendor<VendorName.DECENTRALAND>
let txHash: string
let bid: Bid
let address: string
let wallet: Wallet
beforeEach(() => {
nft = {
vendor: VendorName.DECENTRALAND,
openRentalId: 'aRentalId'
} as NFT
contract = {
vendor: VendorName.DECENTRALAND
} as Contract
vendor = VendorFactory.build(contract.vendor!)
txHash = 'someHash'
bid = {
contractAddress: '0x123',
price: '1'
} as Bid
address = 'anAddress'
wallet = { address } as Wallet
})
describe('and sending the transaction is successful', () => {
let nft: NFT
let contract: Contract
let vendor: Vendor<VendorName.DECENTRALAND>
let txHash: string
let bid: Bid
let address: string
let wallet: Wallet
beforeEach(() => {
nft = {
vendor: VendorName.DECENTRALAND,
openRentalId: 'aRentalId'
} as NFT
contract = {
vendor: VendorName.DECENTRALAND
} as Contract
vendor = VendorFactory.build(contract.vendor!)
txHash = 'someHash'
bid = {
contractAddress: '0x123',
price: '1'
} as Bid
address = 'anAddress'
wallet = { address } as Wallet
})

describe('and the transaction finishes', () => {
describe('and it has an rental with status OPEN', () => {
let rental: RentalListing
beforeEach(() => {
nft.openRentalId = 'aRentalId'
rental = {
id: nft.openRentalId,
status: RentalStatus.OPEN
} as RentalListing
})
it('should dispatch an action signaling the success of the action handling and cancel an existing rental listing', () => {
return expectSaga(bidSaga, marketplaceAPI)
.provide([
[select(getContract, { address: bid.contractAddress }), contract],
[call([VendorFactory, 'build'], contract.vendor!), vendor],
[select(getWallet), wallet],
[select(getCurrentNFT), nft],
[select(getRentalById, nft.openRentalId!), rental],
[call([vendor.bidService!, 'accept'], wallet, bid), Promise.resolve(txHash)],
[call(waitForTx, txHash), Promise.resolve()],
[call(waitUntilRentalChangesStatus, nft, RentalStatus.CANCELLED), Promise.resolve()]
])
.put(acceptBidSuccess(bid))
.put(acceptBidtransactionSubmitted(bid, txHash))
.dispatch(acceptBidRequest(bid))
.run({ silenceTimeout: true })
describe('and the transaction finishes', () => {
describe('and it has an rental with status OPEN', () => {
let rental: RentalListing
beforeEach(() => {
nft.openRentalId = 'aRentalId'
rental = {
id: nft.openRentalId,
status: RentalStatus.OPEN
} as RentalListing
})
it('should dispatch an action signaling the success of the action handling and cancel an existing rental listing', () => {
return expectSaga(bidSaga, marketplaceAPI)
.provide([
[select(getIsBidsOffChainEnabled), false],
[select(getContract, { address: bid.contractAddress }), contract],
[call([VendorFactory, 'build'], contract.vendor!), vendor],
[select(getWallet), wallet],
[select(getCurrentNFT), nft],
[select(getRentalById, nft.openRentalId!), rental],
[call([vendor.bidService!, 'accept'], wallet, bid), Promise.resolve(txHash)],
[call(waitForTx, txHash), Promise.resolve()],
[call(waitUntilRentalChangesStatus, nft, RentalStatus.CANCELLED), Promise.resolve()]
])
.put(acceptBidSuccess(bid))
.put(acceptBidtransactionSubmitted(bid, txHash))
.dispatch(acceptBidRequest(bid))
.run({ silenceTimeout: true })
})
})
})

describe('and it does not have a rental', () => {
beforeEach(() => {
nft.openRentalId = null
describe('and it does not have a rental', () => {
beforeEach(() => {
nft.openRentalId = null
})
it('should dispatch an action signaling the success of the action handling', () => {
return expectSaga(bidSaga, marketplaceAPI)
.provide([
[select(getIsBidsOffChainEnabled), false],
[select(getContract, { address: bid.contractAddress }), contract],
[call([VendorFactory, 'build'], contract.vendor!), vendor],
[select(getWallet), wallet],
[select(getCurrentNFT), nft],
[call([vendor.bidService!, 'accept'], wallet, bid), Promise.resolve(txHash)],
[call(waitForTx, txHash), Promise.resolve()]
])
.put(acceptBidSuccess(bid))
.put(acceptBidtransactionSubmitted(bid, txHash))
.dispatch(acceptBidRequest(bid))
.run({ silenceTimeout: true })
})
})
it('should dispatch an action signaling the success of the action handling', () => {
})
describe('and the transaction gets reverted', () => {
it('should put the action to notify that the transaction was submitted and the claim LAND failure action with an error', () => {
return expectSaga(bidSaga, marketplaceAPI)
.provide([
[select(getIsBidsOffChainEnabled), false],
[select(getContract, { address: bid.contractAddress }), contract],
[call([VendorFactory, 'build'], contract.vendor!), vendor],
[select(getWallet), wallet],
[select(getCurrentNFT), nft],
[call([vendor.bidService!, 'accept'], wallet, bid), Promise.resolve(txHash)],
[call(waitForTx, txHash), Promise.resolve()]
[call(waitForTx, txHash), Promise.reject(new Error('anError'))]
])
.put(acceptBidSuccess(bid))
.put(acceptBidFailure(bid, 'anError'))
.put(acceptBidtransactionSubmitted(bid, txHash))
.dispatch(acceptBidRequest(bid))
.run({ silenceTimeout: true })
})
})
})
describe('and the transaction gets reverted', () => {
it('should put the action to notify that the transaction was submitted and the claim LAND failure action with an error', () => {
return expectSaga(bidSaga, marketplaceAPI)
.provide([
[select(getContract, { address: bid.contractAddress }), contract],
[call([VendorFactory, 'build'], contract.vendor!), vendor],
[select(getWallet), wallet],
[select(getCurrentNFT), nft],
[call([vendor.bidService!, 'accept'], wallet, bid), Promise.resolve(txHash)],
[call(waitForTx, txHash), Promise.reject(new Error('anError'))]
])
.put(acceptBidFailure(bid, 'anError'))
.put(acceptBidtransactionSubmitted(bid, txHash))
.dispatch(acceptBidRequest(bid))
.run({ silenceTimeout: true })
})
})
})

describe('and offchain bids are enabled', () => {})
})
12 changes: 8 additions & 4 deletions webapp/src/modules/vendor/decentraland/BidService.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -61,7 +61,8 @@ describe('when accepting a bid', () => {
{
contractAddress,
network: Network.ETHEREUM,
chainId: ChainId.ETHEREUM_MAINNET
chainId: ChainId.ETHEREUM_MAINNET,
bidAddress: '0x123'
} as Bid
)
const callParameters = mockSendTransaction.mock.calls[0]
Expand All @@ -82,7 +83,8 @@ describe('when accepting a bid', () => {
{
contractAddress,
network: Network.MATIC,
chainId: ChainId.MATIC_MAINNET
chainId: ChainId.MATIC_MAINNET,
bidAddress: '0x123'
} as Bid
)
const callParameters = mockSendTransaction.mock.calls[0]
Expand Down Expand Up @@ -112,7 +114,8 @@ describe('when canceling a bid', () => {
{} as Wallet,
{
network: Network.ETHEREUM,
chainId: ChainId.ETHEREUM_MAINNET
chainId: ChainId.ETHEREUM_MAINNET,
bidAddress: '0x123'
} as Bid
)
const callParameters = mockSendTransaction.mock.calls[0]
Expand All @@ -129,7 +132,8 @@ describe('when canceling a bid', () => {
{} as Wallet,
{
network: Network.MATIC,
chainId: ChainId.MATIC_MAINNET
chainId: ChainId.MATIC_MAINNET,
bidAddress: '0x123'
} as Bid
)
const callParameters = mockSendTransaction.mock.calls[0]
Expand Down

0 comments on commit b1223b3

Please sign in to comment.