fix: routes ui for bridging (#19959)

Signed-off-by: Brian Sztamfater <brian@status.im>
This commit is contained in:
Brian Sztamfater 2024-05-20 08:07:35 -03:00 committed by GitHub
parent 29b02a544c
commit dc551031fe
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
4 changed files with 274 additions and 152 deletions

View File

@ -35,6 +35,7 @@
receiver-networks (get-in db [:wallet :ui :send :receiver-networks])
receiver-network-values (get-in db [:wallet :ui :send :receiver-network-values])
sender-network-values (get-in db [:wallet :ui :send :sender-network-values])
tx-type (get-in db [:wallet :ui :send :tx-type])
disabled-from-chain-ids (or (get-in db [:wallet :ui :send :disabled-from-chain-ids]) [])
token-decimals (if collectible 0 (:decimals token))
native-token? (and token (= token-display-name "ETH"))
@ -61,6 +62,7 @@
:disabled-chain-ids disabled-from-chain-ids
:receiver-networks receiver-networks
:token-networks-ids token-networks-ids
:tx-type tx-type
:receiver? false})
(send-utils/reset-network-amounts-to-zero
sender-network-values))
@ -70,6 +72,7 @@
:disabled-chain-ids disabled-from-chain-ids
:receiver-networks receiver-networks
:token-networks-ids token-networks-ids
:tx-type tx-type
:receiver? true})
(send-utils/reset-network-amounts-to-zero
receiver-network-values))
@ -343,17 +346,27 @@
token-networks-ids (when token (mapv #(:chain-id %) (:networks token)))
sender-network-values (when token-available-networks-for-suggested-routes
(send-utils/loading-network-amounts
{:valid-networks token-available-networks-for-suggested-routes
{:valid-networks (if (= transaction-type :tx/bridge)
(filter
#(not= bridge-to-chain-id %)
token-available-networks-for-suggested-routes)
token-available-networks-for-suggested-routes)
:disabled-chain-ids disabled-from-chain-ids
:receiver-networks receiver-networks
:token-networks-ids token-networks-ids
:tx-type transaction-type
:receiver? false}))
receiver-network-values (when token-available-networks-for-suggested-routes
(send-utils/loading-network-amounts
{:valid-networks token-available-networks-for-suggested-routes
{:valid-networks (if (= transaction-type :tx/bridge)
(filter
#(= bridge-to-chain-id %)
token-available-networks-for-suggested-routes)
token-available-networks-for-suggested-routes)
:disabled-chain-ids disabled-from-chain-ids
:receiver-networks receiver-networks
:token-networks-ids token-networks-ids
:tx-type transaction-type
:receiver? true}))
request-params [transaction-type-param
from-address

View File

@ -310,7 +310,7 @@
:button-one-label (if should-try-again?
(i18n/label :t/try-again)
button-one-label)
:button-one-props (merge button-one-props
:button-one-props (merge (when-not should-try-again? button-one-props)
{:disabled? (and (not should-try-again?) confirm-disabled?)
:on-press (cond
should-try-again?

View File

@ -94,7 +94,7 @@
network-amounts))
(defn network-amounts
[{:keys [network-values disabled-chain-ids receiver-networks token-networks-ids receiver?]}]
[{:keys [network-values disabled-chain-ids receiver-networks token-networks-ids tx-type receiver?]}]
(let [disabled-set (set disabled-chain-ids)
receiver-networks-set (set receiver-networks)
network-values-keys (set (keys network-values))
@ -150,11 +150,12 @@
(vec))
(and receiver?
routes-found?
(< (count network-values-with-not-available-chains) available-networks-count))
(< (count network-values-with-not-available-chains) available-networks-count)
(not= tx-type :tx/bridge))
(conj {:type :add}))))
(defn loading-network-amounts
[{:keys [valid-networks disabled-chain-ids receiver-networks token-networks-ids receiver?]}]
[{:keys [valid-networks disabled-chain-ids receiver-networks token-networks-ids tx-type receiver?]}]
(let [disabled-set (set disabled-chain-ids)
receiver-networks-set (set receiver-networks)
receiver-networks-count (count receiver-networks)
@ -164,11 +165,13 @@
(filter #(not (token-networks-ids-set %)) receiver-networks)
[])
not-available-networks-set (set not-available-networks)
valid-networks (concat valid-networks
disabled-chain-ids
valid-networks (-> (concat valid-networks
(when (not (and receiver? (= tx-type :tx/bridge)))
disabled-chain-ids)
(when receiver?
(filter #(not (valid-networks-set %))
not-available-networks)))]
not-available-networks)))
(distinct))]
(cond-> (->> valid-networks
(map
(fn [chain-id]
@ -181,16 +184,18 @@
(and (not receiver?) (contains? disabled-set chain-id)) :disabled)}
(and (not receiver?) (contains? disabled-set chain-id))
(assoc :total-amount (money/bignumber "0")))))
(filter
(fn [network-amount]
(or (and receiver?
(or (= tx-type :tx/bridge)
(contains? receiver-networks-set (:chain-id network-amount))))
(not receiver?))))
(sort-by (fn [network-amount]
(get network-priority-score
(network-utils/id->network (:chain-id network-amount)))))
(filter
(fn [network-amount]
(or (and receiver? (contains? receiver-networks-set (:chain-id network-amount)))
(and (not receiver?)
(not (contains? disabled-chain-ids (:chain-id network-amount)))))))
(vec))
(and receiver? (< receiver-networks-count available-networks-count)) (conj {:type :add}))))
(and receiver? (< receiver-networks-count available-networks-count) (not= tx-type :tx/bridge))
(conj {:type :add}))))
(defn network-links
[route from-values-by-chain to-values-by-chain]

View File

@ -33,9 +33,9 @@
(deftest test-network-amounts-by-chain
(testing "Correctly calculates network amounts for transaction with native token"
(let [route [{:amount-in "0xde0b6b3a7640000"
:to {:chain-id "1"}}
:to {:chain-id 1}}
{:amount-in "0xde0b6b3a7640000"
:to {:chain-id "2"}}]
:to {:chain-id 10}}]
token-decimals 18
native-token? true
receiver? true
@ -43,17 +43,17 @@
:token-decimals token-decimals
:native-token? native-token?
:receiver? receiver?})
expected {"1" (money/bignumber "1")
"2" (money/bignumber "1")}]
expected {1 (money/bignumber "1")
10 (money/bignumber "1")}]
(doseq [[chain-id exp-value] expected]
(is (money/equal-to (get result chain-id) exp-value)))))
(testing
"Correctly calculates network amounts for transaction with native token and multiple routes to same chain-id"
(let [route [{:amount-in "0xde0b6b3a7640000"
:to {:chain-id "1"}}
:to {:chain-id 1}}
{:amount-in "0xde0b6b3a7640000"
:to {:chain-id "1"}}]
:to {:chain-id 1}}]
token-decimals 18
native-token? true
receiver? true
@ -61,15 +61,15 @@
:token-decimals token-decimals
:native-token? native-token?
:receiver? receiver?})
expected {"1" (money/bignumber "2")}]
expected {1 (money/bignumber "2")}]
(doseq [[chain-id exp-value] expected]
(is (money/equal-to (get result chain-id) exp-value)))))
(testing "Correctly calculates network amounts for transaction with non-native token"
(let [route [{:amount-out "0x1e8480"
:from {:chain-id "1"}}
:from {:chain-id 1}}
{:amount-out "0x1e8480"
:from {:chain-id "2"}}]
:from {:chain-id 10}}]
token-decimals 6
native-token? false
receiver? false
@ -77,20 +77,20 @@
:token-decimals token-decimals
:native-token? native-token?
:receiver? receiver?})
expected {"1" (money/bignumber "2")
"2" (money/bignumber "2")}]
expected {1 (money/bignumber "2")
10 (money/bignumber "2")}]
(doseq [[chain-id exp-value] expected]
(is (money/equal-to (get result chain-id) exp-value))))))
(deftest test-network-values-for-ui
(testing "Sanitizes values correctly for display"
(let [amounts {"1" (money/bignumber "0")
"2" (money/bignumber "2.5")
"3" (money/bignumber "0.005")}
(let [amounts {1 (money/bignumber "0")
10 (money/bignumber "2.5")
42161 (money/bignumber "0.005")}
result (utils/network-values-for-ui amounts)
expected {"1" "<0.01"
"2" (money/bignumber "2.5")
"3" (money/bignumber "0.005")}]
expected {1 "<0.01"
10 (money/bignumber "2.5")
42161 (money/bignumber "0.005")}]
(doseq [[chain-id exp-value] expected]
(is #(or (= (get result chain-id) exp-value)
(money/equal-to (get result chain-id) exp-value)))))))
@ -168,32 +168,32 @@
(deftest test-token-available-networks-for-suggested-routes
(testing "Excludes disabled chain-ids correctly"
(let [balances-per-chain {"1" {:chain-id "1" :balance 100}
"10" {:chain-id "10" :balance 200}
"42161" {:chain-id "42161" :balance 300}}
disabled-chain-ids ["10"]
expected ["1" "42161"]]
(let [balances-per-chain {1 {:chain-id 1 :balance 100}
10 {:chain-id 10 :balance 200}
42161 {:chain-id 42161 :balance 300}}
disabled-chain-ids [10]
expected [1 42161]]
(is (= expected
(utils/token-available-networks-for-suggested-routes {:balances-per-chain balances-per-chain
:disabled-chain-ids
disabled-chain-ids})))))
(testing "Returns all chains when no disabled chains are specified"
(let [balances-per-chain {"1" {:chain-id "1" :balance 100}
"10" {:chain-id "10" :balance 200}
"42161" {:chain-id "42161" :balance 300}}
(let [balances-per-chain {1 {:chain-id 1 :balance 100}
10 {:chain-id 10 :balance 200}
42161 {:chain-id 42161 :balance 300}}
disabled-chain-ids []
expected ["1" "10" "42161"]]
expected [1 10 42161]]
(is (= expected
(utils/token-available-networks-for-suggested-routes {:balances-per-chain balances-per-chain
:disabled-chain-ids
disabled-chain-ids})))))
(testing "Returns empty list when all chains are disabled"
(let [balances-per-chain {"1" {:chain-id "1" :balance 100}
"10" {:chain-id "10" :balance 200}
"42161" {:chain-id "42161" :balance 300}}
disabled-chain-ids ["1" "10" "42161"]
(let [balances-per-chain {1 {:chain-id 1 :balance 100}
10 {:chain-id 10 :balance 200}
42161 {:chain-id 42161 :balance 300}}
disabled-chain-ids [1 10 42161]
expected []]
(is (= expected
(utils/token-available-networks-for-suggested-routes {:balances-per-chain balances-per-chain
@ -201,9 +201,9 @@
disabled-chain-ids})))))
(testing "Handles non-existent chain-ids gracefully"
(let [balances-per-chain {"59144" {:chain-id "59144" :balance 400}}
disabled-chain-ids ["1" "10" "42161"]
expected ["59144"]]
(let [balances-per-chain {59144 {:chain-id 59144 :balance 400}}
disabled-chain-ids [1 10 42161]
expected [59144]]
(is (= expected
(utils/token-available-networks-for-suggested-routes {:balances-per-chain balances-per-chain
:disabled-chain-ids
@ -211,10 +211,10 @@
(deftest test-reset-network-amounts-to-zero
(testing "Correctly resets loading network amounts to zero and changes type to default"
(let [network-amounts [{:chain-id "1" :total-amount (money/bignumber "100") :type :loading}
{:chain-id "10" :total-amount (money/bignumber "200") :type :default}]
expected [{:chain-id "1" :total-amount (money/bignumber "0") :type :default}
{:chain-id "10" :total-amount (money/bignumber "200") :type :default}]
(let [network-amounts [{:chain-id 1 :total-amount (money/bignumber "100") :type :loading}
{:chain-id 10 :total-amount (money/bignumber "200") :type :default}]
expected [{:chain-id 1 :total-amount (money/bignumber "0") :type :default}
{:chain-id 10 :total-amount (money/bignumber "200") :type :default}]
result (utils/reset-network-amounts-to-zero network-amounts)
comparisons (map #(map/deep-compare %1 %2)
expected
@ -222,10 +222,10 @@
(is (every? identity comparisons))))
(testing "Leaves non-loading types unchanged"
(let [network-amounts [{:chain-id "1" :total-amount (money/bignumber "100") :type :default}
{:chain-id "10" :total-amount (money/bignumber "0") :type :disabled}]
expected [{:chain-id "1" :total-amount (money/bignumber "100") :type :default}
{:chain-id "10" :total-amount (money/bignumber "0") :type :disabled}]
(let [network-amounts [{:chain-id 1 :total-amount (money/bignumber "100") :type :default}
{:chain-id 10 :total-amount (money/bignumber "0") :type :disabled}]
expected [{:chain-id 1 :total-amount (money/bignumber "100") :type :default}
{:chain-id 10 :total-amount (money/bignumber "0") :type :disabled}]
result (utils/reset-network-amounts-to-zero network-amounts)
comparisons (map #(map/deep-compare %1 %2)
expected
@ -242,10 +242,10 @@
(is (every? identity comparisons))))
(testing "Applies transformations to multiple loading entries"
(let [network-amounts [{:chain-id "1" :total-amount (money/bignumber "100") :type :loading}
{:chain-id "10" :total-amount (money/bignumber "200") :type :loading}]
expected [{:chain-id "1" :total-amount (money/bignumber "0") :type :default}
{:chain-id "10" :total-amount (money/bignumber "0") :type :default}]
(let [network-amounts [{:chain-id 1 :total-amount (money/bignumber "100") :type :loading}
{:chain-id 10 :total-amount (money/bignumber "200") :type :loading}]
expected [{:chain-id 1 :total-amount (money/bignumber "0") :type :default}
{:chain-id 10 :total-amount (money/bignumber "0") :type :default}]
result (utils/reset-network-amounts-to-zero network-amounts)
comparisons (map #(map/deep-compare %1 %2)
expected
@ -253,14 +253,14 @@
(is (every? identity comparisons))))
(testing "Mix of loading and non-loading types"
(let [network-amounts [{:chain-id "1" :total-amount (money/bignumber "100") :type :loading}
{:chain-id "10" :total-amount (money/bignumber "200") :type :default}
{:chain-id "42161" :total-amount (money/bignumber "300") :type :loading}
{:chain-id "59144" :total-amount (money/bignumber "0") :type :disabled}]
expected [{:chain-id "1" :total-amount (money/bignumber "0") :type :default}
{:chain-id "10" :total-amount (money/bignumber "200") :type :default}
{:chain-id "42161" :total-amount (money/bignumber "0") :type :default}
{:chain-id "59144" :total-amount (money/bignumber "0") :type :disabled}]
(let [network-amounts [{:chain-id 1 :total-amount (money/bignumber "100") :type :loading}
{:chain-id 10 :total-amount (money/bignumber "200") :type :default}
{:chain-id 42161 :total-amount (money/bignumber "300") :type :loading}
{:chain-id 59144 :total-amount (money/bignumber "0") :type :disabled}]
expected [{:chain-id 1 :total-amount (money/bignumber "0") :type :default}
{:chain-id 10 :total-amount (money/bignumber "200") :type :default}
{:chain-id 42161 :total-amount (money/bignumber "0") :type :default}
{:chain-id 59144 :total-amount (money/bignumber "0") :type :disabled}]
result (utils/reset-network-amounts-to-zero network-amounts)
comparisons (map #(map/deep-compare %1 %2)
expected
@ -269,42 +269,46 @@
(deftest test-network-amounts
(testing "Handles disabled and receiver networks correctly when receiver? is true"
(let [network-values {"1" (money/bignumber "100")
"10" (money/bignumber "200")}
disabled-chain-ids ["1"]
receiver-networks ["10"]
token-networks-ids ["1" "10" "42161"]
(let [network-values {1 (money/bignumber "100")
10 (money/bignumber "200")}
disabled-chain-ids [1]
receiver-networks [10]
token-networks-ids [1 10 42161]
receiver? true
expected [{:chain-id "1"
expected [{:chain-id 1
:total-amount (money/bignumber "100")
:type :default}
{:chain-id "10"
{:chain-id 10
:total-amount (money/bignumber "200")
:type :default}
{:type :add}]
tx-type :send
result (utils/network-amounts {:network-values network-values
:disabled-chain-ids disabled-chain-ids
:receiver-networks receiver-networks
:token-networks-ids token-networks-ids
:tx-type tx-type
:receiver? receiver?})]
(is (every? identity (map #(map/deep-compare %1 %2) expected result)))))
(testing "Adds default amount for non-disabled non-receiver networks when receiver? is false"
(let [network-values {"1" (money/bignumber "100")}
disabled-chain-ids ["10"]
(let [network-values {1 (money/bignumber "100")}
disabled-chain-ids [10]
receiver-networks []
token-networks-ids ["1" "10" "42161"]
token-networks-ids [1 10 42161]
receiver? false
expected [{:chain-id "1"
expected [{:chain-id 1
:total-amount (money/bignumber "100")
:type :default}
{:chain-id "10"
{:chain-id 10
:total-amount (money/bignumber "0")
:type :disabled}]
tx-type :send
result (utils/network-amounts {:network-values network-values
:disabled-chain-ids disabled-chain-ids
:receiver-networks receiver-networks
:token-networks-ids token-networks-ids
:tx-type tx-type
:receiver? receiver?})]
(is (every? identity (map #(map/deep-compare %1 %2) expected result)))))
@ -315,90 +319,139 @@
token-networks-ids []
receiver? true
expected []
tx-type :send
result (utils/network-amounts {:network-values network-values
:disabled-chain-ids disabled-chain-ids
:receiver-networks receiver-networks
:token-networks-ids token-networks-ids
:tx-type tx-type
:receiver? receiver?})]
(is (= expected result))))
(testing "Processes case with multiple network interactions"
(let [network-values {"1" (money/bignumber "300")
"10" (money/bignumber "400")
"42161" (money/bignumber "500")}
disabled-chain-ids ["1" "42161"]
receiver-networks ["10"]
token-networks-ids ["1" "10" "42161"]
(let [network-values {1 (money/bignumber "300")
10 (money/bignumber "400")
42161 (money/bignumber "500")}
disabled-chain-ids [1 42161]
receiver-networks [10]
token-networks-ids [1 10 42161]
receiver? true
expected [{:chain-id "1"
expected [{:chain-id 1
:total-amount (money/bignumber "300")
:type :default}
{:chain-id "10"
{:chain-id 10
:total-amount (money/bignumber "400")
:type :default}
{:chain-id "42161"
{:chain-id 42161
:total-amount (money/bignumber "500")
:type :default}]
tx-type :send
result (utils/network-amounts {:network-values network-values
:disabled-chain-ids disabled-chain-ids
:receiver-networks receiver-networks
:token-networks-ids token-networks-ids
:tx-type tx-type
:receiver? receiver?})]
(is (every? identity (map #(map/deep-compare %1 %2) expected result)))))
(testing "Does not assign :not-available type when receiver? is false"
(let [network-values {"1" (money/bignumber "100")}
disabled-chain-ids ["10"]
receiver-networks ["1"]
token-networks-ids ["1" "10"]
(let [network-values {1 (money/bignumber "100")}
disabled-chain-ids [10]
receiver-networks [1]
token-networks-ids [1 10]
receiver? false
expected [{:chain-id "1"
expected [{:chain-id 1
:total-amount (money/bignumber "100")
:type :default}
{:chain-id "10"
{:chain-id 10
:total-amount (money/bignumber "0")
:type :disabled}]
tx-type :send
result (utils/network-amounts {:network-values network-values
:disabled-chain-ids disabled-chain-ids
:receiver-networks receiver-networks
:token-networks-ids token-networks-ids
:tx-type tx-type
:receiver? receiver?})]
(is (every? identity (map #(map/deep-compare %1 %2) expected result)))))
(testing
"Assigns :not-available type to networks not available in token-networks-ids when receiver? is true"
(let [network-values {"1" (money/bignumber "100")}
(let [network-values {1 (money/bignumber "100")}
disabled-chain-ids []
receiver-networks ["1" "10"]
token-networks-ids ["1"]
receiver-networks [1 10]
token-networks-ids [1]
receiver? false
expected [{:chain-id "1"
expected [{:chain-id 1
:total-amount (money/bignumber "100")
:type :default}
{:chain-id "10"
{:chain-id 10
:total-amount nil
:type :not-available}]
tx-type :send
result (utils/network-amounts {:network-values network-values
:disabled-chain-ids disabled-chain-ids
:receiver-networks receiver-networks
:token-networks-ids token-networks-ids
:tx-type tx-type
:receiver? receiver?})]
(is (every? identity (map #(map/deep-compare %1 %2) expected result)))))
(testing "Handles disabled and receiver networks correctly when to? is false and tx-type is :tx/bridge"
(let [network-values {10 (money/bignumber "200")}
disabled-chain-ids [1]
receiver-networks [10]
token-networks-ids [1 10]
tx-type :tx/bridge
receiver? false
expected [{:chain-id 1
:total-amount (money/bignumber "0")
:type :disabled}
{:chain-id 10
:total-amount (money/bignumber "200")
:type :default}]
result (utils/network-amounts {:network-values network-values
:disabled-chain-ids disabled-chain-ids
:receiver-networks receiver-networks
:token-networks-ids token-networks-ids
:tx-type tx-type
:receiver? receiver?})]
(is (every? identity (map #(map/deep-compare %1 %2) expected result)))))
(testing "Handles disabled and receiver networks correctly when to? is true and tx-type is :tx/bridge"
(let [network-values {10 (money/bignumber "200")}
disabled-chain-ids [1]
receiver-networks [10]
token-networks-ids [1 10]
tx-type :tx/bridge
receiver? true
expected [{:chain-id 10
:total-amount (money/bignumber "200")
:type :default}]
result (utils/network-amounts {:network-values network-values
:disabled-chain-ids disabled-chain-ids
:receiver-networks receiver-networks
:token-networks-ids token-networks-ids
:tx-type tx-type
:receiver? receiver?})]
(is (every? identity (map #(map/deep-compare %1 %2) expected result))))))
(deftest test-loading-network-amounts
(testing "Assigns :loading type to valid networks except for disabled ones"
(let [valid-networks ["1" "10" "42161"]
disabled-chain-ids ["42161"]
receiver-networks ["1" "10"]
token-networks-ids ["1" "10" "42161"]
(let [valid-networks [1 10 42161]
disabled-chain-ids [42161]
receiver-networks [1 10]
token-networks-ids [1 10 42161]
receiver? true
expected [{:chain-id "1" :type :loading}
{:chain-id "10" :type :loading}
expected [{:chain-id 1 :type :loading}
{:chain-id 10 :type :loading}
{:type :add}]
tx-type :send
result (utils/loading-network-amounts {:valid-networks valid-networks
:disabled-chain-ids disabled-chain-ids
:receiver-networks receiver-networks
:token-networks-ids token-networks-ids
:tx-type tx-type
:receiver? receiver?})
comparisons (map #(map/deep-compare %1 %2)
expected
@ -406,18 +459,20 @@
(is (every? identity comparisons))))
(testing "Assigns :disabled type with zero total-amount to disabled networks when receiver? is false"
(let [valid-networks ["1" "10" "42161"]
disabled-chain-ids ["10" "42161"]
receiver-networks ["1"]
token-networks-ids ["1" "10" "42161"]
(let [valid-networks [1 10 42161]
disabled-chain-ids [10 42161]
receiver-networks [1]
token-networks-ids [1 10 42161]
receiver? false
expected [{:chain-id "1" :type :loading}
{:chain-id "10" :type :disabled :total-amount (money/bignumber "0")}
{:chain-id "42161" :type :disabled :total-amount (money/bignumber "0")}]
expected [{:chain-id 1 :type :loading}
{:chain-id 10 :type :disabled :total-amount (money/bignumber "0")}
{:chain-id 42161 :type :disabled :total-amount (money/bignumber "0")}]
tx-type :send
result (utils/loading-network-amounts {:valid-networks valid-networks
:disabled-chain-ids disabled-chain-ids
:receiver-networks receiver-networks
:token-networks-ids token-networks-ids
:tx-type tx-type
:receiver? receiver?})
comparisons (map #(map/deep-compare %1 %2)
expected
@ -425,17 +480,19 @@
(is (every? identity comparisons))))
(testing "Filters out networks not in receiver networks when receiver? is true"
(let [valid-networks ["1" "10" "42161" "59144"]
disabled-chain-ids ["10"]
receiver-networks ["1" "42161"]
token-networks-ids ["1" "10" "42161"]
(let [valid-networks [1 10 42161 59144]
disabled-chain-ids [10]
receiver-networks [1 42161]
token-networks-ids [1 10 42161]
receiver? true
expected [{:chain-id "1" :type :loading}
{:chain-id "42161" :type :loading}]
expected [{:chain-id 1 :type :loading}
{:chain-id 42161 :type :loading}]
tx-type :send
result (utils/loading-network-amounts {:valid-networks valid-networks
:disabled-chain-ids disabled-chain-ids
:receiver-networks receiver-networks
:token-networks-ids token-networks-ids
:tx-type tx-type
:receiver? receiver?})
comparisons (map #(map/deep-compare %1 %2)
expected
@ -444,17 +501,19 @@
(testing
"Appends :add type if receiver network count is less than available networks and receiver? is true"
(let [valid-networks ["1" "10" "42161"]
disabled-chain-ids ["10"]
receiver-networks ["1"]
token-networks-ids ["1" "10" "42161"]
(let [valid-networks [1 10 42161]
disabled-chain-ids [10]
receiver-networks [1]
token-networks-ids [1 10 42161]
receiver? true
expected [{:chain-id "1" :type :loading}
expected [{:chain-id 1 :type :loading}
{:type :add}]
tx-type :send
result (utils/loading-network-amounts {:valid-networks valid-networks
:disabled-chain-ids disabled-chain-ids
:receiver-networks receiver-networks
:token-networks-ids token-networks-ids
:tx-type tx-type
:receiver? receiver?})
comparisons (map #(map/deep-compare %1 %2)
expected
@ -463,16 +522,18 @@
(testing
"Assigns :not-available type to networks not available in token-networks-ids when receiver? is false"
(let [valid-networks ["42161"]
(let [valid-networks [42161]
disabled-chain-ids []
receiver-networks ["1"]
token-networks-ids ["42161"]
receiver-networks [1]
token-networks-ids [42161]
receiver? false
expected [{:chain-id "42161" :type :loading}]
expected [{:chain-id 42161 :type :loading}]
tx-type :send
result (utils/loading-network-amounts {:valid-networks valid-networks
:disabled-chain-ids disabled-chain-ids
:receiver-networks receiver-networks
:token-networks-ids token-networks-ids
:tx-type tx-type
:receiver? receiver?})
comparisons (map #(map/deep-compare %1 %2)
expected
@ -481,17 +542,60 @@
(testing
"Assigns :not-available type to networks not available in token-networks-ids when receiver? is true"
(let [valid-networks ["42161"]
(let [valid-networks [42161]
disabled-chain-ids []
receiver-networks ["1"]
token-networks-ids ["42161"]
receiver-networks [1]
token-networks-ids [42161]
receiver? true
expected [{:chain-id "1" :type :not-available}
expected [{:chain-id 1 :type :not-available}
{:type :add}]
tx-type :send
result (utils/loading-network-amounts {:valid-networks valid-networks
:disabled-chain-ids disabled-chain-ids
:receiver-networks receiver-networks
:token-networks-ids token-networks-ids
:tx-type tx-type
:receiver? receiver?})
comparisons (map #(map/deep-compare %1 %2)
expected
result)]
(is (every? identity comparisons))))
(testing
"Assigns :loading type to valid networks and :disabled for disabled ones when tx-type is :tx/bridge and to? false"
(let [valid-networks [1 10]
disabled-chain-ids [10]
receiver-networks []
token-networks-ids [1 10]
tx-type :tx/bridge
receiver? false
expected [{:chain-id 1 :type :loading}
{:chain-id 10 :type :disabled :total-amount (money/bignumber "0")}]
result (utils/loading-network-amounts {:valid-networks valid-networks
:disabled-chain-ids disabled-chain-ids
:receiver-networks receiver-networks
:token-networks-ids token-networks-ids
:tx-type tx-type
:receiver? receiver?})
comparisons (map #(map/deep-compare %1 %2)
expected
result)]
(is (every? identity comparisons))))
(testing
"Assigns :loading type to valid networks, ignore disabled ones and do not add {:type :add} when tx-type is :tx/bridge and to? true"
(let [valid-networks [1]
disabled-chain-ids [10]
receiver-networks []
token-networks-ids [1 10]
tx-type :tx/bridge
receiver? true
expected [{:chain-id 1 :type :loading}]
result (utils/loading-network-amounts {:valid-networks valid-networks
:disabled-chain-ids disabled-chain-ids
:receiver-networks receiver-networks
:token-networks-ids token-networks-ids
:tx-type tx-type
:receiver? receiver?})
comparisons (map #(map/deep-compare %1 %2)
expected
@ -500,22 +604,22 @@
(deftest test-network-links
(testing "Calculates position differences correctly"
(let [route [{:from {:chain-id "1"} :to {:chain-id "42161"}}
{:from {:chain-id "10"} :to {:chain-id "1"}}
{:from {:chain-id "42161"} :to {:chain-id "10"}}]
from-values-by-chain [{:chain-id "1"} {:chain-id "10"} {:chain-id "42161"}]
to-values-by-chain [{:chain-id "42161"} {:chain-id "1"} {:chain-id "10"}]
expected [{:from-chain-id "1" :to-chain-id "42161" :position-diff 0}
{:from-chain-id "10" :to-chain-id "1" :position-diff 0}
{:from-chain-id "42161" :to-chain-id "10" :position-diff 0}]
(let [route [{:from {:chain-id 1} :to {:chain-id 42161}}
{:from {:chain-id 10} :to {:chain-id 1}}
{:from {:chain-id 42161} :to {:chain-id 10}}]
from-values-by-chain [{:chain-id 1} {:chain-id 10} {:chain-id 42161}]
to-values-by-chain [{:chain-id 42161} {:chain-id 1} {:chain-id 10}]
expected [{:from-chain-id 1 :to-chain-id 42161 :position-diff 0}
{:from-chain-id 10 :to-chain-id 1 :position-diff 0}
{:from-chain-id 42161 :to-chain-id 10 :position-diff 0}]
result (utils/network-links route from-values-by-chain to-values-by-chain)]
(is (= expected result))))
(testing "Handles cases with no position difference"
(let [route [{:from {:chain-id "1"} :to {:chain-id "1"}}]
from-values-by-chain [{:chain-id "1"} {:chain-id "10"} {:chain-id "42161"}]
to-values-by-chain [{:chain-id "1"} {:chain-id "10"} {:chain-id "42161"}]
expected [{:from-chain-id "1" :to-chain-id "1" :position-diff 0}]
(let [route [{:from {:chain-id 1} :to {:chain-id 1}}]
from-values-by-chain [{:chain-id 1} {:chain-id 10} {:chain-id 42161}]
to-values-by-chain [{:chain-id 1} {:chain-id 10} {:chain-id 42161}]
expected [{:from-chain-id 1 :to-chain-id 1 :position-diff 0}]
result (utils/network-links route from-values-by-chain to-values-by-chain)]
(is (= expected result))))
@ -528,9 +632,9 @@
(is (= expected result))))
(testing "Verifies negative position differences"
(let [route [{:from {:chain-id "1"} :to {:chain-id "42161"}}]
from-values-by-chain [{:chain-id "1"} {:chain-id "10"} {:chain-id "42161"}]
to-values-by-chain [{:chain-id "1"} {:chain-id "10"} {:chain-id "42161"}]
expected [{:from-chain-id "1" :to-chain-id "42161" :position-diff -2}]
(let [route [{:from {:chain-id 1} :to {:chain-id 42161}}]
from-values-by-chain [{:chain-id 1} {:chain-id 10} {:chain-id 42161}]
to-values-by-chain [{:chain-id 1} {:chain-id 10} {:chain-id 42161}]
expected [{:from-chain-id 1 :to-chain-id 42161 :position-diff -2}]
result (utils/network-links route from-values-by-chain to-values-by-chain)]
(is (= expected result)))))