Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Community token gating component #19642

Merged
merged 1 commit into from
May 16, 2024

Conversation

ajayesivan
Copy link
Contributor

@ajayesivan ajayesivan commented Apr 15, 2024

fixes #19320

Summary

This PR implements the community/community-token-gating component and uses it in the community overview screen.

Resulting fixes or changes

  • Display collectible requirements properly in the community overview screen.(Design fix)
  • Use permissions sheet to display permissions requirements.
    • Community Overview screen -> Context menu -> View token requirements
  • Remove the old implementation of the token-gating component

Areas that may be impacted

  • Token gated community overview screen.
  • Quo Preview -> Community -> Community Token Gating

Screenshots

Before After

status: ready

@ajayesivan ajayesivan self-assigned this Apr 15, 2024
@ajayesivan ajayesivan changed the title Community token gated component Community token gating component Apr 15, 2024
@status-im-auto
Copy link
Member

status-im-auto commented Apr 15, 2024

Jenkins Builds

Click to see older builds (58)
Commit #️⃣ Finished (UTC) Duration Platform Result
✔️ 3e29f2d #1 2024-04-15 14:11:01 ~8 min android-e2e 🤖apk 📲
✔️ 3e29f2d #1 2024-04-15 14:11:02 ~8 min android 🤖apk 📲
✔️ 3e29f2d #1 2024-04-15 14:12:30 ~9 min ios 📱ipa 📲
✔️ 0fc8e8b #2 2024-04-17 10:44:51 ~5 min tests 📄log
✔️ 0fc8e8b #2 2024-04-17 10:45:10 ~5 min android-e2e 🤖apk 📲
✔️ 0fc8e8b #2 2024-04-17 10:45:42 ~6 min android 🤖apk 📲
✔️ 0fc8e8b #2 2024-04-17 10:47:50 ~8 min ios 📱ipa 📲
✔️ 83b9e97 #4 2024-04-17 13:54:13 ~4 min tests 📄log
✔️ 83b9e97 #4 2024-04-17 13:55:41 ~5 min android 🤖apk 📲
✔️ 83b9e97 #4 2024-04-17 13:57:09 ~7 min android-e2e 🤖apk 📲
✔️ e2fbdfe #5 2024-04-17 14:02:11 ~3 min tests 📄log
✔️ e2fbdfe #5 2024-04-17 14:04:54 ~6 min android-e2e 🤖apk 📲
✔️ e2fbdfe #5 2024-04-17 14:05:03 ~6 min android 🤖apk 📲
✔️ e2fbdfe #5 2024-04-17 14:07:45 ~9 min ios 📱ipa 📲
✔️ 03fa77e #6 2024-04-17 14:23:26 ~4 min tests 📄log
✔️ 03fa77e #6 2024-04-17 14:27:12 ~8 min android-e2e 🤖apk 📲
✔️ 03fa77e #6 2024-04-17 14:27:16 ~8 min android 🤖apk 📲
✔️ 03fa77e #6 2024-04-17 14:29:07 ~10 min ios 📱ipa 📲
✔️ 0c97c78 #7 2024-04-24 23:38:22 ~4 min tests 📄log
✔️ 0c97c78 #7 2024-04-24 23:41:59 ~7 min android-e2e 🤖apk 📲
✔️ 0c97c78 #7 2024-04-24 23:42:04 ~7 min android 🤖apk 📲
✔️ 0c97c78 #7 2024-04-24 23:45:42 ~11 min ios 📱ipa 📲
✔️ c8d2b9e #8 2024-04-25 10:07:37 ~4 min tests 📄log
✔️ c8d2b9e #8 2024-04-25 10:09:09 ~6 min android-e2e 🤖apk 📲
✔️ c8d2b9e #8 2024-04-25 10:10:36 ~7 min android 🤖apk 📲
✔️ c8d2b9e #8 2024-04-25 10:11:27 ~8 min ios 📱ipa 📲
✔️ 2a4ed2d #9 2024-04-25 10:30:57 ~6 min tests 📄log
✔️ 2a4ed2d #9 2024-04-25 10:30:58 ~6 min android-e2e 🤖apk 📲
✔️ 2a4ed2d #9 2024-04-25 10:32:52 ~8 min ios 📱ipa 📲
✔️ 2a4ed2d #9 2024-04-25 10:35:50 ~11 min android 🤖apk 📲
✔️ 61f4821 #10 2024-05-08 15:37:10 ~4 min tests 📄log
✔️ 61f4821 #10 2024-05-08 15:40:55 ~8 min android-e2e 🤖apk 📲
✔️ 61f4821 #10 2024-05-08 15:41:02 ~8 min android 🤖apk 📲
✔️ 61f4821 #10 2024-05-08 15:41:37 ~8 min ios 📱ipa 📲
✔️ 92cccc9 #11 2024-05-13 11:20:00 ~5 min android 🤖apk 📲
✔️ 92cccc9 #11 2024-05-13 11:20:59 ~6 min tests 📄log
✔️ 92cccc9 #11 2024-05-13 11:23:09 ~8 min ios 📱ipa 📲
✔️ 92cccc9 #11 2024-05-13 11:23:39 ~9 min android-e2e 🤖apk 📲
✔️ 4da5d7c #12 2024-05-13 14:54:07 ~4 min tests 📄log
✔️ 4da5d7c #12 2024-05-13 14:57:55 ~8 min android-e2e 🤖apk 📲
✔️ 4da5d7c #12 2024-05-13 14:58:02 ~8 min android 🤖apk 📲
✔️ 4da5d7c #12 2024-05-13 14:58:27 ~8 min ios 📱ipa 📲
✔️ 9e82bb3 #13 2024-05-13 16:36:27 ~4 min tests 📄log
✔️ 9e82bb3 #13 2024-05-13 16:39:03 ~7 min android-e2e 🤖apk 📲
✔️ 9e82bb3 #13 2024-05-13 16:39:59 ~8 min android 🤖apk 📲
✔️ 9e82bb3 #13 2024-05-13 16:40:44 ~8 min ios 📱ipa 📲
✔️ 63574b3 #14 2024-05-13 17:33:51 ~4 min tests 📄log
✔️ 63574b3 #14 2024-05-13 17:37:41 ~8 min android-e2e 🤖apk 📲
✔️ 63574b3 #14 2024-05-13 17:37:53 ~8 min android 🤖apk 📲
✔️ 63574b3 #14 2024-05-13 17:38:39 ~9 min ios 📱ipa 📲
✔️ b7332fe #15 2024-05-14 09:07:41 ~4 min tests 📄log
✔️ b7332fe #15 2024-05-14 09:10:43 ~7 min android-e2e 🤖apk 📲
✔️ b7332fe #15 2024-05-14 09:12:16 ~8 min android 🤖apk 📲
✔️ b7332fe #15 2024-05-14 09:12:18 ~8 min ios 📱ipa 📲
✔️ 16109aa #17 2024-05-15 18:20:24 ~5 min tests 📄log
✔️ 16109aa #17 2024-05-15 18:22:57 ~8 min android 🤖apk 📲
✔️ 16109aa #17 2024-05-15 18:23:16 ~8 min ios 📱ipa 📲
✔️ 16109aa #17 2024-05-15 18:24:02 ~9 min android-e2e 🤖apk 📲
Commit #️⃣ Finished (UTC) Duration Platform Result
✔️ 0a969fb #19 2024-05-16 13:20:16 ~6 min android 🤖apk 📲
✔️ 0a969fb #19 2024-05-16 13:20:25 ~6 min tests 📄log
✔️ 0a969fb #19 2024-05-16 13:20:32 ~6 min android-e2e 🤖apk 📲
✔️ 0a969fb #19 2024-05-16 13:22:58 ~9 min ios 📱ipa 📲
✔️ 71abfe3 #20 2024-05-16 13:32:28 ~6 min tests 📄log
✔️ 71abfe3 #20 2024-05-16 13:32:50 ~7 min android-e2e 🤖apk 📲
✔️ 71abfe3 #20 2024-05-16 13:32:57 ~7 min android 🤖apk 📲
✔️ 71abfe3 #20 2024-05-16 13:35:46 ~9 min ios 📱ipa 📲

@ajayesivan ajayesivan force-pushed the 19320-community-token-gated-component branch 2 times, most recently from 4700b9c to 83b9e97 Compare April 17, 2024 13:49
@ajayesivan ajayesivan marked this pull request as ready for review April 17, 2024 14:59
Copy link
Contributor

@ilmotta ilmotta left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Cool PR :) Approving in advance. Just left a few minor comments.

{:container-style style/divider}
[text/text
{:size :label
:style {:color (colors/theme-colors colors/neutral-50 colors/neutral-40)}}
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It's better if we can pass the theme argument from the parent component view to theme-colors. Eventually we will be able to completely remove the dependency of theme-colors in the global state quo.theme/theme-state.

:style {:color (colors/theme-colors colors/neutral-50 colors/neutral-40)}}
(string/lower-case (i18n/label :t/or))]])])

(defn view-internal
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Quick one: missing private metadata.

:style style/you-hodl}
(i18n/label (if satisfied? :t/you-hodl :t/you-must-hold))]
(map-indexed (fn [index tokens-item]
^{:key (str role "-tokens-" index)}
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It's unnecessary to concatenate strings for humans to form the unique key.

[tokens-row
{:tokens tokens-item
:first? (zero? index)
:divider? (= index (dec (count tokens)))}])
Copy link
Contributor

@ilmotta ilmotta Apr 19, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We can extract this calculation from the loop, and thus calculate the last index once outside.

Also, if I'm not my mistaken, count is O(N) on sequences, so not ideal to be called in a loop.

(let [theme (theme/use-theme-value)]
[rn/view {:style (style/container theme)}
[rn/view
{:style style/eligibility-row}
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

If possible while reviewing your code for style, consider checking if you can join these {:style ...} lines on the line preceding it. There are lots of these unnecessary line breaks in the codebase (it's not just from your PR), and unfortunately for us, zprint can't auto-format this case without causing other headaches. A few lines below the {:on-press ...} can also be moved to the previous line.

@@ -140,46 +121,39 @@
highest-permission-role]} (rf/sub [:community/token-gated-overview id])
highest-role-text
(i18n/label
(communities.utils/role->translation-key highest-permission-role :t/member))]
(communities.utils/role->translation-key highest-permission-role :t/member))
info-button-handler (fn []
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Since the function is not closing over any value, it's better to extract it to its own var for performance reasons and for clarity.

:on-press (if config/community-accounts-selection-enabled?
#(rf/dispatch [:open-modal :community-account-selection-sheet
{:community-id id}])
#(rf/dispatch [:open-modal :community-requests-to-join
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We can cache these functions with use-callback, especially because they only depend on the id, which basically won't ever change. This should help Reagent not needlessly process community-token-gating.

@ajayesivan ajayesivan force-pushed the 19320-community-token-gated-component branch 2 times, most recently from c8d2b9e to 2a4ed2d Compare April 25, 2024 10:24
@status-im-auto
Copy link
Member

87% of end-end tests have passed

Total executed tests: 52
Failed tests: 5
Expected to fail tests: 2
Passed tests: 45
IDs of failed tests: 727230,702782,702733,702851,727229 
IDs of expected to fail tests: 703495,703503 

Failed tests (5)

Click to expand
  • Rerun failed tests

  • Class TestOneToOneChatMultipleSharedDevicesNewUi:

    1. test_1_1_chat_emoji_send_reply_and_open_link, id: 702782

    Device 1: Find `BaseElement` by `xpath`: `//*[@content-desc=':chat-floating-screen']//*[starts-with(@text,'👱🏽‍♀️')]`
    Device 1: Long press on `BaseElement` until expected element is shown

    critical/chats/test_1_1_public_chats.py:117: in test_1_1_chat_emoji_send_reply_and_open_link
        self.chat_1.quote_message(emoji_unicode)
    ../views/chat_view.py:1056: in quote_message
        self.chat_view_element_starts_with_text(message).long_press_until_element_is_shown(self.reply_message_button)
    ../views/base_element.py:331: in long_press_until_element_is_shown
        action.long_press(element).release().perform()
    ../../../../status-app-prs@tmp/venv/lib/python3.10/site-packages/appium/webdriver/common/touch_action.py:174: in perform
        self._driver.execute(Command.TOUCH_ACTION, params)
    ../../../../status-app-prs@tmp/venv/lib/python3.10/site-packages/selenium/webdriver/remote/webdriver.py:345: in execute
        self.error_handler.check_response(response)
    ../../../../status-app-prs@tmp/venv/lib/python3.10/site-packages/appium/webdriver/errorhandler.py:122: in check_response
        raise exception_class(msg=message, stacktrace=format_stacktrace(stacktrace))
     The element 'By.xpath: //*[@content-desc=':chat-floating-screen']//*[starts-with(@text,'👱🏽‍♀️')]' is not linked to the same object in DOM anymore; For documentation on this error, please visit: https://www.selenium.dev/documentation/webdriver/troubleshooting/errors#stale-element-reference-exception
    E   Stacktrace:
    E   io.appium.uiautomator2.common.exceptions.StaleElementReferenceException: The element 'By.xpath: //*[@content-desc=':chat-floating-screen']//*[starts-with(@text,'👱🏽‍♀️')]' is not linked to the same object in DOM anymore
    E   	at io.appium.uiautomator2.model.ElementsCache.restore(ElementsCache.java:122)
    E   	at io.appium.uiautomator2.model.ElementsCache.get(ElementsCache.java:153)
    E   	at io.appium.uiautomator2.handler.Location.safeHandle(Location.java:23)
    E   	at io.appium.uiautomator2.handler.request.SafeRequestHandler.handle(SafeRequestHandler.java:59)
    E   	at io.appium.uiautomator2.server.AppiumServlet.handleRequest(AppiumServlet.java:277)
    E   	at io.appium.uiautomator2.server.AppiumServlet.handleHttpRequest(AppiumServlet.java:271)
    E   	at io.appium.uiautomator2.http.ServerHandler.channelRead(ServerHandler.java:68)
    E   	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:366)
    E   	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:352)
    E   	at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:345)
    E   	at io.netty.handler.codec.MessageToMessageDecoder.channelRead(MessageToMessageDecoder.java:102)
    E   	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:366)
    E   	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:352)
    E   	at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:345)
    E   	at io.netty.channel.CombinedChannelDuplexHandler$DelegatingChannelHandlerContext.fireChannelRead(CombinedChannelDuplexHandler.java:435)
    E   	at io.netty.handler.codec.ByteToMessageDecoder.fireChannelRead(ByteToMessageDecoder.java:293)
    E   	at io.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:267)
    E   	at io.netty.channel.CombinedChannelDuplexHandler.channelRead(CombinedChannelDuplexHandler.java:250)
    E   	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:366)
    E   	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:352)
    E   	at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:345)
    E   	at io.netty.handler.timeout.IdleStateHandler.channelRead(IdleStateHandler.java:266)
    E   	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:366)
    E   	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:352)
    E   	at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:345)
    E   	at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1294)
    E   	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:366)
    E   	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:352)
    E   	at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:911)
    E   	at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:131)
    E   	at io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:611)
    E   	at io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:552)
    E   	at io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:466)
    E   	at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:438)
    E   	at io.netty.util.concurrent.SingleThreadEventExecutor$2.run(SingleThreadEventExecutor.java:140)
    E   	at io.netty.util.concurrent.DefaultThreadFactory$DefaultRunnableDecorator.run(DefaultThreadFactory.java:144)
    E   	at java.lang.Thread.run(Thread.java:1012)
    



    Device sessions

    2. test_1_1_chat_text_message_delete_push_disappear, id: 702733

    Device 2: Find Text by xpath: //android.view.ViewGroup[@content-desc='chat-item']//android.widget.TextView[contains(@text,'DELETE ME')]
    Device 2: Long press on Text

    critical/chats/test_1_1_public_chats.py:515: in test_1_1_chat_text_message_delete_push_disappear
        self.chat_2.delete_message_in_chat(message_to_delete)
    ../views/chat_view.py:1045: in delete_message_in_chat
        self.chat_element_by_text(message).message_body.long_press_element()
    ../views/base_element.py:324: in long_press_element
        action.long_press(element).release().perform()
    ../../../../status-app-prs@tmp/venv/lib/python3.10/site-packages/appium/webdriver/common/touch_action.py:174: in perform
        self._driver.execute(Command.TOUCH_ACTION, params)
    ../../../../status-app-prs@tmp/venv/lib/python3.10/site-packages/selenium/webdriver/remote/webdriver.py:345: in execute
        self.error_handler.check_response(response)
    ../../../../status-app-prs@tmp/venv/lib/python3.10/site-packages/appium/webdriver/errorhandler.py:122: in check_response
        raise exception_class(msg=message, stacktrace=format_stacktrace(stacktrace))
     The element 'By.xpath: //android.view.ViewGroup[@content-desc='chat-item']//android.widget.TextView[contains(@text,'DELETE ME')]' is not linked to the same object in DOM anymore; For documentation on this error, please visit: https://www.selenium.dev/documentation/webdriver/troubleshooting/errors#stale-element-reference-exception
    E   Stacktrace:
    E   io.appium.uiautomator2.common.exceptions.StaleElementReferenceException: The element 'By.xpath: //android.view.ViewGroup[@content-desc='chat-item']//android.widget.TextView[contains(@text,'DELETE ME')]' is not linked to the same object in DOM anymore
    E   	at io.appium.uiautomator2.model.ElementsCache.restore(ElementsCache.java:122)
    E   	at io.appium.uiautomator2.model.ElementsCache.get(ElementsCache.java:153)
    E   	at io.appium.uiautomator2.handler.Location.safeHandle(Location.java:23)
    E   	at io.appium.uiautomator2.handler.request.SafeRequestHandler.handle(SafeRequestHandler.java:59)
    E   	at io.appium.uiautomator2.server.AppiumServlet.handleRequest(AppiumServlet.java:277)
    E   	at io.appium.uiautomator2.server.AppiumServlet.handleHttpRequest(AppiumServlet.java:271)
    E   	at io.appium.uiautomator2.http.ServerHandler.channelRead(ServerHandler.java:68)
    E   	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:366)
    E   	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:352)
    E   	at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:345)
    E   	at io.netty.handler.codec.MessageToMessageDecoder.channelRead(MessageToMessageDecoder.java:102)
    E   	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:366)
    E   	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:352)
    E   	at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:345)
    E   	at io.netty.channel.CombinedChannelDuplexHandler$DelegatingChannelHandlerContext.fireChannelRead(CombinedChannelDuplexHandler.java:435)
    E   	at io.netty.handler.codec.ByteToMessageDecoder.fireChannelRead(ByteToMessageDecoder.java:293)
    E   	at io.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:267)
    E   	at io.netty.channel.CombinedChannelDuplexHandler.channelRead(CombinedChannelDuplexHandler.java:250)
    E   	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:366)
    E   	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:352)
    E   	at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:345)
    E   	at io.netty.handler.timeout.IdleStateHandler.channelRead(IdleStateHandler.java:266)
    E   	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:366)
    E   	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:352)
    E   	at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:345)
    E   	at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1294)
    E   	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:366)
    E   	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:352)
    E   	at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:911)
    E   	at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:131)
    E   	at io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:611)
    E   	at io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:552)
    E   	at io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:466)
    E   	at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:438)
    E   	at io.netty.util.concurrent.SingleThreadEventExecutor$2.run(SingleThreadEventExecutor.java:140)
    E   	at io.netty.util.concurrent.DefaultThreadFactory$DefaultRunnableDecorator.run(DefaultThreadFactory.java:144)
    E   	at java.lang.Thread.run(Thread.java:1012)
    



    Device sessions

    Class TestActivityCenterContactRequestMultipleDevicePR:

    1. test_activity_center_contact_request_accept_swipe_mark_all_as_read, id: 702851

    Device 1: Tap on found: Button
    # STEP: Device1 check that contact appeared in contact list mutually

    ../../../../status-app-prs@tmp/venv/lib/python3.10/site-packages/urllib3/connectionpool.py:703: in urlopen
        httplib_response = self._make_request(
    ../../../../status-app-prs@tmp/venv/lib/python3.10/site-packages/urllib3/connectionpool.py:449: in _make_request
        six.raise_from(e, None)
    <string>:3: in raise_from
        ???
    ../../../../status-app-prs@tmp/venv/lib/python3.10/site-packages/urllib3/connectionpool.py:444: in _make_request
        httplib_response = conn.getresponse()
    /usr/lib/python3.10/http/client.py:1375: in getresponse
        response.begin()
    /usr/lib/python3.10/http/client.py:318: in begin
        version, status, reason = self._read_status()
    /usr/lib/python3.10/http/client.py:287: in _read_status
        raise RemoteDisconnected("Remote end closed connection without"
    E   http.client.RemoteDisconnected: Remote end closed connection without response
    
    During handling of the above exception, another exception occurred:
    activity_center/test_activity_center.py:141: in test_activity_center_contact_request_accept_swipe_mark_all_as_read
        self.device_2.just_fyi('Device1 check that contact appeared in contact list mutually')
    ../views/base_view.py:409: in just_fyi
        self.driver.execute_script("sauce:context=STEP: %s" % some_str)
    ../../../../status-app-prs@tmp/venv/lib/python3.10/site-packages/selenium/webdriver/remote/webdriver.py:405: in execute_script
        return self.execute(command, {"script": script, "args": converted_args})["value"]
    ../../../../status-app-prs@tmp/venv/lib/python3.10/site-packages/selenium/webdriver/remote/webdriver.py:343: in execute
        response = self.command_executor.execute(driver_command, params)
    ../../../../status-app-prs@tmp/venv/lib/python3.10/site-packages/selenium/webdriver/remote/remote_connection.py:291: in execute
        return self._request(command_info[0], url, body=data)
    ../../../../status-app-prs@tmp/venv/lib/python3.10/site-packages/selenium/webdriver/remote/remote_connection.py:312: in _request
        response = self._conn.request(method, url, body=body, headers=headers)
    ../../../../status-app-prs@tmp/venv/lib/python3.10/site-packages/urllib3/request.py:78: in request
        return self.request_encode_body(
    ../../../../status-app-prs@tmp/venv/lib/python3.10/site-packages/urllib3/request.py:170: in request_encode_body
        return self.urlopen(method, url, **extra_kw)
    ../../../../status-app-prs@tmp/venv/lib/python3.10/site-packages/urllib3/poolmanager.py:376: in urlopen
        response = conn.urlopen(method, u.request_uri, **kw)
    ../../../../status-app-prs@tmp/venv/lib/python3.10/site-packages/urllib3/connectionpool.py:787: in urlopen
        retries = retries.increment(
    ../../../../status-app-prs@tmp/venv/lib/python3.10/site-packages/urllib3/util/retry.py:550: in increment
        raise six.reraise(type(error), error, _stacktrace)
    ../../../../status-app-prs@tmp/venv/lib/python3.10/site-packages/urllib3/packages/six.py:769: in reraise
        raise value.with_traceback(tb)
    ../../../../status-app-prs@tmp/venv/lib/python3.10/site-packages/urllib3/connectionpool.py:703: in urlopen
        httplib_response = self._make_request(
    ../../../../status-app-prs@tmp/venv/lib/python3.10/site-packages/urllib3/connectionpool.py:449: in _make_request
        six.raise_from(e, None)
    <string>:3: in raise_from
        ???
    ../../../../status-app-prs@tmp/venv/lib/python3.10/site-packages/urllib3/connectionpool.py:444: in _make_request
        httplib_response = conn.getresponse()
    /usr/lib/python3.10/http/client.py:1375: in getresponse
        response.begin()
    /usr/lib/python3.10/http/client.py:318: in begin
        version, status, reason = self._read_status()
    /usr/lib/python3.10/http/client.py:287: in _read_status
        raise RemoteDisconnected("Remote end closed connection without"
     ('Connection aborted.', RemoteDisconnected('Remote end closed connection without response'))
    



    Device sessions

    Class TestWalletMultipleDevice:

    1. test_wallet_send_asset_from_drawer, id: 727230

    # STEP: Getting ETH amount in the wallet of the sender before transaction
    Device 1: Find WalletTab by accessibility id: wallet-stack-tab

    critical/test_wallet.py:117: in test_wallet_send_asset_from_drawer
        sender_balance, receiver_balance, eth_amount_sender, eth_amount_receiver = self._get_balances_before_tx()
    critical/test_wallet.py:39: in _get_balances_before_tx
        self.wallet_1.wallet_tab.click()
    ../views/base_element.py:90: in click
        element = self.find_element()
    ../views/base_element.py:79: in find_element
        raise NoSuchElementException(
     Device 1: WalletTab by accessibility id: `wallet-stack-tab` is not found on the screen; For documentation on this error, please visit: https://www.selenium.dev/documentation/webdriver/troubleshooting/errors#no-such-element-exception
    



    2. test_wallet_send_eth, id: 727229

    Device 1: Swiping right on element SlideButton
    Device 1: Find SlideButton by xpath: //*[@resource-id='slide-button-track']

    critical/test_wallet.py:109: in test_wallet_send_eth
        self.wallet_1.send_asset(address=self.receiver['address'], asset_name='Ether', amount=amount_to_send)
    ../views/wallet_view.py:97: in send_asset
        self.confirm_transaction()
    ../views/wallet_view.py:84: in confirm_transaction
        self.slide_and_confirm_with_password()
    ../views/wallet_view.py:78: in slide_and_confirm_with_password
        self.slide_button_track.slide()
    ../views/base_view.py:257: in slide
        self.swipe_right_on_element(width_percentage=1.3, start_x=100)
    ../views/base_element.py:308: in swipe_right_on_element
        location, size = self.get_element_coordinates()
    ../views/base_element.py:294: in get_element_coordinates
        element = self.find_element()
    ../views/base_element.py:79: in find_element
        raise NoSuchElementException(
     Device 1: SlideButton by xpath: `//*[@resource-id='slide-button-track']` is not found on the screen; For documentation on this error, please visit: https://www.selenium.dev/documentation/webdriver/troubleshooting/errors#no-such-element-exception
    



    Expected to fail tests (2)

    Click to expand

    Class TestGroupChatMultipleDeviceMergedNewUI:

    1. test_group_chat_mute_chat, id: 703495

    # STEP: Change device time so chat will be unmuted by timer
    Device 2: Long press on ChatElement

    critical/chats/test_group_chat.py:464: in test_group_chat_mute_chat
        self.errors.verify_no_errors()
    base_test_case.py:190: in verify_no_errors
        pytest.fail('\n '.join([self.errors.pop(0) for _ in range(len(self.errors))]))
     Chat is still muted after timeout 
    

    [[Chat is not unmuted after expected time: https://github.com//issues/19627]]

    Device sessions

    Class TestCommunityOneDeviceMerged:

    1. test_community_discovery, id: 703503

    Test is not run, e2e blocker  
    

    [[reason: [NOTRUN] Curated communities not loading, https://github.com//issues/17852]]

    Passed tests (45)

    Click to expand

    Class TestGroupChatMultipleDeviceMergedNewUI:

    1. test_group_chat_pin_messages, id: 702732
    Device sessions

    2. test_group_chat_send_image_save_and_share, id: 703297
    Device sessions

    3. test_group_chat_reactions, id: 703202
    Device sessions

    4. test_group_chat_join_send_text_messages_push, id: 702807
    Device sessions

    5. test_group_chat_offline_pn, id: 702808
    Device sessions

    Class TestActivityMultipleDevicePRTwo:

    1. test_activity_center_mentions, id: 702957
    Device sessions

    2. test_activity_center_admin_notification_accept_swipe, id: 702958
    Device sessions

    Class TestCommunityMultipleDeviceMerged:

    1. test_community_several_images_send_reply, id: 703194
    Device sessions

    2. test_community_one_image_send_reply, id: 702859
    Device sessions

    3. test_community_emoji_send_copy_paste_reply, id: 702840
    Device sessions

    4. test_community_mark_all_messages_as_read, id: 703086
    Device sessions

    5. test_community_contact_block_unblock_offline, id: 702894
    Device sessions

    6. test_community_edit_delete_message_when_offline, id: 704615
    Device sessions

    7. test_community_message_delete, id: 702839
    Device sessions

    8. test_community_message_send_check_timestamps_sender_username, id: 702838
    Device sessions

    9. test_community_links_with_previews_github_youtube_twitter_gif_send_enable, id: 702844
    Device sessions

    10. test_community_message_edit, id: 702843
    Device sessions

    11. test_community_unread_messages_badge, id: 702841
    Device sessions

    Class TestOneToOneChatMultipleSharedDevicesNewUiTwo:

    1. test_1_1_chat_delete_via_long_press_relogin, id: 702784
    Device sessions

    2. test_1_1_chat_is_shown_message_sent_delivered_from_offline, id: 702783
    Device sessions

    3. test_1_1_chat_mute_chat, id: 703496
    Device sessions

    Class TestCommunityOneDeviceMerged:

    1. test_restore_multiaccount_with_waku_backup_remove_switch, id: 703133
    Device sessions

    2. test_community_copy_and_paste_message_in_chat_input, id: 702742
    Device sessions

    3. test_community_undo_delete_message, id: 702869
    Device sessions

    4. test_community_navigate_to_channel_when_relaunch, id: 702846
    Device sessions

    5. test_community_mute_community_and_channel, id: 703382
    Device sessions

    Class TestDeepLinksOneDevice:

    1. test_links_open_universal_links_from_chat, id: 704613
    Device sessions

    2. test_links_deep_links, id: 702775
    Device sessions

    Class TestCommunityMultipleDeviceMergedTwo:

    1. test_community_markdown_support, id: 702809
    Device sessions

    2. test_community_hashtag_links_to_community_channels, id: 702948
    Device sessions

    3. test_community_mentions_push_notification, id: 702786
    Device sessions

    4. test_community_leave, id: 702845
    Device sessions

    5. test_community_join_when_node_owner_offline, id: 703629
    Device sessions

    Class TestOneToOneChatMultipleSharedDevicesNewUi:

    1. test_1_1_chat_push_emoji, id: 702813
    Device sessions

    2. test_1_1_chat_non_latin_messages_stack_update_profile_photo, id: 702745
    Device sessions

    3. test_1_1_chat_edit_message, id: 702855
    Device sessions

    4. test_1_1_chat_send_image_save_and_share, id: 703391
    Device sessions

    5. test_1_1_chat_pin_messages, id: 702731
    Device sessions

    6. test_1_1_chat_message_reaction, id: 702730
    Device sessions

    Class TestActivityMultipleDevicePR:

    1. test_navigation_jump_to, id: 702936
    Device sessions

    2. test_activity_center_reply_read_unread_delete_filter_swipe, id: 702947
    Device sessions

    Class TestActivityCenterContactRequestMultipleDevicePR:

    1. test_add_contact_field_validation, id: 702777
    Device sessions

    2. test_activity_center_contact_request_decline, id: 702850
    Device sessions

    Class TestWalletOneDevice:

    1. test_wallet_add_remove_regular_account, id: 727231
    Device sessions

    2. test_wallet_add_remove_watch_only_account, id: 727232
    Device sessions

    @mariia-skrypnyk
    Copy link

    mariia-skrypnyk commented Apr 30, 2024

    Hi @ajayesivan !

    Thanks for your PR!
    Please show me the exact component from here you used as I am not sure.

    Does your PR affect these two elements?
    Screenshot 2024-04-30 at 13 17 58

    @mariia-skrypnyk mariia-skrypnyk self-assigned this Apr 30, 2024
    @mariia-skrypnyk
    Copy link

    Hi @ajayesivan !
    Can you help with my question above?
    Thanks!

    @ajayesivan
    Copy link
    Contributor Author

    ajayesivan commented May 8, 2024

    Hi @mariia-skrypnyk,

    Apologies for the delay in reply. I was AFK.

    Please show me the exact component from here you used as I am not sure.

    This PR implements the whole "Community token gating" component. Which means all variations should work as per the design.

    Does your PR affect these two elements?

    1. This PR does not affect the community header, the community header has a bug which I have solved in a separate PR: fix: Community logo and title animation #19651
    2. In the permissions list previously we were using token-tag component to list both tokens and collectible permissions. I have updated the implementation to use token-tag and collectible-tag components for tokens and collectibles respectively. This PR doesn't change the underlying tag components.

    Let me know if you have further questions. Thank you!

    @mariia-skrypnyk
    Copy link

    mariia-skrypnyk commented May 8, 2024

    Hi @mariia-skrypnyk,

    Apologies for the delay in reply. I was AFK.

    Please show me the exact component from here you used as I am not sure.

    This PR implements the whole "Community token gating" component. Which means all variations should work as per the design.

    Does your PR affect these two elements?

    1. This PR does not affect the community header, the community header has a bug which I have solved in a separate PR: fix: Community logo and title animation #19651
    2. In the permissions list previously we were using token-tag component to list both tokens and collectible permissions. I have updated the implementation to use token-tag and collectible-tag components for tokens and collectibles respectively. This PR doesn't change the underlying tag components.

    Let me know if you have further questions. Thank you!

    Hi @ajayesivan !
    Thanks for your answer!
    I am wonder if this PR can be skipped by manual QA and needs only design review in case only component was implemented?

    @ajayesivan
    Copy link
    Contributor Author

    @mariia-skrypnyk that makes sense. We can skip manual qa.

    @churik
    Copy link
    Member

    churik commented May 8, 2024

    @Francesca-G can you review when you have a time? Thanks!!

    @ajayesivan ajayesivan force-pushed the 19320-community-token-gated-component branch from 2a4ed2d to 61f4821 Compare May 8, 2024 15:32
    Copy link

    @Francesca-G Francesca-G left a comment

    Choose a reason for hiding this comment

    The reason will be displayed to describe this comment to others. Learn more.

    Here's the design review :)

    @mariia-skrypnyk
    Copy link

    Hey @ajayesivan !

    Please take a look at design review of Francesca placed above 👆.

    @ajayesivan ajayesivan force-pushed the 19320-community-token-gated-component branch 3 times, most recently from 4da5d7c to 9e82bb3 Compare May 13, 2024 16:31
    @ajayesivan
    Copy link
    Contributor Author

    Hi @Francesca-G, I have fixed the spacing issue.

    The button text color issue in the disabled state is not related to this PR. It seems like an issue with the button component implementation.

    The fix may not be straightforward since the opacity property behaves differently in iOS and Android as mentioned here. Also, the button component has many variations and requires a good amount of testing when introducing a change to avoid further regressions. Is it okay if we address it as a follow-up?

    @Francesca-G
    Copy link

    Hi @Francesca-G, I have fixed the spacing issue.

    The vertical spacing seems to be only fixed in the top section where the text is. Please have a look here

    Screenshot 2024-05-14 alle 10 11 49

    The button text color issue in the disabled state is not related to this PR. It seems like an issue with the button component implementation.

    The fix may not be straightforward since the opacity property behaves differently in iOS and Android as mentioned here. Also, the button component has many variations and requires a good amount of testing when introducing a change to avoid further regressions. Is it okay if we address it as a follow-up?

    Sure 👍

    @ajayesivan ajayesivan force-pushed the 19320-community-token-gated-component branch 3 times, most recently from 986ff43 to 16109aa Compare May 15, 2024 18:14
    @ajayesivan
    Copy link
    Contributor Author

    Hi @Francesca-G, I have fixed the design issues. Could you take another look? Thanks!

    Screenshot 2024-05-15 at 23 35 05

    @ajayesivan
    Copy link
    Contributor Author

    Followup issue: #20056

    Copy link

    @Francesca-G Francesca-G left a comment

    Choose a reason for hiding this comment

    The reason will be displayed to describe this comment to others. Learn more.

    all good now 👍

    @ajayesivan ajayesivan force-pushed the 19320-community-token-gated-component branch 2 times, most recently from 9eeaa2e to 0a969fb Compare May 16, 2024 13:13
    @ajayesivan ajayesivan force-pushed the 19320-community-token-gated-component branch from 0a969fb to 71abfe3 Compare May 16, 2024 13:25
    @ajayesivan ajayesivan merged commit d73c38a into develop May 16, 2024
    6 checks passed
    @ajayesivan ajayesivan deleted the 19320-community-token-gated-component branch May 16, 2024 13:36
    Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
    Projects
    Archived in project
    Archived in project
    Development

    Successfully merging this pull request may close these issues.

    Update community token gated component as per the Design System
    8 participants