diff --git a/src/status_im/contexts/chat/contacts/events.cljs b/src/status_im/contexts/chat/contacts/events.cljs index b830abee67..87a0d5358c 100644 --- a/src/status_im/contexts/chat/contacts/events.cljs +++ b/src/status_im/contexts/chat/contacts/events.cljs @@ -75,20 +75,26 @@ [{:keys [db]} contacts] {:db (assoc db :contacts/contacts (into {} (map #(vector (:public-key %) %) contacts)))}) -(rf/defn send-contact-request - {:events [:contact.ui/send-contact-request]} - [{:keys [db]} id] +(defn send-contact-request + [{:keys [db]} [id message]] (when (not= id (get-in db [:profile/profile :public-key])) - {:json-rpc/call - [{:method "wakuext_sendContactRequest" - :js-response true - :params [{:id id :message (i18n/label :t/add-me-to-your-contacts)}] - :on-error (fn [error] - (log/error "Failed to send contact request" - {:error error - :event :contact.ui/send-contact-request - :id id})) - :on-success #(rf/dispatch [:transport/message-sent %])}]})) + {:fx [[:json-rpc/call + [{:method "wakuext_sendContactRequest" + :js-response true + :params [{:id id :message (or message (i18n/label :t/add-me-to-your-contacts))}] + :on-error [:contact.ui/send-contact-request-failure id] + :on-success [:transport/message-sent]}]]]})) + +(rf/reg-event-fx :contact.ui/send-contact-request send-contact-request) + +(defn send-contact-request-failure + [_ [id error]] + (log/error "Failed to send contact request" + {:error error + :event :contact.ui/send-contact-request + :id id})) + +(rf/reg-event-fx :contact.ui/send-contact-request-failure send-contact-request-failure) (rf/defn remove-contact "Remove a contact from current account's contact list" diff --git a/src/status_im/contexts/chat/contacts/events_test.cljs b/src/status_im/contexts/chat/contacts/events_test.cljs new file mode 100644 index 0000000000..9cedc3a628 --- /dev/null +++ b/src/status_im/contexts/chat/contacts/events_test.cljs @@ -0,0 +1,41 @@ +(ns status-im.contexts.chat.contacts.events-test + (:require + [cljs.test :refer [deftest is testing]] + matcher-combinators.test + [status-im.contexts.chat.contacts.events :as chat.contacts] + [utils.i18n :as i18n])) + +(deftest send-contact-request-test + (testing "creates nothing when attempting send contact request to self" + (let [profile-public-key "0x1" + cofx {:db {:profile/profile {:public-key profile-public-key}}}] + (is (match? nil (chat.contacts/send-contact-request cofx [profile-public-key]))))) + + (testing "creates contact request rpc with default message" + (let [profile-public-key "0x1" + contact-public-key "0x2" + cofx {:db {:profile/profile {:public-key profile-public-key}}}] + (is (match? + {:fx [[:json-rpc/call + [{:method "wakuext_sendContactRequest" + :js-response true + :params [{:id contact-public-key + :message (i18n/label :t/add-me-to-your-contacts)}] + :on-error [:contact.ui/send-contact-request-failure contact-public-key] + :on-success [:transport/message-sent]}]]]} + (chat.contacts/send-contact-request cofx [contact-public-key]))))) + + (testing "creates contact request rpc with custom message" + (let [profile-public-key "0x1" + contact-public-key "0x2" + custom-message "Hey there!" + cofx {:db {:profile/profile {:public-key profile-public-key}}}] + (is (match? + {:fx [[:json-rpc/call + [{:method "wakuext_sendContactRequest" + :js-response true + :params [{:id contact-public-key + :message custom-message}] + :on-error [:contact.ui/send-contact-request-failure contact-public-key] + :on-success [:transport/message-sent]}]]]} + (chat.contacts/send-contact-request cofx [contact-public-key custom-message]))))))