From acd7e56d1d025e25143de5ae492cf3094a00e272 Mon Sep 17 00:00:00 2001 From: Andrea Maria Piana Date: Thu, 12 Sep 2019 11:41:25 +0200 Subject: [PATCH] Add gfycat/identicon from status-go Signed-off-by: yenda --- clj-rn.conf.edn | 1 - externs.js | 2 + mobile/js_files/package.json | 1 - .../status/ethereum/module/StatusModule.java | 11 + .../react-native-status/desktop/rctstatus.cpp | 14 + .../react-native-status/desktop/rctstatus.h | 3 + .../ios/RCTStatus/RCTStatus.m | 8 + src/status_im/chat/models.cljs | 11 +- src/status_im/contact/db.cljs | 8 +- src/status_im/group_chats/core.cljs | 13 +- src/status_im/js_dependencies.cljs | 1 - src/status_im/multiaccounts/core.cljs | 18 +- src/status_im/native_module/core.cljs | 13 + src/status_im/subs.cljs | 20 +- src/status_im/transport/message/core.cljs | 5 +- src/status_im/transport/message/protocol.cljs | 2 + .../ui/components/chat_icon/screen.cljs | 37 +- .../ui/screens/chat/message/message.cljs | 9 +- src/status_im/ui/screens/chat/photos.cljs | 5 +- src/status_im/ui/screens/chat/utils.cljs | 2 +- src/status_im/ui/screens/chat/views.cljs | 1 - .../ui/screens/contacts_list/views.cljs | 10 +- .../ui/screens/hardwallet/login/views.cljs | 8 +- src/status_im/ui/screens/keycard/views.cljs | 13 +- .../ui/screens/multiaccounts/login/views.cljs | 15 +- .../ui/screens/profile/contact/views.cljs | 74 +- .../ui/screens/profile/user/views.cljs | 9 +- .../ui/screens/wallet/components/views.cljs | 12 +- src/status_im/utils/gfycat/adjectives.cljs | 1398 -------------- src/status_im/utils/gfycat/animals.cljs | 1713 ----------------- src/status_im/utils/gfycat/core.cljs | 32 +- src/status_im/utils/identicon.cljs | 14 +- status-go-version.json | 4 +- test/appium/tests/users.py | 90 +- test/cljs/status_im/test/chat/db.cljs | 20 +- test/cljs/status_im/test/chat/models.cljs | 32 +- .../status_im/test/chat/models/message.cljs | 61 +- test/cljs/status_im/test/contacts/db.cljs | 8 +- .../cljs/status_im/test/group_chats/core.cljs | 281 +-- test/cljs/status_im/test/pairing/core.cljs | 6 +- test/cljs/status_im/test/runner.cljs | 2 - test/cljs/status_im/test/transport/core.cljs | 1 + .../status_im/test/tribute_to_talk/core.cljs | 74 +- .../test/tribute_to_talk/whitelist.cljs | 106 +- .../status_im/test/utils/gfycat/core.cljs | 14 - .../test/utils/universal_links/core.cljs | 62 +- 46 files changed, 613 insertions(+), 3631 deletions(-) delete mode 100644 src/status_im/utils/gfycat/adjectives.cljs delete mode 100644 src/status_im/utils/gfycat/animals.cljs delete mode 100644 test/cljs/status_im/test/utils/gfycat/core.cljs diff --git a/clj-rn.conf.edn b/clj-rn.conf.edn index ea9c124566..1db1c691a7 100644 --- a/clj-rn.conf.edn +++ b/clj-rn.conf.edn @@ -14,7 +14,6 @@ "react-native-status-keycard" "react-native-camera" "qrcode" - "identicon.js" "react-native-fs" "react-native-dialogs" "react-native-image-resizer" diff --git a/externs.js b/externs.js index 71cfecfd70..f4fef3bd7d 100644 --- a/externs.js +++ b/externs.js @@ -126,6 +126,8 @@ var TopLevel = { "exists" : function () {}, "extPost" : function () {}, "extractGroupMembershipSignatures" : function () {}, + "identicon": function() {}, + "generateAlias": function() {}, "fallbacks" : function () {}, "fetch" : function () {}, "firebase" : function () {}, diff --git a/mobile/js_files/package.json b/mobile/js_files/package.json index db05afa954..39a7022a74 100644 --- a/mobile/js_files/package.json +++ b/mobile/js_files/package.json @@ -16,7 +16,6 @@ "hermes-engine": "0.2.1", "hi-base32": "^0.5.0", "i18n-js": "^3.3.0", - "identicon.js": "git+https://github.com/status-im/identicon.js.git#v1.2.1-status", "qrcode": "^1.4.1", "react": "16.8.6", "react-dom": "16.4.2", diff --git a/modules/react-native-status/android/src/main/java/im/status/ethereum/module/StatusModule.java b/modules/react-native-status/android/src/main/java/im/status/ethereum/module/StatusModule.java index 30a9a30dde..930c89192b 100644 --- a/modules/react-native-status/android/src/main/java/im/status/ethereum/module/StatusModule.java +++ b/modules/react-native-status/android/src/main/java/im/status/ethereum/module/StatusModule.java @@ -1154,6 +1154,17 @@ class StatusModule extends ReactContextBaseJavaModule implements LifecycleEventL StatusThreadPoolExecutor.getInstance().execute(r); } + @ReactMethod(isBlockingSynchronousMethod = true) + public String generateAlias(final String seed) { + return Statusgo.generateAlias(seed); + } + + @ReactMethod(isBlockingSynchronousMethod = true) + public String identicon(final String seed) { + return Statusgo.identicon(seed); + } + + @ReactMethod public void getNodesFromContract(final String rpcEndpoint, final String contractAddress, final Callback callback) { Log.d(TAG, "getNodesFromContract"); diff --git a/modules/react-native-status/desktop/rctstatus.cpp b/modules/react-native-status/desktop/rctstatus.cpp index 1b0b8439a2..54b035395d 100644 --- a/modules/react-native-status/desktop/rctstatus.cpp +++ b/modules/react-native-status/desktop/rctstatus.cpp @@ -490,3 +490,17 @@ void RCTStatus::chaosModeUpdate(bool on, double callbackId) { d->bridge->invokePromiseCallback(callbackId, QVariantList{result}); }, on, callbackId); } + +QString RCTStatus::generateAlias(QString publicKey) { + Q_D(RCTStatus); + qCDebug(RCTSTATUS) << "::generateAlias call"; + //return GenerateGfycat(publicKey.toUtf8().data()); + return "test"; +} + +QString RCTStatus::identicon(QString publicKey) { + Q_D(RCTStatus); + qCDebug(RCTSTATUS) << "::identicon call"; + //return Identicon(publicKey.toUtf8().data()); + return "test"; +} diff --git a/modules/react-native-status/desktop/rctstatus.h b/modules/react-native-status/desktop/rctstatus.h index 3828c26e48..ec6c43e12b 100644 --- a/modules/react-native-status/desktop/rctstatus.h +++ b/modules/react-native-status/desktop/rctstatus.h @@ -71,6 +71,9 @@ public: Q_INVOKABLE static bool JSCEnabled(); Q_INVOKABLE static void statusGoEventCallback(const char* event); + Q_INVOKABLE QString identicon(QString publicKey); + Q_INVOKABLE QString generateAlias(QString publicKey); + void emitStatusGoEvent(QString event); Q_SIGNALS: diff --git a/modules/react-native-status/ios/RCTStatus/RCTStatus.m b/modules/react-native-status/ios/RCTStatus/RCTStatus.m index 028796c982..2fdef2338e 100644 --- a/modules/react-native-status/ios/RCTStatus/RCTStatus.m +++ b/modules/react-native-status/ios/RCTStatus/RCTStatus.m @@ -594,6 +594,14 @@ RCT_EXPORT_METHOD(callRPC:(NSString *)payload }); } +RCT_EXPORT_BLOCKING_SYNCHRONOUS_METHOD(generateAlias:(NSString *)publicKey) { + return StatusgoGenerateAlias(publicKey); +} + +RCT_EXPORT_BLOCKING_SYNCHRONOUS_METHOD(identicon:(NSString *)publicKey) { + return StatusgoIdenticon(publicKey); +} + RCT_EXPORT_METHOD(callPrivateRPC:(NSString *)payload callback:(RCTResponseSenderBlock)callback) { dispatch_async( dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ diff --git a/src/status_im/chat/models.cljs b/src/status_im/chat/models.cljs index f9a995e5a1..aa28194719 100644 --- a/src/status_im/chat/models.cljs +++ b/src/status_im/chat/models.cljs @@ -85,7 +85,7 @@ [chat-id {:keys [db now]}] (let [name (get-in db [:contacts/contacts chat-id :name])] {:chat-id chat-id - :name (or name (gfycat/generate-gfy chat-id)) + :name (or name "") :color (rand-nth colors/chat-colors) :group-chat false :is-active true @@ -145,12 +145,11 @@ #(chats-store/save-chat % (get-in % [:db :chats chat-id]))))) (fx/defn deactivate-chat + "Deactivate chat in db, no side effects" [{:keys [db now] :as cofx} chat-id] - (fx/merge cofx - {:db (-> db - (assoc-in [:chats chat-id :is-active] false) - (assoc-in [:current-chat-id] nil))} - #(chats-store/save-chat % (get-in % [:db :chats chat-id])))) + {:db (-> db + (assoc-in [:chats chat-id :is-active] false) + (assoc-in [:current-chat-id] nil))}) (fx/defn remove-chat "Removes chat completely from app, producing all necessary effects for that" diff --git a/src/status_im/contact/db.cljs b/src/status_im/contact/db.cljs index 613c4b20f0..73b7af0b1c 100644 --- a/src/status_im/contact/db.cljs +++ b/src/status_im/contact/db.cljs @@ -14,7 +14,7 @@ (spec/def :contact/fcm-token (spec/nilable string?)) (spec/def :contact/last-online (spec/nilable int?)) (spec/def :contact/last-updated (spec/nilable int?)) -(spec/def :contact/name :global/not-empty-string) +(spec/def :contact/name (spec/nilable string?)) (spec/def :contact/public-key :global/not-empty-string) (spec/def :contact/photo-path (spec/nilable string?)) @@ -27,11 +27,11 @@ (spec/def :contact/tribute-transaction (spec/nilable string?)) (spec/def :contact/contact (spec/keys :req-un [:contact/address - :contact/name - :contact/photo-path :contact/public-key :contact/system-tags] :opt-un [:contact/fcm-token + :contact/name + :contact/photo-path :contact/last-online :contact/last-updated :contact/tags @@ -65,7 +65,7 @@ (defn public-key->new-contact [public-key] {:name (gfycat/generate-gfy public-key) :address (ethereum/public-key->address public-key) - :photo-path (identicon/identicon public-key) + :identicon (identicon/identicon public-key) :public-key public-key :system-tags #{}}) diff --git a/src/status_im/group_chats/core.cljs b/src/status_im/group_chats/core.cljs index 1943a64f8e..810a86b4cd 100644 --- a/src/status_im/group_chats/core.cljs +++ b/src/status_im/group_chats/core.cljs @@ -4,6 +4,7 @@ [clojure.spec.alpha :as spec] [clojure.string :as string] [re-frame.core :as re-frame] + [status-im.multiaccounts.core :as multiaccounts] [status-im.multiaccounts.model :as multiaccounts.model] [status-im.utils.pairing :as pairing.utils] [status-im.chat.models :as models.chat] @@ -392,31 +393,31 @@ creator-contact (conj (format-message creator-contact (i18n/label :t/group-chat-created {:name chat-name - :member (:name creator-contact)}) + :member (multiaccounts/displayed-name creator-contact)}) (:created-at clock-values))) name-changed? (conj (format-message name-changed-author (i18n/label :t/group-chat-name-changed {:name chat-name - :member (:name name-changed-author)}) + :member (multiaccounts/displayed-name name-changed-author)}) (:name-changed-at clock-values))) (seq members-added) (concat (map #(format-message % - (i18n/label :t/group-chat-member-added {:member (:name %)}) + (i18n/label :t/group-chat-member-added {:member (multiaccounts/displayed-name %)}) (get-in clock-values [(:public-key %) :added])) contacts-added)) (seq members-joined) (concat (map #(format-message % - (i18n/label :t/group-chat-member-joined {:member (:name %)}) + (i18n/label :t/group-chat-member-joined {:member (multiaccounts/displayed-name %)}) (get-in clock-values [(:public-key %) :joined])) contacts-joined)) (seq admins-added) (concat (map #(format-message % - (i18n/label :t/group-chat-admin-added {:member (:name %)}) + (i18n/label :t/group-chat-admin-added {:member (multiaccounts/displayed-name %)}) (get-in clock-values [(:public-key %) :admin-added])) admins-added)) (seq members-removed) (concat (map #(format-message % - (i18n/label :t/group-chat-member-removed {:member (:name %)}) + (i18n/label :t/group-chat-member-removed {:member (multiaccounts/displayed-name %)}) (get-in clock-values [(:public-key %) :removed])) contacts-removed))))) diff --git a/src/status_im/js_dependencies.cljs b/src/status_im/js_dependencies.cljs index d333638419..5aa7a65a1f 100644 --- a/src/status_im/js_dependencies.cljs +++ b/src/status_im/js_dependencies.cljs @@ -3,7 +3,6 @@ (def Chance (js/require "chance")) (def emojis (js/require "emojilib")) (def phishing-detect (js/require "eth-phishing-detect")) -(def identicon-js (js/require "identicon.js")) (def BigNumber (js/require "bignumber.js")) (def web3-utils (js/require "web3-utils")) (def hi-base32 (js/require "hi-base32")) diff --git a/src/status_im/multiaccounts/core.cljs b/src/status_im/multiaccounts/core.cljs index 99e89e86f9..317f3e8f09 100644 --- a/src/status_im/multiaccounts/core.cljs +++ b/src/status_im/multiaccounts/core.cljs @@ -10,15 +10,27 @@ [status-im.utils.fx :as fx] [status-im.utils.handlers] [status-im.utils.gfycat.core :as gfycat] + [status-im.utils.identicon :as identicon] [status-im.utils.platform :as platform] [status-im.utils.utils :as utils])) -(defn displayed-name [account] - (let [name (or (:preferred-name account) (:name account))] +(defn displayed-name + "Use preferred name, name or alias in that order" + [{:keys [name preferred-name alias public-key]}] + (let [name (or preferred-name + name + alias)] (if (ens/is-valid-eth-name? name) (let [username (stateofus/username name)] (str "@" (or username name))) - (or name (gfycat/generate-gfy (:public-key account)))))) + (or name (gfycat/generate-gfy public-key))))) + +(defn displayed-photo + "If a photo-path is set use it, otherwise fallback on identicon or generate" + [{:keys [photo-path identicon public-key]}] + (or photo-path + identicon + (identicon/identicon public-key))) (re-frame/reg-fx ::chaos-mode-changed diff --git a/src/status_im/native_module/core.cljs b/src/status_im/native_module/core.cljs index 4f9fd8ef1d..1153350ec1 100644 --- a/src/status_im/native_module/core.cljs +++ b/src/status_im/native_module/core.cljs @@ -1,6 +1,7 @@ (ns status-im.native-module.core (:require [clojure.string :as string] [re-frame.core :as re-frame] + [status_im.utils.db :as utils.db] [status-im.react-native.js-dependencies :as rn-dependencies] [status-im.ui.components.react :as react] [status-im.utils.platform :as platform] @@ -265,3 +266,15 @@ ;; in unknown scenarios we also consider the device rooted to avoid degrading security :else (callback true))) + +(defn generate-gfycat + "Generate a 3 words random name based on the user public-key, synchronously" + [public-key] + {:pre [(utils.db/valid-public-key? public-key)]} + (.generateAlias (status) public-key)) + +(defn identicon + "Generate a icon based on a string, synchronously" + [seed] + (.identicon (status) seed)) + diff --git a/src/status_im/subs.cljs b/src/status_im/subs.cljs index 9ffea5d24e..2f28249099 100644 --- a/src/status_im/subs.cljs +++ b/src/status_im/subs.cljs @@ -18,6 +18,7 @@ [status-im.group-chats.db :as group-chats.db] [status-im.i18n :as i18n] [status-im.multiaccounts.model :as multiaccounts.model] + [status-im.multiaccounts.core :as multiaccounts] [status-im.multiaccounts.db :as multiaccounts.db] [status-im.pairing.core :as pairing] [status-im.tribute-to-talk.core :as tribute-to-talk] @@ -722,9 +723,10 @@ :<- [:contacts/contacts] :<- [:multiaccount] (fn [[contacts multiaccount] [_ id]] - (or (:photo-path (contacts id)) - (when (= id (:public-key multiaccount)) - (:photo-path multiaccount))))) + (multiaccounts/displayed-photo (or (contacts id) + (when (= id (:public-key multiaccount)) + multiaccount) + (contact.db/public-key->new-contact id))))) (re-frame/reg-sub :chats/unread-messages-number @@ -1510,15 +1512,9 @@ (re-frame/subscribe [:contacts/contacts-by-chat filter chat-id])]) (fn [[chat contacts] [_ chat-id]] (when (and chat (not (:group-chat chat))) - (cond - (:photo-path chat) - (:photo-path chat) - - (pos? (count contacts)) - (:photo-path (first contacts)) - - :else - (identicon/identicon chat-id))))) + (if (pos? (count contacts)) + (multiaccounts/displayed-photo (first contacts)) + (multiaccounts/displayed-photo chat))))) (re-frame/reg-sub :contacts/contact-by-address diff --git a/src/status_im/transport/message/core.cljs b/src/status_im/transport/message/core.cljs index eeb0cd3453..23d5e6987b 100644 --- a/src/status_im/transport/message/core.cljs +++ b/src/status_im/transport/message/core.cljs @@ -27,12 +27,13 @@ in order to stop receiving that message" [cofx now-in-s filter-chat-id message] (let [blocked-contacts (get-in cofx [:db :contacts/blocked] #{}) - {{:keys [payload sig timestamp ttl hash]} :message + {{:keys [payload timestamp]} :message metadata :metadata raw-payload :raw-payload} (add-raw-payload message) status-message (-> payload ethereum/hex-to-utf8 - transit/deserialize)] + transit/deserialize) + sig (-> metadata :author :publicKey)] (when (and sig status-message (not (blocked-contacts sig))) diff --git a/src/status_im/transport/message/protocol.cljs b/src/status_im/transport/message/protocol.cljs index 1501448098..32d107ca0f 100644 --- a/src/status_im/transport/message/protocol.cljs +++ b/src/status_im/transport/message/protocol.cljs @@ -82,6 +82,8 @@ :whisper-timestamp timestamp :raw-payload-hash (ethereum/sha3 (.-payload (:js-obj cofx))) + :alias (get-in cofx [:metadata :author :alias]) + :identicon (get-in cofx [:metadata :author :identicon]) :from signature :metadata (:metadata cofx) :js-obj (:js-obj cofx))]}] diff --git a/src/status_im/ui/components/chat_icon/screen.cljs b/src/status_im/ui/components/chat_icon/screen.cljs index f2f85df9cd..1c9e2a4219 100644 --- a/src/status_im/ui/components/chat_icon/screen.cljs +++ b/src/status_im/ui/components/chat_icon/screen.cljs @@ -1,6 +1,7 @@ (ns status-im.ui.components.chat-icon.screen (:require [clojure.string :as string] [re-frame.core :as re-frame.core] + [status-im.multiaccounts.core :as multiaccounts] [status-im.ui.components.chat-icon.styles :as styles] [status-im.ui.components.colors :as colors] [status-im.ui.components.react :as react] @@ -42,10 +43,10 @@ [react/view pending-inner-circle]]]) (defn chat-icon-view - [{:keys [photo-path added?] :as contact} _group-chat name _online styles & [hide-dapp?]] + [{:keys [photo-path added?] :as contact} group-chat name _online styles & [hide-dapp?]] [react/view (:container styles) - (if-not (string/blank? photo-path) - [photos/photo photo-path styles] + (if-not group-chat + [photos/photo (multiaccounts/displayed-photo contact) styles] [default-chat-icon name styles]) (when (and contact (not added?)) [pending-contact-badge styles])]) @@ -90,11 +91,11 @@ :default-chat-icon-text styles/default-chat-icon-text}]]) (defn contact-icon-view - [{:keys [photo-path name dapp?]} {:keys [container] :as styles}] + [{:keys [name dapp?] :as contact} {:keys [container] :as styles}] [react/view container - (if-not (string/blank? photo-path) - [photos/photo photo-path styles] - [default-chat-icon name styles]) + (if dapp? + [default-chat-icon name styles] + [photos/photo (multiaccounts/displayed-photo contact) styles]) (when dapp? [dapp-badge styles])]) @@ -168,14 +169,24 @@ [photos/photo photo-path styles] [default-chat-icon name styles])])) -(defn my-profile-icon [{{:keys [photo-path name]} :multiaccount - edit? :edit?}] +(defn my-profile-icon [{multiaccount :multiaccount + edit? :edit?}] (let [color colors/default-chat-color size 64] - [profile-icon-view photo-path name color edit? size {}])) + [profile-icon-view + (multiaccounts/displayed-photo multiaccount) + (multiaccounts/displayed-name multiaccount) + color + edit? + size {}])) -(defn my-profile-header-icon [{{:keys [photo-path name]} :multiaccount - edit? :edit?}] +(defn my-profile-header-icon [{multiaccount :multiaccount + edit? :edit?}] (let [color colors/default-chat-color size 40] - [profile-icon-view photo-path name color edit? size {}])) + [profile-icon-view + (multiaccounts/displayed-photo multiaccount) + (multiaccounts/displayed-name multiaccount) + color + edit? + size {}])) diff --git a/src/status_im/ui/screens/chat/message/message.cljs b/src/status_im/ui/screens/chat/message/message.cljs index 6c078ec41d..11697f426f 100644 --- a/src/status_im/ui/screens/chat/message/message.cljs +++ b/src/status_im/ui/screens/chat/message/message.cljs @@ -196,13 +196,14 @@ (:command content)) [command-status content])))) -(defview message-author-name [from name] - (letsubs [username [:contacts/contact-name-by-identity from]] - (chat.utils/format-author from style/message-author-name name))) +(defview message-author-name [alias name] + (letsubs [username [:contacts/contact-name-by-identity alias]] + (chat.utils/format-author alias style/message-author-name name))) (defn message-body [{:keys [last-in-group? display-photo? + alias display-username? from outgoing @@ -219,7 +220,7 @@ [react/view (style/group-message-view outgoing display-photo?) (when display-username? [react/touchable-opacity {:on-press #(re-frame/dispatch [:chat.ui/show-profile from])} - [message-author-name from (:name content)]]) + [message-author-name alias (:name content)]]) [react/view {:style (style/timestamp-content-wrapper outgoing)} child]]] [react/view (style/delivery-status outgoing) diff --git a/src/status_im/ui/screens/chat/photos.cljs b/src/status_im/ui/screens/chat/photos.cljs index 40c7962e22..5cf912f8dd 100644 --- a/src/status_im/ui/screens/chat/photos.cljs +++ b/src/status_im/ui/screens/chat/photos.cljs @@ -1,5 +1,6 @@ (ns status-im.ui.screens.chat.photos (:require [clojure.string :as string] + [status-im.multiaccounts.core :as multiaccounts] [status-im.ui.components.react :as react] [status-im.ui.screens.chat.styles.photos :as style] [status-im.ui.screens.profile.db :as profile.db] @@ -20,8 +21,6 @@ (defview member-photo [from & [size]] (letsubs [photo-path [:chats/photo-path from]] - (photo (if (string/blank? photo-path) - (identicon/identicon from) - photo-path) + (photo photo-path {:accessibility-label :member-photo :size (or size style/default-size)}))) diff --git a/src/status_im/ui/screens/chat/utils.cljs b/src/status_im/ui/screens/chat/utils.cljs index 89b654f7c0..04b8805bb3 100644 --- a/src/status_im/ui/screens/chat/utils.cljs +++ b/src/status_im/ui/screens/chat/utils.cljs @@ -21,7 +21,7 @@ name] :else [react/text {:style {:color colors/gray :font-size 12 :font-weight "400"}} - (gfycat/generate-gfy from)])) + from])) (defn format-reply-author [from username current-public-key style] (or (and (= from current-public-key) diff --git a/src/status_im/ui/screens/chat/views.cljs b/src/status_im/ui/screens/chat/views.cljs index ed8804bb0c..3ab8d46a9e 100644 --- a/src/status_im/ui/screens/chat/views.cljs +++ b/src/status_im/ui/screens/chat/views.cljs @@ -313,7 +313,6 @@ [{:keys [group-chat chat-id pending-invite-inviter-name contact] :as chat} modal?] (letsubs [messages [:chats/current-chat-messages-stream] - photo-path [:chats/photo-path chat-id] current-public-key [:multiaccount/public-key]] {:component-did-mount (fn [args] diff --git a/src/status_im/ui/screens/contacts_list/views.cljs b/src/status_im/ui/screens/contacts_list/views.cljs index e97b9d3939..a2fcaefdb0 100644 --- a/src/status_im/ui/screens/contacts_list/views.cljs +++ b/src/status_im/ui/screens/contacts_list/views.cljs @@ -1,5 +1,6 @@ (ns status-im.ui.screens.contacts-list.views (:require [re-frame.core :as re-frame] + [status-im.multiaccounts.core :as multiaccounts] [status-im.ui.components.colors :as colors] [status-im.ui.components.list.views :as list.views] [status-im.ui.components.react :as react] @@ -9,11 +10,12 @@ [status-im.ui.components.toolbar.view :as toolbar.view]) (:require-macros [status-im.utils.views :refer [defview letsubs]])) -(defn contacts-list-item [{:keys [public-key name photo-path] :as contact}] +(defn contacts-list-item [{:keys [public-key] :as contact}] [list.views/big-list-item - {:text name - :image-source photo-path - :action-fn #(re-frame/dispatch [:chat.ui/show-profile public-key])}]) + ;;TODO this should be done in a subscription + {:text (multiaccounts/displayed-name contact) + :image-source (multiaccounts/displayed-photo contact) + :action-fn #(re-frame/dispatch [:chat.ui/show-profile public-key])}]) (defview contacts-list [] (letsubs [blocked-contacts-count [:contacts/blocked-count] diff --git a/src/status_im/ui/screens/hardwallet/login/views.cljs b/src/status_im/ui/screens/hardwallet/login/views.cljs index 68fc1e089c..5b2804f718 100644 --- a/src/status_im/ui/screens/hardwallet/login/views.cljs +++ b/src/status_im/ui/screens/hardwallet/login/views.cljs @@ -1,6 +1,7 @@ (ns status-im.ui.screens.hardwallet.login.views (:require-macros [status-im.utils.views :refer [defview letsubs]]) - (:require [status-im.ui.screens.hardwallet.pin.views :as pin.views] + (:require [status-im.multiaccounts.core :as multiaccounts] + [status-im.ui.screens.hardwallet.pin.views :as pin.views] [status-im.ui.screens.hardwallet.connect.views :as connect.views] [status-im.ui.screens.hardwallet.components :as components] [status-im.ui.screens.hardwallet.login.styles :as styles] @@ -17,7 +18,7 @@ [re-frame.core :as re-frame])) (defview hardwallet-login [] - (letsubs [{:keys [photo-path name processing]} [:multiaccounts/login] + (letsubs [{:keys [photo-path name processing] :as account} [:multiaccounts/login] nfc-enabled? [:hardwallet/nfc-enabled?]] [react/keyboard-avoiding-view styles/container [status-bar/status-bar] @@ -30,7 +31,8 @@ [react/view styles/login-view [react/view styles/login-badge-container [react/view styles/login-badge - [photos/photo photo-path {:size styles/login-badge-image-size}] + ;;TODO this should be done in a subscription + [photos/photo (multiaccounts/displayed-photo account) {:size styles/login-badge-image-size}] [react/view [react/text {:style styles/login-badge-name :numberOfLines 1} diff --git a/src/status_im/ui/screens/keycard/views.cljs b/src/status_im/ui/screens/keycard/views.cljs index 9b1f5523c9..47e86e1a2e 100644 --- a/src/status_im/ui/screens/keycard/views.cljs +++ b/src/status_im/ui/screens/keycard/views.cljs @@ -1,6 +1,7 @@ (ns status-im.ui.screens.keycard.views (:require-macros [status-im.utils.views :refer [defview letsubs]]) - (:require [status-im.ui.components.react :as react] + (:require [status-im.multiaccounts.core :as multiaccounts] + [status-im.ui.components.react :as react] [status-im.ui.components.toolbar.view :as toolbar] [status-im.ui.screens.keycard.styles :as styles] [status-im.i18n :as i18n] @@ -362,7 +363,7 @@ enter-step [:hardwallet/pin-enter-step] status [:hardwallet/pin-status] error-label [:hardwallet/pin-error-label] - {:keys [address name photo-path]} [:multiaccounts/login]] + {:keys [address name] :as account} [:multiaccounts/login]] [react/view styles/container [toolbar/toolbar {:transparent? true @@ -397,7 +398,8 @@ :height 69 :justify-content :center :align-items :center} - [photos/photo photo-path {:size 61}] + ;;TODO this should be done in a subscription + [photos/photo (multiaccounts/displayed-photo account) {:size 61}] [react/view {:justify-content :center :align-items :center :width 24 @@ -439,7 +441,7 @@ (defview login-connect-card [] (letsubs [status [:hardwallet/pin-status] - {:keys [address name photo-path]} [:multiaccounts/login]] + {:keys [address name] :as account} [:multiaccounts/login]] (let [in-progress? (= status :verifying)] [react/view styles/container [toolbar/toolbar @@ -471,7 +473,8 @@ :height 69 :justify-content :center :align-items :center} - [photos/photo photo-path {:size 61}] + ;;TODO this should be done in a subscription + [photos/photo (multiaccounts/displayed-photo account) {:size 61}] [react/view {:justify-content :center :align-items :center :width 24 diff --git a/src/status_im/ui/screens/multiaccounts/login/views.cljs b/src/status_im/ui/screens/multiaccounts/login/views.cljs index a69edcf1bd..84b34f7626 100644 --- a/src/status_im/ui/screens/multiaccounts/login/views.cljs +++ b/src/status_im/ui/screens/multiaccounts/login/views.cljs @@ -1,6 +1,7 @@ (ns status-im.ui.screens.multiaccounts.login.views (:require [re-frame.core :as re-frame] [status-im.i18n :as i18n] + [status-im.multiaccounts.core :as multiaccounts] [status-im.ui.components.checkbox.view :as checkbox] [status-im.ui.components.colors :as colors] [status-im.ui.components.common.common :as components.common] @@ -29,19 +30,23 @@ (.blur password-text-input) (re-frame/dispatch [:multiaccounts.login.ui/password-input-submitted])) -(defn multiaccount-login-badge [photo-path name public-key] +(defn multiaccount-login-badge [{:keys [public-key] :as multiaccount}] [react/view styles/login-badge - [photos/photo photo-path {:size styles/login-badge-image-size}] + [photos/photo + ;;TODO this should be done in a subscription + (multiaccounts/displayed-photo multiaccount) + {:size styles/login-badge-image-size}] [react/view [react/text {:style styles/login-badge-name :ellipsize-mode :middle :numberOfLines 1} - name] + ;;TODO this should be done in a subscription + (multiaccounts/displayed-name multiaccount)] [react/text {:style styles/login-badge-pubkey} (utils/get-shortened-address public-key)]]]) (defview login [] - (letsubs [{:keys [photo-path name public-key error processing save-password? can-save-password?] :as multiaccount} [:multiaccounts/login] + (letsubs [{:keys [error processing save-password? can-save-password?] :as multiaccount} [:multiaccounts/login] can-navigate-back? [:can-navigate-back?] password-text-input (atom nil) sign-in-enabled? [:sign-in-enabled?] @@ -51,7 +56,7 @@ [login-toolbar can-navigate-back?] [react/scroll-view styles/login-view [react/view styles/login-badge-container - [multiaccount-login-badge photo-path name public-key] + [multiaccount-login-badge multiaccount] [react/view {:style styles/password-container :important-for-accessibility :no-hide-descendants} [text-input/text-input-with-label diff --git a/src/status_im/ui/screens/profile/contact/views.cljs b/src/status_im/ui/screens/profile/contact/views.cljs index a51db266d8..2c2a22a5f1 100644 --- a/src/status_im/ui/screens/profile/contact/views.cljs +++ b/src/status_im/ui/screens/profile/contact/views.cljs @@ -70,11 +70,12 @@ :render-fn render-detail}]) (defn profile-details [contact] - [react/view - [list-item/list-item {:type :section-header - :title :t/profile-details - :title-accessibility-label :profile-details}] - [profile-details-list-view contact]]) + (when contact + [react/view + [list-item/list-item {:type :section-header + :title :t/profile-details + :title-accessibility-label :profile-details}] + [profile-details-list-view contact]])) (defn block-contact-action [{:keys [blocked? public-key] :as contact}] [react/touchable-highlight {:on-press (if blocked? @@ -91,13 +92,15 @@ (i18n/label :t/unblock-contact) (i18n/label :t/block-contact))]]) -(defn- header-in-toolbar [{:keys [photo-path] :as account}] +(defn- header-in-toolbar [account] (let [displayed-name (multiaccounts/displayed-name account)] [react/view {:flex 1 :flex-direction :row :align-items :center :align-self :stretch} - [photos/photo photo-path {:size 40}] + ;;TODO this should be done in a subscription + [photos/photo (multiaccounts/displayed-photo account) + {:size 40}] [react/text {:style {:typography :title-bold :line-height 21 :margin-right 40 @@ -115,31 +118,32 @@ (views/defview profile [] (views/letsubs [list-ref (reagent/atom nil) contact [:contacts/current-contact]] - (let [header-in-toolbar (header-in-toolbar contact) - header (header contact) - content - [[list/action-list (actions contact) - {:container-style styles/action-container - :action-style styles/action - :action-label-style styles/action-label - :action-subtext-style styles/action-subtext - :action-separator-style styles/action-separator - :icon-opts styles/action-icon-opts}] - [react/view styles/contact-profile-details-container - [profile-details contact]] - [block-contact-action contact]] - generated-view (large-toolbar/generate-view - header-in-toolbar - toolbar/default-nav-back - nil - header - content - list-ref)] - [react/safe-area-view - {:style - (merge {:flex 1} - (when platform/ios? - {:margin-bottom tabs.styles/tabs-diff}))} - [status-bar/status-bar {:type :main}] - (:minimized-toolbar generated-view) - (:content-with-header generated-view)]))) \ No newline at end of file + (when contact + (let [header-in-toolbar (header-in-toolbar contact) + header (header contact) + content + [[list/action-list (actions contact) + {:container-style styles/action-container + :action-style styles/action + :action-label-style styles/action-label + :action-subtext-style styles/action-subtext + :action-separator-style styles/action-separator + :icon-opts styles/action-icon-opts}] + [react/view styles/contact-profile-details-container + [profile-details contact]] + [block-contact-action contact]] + generated-view (large-toolbar/generate-view + header-in-toolbar + toolbar/default-nav-back + nil + header + content + list-ref)] + [react/safe-area-view + {:style + (merge {:flex 1} + (when platform/ios? + {:margin-bottom tabs.styles/tabs-diff}))} + [status-bar/status-bar {:type :main}] + (:minimized-toolbar generated-view) + (:content-with-header generated-view)])))) diff --git a/src/status_im/ui/screens/profile/user/views.cljs b/src/status_im/ui/screens/profile/user/views.cljs index 5ef370700c..7d3264e76a 100644 --- a/src/status_im/ui/screens/profile/user/views.cljs +++ b/src/status_im/ui/screens/profile/user/views.cljs @@ -70,19 +70,20 @@ ;:icon :main-icons/link :accessibility-label :share-my-contact-code-button}]]]))) -(defn- header [{:keys [public-key photo-path] :as account}] +(defn- header [{:keys [photo-path] :as account}] [profile.components/profile-header {:contact account :allow-icon-change? true - :include-remove-action? (not= (identicon/identicon public-key) photo-path)}]) + :include-remove-action? (seq photo-path)}]) -(defn- header-in-toolbar [{:keys [photo-path] :as account}] +(defn- header-in-toolbar [account] (let [displayed-name (multiaccounts/displayed-name account)] [react/view {:flex 1 :flex-direction :row :align-items :center :align-self :stretch} - [photos/photo photo-path {:size 40}] + ;;TODO this should be done in a subscription + [photos/photo (multiaccounts/displayed-photo account) {:size 40}] [react/text {:style {:typography :title-bold :line-height 21 :margin-right 40 diff --git a/src/status_im/ui/screens/wallet/components/views.cljs b/src/status_im/ui/screens/wallet/components/views.cljs index 8fde60241c..38313f76d7 100644 --- a/src/status_im/ui/screens/wallet/components/views.cljs +++ b/src/status_im/ui/screens/wallet/components/views.cljs @@ -173,7 +173,10 @@ [react/view styles/recipient-container [react/view styles/recipient-icon (when contact - [photos/photo (:photo-path contact) {:size list.styles/image-size}])] + [photos/photo + ;;TODO this should be done in a subscription + (multiaccounts/displayed-photo contact) + {:size list.styles/image-size}])] [react/view {:style styles/recipient-name} [react/text {:style (styles/participant true) :accessibility-label (if request? :contact-name-text :recipient-name-text) @@ -186,7 +189,10 @@ (defn render-contact [contact request?] [list/touchable-item #(re-frame/dispatch [:wallet/fill-request-from-contact contact request?]) [list/item - [photos/photo (:photo-path contact) {:size list.styles/image-size}] + [photos/photo + ;;TODO this should be done in a subscription + (multiaccounts/displayed-photo contact) + {:size list.styles/image-size}] [list/item-content [list/item-primary {:accessibility-label :contact-name-text} (multiaccounts/displayed-name contact)] @@ -333,4 +339,4 @@ (i18n/label :t/sidechain-text {:sidechain (get-in ethereum/chains [(ethereum/chain-id->chain-keyword network-id) :name] "Unknown")}) :else - (i18n/label :t/mainnet-text))]]])) \ No newline at end of file + (i18n/label :t/mainnet-text))]]])) diff --git a/src/status_im/utils/gfycat/adjectives.cljs b/src/status_im/utils/gfycat/adjectives.cljs deleted file mode 100644 index 13185d8f0d..0000000000 --- a/src/status_im/utils/gfycat/adjectives.cljs +++ /dev/null @@ -1,1398 +0,0 @@ -(ns status-im.utils.gfycat.adjectives) - -;Names are only deterministic as long as word lists do not change! -;If you change this list, please also update the tests at: -; -; - cljs/status_im/test/utils/gfycat/core.cljs - - -(def data - ["able" - "absolute" - "academic" - "acceptable" - "acclaimed" - "accomplished" - "accurate" - "aching" - "acidic" - "acrobatic" - "adorable" - "adventurous" - "babyish" - "back" - "baggy" - "bare" - "basic" - "beautiful" - "belated" - "beloved" - "bitter" - "calculating" - "calm" - "candid" - "canine" - "capital" - "carefree" - "careful" - "careless" - "caring" - "cautious" - "cavernous" - "celebrated" - "charming" - "damp" - "dangerous" - "dapper" - "daring" - "dark" - "darling" - "dazzling" - "deadly" - "deafening" - "dear" - "dearest" - "each" - "eager" - "early" - "earnest" - "easy" - "easygoing" - "ecstatic" - "edible" - "educated" - "elderly" - "fabulous" - "failing" - "faint" - "fair" - "faithful" - "familiar" - "famous" - "fancy" - "fantastic" - "far" - "faraway" - "farflung" - "faroff" - "gargantuan" - "gaseous" - "general" - "generous" - "gentle" - "genuine" - "giant" - "giddy" - "gigantic" - "hairy" - "half" - "handmade" - "handsome" - "handy" - "happy" - "happygolucky" - "hard" - "icky" - "icy" - "ideal" - "idealistic" - "identical" - "idle" - "idolized" - "ill" - "jaded" - "jagged" - "jampacked" - "kaleidoscopic" - "keen" - "lanky" - "large" - "last" - "lasting" - "lavish" - "lawful" - "madeup" - "magnificent" - "majestic" - "major" - "mammoth" - "marvelous" - "married" - "naive" - "narrow" - "nasty" - "natural" - "oblong" - "obvious" - "occasional" - "oily" - "palatable" - "pale" - "paltry" - "parallel" - "parched" - "partial" - "passionate" - "past" - "pastel" - "peaceful" - "peppery" - "perfect" - "perfumed" - "quaint" - "qualified" - "radiant" - "ragged" - "rapid" - "rare" - "rash" - "raw" - "recent" - "reckless" - "rectangular" - "safe" - "salty" - "same" - "sandy" - "sane" - "sarcastic" - "sardonic" - "satisfied" - "scaly" - "scarce" - "scary" - "scented" - "scholarly" - "scientific" - "scornful" - "scratchy" - "scrawny" - "second" - "secondary" - "secret" - "selfassured" - "selfreliant" - "sentimental" - "single" - "talkative" - "tall" - "tame" - "tan" - "tangible" - "tart" - "tasty" - "tattered" - "taut" - "tedious" - "teeming" - "ultimate" - "unaware" - "uncommon" - "unconscious" - "understated" - "unequaled" - "vacant" - "vague" - "vain" - "valid" - "wan" - "warlike" - "warm" - "warmhearted" - "warped" - "wary" - "wasteful" - "watchful" - "waterlogged" - "watery" - "wavy" - "weak" - "weird" - "yawning" - "yearly" - "zany" - "active" - "actual" - "adept" - "admirable" - "admired" - "adolescent" - "adorable" - "adored" - "advanced" - "affectionate" - "afraid" - "aged" - "aggravating" - "beneficial" - "best" - "better" - "bewitched" - "big" - "bighearted" - "biodegradable" - "bitesized" - "cheerful" - "cheery" - "chief" - "chilly" - "chubby" - "circular" - "classic" - "clean" - "clear" - "clearcut" - "clever" - "close" - "closed" - "decent" - "decimal" - "decisive" - "deep" - "defenseless" - "defensive" - "defiant" - "deficient" - "definite" - "definitive" - "delayed" - "delectable" - "delicious" - "elaborate" - "elastic" - "elated" - "electric" - "elegant" - "elementary" - "elliptical" - "fast" - "fatal" - "favorable" - "favorite" - "fearless" - "feisty" - "feline" - "few" - "fickle" - "gifted" - "giving" - "glamorous" - "glaring" - "glass" - "gleaming" - "gleeful" - "glistening" - "glittering" - "gross" - "hardtofind" - "harmful" - "harmless" - "harmonious" - "harsh" - "hasty" - "haunting" - "illustrious" - "imaginary" - "imaginative" - "immaculate" - "immaterial" - "immediate" - "immense" - "impassioned" - "jaunty" - "jealous" - "jittery" - "key" - "kind" - "leading" - "leafy" - "lean" - "left" - "legal" - "legitimate" - "light" - "massive" - "mature" - "meager" - "mealy" - "mean" - "measly" - "meaty" - "medical" - "mediocre" - "nautical" - "near" - "neat" - "necessary" - "needy" - "odd" - "oddball" - "offbeat" - "official" - "old" - "periodic" - "perky" - "personal" - "pertinent" - "pesky" - "pessimistic" - "petty" - "physical" - "piercing" - "pink" - "pitiful" - "plain" - "quarrelsome" - "quarterly" - "ready" - "real" - "realistic" - "reasonable" - "red" - "reflecting" - "regal" - "regular" - "separate" - "serene" - "serious" - "serpentine" - "several" - "severe" - "shabby" - "shadowy" - "shady" - "shallow" - "sharp" - "shimmering" - "shiny" - "shocked" - "shocking" - "shoddy" - "short" - "shortterm" - "showy" - "shrill" - "shy" - "silent" - "silky" - "tempting" - "tender" - "tense" - "tepid" - "terrific" - "testy" - "thankful" - "that" - "these" - "tremendous" - "uneven" - "unfinished" - "unfolded" - "uniform" - "unique" - "valuable" - "vapid" - "variable" - "vast" - "velvety" - "wealthy" - "weary" - "webbed" - "wee" - "weekly" - "weepy" - "weighty" - "welcome" - "welldocumented" - "yellow" - "zealous" - "aggressive" - "agile" - "agitated" - "agonizing" - "agreeable" - "ajar" - "alarmed" - "alarming" - "alert" - "alienated" - "alive" - "all" - "altruistic" - "bland" - "blank" - "blaring" - "bleak" - "blind" - "blissful" - "blond" - "blue" - "blushing" - "cloudy" - "clueless" - "clumsy" - "cluttered" - "coarse" - "cold" - "colorful" - "colorless" - "colossal" - "comfortable" - "common" - "compassionate" - "competent" - "complete" - "delightful" - "demanding" - "dense" - "dental" - "dependable" - "dependent" - "descriptive" - "deserted" - "detailed" - "determined" - "devoted" - "different" - "embellished" - "eminent" - "emotional" - "empty" - "enchanted" - "enchanting" - "energetic" - "enlightened" - "enormous" - "fine" - "finished" - "firm" - "first" - "firsthand" - "fitting" - "fixed" - "flaky" - "flamboyant" - "flashy" - "flat" - "flawless" - "flickering" - "gloomy" - "glorious" - "glossy" - "glum" - "golden" - "good" - "goodnatured" - "gorgeous" - "graceful" - "healthy" - "heartfelt" - "hearty" - "heavenly" - "heavy" - "hefty" - "helpful" - "humongous" - "impartial" - "impeccable" - "imperfect" - "imperturbable" - "important" - "impossible" - "impractical" - "impressionable" - "impressive" - "improbable" - "joint" - "jolly" - "jovial" - "juvenile" - "kindhearted" - "kindly" - "lighthearted" - "likable" - "likely" - "limited" - "limp" - "limping" - "linear" - "lined" - "liquid" - "medium" - "meek" - "mellow" - "melodic" - "memorable" - "menacing" - "merry" - "messy" - "metallic" - "mild" - "negative" - "neglected" - "negligible" - "neighboring" - "nervous" - "new" - "oldfashioned" - "only" - "open" - "optimal" - "optimistic" - "opulent" - "plaintive" - "plastic" - "playful" - "pleasant" - "pleased" - "pleasing" - "plump" - "plush" - "pointed" - "pointless" - "poised" - "polished" - "polite" - "political" - "pungent" - "queasy" - "querulous" - "reliable" - "relieved" - "remarkable" - "remorseful" - "remote" - "repentant" - "required" - "respectful" - "responsible" - "silly" - "silver" - "similar" - "simple" - "simplistic" - "sizzling" - "skeletal" - "skinny" - "sleepy" - "slight" - "slim" - "slimy" - "slippery" - "slow" - "slushy" - "small" - "smart" - "smoggy" - "smooth" - "smug" - "snappy" - "snarling" - "sneaky" - "sniveling" - "snoopy" - "thick" - "thin" - "third" - "thirsty" - "this" - "thorny" - "thorough" - "those" - "thoughtful" - "threadbare" - "united" - "unkempt" - "unknown" - "unlined" - "unnatural" - "unrealistic" - "venerated" - "vengeful" - "verifiable" - "vibrant" - "vicious" - "wellgroomed" - "wellinformed" - "welllit" - "wellmade" - "welloff" - "welltodo" - "wellworn" - "wet" - "which" - "whimsical" - "whirlwind" - "whispered" - "worse" - "writhing" - "yellowish" - "zesty" - "amazing" - "ambitious" - "ample" - "amused" - "amusing" - "anchored" - "ancient" - "angelic" - "angry" - "anguished" - "animated" - "annual" - "another" - "antique" - "bogus" - "boiling" - "bold" - "bony" - "boring" - "bossy" - "both" - "bouncy" - "bountiful" - "bowed" - "complex" - "complicated" - "composed" - "concerned" - "concrete" - "confused" - "conscious" - "considerate" - "constant" - "content" - "conventional" - "cooked" - "cool" - "cooperative" - "difficult" - "digital" - "diligent" - "dim" - "dimpled" - "dimwitted" - "direct" - "discrete" - "entire" - "envious" - "equal" - "equatorial" - "essential" - "esteemed" - "ethical" - "euphoric" - "flimsy" - "flippant" - "flowery" - "fluffy" - "fluid" - "flustered" - "focused" - "fond" - "foolhardy" - "foolish" - "forceful" - "forked" - "formal" - "forsaken" - "gracious" - "grand" - "grandiose" - "granular" - "grateful" - "grave" - "gray" - "great" - "greedy" - "green" - "hidden" - "high" - "highlevel" - "hilarious" - "hoarse" - "hollow" - "homely" - "inborn" - "incomparable" - "incompatible" - "incomplete" - "inconsequential" - "incredible" - "indelible" - "indolent" - "inexperienced" - "infamous" - "infantile" - "joyful" - "joyous" - "jubilant" - "klutzy" - "knobby" - "little" - "live" - "lively" - "livid" - "lone" - "long" - "milky" - "mindless" - "miniature" - "minor" - "minty" - "misguided" - "misty" - "mixed" - "next" - "nice" - "nifty" - "nimble" - "nippy" - "orange" - "orderly" - "ordinary" - "organic" - "ornate" - "ornery" - "poor" - "popular" - "portly" - "posh" - "positive" - "possible" - "potable" - "powerful" - "powerless" - "practical" - "precious" - "present" - "prestigious" - "questionable" - "quick" - "revolving" - "rewarding" - "rich" - "right" - "rigid" - "ringed" - "ripe" - "sociable" - "soft" - "soggy" - "solid" - "somber" - "some" - "sophisticated" - "sore" - "sorrowful" - "soulful" - "soupy" - "sour" - "spanish" - "sparkling" - "sparse" - "specific" - "spectacular" - "speedy" - "spherical" - "spicy" - "spiffy" - "spirited" - "spiteful" - "splendid" - "spotless" - "spotted" - "spry" - "thrifty" - "thunderous" - "tidy" - "tight" - "timely" - "tinted" - "tiny" - "tired" - "torn" - "total" - "unripe" - "unruly" - "unselfish" - "unsightly" - "unsteady" - "unsung" - "untidy" - "untimely" - "untried" - "victorious" - "vigilant" - "vigorous" - "villainous" - "violet" - "whole" - "whopping" - "wicked" - "wide" - "wideeyed" - "wiggly" - "wild" - "willing" - "wilted" - "winding" - "windy" - "young" - "zigzag" - "anxious" - "any" - "apprehensive" - "appropriate" - "apt" - "arctic" - "arid" - "aromatic" - "artistic" - "assured" - "astonishing" - "athletic" - "brave" - "breakable" - "brief" - "bright" - "brilliant" - "brisk" - "broken" - "bronze" - "brown" - "bruised" - "coordinated" - "corny" - "corrupt" - "costly" - "courageous" - "courteous" - "crafty" - "crazy" - "creamy" - "creative" - "creepy" - "crisp" - "dirty" - "disguised" - "distant" - "distant" - "distinct" - "distorted" - "dizzy" - "dopey" - "downright" - "dreary" - "even" - "evergreen" - "everlasting" - "every" - "evil" - "exalted" - "excellent" - "excitable" - "exemplary" - "exhausted" - "forthright" - "fortunate" - "fragrant" - "frail" - "frank" - "frayed" - "free" - "french" - "frequent" - "fresh" - "friendly" - "frightened" - "frightening" - "gregarious" - "grim" - "grimy" - "gripping" - "grizzled" - "grouchy" - "grounded" - "honest" - "honorable" - "honored" - "hopeful" - "hospitable" - "hot" - "huge" - "infatuated" - "inferior" - "infinite" - "informal" - "innocent" - "insecure" - "insignificant" - "insistent" - "instructive" - "insubstantial" - "judicious" - "juicy" - "jumbo" - "knotty" - "knowing" - "knowledgeable" - "longterm" - "loose" - "lopsided" - "lost" - "loud" - "lovable" - "lovely" - "loving" - "modern" - "modest" - "moist" - "monthly" - "monumental" - "moral" - "mortified" - "motionless" - "nocturnal" - "noisy" - "nonstop" - "normal" - "notable" - "noted" - "original" - "other" - "our" - "outgoing" - "outlandish" - "outlying" - "precious" - "pretty" - "previous" - "pricey" - "prickly" - "primary" - "prime" - "pristine" - "private" - "prize" - "probable" - "productive" - "profitable" - "quickwitted" - "quiet" - "quintessential" - "roasted" - "robust" - "rosy" - "rotating" - "rotten" - "rough" - "round" - "rowdy" - "square" - "squeaky" - "squiggly" - "stable" - "staid" - "stained" - "stale" - "standard" - "starchy" - "stark" - "starry" - "steel" - "steep" - "sticky" - "stiff" - "stimulating" - "stingy" - "stormy" - "strange" - "strict" - "strident" - "striking" - "striped" - "strong" - "studious" - "stunning" - "tough" - "tragic" - "trained" - "treasured" - "tremendous" - "triangular" - "tricky" - "trifling" - "trim" - "untrue" - "unused" - "unusual" - "unwelcome" - "unwieldy" - "unwilling" - "unwitting" - "unwritten" - "upbeat" - "virtual" - "virtuous" - "visible" - "winged" - "wiry" - "wise" - "witty" - "wobbly" - "woeful" - "wonderful" - "wooden" - "woozy" - "wordy" - "worldly" - "worn" - "youthful" - "attached" - "attentive" - "attractive" - "austere" - "authentic" - "authorized" - "automatic" - "avaricious" - "average" - "aware" - "awesome" - "awful" - "awkward" - "bubbly" - "bulky" - "bumpy" - "buoyant" - "burdensome" - "burly" - "bustling" - "busy" - "buttery" - "buzzing" - "critical" - "crooked" - "crowded" - "crushing" - "cuddly" - "cultivated" - "cultured" - "cumbersome" - "curly" - "curvy" - "cute" - "cylindrical" - "doting" - "double" - "downright" - "drab" - "drafty" - "dramatic" - "dry" - "dual" - "dutiful" - "excited" - "exciting" - "exotic" - "expensive" - "experienced" - "expert" - "extralarge" - "extraneous" - "extrasmall" - "extroverted" - "frilly" - "frivolous" - "frizzy" - "front" - "frosty" - "frozen" - "frugal" - "fruitful" - "full" - "fumbling" - "functional" - "funny" - "fussy" - "fuzzy" - "growing" - "growling" - "grown" - "grubby" - "grumpy" - "guilty" - "gullible" - "gummy" - "humble" - "humming" - "hungry" - "husky" - "intelligent" - "intent" - "intentional" - "interesting" - "internal" - "international" - "intrepid" - "ironclad" - "irresponsible" - "itchy" - "jumpy" - "junior" - "known" - "kooky" - "low" - "loyal" - "lucky" - "lumbering" - "luminous" - "lumpy" - "lustrous" - "luxurious" - "mountainous" - "muddy" - "muffled" - "mundane" - "murky" - "mushy" - "musty" - "mysterious" - "noteworthy" - "novel" - "noxious" - "numb" - "nutritious" - "nutty" - "outrageous" - "outstanding" - "oval" - "overcooked" - "overdue" - "overjoyed" - "profuse" - "proper" - "proud" - "prudent" - "punctual" - "puny" - "pure" - "purple" - "pushy" - "puzzled" - "puzzling" - "quirky" - "quixotic" - "quizzical" - "royal" - "rubbery" - "ruddy" - "rundown" - "runny" - "rural" - "rusty" - "stupendous" - "sturdy" - "stylish" - "subdued" - "substantial" - "subtle" - "suburban" - "sudden" - "sugary" - "sunny" - "super" - "superb" - "superficial" - "superior" - "supportive" - "surefooted" - "surprised" - "suspicious" - "svelte" - "sweaty" - "sweet" - "sweltering" - "swift" - "sympathetic" - "trivial" - "troubled" - "trusting" - "trustworthy" - "trusty" - "truthful" - "tubby" - "turbulent" - "twin" - "upright" - "upset" - "urban" - "usable" - "used" - "useful" - "useless" - "utilized" - "utter" - "vital" - "vivacious" - "vivid" - "voluminous" - "worst" - "worthwhile" - "worthy" - "wrathful" - "wry" - "yummy" - "true" - "aliceblue" - "aqua" - "aquamarine" - "azure" - "beige" - "bisque" - "blanchedalmond" - "blue" - "blueviolet" - "brown" - "burlywood" - "cadetblue" - "chartreuse" - "chocolate" - "coral" - "cornflowerblue" - "cornsilk" - "crimson" - "cyan" - "darkblue" - "darkcyan" - "darkgoldenrod" - "darkgray" - "darkgreen" - "darkgrey" - "darkkhaki" - "darkmagenta" - "darkolivegreen" - "darkorange" - "darkorchid" - "darkred" - "darksalmon" - "darkseagreen" - "darkslateblue" - "darkslategray" - "darkslategrey" - "darkturquoise" - "darkviolet" - "deeppink" - "deepskyblue" - "dimgray" - "dimgrey" - "dodgerblue" - "firebrick" - "floralwhite" - "forestgreen" - "fractal" - "fuchsia" - "gainsboro" - "ghostwhite" - "gold" - "goldenrod" - "gray" - "green" - "greenyellow" - "honeydew" - "hotpink" - "indianred" - "indigo" - "ivory" - "khaki" - "lavender" - "lavenderblush" - "lawngreen" - "lemonchiffon" - "lightblue" - "lightcoral" - "lightcyan" - "lightgoldenrod" - "lightgoldenrodyellow" - "lightgray" - "lightgreen" - "lightgrey" - "lightpink" - "lightsalmon" - "lightseagreen" - "lightskyblue" - "lightslateblue" - "lightslategray" - "lightsteelblue" - "lightyellow" - "lime" - "limegreen" - "linen" - "magenta" - "maroon" - "mediumaquamarine" - "mediumblue" - "mediumforestgreen" - "mediumgoldenrod" - "mediumorchid" - "mediumpurple" - "mediumseagreen" - "mediumslateblue" - "mediumspringgreen" - "mediumturquoise" - "mediumvioletred" - "midnightblue" - "mintcream" - "mistyrose" - "moccasin" - "navajowhite" - "navy" - "navyblue" - "oldlace" - "olive" - "olivedrab" - "opaque" - "orange" - "orangered" - "orchid" - "palegoldenrod" - "palegreen" - "paleturquoise" - "palevioletred" - "papayawhip" - "peachpuff" - "peru" - "pink" - "plum" - "powderblue" - "purple" - "red" - "rosybrown" - "royalblue" - "saddlebrown" - "salmon" - "sandybrown" - "seagreen" - "seashell" - "sienna" - "silver" - "skyblue" - "slateblue" - "slategray" - "slategrey" - "snow" - "springgreen" - "steelblue" - "tan" - "teal" - "thistle" - "tomato" - "transparent" - "turquoise" - "violet" - "violetred" - "wheat" - "whitesmoke" - "yellow" - "yellowgreen"]) \ No newline at end of file diff --git a/src/status_im/utils/gfycat/animals.cljs b/src/status_im/utils/gfycat/animals.cljs deleted file mode 100644 index 0550c4f749..0000000000 --- a/src/status_im/utils/gfycat/animals.cljs +++ /dev/null @@ -1,1713 +0,0 @@ -(ns status-im.utils.gfycat.animals) - -;Names are only deterministic as long as word lists do not change! -;If you change this list, please also update the tests at: -; -; - cljs/status_im/test/utils/gfycat/core.cljs - - -(def data - ["aardvark" - "aardwolf" - "abalone" - "abyssiniancat" - "abyssiniangroundhornbill" - "acaciarat" - "achillestang" - "acornbarnacle" - "acornweevil" - "acornwoodpecker" - "acouchi" - "adamsstaghornedbeetle" - "addax" - "adder" - "adeliepenguin" - "admiralbutterfly" - "adouri" - "aegeancat" - "affenpinscher" - "hound" - "augurbuzzard" - "bushviper" - "civet" - "clawedfrog" - "elephant" - "fisheagle" - "goldencat" - "groundhornbill" - "harrierhawk" - "hornbill" - "jacana" - "molesnake" - "paradiseflycatcher" - "piedkingfisher" - "porcupine" - "rockpython" - "wildcat" - "wilddog" - "agama" - "agouti" - "aidi" - "airedale" - "airedaleterrier" - "akitainu" - "mapturtle" - "jingle" - "husky" - "kleekai" - "malamute" - "albacoretuna" - "albatross" - "albertosaurus" - "albino" - "aldabratortoise" - "allensbigearedbat" - "alleycat" - "alligator" - "alligatorgar" - "alligatorsnappingturtle" - "allosaurus" - "alpaca" - "alpinegoat" - "alpineroadguidetigerbeetle" - "altiplanochinchillamouse" - "amazondolphin" - "amazonparrot" - "amazontreeboa" - "amberpenshell" - "ambushbug" - "alligator" - "avocet" - "badger" - "bittern" - "vulture" - "bobtail" - "bulldog" - "cicada" - "crayfish" - "creamdraft" - "crocodile" - "crow" - "curl" - "goldfinch" - "indianhorse" - "kestrel" - "lobster" - "marten" - "painthorse" - "quarterhorse" - "ratsnake" - "redsquirrel" - "riverotter" - "robin" - "saddlebred" - "shorthair" - "toad" - "warmblood" - "wigeon" - "wirehair" - "amethystgemclam" - "amethystinepython" - "amethystsunbird" - "ammonite" - "amoeba" - "amphibian" - "amphiuma" - "amurminnow" - "amurratsnake" - "amurstarfish" - "anaconda" - "anchovy" - "andalusianhorse" - "andeancat" - "andeancondor" - "anemone" - "anemonecrab" - "anemoneshrimp" - "angelfish" - "angelwingmussel" - "anglerfish" - "angora" - "angwantibo" - "anhinga" - "ankole" - "ankolewatusi" - "annashummingbird" - "annelid" - "annelida" - "anole" - "anophelesmosquito" - "ant" - "antarcticfurseal" - "antarcticgiantpetrel" - "antbear" - "anteater" - "antelope" - "antelopegroundsquirrel" - "antipodesgreenparakeet" - "antlion" - "anura" - "aoudad" - "apatosaur" - "ape" - "aphid" - "apisdorsatalaboriosa" - "aplomadofalcon" - "appaloosa" - "aquaticleech" - "arabianhorse" - "arabianoryx" - "arabianwildcat" - "aracari" - "arachnid" - "arawana" - "archaeocete" - "archaeopteryx" - "archerfish" - "arcticduck" - "arcticfox" - "arctichare" - "arcticseal" - "arcticwolf" - "argali" - "argentinehornedfrog" - "argentineruddyduck" - "argusfish" - "arieltoucan" - "arizonaalligatorlizard" - "arkshell" - "armadillo" - "armedcrab" - "armednylonshrimp" - "armyant" - "armyworm" - "arrowana" - "arrowcrab" - "arrowworm" - "arthropods" - "aruanas" - "constablebutterfly" - "damselfly" - "elephant" - "lion" - "piedstarling" - "porcupine" - "smallclawedotter" - "trumpetfish" - "waterbuffalo" - "greaterfreshwaterclam" - "lesserfreshwaterclam" - "mouflon" - "asp" - "assassinbug" - "astarte" - "astrangiacoral" - "atlanticblackgoby" - "atlanticbluetang" - "atlanticridleyturtle" - "atlanticsharpnosepuffer" - "atlanticspadefish" - "atlasmoth" - "attwatersprairiechicken" - "auk" - "auklet" - "aurochs" - "australiancattledog" - "australiancurlew" - "australianfreshwatercrocodile" - "australianfurseal" - "australiankelpie" - "australiankestrel" - "australianshelduck" - "australiansilkyterrier" - "austrianpinscher" - "avians" - "avocet" - "axisdeer" - "axolotl" - "ayeaye" - "aztecant" - "azurevase" - "azurevasesponge" - "azurewingedmagpie" - "babirusa" - "baboon" - "backswimmer" - "bactrian" - "badger" - "bagworm" - "baiji" - "baldeagle" - "baleenwhale" - "balloonfish" - "ballpython" - "bandicoot" - "bangeltiger" - "bantamrooster" - "banteng" - "barasinga" - "barasingha" - "barb" - "barbet" - "barebirdbat" - "barnacle" - "barnowl" - "barnswallow" - "barracuda" - "basenji" - "basil" - "basilisk" - "bass" - "bassethound" - "bat" - "bats" - "beagle" - "bear" - "beardedcollie" - "beardeddragon" - "beauceron" - "beaver" - "bedbug" - "bedlingtonterrier" - "bee" - "beetle" - "bellfrog" - "bellsnake" - "belugawhale" - "bengaltiger" - "bergerpicard" - "bernesemountaindog" - "betafish" - "bettong" - "bichonfrise" - "bighorn" - "bighornedsheep" - "bighornsheep" - "bigmouthbass" - "bilby" - "binturong" - "bird" - "birdofparadise" - "bison" - "bittern" - "blackbear" - "blackbird" - "blackbuck" - "blackfish" - "blackfly" - "blackfootedferret" - "blacklab" - "blacklemur" - "blackmamba" - "blacknorwegianelkhound" - "blackpanther" - "blackrhino" - "blackrussianterrier" - "blackwidowspider" - "blesbok" - "blobfish" - "blowfish" - "blueandgoldmackaw" - "bluebird" - "bluebottle" - "bluebottlejellyfish" - "bluefintuna" - "bluefish" - "bluegill" - "bluejay" - "blueshark" - "bluet" - "bluetickcoonhound" - "bluetonguelizard" - "bluewhale" - "boa" - "boaconstrictor" - "boar" - "bobcat" - "bobolink" - "bobwhite" - "boilweevil" - "bongo" - "bonobo" - "booby" - "bordercollie" - "borderterrier" - "borer" - "borzoi" - "boto" - "boubou" - "boutu" - "bovine" - "brahmanbull" - "brahmancow" - "brant" - "bream" - "brocketdeer" - "bronco" - "brontosaurus" - "brownbear" - "brownbutterfly" - "bubblefish" - "buck" - "buckeyebutterfly" - "budgie" - "bufeo" - "buffalo" - "bufflehead" - "bug" - "bull" - "bullfrog" - "bullmastiff" - "bumblebee" - "bunny" - "bunting" - "burro" - "bushbaby" - "bushsqueaker" - "bustard" - "butterfly" - "buzzard" - "caecilian" - "caiman" - "caimanlizard" - "calf" - "camel" - "canadagoose" - "canary" - "canine" - "canvasback" - "capeghostfrog" - "capybara" - "caracal" - "cardinal" - "caribou" - "carp" - "carpenterant" - "cassowary" - "cat" - "catbird" - "caterpillar" - "catfish" - "cats" - "cattle" - "caudata" - "cavy" - "centipede" - "cero" - "chafer" - "chameleon" - "chamois" - "chanticleer" - "cheetah" - "chevrotain" - "chick" - "chickadee" - "chicken" - "chihuahua" - "chimneyswift" - "chimpanzee" - "chinchilla" - "chinesecrocodilelizard" - "chipmunk" - "chital" - "chrysalis" - "chrysomelid" - "chuckwalla" - "chupacabra" - "cicada" - "cirriped" - "civet" - "clam" - "cleanerwrasse" - "clingfish" - "clownanemonefish" - "clumber" - "coati" - "cob" - "cobra" - "cockerspaniel" - "cod" - "coelacanth" - "collardlizard" - "collie" - "colt" - "comet" - "commabutterfly" - "commongonolek" - "conch" - "condor" - "coney" - "conure" - "cony" - "coot" - "cooter" - "copepod" - "copperbutterfly" - "copperhead" - "coqui" - "coral" - "cormorant" - "cornsnake" - "corydorascatfish" - "cottonmouth" - "cottontail" - "cow" - "cowbird" - "cowrie" - "coyote" - "coypu" - "crab" - "crane" - "cranefly" - "crayfish" - "creature" - "cricket" - "crocodile" - "crocodileskink" - "crossbill" - "crow" - "crownofthornsstarfish" - "crustacean" - "cub" - "cuckoo" - "cur" - "curassow" - "curlew" - "cuscus" - "cusimanse" - "cuttlefish" - "cutworm" - "cygnet" - "dachshund" - "dalmatian" - "damselfly" - "danishswedishfarmdog" - "darklingbeetle" - "dartfrog" - "darwinsfox" - "dassie" - "dassierat" - "davidstiger" - "deer" - "deermouse" - "degu" - "degus" - "deinonychus" - "desertpupfish" - "devilfish" - "deviltasmanian" - "diamondbackrattlesnake" - "dikdik" - "dikkops" - "dingo" - "dinosaur" - "diplodocus" - "dipper" - "discus" - "dobermanpinscher" - "doctorfish" - "dodo" - "dodobird" - "doe" - "dog" - "dogfish" - "dolphin" - "donkey" - "dorado" - "dore" - "dorking" - "dormouse" - "dotterel" - "dove" - "dowitcher" - "drafthorse" - "dragon" - "dragonfly" - "drake" - "drever" - "dromaeosaur" - "dromedary" - "drongo" - "duck" - "duckbillcat" - "duckbillplatypus" - "duckling" - "dugong" - "duiker" - "dunlin" - "dunnart" - "dutchshepherddog" - "dutchsmoushond" - "eagle" - "earthworm" - "earwig" - "easternglasslizard" - "easternnewt" - "echidna" - "eel" - "eelelephant" - "eeve" - "eft" - "egg" - "egret" - "eider" - "eidolonhelvum" - "ekaltadeta" - "eland" - "electriceel" - "elephant" - "elephantbeetle" - "elephantseal" - "elk" - "elkhound" - "elver" - "emeraldtreeskink" - "emperorpenguin" - "emperorshrimp" - "emu" - "englishpointer" - "englishsetter" - "equestrian" - "equine" - "erin" - "ermine" - "erne" - "eskimodog" - "esok" - "estuarinecrocodile" - "ethiopianwolf" - "europeanfiresalamander" - "europeanpolecat" - "ewe" - "eyas" - "eyelashpitviper" - "eyra" - "fairybluebird" - "fairyfly" - "falcon" - "fallowdeer" - "fantail" - "fanworms" - "fattaileddunnart" - "fawn" - "feline" - "fennecfox" - "ferret" - "fiddlercrab" - "fieldmouse" - "fieldspaniel" - "finch" - "finnishspitz" - "finwhale" - "fireant" - "firebelliedtoad" - "firecrest" - "firefly" - "fish" - "fishingcat" - "flamingo" - "flatcoatretriever" - "flatfish" - "flea" - "flee" - "flicker" - "flickertailsquirrel" - "flies" - "flounder" - "fluke" - "fly" - "flycatcher" - "flyingfish" - "flyingfox" - "flyinglemur" - "flyingsquirrel" - "foal" - "fossa" - "fowl" - "fox" - "foxhound" - "foxterrier" - "frenchbulldog" - "freshwatereel" - "frigatebird" - "frilledlizard" - "frillneckedlizard" - "fritillarybutterfly" - "frog" - "frogmouth" - "fruitbat" - "fruitfly" - "fugu" - "fulmar" - "funnelweaverspider" - "furseal" - "gadwall" - "galago" - "galah" - "galapagosalbatross" - "galapagosdove" - "galapagoshawk" - "galapagosmockingbird" - "galapagospenguin" - "galapagossealion" - "galapagostortoise" - "gallinule" - "gallowaycow" - "gander" - "gangesdolphin" - "gannet" - "gar" - "gardensnake" - "garpike" - "gartersnake" - "gaur" - "gavial" - "gazelle" - "gecko" - "geese" - "gelada" - "gelding" - "gemsbok" - "gemsbuck" - "genet" - "gentoopenguin" - "gerbil" - "gerenuk" - "germanpinscher" - "germanshepherd" - "germanshorthairedpointer" - "germanspaniel" - "germanspitz" - "germanwirehairedpointer" - "gharial" - "ghostshrimp" - "giantschnauzer" - "gibbon" - "gilamonster" - "giraffe" - "glassfrog" - "globefish" - "glowworm" - "gnat" - "gnatcatcher" - "gnu" - "goa" - "goat" - "godwit" - "goitered" - "goldeneye" - "goldenmantledgroundsquirrel" - "goldenretriever" - "goldfinch" - "goldfish" - "gonolek" - "goose" - "goosefish" - "gopher" - "goral" - "gordonsetter" - "gorilla" - "goshawk" - "gosling" - "gossamerwingedbutterfly" - "gourami" - "grackle" - "grasshopper" - "grassspider" - "grayfox" - "grayling" - "grayreefshark" - "graysquirrel" - "graywolf" - "greatargus" - "greatdane" - "greathornedowl" - "greatwhiteshark" - "grebe" - "greendarnerdragonfly" - "greyhounddog" - "grison" - "grizzlybear" - "grosbeak" - "groundbeetle" - "groundhog" - "grouper" - "grouse" - "grub" - "grunion" - "guanaco" - "guernseycow" - "guillemot" - "guineafowl" - "guineapig" - "gull" - "guppy" - "gyrfalcon" - "hackee" - "haddock" - "hadrosaurus" - "hagfish" - "hairstreak" - "hairstreakbutterfly" - "hake" - "halcyon" - "halibut" - "halicore" - "hamadryad" - "hamadryas" - "hammerheadbird" - "hammerheadshark" - "hammerkop" - "hamster" - "hanumanmonkey" - "hapuka" - "hapuku" - "harborporpoise" - "harborseal" - "hare" - "harlequinbug" - "harpseal" - "harpyeagle" - "harrier" - "harrierhawk" - "hart" - "hartebeest" - "harvestmen" - "harvestmouse" - "hatchetfish" - "hawaiianmonkseal" - "hawk" - "hectorsdolphin" - "hedgehog" - "heifer" - "hellbender" - "hen" - "herald" - "herculesbeetle" - "hermitcrab" - "heron" - "herring" - "hind" - "hippopotamus" - "hoatzin" - "hochstettersfrog" - "hog" - "hogget" - "hoiho" - "hoki" - "homalocephale" - "honeybadger" - "honeybee" - "honeycreeper" - "honeyeater" - "hookersealion" - "hoopoe" - "hornbill" - "hornedtoad" - "hornedviper" - "hornet" - "hornshark" - "horse" - "horsechestnutleafminer" - "horsefly" - "horsemouse" - "horseshoebat" - "horseshoecrab" - "hound" - "housefly" - "hoverfly" - "howlermonkey" - "huemul" - "huia" - "human" - "hummingbird" - "humpbackwhale" - "husky" - "hydatidtapeworm" - "hydra" - "hyena" - "hylaeosaurus" - "hypacrosaurus" - "hypsilophodon" - "hyracotherium" - "hyrax" - "iaerismetalmark" - "ibadanmalimbe" - "iberianbarbel" - "iberianchiffchaff" - "iberianemeraldlizard" - "iberianlynx" - "iberianmidwifetoad" - "iberianmole" - "iberiannase" - "ibex" - "ibis" - "ibisbill" - "ibizanhound" - "iceblueredtopzebra" - "icefish" - "icelandgull" - "icelandichorse" - "icelandicsheepdog" - "ichidna" - "ichneumonfly" - "ichthyosaurs" - "ichthyostega" - "icterinewarbler" - "iggypops" - "iguana" - "iguanodon" - "illadopsis" - "ilsamochadegu" - "imago" - "impala" - "imperatorangel" - "imperialeagle" - "incatern" - "inchworm" - "indianabat" - "indiancow" - "indianelephant" - "indianglassfish" - "indianhare" - "indianjackal" - "indianpalmsquirrel" - "indianpangolin" - "indianrhinoceros" - "indianringneckparakeet" - "indianrockpython" - "indianskimmer" - "indianspinyloach" - "indigobunting" - "indigowingedparrot" - "indochinahogdeer" - "indochinesetiger" - "indri" - "indusriverdolphin" - "inexpectatumpleco" - "inganue" - "insect" - "intermediateegret" - "invisiblerail" - "iraniangroundjay" - "iridescentshark" - "iriomotecat" - "irishdraughthorse" - "irishredandwhitesetter" - "irishsetter" - "irishterrier" - "irishwaterspaniel" - "irishwolfhound" - "irrawaddydolphin" - "irukandjijellyfish" - "isabellineshrike" - "isabellinewheatear" - "islandcanary" - "islandwhistler" - "isopod" - "italianbrownbear" - "italiangreyhound" - "ivorybackedwoodswallow" - "ivorybilledwoodpecker" - "ivorygull" - "izuthrush" - "jabiru" - "jackal" - "jackrabbit" - "jaeger" - "jaguar" - "jaguarundi" - "janenschia" - "japanesebeetle" - "javalina" - "jay" - "jellyfish" - "jenny" - "jerboa" - "joey" - "johndory" - "juliabutterfly" - "jumpingbean" - "junco" - "junebug" - "kagu" - "kakapo" - "kakarikis" - "kangaroo" - "karakul" - "katydid" - "kawala" - "kentrosaurus" - "kestrel" - "kid" - "killdeer" - "killerwhale" - "killifish" - "kingbird" - "kingfisher" - "kinglet" - "kingsnake" - "kinkajou" - "kiskadee" - "kissingbug" - "kite" - "kitfox" - "kitten" - "kittiwake" - "kitty" - "kiwi" - "koala" - "koalabear" - "kob" - "kodiakbear" - "koi" - "komododragon" - "koodoo" - "kookaburra" - "kouprey" - "krill" - "kronosaurus" - "kudu" - "kusimanse" - "labradorretriever" - "lacewing" - "ladybird" - "ladybug" - "lamb" - "lamprey" - "langur" - "lark" - "larva" - "laughingthrush" - "lcont" - "leafbird" - "leafcutterant" - "leafhopper" - "leafwing" - "leech" - "lemming" - "lemur" - "leonberger" - "leopard" - "leopardseal" - "leveret" - "lhasaapso" - "liger" - "lightningbug" - "limpet" - "limpkin" - "ling" - "lion" - "lionfish" - "littlenightmonkeys" - "lizard" - "llama" - "lobo" - "lobster" - "locust" - "loggerheadturtle" - "longhorn" - "longhornbeetle" - "longspur" - "loon" - "lorikeet" - "loris" - "louse" - "lovebird" - "lowchen" - "lunamoth" - "lungfish" - "lynx" - "macaque" - "macaw" - "macropod" - "magpie" - "maiasaura" - "majungatholus" - "malamute" - "mallard" - "maltesedog" - "mamba" - "mamenchisaurus" - "mammal" - "mammoth" - "manatee" - "mandrill" - "mangabey" - "manta" - "mantaray" - "mantid" - "mantis" - "mantisray" - "manxcat" - "mara" - "marabou" - "marbledmurrelet" - "mare" - "marlin" - "marmoset" - "marmot" - "marten" - "martin" - "massasauga" - "massospondylus" - "mastiff" - "mastodon" - "mayfly" - "meadowhawk" - "meadowlark" - "mealworm" - "meerkat" - "megalosaurus" - "megaraptor" - "merganser" - "merlin" - "metalmarkbutterfly" - "metamorphosis" - "microvenator" - "midge" - "milksnake" - "milkweedbug" - "millipede" - "minibeast" - "mink" - "minnow" - "mite" - "moa" - "mockingbird" - "mole" - "mollies" - "mollusk" - "molly" - "monarch" - "mongoose" - "monkey" - "monkfish" - "monoclonius" - "montanoceratops" - "moorhen" - "moose" - "moray" - "morayeel" - "morpho" - "mosasaur" - "mosquito" - "moth" - "motmot" - "mouflon" - "mountaincat" - "mountainlion" - "mouse" - "mousebird" - "mudpuppy" - "mule" - "mullet" - "muntjac" - "murrelet" - "muskox" - "muskrat" - "mussaurus" - "mussel" - "mustang" - "mutt" - "myna" - "mynah" - "myotis" - "nabarlek" - "nag" - "naga" - "nagapies" - "nandine" - "nandoo" - "nandu" - "narwhal" - "narwhale" - "natterjacktoad" - "nauplius" - "nautilus" - "needlefish" - "needletail" - "nematode" - "nene" - "neonblueguppy" - "neonbluehermitcrab" - "neondwarfgourami" - "neonrainbowfish" - "neonredguppy" - "neontetra" - "nerka" - "nettlefish" - "newfoundlanddog" - "newt" - "newtnutria" - "nightcrawler" - "nighthawk" - "nightheron" - "nightingale" - "nightjar" - "nilgai" - "armadillo" - "noctilio" - "noctule" - "noddy" - "noolbenger" - "northerncardinals" - "northernelephantseal" - "northernflyingsquirrel" - "northernfurseal" - "northernpike" - "northernseahorse" - "northernspottedowl" - "norwaylobster" - "norwayrat" - "nubiangoat" - "nudibranch" - "numbat" - "nurseshark" - "nutcracker" - "nuthatch" - "nutria" - "nyala" - "ocelot" - "octopus" - "okapi" - "olingo" - "olm" - "opossum" - "orangutan" - "orca" - "oregonsilverspotbutterfly" - "oriole" - "oropendola" - "oropendula" - "oryx" - "osprey" - "ostracod" - "ostrich" - "otter" - "ovenbird" - "owl" - "owlbutterfly" - "ox" - "oxen" - "oxpecker" - "oyster" - "ozarkbigearedbat" - "paca" - "pachyderm" - "pacificparrotlet" - "paddlefish" - "paintedladybutterfly" - "panda" - "pangolin" - "panther" - "paperwasp" - "papillon" - "parakeet" - "parrot" - "partridge" - "peacock" - "peafowl" - "peccary" - "pekingese" - "pelican" - "pelicinuspetrel" - "penguin" - "perch" - "peregrinefalcon" - "pewee" - "phalarope" - "pharaohhound" - "pheasant" - "phoebe" - "phoenix" - "pigeon" - "piglet" - "pika" - "pike" - "pikeperch" - "pilchard" - "pinemarten" - "pinkriverdolphin" - "pinniped" - "pintail" - "pipistrelle" - "pipit" - "piranha" - "pitbull" - "pittabird" - "plainsqueaker" - "plankton" - "planthopper" - "platypus" - "plover" - "polarbear" - "polecat" - "polyp" - "polyturator" - "pomeranian" - "pondskater" - "pony" - "pooch" - "poodle" - "porcupine" - "porpoise" - "portuguesemanofwar" - "possum" - "prairiedog" - "prawn" - "prayingmantid" - "prayingmantis" - "primate" - "pronghorn" - "pseudodynerusquadrisectus" - "ptarmigan" - "pterodactyls" - "pterosaurs" - "puffer" - "pufferfish" - "puffin" - "pug" - "pullet" - "puma" - "pupa" - "pupfish" - "puppy" - "purplemarten" - "pygmy" - "python" - "quadrisectus" - "quagga" - "quahog" - "quail" - "queenalexandrasbirdwing" - "queenalexandrasbirdwingbutterfly" - "queenant" - "queenbee" - "queenconch" - "queenslandgrouper" - "queenslandheeler" - "queensnake" - "quelea" - "quetzal" - "quetzalcoatlus" - "quillback" - "quinquespinosus" - "quokka" - "quoll" - "rabbit" - "rabidsquirrel" - "raccoon" - "racer" - "racerunner" - "ragfish" - "rail" - "rainbowfish" - "rainbowlorikeet" - "rainbowtrout" - "ram" - "raptors" - "rasbora" - "rat" - "ratfish" - "rattail" - "rattlesnake" - "raven" - "ray" - "redhead" - "redheadedwoodpecker" - "redpoll" - "redstart" - "redtailedhawk" - "reindeer" - "reptile" - "reynard" - "rhea" - "rhesusmonkey" - "rhino" - "rhinoceros" - "rhinocerosbeetle" - "rhodesianridgeback" - "ringtailedlemur" - "ringworm" - "riograndeescuerzo" - "roach" - "roadrunner" - "roan" - "robberfly" - "robin" - "rockrat" - "rodent" - "roebuck" - "roller" - "rook" - "rooster" - "rottweiler" - "sable" - "sableantelope" - "sablefish" - "saiga" - "sakimonkey" - "salamander" - "salmon" - "saltwatercrocodile" - "sambar" - "samoyeddog" - "sandbarshark" - "sanddollar" - "sanderling" - "sandpiper" - "sapsucker" - "sardine" - "sawfish" - "scallop" - "scarab" - "scarletibis" - "scaup" - "schapendoes" - "schipperke" - "schnauzer" - "scorpion" - "scoter" - "screamer" - "seabird" - "seagull" - "seahog" - "seahorse" - "seal" - "sealion" - "seamonkey" - "seaslug" - "seaurchin" - "senegalpython" - "seriema" - "serpent" - "serval" - "shark" - "shearwater" - "sheep" - "sheldrake" - "shelduck" - "shibainu" - "shihtzu" - "shorebird" - "shoveler" - "shrew" - "shrike" - "shrimp" - "siamang" - "siamesecat" - "siberiantiger" - "sidewinder" - "sifaka" - "silkworm" - "silverfish" - "silverfox" - "silversidefish" - "siskin" - "skimmer" - "skipper" - "skua" - "skylark" - "sloth" - "slothbear" - "slug" - "smelts" - "smew" - "snail" - "snake" - "snipe" - "snoutbutterfly" - "snowdog" - "snowgeese" - "snowleopard" - "snowmonkey" - "snowyowl" - "sockeyesalmon" - "solenodon" - "solitaire" - "songbird" - "sora" - "southernhairnosedwombat" - "sow" - "spadefoot" - "sparrow" - "sphinx" - "spider" - "spidermonkey" - "spiketail" - "spittlebug" - "sponge" - "spoonbill" - "spotteddolphin" - "spreadwing" - "springbok" - "springpeeper" - "springtail" - "squab" - "squamata" - "squeaker" - "squid" - "squirrel" - "stag" - "stagbeetle" - "stallion" - "starfish" - "starling" - "steed" - "steer" - "stegosaurus" - "stickinsect" - "stickleback" - "stilt" - "stingray" - "stinkbug" - "stinkpot" - "stoat" - "stonefly" - "stork" - "stud" - "sturgeon" - "sugarglider" - "sulphurbutterfly" - "sunbear" - "sunbittern" - "sunfish" - "swallow" - "swallowtail" - "swallowtailbutterfly" - "swan" - "swellfish" - "swift" - "swordfish" - "tadpole" - "tahr" - "takin" - "tamarin" - "tanager" - "tapaculo" - "tapeworm" - "tapir" - "tarantula" - "tarpan" - "tarsier" - "taruca" - "tasmaniandevil" - "tasmaniantiger" - "tattler" - "tayra" - "teal" - "tegus" - "teledu" - "tench" - "tenrec" - "termite" - "tern" - "terrapin" - "terrier" - "thoroughbred" - "thrasher" - "thrip" - "thrush" - "thunderbird" - "thylacine" - "tick" - "tiger" - "tigerbeetle" - "tigermoth" - "tigershark" - "tilefish" - "tinamou" - "titi" - "titmouse" - "toad" - "toadfish" - "tomtit" - "topi" - "tortoise" - "toucan" - "towhee" - "tragopan" - "treecreeper" - "trex" - "triceratops" - "trogon" - "trout" - "trumpeterbird" - "trumpeterswan" - "tsetsefly" - "tuatara" - "tuna" - "turaco" - "turkey" - "turnstone" - "turtle" - "turtledove" - "uakari" - "ugandakob" - "uintagroundsquirrel" - "ulyssesbutterfly" - "umbrellabird" - "umbrette" - "unau" - "ungulate" - "unicorn" - "upupa" - "urchin" - "urial" - "uromastyxmaliensis" - "uromastyxspinipes" - "urson" - "urubu" - "urus" - "urutu" - "urva" - "utahprairiedog" - "vampirebat" - "vaquita" - "veery" - "velociraptor" - "velvetcrab" - "velvetworm" - "venomoussnake" - "verdin" - "vervet" - "viceroybutterfly" - "vicuna" - "viper" - "viperfish" - "vipersquid" - "vireo" - "virginiaopossum" - "vixen" - "vole" - "volvox" - "vulpesvelox" - "vulpesvulpes" - "vulture" - "walkingstick" - "wallaby" - "wallaroo" - "walleye" - "walrus" - "warbler" - "warthog" - "wasp" - "waterboatman" - "waterbuck" - "waterbuffalo" - "waterbug" - "waterdogs" - "waterdragons" - "watermoccasin" - "waterstrider" - "waterthrush" - "wattlebird" - "watussi" - "waxwing" - "weasel" - "weaverbird" - "weevil" - "westafricanantelope" - "whale" - "whapuku" - "whelp" - "whimbrel" - "whippet" - "whippoorwill" - "whitebeakeddolphin" - "whiteeye" - "whitepelican" - "whiterhino" - "whitetaileddeer" - "whitetippedreefshark" - "whooper" - "whoopingcrane" - "widgeon" - "widowspider" - "wildcat" - "wildebeast" - "wildebeest" - "willet" - "wireworm" - "wisent" - "wobbegongshark" - "wolf" - "wolfspider" - "wolverine" - "wombat" - "woodborer" - "woodchuck" - "woodnymphbutterfly" - "woodpecker" - "woodstorks" - "woollybearcaterpillar" - "worm" - "wrasse" - "wreckfish" - "wren" - "wrenchbird" - "wryneck" - "wuerhosaurus" - "wyvern" - "xanclomys" - "xanthareel" - "xantus" - "xantusmurrelet" - "xeme" - "xenarthra" - "xenoposeidon" - "xenops" - "xenopterygii" - "xenopus" - "xenotarsosaurus" - "xenurusunicinctus" - "xerus" - "xiaosaurus" - "xinjiangovenator" - "xiphias" - "xiphiasgladius" - "xiphosuran" - "xoloitzcuintli" - "xoni" - "xrayfish" - "xraytetra" - "xuanhanosaurus" - "xuanhuaceratops" - "xuanhuasaurus" - "yaffle" - "yak" - "yapok" - "yardant" - "yearling" - "yellowbelliedmarmot" - "yellowbellylizard" - "yellowhammer" - "yellowjacket" - "yellowlegs" - "yellowthroat" - "yellowwhitebutterfly" - "yeti" - "ynambu" - "yorkshireterrier" - "yosemitetoad" - "yucker" - "zander" - "zanzibardaygecko" - "zebra" - "zebradove" - "zebrafinch" - "zebrafish" - "zebralongwingbutterfly" - "zebraswallowtailbutterfly" - "zebratailedlizard" - "zebu" - "zenaida" - "zeren" - "zethusspinipes" - "zethuswasp" - "zigzagsalamander" - "zonetailedpigeon" - "zooplankton" - "zopilote" - "zorilla"]) \ No newline at end of file diff --git a/src/status_im/utils/gfycat/core.cljs b/src/status_im/utils/gfycat/core.cljs index 8443ca4238..06bdf7760b 100644 --- a/src/status_im/utils/gfycat/core.cljs +++ b/src/status_im/utils/gfycat/core.cljs @@ -1,28 +1,14 @@ (ns status-im.utils.gfycat.core - (:require [status-im.utils.gfycat.animals :as animals] - [status-im.utils.gfycat.adjectives :as adjectives] - [clojure.string :as str] - [status-im.utils.random :as rnd] + (:require [status-im.native-module.core :as native-module] [status-im.utils.datetime :as datetime])) -(defn- pick-random - [gen vector] - (str/capitalize (rnd/seeded-rand-nth gen vector))) - -(defn- build-gfy - [public-key] - (let [gen (rnd/rand-gen public-key) - first-adjective (pick-random gen adjectives/data) - second-adjective (pick-random gen adjectives/data) - animal (pick-random gen animals/data)] - (str first-adjective " " second-adjective " " animal))) - (def unknown-gfy "Unknown") -(defn generate-gfy - ([public-key] - (case public-key - nil unknown-gfy - "0" unknown-gfy - (build-gfy public-key))) - ([] (generate-gfy (datetime/timestamp)))) +(defn- build-gfy + [public-key] + (case public-key + nil unknown-gfy + "0" unknown-gfy + (native-module/generate-gfycat public-key))) + +(def generate-gfy (memoize build-gfy)) diff --git a/src/status_im/utils/identicon.cljs b/src/status_im/utils/identicon.cljs index 4de801fef7..e28f5274f9 100644 --- a/src/status_im/utils/identicon.cljs +++ b/src/status_im/utils/identicon.cljs @@ -1,13 +1,5 @@ (ns status-im.utils.identicon - (:require [status-im.js-dependencies :as dependencies])) + (:require + [status-im.native-module.core :as native-module])) -(def default-size 150) - -(defn identicon - ([hash] (identicon hash (clj->js {:background [255 255 255 255] - :margin 0.24 - :size default-size}))) - ([hash options] - (str "data:image/png;base64," - (let [identicon-js dependencies/identicon-js] - (str (new identicon-js hash options)))))) +(def identicon (memoize native-module/identicon)) diff --git a/status-go-version.json b/status-go-version.json index 64999e1353..64ea02e603 100644 --- a/status-go-version.json +++ b/status-go-version.json @@ -3,6 +3,6 @@ "owner": "status-im", "repo": "status-go", "version": "develop", - "commit-sha1": "963ea94e08ed46e20a4feee1f5d2a294e9cdf6c1", - "src-sha256": "19zz3ccjpk8dnrani4hccpyx6q0gvzr4s43cqr8ybk97z09w175l" + "commit-sha1": "40e66e6186164a422e432fd754b8f86b958014f3", + "src-sha256": "0ra9agglqz9jpxqh4rwzljq73g0gy0zzy4n8vcqqf0dsrw26fhcn" } diff --git a/test/appium/tests/users.py b/test/appium/tests/users.py index 6d6c36143f..6b93b38f8d 100644 --- a/test/appium/tests/users.py +++ b/test/appium/tests/users.py @@ -1,6 +1,6 @@ basic_user = dict() basic_user['passphrase'] = "tree weekend ceiling awkward universe pyramid glimpse raven pair lounge grant grief" -basic_user['username'] = "Cadetblue Popular Monoclonius" +basic_user['username'] = "Royal Defensive Solenodon" basic_user['public_key'] = "0x042e0309b5f6bedee93a1b984af08f89a101aff62d01ddd0a1c8f4a1d4db3b91e648c914019d09de9f07dd" \ "baacb77fdf07e89b5e0d60e9a8df05b75f213661fcad" basic_user['address'] = "f184747445c3B85CEb147DfB136067CB93d95F1D" @@ -8,7 +8,7 @@ basic_user['special_chars_password'] = " !\"#$Á%Ö&'()*+Í, -./:ä;<=>?@[\\]^_` ens_user = dict() ens_user['passphrase'] = "husband rough hotel obey annual you member reopen struggle air evoke taxi" -ens_user['username'] = "Bouncy Powderblue Xeme" +ens_user['username'] = "Outstanding Actual Eyas" ens_user['public_key'] = "0x04318d20a2ca5fd0022579005ed24802e07d4ec610bede808dd13d3318af439e16d55be1a59af007a11120b" \ "d1c205861e5f53fe7b000a25e2b0d4eee7f0c5ebf7e" ens_user['ens'] = 'autotester' @@ -17,34 +17,34 @@ 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'] = "Fuzzy Lightyellow Mara" +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'] = "subway size dial screen stomach route skin kitchen radar true coffee six" -wallet_users['B']['username'] = "Highlevel Sticky Dragon" +wallet_users['B']['username'] = "Idealistic Assured Spidermonkey" wallet_users['B']['address'] = "85b159bad0d500483b307ec6892c7fa3be591cbc" wallet_users['B']['public_key'] = "0x04c068a1467abf8d18ea4a020e52880d855c5a418e52c1ef29cc9b30999ed986cf5c9fe55" \ "d6ffd10659be32c8c1ce15dbf7dc0659e238a0169eb7e18be9757baa8" wallet_users['C'] = dict() wallet_users['C']['passphrase'] = "purchase ensure mistake crystal person similar shaft family shield clog risk market" -wallet_users['C']['username'] = "Trustworthy Acidic Shorebird" +wallet_users['C']['username'] = "Mellow Virtual Nubiangoat" wallet_users['C']['address'] = "8dce052ccda2f6f6b555759cee6957e04a6ddf5b" wallet_users['C']['public_key'] = "0x040e562b69362e7e57492bca50b6095acfa636c48b85eef2bc0e4180b6e99fc5e73f45c3" \ "40837da01728d4585695fda7f1de2ed193a1dd4080291d90812e1cae77" wallet_users['D'] = dict() wallet_users['D']['passphrase'] = "hen mango since lottery laundry flag report whisper cycle rate festival carry" -wallet_users['D']['username'] = "Agile Discrete Galapagossealion" +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'] = "Favorable Trusting Bats" +wallet_users['E']['username'] = "Wry Shiny Damselfly" wallet_users['E']['address'] = "0x3e2e4077753d3c229a9ae332b9ca46958945e2f6" wallet_users['E']['public_key'] = "0x044cf0620ec3ea0aba9fb0e19cb42a6fbd6b4e74f234f0da82580564817b238cc6434745d31" \ "fa1649927ba48adfa7c95991fd51940bc00a71e80b095db5b107f1b" @@ -54,14 +54,14 @@ 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'] = "Kooky Quintessential Bumblebee" +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'] = "Wasteful Solid Piedstarling" +chat_users['B']['username'] = "Repentant Velvety Adeliepenguin" chat_users['B']['address'] = "0xB094A8c0A3F71e3246C3eD89a51f81008c800088" chat_users['B']['public_key'] = "0x0439a66cd420082741147ef8b1ab9c8d8558d21f2cc3cb4099fd0aa5507c5d8bdb94ded8beccfa" \ "2812f6b641de9f9c31fa62379af6d148fdec45335196b2e6307b" @@ -71,7 +71,7 @@ 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'] = 'Mortified Darling Bats' +transaction_senders['A']['username'] = 'Darkorchid Clueless Ewe' transaction_senders['A']['address'] = 'efca4fd47b98b9f01c4eef4827e576a01459728a' transaction_senders['A']['public_key'] = "0x046c0ec05e1f13481af0e3d9cc7869e6f1b64306adcfb325827518c66f4ea3dafbd18de3" \ "0269f95aadcf3aae40a27075505b625c1cd08b41a335b318bf3fe7ca21" @@ -79,21 +79,21 @@ transaction_senders['A']['public_key'] = "0x046c0ec05e1f13481af0e3d9cc7869e6f1b6 transaction_senders['B'] = dict() transaction_senders['B']['passphrase'] = \ "quality walk globe dune rally distance fragile year turn horror sample lobster" -transaction_senders['B']['username'] = "Mellow Luxurious Sloth" +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'] = "Uneven Dramatic Trumpeterbird" +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'] = "Instructive Graceful Icelandichorse" +transaction_senders['D']['username'] = "Indelible Dapper Hoatzin" transaction_senders['D']['address'] = "616874dc6cc2810cdc930dea26496fcf217d58ca" transaction_senders['D']['public_key'] = "0x044764a9ba22bb4ae355619ca3824ee66b9f704c7fc08280e6305112bf80fd96b2fcd73" \ "d0dd570471986c229c077c8053ee47784416eb6604d52e41f8f9d566ef8" @@ -101,96 +101,96 @@ transaction_senders['D']['public_key'] = "0x044764a9ba22bb4ae355619ca3824ee66b9f transaction_senders['E'] = dict() transaction_senders['E']['passphrase'] = \ "sea ill guard bounce gesture tomato walnut fitness plastic affair oven transfer" -transaction_senders['E']['username'] = "Dual Occasional Birdofparadise" +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'] = "Deadly Caring Peacock" +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'] = "Several Firebrick Frigatebird" +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'] = "Twin Hollow Booby" +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'] = "Revolving Minty Osprey" +transaction_senders['I']['username'] = "Finished Infatuated Whiteeye" transaction_senders['I']['address'] = "0887afe0ee3e1b195f596350bb04bba034514af9" transaction_senders['I']['public_key'] = "0x04e61e616f881383e807cd1fb714fa2e06b5ad1cb6cd7b97a9265da2ad9a133ee750954a" \ "6c4da3635f2e406b310f6e294ca94ea3a686287a1276e4e86612886f8e" transaction_senders['J'] = dict() transaction_senders['J']['passphrase'] = "shrug during breeze mercy install net reopen uniform atom guilt sadness elite" -transaction_senders['J']['username'] = "Strict Quarterly Abyssiniangroundhornbill" +transaction_senders['J']['username'] = "Outrageous Knotty Shearwater" transaction_senders['J']['address'] = "ad0f319ca0cfa051f625ad1a3fc6bf0cbad45b24" transaction_senders['J']['public_key'] = "0x04fedbb6114918babbdabdc7bd5cb5f3aaa13f4bd5df5c27c2b2adfc91dffae15f75bf9f" \ "0e9bb747ef1996b63260f40dee1e00f62b061d95c6878b8c5ecfb33835" transaction_senders['K'] = dict() transaction_senders['K']['passphrase'] = "fly west avoid depend tape direct foster off cry crucial blame elegant" -transaction_senders['K']['username'] = "Elegant Lightsteelblue Cuckoo" +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'] = "Greedy Nutty Macaque" +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'] = "Noxious Respectful Tilefish" +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'] = "Itchy Lawful Hermitcrab" +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'] = "Orderly Hardtofind Iguana" +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'] = "Loving Minty Fox" +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'] = "Harmonious Soft Trumpeterbird" +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'] = "Insubstantial Darkslateblue Diplodocus" +transaction_senders['R']['username'] = "Icky Tan Flickertailsquirrel" transaction_senders['R']['address'] = "d54bf6c67e349bf889fd5d411a8c410b3a4cc099" transaction_senders['R']['public_key'] = "0x04ec7a5b6cd54a2d7aa7f156013870e8c7559a14239752dfbe879167b3deb55fc713da44d" \ "096fd2e02aac143cb8999139ebd4a07b7e7c1fd72cc192a2a2f576682" @@ -198,7 +198,7 @@ transaction_senders['R']['public_key'] = "0x04ec7a5b6cd54a2d7aa7f156013870e8c755 transaction_senders['S'] = dict() transaction_senders['S']['passphrase'] = \ "tree capable picnic swap venture correct open enforce assault news inform pear" -transaction_senders['S']['username'] = "Quixotic Private Turaco" +transaction_senders['S']['username'] = "Cyan Intent Meadowlark" transaction_senders['S']['address'] = "061fae3dd75beab5855f584837ca0c0a8e84f5c1" transaction_senders['S']['public_key'] = "0x04579ab8085e685a6ab1dee8435b05bcb04c8332d22f96ecc7300da95e7565c8e4a950a6f" \ "b1809db7590ad87d28c7aec58632e8870cb642df839252e356010a9eb" @@ -206,49 +206,49 @@ transaction_senders['S']['public_key'] = "0x04579ab8085e685a6ab1dee8435b05bcb04c transaction_senders['T'] = dict() transaction_senders['T']['passphrase'] = \ "describe adult cat kidney disagree stick timber unaware yellow jungle leave warrior" -transaction_senders['T']['username'] = "Peppery Darkgray Blackrhino" +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'] = "Intelligent Parallel Avocet" +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'] = "Open Superb Shoveler" +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'] = "Rowdy Leafy Penguin" +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'] = "Bland Specific Atlanticsharpnosepuffer" +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'] = "Tricky Wasteful Fishingcat" +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'] = "Rare Bountiful Borzoi" +transaction_senders['Z']['username'] = "Ill Brisk Cleanerwrasse" transaction_senders['Z']['address'] = "29ff033fa04f5ba4192823ddbf23f8397809995c" transaction_senders['Z']['public_key'] = "0x04563c506aaf728a37e19b00dd3db3d0e44acd01069191a68e4063ed09bc47e91eac5e0c" \ "7c77fae568960ec9ce7f1ba7b49d3b930389e387665dcde213c344eafc" @@ -257,48 +257,48 @@ 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'] = "Roasted Modern Azurevase" +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'] = "Classic Forked Gentoopenguin" +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'] = "Evergreen Lumpy Crustacean" +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'] = "Clever Thorough Velociraptor" +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'] = "Huge Delectable Sandpiper" +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'] = "Stormy Joyful Wobbegongshark" +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'] = "Suburban Colossal Frogmouth" +transaction_recipients['G']['username'] = "Acrobatic Foolish Marabou" transaction_recipients['G']['address'] = "b1f8b0db0f12e45d7712625bc53535235d245a9f" transaction_recipients['G']['public_key'] = "0x04659aa00141aa2f9a0658f56427f3ee06abb7218f5c8a5c6afd377581fde3c474645" \ "334f7cfd2faeac627e65536dca578bc0bad3f91bba0862de5ebac98ef4eeb" @@ -306,7 +306,7 @@ transaction_recipients['G']['public_key'] = "0x04659aa00141aa2f9a0658f56427f3ee0 transaction_recipients['H'] = dict() transaction_recipients['H']['passphrase'] = \ "rail change device celery metal husband panda avoid often shiver payment real" -transaction_recipients['H']['username'] = "Wellgroomed Navajowhite Fairyfly" +transaction_recipients['H']['username'] = "Prudent Big Nerka" transaction_recipients['H']['address'] = "0xe9676a57a28800d83301d9d3f9c77fd2e933609c" transaction_recipients['H']['public_key'] = "0x042b6405c7a4c34342c950cfb330f779ab27f49bc58f35e204fd927abda4706f1b9367" \ "cd68166661a62266447ecfe4f320280174e87f3c7867a3c6583c1933ab5a" @@ -314,14 +314,14 @@ transaction_recipients['H']['public_key'] = "0x042b6405c7a4c34342c950cfb330f779a transaction_recipients['I'] = dict() transaction_recipients['I']['passphrase'] = \ "engine equal wisdom saddle icon spring express limit surprise salute unique rose" -transaction_recipients['I']['username'] = "Aggravating Scornful Graysquirrel" +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'] = "Extraneous Deficient Crow" +transaction_recipients['J']['username'] = "Seashell Amazing Gemsbuck" transaction_recipients['J']['address'] = "0xa03a75b7888cac24b35b4d1f5924406f3b491795" transaction_recipients['J']['public_key'] = "0x04e7e481932714c1a13ffb29fc79446ee9f30d27b4dec47af9dcd20c68a771c2520a0e" \ "7a80804ff59a750693492a65be9682d0b850b4080d976cf9e43ff37ec841" diff --git a/test/cljs/status_im/test/chat/db.cljs b/test/cljs/status_im/test/chat/db.cljs index fd320dc975..088684bc58 100644 --- a/test/cljs/status_im/test/chat/db.cljs +++ b/test/cljs/status_im/test/chat/db.cljs @@ -1,5 +1,7 @@ (ns status-im.test.chat.db (:require [cljs.test :refer-macros [deftest is testing]] + [status-im.utils.gfycat.core :as gfycat] + [status-im.utils.identicon :as identicon] [status-im.chat.db :as db])) (deftest group-chat-name @@ -106,14 +108,16 @@ (is (not (:display-username? actual-m1)))))))) (deftest active-chats-test - (let [active-chat-1 {:is-active true :chat-id "1"} - active-chat-2 {:is-active true :chat-id "2"} - chats {"1" active-chat-1 - "2" active-chat-2 - "3" {:is-active false :chat-id "3"}}] - (testing "it returns only chats with is-active" - (is (= #{"1" "2"} - (set (keys (db/active-chats {} chats {})))))))) + (with-redefs [gfycat/generate-gfy (constantly "generated") + identicon/identicon (constantly "generated")] + (let [active-chat-1 {:is-active true :chat-id "1"} + active-chat-2 {:is-active true :chat-id "2"} + chats {"1" active-chat-1 + "2" active-chat-2 + "3" {:is-active false :chat-id "3"}}] + (testing "it returns only chats with is-active" + (is (= #{"1" "2"} + (set (keys (db/active-chats {} chats {}))))))))) #_(deftest messages-with-datemarks (testing "empty state" diff --git a/test/cljs/status_im/test/chat/models.cljs b/test/cljs/status_im/test/chat/models.cljs index 1c7c490fb4..fbdc27d4cc 100644 --- a/test/cljs/status_im/test/chat/models.cljs +++ b/test/cljs/status_im/test/chat/models.cljs @@ -1,5 +1,7 @@ (ns status-im.test.chat.models (:require [cljs.test :refer-macros [deftest is testing]] + [status-im.utils.gfycat.core :as gfycat] + [status-im.utils.identicon :as identicon] [status-im.ethereum.json-rpc :as json-rpc] [status-im.utils.clocks :as utils.clocks] [status-im.chat.models :as chat])) @@ -44,19 +46,21 @@ (is (= "new-name" (:name actual-chat))))))) (deftest add-public-chat - (let [topic "topic" - fx (chat/add-public-chat {:db {}} topic) - chat (get-in fx [:db :chats topic])] - (testing "it sets the name" - (is (= topic (:name chat)))) - (testing "it sets the participants" - (is (= #{} (:contacts chat)))) - (testing "it sets the chat-id" - (is (= topic (:chat-id chat)))) - (testing "it sets the group-chat flag" - (is (:group-chat chat))) - (testing "it does not sets the public flag" - (is (:public? chat))))) + (with-redefs [gfycat/generate-gfy (constantly "generated") + identicon/identicon (constantly "generated")] + (let [topic "topic" + fx (chat/add-public-chat {:db {}} topic) + chat (get-in fx [:db :chats topic])] + (testing "it sets the name" + (is (= topic (:name chat)))) + (testing "it sets the participants" + (is (= #{} (:contacts chat)))) + (testing "it sets the chat-id" + (is (= topic (:chat-id chat)))) + (testing "it sets the group-chat flag" + (is (:group-chat chat))) + (testing "it does not sets the public flag" + (is (:public? chat)))))) (deftest clear-history-test (let [chat-id "1" @@ -115,7 +119,7 @@ (testing "it makes the relevant json-rpc calls" (let [actual (chat/remove-chat cofx chat-id)] (is (::json-rpc/call actual)) - (is (= 5 (count (::json-rpc/call actual)))))))) + (is (= 4 (count (::json-rpc/call actual)))))))) (deftest multi-user-chat? (let [chat-id "1"] diff --git a/test/cljs/status_im/test/chat/models/message.cljs b/test/cljs/status_im/test/chat/models/message.cljs index fcde1d74c5..7a9819de82 100644 --- a/test/cljs/status_im/test/chat/models/message.cljs +++ b/test/cljs/status_im/test/chat/models/message.cljs @@ -1,5 +1,7 @@ (ns status-im.test.chat.models.message (:require [cljs.test :refer-macros [deftest is testing]] + [status-im.utils.gfycat.core :as gfycat] + [status-im.utils.identicon :as identicon] [status-im.transport.message.protocol :as protocol] [status-im.chat.models.message :as message] [status-im.utils.datetime :as time])) @@ -144,35 +146,38 @@ (is (= cofx (message/receive-many cofx [bad-chat-id-message])))))) (deftest receive-one-to-one - (let [cofx {:db {:chats {"matching" {}} - :multiaccount {:public-key "me"} - :current-chat-id "chat-id" - :view-id :chat}} - valid-message {:chat-id "matching" - :from "matching" - :message-type :user-message - :message-id "1" - :clock-value 1 - :timestamp 0} - own-message {:chat-id "matching" - :from "me" - :message-type :user-message - :message-id "1" - :clock-value 1 - :timestamp 0} + (with-redefs [gfycat/generate-gfy (constantly "generated") + identicon/identicon (constantly "generated")] - bad-chat-id-message {:chat-id "bad-chat-id" - :from "not-matching" - :message-type :user-message - :message-id "1" - :clock-value 1 - :timestamp 0}] - (testing "a valid message" - (is (get-in (message/receive-many cofx [valid-message]) [:db :chats "matching" :messages "1"]))) - (testing "our own message" - (is (get-in (message/receive-many cofx [own-message]) [:db :chats "matching" :messages "1"]))) - (testing "a message with non matching chat-id" - (is (get-in (message/receive-many cofx [bad-chat-id-message]) [:db :chats "not-matching" :messages "1"]))))) + (let [cofx {:db {:chats {"matching" {}} + :multiaccount {:public-key "me"} + :current-chat-id "chat-id" + :view-id :chat}} + valid-message {:chat-id "matching" + :from "matching" + :message-type :user-message + :message-id "1" + :clock-value 1 + :timestamp 0} + own-message {:chat-id "matching" + :from "me" + :message-type :user-message + :message-id "1" + :clock-value 1 + :timestamp 0} + + bad-chat-id-message {:chat-id "bad-chat-id" + :from "not-matching" + :message-type :user-message + :message-id "1" + :clock-value 1 + :timestamp 0}] + (testing "a valid message" + (is (get-in (message/receive-many cofx [valid-message]) [:db :chats "matching" :messages "1"]))) + (testing "our own message" + (is (get-in (message/receive-many cofx [own-message]) [:db :chats "matching" :messages "1"]))) + (testing "a message with non matching chat-id" + (is (get-in (message/receive-many cofx [bad-chat-id-message]) [:db :chats "not-matching" :messages "1"])))))) (deftest delete-message (let [timestamp (time/now) diff --git a/test/cljs/status_im/test/contacts/db.cljs b/test/cljs/status_im/test/contacts/db.cljs index ae6b27e3ce..5d6a09e876 100644 --- a/test/cljs/status_im/test/contacts/db.cljs +++ b/test/cljs/status_im/test/contacts/db.cljs @@ -1,11 +1,13 @@ (ns status-im.test.contacts.db (:require [cljs.test :refer-macros [deftest is testing]] + [status-im.utils.gfycat.core :as gfycat] [status-im.utils.identicon :as identicon] [status-im.contact.db :as contact.db])) (deftest contacts-subs (testing "get-all-contacts-in-group-chat" - (with-redefs [identicon/identicon (constantly "generated")] + (with-redefs [gfycat/generate-gfy (constantly "generated") + identicon/identicon (constantly "generated")] (let [chat-contact-ids #{"0x04fcf40c526b09ff9fb22f4a5dbd08490ef9b64af700870f8a0ba2133f4251d5607ed83cd9047b8c2796576bc83fa0de23a13a4dced07654b8ff137fe744047917" "0x04985040682b77a32bb4bb58268a0719bd24ca4d07c255153fe1eb2ccd5883669627bd1a092d7cc76e8e4b9104327667b19dcda3ac469f572efabe588c38c1985f" "0x048a2f8b80c60f89a91b4c1316e56f75b087f446e7b8701ceca06a40142d8efe1f5aa36bd0fee9e248060a8d5207b43ae98bef4617c18c71e66f920f324869c09f"} @@ -33,8 +35,8 @@ admins contacts current-multiaccount) - [{:name "Snappy Impressive Leonberger" - :photo-path "generated" + [{:name "generated" + :identicon "generated" :admin? true :address "71adb0644e2b590e37dafdfea8bd58f0c7668c7f" :public-key "0x04fcf40c526b09ff9fb22f4a5dbd08490ef9b64af700870f8a0ba2133f4251d5607ed83cd9047b8c2796576bc83fa0de23a13a4dced07654b8ff137fe744047917" diff --git a/test/cljs/status_im/test/group_chats/core.cljs b/test/cljs/status_im/test/group_chats/core.cljs index 944d6498b5..e736ed0b1e 100644 --- a/test/cljs/status_im/test/group_chats/core.cljs +++ b/test/cljs/status_im/test/group_chats/core.cljs @@ -1,5 +1,7 @@ (ns status-im.test.group-chats.core (:require [cljs.test :refer-macros [deftest is testing]] + [status-im.utils.gfycat.core :as gfycat] + [status-im.utils.identicon :as identicon] [status-im.ethereum.json-rpc :as json-rpc] [status-im.utils.clocks :as utils.clocks] [status-im.utils.config :as config] @@ -30,145 +32,148 @@ (is (= 3 (group-chats/get-last-clock-value {:db {:chats {chat-id {:last-clock-value 3}}}} chat-id)))) (deftest handle-group-membership-update-test - (testing "a brand new chat" - (let [actual (-> - (group-chats/handle-membership-update {:now 0 :db {}} initial-message "payload" admin) - :db - :chats - (get chat-id))] - (testing "it creates a new chat" - (is actual)) - (testing "it sets the right chat-name" - (is (= "chat-name" - (:name actual)))) - (testing "it sets the right chat-id" - (is (= chat-id - (:chat-id actual)))) - (testing "it sets the right participants" - (is (= #{member-1 member-2 member-3} - (:contacts actual)))) - (testing "it sets the updates" - (is (= (:membership-updates initial-message) - (:membership-updates actual)))) - (testing "it sets the right admins" - (is (= #{admin} - (:admins actual)))) - (testing "it adds a system message" - (is (= 3 (count (:messages actual))))) - (testing "it adds the right text" - (is (= ["group-chat-created" - "group-chat-member-added" - "group-chat-member-added"] - (map (comp :text :content) (sort-by :clock-value (vals (:messages actual))))))))) - (testing "a chat with the wrong id" - (let [bad-chat-id (str random-id member-2) - actual (-> - (group-chats/handle-membership-update - {:now 0 :db {}} - (assoc initial-message :chat-id bad-chat-id) - "payload" - admin) - :db - :chats - (get bad-chat-id))] - (testing "it does not create a chat" - (is (not actual))))) - (testing "an already existing chat" - (let [cofx (assoc - (group-chats/handle-membership-update {:now 0 :db {:multiaccount {:public-key member-3}}} initial-message "payload" admin) - :now 0)] - (testing "the message has already been received" - (let [actual (group-chats/handle-membership-update cofx initial-message "payload" admin)] - (testing "it noops" - (is (= - (get-in cofx [:db :chats chat-id]) - (get-in actual [:db :chats chat-id])))))) - (testing "a chat we have deleted" - (let [after-leaving-cofx (-> (group-chats/handle-membership-update cofx - {:chat-id chat-id - :membership-updates [{:from member-1 - :events [{:type "chat-created" - :clock-value 1 - :name "group-name"} - {:type "admins-added" - :clock-value 10 - :members [member-2]} - {:type "admin-removed" - :clock-value 11 - :member member-1}]} - {:from member-3 - :events [{:type "member-removed" - :clock-value 12 - :member member-3}]}]} - "payload" - member-3) - (assoc-in [:db :chats chat-id :is-active] false)) - after-been-invited-again-cofx (group-chats/handle-membership-update (assoc after-leaving-cofx :now 0) - {:chat-id chat-id - :membership-updates [{:from member-1 - :events [{:type "chat-created" - :clock-value 1 - :name "group-name"} - {:type "admins-added" - :clock-value 10 - :members [member-2]} - {:type "admin-removed" - :clock-value 11 - :member member-1}]} - {:from member-2 - :events [{:type "members-added" - :clock-value 13 - :members [member-3]}]}]} - "payload" - member-2)] + (with-redefs [gfycat/generate-gfy (constantly "generated") + identicon/identicon (constantly "generated")] - (testing "it sets the chat active after been invited again" - (is (get-in after-been-invited-again-cofx [:db :chats chat-id :is-active]))))) - (testing "a new message comes in" - (let [actual (group-chats/handle-membership-update cofx - {:chat-id chat-id - :membership-updates [{:from member-1 - :events [{:type "chat-created" - :clock-value 1 - :name "group-name"} - {:type "admins-added" - :clock-value 10 - :members [member-2]} - {:type "admin-removed" - :clock-value 11 - :member member-1}]} - {:from member-2 - :events [{:type "member-removed" - :clock-value 12 - :member member-3} - {:type "members-added" - :clock-value 12 - :members [member-4]} - {:type "name-changed" - :clock-value 13 - :name "new-name"}]}]} - "payload" - member-3) - actual-chat (get-in actual [:db :chats chat-id])] - (testing "the chat is updated" - (is actual-chat)) - (testing "admins are updated" - (is (= #{member-2} (:admins actual-chat)))) - (testing "members are updated" - (is (= #{member-1 member-2 member-4} (:contacts actual-chat)))) - (testing "the name is updated" - (is (= "new-name" (:name actual-chat)))) - (testing "it adds a system message" - (is (= 7 (count (:messages actual-chat))))) - (testing "it sets the right text" - (is (= ["group-chat-created" - "group-chat-member-added" - "group-chat-member-added" - "group-chat-admin-added" - "group-chat-member-added" - "group-chat-member-removed" - "group-chat-name-changed"] - (map (comp :text :content) (sort-by :clock-value (vals (:messages actual-chat)))))))))))) + (testing "a brand new chat" + (let [actual (-> + (group-chats/handle-membership-update {:now 0 :db {}} initial-message "payload" admin) + :db + :chats + (get chat-id))] + (testing "it creates a new chat" + (is actual)) + (testing "it sets the right chat-name" + (is (= "chat-name" + (:name actual)))) + (testing "it sets the right chat-id" + (is (= chat-id + (:chat-id actual)))) + (testing "it sets the right participants" + (is (= #{member-1 member-2 member-3} + (:contacts actual)))) + (testing "it sets the updates" + (is (= (:membership-updates initial-message) + (:membership-updates actual)))) + (testing "it sets the right admins" + (is (= #{admin} + (:admins actual)))) + (testing "it adds a system message" + (is (= 3 (count (:messages actual))))) + (testing "it adds the right text" + (is (= ["group-chat-created" + "group-chat-member-added" + "group-chat-member-added"] + (map (comp :text :content) (sort-by :clock-value (vals (:messages actual))))))))) + (testing "a chat with the wrong id" + (let [bad-chat-id (str random-id member-2) + actual (-> + (group-chats/handle-membership-update + {:now 0 :db {}} + (assoc initial-message :chat-id bad-chat-id) + "payload" + admin) + :db + :chats + (get bad-chat-id))] + (testing "it does not create a chat" + (is (not actual))))) + (testing "an already existing chat" + (let [cofx (assoc + (group-chats/handle-membership-update {:now 0 :db {:multiaccount {:public-key member-3}}} initial-message "payload" admin) + :now 0)] + (testing "the message has already been received" + (let [actual (group-chats/handle-membership-update cofx initial-message "payload" admin)] + (testing "it noops" + (is (= + (get-in cofx [:db :chats chat-id]) + (get-in actual [:db :chats chat-id])))))) + (testing "a chat we have deleted" + (let [after-leaving-cofx (-> (group-chats/handle-membership-update cofx + {:chat-id chat-id + :membership-updates [{:from member-1 + :events [{:type "chat-created" + :clock-value 1 + :name "group-name"} + {:type "admins-added" + :clock-value 10 + :members [member-2]} + {:type "admin-removed" + :clock-value 11 + :member member-1}]} + {:from member-3 + :events [{:type "member-removed" + :clock-value 12 + :member member-3}]}]} + "payload" + member-3) + (assoc-in [:db :chats chat-id :is-active] false)) + after-been-invited-again-cofx (group-chats/handle-membership-update (assoc after-leaving-cofx :now 0) + {:chat-id chat-id + :membership-updates [{:from member-1 + :events [{:type "chat-created" + :clock-value 1 + :name "group-name"} + {:type "admins-added" + :clock-value 10 + :members [member-2]} + {:type "admin-removed" + :clock-value 11 + :member member-1}]} + {:from member-2 + :events [{:type "members-added" + :clock-value 13 + :members [member-3]}]}]} + "payload" + member-2)] + + (testing "it sets the chat active after been invited again" + (is (get-in after-been-invited-again-cofx [:db :chats chat-id :is-active]))))) + (testing "a new message comes in" + (let [actual (group-chats/handle-membership-update cofx + {:chat-id chat-id + :membership-updates [{:from member-1 + :events [{:type "chat-created" + :clock-value 1 + :name "group-name"} + {:type "admins-added" + :clock-value 10 + :members [member-2]} + {:type "admin-removed" + :clock-value 11 + :member member-1}]} + {:from member-2 + :events [{:type "member-removed" + :clock-value 12 + :member member-3} + {:type "members-added" + :clock-value 12 + :members [member-4]} + {:type "name-changed" + :clock-value 13 + :name "new-name"}]}]} + "payload" + member-3) + actual-chat (get-in actual [:db :chats chat-id])] + (testing "the chat is updated" + (is actual-chat)) + (testing "admins are updated" + (is (= #{member-2} (:admins actual-chat)))) + (testing "members are updated" + (is (= #{member-1 member-2 member-4} (:contacts actual-chat)))) + (testing "the name is updated" + (is (= "new-name" (:name actual-chat)))) + (testing "it adds a system message" + (is (= 7 (count (:messages actual-chat))))) + (testing "it sets the right text" + (is (= ["group-chat-created" + "group-chat-member-added" + "group-chat-member-added" + "group-chat-admin-added" + "group-chat-member-added" + "group-chat-member-removed" + "group-chat-name-changed"] + (map (comp :text :content) (sort-by :clock-value (vals (:messages actual-chat))))))))))))) (deftest build-group-test (testing "only adds" diff --git a/test/cljs/status_im/test/pairing/core.cljs b/test/cljs/status_im/test/pairing/core.cljs index c363d03382..091519d10b 100644 --- a/test/cljs/status_im/test/pairing/core.cljs +++ b/test/cljs/status_im/test/pairing/core.cljs @@ -1,7 +1,8 @@ (ns status-im.test.pairing.core (:require [cljs.test :refer-macros [deftest is testing]] - [status-im.transport.message.pairing :as transport.pairing] + [status-im.utils.gfycat.core :as gfycat] [status-im.utils.identicon :as identicon] + [status-im.transport.message.pairing :as transport.pairing] [status-im.utils.pairing :as pairing.utils] [status-im.utils.config :as config] [status-im.pairing.core :as pairing])) @@ -129,7 +130,8 @@ (is (= expected (pairing/merge-contact contact-1 contact-2)))))) (deftest handle-sync-installation-test - (with-redefs [identicon/identicon (constantly "generated")] + (with-redefs [gfycat/generate-gfy (constantly "generated") + identicon/identicon (constantly "generated")] (testing "syncing contacts" (let [old-contact-1 {:name "old-contact-one" :public-key "contact-1" diff --git a/test/cljs/status_im/test/runner.cljs b/test/cljs/status_im/test/runner.cljs index 28d437c498..32df6e6de5 100644 --- a/test/cljs/status_im/test/runner.cljs +++ b/test/cljs/status_im/test/runner.cljs @@ -53,7 +53,6 @@ [status-im.test.utils.contenthash] [status-im.test.utils.datetime] [status-im.test.utils.fx] - [status-im.test.utils.gfycat.core] [status-im.test.utils.http] [status-im.test.utils.money] [status-im.test.utils.prices] @@ -135,7 +134,6 @@ 'status-im.test.utils.contenthash 'status-im.test.utils.datetime 'status-im.test.utils.fx - 'status-im.test.utils.gfycat.core 'status-im.test.utils.http 'status-im.test.utils.money 'status-im.test.utils.prices diff --git a/test/cljs/status_im/test/transport/core.cljs b/test/cljs/status_im/test/transport/core.cljs index 35e12b34ee..c6fc0e2191 100644 --- a/test/cljs/status_im/test/transport/core.cljs +++ b/test/cljs/status_im/test/transport/core.cljs @@ -46,6 +46,7 @@ (def sig "0x04325367620ae20dd878dbb39f69f02c567d789dd21af8a88623dc5b529827c2812571c380a2cd8236a2851b8843d6486481166c39debf60a5d30b9099c66213e4") (def messages [{:id "someid" + :metadata {:author {:publicKey sig}} :message {:sig sig :ttl 10 :timestamp 1527692015 diff --git a/test/cljs/status_im/test/tribute_to_talk/core.cljs b/test/cljs/status_im/test/tribute_to_talk/core.cljs index bba1d499d8..117208ddcd 100644 --- a/test/cljs/status_im/test/tribute_to_talk/core.cljs +++ b/test/cljs/status_im/test/tribute_to_talk/core.cljs @@ -1,5 +1,7 @@ (ns status-im.test.tribute-to-talk.core (:require [cljs.test :refer-macros [deftest testing is]] + [status-im.utils.gfycat.core :as gfycat] + [status-im.utils.identicon :as identicon] [status-im.tribute-to-talk.core :as tribute-to-talk] [status-im.utils.money :as money])) @@ -93,43 +95,45 @@ :config {:NetworkId 3}}}}) (deftest check-tribute - (testing "No contract in network, own public key" - (let [result (tribute-to-talk/check-tribute {:db test-db} my-public-key)] - (is (= (-> test-db - (assoc :navigation/screen-params {:tribute-to-talk {:unavailable? true}}) - (assoc-in [:multiaccount :settings] {:tribute-to-talk {:mainnet nil}})) - (:db result))))) + (with-redefs [gfycat/generate-gfy (constantly "generated") + identicon/identicon (constantly "generated")] + (testing "No contract in network, own public key" + (let [result (tribute-to-talk/check-tribute {:db test-db} my-public-key)] + (is (= (-> test-db + (assoc :navigation/screen-params {:tribute-to-talk {:unavailable? true}}) + (assoc-in [:multiaccount :settings] {:tribute-to-talk {:mainnet nil}})) + (:db result))))) - (testing "No contract in network, another public key" - (let [result (tribute-to-talk/check-tribute {:db test-db} public-key)] - (is (= {:disabled? true} - (get-in result [:db :contacts/contacts public-key :tribute-to-talk]))))) + (testing "No contract in network, another public key" + (let [result (tribute-to-talk/check-tribute {:db test-db} public-key)] + (is (= {:disabled? true} + (get-in result [:db :contacts/contacts public-key :tribute-to-talk]))))) - (testing "Contract in network, another public key" - (let [result (tribute-to-talk/check-tribute {:db (assoc test-db :networks/current-network "testnet_rpc")} - public-key)] - (is (= "0xC61aa0287247a0398589a66fCD6146EC0F295432" - (get-in result [:tribute-to-talk/get-tribute :contract]))))) + (testing "Contract in network, another public key" + (let [result (tribute-to-talk/check-tribute {:db (assoc test-db :networks/current-network "testnet_rpc")} + public-key)] + (is (= "0xC61aa0287247a0398589a66fCD6146EC0F295432" + (get-in result [:tribute-to-talk/get-tribute :contract]))))) - (testing "Added by other user" - (let [result (tribute-to-talk/check-tribute - {:db (update-in test-db - [:contacts/contacts public-key :system-tags] - conj :contact/request-received)} - public-key)] - (is (= result nil)))) + (testing "Added by other user" + (let [result (tribute-to-talk/check-tribute + {:db (update-in test-db + [:contacts/contacts public-key :system-tags] + conj :contact/request-received)} + public-key)] + (is (= result nil)))) - (testing "Group chat" - (let [result (tribute-to-talk/check-tribute - {:db (assoc-in test-db [:chats public-key :group-chat] true)} - public-key)] - (is (= result nil)))) + (testing "Group chat" + (let [result (tribute-to-talk/check-tribute + {:db (assoc-in test-db [:chats public-key :group-chat] true)} + public-key)] + (is (= result nil)))) - (testing "Added by this user" - (let [result (tribute-to-talk/check-tribute - {:db (update-in test-db - [:contacts/contacts public-key :system-tags] - conj :contact/added)} - public-key)] - (is (= {:disabled? true} - (get-in result [:db :contacts/contacts public-key :tribute-to-talk])))))) + (testing "Added by this user" + (let [result (tribute-to-talk/check-tribute + {:db (update-in test-db + [:contacts/contacts public-key :system-tags] + conj :contact/added)} + public-key)] + (is (= {:disabled? true} + (get-in result [:db :contacts/contacts public-key :tribute-to-talk]))))))) diff --git a/test/cljs/status_im/test/tribute_to_talk/whitelist.cljs b/test/cljs/status_im/test/tribute_to_talk/whitelist.cljs index 324be797f7..f32d99532a 100644 --- a/test/cljs/status_im/test/tribute_to_talk/whitelist.cljs +++ b/test/cljs/status_im/test/tribute_to_talk/whitelist.cljs @@ -1,5 +1,7 @@ (ns status-im.test.tribute-to-talk.whitelist (:require [cljs.test :refer-macros [deftest testing is]] + [status-im.utils.gfycat.core :as gfycat] + [status-im.utils.identicon :as identicon] [status-im.tribute-to-talk.whitelist :as whitelist])) (def user-contacts @@ -43,26 +45,30 @@ [:db :contacts/whitelist])))))) (deftest mark-tribute-paid - (let [result (whitelist/mark-tribute-paid {:db {}} "bob")] - (testing "contact was added to whitelist" - (is (= (get-in result - [:db :contacts/whitelist]) - #{"bob"}))) - (testing "contact was tagged as tribute paid" - (is (= (get-in result - [:db :contacts/contacts "bob" :system-tags]) - #{:tribute-to-talk/paid}))))) + (with-redefs [gfycat/generate-gfy (constantly "generated") + identicon/identicon (constantly "generated")] + (let [result (whitelist/mark-tribute-paid {:db {}} "bob")] + (testing "contact was added to whitelist" + (is (= (get-in result + [:db :contacts/whitelist]) + #{"bob"}))) + (testing "contact was tagged as tribute paid" + (is (= (get-in result + [:db :contacts/contacts "bob" :system-tags]) + #{:tribute-to-talk/paid})))))) (deftest mark-tribute-received - (let [result (whitelist/mark-tribute-received {:db {}} "bob")] - (testing "contact was added to whitelist" - (is (= (get-in result - [:db :contacts/whitelist]) - #{"bob"}))) - (testing "contact was tagged as tribute paid" - (is (= (get-in result - [:db :contacts/contacts "bob" :system-tags]) - #{:tribute-to-talk/received}))))) + (with-redefs [gfycat/generate-gfy (constantly "generated") + identicon/identicon (constantly "generated")] + (let [result (whitelist/mark-tribute-received {:db {}} "bob")] + (testing "contact was added to whitelist" + (is (= (get-in result + [:db :contacts/whitelist]) + #{"bob"}))) + (testing "contact was tagged as tribute paid" + (is (= (get-in result + [:db :contacts/contacts "bob" :system-tags]) + #{:tribute-to-talk/received})))))) (def sender-pk "0x04263d74e55775280e75b4a4e9a45ba59fc372793a869c5d9c4fa2100556d9963e3f4fbfa1724ec94a46e6da057540ab248ed1f5eb956e36e3129ecd50fade2c97") (def sender-address "0xdff1a5e4e57d9723b3294e0f4413372e3ea9a8ff") @@ -94,34 +100,36 @@ [:db :contacts/whitelist]))))) (deftest filter-message - (testing "not a user message" - (whitelist/filter-message - ttt-enabled-multiaccount - :unfiltered-fx - :not-user-message - nil - "public-key")) - (testing "user is whitelisted" - (whitelist/filter-message - (whitelist/enable-whitelist ttt-enabled-multiaccount) - :unfiltered-fx - :user-message - nil - "whitelisted because added")) - (testing "tribute to talk is disabled" - (whitelist/filter-message - ttt-disabled-multiaccount - :unfiltered-fx - :user-message - nil - "public-key")) - (testing "user is not whitelisted but transaction is valid" - (let [result (whitelist/filter-message - ttt-enabled-multiaccount - #(assoc % :message-received true) - :user-message - "transaction-hash-1" - sender-pk)] - (is (contains? (get-in result [:db :contacts/whitelist]) - sender-pk)) - (is (:message-received result))))) + (with-redefs [gfycat/generate-gfy (constantly "generated") + identicon/identicon (constantly "generated")] + (testing "not a user message" + (whitelist/filter-message + ttt-enabled-multiaccount + :unfiltered-fx + :not-user-message + nil + "public-key")) + (testing "user is whitelisted" + (whitelist/filter-message + (whitelist/enable-whitelist ttt-enabled-multiaccount) + :unfiltered-fx + :user-message + nil + "whitelisted because added")) + (testing "tribute to talk is disabled" + (whitelist/filter-message + ttt-disabled-multiaccount + :unfiltered-fx + :user-message + nil + "public-key")) + (testing "user is not whitelisted but transaction is valid" + (let [result (whitelist/filter-message + ttt-enabled-multiaccount + #(assoc % :message-received true) + :user-message + "transaction-hash-1" + sender-pk)] + (is (contains? (get-in result [:db :contacts/whitelist]) + sender-pk)) + (is (:message-received result)))))) diff --git a/test/cljs/status_im/test/utils/gfycat/core.cljs b/test/cljs/status_im/test/utils/gfycat/core.cljs deleted file mode 100644 index aacab729cb..0000000000 --- a/test/cljs/status_im/test/utils/gfycat/core.cljs +++ /dev/null @@ -1,14 +0,0 @@ -(ns status-im.test.utils.gfycat.core - (:require [cljs.test :refer-macros [deftest is]] - [status-im.utils.gfycat.core :as gfy])) - -(def message "Names are only deterministic as long as word lists do not change!\nIf you change the lists, please change the tests as well.") - -(deftest test-generate-gfy - (is (= (gfy/generate-gfy "57348975ff9199ca636207a396b915d6b6a675b4") "Winged Fitting Mosquito") message) - (is (= (gfy/generate-gfy "e63d083d2d7a13a14632983b5820529445ca8109") "Mediumvioletred Melodic Waterdogs") message) - (is (= (gfy/generate-gfy "57348975ff9199ca636207a396b915d6b6a675b4") "Winged Fitting Mosquito") message) - (is (= (gfy/generate-gfy "26cf649aebb252a75aebc588e0d9ce93789dbe0b") "Educated Upright Arcticseal") message) - (is (= (gfy/generate-gfy "e63d083d2d7a13a14632983b5820529445ca8109") "Mediumvioletred Melodic Waterdogs") message) - (is (= (gfy/generate-gfy nil) gfy/unknown-gfy) message) - (is (= (gfy/generate-gfy "0") gfy/unknown-gfy) message)) diff --git a/test/cljs/status_im/test/utils/universal_links/core.cljs b/test/cljs/status_im/test/utils/universal_links/core.cljs index 4d9b3db319..a052810889 100644 --- a/test/cljs/status_im/test/utils/universal_links/core.cljs +++ b/test/cljs/status_im/test/utils/universal_links/core.cljs @@ -1,39 +1,43 @@ (ns status-im.test.utils.universal-links.core (:require [cljs.test :refer-macros [deftest is testing]] + [status-im.utils.gfycat.core :as gfycat] + [status-im.utils.identicon :as identicon] [re-frame.core :as re-frame] [status-im.utils.universal-links.core :as links])) (deftest handle-url-test - (testing "the user is not logged in" - (testing "it stores the url for later processing" - (is (= {:db {:universal-links/url "some-url"}} - (links/handle-url {:db {}} "some-url"))))) - (testing "the user is logged in" - (let [db {:multiaccount {:public-key "pk"} - :universal-links/url "some-url"}] - (testing "it clears the url" - (is (nil? (get-in (links/handle-url {:db db} "some-url") - [:db :universal-links/url])))) - (testing "a public chat link" - (testing "it joins the chat" - (is (get-in (links/handle-url {:db db} "status-im://chat/public/status") - [:db :chats "status"])))) + (with-redefs [gfycat/generate-gfy (constantly "generated") + identicon/identicon (constantly "generated")] + (testing "the user is not logged in" + (testing "it stores the url for later processing" + (is (= {:db {:universal-links/url "some-url"}} + (links/handle-url {:db {}} "some-url"))))) + (testing "the user is logged in" + (let [db {:multiaccount {:public-key "pk"} + :universal-links/url "some-url"}] + (testing "it clears the url" + (is (nil? (get-in (links/handle-url {:db db} "some-url") + [:db :universal-links/url])))) + (testing "a public chat link" + (testing "it joins the chat" + (is (get-in (links/handle-url {:db db} "status-im://chat/public/status") + [:db :chats "status"])))) - (testing "a browse dapp link" - (testing "it open the dapps" - (is - (= "www.cryptokitties.co" - (:browser/show-browser-selection (links/handle-url {:db db} "status-im://browse/www.cryptokitties.co")))))) - (testing "a user profile link" - (testing "it loads the profile" - (let [actual (links/handle-url {:db db} "status-im://user/0x04fbce10971e1cd7253b98c7b7e54de3729ca57ce41a2bfb0d1c4e0a26f72c4b6913c3487fa1b4bb86125770f1743fb4459da05c1cbe31d938814cfaf36e252073")] - (is (= "0x04fbce10971e1cd7253b98c7b7e54de3729ca57ce41a2bfb0d1c4e0a26f72c4b6913c3487fa1b4bb86125770f1743fb4459da05c1cbe31d938814cfaf36e252073" (get-in actual [:db :contacts/identity])))))) - (testing "if does nothing because the link is invalid" - (is (= (links/handle-url {:db db} "status-im://user/CONTACTCODE") - nil))) - (testing "a not found url" - (testing "it does nothing" - (is (nil? (links/handle-url {:db db} "status-im://not-existing")))))))) + (testing "a browse dapp link" + (testing "it open the dapps" + (is + (= "www.cryptokitties.co" + (:browser/show-browser-selection (links/handle-url {:db db} "status-im://browse/www.cryptokitties.co")))))) + (testing "a user profile link" + (testing "it loads the profile" + (let [actual (links/handle-url {:db db} "status-im://user/0x04fbce10971e1cd7253b98c7b7e54de3729ca57ce41a2bfb0d1c4e0a26f72c4b6913c3487fa1b4bb86125770f1743fb4459da05c1cbe31d938814cfaf36e252073")] + (is (= "0x04fbce10971e1cd7253b98c7b7e54de3729ca57ce41a2bfb0d1c4e0a26f72c4b6913c3487fa1b4bb86125770f1743fb4459da05c1cbe31d938814cfaf36e252073" (get-in actual [:db :contacts/identity])))))) + (testing "if does nothing because the link is invalid" + (is (= (links/handle-url {:db db} "status-im://user/CONTACTCODE") + nil))) + (testing "a not found url" + (testing "it does nothing" + (is (nil? (links/handle-url {:db db} "status-im://not-existing"))))))))) (deftest url-event-listener (testing "the url is not nil"