You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
The schema failure is due to utils.image-server/get-initials-avatar-uri being called with a nil profile customization color right after the user confirms logout. My first instinct was to just wrap the schema field with a :maybe schema and call it a day. But under the hood, the profile customization color really shouldn't be nil, so what is going on? Malli detected a potential issue.
Right after logging out, the subscription :profile/profile-with-image is recomputed. I tried to find out what's causing that recomputation, but I timeboxed and gave up. One of its signal inputs is :profile/profile. Right after logout, the output of sub :profile/profile is always nil (this is correct, nobody is logged in). This means that the sub :profile/profile-with-image will try to calculate the multiaccount URI by passing a nil profile. This is wasteful computation and is also the cause of the schema for utils.image-server/get-initials-avatar-uri to fail, because it expects the profile's customization-color to be present.
Areas that may be impacted
Anything displaying a profile image.
Steps to test
I truly expect no impact in profile images in general because the subscription :profile/profile is only nil on logout, which is what this PR deals with. In any case, I smoke tested the app, changed profile images, etc, all good.
Device 1: Find `Button` by `xpath`: `//*[@text="open community"]`
Device 1: Tap on found: Button
critical/test_deep_and_universal_links.py:70: in test_links_open_universal_links_from_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))]))
Community 'Open community for e2e' was not requested to join by the url https://status.app/c/G1AAAGR0G-IRb2YJD4lRXwLusAFnGrDHGNl6Wt55MIARwVYvarnO873011-fdVSz1kHSan-qq0G96vOaMqyTRhJnQV74KCUr#zQ3shb9irJR66rhG1E8sQZX8pDU3dpGm4daYSmPVDd2e73ewE
Device 1: Find BrowserTab by accessibility id: browser-stack-tab
Device 1: Tap on found: BrowserTab
critical/test_deep_and_universal_links.py:114: in test_links_deep_links
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))]))
Community 'Open community for e2e' was not requested to join by the deep link status.app://c/G1AAAGR0G-IRb2YJD4lRXwLusAFnGrDHGNl6Wt55MIARwVYvarnO873011-fdVSz1kHSan-qq0G96vOaMqyTRhJnQV74KCUr#zQ3shb9irJR66rhG1E8sQZX8pDU3dpGm4daYSmPVDd2e73ewE
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:1040: 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 2: Find Text by xpath: //*[starts-with(@text,'Hey, admin!')]/ancestor::android.view.ViewGroup[@content-desc='chat-item']//*[@content-desc='message-status']/android.widget.TextView
Device 2: Text is Sent
critical/chats/test_group_chat.py:95: in test_group_chat_join_send_text_messages_push
self.chats[1].chat_element_by_text(message_to_admin).wait_for_status_to_be('Delivered', timeout=120)
../views/chat_view.py:225: in wait_for_status_to_be
raise TimeoutException("Message status was not changed to %s, it's %s" % (expected_status, current_status))
Message status was not changed to Delivered, it's Sent
Device 1: Looking for a message by text: text after edit
Device 1: Looking for a message by text: message to delete
critical/chats/test_public_chat_browsing.py:798: in test_community_edit_delete_message_when_offline
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))]))
Updated message 'text after edit' is not delivered to the receiver
E Message 'message to delete' was not deleted for the receiver
Thanks for your fix 🙌
Just wanted to let you know that it is not really necessary to wait till PR will be approved to add label request-manual-qa if it's needed. I will ad it as you mentioned it's necessity in description.
Thanks for your fix 🙌 Just wanted to let you know that it is not really necessary to wait till PR will be approved to add label request-manual-qa if it's needed. I will ad it as you mentioned it's necessity in description.
Hi there @mariia-skrypnyk 😊 I wasn't sure about that, so thanks for letting me know.
Thanks for spending your time and effort on such an errors 🙏
I've did smoke check with setting/deleting profile image and the most places where photo is displayed.
Everything looks fine.
So, you can merge your changes! 🙌
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
This PR fixes a schema error after logout.
Interesting explanation...
The schema failure is due to
utils.image-server/get-initials-avatar-uri
being called with a nil profile customization color right after the user confirms logout. My first instinct was to just wrap the schema field with a:maybe
schema and call it a day. But under the hood, the profile customization color really shouldn't be nil, so what is going on? Malli detected a potential issue.Right after logging out, the subscription
:profile/profile-with-image
is recomputed. I tried to find out what's causing that recomputation, but I timeboxed and gave up. One of its signal inputs is:profile/profile
. Right after logout, the output of sub:profile/profile
is always nil (this is correct, nobody is logged in). This means that the sub:profile/profile-with-image
will try to calculate the multiaccount URI by passing a nil profile. This is wasteful computation and is also the cause of the schema forutils.image-server/get-initials-avatar-uri
to fail, because it expects the profile'scustomization-color
to be present.Areas that may be impacted
Anything displaying a profile image.
Steps to test
I truly expect no impact in profile images in general because the subscription
:profile/profile
is only nil on logout, which is what this PR deals with. In any case, I smoke tested the app, changed profile images, etc, all good.I'll request manual QA after PR approval.
status: ready