WIP: Cypress debugging v2
Cypress debugging v2
Continuing https://gitlab.com/gitlab-org/gitter/webapp/merge_requests/1619
Failing tests
can send message
-> https://gitlab.com/gitlab-org/gitter/webapp/merge_requests/1657
Moved to https://gitlab.com/gitlab-org/gitter/webapp/merge_requests/1657
#chat-input-textarea
isn't available because it thinks the user is roomMember: false
(comes from the window.troupeContext
).
I suspect there is some race condition on the backend even though we generate all the fixtures and room membership on the backend beforehand. Maybe some caching :/
It seems like we are suffering from https://github.com/cypress-io/cypress/issues/781
The problem is that the current test is using the user from the previous test. We login for each test but somehow the session/cookies/something is being shared across occasionally even though Cypress says they are cleared,
Cypress automatically clears all cookies before each new test starts by default
https://docs.cypress.io/api/cypress-api/cookies.html#Preserve-Once
You can tell this is happening if you add this to a test after the cy.visit(...)
cy.window()
.its('troupeContext.user.id')
.should('equal', fixtures.user1._id);
Here is a failing CI run after we added this check: https://gitlab.com/gitlab-org/gitter/webapp/-/jobs/354681264
Logs
It should be signing in as user1
(id=5dd3adc97f6d2f4ecc5589fa
) but it is instead using some user from the previous tests.
Server logs
2019-11-19T08:54:33.542Z - info: Fixture endpoint generated some new fixtures
{ user1:
{ __v: 0,
displayName: 'Test 170 1574153622798',
githubId: 1574153622969,
githubToken: null,
username: '_testuser_1721574153622798',
staff: false,
_id: '5dd3adc97f6d2f4ecc5589fa',
_tv: 1,
identities: '',
emails: '',
accessToken: '_test_bcb5e0e8_5700_4871_9133_53141b44e20d' },
user2:
{ __v: 0,
displayName: 'Test 173 1574153622798',
githubId: 1574153622972,
githubToken: null,
username: '_testuser_1751574153622798',
staff: false,
_id: '5dd3adc97f6d2f4ecc5589fb',
_tv: 1,
identities: '',
emails: '',
accessToken: '_test_58eb420f_e095_480a_8554_a376278a8508' },
group1:
{ __v: 0,
name: '_group1-1801574153673528',
uri: '_group1-1801574153673528',
lcUri: '_group1-1801574153673528',
avatarUrl: null,
homeUri: '_group1-1801574153673528',
lcHomeUri: '_group1-1801574153673528',
_id: '5dd3adc97f6d2f4ecc558a02',
avatarVersion: 0 },
troupe1:
{ __v: 0,
uri: '_test_1811574153622798',
githubType: 'ORG',
_id: '5dd3adc97f6d2f4ecc558a04',
_tv: 1,
providers: '',
renamedLcUris: '',
githubId: null,
noindex: false,
bans: '',
userCount: 2,
oneToOneUsers: '',
oneToOne: false,
status: 'ACTIVE',
lcOwner: null,
lcUri: '_test_1811574153622798',
tags: '',
topic: '' },
troupeInGroup1:
{ __v: 0,
uri: '_test_1821574153622798',
groupId: '5dd3adc97f6d2f4ecc558a02',
githubType: 'ORG',
_id: '5dd3adc97f6d2f4ecc558a06',
_tv: 1,
providers: '',
renamedLcUris: '',
githubId: null,
noindex: false,
bans: '',
userCount: 2,
oneToOneUsers: '',
oneToOne: false,
status: 'ACTIVE',
lcOwner: null,
lcUri: '_test_1821574153622798',
tags: '',
topic: '' },
message1:
{ __v: 0,
fromUserId: '5dd3adc97f6d2f4ecc5589fa',
toTroupeId: '5dd3adc97f6d2f4ecc558a04',
text: 'hello from the parent',
pub: false,
_id: '5dd3adc97f6d2f4ecc558a08',
_tv: 1,
readBy: '',
editedAt: null,
sent: 'Tue Nov 19 2019 02:54:33 GMT-0600 (Central Standard Time)',
issues: '',
mentions: '',
urls: '' },
message2:
{ __v: 0,
fromUserId: '5dd3adc97f6d2f4ecc5589fa',
toTroupeId: '5dd3adc97f6d2f4ecc558a04',
parentId: '5dd3adc97f6d2f4ecc558a08',
text: 'hello from the child',
pub: false,
_id: '5dd3adc97f6d2f4ecc558a09',
_tv: 1,
readBy: '',
editedAt: null,
sent: 'Tue Nov 19 2019 02:54:33 GMT-0600 (Central Standard Time)',
issues: '',
mentions: '',
urls: '' },
userToBeTokenDeleted1:
{ __v: 0,
displayName: 'Test 176 1574153622798',
githubId: 1574153622975,
githubToken: null,
username: '_testuser_1781574153622798',
staff: false,
_id: '5dd3adc97f6d2f4ecc5589fc',
_tv: 1,
identities: '',
emails: '',
accessToken: '_test_6cc6a4ac_608a_4348_9f2e_efd384798605' },
oAuthClientToBeDeleted1:
{ __v: 0,
name: 'Test 179 1574153622798',
clientKey: 'ecf72cf2a728ad6ac28de5168e83d765578b8390',
clientSecret: 'e321da3093f94c87385da19decdbc23c07173ab5',
revoked: false,
ownerUserId: '5dd3adc97f6d2f4ecc5589fc',
_id: '5dd3adc97f6d2f4ecc558a00' },
oAuthAccessTokenToBeDeleted1:
{ __v: 0,
token: '86588ca8566178e2104c35970ddbc4a12818cab8',
userId: '5dd3adc97f6d2f4ecc5589fc',
clientId: '5dd3adc97f6d2f4ecc558a00',
_id: '5dd3adc97f6d2f4ecc558a01' } }
gitter:app:room-context-service findRoomContext user=_testuser_1721574153622798(5dd3adc97f6d2f4ecc5589fa) uri=_test_1821574153622798 options=undefined +428ms
gitter:app:uri-resolver uriResolver _test_1821574153622798 +2ms
gitter:app:room-membership-service checkRoomMembership(troupeId=5dd3adc97f6d2f4ecc558a06 userId=5dd3adc97f6d2f4ecc5589fa) -> 1 ||| allUsersInRoom=5dd3adc97f6d2f4ecc5589fa,5dd3adc97f6d2f4ecc5589fb +8ms
gitter:app:troupe-service findByIdLeanWithMembership found {"_id":"5dd3adc97f6d2f4ecc558a06","uri":"_test_1821574153622798","groupId":"5dd3adc97f6d2f4ecc558a02","githubType":"ORG","sd":{"type":null,"members":"PUBLIC","admins":"MANUAL","public":true,"_id":"5dd3adc97f6d2f4ecc558a07","extraAdmins":[],"extraMembers":[]},"_tv":1,"providers":[],"renamedLcUris":[],"githubId":null,"noindex":false,"bans":[],"userCount":2,"oneToOneUsers":[],"oneToOne":false,"status":"ACTIVE","lcOwner":null,"lcUri":"_test_1821574153622798","tags":[],"topic":"","__v":0,"id":"5dd3adc97f6d2f4ecc558a06"} roomMember=true +2ms
gitter:app:uri-resolver _test_1821574153622798 resolved to {"user":null,"uri":"_test_1821574153622798","room":{"_id":"5dd3adc97f6d2f4ecc558a06","uri":"_test_1821574153622798","groupId":"5dd3adc97f6d2f4ecc558a02","githubType":"ORG","sd":{"type":null,"members":"PUBLIC","admins":"MANUAL","public":true,"_id":"5dd3adc97f6d2f4ecc558a07","extraAdmins":[],"extraMembers":[]},"_tv":1,"providers":[],"renamedLcUris":[],"githubId":null,"noindex":false,"bans":[],"userCount":2,"oneToOneUsers":[],"oneToOne":false,"status":"ACTIVE","lcOwner":null,"lcUri":"_test_1821574153622798","tags":[],"topic":"","__v":0,"id":"5dd3adc97f6d2f4ecc558a06"},"roomMember":true,"group":null} +2ms
gitter:app:context-generator generateTroupeContext -> roomMember=true troupe=_test_1821574153622798(5dd3adc97f6d2f4ecc558a06) user=_testuser_1721574153622798(5dd3adc97f6d2f4ecc5589fa) +7ms
gitter:app:room-membership-service checkRoomMembership(troupeId=5dd3adc97f6d2f4ecc558a06 userId=5dd3adc97f6d2f4ecc5589fa) -> 1 ||| allUsersInRoom=5dd3adc97f6d2f4ecc5589fa,5dd3adc97f6d2f4ecc5589fb +9ms
gitter:app:room-membership-service findRoomIdsForUser(5dd3adc97f6d2f4ecc5589fa) +4ms
gitter:app:context-generator generateTroupeContext -> roomMember=true troupe=_test_1821574153622798(5dd3adc97f6d2f4ecc558a06) user=_testuser_1721574153622798(5dd3adc97f6d2f4ecc5589fa) +1ms
gitter:app:room-membership-service checkRoomMembership(troupeId=5dd3adc97f6d2f4ecc558a06 userId=5dd3adc97f6d2f4ecc5589fa) -> 1 ||| allUsersInRoom=5dd3adc97f6d2f4ecc5589fa,5dd3adc97f6d2f4ecc5589fb +10ms
2019-11-19T08:54:33.876Z - warn: eyeball: socket of175v7ka1cvbgrgs7c8r3idsvvdapj does not exist.
gitter:app:room-context-service findRoomContext user=_testuser_1591574153622798(5dd3adc87f6d2f4ecc5589dd) uri=_test_1811574153622798 options=undefined +135ms
gitter:app:uri-resolver uriResolver _test_1811574153622798 +2ms
gitter:app:room-membership-service checkRoomMembership(troupeId=5dd3adc97f6d2f4ecc558a04 userId=5dd3adc87f6d2f4ecc5589dd) -> 0 ||| allUsersInRoom=5dd3adc97f6d2f4ecc5589fa,5dd3adc97f6d2f4ecc5589fb +12ms
gitter:app:troupe-service findByIdLeanWithMembership found {"_id":"5dd3adc97f6d2f4ecc558a04","uri":"_test_1811574153622798","githubType":"ORG","sd":{"type":null,"members":"PUBLIC","admins":"MANUAL","public":true,"_id":"5dd3adc97f6d2f4ecc558a05","extraAdmins":["5dd3adc97f6d2f4ecc5589fa"],"extraMembers":[]},"_tv":1,"providers":[],"renamedLcUris":[],"githubId":null,"noindex":false,"bans":[],"userCount":2,"oneToOneUsers":[],"oneToOne":false,"status":"ACTIVE","lcOwner":null,"lcUri":"_test_1811574153622798","tags":[],"topic":"","__v":0,"id":"5dd3adc97f6d2f4ecc558a04"} roomMember=false +2ms
gitter:app:uri-resolver _test_1811574153622798 resolved to {"user":null,"uri":"_test_1811574153622798","room":{"_id":"5dd3adc97f6d2f4ecc558a04","uri":"_test_1811574153622798","githubType":"ORG","sd":{"type":null,"members":"PUBLIC","admins":"MANUAL","public":true,"_id":"5dd3adc97f6d2f4ecc558a05","extraAdmins":["5dd3adc97f6d2f4ecc5589fa"],"extraMembers":[]},"_tv":1,"providers":[],"renamedLcUris":[],"githubId":null,"noindex":false,"bans":[],"userCount":2,"oneToOneUsers":[],"oneToOne":false,"status":"ACTIVE","lcOwner":null,"lcUri":"_test_1811574153622798","tags":[],"topic":"","__v":0,"id":"5dd3adc97f6d2f4ecc558a04"},"roomMember":false,"group":null} +2ms
gitter:app:context-generator generateTroupeContext -> roomMember=false troupe=_test_1811574153622798(5dd3adc97f6d2f4ecc558a04) user=_testuser_1591574153622798(5dd3adc87f6d2f4ecc5589dd) +9ms
gitter:app:room-membership-service checkRoomMembership(troupeId=5dd3adc97f6d2f4ecc558a04 userId=5dd3adc87f6d2f4ecc5589dd) -> 0 ||| allUsersInRoom=5dd3adc97f6d2f4ecc5589fa,5dd3adc97f6d2f4ecc5589fb +10ms
gitter:app:room-membership-service findRoomIdsForUser(5dd3adc87f6d2f4ecc5589dd) +10ms
gitter:app:context-generator generateTroupeContext -> roomMember=false troupe=_test_1811574153622798(5dd3adc97f6d2f4ecc558a04) user=_testuser_1591574153622798(5dd3adc87f6d2f4ecc5589dd) +1ms
gitter:app:room-membership-service checkRoomMembership(troupeId=5dd3adc97f6d2f4ecc558a04 userId=5dd3adc87f6d2f4ecc5589dd) -> 0 ||| allUsersInRoom=5dd3adc97f6d2f4ecc5589fa,5dd3adc97f6d2f4ecc5589fb +11ms
gitter:app:room-membership-service checkRoomMembership(troupeId=5dd3adc97f6d2f4ecc558a04 userId=5dd3adc87f6d2f4ecc5589dd) -> 0 ||| allUsersInRoom=5dd3adc97f6d2f4ecc5589fa,5dd3adc97f6d2f4ecc5589fb +354ms
gitter:app:room-membership-service findRoomIdsForUser(5dd3adc87f6d2f4ecc5589dd) +317ms
Browser log
app:client-context window.troupeContext
troupe:
associatedRepo: false
avatarUrl: "http://localhost:5000/api/private/avatars/gh/u/_test_1811574153622798"
backend: {type: null}
githubType: "ORG"
id: "5dd3adc97f6d2f4ecc558a04"
lurk: false
mentions: 0
meta: {}
name: "_test_1811574153622798"
noindex: false
oneToOne: false
permissions: {admin: false}
public: true
roomMember: false
security: "PUBLIC"
topic: ""
unreadItems: 0
uri: "_test_1811574153622798"
url: "/_test_1811574153622798"
userCount: 2
v: 1
user:
avatarUrl: "http://localhost:5000/api/private/avatars/g/u/_testuser_1591574153622798"
avatarUrlMedium: "/api/private/user-avatar/_testuser_1591574153622798?s=128"
avatarUrlSmall: "/api/private/user-avatar/_testuser_1591574153622798?s=60"
displayName: "Test 157 1574153622798"
id: "5dd3adc87f6d2f4ecc5589dd"
providers: ["github"]
staff: false
url: "/_testuser_1591574153622798"
username: "_testuser_1591574153622798"
v: 1
app:router-chat Rendering app with troupe +162ms {id: "5dd3adc97f6d2f4ecc558a04", name: "_test_1811574153622798", topic: "", avatarUrl: "http://localhost:5000/api/private/avatars/gh/u/_test_1811574153622798", uri: "_test_1811574153622798", …}
console.js:35 app:chat-toolbar-input Not a room member so showing join room button +51ms
console.js:35 app:client-context Troupe data contains no group: {"id":"5dd3adc97f6d2f4ecc558a04","name":"_test_1811574153622798","topic":"","avatarUrl":"http://localhost:5000/api/private/avatars/gh/u/_test_1811574153622798","uri":"_test_1811574153622798","oneToOne":false,"userCount":2,"unreadItems":0,"mentions":0,"lastAccessTime":"2019-11-19T08:54:34.258Z","lurk":false,"url":"/_test_1811574153622798","githubType":"ORG","associatedRepo":false,"security":"PUBLIC","noindex":false,"permissions":{"admin":false},"roomMember":false,"backend":{"type":null},"public":true,"meta":{},"v":1}
can create a room
-> https://gitlab.com/gitlab-org/gitter/webapp/merge_requests/1656
Moved to https://gitlab.com/gitlab-org/gitter/webapp/merge_requests/1656
After figuring out the cookie issue (see above), running the full test suite in CI would still have can create a room
fail. The test would pass if you ran it by itself it.only(...)
The debug video would also freeze and jump straight to the failure so we couldn't see what was going on. So I just updated the e2e-tests
CI job to use our more powerful Gitter internal runners.
The video just confirmed that the group select dropdown wasn't popping up after trying to click it.
Locally I couldn't get the test to fail to debug this better.
But I first tried a better selector(.js-create-room-group-input .js-group-select-view
) that includes the nested backbone view in it to make sure the groupSelectView
was rendered at the time we tried to click.
Then I updated the groupSelect to not close the typeahead dropdown when we select the initial groupId. My theory was that we clicked the input to open the typeahead dropdown but our selectInitialGroup
was closing it before we could find the dropdown and click on an item.
Dev notes
Frontend:
window.localStorage.debug = 'app:client-context,app:router-chat,app:chat-toolbar-input';
window.localStorage.debug = 'app:create-rooom-view,app:group-select-view';
Backend:
set DEBUG=gitter:app:room-context-service,gitter:app:context-generator,gitter:app:uri-resolver,gitter:app:troupe-service,gitter:app:room-membership-service
https://docs.cypress.io/api/commands/window.html#Examples
cy.window()
.its('troupeContext.user.id')
.should('equal', fixtures.user1._id);
Closes #2269 (closed)