Cover wallet send events with tests Part 2 #20411 #20533 (#20721)

This commit is contained in:
mmilad75 2024-07-30 14:14:36 +02:00 committed by GitHub
parent 8c2d5398b0
commit 99ccbc3383
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
1 changed files with 345 additions and 70 deletions

View File

@ -1,6 +1,7 @@
(ns status-im.contexts.wallet.send.events-test (ns status-im.contexts.wallet.send.events-test
(:require (:require
[cljs.test :refer-macros [is testing]] [cljs.test :refer-macros [is testing run-tests]]
matcher-combinators.test
[re-frame.db :as rf-db] [re-frame.db :as rf-db]
[status-im.contexts.wallet.common.utils.networks :as network-utils] [status-im.contexts.wallet.common.utils.networks :as network-utils]
status-im.contexts.wallet.send.events status-im.contexts.wallet.send.events
@ -14,7 +15,10 @@
:description :description
"dogs are cute and this one is the cutestdogs are cute and this one is the cutest" "dogs are cute and this one is the cutestdogs are cute and this one is the cutest"
:ownership [{:address "0x01" :ownership [{:address "0x01"
:balance balance}]}) :balance balance}]
:id {:contract-id {:address "0x11"
:chain-id 1}
:token-id "some-id"}})
(h/deftest-event :wallet/update-receiver-networks (h/deftest-event :wallet/update-receiver-networks
[event-id dispatch] [event-id dispatch]
@ -170,13 +174,14 @@
:networks #{{:chain-id 421614} :networks #{{:chain-id 421614}
{:chain-id 11155420} {:chain-id 11155420}
{:chain-id 11155111}}} {:chain-id 11155111}}}
receiver-networks [421614 11155420]] receiver-networks [421614 11155420]
expected-db {:wallet {:ui {:other-props :value}}}]
(reset! rf-db/app-db (reset! rf-db/app-db
{:wallet {:ui {:send {:token-display-name token-symbol {:wallet {:ui {:send {:token-display-name token-symbol
:token token :token token
:receiver-networks receiver-networks} :receiver-networks receiver-networks}
:other-props :value}}}) :other-props :value}}})
(is (not (contains? (get-in (dispatch [event-id]) [:db :wallet :ui]) :send))))) (is (match-strict? expected-db (:db (dispatch [event-id]))))))
(h/deftest-event :wallet/select-address-tab (h/deftest-event :wallet/select-address-tab
[event-id dispatch] [event-id dispatch]
@ -187,38 +192,37 @@
(h/deftest-event :wallet/clean-send-address (h/deftest-event :wallet/clean-send-address
[event-id dispatch] [event-id dispatch]
(let [expected-db {:wallet {:ui {:send {:other-props :value}}}}]
(reset! rf-db/app-db (reset! rf-db/app-db
{:wallet {:ui {:send {:to-address "0x01" {:wallet {:ui {:send {:to-address "0x01"
:recipient {:recipient-type :saved-address :recipient {:recipient-type :saved-address
:label "label"} :label "label"}
:other-props :value}}}}) :other-props :value}}}})
(is (not (contains? (get-in (dispatch [event-id]) [:db :wallet :ui :send]) :to-address))) (is (match-strict? expected-db (:db (dispatch [event-id]))))))
(is (not (contains? (get-in (dispatch [event-id]) [:db :wallet :ui :send]) :recipient)))
(is (contains? (get-in (dispatch [event-id]) [:db :wallet :ui :send]) :other-props)))
(h/deftest-event :wallet/clean-send-amount (h/deftest-event :wallet/clean-send-amount
[event-id dispatch] [event-id dispatch]
(let [expected-db {:wallet {:ui {:send {:other-props :value}}}}]
(reset! rf-db/app-db (reset! rf-db/app-db
{:wallet {:ui {:send {:amount 10 {:wallet {:ui {:send {:amount 10
:other-props :value}}}}) :other-props :value}}}})
(is (not (contains? (get-in (dispatch [event-id]) [:db :wallet :ui :send]) :amount))) (is (match-strict? expected-db (:db (dispatch [event-id]))))))
(is (contains? (get-in (dispatch [event-id]) [:db :wallet :ui :send]) :other-props)))
(h/deftest-event :wallet/clean-disabled-from-networks (h/deftest-event :wallet/clean-disabled-from-networks
[event-id dispatch] [event-id dispatch]
(let [expected-db {:wallet {:ui {:send {:other-props :value}}}}]
(reset! rf-db/app-db (reset! rf-db/app-db
{:wallet {:ui {:send {:disabled-from-chain-ids [:optimism] {:wallet {:ui {:send {:disabled-from-chain-ids [:optimism]
:other-props :value}}}}) :other-props :value}}}})
(is (not (contains? (get-in (dispatch [event-id]) [:db :wallet :ui :send]) :disabled-from-chain-ids))) (is (match-strict? expected-db (:db (dispatch [event-id]))))))
(is (contains? (get-in (dispatch [event-id]) [:db :wallet :ui :send]) :other-props)))
(h/deftest-event :wallet/clean-from-locked-amounts (h/deftest-event :wallet/clean-from-locked-amounts
[event-id dispatch] [event-id dispatch]
(let [expected-db {:wallet {:ui {:send {:other-props :value}}}}]
(reset! rf-db/app-db (reset! rf-db/app-db
{:wallet {:ui {:send {:from-locked-amounts "value" {:wallet {:ui {:send {:from-locked-amounts "value"
:other-props :value}}}}) :other-props :value}}}})
(is (not (contains? (get-in (dispatch [event-id]) [:db :wallet :ui :send]) :from-locked-amounts))) (is (match-strict? expected-db (:db (dispatch [event-id]))))))
(is (contains? (get-in (dispatch [event-id]) [:db :wallet :ui :send]) :other-props)))
(h/deftest-event :wallet/disable-from-networks (h/deftest-event :wallet/disable-from-networks
[event-id dispatch] [event-id dispatch]
@ -247,30 +251,27 @@
(h/deftest-event :wallet/clean-selected-token (h/deftest-event :wallet/clean-selected-token
[event-id dispatch] [event-id dispatch]
(let [expected-db {:wallet {:ui {:send {:other-props :value}}}}]
(reset! rf-db/app-db (reset! rf-db/app-db
{:wallet {:ui {:send {:other-props :value {:wallet {:ui {:send {:other-props :value
:token "ETH" :token "ETH"
:token-display-name "ETH" :token-display-name "ETH"
:tx-type :tx/collectible-erc-721}}}}) :tx-type :tx/collectible-erc-721}}}})
(is (not (contains? (get-in (dispatch [event-id]) [:db :wallet :ui :send]) :token))) (is (match-strict? expected-db (:db (dispatch [event-id]))))))
(is (not (contains? (get-in (dispatch [event-id]) [:db :wallet :ui :send]) :token-display-name)))
(is (not (contains? (get-in (dispatch [event-id]) [:db :wallet :ui :send]) :tx-type)))
(is (contains? (get-in (dispatch [event-id]) [:db :wallet :ui :send]) :other-props)))
(h/deftest-event :wallet/clean-selected-collectible (h/deftest-event :wallet/clean-selected-collectible
[event-id dispatch] [event-id dispatch]
(let [expected-db {:wallet {:ui {:send {:other-props :value}}}}]
(reset! rf-db/app-db (reset! rf-db/app-db
{:wallet {:ui {:send {:other-props :value {:wallet {:ui {:send {:other-props :value
:collectible "ETH" :collectible "ETH"
:token-display-name "ETH" :token-display-name "ETH"
:amount 10}}}}) :amount 10}}}})
(is (not (contains? (get-in (dispatch [event-id]) [:db :wallet :ui :send]) :collectible))) (is (match-strict? expected-db (:db (dispatch [event-id]))))))
(is (not (contains? (get-in (dispatch [event-id]) [:db :wallet :ui :send]) :token-display-name)))
(is (not (contains? (get-in (dispatch [event-id]) [:db :wallet :ui :send]) :amount)))
(is (contains? (get-in (dispatch [event-id]) [:db :wallet :ui :send]) :other-props)))
(h/deftest-event :wallet/clean-suggested-routes (h/deftest-event :wallet/clean-suggested-routes
[event-id dispatch] [event-id dispatch]
(let [expected-db {:wallet {:ui {:send {:other-props :value}}}}]
(reset! rf-db/app-db (reset! rf-db/app-db
{:wallet {:ui {:send {:wallet {:ui {:send
{:other-props :value {:other-props :value
@ -285,17 +286,7 @@
:to-chain-id 10 :to-chain-id 10
:position-diff 1}] :position-diff 1}]
:loading-suggested-routes? false}}}}) :loading-suggested-routes? false}}}})
(is (not (contains? (get-in (dispatch [event-id]) [:db :wallet :ui :send]) :suggested-routes))) (is (match-strict? expected-db (:db (dispatch [event-id]))))))
(is (not (contains? (get-in (dispatch [event-id]) [:db :wallet :ui :send]) :route)))
(is (not (contains? (get-in (dispatch [event-id]) [:db :wallet :ui :send]) :amount)))
(is (not (contains? (get-in (dispatch [event-id]) [:db :wallet :ui :send]) :from-values-by-chain)))
(is (not (contains? (get-in (dispatch [event-id]) [:db :wallet :ui :send]) :to-values-by-chain)))
(is (not (contains? (get-in (dispatch [event-id]) [:db :wallet :ui :send]) :sender-network-values)))
(is (not (contains? (get-in (dispatch [event-id]) [:db :wallet :ui :send]) :receiver-network-values)))
(is (not (contains? (get-in (dispatch [event-id]) [:db :wallet :ui :send]) :network-links)))
(is (not (contains? (get-in (dispatch [event-id]) [:db :wallet :ui :send])
:loading-suggested-routes?)))
(is (contains? (get-in (dispatch [event-id]) [:db :wallet :ui :send]) :other-props)))
(h/deftest-event :wallet/suggested-routes-error (h/deftest-event :wallet/suggested-routes-error
[event-id dispatch] [event-id dispatch]
@ -453,3 +444,287 @@
:recipient recipient :recipient recipient
:stack-id stack-id :stack-id stack-id
:start-flow? start-flow?}]))))))) :start-flow? start-flow?}])))))))
(h/deftest-event :wallet/suggested-routes-success
[event-id dispatch]
(let [timestamp :timestamp
suggested-routes {:Best
[{:From {:isTest false
:chainName "Arbitrum"
:chainId 42161}
:AmountInLocked false
:AmountIn "0x5af3107a4000"
:MaxAmountIn "0x4f7920c6831d6"
:GasFees {:gasPrice "0.01"
:baseFee "0.008750001"
:eip1559Enabled true}
:BridgeName "Transfer"
:AmountOut "0x5af3107a4000"
:To {:isTest false
:chainName "Arbitrum"
:chainId 42161}
:Cost "0.006539438247064285301"
:GasAmount 108197}]
:Candidates
[{:From {:isTest false
:chainName "Arbitrum"
:chainId 42161}
:AmountInLocked false
:AmountIn "0x5af3107a4000"
:MaxAmountIn "0x4f7920c6831d6"
:GasFees {:gasPrice "0.01"
:baseFee "0.008750001"
:eip1559Enabled true}
:BridgeName "Transfer"
:AmountOut "0x5af3107a4000"
:To {:isTest false
:chainName "Arbitrum"
:chainId 42161}
:Cost "0.006539438247064285301"
:GasAmount 108197}
{:From {:isTest false
:chainName "Ethereum"
:chainId 1}
:AmountInLocked false
:AmountIn "0x0"
:MaxAmountIn "0x245aa392272e6"
:GasFees {:gasPrice "1.01"
:baseFee "1.008750001"
:eip1559Enabled true}
:BridgeName "Transfer"
:AmountOut "0x0"
:To {:isTest false
:chainName "Arbitrum"
:chainId 42161}
:Cost "1.906539438247064285301"
:GasAmount 23487}]
:NativeChainTokenPrice 123
:TokenPrice 123}
suggested-routes-data suggested-routes
chosen-route (:best suggested-routes-data)
token-symbol "ETH"
token {:symbol "ETH"
:name "Ether"
:networks #{{:chain-id 421614}
{:chain-id 11155420}
{:chain-id 11155111}}}
token-networks (:networks token)
routes-available? (pos? (count chosen-route))
sender-network-values [1 10]
receiver-network-values [1 10]
receiver-networks [1 10 421614]
token-decimals (if (collectible-with-balance 1) 0 (:decimals token))
native-token? (and token (= token-symbol "ETH"))
from-network-amounts-by-chain (send-utils/network-amounts-by-chain {:route chosen-route
:token-decimals
token-decimals
:native-token?
native-token?
:receiver? false})
to-network-amounts-by-chain (send-utils/network-amounts-by-chain {:route chosen-route
:token-decimals
token-decimals
:native-token?
native-token?
:receiver? true})
to-network-values-for-ui (send-utils/network-values-for-ui to-network-amounts-by-chain)
tx-type :tx/collectible-erc-1155
from-network-values-for-ui (send-utils/network-values-for-ui from-network-amounts-by-chain)
disabled-from-chain-ids [:421614]
token-networks-ids (when token-networks (mapv #(:chain-id %) token-networks))
sender-possible-chain-ids (mapv :chain-id sender-network-values)
receiver-network-values (if routes-available?
(send-utils/network-amounts
{:network-values to-network-values-for-ui
:disabled-chain-ids disabled-from-chain-ids
:receiver-networks receiver-networks
:token-networks-ids token-networks-ids
:tx-type tx-type
:receiver? true})
(cond->
(send-utils/reset-loading-network-amounts-to-zero
receiver-network-values)
(not= tx-type :tx/bridge) (conj {:type :edit})))
sender-network-values (if routes-available?
(send-utils/network-amounts
{:network-values
(if (= tx-type :tx/bridge)
from-network-values-for-ui
(send-utils/add-zero-values-to-network-values
from-network-values-for-ui
sender-possible-chain-ids))
:disabled-chain-ids disabled-from-chain-ids
:receiver-networks receiver-networks
:token-networks-ids token-networks-ids
:from-locked-amounts {}
:tx-type tx-type
:receiver? false})
(send-utils/reset-loading-network-amounts-to-zero
sender-network-values))
expected-db {:wallet {:ui {:send
{:other-props :value
:suggested-routes suggested-routes-data
:route chosen-route
:token token
:disabled-from-chain-ids disabled-from-chain-ids
:suggested-routes-call-timestamp timestamp
:collectible (collectible-with-balance 1)
:token-display-name token-symbol
:receiver-networks receiver-networks
:tx-type tx-type
:from-values-by-chain from-network-values-for-ui
:to-values-by-chain to-network-values-for-ui
:sender-network-values sender-network-values
:receiver-network-values receiver-network-values
:network-links (when routes-available?
(send-utils/network-links
chosen-route
sender-network-values
receiver-network-values))
:loading-suggested-routes? false
:from-locked-amounts {}}}}}]
(reset! rf-db/app-db
{:wallet {:ui {:send {:other-props :value
:suggested-routes-call-timestamp timestamp
:token token
:collectible (collectible-with-balance 1)
:token-display-name token-symbol
:receiver-networks receiver-networks
:receiver-network-values [1 10]
:sender-network-values [1 10]
:tx-type tx-type
:disabled-from-chain-ids disabled-from-chain-ids
:from-locked-amounts {}}}}})
(is (match? expected-db (:db (dispatch [event-id suggested-routes timestamp]))))))
(h/deftest-event :wallet/add-authorized-transaction
[event-id dispatch]
(let [hashes {:chain-1 ["tx-1" "tx-2" "tx-3"]
:chain-2 ["tx-4" "tx-5"]
:chain-3 ["tx-6" "tx-7" "tx-8" "tx-9"]}
transaction-id "txid-1"
expected-result {:db {:wallet {:ui {:send {:transaction-ids ["tx-1" "tx-2" "tx-3"
"tx-4" "tx-5" "tx-6"
"tx-7" "tx-8" "tx-9"]}}
:transactions (send-utils/map-multitransaction-by-ids
transaction-id
hashes)}}
:fx [[:dispatch [:wallet/end-transaction-flow]]
[:dispatch-later
[{:ms 2000
:dispatch [:wallet/clean-just-completed-transaction]}]]]}]
(is (match? expected-result
(dispatch [event-id
{:id transaction-id
:hashes hashes}])))))
(h/deftest-event :wallet/select-from-account
[event-id dispatch]
(let [stack-id :screen/stack
start-flow? false
address "0x01"]
(testing "when tx-type is :tx/bridge and token-symbol is nil"
(let [flow-id :wallet-bridge-flow
tx-type :tx/bridge
expected-result {:db {:wallet {:ui {:send {:to-address address
:tx-type tx-type}}}}
:fx [[:dispatch [:wallet/switch-current-viewing-account address]]
[:dispatch
[:wallet/wizard-navigate-forward
{:current-screen stack-id
:start-flow? start-flow?
:flow-id flow-id}]]]}]
(reset! rf-db/app-db {:wallet {:ui {:send {:tx-type tx-type}}}})
(is (match? expected-result
(dispatch [event-id
{:address address
:stack-id stack-id
:start-flow? start-flow?}])))))
(testing "when tx-type is not :tx/bridge and token-symbol is nil"
(let [flow-id :wallet-send-flow
tx-type :tx/collectible-erc-721
expected-result {:db {:wallet {:ui {:send {:tx-type tx-type}}}}
:fx [[:dispatch [:wallet/switch-current-viewing-account address]]
[:dispatch
[:wallet/wizard-navigate-forward
{:current-screen stack-id
:start-flow? start-flow?
:flow-id flow-id}]]]}]
(reset! rf-db/app-db {:wallet {:ui {:send {:tx-type tx-type}}}})
(is (match? expected-result
(dispatch [event-id
{:address address
:stack-id stack-id
:start-flow? start-flow?}])))))
(testing "when tx-type is :tx/bridge and token-symbol is not nil"
(let [flow-id :wallet-bridge-flow
tx-type :tx/bridge
tokens [{:symbol "ETH"
:chain-id 1
:balances-per-chain {1 {:raw-balance (money/bignumber 100)}
10 {:raw-balance (money/bignumber 200)}
42161 {:raw-balance (money/bignumber 300)}}
:decimals 2}]
network-details #{{:chain-id 1}
{:chain-id 10}
{:chain-id 42161}}
expected-result {:db {:wallet {:ui {:send {:to-address address
:tx-type tx-type
:token-symbol "ETH"
:token (assoc (first tokens)
:networks #{nil}
:total-balance
(money/bignumber 6))}}
:accounts {address {:tokens tokens}}}}
:fx [[:dispatch [:wallet/switch-current-viewing-account address]]
[:dispatch
[:wallet/wizard-navigate-forward
{:current-screen stack-id
:start-flow? start-flow?
:flow-id flow-id}]]]}]
(reset! rf-db/app-db {:wallet {:ui {:send {:tx-type tx-type
:token-symbol "ETH"}}
:accounts {address {:tokens tokens}}}})
(is (match? expected-result
(dispatch [event-id
{:address address
:stack-id stack-id
:start-flow? start-flow?
:netork-details network-details}])))))
(testing "when tx-type is not :tx/bridge and token-symbol is not nil"
(let [flow-id :wallet-send-flow
tx-type :tx/collectible-erc-721
tokens [{:symbol "ETH"
:chain-id 1
:balances-per-chain {1 {:raw-balance (money/bignumber 100)}
10 {:raw-balance (money/bignumber 200)}
42161 {:raw-balance (money/bignumber 300)}}
:decimals 2}]
network-details #{{:chain-id 1}
{:chain-id 10}
{:chain-id 42161}}
expected-result {:db {:wallet {:ui {:send {:tx-type tx-type
:token-symbol "ETH"
:token (assoc (first tokens)
:networks #{nil}
:total-balance
(money/bignumber 6))}}
:accounts {address {:tokens tokens}}}}
:fx [[:dispatch [:wallet/switch-current-viewing-account address]]
[:dispatch
[:wallet/wizard-navigate-forward
{:current-screen stack-id
:start-flow? start-flow?
:flow-id flow-id}]]]}]
(reset! rf-db/app-db {:wallet {:ui {:send {:tx-type tx-type
:token-symbol "ETH"}}
:accounts {address {:tokens tokens}}}})
(is (match? expected-result
(dispatch [event-id
{:address address
:stack-id stack-id
:start-flow? start-flow?
:netork-details network-details}])))))))
(run-tests)