diff --git a/cypress/e2e/remove-liquidity.test.ts b/cypress/e2e/remove-liquidity.test.ts
index dc448bdb17..b09f021ed0 100644
--- a/cypress/e2e/remove-liquidity.test.ts
+++ b/cypress/e2e/remove-liquidity.test.ts
@@ -1,7 +1,33 @@
+import { ChainId, MaxUint256, UNI_ADDRESSES } from '@uniswap/sdk-core'
+
+const UNI_MAINNET = UNI_ADDRESSES[ChainId.MAINNET]
+
describe('Remove Liquidity', () => {
- it('loads the token pair', () => {
- cy.visit('/remove/v2/ETH/0x1f9840a85d5aF5bf1D1762F925BDADdC4201F984')
+ it('loads the token pair in v2', () => {
+ cy.visit(`/remove/v2/ETH/${UNI_MAINNET}`)
cy.get('#remove-liquidity-tokena-symbol').should('contain.text', 'ETH')
cy.get('#remove-liquidity-tokenb-symbol').should('contain.text', 'UNI')
})
+
+ it('loads the token pair in v3', () => {
+ cy.visit(`/remove/1`)
+ cy.get('#remove-liquidity-tokens').should('contain.text', 'UNI/ETH')
+
+ cy.get('#remove-pooled-tokena-symbol').should('contain.text', 'Pooled UNI')
+ cy.get('#remove-pooled-tokenb-symbol').should('contain.text', 'Pooled ETH')
+ })
+
+ it('should redirect to error pages if pool does not exist', () => {
+ // Duplicate-token v2 pools redirect to position unavailable
+ cy.visit(`/remove/v2/ETH/ETH`)
+ cy.contains('Position unavailable')
+
+ // Single-token pools don't exist
+ cy.visit('/remove/v2/ETH')
+ cy.url().should('match', /\/not-found/)
+
+ // Nonexistent v3 pool
+ cy.visit(`/remove/${MaxUint256}`)
+ cy.contains('Position unavailable')
+ })
})
diff --git a/src/pages/RemoveLiquidity/V3.tsx b/src/pages/RemoveLiquidity/V3.tsx
index 7349577466..80f010b5b7 100644
--- a/src/pages/RemoveLiquidity/V3.tsx
+++ b/src/pages/RemoveLiquidity/V3.tsx
@@ -59,11 +59,11 @@ export default function RemoveLiquidityV3() {
}
}, [tokenId])
+ const { position, loading } = useV3PositionFromTokenId(parsedTokenId ?? undefined)
if (parsedTokenId === null || parsedTokenId.eq(0)) {
return
}
-
- if (isSupportedChain(chainId)) {
+ if (isSupportedChain(chainId) && (loading || position)) {
return
} else {
return
@@ -312,15 +312,16 @@ function Remove({ tokenId }: { tokenId: BigNumber }) {
{`${feeValue0?.currency?.symbol}/${feeValue1?.currency?.symbol}`}
+ id="remove-liquidity-tokens"
+ >{`${liquidityValue0?.currency?.symbol}/${liquidityValue1?.currency?.symbol}`}
@@ -354,7 +355,7 @@ function Remove({ tokenId }: { tokenId: BigNumber }) {
-
+
Pooled {liquidityValue0?.currency?.symbol}:
@@ -365,7 +366,7 @@ function Remove({ tokenId }: { tokenId: BigNumber }) {
-
+
Pooled {liquidityValue1?.currency?.symbol}:
diff --git a/src/pages/RemoveLiquidity/index.tsx b/src/pages/RemoveLiquidity/index.tsx
index 9d949eec1d..17816e11fe 100644
--- a/src/pages/RemoveLiquidity/index.tsx
+++ b/src/pages/RemoveLiquidity/index.tsx
@@ -52,7 +52,9 @@ const DEFAULT_REMOVE_LIQUIDITY_SLIPPAGE_TOLERANCE = new Percent(5, 100)
export default function RemoveLiquidityWrapper() {
const { chainId } = useWeb3React()
- if (isSupportedChain(chainId)) {
+ const { currencyIdA, currencyIdB } = useParams<{ currencyIdA: string; currencyIdB: string }>()
+ const [currencyA, currencyB] = [useCurrency(currencyIdA) ?? undefined, useCurrency(currencyIdB) ?? undefined]
+ if (isSupportedChain(chainId) && currencyA !== currencyB) {
return
} else {
return