Compare commits
19
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
4bd4b0885d | ||
|
|
d8b96e8df7 | ||
|
|
220dce492d | ||
|
|
9ee67c96ed | ||
|
|
69cd5e0948 | ||
|
|
7d6d92107c | ||
|
|
928f230dca | ||
|
|
1d6d58132c | ||
|
|
4f866dbe6f | ||
|
|
78aae78c9f | ||
|
|
a5d2ff0459 | ||
|
|
b1520d11c9 | ||
|
|
9a40f2feb2 | ||
|
|
cb4980e2f0 | ||
|
|
72de7eb973 | ||
|
|
7e8207e506 | ||
|
|
a4d0060029 | ||
|
|
e2b779cbe3 | ||
|
|
2c1036a917 |
@@ -36,3 +36,4 @@ COMMUNITIES_MANAGEMENT_ENABLED=1
|
||||
METRICS_ENABLED=0
|
||||
DELETE_MESSAGE_ENABLED=1
|
||||
TWO_MINUTES_SYNCING=1
|
||||
ENABLE_QUO_PREVIEW=1
|
||||
|
||||
@@ -10,7 +10,7 @@ project-board:
|
||||
|
||||
automated-tests:
|
||||
repo-full-name: 'status-im/status-react'
|
||||
job-full-name: 'end-to-end-tests/status-app-prs'
|
||||
job-full-name: 'status-react/e2e/status-app-prs'
|
||||
kickoff-column-name: 'E2E Tests'
|
||||
|
||||
github-team:
|
||||
|
||||
+2
-1
@@ -168,4 +168,5 @@ project.clj
|
||||
|
||||
##appium
|
||||
test/appium/report/
|
||||
result.xml
|
||||
result.xml
|
||||
test/appium/tests/users.py
|
||||
@@ -1,4 +1,4 @@
|
||||
.PHONY: nix-add-gcroots clean nix-clean run-metro test release _list _fix-node-perms _tmpdir-mk _tmpdir-rm
|
||||
.PHONY: nix-add-gcroots clean nix-clean run-metro test release _list _fix-node-perms _tmpdir-mk _tmpdir-rm _install-hooks
|
||||
|
||||
help: SHELL := /bin/sh
|
||||
help: ##@other Show this help
|
||||
@@ -124,6 +124,11 @@ _tmpdir-rm: SHELL := /bin/sh
|
||||
_tmpdir-rm: ##@prepare Remove TMPDIR
|
||||
rm -fr "$(TMPDIR)"
|
||||
|
||||
_install-hooks: SHELL := /bin/sh
|
||||
_install-hooks: ##@prepare Create prepare-commit-msg git hook symlink
|
||||
@ln -s -f ../../scripts/hooks/prepare-commit-msg .git/hooks
|
||||
-include _install-hooks
|
||||
|
||||
# Remove directories and ignored files
|
||||
clean: SHELL := /bin/sh
|
||||
clean: _fix-node-perms _tmpdir-rm ##@prepare Remove all output folders
|
||||
|
||||
@@ -101,7 +101,7 @@ pipeline {
|
||||
steps { script {
|
||||
e2eApk = utils.getEnv(apke2e, 'SAUCE_URL')
|
||||
build(
|
||||
job: 'end-to-end-tests/status-app-nightly',
|
||||
job: 'status-react/e2e/status-app-nightly',
|
||||
parameters: [string(name: 'APK_NAME', value: e2eApk)],
|
||||
wait: false
|
||||
)
|
||||
|
||||
@@ -48,8 +48,14 @@ pipeline {
|
||||
credentialsId: 'infura-e2e-token',
|
||||
variable: 'WEB3_INFURA_PROJECT_ID'
|
||||
),
|
||||
file(
|
||||
credentialsId: "mobile-tests-eth-accounts",
|
||||
variable: 'TEST_ETH_ACCOUNTS_FILE'
|
||||
),
|
||||
]) {
|
||||
dir('test/appium/tests') {
|
||||
/* Provide Eth test accounts secrets. */
|
||||
sh 'cp -f $TEST_ETH_ACCOUNTS_FILE users.py'
|
||||
sh """
|
||||
python3 -m pytest \
|
||||
--numprocesses 15 \
|
||||
|
||||
@@ -85,8 +85,14 @@ pipeline {
|
||||
credentialsId: 'infura-e2e-token',
|
||||
variable: 'WEB3_INFURA_PROJECT_ID'
|
||||
),
|
||||
file(
|
||||
credentialsId: "mobile-tests-eth-accounts",
|
||||
variable: 'TEST_ETH_ACCOUNTS_FILE'
|
||||
),
|
||||
]) {
|
||||
dir('test/appium/tests') {
|
||||
/* Provide Eth test account secrets. */
|
||||
sh 'cp -f $TEST_ETH_ACCOUNTS_FILE users.py'
|
||||
sh """
|
||||
python3 -m pytest \
|
||||
--numprocesses 15 \
|
||||
|
||||
@@ -62,8 +62,14 @@ pipeline {
|
||||
credentialsId: 'infura-e2e-token',
|
||||
variable: 'WEB3_INFURA_PROJECT_ID'
|
||||
),
|
||||
file(
|
||||
credentialsId: "mobile-tests-eth-accounts",
|
||||
variable: 'TEST_ETH_ACCOUNTS_FILE'
|
||||
),
|
||||
]) {
|
||||
dir('test/appium/tests') {
|
||||
/* Provide Eth test accounts secrets. */
|
||||
sh 'cp -f $TEST_ETH_ACCOUNTS_FILE users.py'
|
||||
sh """
|
||||
python3 -m pytest \
|
||||
-m "upgrade" \
|
||||
|
||||
+20
-8
@@ -2,7 +2,7 @@ PODS:
|
||||
- boost-for-react-native (1.63.0)
|
||||
- BVLinearGradient (2.5.6):
|
||||
- React
|
||||
- CryptoSwift (1.4.2)
|
||||
- CryptoSwift (1.4.3)
|
||||
- DoubleConversion (1.1.6)
|
||||
- FBLazyVector (0.63.4)
|
||||
- FBReactNativeSpec (0.63.4):
|
||||
@@ -206,6 +206,8 @@ PODS:
|
||||
- React-jsinspector (0.63.4)
|
||||
- react-native-background-timer (2.2.0):
|
||||
- React
|
||||
- react-native-blob-util (0.13.18):
|
||||
- React-Core
|
||||
- react-native-camera-kit (8.0.4):
|
||||
- React
|
||||
- react-native-cameraroll (4.0.4):
|
||||
@@ -220,6 +222,8 @@ PODS:
|
||||
- React-Core
|
||||
- react-native-netinfo (4.7.0):
|
||||
- React
|
||||
- react-native-notifications (4.1.3):
|
||||
- React-Core
|
||||
- react-native-safe-area-context (2.0.0):
|
||||
- React
|
||||
- react-native-shake (3.4.0):
|
||||
@@ -233,7 +237,7 @@ PODS:
|
||||
- react-native-status-keycard (2.5.37):
|
||||
- Keycard
|
||||
- React
|
||||
- react-native-webview (11.3.0):
|
||||
- react-native-webview (11.16.0):
|
||||
- React-Core
|
||||
- React-RCTActionSheet (0.63.4):
|
||||
- React-Core/RCTActionSheetHeaders (= 0.63.4)
|
||||
@@ -388,8 +392,8 @@ PODS:
|
||||
- SQLCipher/common (3.4.2)
|
||||
- SQLCipher/standard (3.4.2):
|
||||
- SQLCipher/common
|
||||
- SSZipArchive (2.4.2)
|
||||
- TOCropViewController (2.6.0)
|
||||
- SSZipArchive (2.4.3)
|
||||
- TOCropViewController (2.6.1)
|
||||
- TouchID (4.4.1):
|
||||
- React
|
||||
- Yoga (1.14.0)
|
||||
@@ -417,12 +421,14 @@ DEPENDENCIES:
|
||||
- React-jsiexecutor (from `../node_modules/react-native/ReactCommon/jsiexecutor`)
|
||||
- React-jsinspector (from `../node_modules/react-native/ReactCommon/jsinspector`)
|
||||
- react-native-background-timer (from `../node_modules/react-native-background-timer`)
|
||||
- react-native-blob-util (from `../node_modules/react-native-blob-util`)
|
||||
- react-native-camera-kit (from `../node_modules/react-native-camera-kit`)
|
||||
- "react-native-cameraroll (from `../node_modules/@react-native-community/cameraroll`)"
|
||||
- react-native-config (from `../node_modules/react-native-config`)
|
||||
- react-native-image-resizer (from `../node_modules/react-native-image-resizer`)
|
||||
- react-native-mail (from `../node_modules/react-native-mail`)
|
||||
- "react-native-netinfo (from `../node_modules/@react-native-community/netinfo`)"
|
||||
- react-native-notifications (from `../node_modules/react-native-notifications`)
|
||||
- react-native-safe-area-context (from `../node_modules/react-native-safe-area-context`)
|
||||
- react-native-shake (from `../node_modules/react-native-shake`)
|
||||
- "react-native-slider (from `../node_modules/@react-native-community/slider`)"
|
||||
@@ -517,6 +523,8 @@ EXTERNAL SOURCES:
|
||||
:path: "../node_modules/react-native/ReactCommon/jsinspector"
|
||||
react-native-background-timer:
|
||||
:path: "../node_modules/react-native-background-timer"
|
||||
react-native-blob-util:
|
||||
:path: "../node_modules/react-native-blob-util"
|
||||
react-native-camera-kit:
|
||||
:path: "../node_modules/react-native-camera-kit"
|
||||
react-native-cameraroll:
|
||||
@@ -529,6 +537,8 @@ EXTERNAL SOURCES:
|
||||
:path: "../node_modules/react-native-mail"
|
||||
react-native-netinfo:
|
||||
:path: "../node_modules/@react-native-community/netinfo"
|
||||
react-native-notifications:
|
||||
:path: "../node_modules/react-native-notifications"
|
||||
react-native-safe-area-context:
|
||||
:path: "../node_modules/react-native-safe-area-context"
|
||||
react-native-shake:
|
||||
@@ -621,7 +631,7 @@ CHECKOUT OPTIONS:
|
||||
SPEC CHECKSUMS:
|
||||
boost-for-react-native: 39c7adb57c4e60d6c5479dd8623128eb5b3f0f2c
|
||||
BVLinearGradient: e3aad03778a456d77928f594a649e96995f1c872
|
||||
CryptoSwift: a532e74ed010f8c95f611d00b8bbae42e9fe7c17
|
||||
CryptoSwift: a0799ee936271bd2253a006f1e4523df21845000
|
||||
DoubleConversion: cde416483dac037923206447da6e1454df403714
|
||||
FBLazyVector: 3bb422f41b18121b71783a905c10e58606f7dc3e
|
||||
FBReactNativeSpec: f2c97f2529dd79c083355182cc158c9f98f4bd6e
|
||||
@@ -642,19 +652,21 @@ SPEC CHECKSUMS:
|
||||
React-jsiexecutor: 93bd528844ad21dc07aab1c67cb10abae6df6949
|
||||
React-jsinspector: 58aef7155bc9a9683f5b60b35eccea8722a4f53a
|
||||
react-native-background-timer: 1f7d560647b40e6a60b01c452ba29c54bf581fc4
|
||||
react-native-blob-util: 600972b1782380a5a7d5db61a3817ea32349dae9
|
||||
react-native-camera-kit: 498a6d111a904834e0824e9073cfadef7303235f
|
||||
react-native-cameraroll: 88f4e62d9ecd0e1f253abe4f685474f2ea14bfa2
|
||||
react-native-config: c98128a72bc2c3a1ca72caec0b021f0fa944aa29
|
||||
react-native-image-resizer: 2f1577efa3bc762597681f530c8e8d05ce0ceeb3
|
||||
react-native-mail: 8fdcd3aef007c33a6877a18eb4cf7447a1d4ce4a
|
||||
react-native-netinfo: ddaca8bbb9e6e914b1a23787ccb879bc642931c9
|
||||
react-native-notifications: 805108822ceff3440644d5701944f0cda35f5b4b
|
||||
react-native-safe-area-context: 60f654e00b6cc416573f6d5dbfce3839958eb57a
|
||||
react-native-shake: de052eaa3eadc4a326b8ddd7ac80c06e8d84528c
|
||||
react-native-slider: 12bd76d3d568c9c5500825db54123d44b48e4ad4
|
||||
react-native-splash-screen: 200d11d188e2e78cea3ad319964f6142b6384865
|
||||
react-native-status: 45dbf1302ce3c258b459dfab137cd1c2c68c295d
|
||||
react-native-status-keycard: 961d01ca190889ddf220206822fd752f8f4f3f7a
|
||||
react-native-webview: af9990b21a9aeafa8e8347746eb4116c0de086af
|
||||
react-native-webview: 28a8636d97ee641f2ee8f20492d7a6c269c1d703
|
||||
React-RCTActionSheet: 89a0ca9f4a06c1f93c26067af074ccdce0f40336
|
||||
React-RCTAnimation: 1bde3ecc0c104c55df246eda516e0deb03c4e49b
|
||||
React-RCTBlob: a97d378b527740cc667e03ebfa183a75231ab0f0
|
||||
@@ -688,8 +700,8 @@ SPEC CHECKSUMS:
|
||||
SDWebImageWebPCoder: f93010f3f6c031e2f8fb3081ca4ee6966c539815
|
||||
secp256k1: f61d67e6fdcb85fd727acf1bf35ace6036db540c
|
||||
SQLCipher: f9fcf29b2e59ced7defc2a2bdd0ebe79b40d4990
|
||||
SSZipArchive: e7b4f3d9e780c2acc1764cd88fbf2de28f26e5b2
|
||||
TOCropViewController: 3105367e808b7d3d886a74ff59bf4804e7d3ab38
|
||||
SSZipArchive: fe6a26b2a54d5a0890f2567b5cc6de5caa600aef
|
||||
TOCropViewController: edfd4f25713d56905ad1e0b9f5be3fbe0f59c863
|
||||
TouchID: ba4c656d849cceabc2e4eef722dea5e55959ecf4
|
||||
Yoga: 4bd86afe9883422a7c4028c00e34790f560923d6
|
||||
|
||||
|
||||
+13
-55
@@ -7324,16 +7324,16 @@
|
||||
},
|
||||
|
||||
{
|
||||
"path": "com/squareup/okhttp3/okhttp/5.0.0-alpha.4/okhttp-5.0.0-alpha.4",
|
||||
"path": "com/squareup/okhttp3/okhttp/5.0.0-alpha.5/okhttp-5.0.0-alpha.5",
|
||||
"host": "https://repo.maven.apache.org/maven2",
|
||||
"type": "jar",
|
||||
"pom": {
|
||||
"sha1": "928427ff8d8c2326263733462bc5f8ea1021b5cb",
|
||||
"sha256": "11iwhxf9ndkd6qmnb3iim97hm9h20v3fkvr8hnav5ypy44mgxilk"
|
||||
"sha1": "71c72a769bb69cdac5c01b1baf3d3cea94633c8e",
|
||||
"sha256": "1als0653nwccdzcmxikdmlqx2i3072p6bqv65w67nj695n5r0bjj"
|
||||
},
|
||||
"jar": {
|
||||
"sha1": "bca0daab030b78fbc74e97e45dd01c6826cf4959",
|
||||
"sha256": "0s305pbn9rc8y37grz2gmzgmzpi4zdhg9r0sm4fknnimyzdk6j5x"
|
||||
"sha1": "bb262550c729996d20d3df9f66affc383901a123",
|
||||
"sha256": "1qpyvqmwrz6zh4q492wflqsr12g1jivikl6qf8paw0zcc3d392xb"
|
||||
}
|
||||
},
|
||||
|
||||
@@ -7709,34 +7709,6 @@
|
||||
}
|
||||
},
|
||||
|
||||
{
|
||||
"path": "com/willowtreeapps/assertk/assertk/0.25/assertk-0.25",
|
||||
"host": "https://repo.maven.apache.org/maven2",
|
||||
"type": "jar",
|
||||
"pom": {
|
||||
"sha1": "557170cd696a66845f2f97c36b20b372739dff34",
|
||||
"sha256": "0d6lqsv2j6z9bjzag72bffyswnbbgrz1qcaydm7i2kc34wxz5hjs"
|
||||
},
|
||||
"jar": {
|
||||
"sha1": "c20894404c38109ed837f6f6d254987777a06b0c",
|
||||
"sha256": "0341gbcpz37abbk61xyfxmj5gjxggpvwpq5s16zrjkkrgx7v1sfi"
|
||||
}
|
||||
},
|
||||
|
||||
{
|
||||
"path": "com/willowtreeapps/opentest4k/opentest4k/1.2.2/opentest4k-1.2.2",
|
||||
"host": "https://repo.maven.apache.org/maven2",
|
||||
"type": "jar",
|
||||
"pom": {
|
||||
"sha1": "e5c64dc093a91d1e2f591d0742798bb8f325b0ea",
|
||||
"sha256": "1wn81995g9qdnxfgbscrm4a07m565dmk7mnycrw575w6vjjl0sca"
|
||||
},
|
||||
"jar": {
|
||||
"sha1": "cc1388f1517c5fb7b83009abbc2f0eb2883739ef",
|
||||
"sha256": "0g31fw5nvd09nc3pkgzpiwmbvizbxw2wv0vz76m2xbpy8wh8n9jg"
|
||||
}
|
||||
},
|
||||
|
||||
{
|
||||
"path": "de/undercouch/gradle-download-task/3.4.3/gradle-download-task-3.4.3",
|
||||
"host": "https://repo.maven.apache.org/maven2",
|
||||
@@ -7794,26 +7766,26 @@
|
||||
},
|
||||
|
||||
{
|
||||
"path": "jakarta/xml/bind/jakarta.xml.bind-api-parent/4.0.0-RC2/jakarta.xml.bind-api-parent-4.0.0-RC2",
|
||||
"path": "jakarta/xml/bind/jakarta.xml.bind-api-parent/4.0.0-RC3/jakarta.xml.bind-api-parent-4.0.0-RC3",
|
||||
"host": "https://repo.maven.apache.org/maven2",
|
||||
"type": "pom",
|
||||
"pom": {
|
||||
"sha1": "89412e0394f9e398e13416fde8da8b3a80fa0fec",
|
||||
"sha256": "0bpclrb04qff6adkn37rk4zp5y8ky0vjnp5cxyzv8zc8182fhmr1"
|
||||
"sha1": "a19c03e97865c73e090c628f140bf989c39ca58c",
|
||||
"sha256": "1h2kffzcpsivg9ash0qn22gfyrv9dzhzymafsnl3rv70rmx571cx"
|
||||
}
|
||||
},
|
||||
|
||||
{
|
||||
"path": "jakarta/xml/bind/jakarta.xml.bind-api/4.0.0-RC2/jakarta.xml.bind-api-4.0.0-RC2",
|
||||
"path": "jakarta/xml/bind/jakarta.xml.bind-api/4.0.0-RC3/jakarta.xml.bind-api-4.0.0-RC3",
|
||||
"host": "https://repo.maven.apache.org/maven2",
|
||||
"type": "jar",
|
||||
"pom": {
|
||||
"sha1": "894741e8eca308287531b49bd3045e247cd43515",
|
||||
"sha256": "15qcygb76b7khpgsq94azpfqkfxp50fn0yypmdy3p3rm8bnpbypc"
|
||||
"sha1": "92e21745056f04ee7fcba97d4560e7844b6ef588",
|
||||
"sha256": "0cbhwfj5v7hfyx1vpl0hq40100k7yl98i6lnlalh718wmw9rq5fz"
|
||||
},
|
||||
"jar": {
|
||||
"sha1": "79f7ab7d98c0b95bef12d0b33b9b34af415ce222",
|
||||
"sha256": "18dwxaillwc1bssp0wypjhgg9vygk0p5wcr9j6dh63xk0zd6pkqd"
|
||||
"sha1": "ecec3b5ac3aaef841a10d83b5546c285d9914028",
|
||||
"sha256": "0mcij5xnqkq8swvc6fdijjjxbrvp74z23f5jpf9nbqgxbvskjchm"
|
||||
}
|
||||
},
|
||||
|
||||
@@ -12045,20 +12017,6 @@
|
||||
}
|
||||
},
|
||||
|
||||
{
|
||||
"path": "org/jetbrains/kotlin/kotlin-stdlib-common/1.5.30/kotlin-stdlib-common-1.5.30",
|
||||
"host": "https://repo.maven.apache.org/maven2",
|
||||
"type": "jar",
|
||||
"pom": {
|
||||
"sha1": "850c3ca345e0afacbfaf203f5259e3e1be59df9e",
|
||||
"sha256": "1g74j6k1lbnljsy2dif47mmc3hrwqch6j6zi1mdp4mh11r812w6d"
|
||||
},
|
||||
"jar": {
|
||||
"sha1": "649ffab7767038323fec0cc41e2d7b0a8f65a378",
|
||||
"sha256": "1f346x78anwcxyj1lbywjz4vwa66la5sgfyhz3h2514p199srcwf"
|
||||
}
|
||||
},
|
||||
|
||||
{
|
||||
"path": "org/jetbrains/kotlin/kotlin-stdlib-common/1.5.31/kotlin-stdlib-common-1.5.31",
|
||||
"host": "https://repo.maven.apache.org/maven2",
|
||||
|
||||
@@ -530,7 +530,7 @@ https://repo.maven.apache.org/maven2/com/squareup/okhttp3/okhttp-urlconnection/3
|
||||
https://repo.maven.apache.org/maven2/com/squareup/okhttp3/okhttp/3.9.1/okhttp-3.9.1.pom
|
||||
https://repo.maven.apache.org/maven2/com/squareup/okhttp3/okhttp/3.12.1/okhttp-3.12.1.pom
|
||||
https://repo.maven.apache.org/maven2/com/squareup/okhttp3/okhttp/3.12.12/okhttp-3.12.12.pom
|
||||
https://repo.maven.apache.org/maven2/com/squareup/okhttp3/okhttp/5.0.0-alpha.4/okhttp-5.0.0-alpha.4.pom
|
||||
https://repo.maven.apache.org/maven2/com/squareup/okhttp3/okhttp/5.0.0-alpha.5/okhttp-5.0.0-alpha.5.pom
|
||||
https://repo.maven.apache.org/maven2/com/squareup/okhttp3/parent/3.9.1/parent-3.9.1.pom
|
||||
https://repo.maven.apache.org/maven2/com/squareup/okhttp3/parent/3.12.1/parent-3.12.1.pom
|
||||
https://repo.maven.apache.org/maven2/com/squareup/okhttp3/parent/3.12.12/parent-3.12.12.pom
|
||||
@@ -563,14 +563,12 @@ https://repo.maven.apache.org/maven2/com/tunnelvisionlabs/antlr4-master/4.9.0/an
|
||||
https://repo.maven.apache.org/maven2/com/tunnelvisionlabs/antlr4-runtime/4.5/antlr4-runtime-4.5.pom
|
||||
https://repo.maven.apache.org/maven2/com/tunnelvisionlabs/antlr4-runtime/4.9.0/antlr4-runtime-4.9.0.pom
|
||||
https://repo.maven.apache.org/maven2/com/tunnelvisionlabs/antlr4/4.5/antlr4-4.5.pom
|
||||
https://repo.maven.apache.org/maven2/com/willowtreeapps/assertk/assertk/0.25/assertk-0.25.pom
|
||||
https://repo.maven.apache.org/maven2/com/willowtreeapps/opentest4k/opentest4k/1.2.2/opentest4k-1.2.2.pom
|
||||
https://repo.maven.apache.org/maven2/de/undercouch/gradle-download-task/3.4.3/gradle-download-task-3.4.3.pom
|
||||
https://repo.maven.apache.org/maven2/de/undercouch/gradle-download-task/4.0.2/gradle-download-task-4.0.2.pom
|
||||
https://repo.maven.apache.org/maven2/it/unimi/dsi/fastutil/7.2.0/fastutil-7.2.0.pom
|
||||
https://repo.maven.apache.org/maven2/jakarta/activation/jakarta.activation-api/2.1.0/jakarta.activation-api-2.1.0.pom
|
||||
https://repo.maven.apache.org/maven2/jakarta/xml/bind/jakarta.xml.bind-api-parent/4.0.0-RC2/jakarta.xml.bind-api-parent-4.0.0-RC2.pom
|
||||
https://repo.maven.apache.org/maven2/jakarta/xml/bind/jakarta.xml.bind-api/4.0.0-RC2/jakarta.xml.bind-api-4.0.0-RC2.pom
|
||||
https://repo.maven.apache.org/maven2/jakarta/xml/bind/jakarta.xml.bind-api-parent/4.0.0-RC3/jakarta.xml.bind-api-parent-4.0.0-RC3.pom
|
||||
https://repo.maven.apache.org/maven2/jakarta/xml/bind/jakarta.xml.bind-api/4.0.0-RC3/jakarta.xml.bind-api-4.0.0-RC3.pom
|
||||
https://repo.maven.apache.org/maven2/javax/activation/activation/1.1/activation-1.1.pom
|
||||
https://repo.maven.apache.org/maven2/javax/activation/javax.activation-api/1.2.0/javax.activation-api-1.2.0.pom
|
||||
https://repo.maven.apache.org/maven2/javax/annotation/javax.annotation-api/1.2/javax.annotation-api-1.2.pom
|
||||
@@ -907,7 +905,6 @@ https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-stdlib-common/1
|
||||
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-stdlib-common/1.4.10/kotlin-stdlib-common-1.4.10.pom
|
||||
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-stdlib-common/1.4.30/kotlin-stdlib-common-1.4.30.pom
|
||||
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-stdlib-common/1.4.31/kotlin-stdlib-common-1.4.31.pom
|
||||
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-stdlib-common/1.5.30/kotlin-stdlib-common-1.5.30.pom
|
||||
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-stdlib-common/1.5.31/kotlin-stdlib-common-1.5.31.pom
|
||||
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-stdlib-common/1.6.10/kotlin-stdlib-common-1.6.10.pom
|
||||
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-stdlib-jdk7/1.2.71/kotlin-stdlib-jdk7-1.2.71.pom
|
||||
|
||||
+1
-2
@@ -35,9 +35,9 @@
|
||||
"react-dom": "^16.4.2",
|
||||
"react-native": "0.63.4",
|
||||
"react-native-background-timer": "^2.1.1",
|
||||
"react-native-blob-util": "^0.13.18",
|
||||
"react-native-camera-kit": "^8.0.4",
|
||||
"react-native-config": "git+https://github.com/status-im/react-native-config.git#v1.4.2-status",
|
||||
"react-native-dark-mode": "^0.2.2",
|
||||
"react-native-device-info": "^7.4.0",
|
||||
"react-native-dialogs": "^1.0.4",
|
||||
"react-native-draggable-flatlist": "^3.0.3",
|
||||
@@ -53,7 +53,6 @@
|
||||
"react-native-languages": "^3.0.2",
|
||||
"react-native-linear-gradient": "^2.5.6",
|
||||
"react-native-mail": "^6.1.1",
|
||||
"react-native-blob-util": "^0.13.18",
|
||||
"react-native-navigation": "^7.13.0",
|
||||
"react-native-notifications": "^4.1.3",
|
||||
"react-native-permissions": "^2.1.5",
|
||||
|
||||
Executable
+21
@@ -0,0 +1,21 @@
|
||||
#!/usr/bin/env bash
|
||||
set -euo pipefail
|
||||
|
||||
if [[ -z $(git diff --cached --name-only -r | grep status-go-version.json) ]]; then
|
||||
exit 0 # No status-go-version.json changes found.
|
||||
fi
|
||||
|
||||
MERGE_BASE=$(git merge-base -a develop "$(git rev-parse --abbrev-ref HEAD)" develop)
|
||||
GO_COMMIT_MERGE_BASE=$(git show "${MERGE_BASE}":status-go-version.json | jq -r '."commit-sha1"')
|
||||
GO_COMMIT_CURRENT=$(jq -r '."commit-sha1"' status-go-version.json)
|
||||
GITHUB_LINK_PREFIX="https://github.com/status-im/status-go/compare/"
|
||||
# Link to the current StatusGo changelog being updated.
|
||||
GITHUB_LINK="${GITHUB_LINK_PREFIX}${GO_COMMIT_MERGE_BASE}...${GO_COMMIT_CURRENT}"
|
||||
|
||||
COMMIT_MSG_FILE=$1
|
||||
# Check if the commit message already contains the link (rebase) and update otherwise insert into line2
|
||||
if ! grep -qF "${GITHUB_LINK_PREFIX}" "${COMMIT_MSG_FILE}" >/dev/null; then
|
||||
sed -in "2i${GITHUB_LINK}\n" "${COMMIT_MSG_FILE}"
|
||||
else
|
||||
sed -in "s;^${GITHUB_LINK_PREFIX}.*$;${GITHUB_LINK};" "${COMMIT_MSG_FILE}"
|
||||
fi
|
||||
@@ -67,7 +67,9 @@
|
||||
:Properties #{}
|
||||
:create (fn [])
|
||||
:configureNext (fn [])}
|
||||
:requireNativeComponent (fn [] {:propTypes ""})}))
|
||||
:requireNativeComponent (fn [] {:propTypes ""})
|
||||
:Appearance {:getColorScheme (fn [])
|
||||
:addChangeListener (fn [])}}))
|
||||
|
||||
(set! js/ReactNative react-native)
|
||||
|
||||
@@ -100,7 +102,6 @@
|
||||
(def safe-area-context (clj->js {:SafeAreaProvider {:_reactNativeIphoneXHelper {:getStatusBarHeight (fn [])}}
|
||||
:SafeAreaInsetsContext {:Consumer (fn [])}
|
||||
:SafeAreaView {}}))
|
||||
(def react-native-dark-mode #js {"eventEmitter" {} "initialMode" {}})
|
||||
|
||||
(def back-handler #js {:addEventListener identity
|
||||
:removeEventListener identity})
|
||||
@@ -221,7 +222,6 @@
|
||||
"react-native-gesture-handler" react-native-gesture-handler
|
||||
"react-native-safe-area-context" safe-area-context
|
||||
"react-native-config" config
|
||||
"react-native-dark-mode" react-native-dark-mode
|
||||
"react-native-iphone-x-helper" (clj->js {:getStatusBarHeight (fn [])
|
||||
:getBottomSpace (fn [])})
|
||||
"react-native-screens" (clj->js {})
|
||||
|
||||
+9
-3
@@ -1,8 +1,14 @@
|
||||
(ns quo.theme
|
||||
(:require [quo.design-system.colors :as colors]))
|
||||
|
||||
(defn set-theme [theme]
|
||||
(reset! colors/theme (case theme
|
||||
(def theme (atom nil))
|
||||
|
||||
(defn get-theme []
|
||||
@theme)
|
||||
|
||||
(defn set-theme [value]
|
||||
(reset! theme value)
|
||||
(reset! colors/theme (case value
|
||||
:dark colors/dark-theme
|
||||
colors/light-theme))
|
||||
(colors/set-legacy-theme-type theme))
|
||||
(colors/set-legacy-theme-type value))
|
||||
|
||||
@@ -0,0 +1,144 @@
|
||||
(ns quo2.components.button
|
||||
(:require [quo.react-native :as rn]
|
||||
[status-im.ui.components.icons.icons :as icons]
|
||||
[quo2.foundations.colors :as colors]
|
||||
[quo2.components.text :as text]
|
||||
[quo.theme :as theme]
|
||||
[reagent.core :as reagent]))
|
||||
|
||||
(def themes {:light {:primary {:icon-color colors/white
|
||||
:label {:style {:color colors/white}}
|
||||
:background-color {:default colors/primary-50
|
||||
:pressed colors/primary-70
|
||||
:disabled colors/primary-50}}
|
||||
:secondary {:icon-color colors/primary-50
|
||||
:label {:style {:color colors/primary-50}}
|
||||
:background-color {:default colors/primary-50-opa-20
|
||||
:pressed colors/primary-50-opa-40
|
||||
:disabled colors/primary-50-opa-20}}
|
||||
:grey {:icon-color colors/neutral-50
|
||||
:label {:style {:color colors/black}}
|
||||
:background-color {:default colors/neutral-40
|
||||
:pressed colors/neutral-30
|
||||
:disabled colors/neutral-20}}
|
||||
:outline {:icon-color colors/neutral-50
|
||||
:label {:style {:color colors/black}}
|
||||
:border-color {:default colors/neutral-30
|
||||
:pressed colors/neutral-40}}
|
||||
:ghost {:icon-color colors/neutral-50
|
||||
:label {:style {:color colors/black}}
|
||||
:background-color {:pr:pressedess colors/neutral-10}}
|
||||
:danger {:icon-color colors/white
|
||||
:label {:style {:color colors/white}}
|
||||
:background-color {:default colors/danger-50
|
||||
:pressed colors/danger-60
|
||||
:disabled colors/danger-50}}}
|
||||
:dark {:primary {:icon-color colors/white
|
||||
:label {:style {:color colors/white}}
|
||||
:background-color {:default colors/primary-60
|
||||
:pressed colors/primary-40
|
||||
:disabled colors/primary-60}}
|
||||
:secondary {:icon-color colors/primary-50
|
||||
:label {:style {:color colors/primary-50}}
|
||||
:background-color {:default colors/primary-50-opa-20
|
||||
:pressed colors/primary-50-opa-30
|
||||
:disabled colors/primary-50-opa-20}}
|
||||
:grey {:icon-color colors/neutral-40
|
||||
:label {:style {:color colors/white}}
|
||||
:background-color {:default colors/neutral-80
|
||||
:pressed colors/neutral-60
|
||||
:disabled colors/neutral-80}}
|
||||
:outline {:icon-color colors/neutral-40
|
||||
:label {:style {:color colors/white}}
|
||||
:border-color {:default colors/neutral-70
|
||||
:pressed colors/neutral-60}}
|
||||
:ghost {:icon-color colors/neutral-40
|
||||
:label {:style {:color colors/white}}
|
||||
:background-color {:pressed colors/neutral-80}}
|
||||
:danger {:icon-color colors/white
|
||||
:label {:style {:color colors/white}}
|
||||
:background-color {:default colors/danger-50
|
||||
:pressed colors/danger-40
|
||||
:disabled colors/danger-50}}}})
|
||||
|
||||
(defn style-container [type size disabled background-color border-color icon above]
|
||||
(merge {:height size
|
||||
:align-items :center
|
||||
:justify-content :center
|
||||
:flex-direction (if above :column :row)
|
||||
:border-radius (if (and icon (#{:primary :secondary :danger} type))
|
||||
24
|
||||
(case size
|
||||
56 12
|
||||
40 12
|
||||
32 10
|
||||
24 8))
|
||||
:background-color background-color
|
||||
:padding-horizontal (if icon 0 (case size 56 16 40 16 32 12 24 8))}
|
||||
(when icon
|
||||
{:width size})
|
||||
(when border-color
|
||||
{:border-color border-color
|
||||
:border-width 1})
|
||||
(when disabled
|
||||
{:opacity 0.3})))
|
||||
|
||||
(defn button
|
||||
"with label
|
||||
[button opts \"label\"]
|
||||
opts
|
||||
{:type :primary/:secondary/:grey/:outline/:ghost/:danger
|
||||
:size 40/32/24
|
||||
:icon true/false
|
||||
:before :icon-keyword
|
||||
:after :icon-keyword}
|
||||
|
||||
only icon
|
||||
[button {:icon true} :main-icons/close-circle]"
|
||||
[_ _]
|
||||
(let [pressed (reagent/atom false)]
|
||||
(fn [{:keys [on-press disabled type size before after above
|
||||
on-long-press accessibility-label icon]
|
||||
:or {type :primary
|
||||
size 40}}
|
||||
children]
|
||||
(let [{:keys [icon-color background-color label border-color]}
|
||||
(get-in themes [(theme/get-theme) type])
|
||||
state (cond disabled :disabled @pressed :pressed :else :default)]
|
||||
[rn/touchable-without-feedback (merge {:disabled disabled
|
||||
:accessibility-label accessibility-label}
|
||||
(when on-press
|
||||
{:on-press (fn []
|
||||
(on-press))})
|
||||
(when on-long-press
|
||||
{:on-long-press (fn []
|
||||
(on-long-press))})
|
||||
{:on-press-in (fn []
|
||||
(reset! pressed true))}
|
||||
{:on-press-out (fn []
|
||||
(reset! pressed nil))})
|
||||
|
||||
[rn/view {:style (style-container type size disabled (get background-color state) (get border-color state) icon above)}
|
||||
(when above
|
||||
[rn/view
|
||||
[icons/icon above {:color icon-color}]])
|
||||
(when before
|
||||
[rn/view
|
||||
[icons/icon before {:color icon-color}]])
|
||||
[rn/view
|
||||
(cond
|
||||
icon
|
||||
[icons/icon children {:color icon-color}]
|
||||
|
||||
(string? children)
|
||||
[text/text (merge {:size (when (#{56 24} size) :paragraph-2)
|
||||
:weight :medium
|
||||
:number-of-lines 1}
|
||||
label)
|
||||
children]
|
||||
|
||||
(vector? children)
|
||||
children)]
|
||||
(when after
|
||||
[rn/view
|
||||
[icons/icon after {:color icon-color}]])]]))))
|
||||
@@ -0,0 +1,35 @@
|
||||
(ns quo2.components.segmented-control
|
||||
(:require [reagent.core :as reagent]
|
||||
[quo.react-native :as rn]
|
||||
[quo2.components.tab :as tab]
|
||||
[quo2.foundations.colors :as colors]
|
||||
[quo.theme :as theme]))
|
||||
|
||||
(def themes {:light {:background-color colors/neutral-20}
|
||||
:dark {:background-color colors/neutral-80}})
|
||||
|
||||
(defn segmented-control [{:keys [default-active on-change]}]
|
||||
(let [active-tab-id (reagent/atom default-active)]
|
||||
(fn [{:keys [data size]}]
|
||||
(let [active-id @active-tab-id]
|
||||
[rn/view {:flex-direction :row
|
||||
:background-color (get-in themes [(theme/get-theme) :background-color])
|
||||
:border-radius (case size
|
||||
32 10
|
||||
28 8
|
||||
24 8
|
||||
20 6)
|
||||
:padding 2}
|
||||
(for [[indx {:keys [label id]}] (map-indexed vector data)]
|
||||
^{:key id}
|
||||
[rn/view {:margin-left (if (= 0 indx) 0 2)
|
||||
:flex 1}
|
||||
[tab/tab
|
||||
{:id id
|
||||
:segmented true
|
||||
:size size
|
||||
:active (= id active-id)
|
||||
:on-press #(do (reset! active-tab-id %)
|
||||
(when on-change
|
||||
(on-change %)))}
|
||||
label]])]))))
|
||||
@@ -0,0 +1,75 @@
|
||||
(ns quo2.components.tab
|
||||
(:require [quo2.foundations.colors :as colors]
|
||||
[quo.react-native :as rn]
|
||||
[quo.theme :as theme]
|
||||
[status-im.ui.components.icons.icons :as icons]
|
||||
[quo2.components.text :as text]))
|
||||
|
||||
(def themes {:light {:default {:background-color colors/neutral-20
|
||||
:icon-color colors/neutral-50
|
||||
:label {:style {:color colors/black}}}
|
||||
:active {:background-color colors/neutral-50
|
||||
:icon-color colors/white
|
||||
:label {:style {:color colors/white}}}
|
||||
:disabled {:background-color colors/neutral-20
|
||||
:icon-color colors/neutral-50
|
||||
:label {:style {:color colors/black}}}}
|
||||
:dark {:default {:background-color colors/neutral-80
|
||||
:icon-color colors/neutral-40
|
||||
:label {:style {:color colors/white}}}
|
||||
:active {:background-color colors/neutral-60
|
||||
:icon-color colors/white
|
||||
:label {:style {:color colors/white}}}
|
||||
:disabled {:background-color colors/neutral-80
|
||||
:icon-color colors/neutral-40
|
||||
:label {:style {:color colors/white}}}}})
|
||||
|
||||
(defn style-container [size disabled background-color]
|
||||
(merge {:height size
|
||||
:align-items :center
|
||||
:justify-content :center
|
||||
:flex-direction :row
|
||||
:border-radius (case size
|
||||
32 10
|
||||
28 8
|
||||
24 8
|
||||
20 6)
|
||||
:background-color background-color
|
||||
:padding-horizontal (case size 32 12 28 12 24 8 20 8)}
|
||||
(when disabled
|
||||
{:opacity 0.3})))
|
||||
|
||||
(defn tab
|
||||
"[tab opts \"label\"]
|
||||
opts
|
||||
{:type :primary/:secondary/:grey/:outline/:ghost/:danger
|
||||
:size 40/32/24
|
||||
:icon true/false
|
||||
:before :icon-keyword
|
||||
:after :icon-keyword}"
|
||||
[_ _]
|
||||
(fn [{:keys [id on-press disabled size before active accessibility-label]
|
||||
:or {size 32}}
|
||||
children]
|
||||
(let [state (cond disabled :disabled active :active :else :default)
|
||||
{:keys [icon-color background-color label]}
|
||||
(get-in themes [(theme/get-theme) state])]
|
||||
[rn/touchable-without-feedback (merge {:disabled disabled
|
||||
:accessibility-label accessibility-label}
|
||||
(when on-press
|
||||
{:on-press (fn []
|
||||
(on-press id))}))
|
||||
[rn/view {:style (style-container size disabled background-color)}
|
||||
(when before
|
||||
[rn/view
|
||||
[icons/icon before {:color icon-color}]])
|
||||
[rn/view
|
||||
(cond
|
||||
(string? children)
|
||||
[text/text (merge {:size (case size 24 :paragraph-2 20 :label nil)
|
||||
:weight :medium
|
||||
:number-of-lines 1}
|
||||
label)
|
||||
children]
|
||||
(vector? children)
|
||||
children)]]])))
|
||||
@@ -0,0 +1,21 @@
|
||||
(ns quo2.components.tabs
|
||||
(:require [reagent.core :as reagent]
|
||||
[quo.react-native :as rn]
|
||||
[quo2.components.tab :as tab]))
|
||||
|
||||
(defn tabs [{:keys [default-active on-change]}]
|
||||
(let [active-tab-id (reagent/atom default-active)]
|
||||
(fn [{:keys [data size]}]
|
||||
(let [active-id @active-tab-id]
|
||||
[rn/view {:flex-direction :row}
|
||||
(for [{:keys [label id]} data]
|
||||
^{:key id}
|
||||
[rn/view {:margin-right (if (= size 32) 12 8)}
|
||||
[tab/tab
|
||||
{:id id
|
||||
:size size
|
||||
:active (= id active-id)
|
||||
:on-press #(do (reset! active-tab-id %)
|
||||
(when on-change
|
||||
(on-change %)))}
|
||||
label]])]))))
|
||||
@@ -0,0 +1,33 @@
|
||||
(ns quo2.components.text
|
||||
(:require [quo.react-native :as rn]
|
||||
[reagent.core :as reagent]
|
||||
[quo.theme :as theme]
|
||||
[quo2.foundations.colors :as colors]
|
||||
[quo2.foundations.typography :as typography]))
|
||||
|
||||
(defn text-style [{:keys [size align weight style]}]
|
||||
(merge (case (or weight :regular)
|
||||
:regular typography/font-regular
|
||||
:medium typography/font-medium
|
||||
:semi-bold typography/font-semi-bold
|
||||
:bold typography/font-bold
|
||||
:monospace typography/monospace
|
||||
:inherit nil)
|
||||
(case (or size :paragraph-1)
|
||||
:label typography/label
|
||||
:paragraph-2 typography/paragraph-2
|
||||
:paragraph-1 typography/paragraph-1
|
||||
:heading-2 typography/heading-2
|
||||
:heading-1 typography/heading-1
|
||||
:inherit nil)
|
||||
{:text-align (or align :auto)}
|
||||
(if (:color style)
|
||||
style
|
||||
(assoc style :color (if (= (theme/get-theme) :dark) colors/white colors/black)))))
|
||||
|
||||
(defn text []
|
||||
(let [this (reagent/current-component)
|
||||
props (reagent/props this)
|
||||
style (text-style props)]
|
||||
(into [rn/text {:style style}]
|
||||
(reagent/children this))))
|
||||
@@ -0,0 +1,176 @@
|
||||
(ns quo2.foundations.colors
|
||||
(:require [clojure.string :as string]))
|
||||
|
||||
(defn alpha [value opacity]
|
||||
(if (string/starts-with? value "#")
|
||||
(let [hex (string/replace value #"#" "")
|
||||
r (js/parseInt (subs hex 0 2) 16)
|
||||
g (js/parseInt (subs hex 2 4) 16)
|
||||
b (js/parseInt (subs hex 4 6) 16)]
|
||||
(str "rgba(" r "," g "," b "," opacity ")"))
|
||||
(let [rgb (string/split value #",")]
|
||||
(str (string/join "," (butlast rgb)) "," opacity ")"))))
|
||||
|
||||
;;;;Neutral
|
||||
|
||||
;;Solid
|
||||
(def neutral-5 "#F5F6F8")
|
||||
(def neutral-10 "#F0F2F5")
|
||||
(def neutral-20 "#ECEEF1")
|
||||
(def neutral-30 "#E7EAEE")
|
||||
(def neutral-40 "#A1ABBD")
|
||||
(def neutral-50 "#647084")
|
||||
(def neutral-60 "#303D55")
|
||||
(def neutral-70 "#192438")
|
||||
(def neutral-80 "#131D2F")
|
||||
(def neutral-90 "#0D1625")
|
||||
(def neutral-95 "#09101C")
|
||||
|
||||
;;50 with transparency
|
||||
(def neutral-50-opa-5 (alpha neutral-50 0.05))
|
||||
(def neutral-50-opa-10 (alpha neutral-50 0.1))
|
||||
(def neutral-50-opa-20 (alpha neutral-50 0.2))
|
||||
(def neutral-50-opa-30 (alpha neutral-50 0.3))
|
||||
(def neutral-50-opa-40 (alpha neutral-50 0.4))
|
||||
|
||||
;;80 with transparency
|
||||
(def neutral-80-opa-60 (alpha neutral-80 0.6))
|
||||
(def neutral-80-opa-70 (alpha neutral-80 0.7))
|
||||
(def neutral-80-opa-80 (alpha neutral-80 0.8))
|
||||
(def neutral-80-opa-90 (alpha neutral-80 0.9))
|
||||
(def neutral-80-opa-95 (alpha neutral-80 0.95))
|
||||
|
||||
;;95 with transparency
|
||||
(def neutral-95-opa-60 (alpha neutral-95 0.6))
|
||||
(def neutral-95-opa-70 (alpha neutral-95 0.7))
|
||||
(def neutral-95-opa-80 (alpha neutral-95 0.8))
|
||||
(def neutral-95-opa-90 (alpha neutral-95 0.9))
|
||||
(def neutral-95-opa-95 (alpha neutral-95 0.95))
|
||||
|
||||
;;;;Black
|
||||
(def black "#000000")
|
||||
(def black-opa-5 (alpha black 0.05))
|
||||
(def black-opa-10 (alpha black 0.1))
|
||||
(def black-opa-20 (alpha black 0.2))
|
||||
(def black-opa-30 (alpha black 0.3))
|
||||
(def black-opa-40 (alpha black 0.4))
|
||||
(def black-opa-50 (alpha black 0.5))
|
||||
(def black-opa-60 (alpha black 0.6))
|
||||
(def black-opa-70 (alpha black 0.7))
|
||||
(def black-opa-80 (alpha black 0.8))
|
||||
(def black-opa-90 (alpha black 0.9))
|
||||
(def black-opa-95 (alpha black 0.95))
|
||||
|
||||
;;;;White
|
||||
(def white "#ffffff")
|
||||
(def white-opa-5 (alpha white 0.05))
|
||||
(def white-opa-10 (alpha white 0.1))
|
||||
(def white-opa-20 (alpha white 0.2))
|
||||
(def white-opa-30 (alpha white 0.3))
|
||||
(def white-opa-40 (alpha white 0.4))
|
||||
(def white-opa-50 (alpha white 0.5))
|
||||
(def white-opa-60 (alpha white 0.6))
|
||||
(def white-opa-70 (alpha white 0.7))
|
||||
(def white-opa-80 (alpha white 0.8))
|
||||
(def white-opa-90 (alpha white 0.9))
|
||||
(def white-opa-95 (alpha white 0.95))
|
||||
|
||||
;;;;Primary
|
||||
|
||||
;;Solid
|
||||
(def primary-10 "#F8F9FE")
|
||||
(def primary-20 "#D9DFF9")
|
||||
(def primary-30 "#ACB9F1")
|
||||
(def primary-40 "#7F93E9")
|
||||
(def primary-50 "#4360DF")
|
||||
(def primary-60 "#3851BB")
|
||||
(def primary-70 "#2E4198")
|
||||
(def primary-80 "#233274")
|
||||
(def primary-90 "#182350")
|
||||
|
||||
;;50 with transparency
|
||||
(def primary-50-opa-5 (alpha primary-50 0.05))
|
||||
(def primary-50-opa-10 (alpha primary-50 0.1))
|
||||
(def primary-50-opa-20 (alpha primary-50 0.2))
|
||||
(def primary-50-opa-30 (alpha primary-50 0.3))
|
||||
(def primary-50-opa-40 (alpha primary-50 0.4))
|
||||
|
||||
;;;;Success
|
||||
|
||||
;;Solid
|
||||
(def success-10 "#F6FBFB")
|
||||
(def success-20 "#D4EDEB")
|
||||
(def success-30 "#9FD8D3")
|
||||
(def success-40 "#6BC2BA")
|
||||
(def success-50 "#26A69A")
|
||||
(def success-60 "#208B81")
|
||||
(def success-70 "#1A7169")
|
||||
(def success-80 "#145650")
|
||||
(def success-90 "#08211F")
|
||||
|
||||
;;50 with transparency
|
||||
(def success-50-opa-5 (alpha success-50 0.05))
|
||||
(def success-50-opa-10 (alpha success-50 0.1))
|
||||
(def success-50-opa-20 (alpha success-50 0.2))
|
||||
(def success-50-opa-30 (alpha success-50 0.3))
|
||||
(def success-50-opa-40 (alpha success-50 0.4))
|
||||
|
||||
;;;;Warning
|
||||
|
||||
;;Solid
|
||||
(def warning-10 "#FFFBF9")
|
||||
(def warning-20 "#FEE9DF")
|
||||
(def warning-30 "#FDCEBA")
|
||||
(def warning-40 "#FCB394")
|
||||
(def warning-50 "#FB8F61")
|
||||
(def warning-60 "#D37851")
|
||||
(def warning-70 "#AB6142")
|
||||
(def warning-80 "#824A32")
|
||||
(def warning-90 "#5A3323")
|
||||
|
||||
;;50 with transparency
|
||||
(def warning-50-opa-5 (alpha warning-50 0.05))
|
||||
(def warning-50-opa-10 (alpha warning-50 0.1))
|
||||
(def warning-50-opa-20 (alpha warning-50 0.2))
|
||||
(def warning-50-opa-30 (alpha warning-50 0.3))
|
||||
(def warning-50-opa-40 (alpha warning-50 0.4))
|
||||
|
||||
;;;;Danger
|
||||
|
||||
;;Solid
|
||||
(def danger-10 "#FEF9F9")
|
||||
(def danger-20 "#FADFDE")
|
||||
(def danger-30 "#F4B9B7")
|
||||
(def danger-40 "#EE9290")
|
||||
(def danger-50 "#E65F5C")
|
||||
(def danger-60 "#C1504D")
|
||||
(def danger-70 "#9C413F")
|
||||
(def danger-80 "#783130")
|
||||
(def danger-90 "#532221")
|
||||
|
||||
;;50 with transparency
|
||||
(def danger-50-opa-5 (alpha danger-50 0.05))
|
||||
(def danger-50-opa-10 (alpha danger-50 0.1))
|
||||
(def danger-50-opa-20 (alpha danger-50 0.2))
|
||||
(def danger-50-opa-30 (alpha danger-50 0.3))
|
||||
(def danger-50-opa-40 (alpha danger-50 0.4))
|
||||
|
||||
;;;;Info
|
||||
|
||||
;;Solid
|
||||
(def info-10 "#F6FCFD")
|
||||
(def info-20 "#D2EEF4")
|
||||
(def info-30 "#9DD9E6")
|
||||
(def info-40 "#67C4D8")
|
||||
(def info-50 "#20A8C6")
|
||||
(def info-60 "#1B8DA6")
|
||||
(def info-70 "#167287")
|
||||
(def info-80 "#115767")
|
||||
(def info-90 "#0C3C47")
|
||||
|
||||
;;50 with transparency
|
||||
(def info-50-opa-5 (alpha info-50 0.05))
|
||||
(def info-50-opa-10 (alpha info-50 0.1))
|
||||
(def info-50-opa-20 (alpha info-50 0.2))
|
||||
(def info-50-opa-30 (alpha info-50 0.3))
|
||||
(def info-50-opa-40 (alpha info-50 0.4))
|
||||
@@ -0,0 +1,31 @@
|
||||
(ns quo2.foundations.typography)
|
||||
|
||||
(def heading-1 {:font-size 27
|
||||
:line-height 32.4
|
||||
:letter-spacing -2.1})
|
||||
|
||||
(def heading-2 {:font-size 19
|
||||
:line-height 25.65
|
||||
:letter-spacing -1.6})
|
||||
|
||||
(def paragraph-1 {:font-size 15
|
||||
:line-height 21.75
|
||||
:letter-spacing -0.9})
|
||||
|
||||
(def paragraph-2 {:font-size 13
|
||||
:line-height 18.2
|
||||
:letter-spacing -0.3})
|
||||
|
||||
(def label {:font-size 11
|
||||
:line-height 15.62
|
||||
:letter-spacing 0.5})
|
||||
|
||||
(def font-regular {:font-family "Inter-Regular"}) ; 400
|
||||
|
||||
(def font-medium {:font-family "Inter-Medium"}) ; 500 ff
|
||||
|
||||
(def font-semi-bold {:font-family "Inter-SemiBold"}) ; 600
|
||||
|
||||
(def font-bold {:font-family "Inter-Bold"}) ; 700
|
||||
|
||||
(def monospace {:font-family "InterStatus-Regular"})
|
||||
@@ -0,0 +1,86 @@
|
||||
(ns quo2.screens.button
|
||||
(:require [reagent.core :as reagent]
|
||||
[quo.react-native :as rn]
|
||||
[quo.previews.preview :as preview]
|
||||
[quo.design-system.colors :as colors]
|
||||
[quo2.components.button :as quo2]))
|
||||
|
||||
(def descriptor [{:label "Type:"
|
||||
:key :type
|
||||
:type :select
|
||||
:options [{:key :primary
|
||||
:value "Primary"}
|
||||
{:key :secondary
|
||||
:value "Secondary"}
|
||||
{:key :grey
|
||||
:value "Grey"}
|
||||
{:key :outline
|
||||
:value "Outline"}
|
||||
{:key :ghost
|
||||
:value "Ghost"}
|
||||
{:key :danger
|
||||
:value "Danger"}]}
|
||||
{:label "Size:"
|
||||
:key :size
|
||||
:type :select
|
||||
:options [{:key 56
|
||||
:value "56"}
|
||||
{:key 40
|
||||
:value "40"}
|
||||
{:key 32
|
||||
:value "32"}
|
||||
{:key 24
|
||||
:value "24"}]}
|
||||
{:label "Icon:"
|
||||
:key :icon
|
||||
:type :boolean}
|
||||
{:label "Above icon:"
|
||||
:key :above
|
||||
:type :boolean}
|
||||
{:label "After icon:"
|
||||
:key :after
|
||||
:type :boolean}
|
||||
{:label "Before icon:"
|
||||
:key :before
|
||||
:type :boolean}
|
||||
{:label "Disabled:"
|
||||
:key :disabled
|
||||
:type :boolean}
|
||||
{:label "Label"
|
||||
:key :label
|
||||
:type :text}])
|
||||
|
||||
(defn cool-preview []
|
||||
(let [state (reagent/atom {:label "Press Me"
|
||||
:size 40})
|
||||
label (reagent/cursor state [:label])
|
||||
before (reagent/cursor state [:before])
|
||||
after (reagent/cursor state [:after])
|
||||
above (reagent/cursor state [:above])
|
||||
icon (reagent/cursor state [:icon])]
|
||||
(fn []
|
||||
[rn/view {:margin-bottom 50
|
||||
:padding 16}
|
||||
[rn/view {:flex 1}
|
||||
[preview/customizer state descriptor]]
|
||||
[rn/view {:padding-vertical 60
|
||||
:flex-direction :row
|
||||
:justify-content :center}
|
||||
[quo2/button (merge (dissoc @state
|
||||
:theme :before :after)
|
||||
{:on-press #(println "Hello world!")}
|
||||
(when @above
|
||||
{:above :main-icons/close-circle})
|
||||
(when @before
|
||||
{:before :main-icons/back})
|
||||
(when @after
|
||||
{:after :main-icons/next}))
|
||||
(if @icon :main-icons/close-circle @label)]]])))
|
||||
|
||||
(defn preview-button []
|
||||
[rn/view {:background-color (:ui-background @colors/theme)
|
||||
:flex 1}
|
||||
[rn/flat-list {:flex 1
|
||||
:keyboardShouldPersistTaps :always
|
||||
:header [cool-preview]
|
||||
:key-fn str}]])
|
||||
@@ -0,0 +1,63 @@
|
||||
(ns quo2.screens.main
|
||||
(:require [quo.react-native :as rn]
|
||||
[quo.theme :as theme]
|
||||
[quo.design-system.colors :as colors]
|
||||
[re-frame.core :as re-frame]
|
||||
[quo2.screens.button :as button]
|
||||
[quo2.screens.text :as text]
|
||||
[quo2.screens.tabs :as tabs]
|
||||
[quo2.screens.segmented :as segmented]
|
||||
[quo.core :as quo]))
|
||||
|
||||
(def screens [{:name :quo2-texts
|
||||
:insets {:top false}
|
||||
:component text/preview-text}
|
||||
{:name :quo2-button
|
||||
:insets {:top false}
|
||||
:component button/preview-button}
|
||||
{:name :quo2-tabs
|
||||
:insets {:top false}
|
||||
:component tabs/preview-tabs}
|
||||
{:name :quo2-segmented
|
||||
:insets {:top false}
|
||||
:component segmented/preview-segmented}])
|
||||
|
||||
(defn theme-switcher []
|
||||
[rn/view {:style {:flex-direction :row
|
||||
:margin-vertical 8
|
||||
:border-radius 4
|
||||
:background-color (:ui-01 @colors/theme)
|
||||
:border-width 1
|
||||
:border-color (:ui-02 @colors/theme)}}
|
||||
[rn/touchable-opacity {:style {:padding 8
|
||||
:flex 1
|
||||
:justify-content :center
|
||||
:align-items :center}
|
||||
:on-press #(theme/set-theme :light)}
|
||||
[quo/text "Set light theme"]]
|
||||
[rn/view {:width 1
|
||||
:margin-vertical 4
|
||||
:background-color (:ui-02 @colors/theme)}]
|
||||
[rn/touchable-opacity {:style {:padding 8
|
||||
:flex 1
|
||||
:justify-content :center
|
||||
:align-items :center}
|
||||
:on-press #(theme/set-theme :dark)}
|
||||
[quo/text "Set dark theme"]]])
|
||||
|
||||
(defn main-screen []
|
||||
[rn/scroll-view {:flex 1
|
||||
:padding-vertical 8
|
||||
:padding-horizontal 16
|
||||
:background-color (:ui-background @colors/theme)}
|
||||
[theme-switcher]
|
||||
[rn/view
|
||||
(for [{:keys [name]} screens]
|
||||
^{:key name}
|
||||
[rn/touchable-opacity {:on-press #(re-frame/dispatch [:navigate-to name])}
|
||||
[rn/view {:style {:padding-vertical 8}}
|
||||
[quo/text (str "Preview " name)]]])]])
|
||||
|
||||
(def main-screens [{:name :quo2-preview
|
||||
:insets {:top false}
|
||||
:component main-screen}])
|
||||
@@ -0,0 +1,48 @@
|
||||
(ns quo2.screens.segmented
|
||||
(:require [quo.react-native :as rn]
|
||||
[quo.design-system.colors :as colors]
|
||||
[quo.previews.preview :as preview]
|
||||
[quo2.components.segmented-control :as quo2]
|
||||
[reagent.core :as reagent]))
|
||||
|
||||
(def descriptor [{:label "Size:"
|
||||
:key :size
|
||||
:type :select
|
||||
:options [{:key 32
|
||||
:value "32"}
|
||||
{:key 28
|
||||
:value "28"}
|
||||
{:key 24
|
||||
:value "24"}
|
||||
{:key 20
|
||||
:value "20"}]}])
|
||||
|
||||
(defn cool-preview []
|
||||
(let [state (reagent/atom {:size 32})]
|
||||
(fn []
|
||||
[rn/view {:margin-bottom 50
|
||||
:padding 16}
|
||||
[rn/view {:flex 1}
|
||||
[preview/customizer state descriptor]]
|
||||
[rn/view {:padding-vertical 60}
|
||||
[quo2/segmented-control (merge @state
|
||||
{:default-active 1
|
||||
:data [{:id 1 :label "Tab 1"}
|
||||
{:id 2 :label "Tab 2"}
|
||||
{:id 3 :label "Tab 3"}
|
||||
{:id 4 :label "Tab 4"}]
|
||||
:on-change #(println "Active tab" %)})]]
|
||||
[rn/view {:padding-vertical 60}
|
||||
[quo2/segmented-control (merge @state
|
||||
{:default-active 1
|
||||
:data [{:id 1 :label "Tab 1"}
|
||||
{:id 2 :label "Tab 2"}]
|
||||
:on-change #(println "Active tab" %)})]]])))
|
||||
|
||||
(defn preview-segmented []
|
||||
[rn/view {:background-color (:ui-background @colors/theme)
|
||||
:flex 1}
|
||||
[rn/flat-list {:flex 1
|
||||
:keyboardShouldPersistTaps :always
|
||||
:header [cool-preview]
|
||||
:key-fn str}]])
|
||||
@@ -0,0 +1,44 @@
|
||||
(ns quo2.screens.tabs
|
||||
(:require [quo.react-native :as rn]
|
||||
[quo.design-system.colors :as colors]
|
||||
[quo.previews.preview :as preview]
|
||||
[quo2.components.tabs :as quo2]
|
||||
[reagent.core :as reagent]))
|
||||
|
||||
(def descriptor [{:label "Size:"
|
||||
:key :size
|
||||
:type :select
|
||||
:options [{:key 32
|
||||
:value "32"}
|
||||
{:key 28
|
||||
:value "28"}
|
||||
{:key 24
|
||||
:value "24"}
|
||||
{:key 20
|
||||
:value "20"}]}])
|
||||
|
||||
(defn cool-preview []
|
||||
(let [state (reagent/atom {:size 32})]
|
||||
(fn []
|
||||
[rn/view {:margin-bottom 50
|
||||
:padding 16}
|
||||
[rn/view {:flex 1}
|
||||
[preview/customizer state descriptor]]
|
||||
[rn/view {:padding-vertical 60
|
||||
:flex-direction :row
|
||||
:justify-content :center}
|
||||
[quo2/tabs (merge @state
|
||||
{:default-active 1
|
||||
:data [{:id 1 :label "Tab 1"}
|
||||
{:id 2 :label "Tab 2"}
|
||||
{:id 3 :label "Tab 3"}
|
||||
{:id 4 :label "Tab 4"}]
|
||||
:on-change #(println "Active tab" %)})]]])))
|
||||
|
||||
(defn preview-tabs []
|
||||
[rn/view {:background-color (:ui-background @colors/theme)
|
||||
:flex 1}
|
||||
[rn/flat-list {:flex 1
|
||||
:keyboardShouldPersistTaps :always
|
||||
:header [cool-preview]
|
||||
:key-fn str}]])
|
||||
@@ -0,0 +1,51 @@
|
||||
(ns quo2.screens.text
|
||||
(:require [quo.react-native :as rn]
|
||||
[quo.previews.preview :as preview]
|
||||
[reagent.core :as reagent]
|
||||
[quo2.components.text :as quo2]
|
||||
[quo.design-system.colors :as colors]))
|
||||
|
||||
(def descriptor [{:label "Size:"
|
||||
:key :size
|
||||
:type :select
|
||||
:options [{:key :heading-1
|
||||
:value "Heading 1"}
|
||||
{:key :heading-2
|
||||
:value "Heading 2"}
|
||||
{:key :paragraph-1
|
||||
:value "Paragraph 1"}
|
||||
{:key :paragraph-2
|
||||
:value "Paragraph 2"}
|
||||
{:key :label
|
||||
:value "Label"}]}
|
||||
{:label "Weight:"
|
||||
:key :weight
|
||||
:type :select
|
||||
:options [{:key :regular
|
||||
:value "Regular"}
|
||||
{:key :medium
|
||||
:value "Medium"}
|
||||
{:key :semi-bold
|
||||
:value "Semi-bold"}
|
||||
{:key :bold
|
||||
:value "Bold"}
|
||||
{:key :monospace
|
||||
:value "Monospace"}]}])
|
||||
|
||||
(defn cool-preview []
|
||||
(let [state (reagent/atom {})]
|
||||
(fn []
|
||||
[rn/view {:margin-bottom 50
|
||||
:padding 16}
|
||||
[preview/customizer state descriptor]
|
||||
[rn/view {:padding-vertical 60}
|
||||
[quo2/text @state
|
||||
"The quick brown fox jumped over the lazy dog."]]])))
|
||||
|
||||
(defn preview-text []
|
||||
[rn/view {:background-color (:ui-background @colors/theme)
|
||||
:flex 1}
|
||||
[rn/flat-list {:flex 1
|
||||
:keyboardShouldPersistTaps :always
|
||||
:header [cool-preview]
|
||||
:key-fn str}]])
|
||||
@@ -6,6 +6,7 @@
|
||||
[status-im.data-store.messages :as data-store.messages]
|
||||
[status-im.ethereum.json-rpc :as json-rpc]
|
||||
[status-im.transport.message.protocol :as protocol]
|
||||
[status-im.navigation :as navigation]
|
||||
[status-im.utils.fx :as fx]
|
||||
[taoensso.timbre :as log]
|
||||
[status-im.chat.models.mentions :as mentions]
|
||||
@@ -181,6 +182,14 @@
|
||||
:on-error #(log/error "failed to re-send message" %)}]}
|
||||
(update-message-status chat-id message-id :sending)))
|
||||
|
||||
(fx/defn share-to-contacts-pressed
|
||||
{:events [::share-to-contacts-pressed]}
|
||||
[{:keys [db] :as cofx}
|
||||
{:keys [message-id] :as message}]
|
||||
(fx/merge cofx
|
||||
(navigation/open-modal
|
||||
:share-to-contacts {:message-id message-id})))
|
||||
|
||||
(fx/defn delete-message
|
||||
"Deletes chat message, rebuild message-list"
|
||||
{:events [:chat.ui/delete-message]}
|
||||
|
||||
@@ -75,6 +75,7 @@
|
||||
"wakuext_createGroupChatWithMembers" {}
|
||||
"wakuext_createGroupChatFromInvitation" {}
|
||||
"wakuext_reSendChatMessage" {}
|
||||
"wakuext_shareImageMessage" {}
|
||||
"wakuext_getOurInstallations" {}
|
||||
"wakuext_setInstallationMetadata" {}
|
||||
"wakuext_loadFilters" {}
|
||||
|
||||
+42
-25
@@ -38,7 +38,7 @@
|
||||
[status-im.navigation :as navigation]
|
||||
status-im.notifications-center.core
|
||||
status-im.pairing.core
|
||||
status-im.popover.core
|
||||
[status-im.popover.core :as popover]
|
||||
status-im.profile.core
|
||||
status-im.search.core
|
||||
status-im.signals.core
|
||||
@@ -52,7 +52,7 @@
|
||||
status-im.utils.logging.core
|
||||
[status-im.utils.universal-links.core :as universal-links]
|
||||
[status-im.utils.utils :as utils]
|
||||
status-im.visibility-status-popover.core
|
||||
[status-im.visibility-status-popover.core :as visibility-status-popover]
|
||||
status-im.visibility-status-updates.core
|
||||
status-im.waku.core
|
||||
status-im.wallet.accounts.core
|
||||
@@ -60,7 +60,8 @@
|
||||
[status-im.wallet.core :as wallet]
|
||||
status-im.wallet.custom-tokens.core
|
||||
[status-im.navigation.core :as navigation.core]
|
||||
[status-im.multiaccounts.login.core :as login.core]))
|
||||
[status-im.multiaccounts.login.core :as login.core]
|
||||
[status-im.signing.core :as signing]))
|
||||
|
||||
(re-frame/reg-fx
|
||||
:dismiss-keyboard
|
||||
@@ -115,31 +116,47 @@
|
||||
(fx/defn system-theme-mode-changed
|
||||
{:events [:system-theme-mode-changed]}
|
||||
[{:keys [db] :as cofx} theme]
|
||||
(let [cur-theme (get-in db [:multiaccount :appearance])
|
||||
current-tab (get db :current-tab :chat)
|
||||
view-id (:view-id db)
|
||||
screen-params (get-in db [:navigation/screen-params view-id])
|
||||
root-id @navigation.core/root-id]
|
||||
(let [cur-theme (get-in db [:multiaccount :appearance])
|
||||
current-tab (get db :current-tab :chat)
|
||||
view-id (:view-id db)
|
||||
screen-params (get-in db [:navigation/screen-params view-id])
|
||||
root-id @navigation.core/root-id
|
||||
dispatch-later (cond-> []
|
||||
(= view-id :chat)
|
||||
(conj {:ms 1000
|
||||
:dispatch [:chat.ui/navigate-to-chat (:current-chat-id db)]})
|
||||
|
||||
(and
|
||||
(= root-id :chat-stack)
|
||||
(not-any? #(= view-id %) '(:home :empty-tab :wallet :status :my-profile :chat)))
|
||||
(conj {:ms 1000
|
||||
:dispatch [:navigate-to view-id screen-params]})
|
||||
|
||||
(some #(= view-id %) navigation.core/community-screens)
|
||||
(conj {:ms 800 :dispatch
|
||||
[:navigate-to :community
|
||||
(get-in db [:navigation/screen-params :community])]})
|
||||
|
||||
(= view-id :community-emoji-thumbnail-picker)
|
||||
(conj {:ms 900 :dispatch
|
||||
[:navigate-to :create-community-channel
|
||||
(get-in db [:navigation/screen-params :create-community-channel])]}))]
|
||||
|
||||
(navigation.core/dismiss-all-modals)
|
||||
(when (or (nil? cur-theme) (zero? cur-theme))
|
||||
(fx/merge cofx
|
||||
{::multiaccounts/switch-theme (if (= :dark theme) 2 1)
|
||||
:utils/dispatch-later
|
||||
(cond-> [{:ms 2000 :dispatch
|
||||
(if (= view-id :chat)
|
||||
[:chat.ui/navigate-to-chat (:current-chat-id db)]
|
||||
[:navigate-to view-id screen-params])}]
|
||||
|
||||
(some #(= view-id %) navigation.core/community-screens)
|
||||
(conj {:ms 1000 :dispatch
|
||||
[:navigate-to :community
|
||||
(get-in db [:navigation/screen-params :community])]})
|
||||
|
||||
(= view-id :community-emoji-thumbnail-picker)
|
||||
(conj {:ms 1500 :dispatch
|
||||
[:navigate-to :create-community-channel
|
||||
(get-in db [:navigation/screen-params :create-community-channel])]}))}
|
||||
(bottom-sheet/hide-bottom-sheet)
|
||||
(merge
|
||||
{::multiaccounts/switch-theme (if (= :dark theme) 2 1)}
|
||||
(when (seq dispatch-later)
|
||||
{:utils/dispatch-later dispatch-later}))
|
||||
(when (get-in db [:bottom-sheet/show?])
|
||||
(bottom-sheet/hide-bottom-sheet))
|
||||
(when (get-in db [:popover/popover])
|
||||
(popover/hide-popover))
|
||||
(when (get-in db [:visibility-status-popover/popover])
|
||||
(visibility-status-popover/hide-visibility-status-popover))
|
||||
(when (get-in db [:signing/tx])
|
||||
(signing/discard))
|
||||
(navigation/init-root root-id)
|
||||
(when (= root-id :chat-stack)
|
||||
(navigation/change-tab current-tab))))))
|
||||
|
||||
@@ -390,7 +390,9 @@
|
||||
:create-community-channel
|
||||
:community-emoji-thumbnail-picker
|
||||
:create-community-category
|
||||
:community-edit-chats))
|
||||
:community-edit-chats
|
||||
:community-edit
|
||||
:community-reorder-categories))
|
||||
|
||||
;; change view-id if it is still same after component is disappeared
|
||||
;; https://github.com/wix/react-native-navigation/issues/5744#issuecomment-563226820
|
||||
|
||||
@@ -143,8 +143,7 @@
|
||||
{:events [:notifications/switch-error]}
|
||||
[cofx enabled?]
|
||||
(multiaccounts.update/multiaccount-update
|
||||
:remote-push-notifications-enabled? (not enabled?)
|
||||
{}))
|
||||
cofx :remote-push-notifications-enabled? (not enabled?) {}))
|
||||
|
||||
(fx/defn notification-switch
|
||||
{:events [::switch]}
|
||||
|
||||
@@ -1033,9 +1033,8 @@
|
||||
:<- [:chats/current-raw-chat]
|
||||
:<- [:multiaccount/public-key]
|
||||
:<- [:communities/current-community]
|
||||
(fn [[{:keys [group-chat] :as current-chat}
|
||||
my-public-key
|
||||
community]]
|
||||
:<- [:contacts/blocked-set]
|
||||
(fn [[{:keys [group-chat chat-id] :as current-chat} my-public-key community blocked-users-set]]
|
||||
(when current-chat
|
||||
(cond-> current-chat
|
||||
(chat.models/public-chat? current-chat)
|
||||
@@ -1051,7 +1050,7 @@
|
||||
(assoc :show-input? true)
|
||||
|
||||
(not group-chat)
|
||||
(assoc :show-input? true)))))
|
||||
(assoc :show-input? (not (contains? blocked-users-set chat-id)))))))
|
||||
|
||||
(re-frame/reg-sub
|
||||
:chats/current-chat-chat-view
|
||||
|
||||
@@ -26,6 +26,22 @@
|
||||
:sticker sticker
|
||||
:contentType content-type})
|
||||
|
||||
(fx/defn share-image-to-contacts-pressed
|
||||
{:events [::share-image-to-contacts-pressed]}
|
||||
[cofx user-pk contacts message-id]
|
||||
(let [pks (if (seq user-pk)
|
||||
(conj contacts user-pk)
|
||||
contacts)]
|
||||
(when (seq pks)
|
||||
{::json-rpc/call [{:method "wakuext_shareImageMessage"
|
||||
:params [{:users pks
|
||||
:id message-id}]
|
||||
:js-response true
|
||||
:on-success #(re-frame/dispatch [:navigate-back])
|
||||
:on-error #(do
|
||||
(log/error "failed to share image message" %)
|
||||
(re-frame/dispatch [::failed-to-share-image %]))}]})))
|
||||
|
||||
(fx/defn send-chat-messages [_ messages]
|
||||
{::json-rpc/call [{:method (json-rpc/call-ext-method "sendChatMessages")
|
||||
:params [(mapv build-message messages)]
|
||||
|
||||
@@ -10,7 +10,10 @@
|
||||
[quo.design-system.colors :as colors]
|
||||
[status-im.ui.components.icons.icons :as icons]
|
||||
[status-im.ui.components.react :as react]
|
||||
[status-im.ui.components.slider :as slider]))
|
||||
[status-im.ui.components.slider :as slider]
|
||||
["react-native-blob-util" :default ReactNativeBlobUtil]
|
||||
[status-im.utils.platform :as platform]
|
||||
[taoensso.timbre :as log]))
|
||||
|
||||
(defonce player-ref (atom nil))
|
||||
(defonce current-player-message-id (atom nil))
|
||||
@@ -110,25 +113,34 @@
|
||||
#(update-state (merge params {:error (:message %)}))))))
|
||||
(update-state (merge params {:seek-to-ms value})))
|
||||
|
||||
(defn reload-player [{:keys [message-id state-ref] :as params} base64-data on-success]
|
||||
(defn download-audio-http [base64-uri on-success]
|
||||
(-> (.config ReactNativeBlobUtil (clj->js {:trusty platform/ios?}))
|
||||
(.fetch "GET" (str base64-uri))
|
||||
(.then #(on-success (.base64 ^js %)))
|
||||
(.catch #(log/error "could not fetch audio"))))
|
||||
|
||||
(defn reload-player [{:keys [message-id state-ref] :as params} audio-url on-success]
|
||||
;; to avoid reloading player while is initializing,
|
||||
;; we go ahead only if there is no player or
|
||||
;; if it is already prepared
|
||||
(when (or (nil? @player-ref) (audio/can-play? @player-ref))
|
||||
(when @player-ref
|
||||
(destroy-player (merge params {:reloading? true})))
|
||||
(reset! player-ref (audio/new-player
|
||||
base64-data
|
||||
{:autoDestroy false
|
||||
:continuesToPlayInBackground false}
|
||||
#(seek params 0 true nil)))
|
||||
(audio/prepare-player
|
||||
@player-ref
|
||||
#(when on-success (on-success))
|
||||
#(update-state (merge params {:error (:message %)})))
|
||||
(reset! current-player-message-id message-id)
|
||||
(reset! current-active-state-ref-ref state-ref)
|
||||
(update-state params)))
|
||||
(download-audio-http
|
||||
audio-url
|
||||
(fn [base64-data]
|
||||
(reset! player-ref (audio/new-player
|
||||
(str "data:audio/acc;base64," base64-data)
|
||||
{:autoDestroy false
|
||||
:continuesToPlayInBackground false}
|
||||
#(seek params 0 true nil)))
|
||||
(audio/prepare-player
|
||||
@player-ref
|
||||
#(when on-success (on-success))
|
||||
#(update-state (merge params {:error (:message %)})))
|
||||
(reset! current-player-message-id message-id)
|
||||
(reset! current-active-state-ref-ref state-ref)
|
||||
(update-state params)))))
|
||||
|
||||
(defn play-pause [{:keys [message-id state-ref] :as params} audio]
|
||||
(if (not= message-id @current-player-message-id)
|
||||
|
||||
@@ -24,6 +24,8 @@
|
||||
[status-im.ui.screens.chat.components.reply :as components.reply]
|
||||
[status-im.ui.screens.chat.message.link-preview :as link-preview]
|
||||
[status-im.ui.screens.communities.icon :as communities.icon]
|
||||
[status-im.chat.models.message :as message]
|
||||
[status-im.utils.handlers :refer [>evt]]
|
||||
[status-im.ui.components.animation :as animation]
|
||||
[status-im.chat.models.pin-message :as models.pin-message])
|
||||
(:require-macros [status-im.utils.views :refer [defview letsubs]]))
|
||||
@@ -583,6 +585,9 @@
|
||||
[{:on-press #(re-frame/dispatch [:chat.ui/reply-to-message message])
|
||||
:id :reply
|
||||
:label (i18n/label :t/message-reply)}
|
||||
{:on-press #(>evt [::message/share-to-contacts-pressed message])
|
||||
:id :share
|
||||
:label (i18n/label :t/share)}
|
||||
{:on-press #(re-frame/dispatch [:chat.ui/save-image-to-gallery (:image content)])
|
||||
:id :save
|
||||
:label (i18n/label :t/save)}]))}]
|
||||
|
||||
@@ -0,0 +1,55 @@
|
||||
(ns status-im.ui.screens.chat.share
|
||||
(:require [reagent.core :as reagent]
|
||||
[quo.react-native :as rn]
|
||||
[quo.core :as quo]
|
||||
[status-im.i18n.i18n :as i18n]
|
||||
[status-im.ui.components.toolbar :as toolbar]
|
||||
[status-im.utils.handlers :refer [<sub >evt-once]]
|
||||
[status-im.transport.message.protocol :as protocol]
|
||||
[status-im.ui.components.topbar :as topbar]
|
||||
[status-im.ui.components.chat-icon.screen :as chat-icon.screen]
|
||||
[status-im.multiaccounts.core :as multiaccounts]
|
||||
[clojure.string :as str]))
|
||||
|
||||
(defn contacts-list-item [{:keys [public-key active] :as contact} _ _ {:keys [selected]}]
|
||||
(let [[first-name second-name] (multiaccounts/contact-two-names contact true)]
|
||||
[quo/list-item
|
||||
{:title first-name
|
||||
:subtitle second-name
|
||||
:icon [chat-icon.screen/contact-icon-contacts-tab
|
||||
(multiaccounts/displayed-photo contact)]
|
||||
:accessory :checkbox
|
||||
:active active
|
||||
:on-press (fn []
|
||||
(if active
|
||||
(swap! selected disj public-key)
|
||||
(swap! selected conj public-key)))}]))
|
||||
|
||||
(defn share []
|
||||
(let [user-pk (reagent/atom "")
|
||||
contacts-selected (reagent/atom #{})
|
||||
{:keys [message-id]} (<sub [:get-screen-params])]
|
||||
(fn []
|
||||
(let [contacts-data (<sub [:contacts/active])
|
||||
selected @contacts-selected
|
||||
contacts (map (fn [{:keys [public-key] :as contact}]
|
||||
(assoc contact :active (contains? selected public-key)))
|
||||
contacts-data)]
|
||||
[:<>
|
||||
[topbar/topbar {:modal? true}]
|
||||
[rn/flat-list {:style {:flex 1}
|
||||
:content-container-style {:padding-vertical 16}
|
||||
:render-data {:selected contacts-selected}
|
||||
:render-fn contacts-list-item
|
||||
:key-fn (fn [{:keys [active public-key]}]
|
||||
(str public-key active))
|
||||
:data contacts}]
|
||||
[toolbar/toolbar
|
||||
{:show-border? true
|
||||
:center
|
||||
[quo/button {:disabled (and (str/blank? @user-pk)
|
||||
(zero? (count selected)))
|
||||
:type :secondary
|
||||
:on-press #(>evt-once [::protocol/share-image-to-contacts-pressed
|
||||
@user-pk selected message-id])}
|
||||
(i18n/label :t/share)]}]]))))
|
||||
@@ -13,25 +13,48 @@
|
||||
(defonce server (reagent/atom ""))
|
||||
|
||||
(defn local-notifications []
|
||||
[:<>
|
||||
(let [{:keys [enabled]} @(re-frame/subscribe [:notifications/wallet-transactions])]
|
||||
[quo/separator {:color (:ui-02 @quo-colors/theme)
|
||||
:style {:margin-vertical 8}}]
|
||||
[quo/list-header (i18n/label :t/local-notifications)]
|
||||
[quo/list-item
|
||||
{:size :small
|
||||
:title (i18n/label :t/notifications-transactions)
|
||||
:accessibility-label :notifications-button
|
||||
:active enabled
|
||||
:on-press #(re-frame/dispatch
|
||||
[::notifications/switch-transaction-notifications enabled])
|
||||
:accessory :switch}])])
|
||||
(let [{:keys [enabled]} @(re-frame/subscribe [:notifications/wallet-transactions])
|
||||
{:keys [notifications-enabled?]} @(re-frame/subscribe [:multiaccount])
|
||||
enabled (and enabled (or platform/ios? notifications-enabled?))]
|
||||
[quo/list-item
|
||||
{:size :small
|
||||
:title (i18n/label :t/notifications-transactions)
|
||||
:accessibility-label :notifications-button
|
||||
:active enabled
|
||||
:disabled (not (or platform/ios? notifications-enabled?))
|
||||
:on-press #(re-frame/dispatch
|
||||
[::notifications/switch-transaction-notifications enabled])
|
||||
:accessory :switch}]))
|
||||
|
||||
(defn notifications-settings-ios []
|
||||
(defn remote-notifications []
|
||||
(let [{:keys [remote-push-notifications-enabled?
|
||||
push-notifications-block-mentions?
|
||||
push-notifications-from-contacts-only?]}
|
||||
@(re-frame/subscribe [:multiaccount])]
|
||||
[:<>
|
||||
[quo/list-item
|
||||
{:size :small
|
||||
:title (i18n/label :t/notifications-non-contacts)
|
||||
:accessibility-label :notifications-button
|
||||
:active (and remote-push-notifications-enabled?
|
||||
(not push-notifications-from-contacts-only?))
|
||||
:disabled (not remote-push-notifications-enabled?)
|
||||
:on-press #(re-frame/dispatch
|
||||
[::notifications/switch-non-contacts (not push-notifications-from-contacts-only?)])
|
||||
:accessory :switch}]
|
||||
[quo/list-item
|
||||
{:size :small
|
||||
:title (i18n/label :t/allow-mention-notifications)
|
||||
:accessibility-label :notifications-button
|
||||
:active (and remote-push-notifications-enabled?
|
||||
(not push-notifications-block-mentions?))
|
||||
:disabled (not remote-push-notifications-enabled?)
|
||||
:on-press #(re-frame/dispatch
|
||||
[::notifications/switch-block-mentions (not push-notifications-block-mentions?)])
|
||||
:accessory :switch}]]))
|
||||
|
||||
(defn notifications-settings-ios []
|
||||
(let [{:keys [remote-push-notifications-enabled?]} @(re-frame/subscribe [:multiaccount])]
|
||||
[:<>
|
||||
[quo/list-item
|
||||
{:size :small
|
||||
@@ -43,25 +66,8 @@
|
||||
[quo/separator {:color (:ui-02 @quo-colors/theme)
|
||||
:style {:margin-vertical 8}}]
|
||||
[quo/list-header (i18n/label :t/notifications-preferences)]
|
||||
[quo/list-item
|
||||
{:size :small
|
||||
:title (i18n/label :t/notifications-non-contacts)
|
||||
:accessibility-label :notifications-button
|
||||
:active (and remote-push-notifications-enabled?
|
||||
(not push-notifications-from-contacts-only?))
|
||||
:on-press #(re-frame/dispatch
|
||||
[::notifications/switch-non-contacts (not push-notifications-from-contacts-only?)])
|
||||
:accessory :switch}]
|
||||
[quo/list-item
|
||||
{:size :small
|
||||
:title (i18n/label :t/allow-mention-notifications)
|
||||
:accessibility-label :notifications-button
|
||||
:active (and remote-push-notifications-enabled?
|
||||
(not push-notifications-block-mentions?))
|
||||
:on-press #(re-frame/dispatch
|
||||
[::notifications/switch-block-mentions (not push-notifications-block-mentions?)])
|
||||
:accessory :switch}]
|
||||
[local-notifications]]))
|
||||
[local-notifications]
|
||||
[remote-notifications]]))
|
||||
|
||||
(defn notifications-settings-android []
|
||||
(let [{:keys [notifications-enabled? remote-push-notifications-enabled?]}
|
||||
@@ -85,7 +91,12 @@
|
||||
[::notifications/switch
|
||||
(not remote-push-notifications-enabled?) true])
|
||||
:accessory :switch}])
|
||||
[local-notifications]]))
|
||||
[quo/separator {:color (:ui-02 @quo-colors/theme)
|
||||
:style {:margin-vertical 8}}]
|
||||
[quo/list-header (i18n/label :t/notifications-preferences)]
|
||||
[local-notifications]
|
||||
(when (and platform/android? (not config/google-free))
|
||||
[remote-notifications])]))
|
||||
|
||||
(defn notifications-settings []
|
||||
[react/scroll-view {:style {:flex 1}
|
||||
|
||||
@@ -15,7 +15,6 @@
|
||||
[quo.design-system.colors :as colors]
|
||||
[status-im.ui.components.toolbar :as toolbar]
|
||||
[status-im.ui.components.keyboard-avoid-presentation :as kb-presentation]
|
||||
[status-im.utils.platform :as platform]
|
||||
[reagent.core :as reagent]
|
||||
[clojure.string :as string]
|
||||
[quo.components.list.item :as list-item]
|
||||
@@ -40,14 +39,13 @@
|
||||
:icon :main-icons/add-contact
|
||||
:accessibility-label :add-to-contacts-button
|
||||
:action #(re-frame/dispatch [:contact.ui/add-to-contact-pressed public-key nil ens-name])}])
|
||||
(when platform/ios?
|
||||
[{:label (i18n/label (if (or muted? blocked?) :t/unmute :t/mute))
|
||||
:icon :main-icons/notification
|
||||
:accessibility-label :mute-chat
|
||||
:selected muted?
|
||||
:disabled blocked?
|
||||
:action (when-not blocked?
|
||||
#(re-frame/dispatch [::chat.models/mute-chat-toggled public-key (not muted?)]))}])
|
||||
[{:label (i18n/label (if (or muted? blocked?) :t/unmute :t/mute))
|
||||
:icon :main-icons/notification
|
||||
:accessibility-label :mute-chat
|
||||
:selected muted?
|
||||
:disabled blocked?
|
||||
:action (when-not blocked?
|
||||
#(re-frame/dispatch [::chat.models/mute-chat-toggled public-key (not muted?)]))}]
|
||||
[{:label (i18n/label (if blocked? :t/unblock :t/block))
|
||||
:negative true
|
||||
:selected blocked?
|
||||
|
||||
@@ -116,6 +116,13 @@
|
||||
:accessibility-label :appearance-settings-button
|
||||
:chevron true
|
||||
:on-press #(re-frame/dispatch [:navigate-to :quo-preview])}])
|
||||
(when config/quo-preview-enabled?
|
||||
[quo/list-item
|
||||
{:icon :main-icons/appearance
|
||||
:title "Quo2.0 Preview"
|
||||
:accessibility-label :appearance-settings-button
|
||||
:chevron true
|
||||
:on-press #(re-frame/dispatch [:navigate-to :quo2-preview])}])
|
||||
[quo/list-item
|
||||
{:icon :main-icons/appearance
|
||||
:title (i18n/label :t/appearance)
|
||||
|
||||
@@ -23,6 +23,7 @@
|
||||
[status-im.ui.screens.bug-report :as bug-report]
|
||||
[status-im.ui.screens.chat.pinned-messages :as pin-messages]
|
||||
[status-im.ui.screens.chat.views :as chat]
|
||||
[status-im.ui.screens.chat.share :as chat.share]
|
||||
[status-im.ui.screens.communities.channel-details :as communities.channel-details]
|
||||
[status-im.ui.screens.communities.community :as community]
|
||||
[status-im.ui.screens.communities.community-emoji-thumbnail-picker :as community-emoji-thumbnail-picker]
|
||||
@@ -119,7 +120,9 @@
|
||||
[status-im.ui.screens.wallet.accounts-manage.views :as accounts-manage]
|
||||
[status-im.ui.screens.wallet.buy-crypto.views :as wallet.buy-crypto]
|
||||
[status-im.ui.screens.wallet.recipient.views :as recipient]
|
||||
[status-im.ui.screens.wallet.send.views :as wallet.send]))
|
||||
[status-im.ui.screens.wallet.send.views :as wallet.send]
|
||||
[quo2.screens.main :as quo2.preview]
|
||||
[status-im.utils.config :as config]))
|
||||
|
||||
(def components
|
||||
[{:name :chat-toolbar
|
||||
@@ -611,6 +614,13 @@
|
||||
:options {:topBar {:title {:text (i18n/label :t/new-public-group-chat)}}}
|
||||
:component new-public-chat/new-public-chat}
|
||||
|
||||
;[Chat] Share Images message
|
||||
{:name :share-to-contacts
|
||||
:options {:topBar {:visible false
|
||||
:title (i18n/label :t/community-share-title)}}
|
||||
:component chat.share/share
|
||||
:insets {:bottom true}}
|
||||
|
||||
;[Chat] Link preview settings
|
||||
{:name :link-preview-settings
|
||||
:options {:topBar {:title {:text (i18n/label :t/chat-link-previews)}}}
|
||||
@@ -903,7 +913,11 @@
|
||||
:options {:topBar {:visible false}}
|
||||
:component bug-report/bug-report}]
|
||||
|
||||
(when js/goog.DEBUG
|
||||
(when config/quo-preview-enabled?
|
||||
quo.preview/screens)
|
||||
(when js/goog.DEBUG
|
||||
quo.preview/main-screens)))
|
||||
(when config/quo-preview-enabled?
|
||||
quo.preview/main-screens)
|
||||
(when config/quo-preview-enabled?
|
||||
quo2.preview/screens)
|
||||
(when config/quo-preview-enabled?
|
||||
quo2.preview/main-screens)))
|
||||
|
||||
@@ -1,13 +1,16 @@
|
||||
(ns status-im.utils.theme
|
||||
(:require ["react-native-dark-mode" :as react-native-dark-mode]
|
||||
[oops.core :refer [oget ocall]]))
|
||||
(:require ["react-native" :refer (Appearance)]
|
||||
[oops.core :refer [ocall]]))
|
||||
|
||||
(def event-emitter (oget react-native-dark-mode "eventEmitter"))
|
||||
(def initial-mode (atom (oget react-native-dark-mode "initialMode")))
|
||||
(def initial-mode (atom (ocall Appearance "getColorScheme")))
|
||||
|
||||
;; Note - don't use value returned by change listener
|
||||
;; https://github.com/facebook/react-native/issues/28525
|
||||
(defn add-mode-change-listener [callback]
|
||||
(ocall event-emitter "on" "currentModeChanged" #(do (reset! initial-mode %)
|
||||
(callback (keyword %)))))
|
||||
(ocall Appearance "addChangeListener" #(let [mode (ocall Appearance "getColorScheme")]
|
||||
(when-not (= mode @initial-mode)
|
||||
(reset! initial-mode mode)
|
||||
(callback (keyword mode))))))
|
||||
|
||||
(defn is-dark-mode []
|
||||
(= @initial-mode "dark"))
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
"_comment": "Instead use: scripts/update-status-go.sh <rev>",
|
||||
"owner": "status-im",
|
||||
"repo": "status-go",
|
||||
"version": "v0.94.7",
|
||||
"commit-sha1": "b559c561d80a3b8b131b81d82e2bfda3ae387824",
|
||||
"src-sha256": "0ak0zb3bq3jwlrvqcvf8fycdxvgls61qi2bmp8xi81952andk27w"
|
||||
"version": "v0.94.12",
|
||||
"commit-sha1": "50ec6f97e01bbd8b61672a1c7db938774b233dbe",
|
||||
"src-sha256": "03vc35x0gwj5zf9j0p6f7gqx7ylvcwwd6prv4q5gz6g5pnbx4iqn"
|
||||
}
|
||||
|
||||
@@ -0,0 +1,23 @@
|
||||
# E2E tests requirements
|
||||
|
||||
### Environment variables
|
||||
- WEB3_INFURA_PROJECT_ID
|
||||
- ETHERSCAN_API_KEY
|
||||
|
||||
1) If running on SauceLab emulators:
|
||||
- SAUCE_USERNAME
|
||||
- SAUCE_ACCESS_KEY
|
||||
2) If running with Testrail (`--testrail_report=True` param):
|
||||
- TESTRAIL_PASS
|
||||
- TESTRAIL_USER
|
||||
|
||||
## Other
|
||||
Userdata is stored in `tests.users` module (`test/appium/tests/users.py`, which is not committed to repo).
|
||||
|
||||
So to launch e2e you need to copy `users.py` to `test/appium/tests/` to prevent `ImportError`
|
||||
|
||||
If you are external contributor, you can contact us at [error-reports@status.im](mailto:error-reports@status.im) to get `users.py`
|
||||
|
||||
More info on local setup for e2e can be found [here](https://notes.status.im/setup-e2e)
|
||||
|
||||
|
||||
@@ -10,8 +10,8 @@ from os import environ
|
||||
import tests
|
||||
import support.api.web3_api as w3
|
||||
|
||||
class NetworkApi(object):
|
||||
|
||||
class NetworkApi(object):
|
||||
|
||||
def __init__(self):
|
||||
self.network_url = 'http://api-ropsten.etherscan.io/api?'
|
||||
@@ -148,9 +148,9 @@ class NetworkApi(object):
|
||||
pass
|
||||
|
||||
def faucet_backup(self, address):
|
||||
self.log("Trying to get funds from %s" % self.faucet_backup_address)
|
||||
address = "0x" + address
|
||||
w3.donate_testnet_eth(address=address, amount=0.005, inscrease_default_gas_price=10)
|
||||
self.log("Trying to get funds from %s" % self.faucet_backup_address)
|
||||
address = "0x" + address
|
||||
w3.donate_testnet_eth(address=address, amount=0.005, inscrease_default_gas_price=10)
|
||||
|
||||
def get_donate(self, address, external_faucet=False, wait_time=300):
|
||||
initial_balance = self.get_balance(address)
|
||||
|
||||
@@ -102,7 +102,7 @@ class BaseTestReport:
|
||||
|
||||
@staticmethod
|
||||
def get_jenkins_link_to_rerun_e2e(branch_name="develop", pr_id="", apk_name="", tr_case_ids=""):
|
||||
return 'https://ci.status.im/job/end-to-end-tests/job/status-app-prs-rerun/parambuild/' \
|
||||
return 'https://ci.status.im/job/status-react/job/e2e/job/status-app-prs-rerun/parambuild/' \
|
||||
'?BRANCH_NAME=%s&APK_NAME=%s&PR_ID=%s&TR_CASE_IDS=%s' % (branch_name, apk_name, pr_id, tr_case_ids)
|
||||
|
||||
def get_sauce_final_screenshot_url(self, job_id):
|
||||
|
||||
@@ -100,6 +100,7 @@ class TestrailReport(BaseTestReport):
|
||||
test_cases['critical'] = 730
|
||||
test_cases['medium'] = 736
|
||||
test_cases['upgrade'] = 881
|
||||
## tests pr
|
||||
test_cases['public_chat'] = 50654
|
||||
test_cases['one_to_one_chat'] = 50655
|
||||
test_cases['group_chat'] = 50656
|
||||
@@ -108,6 +109,7 @@ class TestrailReport(BaseTestReport):
|
||||
test_cases['wallet'] = 50661
|
||||
test_cases['send_tx'] = 50662
|
||||
test_cases['keycard_tx'] = 50663
|
||||
test_cases['browser'] = 50812
|
||||
test_pr = list()
|
||||
for key in test_cases:
|
||||
if key != 'medium' and key != 'upgrade':
|
||||
|
||||
+7
-14
@@ -9,6 +9,7 @@ from tests.users import basic_user, transaction_senders, recovery_users
|
||||
|
||||
|
||||
@pytest.mark.xdist_group(name="onboarding_1")
|
||||
@marks.critical
|
||||
class TestOnboardingOneDeviceMerged(MultipleSharedDeviceTestCase):
|
||||
|
||||
@classmethod
|
||||
@@ -24,7 +25,6 @@ class TestOnboardingOneDeviceMerged(MultipleSharedDeviceTestCase):
|
||||
cls.username = cls.profile.default_username_text.text
|
||||
|
||||
@marks.testrail_id(700742)
|
||||
@marks.critical
|
||||
def test_onboarding_home_initial_popup(self):
|
||||
self.home.home_button.double_click()
|
||||
texts = ["chat-and-transact", "invite-friends"]
|
||||
@@ -39,7 +39,6 @@ class TestOnboardingOneDeviceMerged(MultipleSharedDeviceTestCase):
|
||||
self.errors.verify_no_errors()
|
||||
|
||||
@marks.testrail_id(700743)
|
||||
@marks.critical
|
||||
def test_onboarding_share_contact_address(self):
|
||||
self.profile = self.home.profile_button.click()
|
||||
|
||||
@@ -68,7 +67,6 @@ class TestOnboardingOneDeviceMerged(MultipleSharedDeviceTestCase):
|
||||
self.errors.verify_no_errors()
|
||||
|
||||
@marks.testrail_id(700744)
|
||||
@marks.critical
|
||||
def test_onboarding_share_wallet_address(self):
|
||||
self.home.just_fyi("Copying wallet address")
|
||||
wallet = self.home.wallet_button.click()
|
||||
@@ -96,7 +94,6 @@ class TestOnboardingOneDeviceMerged(MultipleSharedDeviceTestCase):
|
||||
self.errors.verify_no_errors()
|
||||
|
||||
@marks.testrail_id(700745)
|
||||
@marks.critical
|
||||
def test_onboarding_backup_seed_phrase_restore_same_login_logcat(self):
|
||||
self.home.just_fyi("Check that badge on profile about back up seed phrase is presented")
|
||||
if self.home.profile_button.counter.text != '1':
|
||||
@@ -144,7 +141,6 @@ class TestOnboardingOneDeviceMerged(MultipleSharedDeviceTestCase):
|
||||
self.errors.verify_no_errors()
|
||||
|
||||
@marks.testrail_id(700746)
|
||||
@marks.critical
|
||||
def test_onboarding_cant_sign_in_with_invalid_password_logcat(self):
|
||||
self.home.profile_button.click()
|
||||
self.profile.logout()
|
||||
@@ -168,7 +164,6 @@ class TestOnboardingOneDeviceMerged(MultipleSharedDeviceTestCase):
|
||||
self.errors.verify_no_errors()
|
||||
|
||||
@marks.testrail_id(700747)
|
||||
@marks.critical
|
||||
def test_onboarding_add_new_multiaccount_username_by_position_pass_validation(self):
|
||||
self.home.profile_button.click()
|
||||
self.profile.logout()
|
||||
@@ -227,8 +222,9 @@ class TestOnboardingOneDeviceMerged(MultipleSharedDeviceTestCase):
|
||||
self.errors.verify_no_errors()
|
||||
|
||||
|
||||
@pytest.mark.xdist_group(name="recover_1")
|
||||
class TestRecoverOneDeviceMerged(MultipleSharedDeviceTestCase):
|
||||
@pytest.mark.xdist_group(name="restore_1")
|
||||
@marks.critical
|
||||
class TestRestoreOneDeviceMerged(MultipleSharedDeviceTestCase):
|
||||
@classmethod
|
||||
def setup_class(cls):
|
||||
cls.user = transaction_senders['A']
|
||||
@@ -240,8 +236,7 @@ class TestRecoverOneDeviceMerged(MultipleSharedDeviceTestCase):
|
||||
cls.home = cls.sign_in.recover_access(passphrase=cls.passphrase, password=cls.password)
|
||||
|
||||
@marks.testrail_id(700748)
|
||||
@marks.critical
|
||||
def test_recover_uppercase_whitespaces_seed_phrase_special_char_passw_logcat(self):
|
||||
def test_restore_uppercase_whitespaces_seed_phrase_special_char_passw_logcat(self):
|
||||
profile = self.home.profile_button.click()
|
||||
public_key, username = self.sign_in.get_public_key_and_username(return_username=True)
|
||||
|
||||
@@ -258,8 +253,7 @@ class TestRecoverOneDeviceMerged(MultipleSharedDeviceTestCase):
|
||||
self.errors.verify_no_errors()
|
||||
|
||||
@marks.testrail_id(700749)
|
||||
@marks.critical
|
||||
def test_recover_set_up_wallet_sign_phrase(self):
|
||||
def test_restore_set_up_wallet_sign_phrase(self):
|
||||
wallet = self.sign_in.wallet_button.click()
|
||||
|
||||
wallet.just_fyi("Initiating some transaction so the wallet signing phrase pop-up appears")
|
||||
@@ -308,8 +302,7 @@ class TestRecoverOneDeviceMerged(MultipleSharedDeviceTestCase):
|
||||
self.errors.verify_no_errors()
|
||||
|
||||
@marks.testrail_id(700750)
|
||||
@marks.critical
|
||||
def test_recover_validation_seed_phrase_field(self):
|
||||
def test_restore_validation_seed_phrase_field(self):
|
||||
validations = [
|
||||
{
|
||||
'case': 'empty value',
|
||||
@@ -10,7 +10,8 @@ class TestCreateAccount(SingleDeviceTestCase):
|
||||
@marks.critical
|
||||
def test_restore_account_migrate_multiaccount_to_keycard(self):
|
||||
sign_in = SignInView(self.driver)
|
||||
seed = basic_user['passphrase']
|
||||
user = transaction_senders['ETH_ADI_STT_2']
|
||||
seed = user['passphrase']
|
||||
home = sign_in.recover_access(passphrase=seed)
|
||||
profile = home.profile_button.click()
|
||||
profile.privacy_and_security_button.click()
|
||||
@@ -29,7 +30,7 @@ class TestCreateAccount(SingleDeviceTestCase):
|
||||
self.errors.append("Get a keycard banner is not shown on login screen for ordinary multiaccount")
|
||||
sign_in.options_button.click()
|
||||
sign_in.manage_keys_and_storage_button.click()
|
||||
if not sign_in.element_by_text(basic_user['username']).is_element_displayed():
|
||||
if not sign_in.element_by_text(user['username']).is_element_displayed():
|
||||
self.driver.fail("Default username is not shown when migrating multiaccount to keycard!")
|
||||
|
||||
home.just_fyi("Checking validation of seed phrase during migration")
|
||||
@@ -78,15 +79,15 @@ class TestCreateAccount(SingleDeviceTestCase):
|
||||
|
||||
sign_in.just_fyi('Check that after migration wallet address matches expected')
|
||||
address = wallet.get_wallet_address()
|
||||
if address != '0x%s' % basic_user['address']:
|
||||
if address != '0x%s' % user['address']:
|
||||
self.errors.append('Restored address %s does not match expected' % address)
|
||||
|
||||
sign_in.just_fyi('Check that after migration username and public key match expected')
|
||||
public_key, default_username = sign_in.get_public_key_and_username(return_username=True)
|
||||
profile = sign_in.get_profile_view()
|
||||
if public_key != basic_user['public_key']:
|
||||
if public_key != user['public_key']:
|
||||
self.errors.append('Public key %s does not match expected' % public_key)
|
||||
if default_username != basic_user['username']:
|
||||
if default_username != user['username']:
|
||||
self.errors.append('Default username %s does not match expected' % default_username)
|
||||
profile.logout()
|
||||
|
||||
@@ -97,14 +98,14 @@ class TestCreateAccount(SingleDeviceTestCase):
|
||||
self.errors.append("Get a keycard banner is shown on migrated keycard multiaccount")
|
||||
keycard.one_button.wait_for_visibility_of_element(10)
|
||||
keycard.enter_default_pin()
|
||||
if not sign_in.home_button.is_element_displayed(10):
|
||||
if not sign_in.home_button.is_element_displayed(30):
|
||||
self.driver.fail('Keycard user is not logged in')
|
||||
|
||||
sign_in.just_fyi('Check that can add another wallet account and send transaction')
|
||||
home.wallet_button.click()
|
||||
wallet.add_account(account_name="another_keycard_account", keycard=True)
|
||||
transaction_amount_added = wallet.get_unique_amount()
|
||||
wallet.send_transaction(amount=transaction_amount_added, recipient=transaction_senders['B']['address'],
|
||||
wallet.send_transaction(amount=transaction_amount_added, recipient=transaction_senders['ETH_8']['address'],
|
||||
keycard=True, sign_transaction=True)
|
||||
self.driver.reset()
|
||||
home = sign_in.recover_access(passphrase=seed)
|
||||
@@ -303,12 +304,14 @@ class TestCreateAccount(SingleDeviceTestCase):
|
||||
|
||||
@marks.testrail_id(6311)
|
||||
@marks.medium
|
||||
@marks.transaction
|
||||
def test_same_seed_added_inside_multiaccount_and_keycard(self):
|
||||
sign_in = SignInView(self.driver)
|
||||
recipient = "0x" + transaction_senders['G']['address']
|
||||
recipient = "0x" + transaction_senders['ETH_7']['address']
|
||||
user = transaction_senders['ETH_ADI_STT_3']
|
||||
|
||||
sign_in.just_fyi('Restore keycard multiaccount and logout')
|
||||
sign_in.recover_access(passphrase=basic_user['passphrase'], keycard=True)
|
||||
sign_in.recover_access(passphrase=user['passphrase'], keycard=True)
|
||||
profile_view = sign_in.profile_button.click()
|
||||
profile_view.logout()
|
||||
|
||||
@@ -332,7 +335,7 @@ class TestCreateAccount(SingleDeviceTestCase):
|
||||
wallet.enter_your_password_input.send_keys(common_password)
|
||||
account_name = 'subacc'
|
||||
wallet.account_name_input.send_keys(account_name)
|
||||
wallet.enter_seed_phrase_input.set_value(basic_user['passphrase'])
|
||||
wallet.enter_seed_phrase_input.set_value(user['passphrase'])
|
||||
wallet.add_account_generate_account_button.click()
|
||||
wallet.get_account_by_name(account_name).click()
|
||||
|
||||
@@ -352,9 +355,9 @@ class TestCreateAccount(SingleDeviceTestCase):
|
||||
wallet.send_transaction(amount=transaction_amount_keycard, recipient=recipient, keycard=True,
|
||||
sign_transaction=True)
|
||||
|
||||
sign_in.just_fyi('Check both transactions from keycard multiaccount and from added account in network')
|
||||
for amount in [transaction_amount_keycard, transaction_amount_added]:
|
||||
self.network_api.find_transaction_by_unique_amount(basic_user['address'], amount)
|
||||
sign_in.just_fyi("Checking '%s' tx" % amount)
|
||||
self.network_api.find_transaction_by_unique_amount(user['address'], amount)
|
||||
|
||||
self.errors.verify_no_errors()
|
||||
|
||||
@@ -585,74 +588,3 @@ class TestCreateAccount(SingleDeviceTestCase):
|
||||
|
||||
self.errors.verify_no_errors()
|
||||
|
||||
|
||||
class TestKeycardCreateMultiaccountMultipleDevice(MultipleDeviceTestCase):
|
||||
|
||||
@marks.testrail_id(5689)
|
||||
@marks.critical
|
||||
def test_keycard_create_login_restore_unlock_same_seed(self):
|
||||
self.create_drivers(2)
|
||||
device_1, device_2 = SignInView(self.drivers[0]), SignInView(self.drivers[1])
|
||||
|
||||
device_1.just_fyi("Create keycard account and save seed phrase")
|
||||
device_1.accept_tos_checkbox.enable()
|
||||
device_1.get_started_button.click()
|
||||
device_1.generate_key_button.click_until_presence_of_element(device_1.next_button)
|
||||
device_1.next_button.click_until_absense_of_element(device_1.element_by_translation_id("intro-wizard-title2"))
|
||||
keycard_flow = device_1.keycard_storage_button.click()
|
||||
keycard_flow.confirm_pin_and_proceed()
|
||||
seed_phrase = keycard_flow.backup_seed_phrase()
|
||||
device_1.maybe_later_button.wait_for_visibility_of_element(30)
|
||||
device_1.maybe_later_button.click_until_presence_of_element(device_1.lets_go_button)
|
||||
device_1.lets_go_button.click_until_absense_of_element(device_1.lets_go_button)
|
||||
device_1.profile_button.wait_for_visibility_of_element(30)
|
||||
|
||||
device_2.just_fyi("Restore same multiaccount from seed phrase on another device")
|
||||
device_2.recover_access(seed_phrase)
|
||||
|
||||
device_1.just_fyi('Check that after creating keycard account balance is 0, not ...')
|
||||
wallet_1 = device_1.wallet_button.click()
|
||||
wallet_address = wallet_1.get_wallet_address()
|
||||
wallet_1.wallet_button.double_click()
|
||||
if wallet_1.status_account_total_usd_value.text != '0':
|
||||
self.errors.append("Account USD value is not 0, it is %s" % wallet_1.status_account_total_usd_value.text)
|
||||
public_key, default_username = device_1.get_public_key_and_username(return_username=True)
|
||||
profile_1 = device_1.get_profile_view()
|
||||
profile_1.logout()
|
||||
|
||||
profile_1.just_fyi('Check that can login with keycard account')
|
||||
device_1.multi_account_on_login_button.wait_for_visibility_of_element(5)
|
||||
device_1.multi_account_on_login_button.click()
|
||||
if not keycard_flow.element_by_text_part(default_username).is_element_displayed():
|
||||
self.errors.append("%s is not found on keycard login screen!" % default_username)
|
||||
keycard_flow.enter_default_pin()
|
||||
if not device_1.home_button.is_element_displayed(10):
|
||||
self.errors.append('Keycard user is not logged in')
|
||||
|
||||
device_2.just_fyi("Check username and wallet address on another device")
|
||||
wallet_2 = device_2.wallet_button.click()
|
||||
wallet_address_2 = wallet_2.get_wallet_address()
|
||||
wallet_2.wallet_button.double_click()
|
||||
if wallet_address != wallet_address_2:
|
||||
self.errors.append('Wallet address on restored multiaccount is not equal to created keycard multiaccount')
|
||||
public_key_2, default_username_2 = device_2.get_public_key_and_username(return_username=True)
|
||||
if public_key != public_key_2:
|
||||
self.errors.append('Public key on restored multiaccount is not equal to created keycard multiaccount')
|
||||
if default_username_2 != default_username:
|
||||
self.errors.append('Username on restored multiaccount is not equal to created keycard multiaccount')
|
||||
|
||||
device_1.just_fyi('Unlock keycard multiaccount at attempt to restore same multiaccount from seed')
|
||||
device_1.profile_button.click()
|
||||
profile_1.logout()
|
||||
device_1.access_key_button.click()
|
||||
device_1.enter_seed_phrase_button.click()
|
||||
device_1.seedphrase_input.click()
|
||||
device_1.seedphrase_input.set_value(seed_phrase)
|
||||
device_1.next_button.click()
|
||||
device_1.element_by_translation_id("unlock", uppercase=True).click()
|
||||
keycard_flow.enter_default_pin()
|
||||
device_1_home = device_1.home_button.click()
|
||||
device_1_home.plus_button.click()
|
||||
if not device_1_home.start_new_chat_button.is_element_displayed():
|
||||
self.errors.append("Can't proceed using account after it's re-recover twice.")
|
||||
self.errors.verify_no_errors()
|
||||
|
||||
@@ -80,7 +80,7 @@ class TestProfileSingleDevice(SingleDeviceTestCase):
|
||||
from views.send_transaction_view import SendTransactionView
|
||||
send_tx = SendTransactionView(self.driver)
|
||||
send_tx.amount_edit_box.set_value('0')
|
||||
send_tx.set_recipient_address(ens_user['address'])
|
||||
send_tx.set_recipient_address(transaction_senders['ETH_7']['address'])
|
||||
send_tx.next_button.click()
|
||||
send_tx.set_up_wallet_when_sending_tx()
|
||||
send_tx.advanced_button.click()
|
||||
@@ -391,40 +391,6 @@ class TestProfileSingleDevice(SingleDeviceTestCase):
|
||||
self.errors.append("Support channel is not suggested for requesting a feature")
|
||||
self.errors.verify_no_errors()
|
||||
|
||||
@marks.testrail_id(5738)
|
||||
@marks.high
|
||||
def test_dapps_permissions(self):
|
||||
home = SignInView(self.driver).create_user()
|
||||
account_name = home.status_account_name
|
||||
|
||||
home.just_fyi('open Status Test Dapp, allow all and check permissions in Profile')
|
||||
web_view = home.open_status_test_dapp()
|
||||
dapp = home.dapp_tab_button.click()
|
||||
profile = home.profile_button.click()
|
||||
profile.privacy_and_security_button.click()
|
||||
profile.dapp_permissions_button.click()
|
||||
profile.element_by_text(test_dapp_name).click()
|
||||
if not profile.element_by_text(account_name).is_element_displayed():
|
||||
self.errors.append('Wallet permission was not granted')
|
||||
if not profile.element_by_translation_id("chat-key").is_element_displayed():
|
||||
self.errors.append('Contact code permission was not granted')
|
||||
|
||||
profile.just_fyi('revoke access and check that they are asked second time')
|
||||
profile.revoke_access_button.click()
|
||||
profile.back_button.click()
|
||||
profile.dapp_tab_button.click()
|
||||
|
||||
web_view.open_tabs_button.click()
|
||||
web_view.empty_tab_button.click()
|
||||
|
||||
dapp.open_url(test_dapp_url)
|
||||
if not dapp.element_by_text_part(account_name).is_element_displayed():
|
||||
self.errors.append('Wallet permission is not asked')
|
||||
if dapp.allow_button.is_element_displayed():
|
||||
dapp.allow_button.click(times_to_click=1)
|
||||
if not dapp.element_by_translation_id("your-contact-code").is_element_displayed():
|
||||
self.errors.append('Profile permission is not asked')
|
||||
self.errors.verify_no_errors()
|
||||
|
||||
@marks.testrail_id(5368)
|
||||
@marks.medium
|
||||
@@ -585,11 +551,9 @@ class TestProfileMultipleDevice(MultipleDeviceTestCase):
|
||||
|
||||
@marks.testrail_id(6636)
|
||||
@marks.medium
|
||||
@marks.flaky
|
||||
def test_show_profile_picture_of_setting_online_indicator(self):
|
||||
self.create_drivers(2)
|
||||
home_1, home_2 = SignInView(self.drivers[0]).create_user(), SignInView(self.drivers[1]).create_user(
|
||||
enable_notifications=True)
|
||||
home_1, home_2 = SignInView(self.drivers[0]).create_user(), SignInView(self.drivers[1]).create_user(enable_notifications=True)
|
||||
profile_1, profile_2 = home_1.profile_button.click(), home_2.profile_button.click()
|
||||
public_key_1, default_username_1 = profile_1.get_public_key_and_username(return_username=True)
|
||||
public_key_2, default_username_2 = profile_2.get_public_key_and_username(return_username=True)
|
||||
@@ -621,6 +585,7 @@ class TestProfileMultipleDevice(MultipleDeviceTestCase):
|
||||
|
||||
profile_1.just_fyi('Check profile image is in mentions because now user was added in contacts')
|
||||
one_to_one_chat_2.add_to_contacts.click()
|
||||
one_to_one_chat_2.send_message("hey")
|
||||
one_to_one_chat_2.chat_message_input.set_value('@' + default_username_1)
|
||||
one_to_one_chat_2.chat_message_input.click()
|
||||
if not one_to_one_chat_2.user_profile_image_in_mentions_list(
|
||||
@@ -628,12 +593,17 @@ class TestProfileMultipleDevice(MultipleDeviceTestCase):
|
||||
self.errors.append('Profile picture was not updated in 1-1 chat mentions list')
|
||||
one_to_one_chat_2.get_back_to_home_view()
|
||||
|
||||
profile_1.just_fyi('Send message to user to move it to online state')
|
||||
profile_1.home_button.double_click()
|
||||
one_to_one_chat_1 = home_1.get_chat(default_username_2).click()
|
||||
one_to_one_chat_1.send_message('hey')
|
||||
|
||||
profile_1.just_fyi('Check profile image is updated in Group chat view')
|
||||
profile_2 = one_to_one_chat_2.profile_button.click()
|
||||
profile_2.contacts_button.click()
|
||||
profile_2.element_by_text(default_username_1).click()
|
||||
profile_2.online_indicator.wait_for_visibility_of_element(180)
|
||||
if not profile_2.profile_picture.is_element_image_similar_to_template(logo_online):
|
||||
if not profile_2.profile_picture.is_element_image_similar_to_template('new_profile_online.png'):
|
||||
self.errors.append('Profile picture was not updated on user Profile view')
|
||||
profile_2.close_button.click()
|
||||
[home.home_button.click() for home in (profile_2, home_1)]
|
||||
@@ -648,8 +618,7 @@ class TestProfileMultipleDevice(MultipleDeviceTestCase):
|
||||
group_chat_1 = home_1.get_chat(group_chat_name).click()
|
||||
group_chat_1.join_chat_button.click()
|
||||
group_chat_1.send_message(group_chat_message)
|
||||
if not group_chat_2.chat_element_by_text(group_chat_message).member_photo.is_element_image_similar_to_template(
|
||||
logo_default):
|
||||
if not group_chat_2.chat_element_by_text(group_chat_message).member_photo.is_element_image_similar_to_template(logo_default):
|
||||
self.errors.append('User profile picture was not updated in message Group chat view')
|
||||
home_2.put_app_to_background()
|
||||
|
||||
|
||||
@@ -10,6 +10,7 @@ from support.utilities import get_merged_txs_list
|
||||
|
||||
|
||||
@pytest.mark.xdist_group(name="wallet_management_1")
|
||||
@marks.critical
|
||||
class TestWalletManagementDeviceMerged(MultipleSharedDeviceTestCase):
|
||||
|
||||
@classmethod
|
||||
@@ -27,7 +28,6 @@ class TestWalletManagementDeviceMerged(MultipleSharedDeviceTestCase):
|
||||
'STT': cls.wallet.get_asset_amount_by_name('STT')}
|
||||
|
||||
@marks.testrail_id(700756)
|
||||
@marks.critical
|
||||
def test_wallet_tx_history_copy_tx_hash_on_lte(self):
|
||||
self.wallet.accounts_status_account.click()
|
||||
address = wallet_users['D']['address']
|
||||
@@ -79,7 +79,6 @@ class TestWalletManagementDeviceMerged(MultipleSharedDeviceTestCase):
|
||||
self.errors.verify_no_errors()
|
||||
|
||||
@marks.testrail_id(700759)
|
||||
@marks.critical
|
||||
def test_wallet_add_account_generate_new(self):
|
||||
self.wallet.just_fyi("Switching off LTE mode and navigating to home view")
|
||||
self.wallet.driver.set_network_connection(6)
|
||||
@@ -117,7 +116,6 @@ class TestWalletManagementDeviceMerged(MultipleSharedDeviceTestCase):
|
||||
self.drivers[0].fail('Delete account option is shown on added account "On Status Tree"!')
|
||||
|
||||
@marks.testrail_id(700758)
|
||||
@marks.critical
|
||||
def test_wallet_manage_assets(self):
|
||||
asset = "HND"
|
||||
self.sign_in.just_fyi("Getting back to main wallet view")
|
||||
@@ -146,7 +144,6 @@ class TestWalletManagementDeviceMerged(MultipleSharedDeviceTestCase):
|
||||
self.errors.verify_no_errors()
|
||||
|
||||
@marks.testrail_id(700760)
|
||||
@marks.critical
|
||||
def test_wallet_add_delete_watch_only_account(self):
|
||||
self.wallet.get_back_to_home_view()
|
||||
self.wallet.accounts_status_account.swipe_left_on_element()
|
||||
@@ -195,7 +192,6 @@ class TestWalletManagementDeviceMerged(MultipleSharedDeviceTestCase):
|
||||
self.errors.verify_no_errors()
|
||||
|
||||
@marks.testrail_id(700761)
|
||||
@marks.critical
|
||||
def test_wallet_add_hide_unhide_account_private_key(self):
|
||||
self.wallet.get_back_to_home_view()
|
||||
if not self.wallet.add_account_button.is_element_displayed(3):
|
||||
@@ -256,7 +252,6 @@ class TestWalletManagementDeviceMerged(MultipleSharedDeviceTestCase):
|
||||
self.errors.verify_no_errors()
|
||||
|
||||
@marks.testrail_id(700762)
|
||||
@marks.critical
|
||||
@marks.skip
|
||||
# TODO: skipped due to #13016
|
||||
def test_wallet_add_account_seed_phrase_collectibles_mainnet_rinkeby(self):
|
||||
@@ -303,6 +298,7 @@ class TestWalletManagementDeviceMerged(MultipleSharedDeviceTestCase):
|
||||
self.wallet.accounts_status_account.swipe_left_on_element()
|
||||
account_button.click()
|
||||
self.wallet.collectibles_button.click()
|
||||
self.wallet.element_by_translation_id("display-collectibles").scroll_and_click()
|
||||
collectible_amount = self.wallet.get_collectibles_amount()
|
||||
collectible_amount.wait_for_visibility_of_element(30)
|
||||
if collectible_amount.text != '1':
|
||||
@@ -364,7 +360,6 @@ class TestWalletManagementDeviceMerged(MultipleSharedDeviceTestCase):
|
||||
self.errors.verify_no_errors()
|
||||
|
||||
@marks.testrail_id(700766)
|
||||
@marks.high
|
||||
def test_wallet_fetching_balance_after_offline_insufficient_funds_errors(self):
|
||||
self.sign_in.driver.reset()
|
||||
sender = wallet_users['E']
|
||||
|
||||
@@ -11,7 +11,7 @@ class TestCommandsMultipleDevices(MultipleDeviceTestCase):
|
||||
@marks.critical
|
||||
@marks.transaction
|
||||
def test_send_eth_in_1_1_chat_transaction_push(self):
|
||||
sender = transaction_senders['B']
|
||||
sender = transaction_senders['ETH_7']
|
||||
self.create_drivers(2)
|
||||
device_1, device_2 = SignInView(self.drivers[0]), SignInView(self.drivers[1])
|
||||
home_1 = device_1.recover_access(passphrase=sender['passphrase'], enable_notifications=True)
|
||||
@@ -99,7 +99,7 @@ class TestCommandsMultipleDevices(MultipleDeviceTestCase):
|
||||
@marks.critical
|
||||
@marks.transaction
|
||||
def test_request_and_receive_stt_in_1_1_chat_offline(self):
|
||||
sender = transaction_senders['L']
|
||||
sender = transaction_senders['ETH_STT_3']
|
||||
self.create_drivers(2)
|
||||
device_1, device_2 = SignInView(self.drivers[0]), SignInView(self.drivers[1])
|
||||
asset_name = 'STT'
|
||||
@@ -171,7 +171,7 @@ class TestCommandsMultipleDevices(MultipleDeviceTestCase):
|
||||
@marks.critical
|
||||
@marks.transaction
|
||||
def test_decline_transactions_in_1_1_chat_push_notification_changing_state(self):
|
||||
sender = transaction_senders['B']
|
||||
sender = transaction_senders['ETH_8']
|
||||
self.create_drivers(2)
|
||||
device_1, device_2 = SignInView(self.drivers[0]), SignInView(self.drivers[1])
|
||||
home_1 = device_1.recover_access(passphrase=sender['passphrase'], enable_notifications=True)
|
||||
@@ -222,7 +222,7 @@ class TestCommandsMultipleDevices(MultipleDeviceTestCase):
|
||||
@marks.medium
|
||||
@marks.transaction
|
||||
def test_network_mismatch_for_send_request_in_1_1_chat(self):
|
||||
sender = transaction_senders['D']
|
||||
sender = transaction_senders['ETH_1']
|
||||
self.create_drivers(2)
|
||||
sign_in_1, sign_in_2 = SignInView(self.drivers[0]), SignInView(self.drivers[1])
|
||||
sign_in_1.recover_access(passphrase=sender['passphrase'])
|
||||
@@ -273,7 +273,7 @@ class TestCommandsMultipleDevices(MultipleDeviceTestCase):
|
||||
def test_send_eth_to_ens_in_chat(self):
|
||||
self.create_drivers(2)
|
||||
sign_in_1, sign_in_2 = SignInView(self.drivers[0]), SignInView(self.drivers[1])
|
||||
sender, reciever = transaction_senders['E'], ens_user
|
||||
sender, reciever = transaction_senders['ETH_3'], ens_user
|
||||
home_1, home_2 = sign_in_1.recover_access(sender['passphrase']), sign_in_2.recover_access(
|
||||
reciever['passphrase'])
|
||||
|
||||
|
||||
@@ -1,11 +1,9 @@
|
||||
from tests import marks
|
||||
from tests.base_test_case import MultipleDeviceTestCase, SingleDeviceTestCase, MultipleSharedDeviceTestCase, create_shared_drivers
|
||||
from tests.users import transaction_senders, ens_user
|
||||
from tests.users import transaction_senders, ens_user, chat_users
|
||||
from views.sign_in_view import SignInView
|
||||
from views.chat_view import ChatView
|
||||
import random
|
||||
import emoji
|
||||
import pytest
|
||||
|
||||
|
||||
class TestGroupChatMultipleDevice(MultipleDeviceTestCase):
|
||||
@@ -253,21 +251,41 @@ class TestCommandsSingleDevices(SingleDeviceTestCase):
|
||||
def test_cant_add_more_twenty_participants_to_group_chat(self):
|
||||
sign_in = SignInView(self.driver)
|
||||
home = sign_in.create_user()
|
||||
users = [transaction_senders['A'], transaction_senders['B'], transaction_senders['C'], transaction_senders['D'],
|
||||
transaction_senders['E'], transaction_senders['F'], transaction_senders['G'], transaction_senders['H'],
|
||||
transaction_senders['I'], transaction_senders['K'], transaction_senders['L'], transaction_senders['M'],
|
||||
transaction_senders['N'], transaction_senders['O'], transaction_senders['P'], transaction_senders['Q'],
|
||||
transaction_senders['R'], transaction_senders['S'], transaction_senders['T'], transaction_senders['U'],
|
||||
]
|
||||
users = [chat_users['A'],
|
||||
chat_users['B'],
|
||||
transaction_senders['ETH_8'],
|
||||
transaction_senders['ETH_1'],
|
||||
transaction_senders['ETH_2'],
|
||||
transaction_senders['ETH_7'],
|
||||
transaction_senders['ETH_STT_3'],
|
||||
transaction_senders['ETH_STT_ADI_1'],
|
||||
transaction_senders['C'],
|
||||
transaction_senders['F'],
|
||||
transaction_senders['G'],
|
||||
transaction_senders['H'],
|
||||
transaction_senders['I'],
|
||||
transaction_senders['M'],
|
||||
transaction_senders['N'],
|
||||
transaction_senders['Q'],
|
||||
transaction_senders['R'],
|
||||
transaction_senders['S'],
|
||||
transaction_senders['T'],
|
||||
transaction_senders['U']]
|
||||
usernames = []
|
||||
|
||||
home.just_fyi('Add 20 users to contacts')
|
||||
profile = home.profile_button.click()
|
||||
profile.contacts_button.click()
|
||||
chat = home.get_chat_view()
|
||||
for user in users:
|
||||
home.add_contact(user['public_key'])
|
||||
profile.add_new_contact_button.click()
|
||||
chat.public_key_edit_box.click()
|
||||
chat.public_key_edit_box.set_value(user['public_key'])
|
||||
chat.confirm_until_presence_of_element(profile.add_new_contact_button)
|
||||
usernames.append(user['username'])
|
||||
home.get_back_to_home_view()
|
||||
|
||||
home.just_fyi('Create group chat with max amount of users')
|
||||
profile.home_button.click()
|
||||
chat = home.create_group_chat(usernames, 'some_group_chat')
|
||||
|
||||
home.just_fyi('Verify that can not add more users via group info')
|
||||
|
||||
@@ -12,7 +12,7 @@ class TestCommandsMultipleDevices(MultipleDeviceTestCase):
|
||||
@marks.critical
|
||||
@marks.transaction
|
||||
def test_keycard_send_eth_in_1_1_chat(self):
|
||||
sender = transaction_senders['E']
|
||||
sender = transaction_senders['ETH_2']
|
||||
self.create_drivers(2)
|
||||
device_1, device_2 = SignInView(self.drivers[0]), SignInView(self.drivers[1])
|
||||
home_1 = device_1.recover_access(passphrase=sender['passphrase'], keycard=True)
|
||||
@@ -82,7 +82,7 @@ class TestCommandsMultipleDevices(MultipleDeviceTestCase):
|
||||
@marks.medium
|
||||
@marks.transaction
|
||||
def test_keycard_request_and_receive_stt_in_1_1_chat_offline_opened_from_push(self):
|
||||
sender = transaction_senders['D']
|
||||
sender = transaction_senders['ETH_STT_1']
|
||||
self.create_drivers(2)
|
||||
device_1, device_2 = SignInView(self.drivers[0]), SignInView(self.drivers[1])
|
||||
|
||||
@@ -166,7 +166,7 @@ class TestCommandsSingleDevices(SingleDeviceTestCase):
|
||||
@marks.transaction
|
||||
def test_keycard_send_eth_to_ens(self):
|
||||
sign_in = SignInView(self.driver)
|
||||
sender = transaction_senders['E']
|
||||
sender = transaction_senders['ETH_4']
|
||||
home = sign_in.recover_access(sender['passphrase'], keycard=True)
|
||||
wallet = home.wallet_button.click()
|
||||
wallet.home_button.click()
|
||||
|
||||
@@ -1002,7 +1002,7 @@ class TestMessagesOneToOneChatSingle(SingleDeviceTestCase):
|
||||
@marks.testrail_id(6322)
|
||||
@marks.medium
|
||||
def test_can_scan_different_links_with_universal_qr_scanner(self):
|
||||
user = transaction_senders['L']
|
||||
user = transaction_senders['ETH_STT_3']
|
||||
home = SignInView(self.driver).recover_access(user['passphrase'])
|
||||
wallet = home.wallet_button.click()
|
||||
wallet.home_button.click()
|
||||
|
||||
@@ -4,7 +4,6 @@ from views.sign_in_view import SignInView
|
||||
|
||||
|
||||
class TestBrowsing(SingleDeviceTestCase):
|
||||
|
||||
@marks.testrail_id(5395)
|
||||
@marks.medium
|
||||
def test_back_forward_refresh_navigation_history_kept_after_relogin(self):
|
||||
@@ -39,7 +38,7 @@ class TestBrowsing(SingleDeviceTestCase):
|
||||
element_on_start_page = dapp.element_by_text('Select a token')
|
||||
web_page = dapp.open_url(url)
|
||||
dapp.allow_button.click()
|
||||
element_on_start_page.click()
|
||||
element_on_start_page.scroll_and_click()
|
||||
|
||||
# when bottom sheet is opened, elements by text couldn't be found
|
||||
element_on_start_page.wait_for_invisibility_of_element(20)
|
||||
@@ -48,142 +47,6 @@ class TestBrowsing(SingleDeviceTestCase):
|
||||
if not element_on_start_page.is_element_displayed(30):
|
||||
self.driver.fail("Page failed to be refreshed")
|
||||
|
||||
@marks.testrail_id(6210)
|
||||
@marks.high
|
||||
def test_open_blocked_secure_not_secure_inlalid_offline_urls(self):
|
||||
home = SignInView(self.driver).create_user()
|
||||
dapp = home.dapp_tab_button.click()
|
||||
for url in ('metamask.site', 'cryptokitties.domainname'):
|
||||
dapp.just_fyi('Checking blocked website %s' % url)
|
||||
dapp_detail = dapp.open_url(url)
|
||||
dapp_detail.element_by_translation_id('browsing-site-blocked-title')
|
||||
if dapp_detail.browser_refresh_page_button.is_element_displayed():
|
||||
self.errors.append("Refresh button is present in blocked site")
|
||||
dapp_detail.go_back_button.click()
|
||||
dapp_detail.open_tabs_button.click()
|
||||
dapp.element_by_text_part(url[:8]).click()
|
||||
dapp_detail.continue_anyway_button.click()
|
||||
if dapp_detail.element_by_text('This site is blocked').is_element_displayed():
|
||||
self.errors.append("Failed to open Dapp after 'Continue anyway' tapped for %s" % url)
|
||||
dapp_detail.open_tabs_button.click()
|
||||
dapp_detail.empty_tab_button.click()
|
||||
|
||||
dapp.just_fyi('Checking connection is not secure warning')
|
||||
web_page = dapp.open_url('http://www.dvwa.co.uk')
|
||||
web_page.url_edit_box_lock_icon.click_until_presence_of_element(
|
||||
web_page.element_by_translation_id("browser-not-secure"))
|
||||
dapp_detail.open_tabs_button.click()
|
||||
dapp_detail.empty_tab_button.click()
|
||||
|
||||
for url in ('https://www.bbc.com', 'https://instant.airswap.io'):
|
||||
dapp.just_fyi('Checking connection is secure for %s' % url)
|
||||
web_page = dapp.open_url(url)
|
||||
web_page.wait_for_d_aap_to_load()
|
||||
web_page.url_edit_box_lock_icon.click_until_presence_of_element(
|
||||
web_page.element_by_translation_id("browser-secure"))
|
||||
dapp_detail.open_tabs_button.click()
|
||||
dapp_detail.empty_tab_button.click()
|
||||
|
||||
dapp.just_fyi('Checking opening invalid link')
|
||||
# home.dapp_tab_button.double_click()
|
||||
browsing_view = dapp.open_url('invalid.takoe')
|
||||
browsing_view.element_by_translation_id("web-view-error").wait_for_element(20)
|
||||
browsing_view.dapp_tab_button.double_click()
|
||||
|
||||
dapp.just_fyi('Checking offline state')
|
||||
home.toggle_airplane_mode()
|
||||
dapp_detail.open_tabs_button.click()
|
||||
dapp_detail.empty_tab_button.click()
|
||||
browsing_view = dapp.open_url('status.im')
|
||||
offline_texts = ['Unable to load page', 'ERR_INTERNET_DISCONNECTED']
|
||||
for text in offline_texts:
|
||||
browsing_view.element_by_text_part(text).wait_for_element(15)
|
||||
home.toggle_airplane_mode()
|
||||
browsing_view.browser_refresh_page_button.click_until_presence_of_element(
|
||||
browsing_view.element_by_text_part('An Open Source Community'))
|
||||
|
||||
self.errors.verify_no_errors()
|
||||
|
||||
@marks.testrail_id(5390)
|
||||
@marks.high
|
||||
def test_delete_close_all_tabs(self):
|
||||
home_view = SignInView(self.driver).create_user()
|
||||
dapp_view = home_view.dapp_tab_button.click()
|
||||
urls = {
|
||||
'google.com': 'Google',
|
||||
'status.im': 'Status - Private',
|
||||
'bbc.com': 'bbc.com'
|
||||
}
|
||||
for url in urls:
|
||||
browsing_view = dapp_view.open_url(url)
|
||||
browsing_view.open_tabs_button.click()
|
||||
browsing_view.empty_tab_button.click()
|
||||
home_view.just_fyi('Close one tab, relogin and check that it is not reappearing')
|
||||
browsing_view.remove_tab(name=urls['bbc.com'])
|
||||
home_view.relogin()
|
||||
home_view.dapp_tab_button.click()
|
||||
browsing_view.open_tabs_button.click()
|
||||
if browsing_view.element_by_text_part(urls['bbc.com']).is_element_displayed():
|
||||
self.errors.append('Closed tab is present after re-login')
|
||||
|
||||
home_view.just_fyi('Close all tabs via "Close all", relogin and check that it is not reappearing')
|
||||
browsing_view.close_all_button.click()
|
||||
home_view.relogin()
|
||||
home_view.dapp_tab_button.click()
|
||||
browsing_view.open_tabs_button.click()
|
||||
for url in urls:
|
||||
if browsing_view.element_by_text_part(urls[url]).is_element_displayed():
|
||||
self.errors.append('Closed tab %s present after re-login after "Close all"' % url)
|
||||
|
||||
self.errors.verify_no_errors()
|
||||
|
||||
@marks.testrail_id(6633)
|
||||
@marks.high
|
||||
def test_browser_managing_bookmarks(self):
|
||||
home_view = SignInView(self.driver).create_user()
|
||||
dapp_view = home_view.dapp_tab_button.click()
|
||||
|
||||
home_view.just_fyi('Add some url to bookmarks with default name')
|
||||
browsing_view = dapp_view.open_url('status.im')
|
||||
default_bookmark_name = browsing_view.add_to_bookmarks()
|
||||
browsing_view.browser_previous_page_button.click()
|
||||
if not browsing_view.element_by_text(default_bookmark_name).is_element_displayed():
|
||||
self.errors.append("Bookmark with default name is not added!")
|
||||
|
||||
home_view.just_fyi('Add some url to bookmarks with custom name')
|
||||
custom_name = 'Custom BBC'
|
||||
dapp_view.open_url('bbc.com')
|
||||
browsing_view.add_to_bookmarks(custom_name)
|
||||
browsing_view.open_tabs_button.click()
|
||||
browsing_view.empty_tab_button.click()
|
||||
if not browsing_view.element_by_text(custom_name).is_element_displayed():
|
||||
self.driver.fail("Bookmark with custom name is not added!")
|
||||
|
||||
home_view.just_fyi('Check deleting bookmark on long tap and that it is deleted after relogin')
|
||||
dapp_view.browser_entry_long_press(custom_name)
|
||||
dapp_view.delete_bookmark_button.click()
|
||||
if browsing_view.element_by_text(custom_name).is_element_displayed():
|
||||
self.errors.append("Bookmark with custom name is not deleted!")
|
||||
profile_view = dapp_view.profile_button.click()
|
||||
profile_view.relogin()
|
||||
profile_view.dapp_tab_button.click()
|
||||
if browsing_view.element_by_text(custom_name).is_element_displayed():
|
||||
self.errors.append("Bookmark with custom name is reappeared after relogin!")
|
||||
|
||||
home_view.just_fyi('Check "Edit bookmark" and "Open in new tab"')
|
||||
edited_name = 'My Fav Status'
|
||||
dapp_view.browser_entry_long_press(default_bookmark_name)
|
||||
dapp_view.edit_bookmark_button.click()
|
||||
browsing_view.edit_bookmark_name(edited_name)
|
||||
if not browsing_view.element_by_text(edited_name).is_element_displayed():
|
||||
self.driver.fail("Edited bookmark name is not shown!")
|
||||
dapp_view.browser_entry_long_press(edited_name)
|
||||
dapp_view.open_in_new_tab_button.click()
|
||||
browsing_view.options_button.click()
|
||||
if not browsing_view.element_by_translation_id('remove-favourite').is_element_displayed():
|
||||
self.errors.append("Remove favourite is not shown on added bookmark!")
|
||||
self.errors.verify_no_errors()
|
||||
|
||||
@marks.testrail_id(5424)
|
||||
@marks.medium
|
||||
def test_open_url_with_non_english_text_connect_revoke_wallet_new_tab_open_chat_options(self):
|
||||
|
||||
@@ -8,7 +8,6 @@ from views.sign_in_view import SignInView
|
||||
|
||||
class TestDeepLinks(SingleDeviceTestCase):
|
||||
|
||||
|
||||
@marks.testrail_id(5441)
|
||||
@marks.medium
|
||||
def test_open_user_profile_using_deep_link(self):
|
||||
|
||||
+240
-41
@@ -6,14 +6,15 @@ import emoji
|
||||
import pytest
|
||||
from dateutil import parser
|
||||
|
||||
from tests import marks
|
||||
from tests.base_test_case import MultipleDeviceTestCase, SingleDeviceTestCase, create_shared_drivers, \
|
||||
from tests import marks, test_dapp_name, test_dapp_url
|
||||
from tests.base_test_case import MultipleDeviceTestCase, create_shared_drivers, \
|
||||
MultipleSharedDeviceTestCase
|
||||
from views.sign_in_view import SignInView
|
||||
from selenium.common.exceptions import NoSuchElementException
|
||||
|
||||
|
||||
@pytest.mark.xdist_group(name="public_chat_2")
|
||||
@marks.critical
|
||||
class TestPublicChatMultipleDeviceMerged(MultipleSharedDeviceTestCase):
|
||||
|
||||
@classmethod
|
||||
@@ -33,8 +34,7 @@ class TestPublicChatMultipleDeviceMerged(MultipleSharedDeviceTestCase):
|
||||
cls.chat_1.send_message(cls.text_message)
|
||||
|
||||
@marks.testrail_id(5313)
|
||||
@marks.critical
|
||||
def test_public_message_send_check_timestamps_while_on_different_tab(self):
|
||||
def test_public_chat_message_send_check_timestamps_while_on_different_tab(self):
|
||||
message = self.text_message
|
||||
self.chat_2.dapp_tab_button.click()
|
||||
sent_time_variants = self.chat_1.convert_device_time_to_chat_timestamp()
|
||||
@@ -49,8 +49,7 @@ class TestPublicChatMultipleDeviceMerged(MultipleSharedDeviceTestCase):
|
||||
self.errors.verify_no_errors()
|
||||
|
||||
@marks.testrail_id(700734)
|
||||
@marks.critical
|
||||
def test_public_message_edit(self):
|
||||
def test_public_chat_message_edit(self):
|
||||
message_before_edit, message_after_edit = self.text_message, "Message AFTER edit 2"
|
||||
self.chat_1.edit_message_in_chat(message_before_edit, message_after_edit)
|
||||
for chat in (self.chat_1, self.chat_2):
|
||||
@@ -61,8 +60,7 @@ class TestPublicChatMultipleDeviceMerged(MultipleSharedDeviceTestCase):
|
||||
self.errors.verify_no_errors()
|
||||
|
||||
@marks.testrail_id(700735)
|
||||
@marks.critical
|
||||
def test_public_message_delete(self):
|
||||
def test_public_chat_message_delete(self):
|
||||
message_to_delete = 'delete me, please'
|
||||
self.chat_1.send_message(message_to_delete)
|
||||
self.chat_1.delete_message_in_chat(message_to_delete)
|
||||
@@ -72,8 +70,7 @@ class TestPublicChatMultipleDeviceMerged(MultipleSharedDeviceTestCase):
|
||||
self.errors.verify_no_errors()
|
||||
|
||||
@marks.testrail_id(700719)
|
||||
@marks.critical
|
||||
def test_public_emoji_send_copy_paste_reply(self):
|
||||
def test_public_chat_emoji_send_copy_paste_reply(self):
|
||||
emoji_name = random.choice(list(emoji.EMOJI_UNICODE))
|
||||
emoji_unicode = emoji.EMOJI_UNICODE[emoji_name]
|
||||
emoji_message = emoji.emojize(emoji_name)
|
||||
@@ -100,8 +97,7 @@ class TestPublicChatMultipleDeviceMerged(MultipleSharedDeviceTestCase):
|
||||
self.errors.verify_no_errors()
|
||||
|
||||
@marks.testrail_id(5360)
|
||||
@marks.critical
|
||||
def test_public_unread_messages_counter(self):
|
||||
def test_public_chat_unread_messages_counter(self):
|
||||
self.chat_1.send_message('пиу')
|
||||
home_1 = self.chat_1.home_button.click()
|
||||
message = 'test message'
|
||||
@@ -114,8 +110,7 @@ class TestPublicChatMultipleDeviceMerged(MultipleSharedDeviceTestCase):
|
||||
self.errors.verify_no_errors()
|
||||
|
||||
@marks.testrail_id(700718)
|
||||
@marks.critical
|
||||
def test_public_unread_messages_counter_for_mentions_relogin(self):
|
||||
def test_public_chat_unread_messages_counter_for_mention_relogin(self):
|
||||
message = 'test message2'
|
||||
[chat.home_button.double_click() for chat in (self.chat_1, self.chat_2)]
|
||||
chat_element = self.home_1.get_chat('#' + self.public_chat_name)
|
||||
@@ -140,8 +135,7 @@ class TestPublicChatMultipleDeviceMerged(MultipleSharedDeviceTestCase):
|
||||
self.errors.verify_no_errors()
|
||||
|
||||
@marks.testrail_id(5319)
|
||||
@marks.critical
|
||||
def test_public_delete_chat_long_press(self):
|
||||
def test_public_chat_delete_chat_long_press(self):
|
||||
[chat.home_button.double_click() for chat in (self.chat_1, self.chat_2)]
|
||||
self.home_1.delete_chat_long_press('#%s' % self.pub_chat_delete_long_press)
|
||||
self.home_2.just_fyi("Send message to deleted chat")
|
||||
@@ -154,8 +148,7 @@ class TestPublicChatMultipleDeviceMerged(MultipleSharedDeviceTestCase):
|
||||
self.drivers[0].fail('Deleted public chat reappears after relogin')
|
||||
|
||||
@marks.testrail_id(700736)
|
||||
@marks.critical
|
||||
def test_public_link_send_open(self):
|
||||
def test_public_chat_link_send_open(self):
|
||||
[chat.home_button.double_click() for chat in (self.chat_1, self.chat_2)]
|
||||
[home.get_chat('#' + self.public_chat_name).click() for home in (self.home_1, self.home_2)]
|
||||
url_message = 'http://status.im'
|
||||
@@ -166,8 +159,7 @@ class TestPublicChatMultipleDeviceMerged(MultipleSharedDeviceTestCase):
|
||||
self.drivers[0].fail('URL was not opened from public chat')
|
||||
|
||||
@marks.testrail_id(700737)
|
||||
@marks.critical
|
||||
def test_public_links_with_previews_github_youtube_twitter_gif_send_enable(self):
|
||||
def test_public_chat_links_with_previews_github_youtube_twitter_gif_send_enable(self):
|
||||
[chat.home_button.double_click() for chat in (self.chat_1, self.chat_2)]
|
||||
[home.get_chat('#' + self.public_chat_name).click() for home in (self.home_1, self.home_2)]
|
||||
giphy_url = 'https://giphy.com/gifs/this-is-fine-QMHoU66sBXqqLqYvGO'
|
||||
@@ -210,8 +202,7 @@ class TestPublicChatMultipleDeviceMerged(MultipleSharedDeviceTestCase):
|
||||
self.errors.verify_no_errors()
|
||||
|
||||
@marks.testrail_id(6270)
|
||||
@marks.critical
|
||||
def test_public_mark_all_messages_as_read(self):
|
||||
def test_public_chat_mark_all_messages_as_read(self):
|
||||
[chat.home_button.double_click() for chat in (self.chat_1, self.chat_2)]
|
||||
self.home_2.get_chat('#' + self.public_chat_name).click()
|
||||
self.chat_2.send_message(self.text_message)
|
||||
@@ -231,8 +222,9 @@ class TestPublicChatMultipleDeviceMerged(MultipleSharedDeviceTestCase):
|
||||
self.errors.verify_no_errors()
|
||||
|
||||
|
||||
@pytest.mark.xdist_group(name="public_chat_1")
|
||||
class TestPublicChatOneDeviceMerged(MultipleSharedDeviceTestCase):
|
||||
@pytest.mark.xdist_group(name="public_chat_browser_1")
|
||||
@marks.critical
|
||||
class TestPublicChatBrowserOneDeviceMerged(MultipleSharedDeviceTestCase):
|
||||
|
||||
@classmethod
|
||||
def setup_class(cls):
|
||||
@@ -244,8 +236,7 @@ class TestPublicChatOneDeviceMerged(MultipleSharedDeviceTestCase):
|
||||
cls.chat = cls.home.join_public_chat(cls.public_chat_name)
|
||||
|
||||
@marks.testrail_id(5675)
|
||||
@marks.critical
|
||||
def test_public_fetch_more_history(self):
|
||||
def test_public_chat_fetch_more_history(self):
|
||||
self.home.just_fyi("Check that can fetch previous history for several days")
|
||||
device_time = parser.parse(self.drivers[0].device_time)
|
||||
yesterday = (device_time - timedelta(days=1)).strftime("%b %-d, %Y")
|
||||
@@ -287,8 +278,7 @@ class TestPublicChatOneDeviceMerged(MultipleSharedDeviceTestCase):
|
||||
self.errors.verify_no_errors()
|
||||
|
||||
@marks.testrail_id(5396)
|
||||
@marks.critical
|
||||
def test_public_navigate_to_chat_when_relaunch(self):
|
||||
def test_public_chat_navigate_to_chat_when_relaunch(self):
|
||||
text_message = 'some_text'
|
||||
self.home.home_button.double_click()
|
||||
self.home.get_chat('#%s' % self.public_chat_name).click()
|
||||
@@ -298,8 +288,7 @@ class TestPublicChatOneDeviceMerged(MultipleSharedDeviceTestCase):
|
||||
self.drivers[0].fail("Not navigated to chat view after reopening app")
|
||||
|
||||
@marks.testrail_id(700738)
|
||||
@marks.critical
|
||||
def test_public_tag_message(self):
|
||||
def test_public_chat_tag_message(self):
|
||||
tag_message = '#wuuut'
|
||||
self.home.home_button.double_click()
|
||||
self.home.get_chat('#%s' % self.public_chat_name).click()
|
||||
@@ -316,7 +305,6 @@ class TestPublicChatOneDeviceMerged(MultipleSharedDeviceTestCase):
|
||||
self.errors.verify_no_errors()
|
||||
|
||||
@marks.testrail_id(700739)
|
||||
@marks.critical
|
||||
def test_public_chat_open_using_deep_link(self):
|
||||
self.drivers[0].close_app()
|
||||
chat_name = self.home.get_random_chat_name()
|
||||
@@ -327,6 +315,164 @@ class TestPublicChatOneDeviceMerged(MultipleSharedDeviceTestCase):
|
||||
except (AssertionError, NoSuchElementException):
|
||||
self.driver.fail("Public chat '%s' is not opened" % chat_name)
|
||||
|
||||
@marks.testrail_id(702072)
|
||||
def test_browser_blocked_url(self):
|
||||
dapp = self.home.dapp_tab_button.click()
|
||||
for url in ('metamask.site', 'cryptokitties.domainname'):
|
||||
dapp.just_fyi('Checking blocked website %s' % url)
|
||||
dapp_detail = dapp.open_url(url)
|
||||
dapp_detail.element_by_translation_id('browsing-site-blocked-title')
|
||||
if dapp_detail.browser_refresh_page_button.is_element_displayed():
|
||||
self.errors.append("Refresh button is present in blocked site")
|
||||
dapp_detail.go_back_button.click()
|
||||
dapp_detail.open_tabs_button.click()
|
||||
dapp.element_by_text_part(url[:8]).click()
|
||||
dapp_detail.continue_anyway_button.click()
|
||||
if dapp_detail.element_by_text('This site is blocked').is_element_displayed():
|
||||
self.errors.append("Failed to open Dapp after 'Continue anyway' tapped for %s" % url)
|
||||
dapp_detail.open_tabs_button.click()
|
||||
dapp_detail.empty_tab_button.click()
|
||||
self.errors.verify_no_errors()
|
||||
|
||||
@marks.testrail_id(702073)
|
||||
def test_browser_connection_is_secure_not_secure_warning(self):
|
||||
dapp = self.home.dapp_tab_button.click()
|
||||
web_page = dapp.open_url('http://www.dvwa.co.uk')
|
||||
web_page.url_edit_box_lock_icon.click_until_presence_of_element(
|
||||
web_page.element_by_translation_id("browser-not-secure"))
|
||||
web_page.open_tabs_button.click()
|
||||
web_page.empty_tab_button.click()
|
||||
dapp.just_fyi('Checking connection is secure for Airswap')
|
||||
web_page = dapp.open_url('https://instant.airswap.io')
|
||||
web_page.wait_for_d_aap_to_load()
|
||||
web_page.url_edit_box_lock_icon.click_until_presence_of_element(
|
||||
web_page.element_by_translation_id("browser-secure"))
|
||||
web_page.open_tabs_button.click()
|
||||
web_page.empty_tab_button.click()
|
||||
|
||||
@marks.testrail_id(702074)
|
||||
def test_browser_invalid_url(self):
|
||||
dapp = self.home.dapp_tab_button.click()
|
||||
browsing_view = dapp.open_url('invalid.takoe')
|
||||
browsing_view.element_by_translation_id("web-view-error").wait_for_element(20)
|
||||
|
||||
@marks.testrail_id(702075)
|
||||
def test_browser_offline(self):
|
||||
dapp = self.home.dapp_tab_button.click()
|
||||
self.home.toggle_airplane_mode()
|
||||
browsing_view = dapp.open_url('status.im')
|
||||
offline_texts = ['Unable to load page', 'ERR_INTERNET_DISCONNECTED']
|
||||
for text in offline_texts:
|
||||
browsing_view.element_by_text_part(text).wait_for_element(15)
|
||||
self.home.toggle_airplane_mode()
|
||||
browsing_view.browser_refresh_page_button.click_until_presence_of_element(
|
||||
browsing_view.element_by_text_part('An Open Source Community'))
|
||||
|
||||
@marks.testrail_id(702076)
|
||||
def test_browser_delete_close_tabs(self):
|
||||
dapp = self.home.dapp_tab_button.click()
|
||||
urls = {
|
||||
'google.com': 'Google',
|
||||
'status.im': 'Status - Private',
|
||||
'bbc.com': 'bbc.com'
|
||||
}
|
||||
for url in urls:
|
||||
web_page = dapp.open_url(url)
|
||||
web_page.open_tabs_button.click()
|
||||
web_page.empty_tab_button.click()
|
||||
|
||||
self.home.just_fyi('Delete one tab')
|
||||
web_page.remove_tab(name=urls['bbc.com'])
|
||||
if web_page.element_by_text_part(urls['bbc.com']).is_element_displayed():
|
||||
self.errors.append('Closed tab is present after deletion')
|
||||
|
||||
self.home.just_fyi('Close all tabs via "Close all", relogin and check that it is not reappearing')
|
||||
web_page.close_all_button.click()
|
||||
self.home.reopen_app()
|
||||
web_page.dapp_tab_button.click()
|
||||
web_page.open_tabs_button.click()
|
||||
if web_page.element_by_text_part(urls['status.im']).is_element_displayed():
|
||||
self.errors.append('Tabs are not closed or reappeared after re-login!')
|
||||
|
||||
self.errors.verify_no_errors()
|
||||
|
||||
@marks.testrail_id(702077)
|
||||
def test_browser_bookmarks_create_edit_remove(self):
|
||||
dapp = self.home.dapp_tab_button.click()
|
||||
|
||||
self.home.just_fyi('Add some url to bookmarks with default name')
|
||||
web_page = dapp.open_url('status.im')
|
||||
default_bookmark_name = web_page.add_to_bookmarks()
|
||||
web_page.browser_previous_page_button.click()
|
||||
if not web_page.element_by_text(default_bookmark_name).is_element_displayed():
|
||||
self.errors.append("Bookmark with default name is not added!")
|
||||
|
||||
self.home.just_fyi('Add some url to bookmarks with custom name')
|
||||
custom_name = 'Custom BBC'
|
||||
dapp.open_url('bbc.com')
|
||||
web_page.add_to_bookmarks(custom_name)
|
||||
web_page.open_tabs_button.click()
|
||||
web_page.empty_tab_button.click()
|
||||
if not web_page.element_by_text(custom_name).is_element_displayed():
|
||||
self.driver.fail("Bookmark with custom name is not added!")
|
||||
|
||||
self.home.just_fyi('Checking "Open in new tab"')
|
||||
dapp.browser_entry_long_press(custom_name)
|
||||
dapp.open_in_new_tab_button.click()
|
||||
web_page.options_button.click()
|
||||
if not web_page.element_by_translation_id('remove-favourite').is_element_displayed():
|
||||
self.errors.append("Remove favourite is not shown on added bookmark!")
|
||||
dapp.click_system_back_button()
|
||||
|
||||
self.home.just_fyi('Check deleting bookmark')
|
||||
web_page.open_tabs_button.click()
|
||||
web_page.empty_tab_button.click()
|
||||
dapp.browser_entry_long_press(custom_name)
|
||||
dapp.delete_bookmark_button.click()
|
||||
if web_page.element_by_text(custom_name).is_element_displayed():
|
||||
self.errors.append("Bookmark with custom name is not deleted!")
|
||||
|
||||
self.home.just_fyi('Check "Edit bookmark" and "Open in new tab"')
|
||||
edited_name = 'My Fav Status'
|
||||
dapp.browser_entry_long_press(default_bookmark_name)
|
||||
dapp.edit_bookmark_button.click()
|
||||
web_page.edit_bookmark_name(edited_name)
|
||||
if not web_page.element_by_text(edited_name).is_element_displayed():
|
||||
self.driver.fail("Edited bookmark name is not shown!")
|
||||
|
||||
self.errors.verify_no_errors()
|
||||
|
||||
@marks.testrail_id(702078)
|
||||
def test_browser_web3_permissions_testdapp(self):
|
||||
self.home.home_button.double_click()
|
||||
|
||||
self.home.just_fyi('open Status Test Dapp, allow all and check permissions in Profile')
|
||||
web_view = self.home.open_status_test_dapp()
|
||||
dapp = self.home.dapp_tab_button.click()
|
||||
profile = self.home.profile_button.click()
|
||||
profile.privacy_and_security_button.click()
|
||||
profile.dapp_permissions_button.click()
|
||||
profile.element_by_text(test_dapp_name).click()
|
||||
if not profile.element_by_text(self.home.status_account_name).is_element_displayed():
|
||||
self.errors.append('Wallet permission was not granted')
|
||||
if not profile.element_by_translation_id("chat-key").is_element_displayed():
|
||||
self.errors.append('Contact code permission was not granted')
|
||||
|
||||
profile.just_fyi('revoke access and check that they are asked second time')
|
||||
profile.revoke_access_button.click()
|
||||
profile.back_button.click()
|
||||
profile.dapp_tab_button.click()
|
||||
web_view.open_tabs_button.click()
|
||||
web_view.empty_tab_button.click()
|
||||
dapp.open_url(test_dapp_url)
|
||||
if not dapp.element_by_text_part(self.home.status_account_name).is_element_displayed():
|
||||
self.errors.append('Wallet permission is not asked')
|
||||
if dapp.allow_button.is_element_displayed():
|
||||
dapp.allow_button.click(times_to_click=1)
|
||||
if not dapp.element_by_translation_id("your-contact-code").is_element_displayed():
|
||||
self.errors.append('Profile permission is not asked')
|
||||
self.errors.verify_no_errors()
|
||||
|
||||
|
||||
class TestPublicChatMultipleDevice(MultipleDeviceTestCase):
|
||||
|
||||
@@ -436,23 +582,76 @@ class TestPublicChatMultipleDevice(MultipleDeviceTestCase):
|
||||
|
||||
@marks.testrail_id(700727)
|
||||
@marks.medium
|
||||
def test_gap_in_public_chat(self):
|
||||
def test_gap_in_public_chat_and_no_gap_in_1_1_and_group_chats(self):
|
||||
self.create_drivers(2)
|
||||
device_1, device_2 = SignInView(self.drivers[0]), SignInView(self.drivers[1])
|
||||
home_1, home_2 = device_1.create_user(), device_2.create_user()
|
||||
message = "testing gap"
|
||||
chat_name = home_1.get_random_chat_name()
|
||||
message_1 = "testing gap"
|
||||
message_2 = "testing no gap"
|
||||
pub_chat_name = home_1.get_random_chat_name()
|
||||
group_chat_name = home_1.get_random_chat_name()
|
||||
public_key_1, username_1 = home_1.get_public_key_and_username(True)
|
||||
public_key_2, username_2 = home_2.get_public_key_and_username(True)
|
||||
profile_1 = home_1.profile_button.click()
|
||||
profile_1.sync_settings_button.click()
|
||||
profile_1.sync_history_for_button.click()
|
||||
profile_1.element_by_translation_id("two-minutes").click()
|
||||
home_1.home_button.click()
|
||||
chat_1, chat_2 = home_1.join_public_chat(chat_name), home_2.join_public_chat(chat_name)
|
||||
chat_1.send_message("HI")
|
||||
[home.home_button.click() for home in (home_1, home_2)]
|
||||
|
||||
home_1.just_fyi("Creating 1-1 chat and sending message from device 1")
|
||||
one_to_one_chat_1 = home_1.add_contact(public_key_2)
|
||||
one_to_one_chat_1.send_message("HI")
|
||||
home_1.get_back_to_home_view()
|
||||
|
||||
home_1.just_fyi("Creating group chat and sending message from device 1")
|
||||
group_chat_1 = home_1.create_group_chat([username_2], group_chat_name)
|
||||
group_chat_1.send_message("HI")
|
||||
home_1.get_back_to_home_view()
|
||||
|
||||
home_1.just_fyi("Creating public chat and sending message from device 1")
|
||||
pub_chat_1, pub_chat_2 = home_1.join_public_chat(pub_chat_name), home_2.join_public_chat(pub_chat_name)
|
||||
pub_chat_1.send_message("HI")
|
||||
device_1.toggle_airplane_mode()
|
||||
chat_2.send_message(message)
|
||||
|
||||
home_2.just_fyi("Joining public chat by device 2 and sending message")
|
||||
pub_chat_2.send_message(message_1)
|
||||
home_2.get_back_to_home_view()
|
||||
|
||||
home_2.just_fyi("Joining 1-1 chat by device 2 and sending message")
|
||||
# one_to_one_chat_element = home_2.get_chat(username_1, wait_time=10)
|
||||
# one_to_one_chat_2 = one_to_one_chat_element.click()
|
||||
one_to_one_chat_2 = home_2.add_contact(public_key_1)
|
||||
one_to_one_chat_2.send_message(message_2)
|
||||
home_2.get_back_to_home_view()
|
||||
|
||||
home_2.just_fyi("Joining Group chat by device 2 and sending message")
|
||||
# home_2.notifications_button.click()
|
||||
# group_chat_2 = home_2.get_chat_from_activity_center_view(group_chat_name).click()
|
||||
group_chat_2 = home_2.get_chat(group_chat_name).click()
|
||||
group_chat_2.join_chat_button.click()
|
||||
group_chat_2.send_message(message_2)
|
||||
|
||||
# Waiting for 3 minutes and then going back online
|
||||
sleep(180)
|
||||
device_1.toggle_airplane_mode()
|
||||
chat_1.element_by_translation_id("fetch-messages").wait_and_click(60)
|
||||
if not chat_1.chat_element_by_text(message).is_element_displayed():
|
||||
device_1.driver.fail("Test message has not been fetched")
|
||||
|
||||
home_1.just_fyi("Checking gap in public chat and fetching messages")
|
||||
if pub_chat_1.chat_element_by_text(message_1).is_element_displayed(10):
|
||||
self.errors.append("Test message has been fetched automatically")
|
||||
pub_chat_1.element_by_translation_id("fetch-messages").wait_and_click(60)
|
||||
if not pub_chat_1.chat_element_by_text(message_1).is_element_displayed(10):
|
||||
self.errors.append("Test message has not been fetched")
|
||||
home_1.get_back_to_home_view()
|
||||
|
||||
home_1.just_fyi("Checking that there is no gap in 1-1/group chat and messages fetched automatically")
|
||||
for chat in [home_1.get_chat(username_2), home_1.get_chat(group_chat_name)]:
|
||||
chat_view = chat.click()
|
||||
if chat_view.element_by_translation_id("fetch-messages").is_element_displayed(10):
|
||||
self.errors.append("Fetch messages button is displayed in {}} chat".format(chat.user_name_text.text))
|
||||
if not chat_view.chat_element_by_text(message_2).is_element_displayed(10):
|
||||
self.errors.append("Message in {} chat has not been fetched automatically".format(chat.user_name_text.text))
|
||||
chat_view.back_button.click()
|
||||
self.errors.verify_no_errors()
|
||||
|
||||
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
from tests import marks, pytest_config_global, test_dapp_name, staging_fleet, mailserver_hk, mailserver_ams, \
|
||||
mailserver_gc
|
||||
from tests.base_test_case import SingleDeviceTestCase, MultipleDeviceTestCase
|
||||
from tests.users import upgrade_users, transaction_recipients, basic_user, ens_user
|
||||
from tests.users import upgrade_users, transaction_recipients, basic_user, ens_user, transaction_senders
|
||||
from views.sign_in_view import SignInView
|
||||
import views.upgrade_dbs.chats.data as chat_data
|
||||
import views.upgrade_dbs.dapps.data as dapp_data
|
||||
@@ -209,7 +209,7 @@ class TestUpgradeApplication(SingleDeviceTestCase):
|
||||
|
||||
@marks.testrail_id(695810)
|
||||
def test_keycard_upgrade(self):
|
||||
user = basic_user
|
||||
user = transaction_senders['ETH_STT_ADI_1']
|
||||
sign_in = SignInView(self.driver)
|
||||
home = sign_in.recover_access(passphrase=user['passphrase'], keycard=True)
|
||||
wallet = home.wallet_button.click()
|
||||
@@ -226,7 +226,7 @@ class TestUpgradeApplication(SingleDeviceTestCase):
|
||||
home.just_fyi('Check that can sign transaction in STT from wallet')
|
||||
transaction_amount = wallet.get_unique_amount()
|
||||
wallet.send_transaction(amount=transaction_amount, asset_name='STT', sign_transaction=True, keycard=True,
|
||||
recipient=transaction_recipients['I']['address'])
|
||||
recipient=transaction_senders['ETH_STT_1']['address'])
|
||||
self.network_api.find_transaction_by_unique_amount(user['address'], transaction_amount, token=True)
|
||||
|
||||
wallet.just_fyi('Check that transaction is appeared in transaction history')
|
||||
|
||||
@@ -1,127 +0,0 @@
|
||||
from tests import marks, unique_password, common_password
|
||||
from tests.base_test_case import SingleDeviceTestCase
|
||||
from tests.users import transaction_senders
|
||||
from views.sign_in_view import SignInView
|
||||
|
||||
|
||||
class TestTransactionDApp(SingleDeviceTestCase):
|
||||
|
||||
@marks.testrail_id(5309)
|
||||
@marks.critical
|
||||
@marks.transaction
|
||||
def test_request_stt_from_dapp(self):
|
||||
sender = transaction_senders['K']
|
||||
home = SignInView(self.driver).recover_access(sender['passphrase'], unique_password)
|
||||
wallet = home.wallet_button.click()
|
||||
wallet.scan_tokens()
|
||||
initial_amount_stt = wallet.get_asset_amount_by_name('STT')
|
||||
status_test_dapp = home.open_status_test_dapp()
|
||||
status_test_dapp.wait_for_d_aap_to_load()
|
||||
status_test_dapp.assets_button.click()
|
||||
status_test_dapp.request_stt_button.wait_for_element(60)
|
||||
send_transaction = status_test_dapp.request_stt_button.click()
|
||||
if not send_transaction.onboarding_message.is_element_displayed(30):
|
||||
self.driver.fail('It seems onboarding screen is not shown.')
|
||||
home.ok_got_it_button.click()
|
||||
home.cancel_button.click()
|
||||
send_transaction = status_test_dapp.request_stt_button.click()
|
||||
send_transaction.sign_transaction(unique_password)
|
||||
status_test_dapp.wallet_button.click()
|
||||
|
||||
send_transaction.just_fyi('Verify that wallet balance is updated')
|
||||
wallet.wait_balance_is_changed('STT', initial_amount_stt, scan_tokens=True)
|
||||
|
||||
send_transaction.just_fyi('Check logcat for sensitive data')
|
||||
values_in_logcat = send_transaction.find_values_in_logcat(password=unique_password)
|
||||
if values_in_logcat:
|
||||
self.driver.fail(values_in_logcat)
|
||||
|
||||
@marks.testrail_id(5342)
|
||||
@marks.critical
|
||||
@marks.transaction
|
||||
def test_sign_message_and_2tx_in_batch_and_transactions_filters_from_daap(self):
|
||||
password = 'password_for_daap'
|
||||
home = SignInView(self.driver).recover_access(passphrase=transaction_senders['W']['passphrase'],
|
||||
password=password)
|
||||
wallet = home.wallet_button.click()
|
||||
|
||||
status_test_dapp = home.open_status_test_dapp()
|
||||
status_test_dapp.wait_for_d_aap_to_load()
|
||||
status_test_dapp.transactions_button.click()
|
||||
|
||||
wallet.just_fyi("Checking signing message")
|
||||
send_transaction = status_test_dapp.sign_message_button.click()
|
||||
status_test_dapp.set_up_wallet_when_sending_tx()
|
||||
if not send_transaction.element_by_text("Test message").is_element_displayed():
|
||||
self.errors.append("No message shown when signing!")
|
||||
send_transaction.enter_password_input.send_keys(password)
|
||||
send_transaction.sign_button.click()
|
||||
if not status_test_dapp.element_by_text_part('Signed message').is_element_displayed():
|
||||
self.errors.append('Message was not signed')
|
||||
send_transaction.just_fyi('Check logcat for sensitive data')
|
||||
values_in_logcat = send_transaction.find_values_in_logcat(password=password)
|
||||
if values_in_logcat:
|
||||
self.errors.append("When signing message from dapp: %s" % values_in_logcat)
|
||||
|
||||
wallet.just_fyi("Checking send 2 txs in batch")
|
||||
status_test_dapp.send_two_tx_in_batch_button.scroll_to_element()
|
||||
send_transaction = status_test_dapp.send_two_tx_in_batch_button.click()
|
||||
send_transaction.sign_transaction(password)
|
||||
if not send_transaction.sign_with_password.is_element_displayed(10):
|
||||
self.driver.fail('Second send transaction screen did not appear!')
|
||||
send_transaction.sign_transaction(password)
|
||||
|
||||
wallet.just_fyi("Checking send 2 txs one after another")
|
||||
status_test_dapp.send_two_tx_one_by_one_button.scroll_to_element()
|
||||
send_transaction = status_test_dapp.send_two_tx_one_by_one_button.click()
|
||||
send_transaction.sign_transaction(password)
|
||||
if not send_transaction.sign_with_password.is_element_displayed(20):
|
||||
self.driver.fail('Second send transaction screen did not appear!')
|
||||
send_transaction.sign_transaction(password)
|
||||
|
||||
wallet.just_fyi("Checking test filters")
|
||||
status_test_dapp.test_filters_button.scroll_and_click()
|
||||
for element in status_test_dapp.element_by_text('eth_uninstallFilter'), status_test_dapp.ok_button:
|
||||
if element.is_element_displayed(10):
|
||||
self.driver.fail("'Test filters' button produced an error")
|
||||
self.errors.verify_no_errors()
|
||||
|
||||
@marks.testrail_id(5784)
|
||||
@marks.medium
|
||||
@marks.transaction
|
||||
def test_sign_typed_message_deploy_simple_contract_request_pub_key_from_dapp(self):
|
||||
user = transaction_senders['W']
|
||||
home = SignInView(self.driver).recover_access(passphrase=user['passphrase'])
|
||||
|
||||
home.just_fyi("Checking requesting public key from dapp")
|
||||
status_test_dapp = home.open_status_test_dapp(allow_all=False)
|
||||
status_test_dapp.status_api_button.click_until_presence_of_element(status_test_dapp.request_contact_code_button)
|
||||
status_test_dapp.request_contact_code_button.click_until_presence_of_element(status_test_dapp.deny_button)
|
||||
status_test_dapp.deny_button.click()
|
||||
if status_test_dapp.element_by_text(user['public_key']).is_element_displayed():
|
||||
self.errors.append('Public key is returned but access was not allowed')
|
||||
status_test_dapp.request_contact_code_button.click_until_presence_of_element(status_test_dapp.deny_button)
|
||||
status_test_dapp.allow_button.click()
|
||||
if not status_test_dapp.element_by_text(user['public_key']).is_element_displayed():
|
||||
self.errors.append('Public key is not returned')
|
||||
status_test_dapp.get_empty_dapp_tab()
|
||||
home.wallet_button.click()
|
||||
|
||||
home.just_fyi("Checking sign typed message")
|
||||
home.open_status_test_dapp(allow_all=True)
|
||||
status_test_dapp.transactions_button.click_until_presence_of_element(status_test_dapp.sign_typed_message_button)
|
||||
send_transaction = status_test_dapp.sign_typed_message_button.click()
|
||||
send_transaction.enter_password_input.send_keys(common_password)
|
||||
send_transaction.sign_button.click_until_absense_of_element(send_transaction.sign_button)
|
||||
if not status_test_dapp.element_by_text_part('0xde3048417e5881acc9ca8466ab0b3e2f9f96').is_element_displayed(30):
|
||||
self.errors.append("Hash of signed typed message is not shown!")
|
||||
|
||||
home.just_fyi("Checking deploy simple contract")
|
||||
send_transaction = status_test_dapp.deploy_contract_button.click()
|
||||
send_transaction.sign_transaction()
|
||||
if not status_test_dapp.element_by_text('Contract deployed at: ').is_element_displayed(180):
|
||||
self.errors.append('Contract was not created')
|
||||
for text in ['Call contract get function',
|
||||
'Call contract set function', 'Call function 2 times in a row']:
|
||||
status_test_dapp.element_by_text(text).scroll_to_element()
|
||||
self.errors.verify_no_errors()
|
||||
@@ -7,11 +7,12 @@ from views.sign_in_view import SignInView
|
||||
|
||||
|
||||
@pytest.mark.xdist_group(name="keycard_tx_1")
|
||||
@marks.critical
|
||||
class TestKeycardTxOneDeviceMerged(MultipleSharedDeviceTestCase):
|
||||
@classmethod
|
||||
def setup_class(cls):
|
||||
cls.user = transaction_senders['P']
|
||||
cls.address = '0x%s' % basic_user['address']
|
||||
cls.user = transaction_senders['ETH_STT_ADI_1']
|
||||
cls.address = '0x%s' % transaction_senders['ETH_7']['address']
|
||||
cls.drivers, cls.loop = create_shared_drivers(1)
|
||||
cls.sign_in = SignInView(cls.drivers[0])
|
||||
|
||||
@@ -24,7 +25,6 @@ class TestKeycardTxOneDeviceMerged(MultipleSharedDeviceTestCase):
|
||||
cls.initial_balances[asset] = cls.wallet.get_asset_amount_by_name(asset)
|
||||
|
||||
@marks.testrail_id(700767)
|
||||
@marks.critical
|
||||
def test_keycard_send_tx_eth(self):
|
||||
wallet = self.home.wallet_button.click()
|
||||
transaction_amount = wallet.get_unique_amount()
|
||||
@@ -39,7 +39,6 @@ class TestKeycardTxOneDeviceMerged(MultipleSharedDeviceTestCase):
|
||||
self.wallet.wait_balance_is_changed('ETH', initial_balance=self.initial_balances['ETH'])
|
||||
|
||||
@marks.testrail_id(700768)
|
||||
@marks.critical
|
||||
def test_keycard_relogin_after_restore(self):
|
||||
self.sign_in.just_fyi('Check that username and public key match expected')
|
||||
public_key, default_username = self.sign_in.get_public_key_and_username(return_username=True)
|
||||
@@ -58,7 +57,6 @@ class TestKeycardTxOneDeviceMerged(MultipleSharedDeviceTestCase):
|
||||
self.errors.verify_no_errors()
|
||||
|
||||
@marks.testrail_id(700769)
|
||||
@marks.critical
|
||||
@marks.transaction
|
||||
def test_keycard_send_tx_sign_message_request_stt_testdapp(self):
|
||||
self.home.home_button.double_click()
|
||||
@@ -107,7 +105,6 @@ class TestKeycardTxOneDeviceMerged(MultipleSharedDeviceTestCase):
|
||||
self.errors.verify_no_errors()
|
||||
|
||||
@marks.testrail_id(700770)
|
||||
@marks.critical
|
||||
def test_keycard_wallet_recover_pairing_check_balance_after_offline_tx_history(self):
|
||||
user = transaction_senders['A']
|
||||
self.sign_in.toggle_airplane_mode()
|
||||
@@ -156,6 +153,73 @@ class TestKeycardTxOneDeviceMerged(MultipleSharedDeviceTestCase):
|
||||
transactions_details.close_button.click()
|
||||
self.errors.verify_no_errors()
|
||||
|
||||
@marks.testrail_id(5689)
|
||||
def test_keycard_create_account_unlock_same_seed(self):
|
||||
self.sign_in.driver.reset()
|
||||
self.sign_in.just_fyi("Create keycard account and save seed phrase")
|
||||
self.sign_in.accept_tos_checkbox.enable()
|
||||
self.sign_in.get_started_button.click()
|
||||
self.sign_in.generate_key_button.click_until_presence_of_element(self.sign_in.next_button)
|
||||
self.sign_in.next_button.click_until_absense_of_element(self.sign_in.element_by_translation_id("intro-wizard-title2"))
|
||||
keycard_flow = self.sign_in.keycard_storage_button.click()
|
||||
keycard_flow.confirm_pin_and_proceed()
|
||||
seed_phrase = keycard_flow.backup_seed_phrase()
|
||||
self.sign_in.maybe_later_button.wait_for_visibility_of_element(30)
|
||||
self.sign_in.maybe_later_button.click_until_presence_of_element(self.sign_in.lets_go_button)
|
||||
self.sign_in.lets_go_button.click_until_absense_of_element(self.sign_in.lets_go_button)
|
||||
self.sign_in.profile_button.wait_for_visibility_of_element(30)
|
||||
|
||||
self.sign_in.just_fyi('Check that after creating keycard account balance is 0, not ...')
|
||||
wallet_1 = self.sign_in.wallet_button.click()
|
||||
wallet_address = wallet_1.get_wallet_address()
|
||||
wallet_1.wallet_button.double_click()
|
||||
if wallet_1.status_account_total_usd_value.text != '0':
|
||||
self.errors.append("Account USD value is not 0, it is %s" % wallet_1.status_account_total_usd_value.text)
|
||||
public_key, default_username = self.sign_in.get_public_key_and_username(return_username=True)
|
||||
profile_1 = self.sign_in.get_profile_view()
|
||||
profile_1.logout()
|
||||
|
||||
profile_1.just_fyi('Check that can re-login with keycard account after account creation')
|
||||
self.sign_in.multi_account_on_login_button.wait_for_visibility_of_element(5)
|
||||
self.sign_in.multi_account_on_login_button.click()
|
||||
if not keycard_flow.element_by_text_part(default_username).is_element_displayed():
|
||||
self.errors.append("%s is not found on keycard login screen!" % default_username)
|
||||
keycard_flow.enter_default_pin()
|
||||
if not self.sign_in.home_button.is_element_displayed(10):
|
||||
self.errors.append('Keycard user is not logged in')
|
||||
|
||||
self.sign_in.just_fyi('Unlock keycard multiaccount at attempt to restore same multiaccount from seed')
|
||||
self.sign_in.profile_button.click()
|
||||
profile_1.logout()
|
||||
self.sign_in.access_key_button.click()
|
||||
self.sign_in.enter_seed_phrase_button.click()
|
||||
self.sign_in.seedphrase_input.click()
|
||||
self.sign_in.seedphrase_input.set_value(seed_phrase)
|
||||
self.sign_in.next_button.click()
|
||||
self.sign_in.element_by_translation_id("unlock", uppercase=True).click()
|
||||
keycard_flow.enter_default_pin()
|
||||
device_1_home = self.sign_in.home_button.click()
|
||||
device_1_home.plus_button.click()
|
||||
if not device_1_home.start_new_chat_button.is_element_displayed():
|
||||
self.errors.append("Can't proceed using account after it's re-recover twice.")
|
||||
|
||||
self.sign_in.just_fyi("Restore same multiaccount from backed up seed phrase on another device")
|
||||
self.sign_in.driver.reset()
|
||||
self.sign_in.recover_access(seed_phrase)
|
||||
|
||||
self.sign_in.just_fyi("Check username and wallet address on restored account")
|
||||
wallet_2 = self.sign_in.wallet_button.click()
|
||||
wallet_address_2 = wallet_2.get_wallet_address()
|
||||
wallet_2.wallet_button.double_click()
|
||||
if wallet_address != wallet_address_2:
|
||||
self.errors.append('Wallet address on restored multiaccount is not equal to created keycard multiaccount')
|
||||
public_key_2, default_username_2 = self.sign_in.get_public_key_and_username(return_username=True)
|
||||
if public_key != public_key_2:
|
||||
self.errors.append('Public key on restored multiaccount is not equal to created keycard multiaccount')
|
||||
if default_username_2 != default_username:
|
||||
self.errors.append('Username on restored multiaccount is not equal to created keycard multiaccount')
|
||||
self.errors.verify_no_errors()
|
||||
|
||||
|
||||
class TestTransactionWalletSingleDevice(SingleDeviceTestCase):
|
||||
|
||||
@@ -251,7 +315,7 @@ class TestTransactionWalletSingleDevice(SingleDeviceTestCase):
|
||||
@marks.medium
|
||||
@marks.transaction
|
||||
def test_keycard_sign_typed_message_deploy_simple_contract(self):
|
||||
sender = transaction_senders['W']
|
||||
sender = transaction_senders['ETH_6']
|
||||
home = SignInView(self.driver).recover_access(sender['passphrase'], keycard=True)
|
||||
wallet = home.wallet_button.click()
|
||||
status_test_dapp = home.open_status_test_dapp()
|
||||
@@ -263,7 +327,7 @@ class TestTransactionWalletSingleDevice(SingleDeviceTestCase):
|
||||
send_transaction.sign_with_keycard_button.click()
|
||||
keycard_view = send_transaction.sign_with_keycard_button.click()
|
||||
keycard_view.enter_default_pin()
|
||||
if not keycard_view.element_by_text_part('0xde3048417').is_element_displayed():
|
||||
if not keycard_view.element_by_text_part('0x6df0ce').is_element_displayed():
|
||||
self.errors.append('Typed message was not signed')
|
||||
|
||||
wallet.just_fyi("Checking deploy simple contract")
|
||||
|
||||
+132
-26
@@ -3,18 +3,20 @@ import string
|
||||
import pytest
|
||||
|
||||
from tests import marks, common_password
|
||||
from tests.base_test_case import SingleDeviceTestCase, MultipleDeviceTestCase, MultipleSharedDeviceTestCase, create_shared_drivers
|
||||
from tests.users import transaction_senders, basic_user, wallet_users, ens_user_ropsten, ens_user, transaction_recipients
|
||||
from tests.base_test_case import SingleDeviceTestCase, MultipleDeviceTestCase, MultipleSharedDeviceTestCase,\
|
||||
create_shared_drivers
|
||||
from tests.users import transaction_senders, basic_user, wallet_users, ens_user_ropsten, ens_user
|
||||
from views.send_transaction_view import SendTransactionView
|
||||
from views.sign_in_view import SignInView
|
||||
|
||||
|
||||
@pytest.mark.xdist_group(name="send_tx_1")
|
||||
@marks.critical
|
||||
class TestSendTxDeviceMerged(MultipleSharedDeviceTestCase):
|
||||
@classmethod
|
||||
def setup_class(cls):
|
||||
cls.user = transaction_senders['S']
|
||||
cls.recipient_address = '0x%s' % basic_user['address']
|
||||
cls.user = transaction_senders['ETH_ADI_STT_3']
|
||||
cls.recipient_address = '0x%s' % transaction_senders['ETH_7']['address']
|
||||
cls.drivers, cls.loop = create_shared_drivers(1)
|
||||
[cls.amount_adi, cls.amount_eth, cls.amount_stt] = ['0.000%s' % str(random.randint(100, 999)) + '1' for _ in range(3)]
|
||||
cls.sign_in = SignInView(cls.drivers[0])
|
||||
@@ -29,7 +31,6 @@ class TestSendTxDeviceMerged(MultipleSharedDeviceTestCase):
|
||||
cls.wallet.send_transaction(amount=cls.amount_adi, recipient=cls.recipient_address, asset_name='ADI')
|
||||
|
||||
@marks.testrail_id(700763)
|
||||
@marks.critical
|
||||
@marks.transaction
|
||||
def test_send_tx_eth_check_logcat(self):
|
||||
self.wallet.just_fyi('Check that transaction is appeared in tx history')
|
||||
@@ -44,7 +45,6 @@ class TestSendTxDeviceMerged(MultipleSharedDeviceTestCase):
|
||||
self.wallet.driver.fail(values_in_logcat)
|
||||
|
||||
@marks.testrail_id(700764)
|
||||
@marks.critical
|
||||
@marks.transaction
|
||||
def test_send_tx_token_7_decimals(self):
|
||||
asset = 'ADI'
|
||||
@@ -54,10 +54,58 @@ class TestSendTxDeviceMerged(MultipleSharedDeviceTestCase):
|
||||
self.network_api.find_transaction_by_hash(transaction_adi)
|
||||
self.wallet.wait_balance_is_changed(asset, initial_balance=self.initial_balances[asset])
|
||||
|
||||
@marks.testrail_id(700765)
|
||||
@marks.critical
|
||||
@marks.testrail_id(5342)
|
||||
@marks.transaction
|
||||
def test_send_tx_custom_token_18_decimals(self):
|
||||
def test_send_tx_sign_message_2tx_in_batch_tx_filters_request_stt_testdapp(self):
|
||||
self.wallet.home_button.click()
|
||||
status_test_dapp = self.home.open_status_test_dapp()
|
||||
status_test_dapp.wait_for_d_aap_to_load()
|
||||
|
||||
self.wallet.just_fyi("Checking request STT")
|
||||
status_test_dapp.assets_button.click()
|
||||
status_test_dapp.request_stt_button.wait_for_element(60)
|
||||
send_transaction = status_test_dapp.request_stt_button.click()
|
||||
send_transaction.sign_transaction()
|
||||
|
||||
self.wallet.just_fyi("Checking signing message")
|
||||
status_test_dapp.transactions_button.click()
|
||||
send_transaction = status_test_dapp.sign_message_button.click()
|
||||
send_transaction.enter_password_input.set_value(common_password)
|
||||
send_transaction.sign_button.click()
|
||||
if not status_test_dapp.element_by_text_part('Signed message').is_element_displayed():
|
||||
self.errors.append('Message was not signed')
|
||||
|
||||
send_transaction.just_fyi('Check logcat for sensitive data')
|
||||
values_in_logcat = send_transaction.find_values_in_logcat(password=common_password)
|
||||
if values_in_logcat:
|
||||
self.errors.append("When signing message from dapp: %s" % values_in_logcat)
|
||||
|
||||
self.wallet.just_fyi("Checking send 2 txs in batch")
|
||||
status_test_dapp.send_two_tx_in_batch_button.scroll_to_element()
|
||||
send_transaction = status_test_dapp.send_two_tx_in_batch_button.click()
|
||||
send_transaction.sign_transaction()
|
||||
if not send_transaction.sign_with_password.is_element_displayed(10):
|
||||
self.errors.append('Second send transaction screen did not appear!')
|
||||
send_transaction.sign_transaction()
|
||||
|
||||
self.wallet.just_fyi("Checking send 2 txs one after another")
|
||||
status_test_dapp.send_two_tx_one_by_one_button.scroll_to_element()
|
||||
send_transaction = status_test_dapp.send_two_tx_one_by_one_button.click()
|
||||
send_transaction.sign_transaction()
|
||||
if not send_transaction.sign_with_password.is_element_displayed(20):
|
||||
self.errors.append('Second send transaction screen did not appear!')
|
||||
send_transaction.sign_transaction()
|
||||
|
||||
self.wallet.just_fyi("Checking test filters")
|
||||
status_test_dapp.test_filters_button.scroll_and_click()
|
||||
for element in status_test_dapp.element_by_text('eth_uninstallFilter'), status_test_dapp.ok_button:
|
||||
if element.is_element_displayed(10):
|
||||
self.errors.append("'Test filters' button produced an error")
|
||||
self.errors.verify_no_errors()
|
||||
|
||||
@marks.testrail_id(700765)
|
||||
@marks.transaction
|
||||
def test_send_tx_custom_token_18_decimals_invalid_password(self):
|
||||
contract_address, name, symbol, decimals = '0x101848D5C5bBca18E6b4431eEdF6B95E9ADF82FA', 'Weenus 💪', 'WEENUS', '18'
|
||||
self.home.wallet_button.double_click()
|
||||
|
||||
@@ -77,17 +125,46 @@ class TestSendTxDeviceMerged(MultipleSharedDeviceTestCase):
|
||||
self.wallet.asset_by_name(symbol).scroll_to_element()
|
||||
if not self.wallet.asset_by_name(symbol).is_element_displayed():
|
||||
self.errors.append('Custom token is not shown on Wallet view')
|
||||
send_tx = self.wallet.send_transaction_from_main_screen.click()
|
||||
send_tx.select_asset_button.click()
|
||||
asset_button = send_tx.asset_by_name(symbol)
|
||||
send_tx.select_asset_button.click_until_presence_of_element(
|
||||
send_tx.eth_asset_in_select_asset_bottom_sheet_button)
|
||||
asset_button.click()
|
||||
send_tx.amount_edit_box.click()
|
||||
send_tx.amount_edit_box.set_value(self.amount_eth)
|
||||
send_tx.set_recipient_address(self.recipient_address)
|
||||
send_tx.sign_transaction_button.click()
|
||||
if self.wallet.sign_in_phrase.is_element_displayed():
|
||||
self.wallet.set_up_wallet_when_sending_tx()
|
||||
|
||||
send_tx.just_fyi('Check that can not sign tx with invalid password')
|
||||
self.wallet.next_button.click_if_shown()
|
||||
self.wallet.ok_got_it_button.click_if_shown()
|
||||
send_tx.sign_with_password.click_until_presence_of_element(send_tx.enter_password_input)
|
||||
send_tx.enter_password_input.click()
|
||||
send_tx.enter_password_input.send_keys('wrong_password')
|
||||
send_tx.sign_button.click()
|
||||
if send_tx.element_by_text_part('Transaction sent').is_element_displayed():
|
||||
self.errors.append('Transaction was sent with a wrong password')
|
||||
|
||||
self.wallet.just_fyi("Check that can send tx with custom token")
|
||||
self.wallet.send_transaction(asset_name=symbol, amount=self.amount_eth, recipient=self.recipient_address)
|
||||
send_tx.enter_password_input.click()
|
||||
send_tx.enter_password_input.clear()
|
||||
send_tx.enter_password_input.send_keys(common_password)
|
||||
send_tx.sign_button.click_until_absense_of_element(send_tx.sign_button)
|
||||
send_tx.ok_button.wait_for_element(120)
|
||||
if not self.wallet.element_by_translation_id("transaction-sent").is_element_displayed():
|
||||
self.errors.append("Tx is not sent!")
|
||||
send_tx.ok_button.click()
|
||||
|
||||
# TODO: disabled due to 10838 (rechecked 23.11.21, valid)
|
||||
# transactions_view = wallet.transaction_history_button.click()
|
||||
# transactions_view.transactions_table.find_transaction(amount=amount, asset=symbol)
|
||||
self.errors.verify_no_errors()
|
||||
|
||||
@marks.testrail_id(700757)
|
||||
@marks.critical
|
||||
def test_send_tx_set_recipient_options_invalid_password(self):
|
||||
def test_send_tx_set_recipient_options(self):
|
||||
nickname = 'my_some_nickname'
|
||||
account_name = 'my_acc_name'
|
||||
account_address = '0x8c2E3Cd844848E79cFd4671cE45C12F210b630d7'
|
||||
@@ -189,22 +266,51 @@ class TestSendTxDeviceMerged(MultipleSharedDeviceTestCase):
|
||||
if send_tr.enter_recipient_address_text.text != send_tr.get_formatted_recipient_address(
|
||||
'0x' + basic_user['address']):
|
||||
self.errors.append('QR scanned address that was added to favourites was not resolved correctly')
|
||||
|
||||
send_tr.just_fyi('Check that can not sign tx with invalid password')
|
||||
self.wallet.next_button.click_if_shown()
|
||||
self.wallet.ok_got_it_button.click_if_shown()
|
||||
send_tr.sign_with_password.click_until_presence_of_element(send_tr.enter_password_input)
|
||||
send_tr.enter_password_input.click()
|
||||
send_tr.enter_password_input.send_keys('wrong_password')
|
||||
send_tr.sign_button.click()
|
||||
if send_tr.element_by_text_part('Transaction sent').is_element_displayed():
|
||||
wallet.driver.fail('Transaction was sent with a wrong password')
|
||||
|
||||
self.errors.verify_no_errors()
|
||||
|
||||
|
||||
class TestTransactionWalletSingleDevice(SingleDeviceTestCase):
|
||||
|
||||
@marks.testrail_id(5784)
|
||||
@marks.medium
|
||||
@marks.transaction
|
||||
def test_sign_typed_message_deploy_simple_contract_request_pub_key_from_dapp(self):
|
||||
user = transaction_senders['ETH_5']
|
||||
home = SignInView(self.driver).recover_access(passphrase=user['passphrase'])
|
||||
|
||||
home.just_fyi("Checking requesting public key from dapp")
|
||||
status_test_dapp = home.open_status_test_dapp(allow_all=False)
|
||||
status_test_dapp.status_api_button.click_until_presence_of_element(status_test_dapp.request_contact_code_button)
|
||||
status_test_dapp.request_contact_code_button.click_until_presence_of_element(status_test_dapp.deny_button)
|
||||
status_test_dapp.deny_button.click()
|
||||
if status_test_dapp.element_by_text(user['public_key']).is_element_displayed():
|
||||
self.errors.append('Public key is returned but access was not allowed')
|
||||
status_test_dapp.request_contact_code_button.click_until_presence_of_element(status_test_dapp.deny_button)
|
||||
status_test_dapp.allow_button.click()
|
||||
if not status_test_dapp.element_by_text(user['public_key']).is_element_displayed():
|
||||
self.errors.append('Public key is not returned')
|
||||
status_test_dapp.get_empty_dapp_tab()
|
||||
home.wallet_button.click()
|
||||
|
||||
home.just_fyi("Checking sign typed message")
|
||||
home.open_status_test_dapp(allow_all=True)
|
||||
status_test_dapp.transactions_button.click_until_presence_of_element(status_test_dapp.sign_typed_message_button)
|
||||
send_transaction = status_test_dapp.sign_typed_message_button.click()
|
||||
send_transaction.enter_password_input.send_keys(common_password)
|
||||
send_transaction.sign_button.click_until_absense_of_element(send_transaction.sign_button)
|
||||
if not status_test_dapp.element_by_text_part('0x1673d96e836').is_element_displayed(30):
|
||||
self.errors.append("Hash of signed typed message is not shown!")
|
||||
|
||||
home.just_fyi("Checking deploy simple contract")
|
||||
send_transaction = status_test_dapp.deploy_contract_button.click()
|
||||
send_transaction.sign_transaction()
|
||||
if not status_test_dapp.element_by_text('Contract deployed at: ').is_element_displayed(240):
|
||||
self.errors.append('Contract was not created')
|
||||
for text in ['Call contract get function',
|
||||
'Call contract set function', 'Call function 2 times in a row']:
|
||||
status_test_dapp.element_by_text(text).scroll_to_element()
|
||||
self.errors.verify_no_errors()
|
||||
|
||||
@marks.testrail_id(5429)
|
||||
@marks.medium
|
||||
def test_set_currency(self):
|
||||
@@ -540,7 +646,7 @@ class TestTransactionWalletSingleDevice(SingleDeviceTestCase):
|
||||
@marks.transaction
|
||||
@marks.medium
|
||||
def test_custom_gas_settings(self):
|
||||
sender = wallet_users['B']
|
||||
sender = transaction_senders['ETH_7']
|
||||
sign_in = SignInView(self.driver)
|
||||
sign_in.recover_access(sender['passphrase'])
|
||||
wallet = sign_in.wallet_button.click()
|
||||
@@ -653,8 +759,8 @@ class TestTransactionWalletMultipleDevice(MultipleDeviceTestCase):
|
||||
@marks.medium
|
||||
@marks.transaction
|
||||
def test_can_send_all_tokens_via_max_option(self):
|
||||
sender = transaction_senders['V']
|
||||
receiver = transaction_recipients['K']
|
||||
sender = transaction_senders['ETH_STT_2']
|
||||
receiver = transaction_senders['ETH_1']
|
||||
self.create_drivers(2)
|
||||
device_1, device_2 = SignInView(self.drivers[0]), SignInView(self.drivers[1])
|
||||
home_1, home_2 = device_1.recover_access(sender['passphrase']), device_2.recover_access(receiver['passphrase'])
|
||||
@@ -8,6 +8,7 @@ from views.chat_view import ChatView
|
||||
|
||||
# TODO: moved here until resolve of 13048
|
||||
@pytest.mark.xdist_group(name="group_chat_3")
|
||||
@marks.critical
|
||||
class TestPublicChatMultipleDeviceMerged(MultipleSharedDeviceTestCase):
|
||||
|
||||
@classmethod
|
||||
@@ -41,8 +42,7 @@ class TestPublicChatMultipleDeviceMerged(MultipleSharedDeviceTestCase):
|
||||
cls.chats[0].send_message(cls.message_before_adding)
|
||||
|
||||
@marks.testrail_id(3994)
|
||||
@marks.critical
|
||||
def test_group_pn_system_messages_when_invited(self):
|
||||
def test_group_chat_push_system_messages_when_invited(self):
|
||||
self.homes[1].just_fyi("Check system messages in PNs")
|
||||
self.homes[1].put_app_to_background()
|
||||
self.homes[1].open_notification_bar()
|
||||
@@ -73,8 +73,7 @@ class TestPublicChatMultipleDeviceMerged(MultipleSharedDeviceTestCase):
|
||||
self.errors.verify_no_errors()
|
||||
|
||||
@marks.testrail_id(700731)
|
||||
@marks.critical
|
||||
def test_group_join_send_text_messages_pn(self):
|
||||
def test_group_chat_join_send_text_messages_push(self):
|
||||
message_to_admin = self.message_to_admin
|
||||
[self.homes[i].home_button.double_click() for i in range(3)]
|
||||
self.homes[1].get_chat(self.chat_name).click()
|
||||
@@ -105,8 +104,7 @@ class TestPublicChatMultipleDeviceMerged(MultipleSharedDeviceTestCase):
|
||||
self.errors.verify_no_errors()
|
||||
|
||||
@marks.testrail_id(700732)
|
||||
@marks.critical
|
||||
def test_group_add_new_member_activity_centre(self):
|
||||
def test_group_chat_add_new_member_activity_centre(self):
|
||||
[self.homes[i].home_button.double_click() for i in range(3)]
|
||||
self.homes[0].get_chat(self.chat_name).click()
|
||||
self.chats[0].add_members_to_group_chat([self.usernames[2]])
|
||||
@@ -126,8 +124,7 @@ class TestPublicChatMultipleDeviceMerged(MultipleSharedDeviceTestCase):
|
||||
self.errors.verify_no_errors()
|
||||
|
||||
@marks.testrail_id(3998)
|
||||
@marks.critical
|
||||
def test_group_offline_pn(self):
|
||||
def test_group_chat_offline_pn(self):
|
||||
[self.homes[i].home_button.double_click() for i in range(3)]
|
||||
chat_name = 'for_offline_pn'
|
||||
self.homes[0].create_group_chat([self.usernames[1], self.usernames[2]], chat_name)
|
||||
@@ -163,8 +160,7 @@ class TestPublicChatMultipleDeviceMerged(MultipleSharedDeviceTestCase):
|
||||
self.errors.verify_no_errors()
|
||||
|
||||
@marks.testrail_id(5756)
|
||||
@marks.critical
|
||||
def test_group_decline_invite_chat_highligted(self):
|
||||
def test_group_chat_decline_invite_chat_highligted(self):
|
||||
chat_name = 'for_invited'
|
||||
left_system_message = self.chats[0].leave_system_message(self.usernames[1])
|
||||
[self.homes[i].home_button.double_click() for i in range(3)]
|
||||
@@ -193,8 +189,7 @@ class TestPublicChatMultipleDeviceMerged(MultipleSharedDeviceTestCase):
|
||||
self.errors.verify_no_errors()
|
||||
|
||||
@marks.testrail_id(3997)
|
||||
@marks.critical
|
||||
def test_group_leave_relogin(self):
|
||||
def test_group_chat_leave_relogin(self):
|
||||
self.drivers[2].quit()
|
||||
[self.homes[i].home_button.double_click() for i in range(2)]
|
||||
self.homes[0].home_button.double_click()
|
||||
|
||||
@@ -81,7 +81,7 @@ def get_capabilities_sauce_lab():
|
||||
desired_caps['deviceName'] = 'Android GoogleAPI Emulator'
|
||||
desired_caps['deviceOrientation'] = "portrait"
|
||||
desired_caps['commandTimeout'] = 600
|
||||
desired_caps['idleTimeout'] = 600
|
||||
desired_caps['idleTimeout'] = 800
|
||||
desired_caps['unicodeKeyboard'] = True
|
||||
desired_caps['automationName'] = 'UiAutomator2'
|
||||
desired_caps['setWebContentDebuggingEnabled'] = True
|
||||
|
||||
@@ -1,404 +0,0 @@
|
||||
basic_user = dict()
|
||||
basic_user['passphrase'] = "tree weekend ceiling awkward universe pyramid glimpse raven pair lounge grant grief"
|
||||
basic_user['username'] = "Royal Defensive Solenodon"
|
||||
basic_user['public_key'] = "0x042e0309b5f6bedee93a1b984af08f89a101aff62d01ddd0a1c8f4a1d4db3b91e648c914019d09de9f07dd" \
|
||||
"baacb77fdf07e89b5e0d60e9a8df05b75f213661fcad"
|
||||
basic_user['address'] = "f184747445c3B85CEb147DfB136067CB93d95F1D"
|
||||
basic_user['special_chars_password'] = " !\"#$Á%Ö&'()*+Í, -./:ä;<=>?@[\\]^_`{|}~ "
|
||||
|
||||
ens_user = dict()
|
||||
ens_user['passphrase'] = "fashion quality know robust copy neck stand embody entry task orient suggest"
|
||||
ens_user['username'] = "Legal Vibrant Indianabat"
|
||||
ens_user['public_key'] = "0x04359bb3e73cba0b815d71e562670ad00bb5d2db0d16cd1c4c92c668b61fde2274d6e487fcdffe66f913b3fea2a" \
|
||||
"3058f53ce7946c2b501aa61a9ca8a883df72dc9"
|
||||
ens_user['ens'] = 'statuse2e.eth'
|
||||
ens_user['ens_upgrade'] = 'statuse2e'
|
||||
ens_user['ens_another'] = 'status-another-ens-e2e.eth'
|
||||
ens_user['address'] = '0x1eE3058Bd300246B4B20E687Efc9Eba81FF7814b'
|
||||
|
||||
user_mainnet = dict()
|
||||
user_mainnet['passphrase'] = "gallery zoo inspire work used slush deliver surface adjust struggle lazy virtual"
|
||||
user_mainnet['mainnet'] = {
|
||||
'ETH': 0.000372125264,
|
||||
'SNT': 60,
|
||||
'DGD': 0.00001
|
||||
}
|
||||
user_mainnet['xdai'] = '0.0002 xDAI'
|
||||
user_mainnet['bsc'] = '0.00001 BNB'
|
||||
|
||||
ens_user_ropsten = dict()
|
||||
ens_user_ropsten['ens'] = 'nastya'
|
||||
ens_user_ropsten['username'] = 'Thoughtful Stupendous Graywolf'
|
||||
ens_user_ropsten['address'] = '0x58d8c3D70ce4FA4b9fb10a665C8712238746F2ff'
|
||||
ens_user_ropsten['public_key'] = '0x045efbcc044e5ae21ac3cf111ea6df6186e0cc50a2cd747f52a56d19ce516e683c66cb47f4b0a211108' \
|
||||
'59aea9592dfba1e0bf4af11ff3eab995f844b3673643bf1'
|
||||
|
||||
ens_user_message_sender = dict()
|
||||
ens_user_message_sender['ens'] = 'ensmessenger'
|
||||
ens_user_message_sender['username'] = 'Glaring Plush Arkshell'
|
||||
ens_user_message_sender['passphrase'] = 'tribe life dune clog throw situate robust gospel panic blanket timber eagle'
|
||||
ens_user_message_sender['address'] = '0x75fF623fe856012b0667876582038A63F4004184'
|
||||
ens_user_message_sender[
|
||||
'public_key'] = '0x0471e18b2a9867161383919d85741389a829299ae0833c23e003818c1222942f5dddcbb792daee7c88' \
|
||||
'e8a30ee44c00d03240a971d90d76ed8200b75572241da9ef'
|
||||
|
||||
dummy_user = dict()
|
||||
dummy_user['username'] = "Vain Wordy Hagfish"
|
||||
dummy_user['passphrase'] = "near broom kiss excess sad switch slab melt trade crash spare dinner"
|
||||
dummy_user['public_key'] = "0x04596348471aa19d31c8503fa00f95abd0fc3ca908668817284b52b7ced95f966cc13457254aa908aa8e64" \
|
||||
"a2748453accf9d358b8d7a1448597201c664dc280e37"
|
||||
dummy_user['address'] = "0xdF6Bc71206d7ea89ec905a7f5ce8Ff34C85eB04e"
|
||||
|
||||
upgrade_users = dict()
|
||||
|
||||
upgrade_users['chats'] = dict()
|
||||
upgrade_users['chats']['passphrase'] = 'identify level pink lift choose winner hour onion style festival rather salmon'
|
||||
upgrade_users['chats']['public_key'] = '0x045d8a344ffee0c5ce187d0248a9b8ffc4a12493c9d9e8b9a395f38' \
|
||||
'825ebe55ac2350d9e7090e39e6c8d7020aaa799aefe563f1db5b6151370eae246558772ad9e'
|
||||
upgrade_users['chats']['username'] = 'Rapid Gleeful Cheetah'
|
||||
|
||||
wallet_users = dict()
|
||||
|
||||
wallet_users['A'] = dict()
|
||||
wallet_users['A']['passphrase'] = "heavy earn fence pool drift balcony act coast stairs basic juice hip"
|
||||
wallet_users['A']['username'] = "Equatorial Navyblue Tegus"
|
||||
wallet_users['A']['address'] = "c8f8b3376814d0dfe61e4b9eaf7970697c24f6b2"
|
||||
wallet_users['A']['public_key'] = "0x04fa759cc29261fd7779cf8b3566de61e3fb22aca4699a0a77a930a4f5af83b6f922a9cd67" \
|
||||
"9a957fdab86e277e4bb7ec90f7998d21fc16690397d3783b8d8711e1"
|
||||
|
||||
wallet_users['B'] = dict()
|
||||
wallet_users['B']['passphrase'] = "unknown endless ill average shell foil kitchen runway left race neither exhaust"
|
||||
wallet_users['B']['username'] = "Bulky Able Firecrest"
|
||||
wallet_users['B']['address'] = "0F3EFF5CacEe63045be97281316457fb78dd659E"
|
||||
wallet_users['B']['public_key'] = "0x04f3c372522a087bd6895a67b669601e6b6825b2ee7add5942d10efd1c3c836a1d9a677d94d33" \
|
||||
"895833b6ebe523f0fe5965f73558da58520a3f9c7a00e73f75d61"
|
||||
|
||||
wallet_users['C'] = dict()
|
||||
wallet_users['C']['passphrase'] = "purchase ensure mistake crystal person similar shaft family shield clog risk market"
|
||||
wallet_users['C']['username'] = "Mellow Virtual Nubiangoat"
|
||||
wallet_users['C']['address'] = "8DcE052cCda2F6F6B555759cEe6957e04A6dDf5B"
|
||||
wallet_users['C']['public_key'] = "0x040e562b69362e7e57492bca50b6095acfa636c48b85eef2bc0e4180b6e99fc5e73f45c3" \
|
||||
"40837da01728d4585695fda7f1de2ed193a1dd4080291d90812e1cae77"
|
||||
wallet_users['C']['private_key'] = '7800C28310576645BBF6BF6355F7AA4CEC659B1713AF7E7713E1A33097A3DDF6'
|
||||
|
||||
# Do not use this user for send/receive transactions
|
||||
wallet_users['D'] = dict()
|
||||
wallet_users['D']['passphrase'] = "hen mango since lottery laundry flag report whisper cycle rate festival carry"
|
||||
wallet_users['D']['username'] = "Competent Rectangular Albino"
|
||||
wallet_users['D']['address'] = "80B663E82657Caf5657ce79b11aEaEDa02C6CD92"
|
||||
wallet_users['D']['public_key'] = "0x04f79d02bab51efe903645e74b23df471b041ce3c964a5cf376c7ae572039569af7cf934d094e" \
|
||||
"86b2177db49b6943d0c8720550e39868ef5c7108ebffb5522b140"
|
||||
wallet_users['E'] = dict()
|
||||
wallet_users['E']['passphrase'] = "record sphere illegal section blame swing wreck estate celery same excite summer"
|
||||
wallet_users['E']['username'] = "Wry Shiny Damselfly"
|
||||
wallet_users['E']['address'] = "0x3e2e4077753d3c229a9ae332b9ca46958945e2f6"
|
||||
wallet_users['E']['public_key'] = "0x044cf0620ec3ea0aba9fb0e19cb42a6fbd6b4e74f234f0da82580564817b238cc6434745d31" \
|
||||
"fa1649927ba48adfa7c95991fd51940bc00a71e80b095db5b107f1b"
|
||||
wallet_users['E']['collectibles'] = {
|
||||
'Coins & Steel Exclusive Item Skin V2': '1',
|
||||
'Coins & Steel Founder Aura': '1',
|
||||
'CryptoKittiesRinkeby': '2',
|
||||
'KudosToken V7': '1',
|
||||
}
|
||||
wallet_users['F'] = dict()
|
||||
wallet_users['F']['passphrase'] = "jazz human replace save wreck merry evolve oval black expose clutch sword"
|
||||
wallet_users['F']['username'] = "Dual Sour Galapagostortoise"
|
||||
wallet_users['F']['address'] = "0x8A4339aE98df2B2e51E37631C8B4F853048D4556"
|
||||
wallet_users['F']['public_key'] = "0x049d0b39d95b20114fac79c3173a36c60a126c060dce52bba4128ab9a3885f0f058f2af9c92099" \
|
||||
"315eb564412b718d8bfe697a4425e4bc603063abd4f5c45f8e57"
|
||||
|
||||
# Users used in chats. E.g. as members of a group chat
|
||||
chat_users = dict()
|
||||
|
||||
chat_users['A'] = dict()
|
||||
chat_users['A']['passphrase'] = "canoe edit leg exit game glue blame electric bar now box point"
|
||||
chat_users['A']['username'] = "Petty Mediumaquamarine Avians"
|
||||
chat_users['A']['address'] = "0x5626db866676d70f5fa58366d8df3b1053b8d9cc"
|
||||
chat_users['A']['public_key'] = "0x0445c001a3b365b55304e2cd23b8418a8381786d96be01a69cf7569786086a2a4c7b2a602ea" \
|
||||
"355c85225ae1e7b0444a666fefe9902b465414e6c0ef0b5997b073a"
|
||||
|
||||
chat_users['B'] = dict()
|
||||
chat_users['B']['passphrase'] = "found ridge build seven whisper enact weekend nation during law external december"
|
||||
chat_users['B']['username'] = "Repentant Velvety Adeliepenguin"
|
||||
chat_users['B']['address'] = "0xB094A8c0A3F71e3246C3eD89a51f81008c800088"
|
||||
chat_users['B']['public_key'] = "0x0439a66cd420082741147ef8b1ab9c8d8558d21f2cc3cb4099fd0aa5507c5d8bdb94ded8beccfa" \
|
||||
"2812f6b641de9f9c31fa62379af6d148fdec45335196b2e6307b"
|
||||
|
||||
transaction_senders = dict()
|
||||
|
||||
transaction_senders['A'] = dict()
|
||||
transaction_senders['A']['passphrase'] = \
|
||||
'night fortune spider version version armed amused winner matter tonight cave flag'
|
||||
transaction_senders['A']['username'] = 'Darkorchid Clueless Ewe'
|
||||
transaction_senders['A']['address'] = 'efca4fd47b98b9f01c4eef4827e576a01459728a'
|
||||
transaction_senders['A']['public_key'] = "0x046c0ec05e1f13481af0e3d9cc7869e6f1b64306adcfb325827518c66f4ea3dafbd18de3" \
|
||||
"0269f95aadcf3aae40a27075505b625c1cd08b41a335b318bf3fe7ca21"
|
||||
|
||||
transaction_senders['B'] = dict()
|
||||
transaction_senders['B']['passphrase'] = \
|
||||
"quality walk globe dune rally distance fragile year turn horror sample lobster"
|
||||
transaction_senders['B']['username'] = "New Awesome Tenrec"
|
||||
transaction_senders['B']['address'] = "a456a6bde144695879a754b19dd13e9f75ea43f2"
|
||||
transaction_senders['B']['public_key'] = "0x04b9687c94bc9d573d7455d9fed1039253b1fa063afda5ca3280de605208c760202479645" \
|
||||
"ff84755d5bf20cc029daa0881c94cab9a65bdfe9568849efe4ac707e3"
|
||||
|
||||
transaction_senders['C'] = dict()
|
||||
transaction_senders['C']['passphrase'] = "potato labor object reward minor casino dismiss size flame task winter report"
|
||||
transaction_senders['C']['username'] = "Breakable Productive Prayingmantis"
|
||||
transaction_senders['C']['address'] = "549b9bcd069d720390a6819ff8b3d9dd252fa3be"
|
||||
transaction_senders['C']['public_key'] = "0x048536ec9fcc25e879920fb548a484de5be64b4a93a0b16c6d78deb1d140ac636ed3ca1" \
|
||||
"d86e17a75f83422ab651f0743c162ffb006707721719e02d2cbd5f54d51"
|
||||
|
||||
transaction_senders['D'] = dict()
|
||||
transaction_senders['D']['passphrase'] = "weekend unable empty crime blind rhythm crunch answer travel coast silly like"
|
||||
transaction_senders['D']['username'] = "Indelible Dapper Hoatzin"
|
||||
transaction_senders['D']['address'] = "616874dc6cc2810cdc930dea26496fcf217d58ca"
|
||||
transaction_senders['D']['public_key'] = "0x044764a9ba22bb4ae355619ca3824ee66b9f704c7fc08280e6305112bf80fd96b2fcd73" \
|
||||
"d0dd570471986c229c077c8053ee47784416eb6604d52e41f8f9d566ef8"
|
||||
|
||||
transaction_senders['E'] = dict()
|
||||
transaction_senders['E'][
|
||||
'passphrase'] = "sea ill guard bounce gesture tomato walnut fitness plastic affair oven transfer"
|
||||
transaction_senders['E']['username'] = "Fatal Metallic Imperialeagle"
|
||||
transaction_senders['E']['address'] = "f7cb60839c0de25e37be0391c33bb34a8f0f8414"
|
||||
transaction_senders['E']['public_key'] = "0x04db6128352e5c2d05ee5a6556848453cf3a7af34e94b3e20a302de684e9906461e38adf" \
|
||||
"51c39e1abf20f5ae7f418e0383633e08d7acee31d4aaee0473af2e6ed8"
|
||||
|
||||
transaction_senders['F'] = dict()
|
||||
transaction_senders['F']['passphrase'] = "style case lazy pole general section dawn royal slice evoke crowd boat"
|
||||
transaction_senders['F']['username'] = "Lightsalmon Wry Umbrette"
|
||||
transaction_senders['F']['address'] = "a94a2a7584620677d290549a96046e59a18f09ef"
|
||||
transaction_senders['F']['public_key'] = "0x044f13fa489032ad7fefd82a5d9dedc40ab3787096ef2870848a7537b26c5262ea7a29b" \
|
||||
"53026d1cbf992b99bce5d0609a933a06f89fb6206606b34a43c1f160e35"
|
||||
|
||||
transaction_senders['G'] = dict()
|
||||
transaction_senders['G']['passphrase'] = "load other time gadget fury sudden gossip hurry entry curtain jaguar inflict"
|
||||
transaction_senders['G']['username'] = "Acidic Focused Xantus"
|
||||
transaction_senders['G']['address'] = "876c331d60aedd175ca78cb6a50eaeb9681a1868"
|
||||
transaction_senders['G']['public_key'] = "0x04885bb487d9e8c3b51f963e564669118f7a9bead224df5334dd3242d463dc0420b2c1e" \
|
||||
"2dfced6dc9dca1a36771584e2edb83da39edaaae969616254f26da5b07a"
|
||||
|
||||
transaction_senders['H'] = dict()
|
||||
transaction_senders['H']['passphrase'] = "age three camp tip jump radio copper merry mention top panther motor"
|
||||
transaction_senders['H']['username'] = "Fine Huge Beagle"
|
||||
transaction_senders['H']['address'] = "762d87f77c88048281ddad78501fcfe0700f08ce"
|
||||
transaction_senders['H']['public_key'] = "0x042b9be3f4887d0504ebc31f42e809919641e95ed98ba9b643961019ad6af7bc258064d" \
|
||||
"ca2ca860f182e4f528a9be3d969e4536f04f3e4e1b9203e16b57508ec1b"
|
||||
|
||||
transaction_senders['I'] = dict()
|
||||
transaction_senders['I']['passphrase'] = "six runway asthma blur secret rebuild parent logic horror decline rib buyer"
|
||||
transaction_senders['I']['username'] = "Finished Infatuated Whiteeye"
|
||||
transaction_senders['I']['address'] = "0887afe0ee3e1b195f596350bb04bba034514af9"
|
||||
transaction_senders['I']['public_key'] = "0x04e61e616f881383e807cd1fb714fa2e06b5ad1cb6cd7b97a9265da2ad9a133ee750954a" \
|
||||
"6c4da3635f2e406b310f6e294ca94ea3a686287a1276e4e86612886f8e"
|
||||
transaction_senders['K'] = dict()
|
||||
transaction_senders['K']['passphrase'] = "fly west avoid depend tape direct foster off cry crucial blame elegant"
|
||||
transaction_senders['K']['username'] = "Decimal Healthy Harpyeagle"
|
||||
transaction_senders['K']['address'] = "6a4dd6e2dcef1139cd04e6a24c19ded819340f85"
|
||||
transaction_senders['K']['public_key'] = "0x044ab7a9d8f6f146a52534327bd301e85afe02b61108a03cd5afdd1c555f7268e46cb8ac" \
|
||||
"37636f3590f9fed80a1124d78be041d010dba61d09f6278dee272dc661"
|
||||
transaction_senders['L'] = dict()
|
||||
transaction_senders['L']['passphrase'] = "road rabbit tuna bacon man raccoon equal note cream rescue core chunk"
|
||||
transaction_senders['L']['username'] = "Funny Lavish Goldfinch"
|
||||
transaction_senders['L']['address'] = "002881321fd06d77ba2deed035140631f49506be"
|
||||
transaction_senders['L']['public_key'] = "0x04dfe571200b1cf05b1f743f5730a833da60b46de9437d29c0573c4970ba8e8e5980f76b" \
|
||||
"80aa71a7e66b54235e869ade8f91dfde925d06ef3b2397fa007540dd34"
|
||||
transaction_senders['M'] = dict()
|
||||
transaction_senders['M']['passphrase'] = "thank fruit brisk pond opera census grid husband claw sight chunk arena"
|
||||
transaction_senders['M']['username'] = "Wellgroomed Impartial Cornsnake"
|
||||
transaction_senders['M']['address'] = 'bd4e3eede0f942b843a031007190c08cab373248'
|
||||
transaction_senders['M']['public_key'] = "0x04d52c290fbd4f32bba82e5efa673d8f6aaf698f99ed16266662acd0cd583ee534703c547" \
|
||||
"a06e24b4a2244c6788e2e92f22aa95f0ad999d07e6b993c9274132e13"
|
||||
|
||||
transaction_senders['N'] = dict()
|
||||
transaction_senders['N']['passphrase'] = "label ill slender audit atom love vote snap edit program climb beyond"
|
||||
transaction_senders['N']['username'] = "Immaculate Aqua Banteng"
|
||||
transaction_senders['N']['address'] = 'd117188dbf1c160074cc4850a1d140286fdfc831'
|
||||
transaction_senders['N']['public_key'] = "0x04331e35cdb205e201502719edb97c307f5f997dd58aa68d9f6378188f4ed8ccf0b3908e" \
|
||||
"f0151f60aa639c3652937e9df30f1c0c1b8b43f922167c5c0447dda6b5"
|
||||
|
||||
transaction_senders['O'] = dict()
|
||||
transaction_senders['O']['passphrase'] = "you salmon ticket antique spray panther flee neck scale mad trial exile"
|
||||
transaction_senders['O']['username'] = "Wavy Yellow Rainbowfish"
|
||||
transaction_senders['O']['address'] = '45798efe501340efbe265bce950f9ddcad8d7ce5'
|
||||
transaction_senders['O']['public_key'] = "0x045925e701303feb8c1c98be2c9825e2c1c7005a0da7ab509d2d989e1d837c064fc8e06be" \
|
||||
"51b417113f55cfe147cf7413c4016df748c29a6fd2efe20b2d8f59a05"
|
||||
|
||||
transaction_senders['P'] = dict()
|
||||
transaction_senders['P']['passphrase'] = "warm beach mind real stay oil evil giggle core tilt paddle invest"
|
||||
transaction_senders['P']['username'] = "Grave Able Arcticfox"
|
||||
transaction_senders['P']['address'] = "9164f86170290ba3080e37d19d1953d3c5945913"
|
||||
transaction_senders['P']['public_key'] = "0x04a7d3e9f637325f6195607ec5b60d1198487da9f172cc717729fa475f6ea682a93dc56" \
|
||||
"f00bbb3652e014d9569da5bf3de0e1ba98884fcb64d3ca5a724eb24cfbc"
|
||||
|
||||
transaction_senders['Q'] = dict()
|
||||
transaction_senders['Q']['passphrase'] = "junior forum symptom twin route scare source cycle extra engage worth prison"
|
||||
transaction_senders['Q']['username'] = "Jealous Third Howlermonkey"
|
||||
transaction_senders['Q']['address'] = "e9fd13b1bcfff497f21b28e141fa2e5049ebcee4"
|
||||
transaction_senders['Q']['public_key'] = "0x044cee9f6c12a46da7142d5fa3cc29e34f1a82d22435cebcd73d41981a73577cd31adc38b" \
|
||||
"b6b747dfa75857d452b94630b4672b80e6fc8d6974421b95fcf9d6513"
|
||||
|
||||
transaction_senders['R'] = dict()
|
||||
transaction_senders['R']['passphrase'] = "ahead warrior poet radio image topic wasp clever banner angry age quality"
|
||||
transaction_senders['R']['username'] = "Icky Tan Flickertailsquirrel"
|
||||
transaction_senders['R']['address'] = "d54bf6c67e349bf889fd5d411a8c410b3a4cc099"
|
||||
transaction_senders['R']['public_key'] = "0x04ec7a5b6cd54a2d7aa7f156013870e8c7559a14239752dfbe879167b3deb55fc713da44d" \
|
||||
"096fd2e02aac143cb8999139ebd4a07b7e7c1fd72cc192a2a2f576682"
|
||||
|
||||
transaction_senders['S'] = dict()
|
||||
transaction_senders['S']['passphrase'] = \
|
||||
"tree capable picnic swap venture correct open enforce assault news inform pear"
|
||||
transaction_senders['S']['username'] = "Cyan Intent Meadowlark"
|
||||
transaction_senders['S']['address'] = "061fae3dd75beab5855f584837ca0c0a8e84f5c1"
|
||||
transaction_senders['S']['public_key'] = "0x04579ab8085e685a6ab1dee8435b05bcb04c8332d22f96ecc7300da95e7565c8e4a950a6f" \
|
||||
"b1809db7590ad87d28c7aec58632e8870cb642df839252e356010a9eb"
|
||||
|
||||
transaction_senders['T'] = dict()
|
||||
transaction_senders['T']['passphrase'] = \
|
||||
"describe adult cat kidney disagree stick timber unaware yellow jungle leave warrior"
|
||||
transaction_senders['T']['username'] = "Faithful Specific Brownbutterfly"
|
||||
transaction_senders['T']['address'] = "7e33ab11ae8ca21e8d3c15ceb74b6cc429834b5b"
|
||||
transaction_senders['T']['public_key'] = "0x04cd6e1b7c76bd7abe54c8cd30fb1be6a08233d9c77b298700c3983d812c98698963c9db" \
|
||||
"4b0c4648de69237e9e140397258f3e3bdd526a11a37c64c477be4953fa"
|
||||
|
||||
transaction_senders['U'] = dict()
|
||||
transaction_senders['U']['passphrase'] = "club script position scare face medal already quality company flat item pill"
|
||||
transaction_senders['U']['username'] = "Qualified Gifted Prayingmantis"
|
||||
transaction_senders['U']['address'] = "b92496fffd668c2de08694623303456aa98cdf33"
|
||||
transaction_senders['U']['public_key'] = "0x048f6828bad09baabbead08de7fc9672d6d15d6433e7941d99322bf0f61f3b5891a2bf740" \
|
||||
"2027fd46896b869d46ae85c7096d4a47d7184682fa14bee7bb772f29a"
|
||||
|
||||
transaction_senders['V'] = dict()
|
||||
transaction_senders['V']['passphrase'] = "true bus equip ensure speed blame universe renew gasp clip glide unaware"
|
||||
transaction_senders['V']['username'] = "Likely Imaginary Hound"
|
||||
transaction_senders['V']['address'] = "785acde6058a670e674aa0f66ccbabe98bbce7b1"
|
||||
transaction_senders['V']['public_key'] = "0x04ebd187fba2169f7544fc5c1cee4f486c2d498d94f42ed4b570420b6e926da163bc514b" \
|
||||
"7f3b234bcad3062a48cacf51411d2f7e4dfd079d8eabdfd12f0ee774f6"
|
||||
transaction_senders['W'] = dict()
|
||||
transaction_senders['W']['passphrase'] = \
|
||||
"setup portion luxury fatigue unhappy position pioneer sell angry trust hat magic"
|
||||
transaction_senders['W']['username'] = "Stable Blueviolet Stonefly"
|
||||
transaction_senders['W']['address'] = "d5de9a58a3eab0643ecbd01729312215ef647a4d"
|
||||
transaction_senders['W']['public_key'] = "0x04e801e4cf211a7846fdd96c6591cf75f5c37cb8df6b1bd5c9e4471b6b3f7f2936d29dc93" \
|
||||
"4820ea0fabd460b90aef3b66c7b1552baf60146ba8fc354c2fa22b3cf"
|
||||
|
||||
transaction_senders['X'] = dict()
|
||||
transaction_senders['X']['passphrase'] = "denial lend kit learn jacket mail ceiling crack affair stool spike sound"
|
||||
transaction_senders['X']['username'] = "Polite Experienced Hackee"
|
||||
transaction_senders['X']['address'] = "0xc9cf2ff3ca98a91f2e3dfc35a13cf8425ecaf082"
|
||||
transaction_senders['X']['public_key'] = "0x04907b745916c763613654a9a679c6b04da97c142c2ad1f08ebe9412e9745fd9721d5237b" \
|
||||
"9374a2b3217da001c50481e83467cb98b1a9bd1ed50501638db1f08bd"
|
||||
|
||||
transaction_senders['Y'] = dict()
|
||||
transaction_senders['Y']['passphrase'] = "slight thunder cup divorce hawk paper blush memory shaft extend laundry bone"
|
||||
transaction_senders['Y']['username'] = "Navajowhite Goldenrod Rasbora"
|
||||
transaction_senders['Y']['address'] = "0x2a5ed44a7092404ae08369ffde6e54ce47e3761c"
|
||||
transaction_senders['Y']['public_key'] = "0x04245454f9fe931133388a228bd9ed98e36ad1969f76a027bf92d3a0f26a44ee168a2c790" \
|
||||
"35d4d1c49b0b932b2f093c3636a11bb8d893f4d719e4d61d9bd52f278"
|
||||
|
||||
transaction_senders['Z'] = dict()
|
||||
transaction_senders['Z']['passphrase'] = "congress club image core lens hope clever transfer tiny true alien favorite"
|
||||
transaction_senders['Z']['username'] = "Ill Brisk Cleanerwrasse"
|
||||
transaction_senders['Z']['address'] = "29ff033fa04f5ba4192823ddbf23f8397809995c"
|
||||
transaction_senders['Z']['public_key'] = "0x04563c506aaf728a37e19b00dd3db3d0e44acd01069191a68e4063ed09bc47e91eac5e0c" \
|
||||
"7c77fae568960ec9ce7f1ba7b49d3b930389e387665dcde213c344eafc"
|
||||
|
||||
transaction_recipients = dict()
|
||||
|
||||
transaction_recipients['A'] = dict()
|
||||
transaction_recipients['A']['passphrase'] = "lesson pull call also fork credit cycle spray purity force sail hub"
|
||||
transaction_recipients['A']['username'] = "Genuine Sane Islandcanary"
|
||||
transaction_recipients['A']['address'] = 'd630b1224683a438582e3e14e35ba5e03513eaab'
|
||||
transaction_recipients['A']['public_key'] = "0x040f0b01746f3bad9887ffcd6f2099382b0713bcbaa00883709200b17fc65563d9278" \
|
||||
"200ac1e095e0c5993e95427b44aa93e981798b19b4256f1058125518ec07b"
|
||||
|
||||
transaction_recipients['B'] = dict()
|
||||
transaction_recipients['B']['passphrase'] = "night grit town donate length zoo meat collect vapor brush topic check"
|
||||
transaction_recipients['B']['username'] = "Glass Poised Spoonbill"
|
||||
transaction_recipients['B']['address'] = "1fc705a336a0a2e48eb3c953ce577e591f2767ad"
|
||||
transaction_recipients['B']['public_key'] = "0x0476459f2e03920dec063bab5e7e85443bda598a97746cab7eb306d9bcb99fe2548af" \
|
||||
"301922bc84030ad181876401faef0eda4019fdae1a5cc1b41435536317906"
|
||||
|
||||
transaction_recipients['C'] = dict()
|
||||
transaction_recipients['C']['passphrase'] = "pig public focus dream mango match use aunt machine potato depend toilet"
|
||||
transaction_recipients['C']['username'] = "Concrete Khaki Velvetcrab"
|
||||
transaction_recipients['C']['address'] = "702995aa7dc6aad543661aab35494f4986022659"
|
||||
transaction_recipients['C']['public_key'] = "0x04547d1bdec51a73b4df80c2a6bfa873e38f9c6f5ebeb71ab0350e3baf6e545b34a888" \
|
||||
"f34e5e26889a79cbb4b28d32c82fce052788172328a3ddb59970978de14f"
|
||||
|
||||
transaction_recipients['D'] = dict()
|
||||
transaction_recipients['D']['passphrase'] = "dog smooth myth loud unveil excite chimney cousin rain license cross palm"
|
||||
transaction_recipients['D']['username'] = "Blushing Occasional Nudibranch"
|
||||
transaction_recipients['D']['address'] = "e71c43413559e40ebcb602fb95c33662926cc000"
|
||||
transaction_recipients['D']['public_key'] = "0x041ff79cb8e5a8280bcc80d9d28810ae08c96b3558238e0c87f806baffdd3fbeccde9a" \
|
||||
"041c745fc15ffa7ec428a135edb11ff32104e054de644194509c733e5269"
|
||||
|
||||
transaction_recipients['E'] = dict()
|
||||
transaction_recipients['E']['passphrase'] = "private dial force harsh crunch bottom draw fish image used notable school"
|
||||
transaction_recipients['E']['username'] = "Devoted Frank Alpineroadguidetigerbeetle"
|
||||
transaction_recipients['E']['address'] = "5c1d183ca67f651d864a2c88318c05dc0e32f188"
|
||||
transaction_recipients['E']['public_key'] = "0x0429f5d1588be860c24ff57b699366bf5e3e25fc697be5e204adfd4cd438de42db5f2" \
|
||||
"a6fd860b7431a3c91f5f2e1bc8703c0e92b8beb19c8979c1e11550b9e7ce6"
|
||||
transaction_recipients['F'] = dict()
|
||||
transaction_recipients['F']['passphrase'] = "gather please ritual cactus plunge cruel foil armor sock topic fence urge"
|
||||
transaction_recipients['F']['username'] = "Pretty Super Myna"
|
||||
transaction_recipients['F']['address'] = "81e0b035fe73f4f1aefeb5c75537c7d9b423149f"
|
||||
transaction_recipients['F']['public_key'] = "0x04adbd5386508ecfb493d663f3c197aeebc2e3953492680489ee66d5d208e573c20eb" \
|
||||
"4f0cead0c5634f29df6921f08f8fb5b3cb8a15cb91330d58d37b3358783e6"
|
||||
transaction_recipients['G'] = dict()
|
||||
transaction_recipients['G']['passphrase'] = \
|
||||
"spray tired dentist case please list occur envelope they across picture spatial"
|
||||
transaction_recipients['G']['username'] = "Acrobatic Foolish Marabou"
|
||||
transaction_recipients['G']['address'] = "b1f8b0db0f12e45d7712625bc53535235d245a9f"
|
||||
transaction_recipients['G']['public_key'] = "0x04659aa00141aa2f9a0658f56427f3ee06abb7218f5c8a5c6afd377581fde3c474645" \
|
||||
"334f7cfd2faeac627e65536dca578bc0bad3f91bba0862de5ebac98ef4eeb"
|
||||
|
||||
transaction_recipients['H'] = dict()
|
||||
transaction_recipients['H']['passphrase'] = \
|
||||
"rail change device celery metal husband panda avoid often shiver payment real"
|
||||
transaction_recipients['H']['username'] = "Prudent Big Nerka"
|
||||
transaction_recipients['H']['address'] = "0xe9676a57a28800d83301d9d3f9c77fd2e933609c"
|
||||
transaction_recipients['H']['public_key'] = "0x042b6405c7a4c34342c950cfb330f779ab27f49bc58f35e204fd927abda4706f1b9367" \
|
||||
"cd68166661a62266447ecfe4f320280174e87f3c7867a3c6583c1933ab5a"
|
||||
|
||||
transaction_recipients['I'] = dict()
|
||||
transaction_recipients['I']['passphrase'] = \
|
||||
"engine equal wisdom saddle icon spring express limit surprise salute unique rose"
|
||||
transaction_recipients['I']['username'] = "Teal Sienna Perch"
|
||||
transaction_recipients['I']['address'] = "0x4e6c60f344b13d730682f0a6d8ae1255c75e730e"
|
||||
transaction_recipients['I']['public_key'] = "0x041f67fd8c2c4fd2ece77b51a72bb9e31ba8848af8585b4c7e8fcf8f77a750faa868" \
|
||||
"ada014c77fcb11b9a5342e188d8892b669320dc4f9e6283fb7bdf1dd33897a"
|
||||
|
||||
transaction_recipients['J'] = dict()
|
||||
transaction_recipients['J']['passphrase'] = "estate add believe wonder riot used brain wing lecture misery order echo"
|
||||
transaction_recipients['J']['username'] = "Seashell Amazing Gemsbuck"
|
||||
transaction_recipients['J']['address'] = "0xa03a75b7888cac24b35b4d1f5924406f3b491795"
|
||||
transaction_recipients['J']['public_key'] = "0x04e7e481932714c1a13ffb29fc79446ee9f30d27b4dec47af9dcd20c68a771c2520a0e" \
|
||||
"7a80804ff59a750693492a65be9682d0b850b4080d976cf9e43ff37ec841"
|
||||
|
||||
transaction_recipients['K'] = dict()
|
||||
transaction_recipients['K'][
|
||||
'passphrase'] = "core orphan clerk involve trade admit exhibit valid short canvas disorder world"
|
||||
transaction_recipients['K']['username'] = "Upright Authorized Waterstrider"
|
||||
transaction_recipients['K']['address'] = "0x6a1aC3a7a5A064FF6E0f169E0d384703245556b4"
|
||||
transaction_recipients['K']['public_key'] = "0x04d1c98a6e25a7ea0241349a41709c5dc51c7c1d59224076d13d1ebe16671eedc8f" \
|
||||
"3b23ab95db679a9124752ed77339424034fd9a12f0184894c0d7a25710d2f3c"
|
||||
|
||||
recovery_users = {
|
||||
"radar blur cabbage chef fix engine embark joy scheme fiction master release":
|
||||
"0xaC39b311DCEb2A4b2f5d8461c1cdaF756F4F7Ae9",
|
||||
"fruit wave dwarf banana earth journey tattoo true farm silk olive fence":
|
||||
"0x31a4aD7593D06D049b3Cc07aB5430264Bf7e069f",
|
||||
"board flee heavy tunnel powder denial science ski answer betray cargo cat":
|
||||
"0x7B9BC6897BbbEbD5e3F1D71e1d0Af035F35a714a",
|
||||
"vessel ladder alter error federal sibling chat ability sun glass valve picture":
|
||||
"0x93bb483bD2D0190d48778bA21F7D85F793bBcEd0",
|
||||
"legal winner thank year wave sausage worth useful legal winner thank yellow":
|
||||
"0x58A57ed9d8d624cBD12e2C467D34787555bB1b25",
|
||||
"abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon "
|
||||
"abandon abandon abandon abandon abandon abandon abandon abandon abandon art":
|
||||
"0xF278cF59F82eDcf871d630F28EcC8056f25C1cdb",
|
||||
"legal winner thank year wave sausage worth useful legal winner thank year wave sausage worth useful legal winner "
|
||||
"thank year wave sausage worth title":
|
||||
"0x2f826cb22E80a2c40f149Ecb92b2Fa5ecBf67170"
|
||||
}
|
||||
@@ -506,7 +506,7 @@ class BaseView(object):
|
||||
|
||||
@staticmethod
|
||||
def get_unique_amount():
|
||||
return '0.00%s' % datetime.now().strftime('%-d%-H%-M%-S').strip('0')
|
||||
return '0.000%s' % datetime.now().strftime('%-d%-H%-M%-S').strip('0')
|
||||
|
||||
@staticmethod
|
||||
def get_random_chat_name():
|
||||
|
||||
@@ -58,8 +58,8 @@ class DappsView(BaseView):
|
||||
from views.web_views.base_web_view import BaseWebView
|
||||
web_view = BaseWebView(self.driver)
|
||||
if not self.enter_url_editbox.is_element_displayed():
|
||||
web_view.open_tabs_button.wait_and_click()
|
||||
web_view.open_new_tab_plus_button.click()
|
||||
web_view.open_tabs_button.click_if_shown()
|
||||
web_view.open_new_tab_plus_button.click_if_shown()
|
||||
self.enter_url_editbox.wait_for_visibility_of_element(20)
|
||||
self.enter_url_editbox.click()
|
||||
self.enter_url_editbox.send_keys(url)
|
||||
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 23 KiB |
@@ -280,7 +280,7 @@ class HomeView(BaseView):
|
||||
if user_names_to_add:
|
||||
for user_name in user_names_to_add:
|
||||
if len(user_names_to_add) > 5:
|
||||
chat_view.search_by_keyword(user_name[:4])
|
||||
chat_view.search_by_keyword(user_name[:5])
|
||||
chat_view.get_username_checkbox(user_name).click()
|
||||
chat_view.search_input.clear()
|
||||
else:
|
||||
|
||||
@@ -25,11 +25,11 @@ dapps = {
|
||||
}
|
||||
}
|
||||
wallets = {
|
||||
'default' : {
|
||||
'default': {
|
||||
'name': 'Ethereum account1',
|
||||
'address': '0x%s' % transaction_recipients['K']['address']
|
||||
},
|
||||
'generated' : {
|
||||
'generated': {
|
||||
'name': 'dapp',
|
||||
'address': '0x6a0e09b209eEa2a448B2361dD27c06Fc1f316e6c'
|
||||
},
|
||||
|
||||
@@ -235,8 +235,11 @@ class WalletView(BaseView):
|
||||
if not asset_value.is_element_displayed():
|
||||
self.element = asset_value.scroll_to_element()
|
||||
try:
|
||||
return float(asset_value.text.split()[0])
|
||||
value = float(asset_value.text.split()[0])
|
||||
self.driver.info("%s value is %s" % (asset, value))
|
||||
return value
|
||||
except ValueError:
|
||||
self.driver.info("No value for %s" % asset)
|
||||
return 0.0
|
||||
|
||||
def asset_by_name(self, asset_name):
|
||||
|
||||
@@ -63,7 +63,7 @@ class BaseWebView(BaseView):
|
||||
self.driver.info("Closing all tabs")
|
||||
self.close_all_button.click()
|
||||
else:
|
||||
self.driver.info("Removing '%s' from recent websites")
|
||||
self.driver.info("Removing '%s' from recent websites" % name)
|
||||
close_button = Button(self.driver,
|
||||
xpath="//*[contains(@text, '%s')]/../../../../*[@content-desc='empty-tab']" % name)
|
||||
close_button.scroll_to_element()
|
||||
|
||||
@@ -958,7 +958,6 @@
|
||||
"notifications-switch": "Show notifications",
|
||||
"notifications-non-contacts": "Notifications from non-contacts",
|
||||
"notifications-transactions": "Wallet transactions",
|
||||
"local-notifications": "Local notifications",
|
||||
"send-push-notifications": "Send Push Notifications",
|
||||
"send-push-notifications-description": "When disabled, the person receiving your messages won't be notified of their arrival",
|
||||
"push-notifications-server-enabled": "Server enabled",
|
||||
|
||||
@@ -1447,11 +1447,6 @@
|
||||
resolved "https://registry.yarnpkg.com/@types/color-name/-/color-name-1.1.1.tgz#1c1261bbeaa10a8055bbc5d8ab84b7b2afc846a0"
|
||||
integrity sha512-rr+OQyAjxze7GgWrSaJwydHStIhHq2lvY3BOC2Mj7KnzI7XK0Uw1TOOdI9lDoajEbSWLiYgoo4f1R51erQfhPQ==
|
||||
|
||||
"@types/events@*":
|
||||
version "3.0.0"
|
||||
resolved "https://registry.yarnpkg.com/@types/events/-/events-3.0.0.tgz#2862f3f58a9a7f7c3e78d79f130dd4d71c25c2a7"
|
||||
integrity sha512-EaObqwIvayI5a8dCzhFrjKzVwKLxjoG9T6Ppd5CEo07LRKfQ8Yokw54r5+Wq7FaBQ+yXRvQAYPrHwya1/UFt9g==
|
||||
|
||||
"@types/hammerjs@^2.0.36":
|
||||
version "2.0.36"
|
||||
resolved "https://registry.yarnpkg.com/@types/hammerjs/-/hammerjs-2.0.36.tgz#17ce0a235e9ffbcdcdf5095646b374c2bf615a4c"
|
||||
@@ -1487,26 +1482,6 @@
|
||||
resolved "https://registry.yarnpkg.com/@types/prettier/-/prettier-1.19.1.tgz#33509849f8e679e4add158959fdb086440e9553f"
|
||||
integrity sha512-5qOlnZscTn4xxM5MeGXAMOsIOIKIbh9e85zJWfBRVPlRMEVawzoPhINYbRGkBZCI8LxvBe7tJCdWiarA99OZfQ==
|
||||
|
||||
"@types/prop-types@*":
|
||||
version "15.7.3"
|
||||
resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.7.3.tgz#2ab0d5da2e5815f94b0b9d4b95d1e5f243ab2ca7"
|
||||
integrity sha512-KfRL3PuHmqQLOG+2tGpRO26Ctg+Cq1E01D2DMriKEATHgWLfeNDmq9e29Q9WIky0dQ3NPkd1mzYH8Lm936Z9qw==
|
||||
|
||||
"@types/react-native@*":
|
||||
version "0.62.2"
|
||||
resolved "https://registry.yarnpkg.com/@types/react-native/-/react-native-0.62.2.tgz#f3e150f308c27089cefbcbfa3eb6cc14db279b2f"
|
||||
integrity sha512-oIUIbqZNN9vRnGKWHYbTVp/GyTqdaM5mfy1s4zsi6BYvHAaFOPZ32IrhIHno/A5XOv4wuGfE7g5fliDk/H0+/Q==
|
||||
dependencies:
|
||||
"@types/react" "*"
|
||||
|
||||
"@types/react@*":
|
||||
version "16.9.34"
|
||||
resolved "https://registry.yarnpkg.com/@types/react/-/react-16.9.34.tgz#f7d5e331c468f53affed17a8a4d488cd44ea9349"
|
||||
integrity sha512-8AJlYMOfPe1KGLKyHpflCg5z46n0b5DbRfqDksxBLBTUpB75ypDBAO9eCUcjNwE6LCUslwTz00yyG/X9gaVtow==
|
||||
dependencies:
|
||||
"@types/prop-types" "*"
|
||||
csstype "^2.2.0"
|
||||
|
||||
"@types/stack-utils@^1.0.1":
|
||||
version "1.0.1"
|
||||
resolved "https://registry.yarnpkg.com/@types/stack-utils/-/stack-utils-1.0.1.tgz#0a851d3bd96498fa25c33ab7278ed3bd65f06c3e"
|
||||
@@ -2822,11 +2797,6 @@ cssstyle@^2.0.0:
|
||||
dependencies:
|
||||
cssom "~0.3.6"
|
||||
|
||||
csstype@^2.2.0:
|
||||
version "2.6.10"
|
||||
resolved "https://registry.yarnpkg.com/csstype/-/csstype-2.6.10.tgz#e63af50e66d7c266edb6b32909cfd0aabe03928b"
|
||||
integrity sha512-D34BqZU4cIlMCY93rZHbrq9pjTAQJ3U8S8rfBqjwHxkGPThWFjzZDQpgMJY0QViLxth6ZKYiwFBo14RdN44U/w==
|
||||
|
||||
damerau-levenshtein@^1.0.0:
|
||||
version "1.0.6"
|
||||
resolved "https://registry.yarnpkg.com/damerau-levenshtein/-/damerau-levenshtein-1.0.6.tgz#143c1641cb3d85c60c32329e26899adea8701791"
|
||||
@@ -6622,17 +6592,6 @@ react-native-camera-kit@^8.0.4:
|
||||
version "1.4.2"
|
||||
resolved "git+https://github.com/status-im/react-native-config.git#c3e58d76fed923aaf88eadc5073099fab5ecb346"
|
||||
|
||||
react-native-dark-mode@^0.2.2:
|
||||
version "0.2.2"
|
||||
resolved "https://registry.yarnpkg.com/react-native-dark-mode/-/react-native-dark-mode-0.2.2.tgz#4faa335e36330bfca832ba8b3d2bd84c7b880381"
|
||||
integrity sha512-2vhWOOimU7DRKYjCU/pdv0+JpnGKURq5+c7bre093Jtzk57HtlJfd+ViibbC9Y8zh0viIOyKtfL5mYhVhZ6Crw==
|
||||
dependencies:
|
||||
"@types/events" "*"
|
||||
"@types/react" "*"
|
||||
"@types/react-native" "*"
|
||||
events "^3.0.0"
|
||||
toolkit.ts "^0.0.2"
|
||||
|
||||
react-native-device-info@^7.4.0:
|
||||
version "7.4.0"
|
||||
resolved "https://registry.yarnpkg.com/react-native-device-info/-/react-native-device-info-7.4.0.tgz#694deddfc6de0ff7268ff463d84693ee980c683c"
|
||||
@@ -7979,11 +7938,6 @@ toidentifier@1.0.0:
|
||||
resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.0.tgz#7e1be3470f1e77948bc43d94a3c8f4d7752ba553"
|
||||
integrity sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==
|
||||
|
||||
toolkit.ts@^0.0.2:
|
||||
version "0.0.2"
|
||||
resolved "https://registry.yarnpkg.com/toolkit.ts/-/toolkit.ts-0.0.2.tgz#91bde730e5e6ad1a22146cdaf83f4a52721cf3b2"
|
||||
integrity sha512-yJJTVbCwiD6AfFgReewJCGJuODmyZUeL1sDjnxp33t0UBxnezgQrLbz/F9++RC28CTlk5u5pVji4TbeondYEkw==
|
||||
|
||||
tough-cookie@^2.3.3, tough-cookie@~2.5.0:
|
||||
version "2.5.0"
|
||||
resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.5.0.tgz#cd9fb2a0aa1d5a12b473bd9fb96fa3dcff65ade2"
|
||||
|
||||
Reference in New Issue
Block a user