about summary refs log tree commit diff
path: root/__e2e__/tests/profile-screen.test.ts
diff options
context:
space:
mode:
Diffstat (limited to '__e2e__/tests/profile-screen.test.ts')
-rw-r--r--__e2e__/tests/profile-screen.test.ts173
1 files changed, 173 insertions, 0 deletions
diff --git a/__e2e__/tests/profile-screen.test.ts b/__e2e__/tests/profile-screen.test.ts
new file mode 100644
index 000000000..e1b6dcaf4
--- /dev/null
+++ b/__e2e__/tests/profile-screen.test.ts
@@ -0,0 +1,173 @@
+/* eslint-env detox/detox */
+
+import {openApp, login, createServer, sleep} from '../util'
+
+describe('Profile screen', () => {
+  let service: string
+  beforeAll(async () => {
+    service = await createServer('?users&posts')
+    await openApp({
+      permissions: {notifications: 'YES', medialibrary: 'YES', photos: 'YES'},
+    })
+  })
+
+  it('Login and navigate to my profile', async () => {
+    await expect(element(by.id('signInButton'))).toBeVisible()
+    await login(service, 'alice', 'hunter2')
+    await element(by.id('bottomBarProfileBtn')).tap()
+  })
+
+  it('Open and close edit profile modal', async () => {
+    await element(by.id('profileHeaderEditProfileButton')).tap()
+    await expect(element(by.id('editProfileModal'))).toBeVisible()
+    await element(by.id('editProfileCancelBtn')).tap()
+    await expect(element(by.id('editProfileModal'))).not.toBeVisible()
+  })
+
+  it('Edit display name and description via the edit profile modal', async () => {
+    await element(by.id('profileHeaderEditProfileButton')).tap()
+    await expect(element(by.id('editProfileModal'))).toBeVisible()
+    await element(by.id('editProfileDisplayNameInput')).clearText()
+    await element(by.id('editProfileDisplayNameInput')).typeText('Alicia')
+    await element(by.id('editProfileDescriptionInput')).clearText()
+    await element(by.id('editProfileDescriptionInput')).typeText(
+      'One cool hacker',
+    )
+    await element(by.id('editProfileSaveBtn')).tap()
+    await expect(element(by.id('editProfileModal'))).not.toBeVisible()
+    await expect(element(by.id('profileHeaderDisplayName'))).toHaveText(
+      'Alicia',
+    )
+    await expect(element(by.id('profileHeaderDescription'))).toHaveText(
+      'One cool hacker',
+    )
+  })
+
+  it('Remove display name and description via the edit profile modal', async () => {
+    await element(by.id('profileHeaderEditProfileButton')).tap()
+    await expect(element(by.id('editProfileModal'))).toBeVisible()
+    await element(by.id('editProfileDisplayNameInput')).clearText()
+    await element(by.id('editProfileDescriptionInput')).clearText()
+    await element(by.id('editProfileSaveBtn')).tap()
+    await expect(element(by.id('editProfileModal'))).not.toBeVisible()
+    await expect(element(by.id('profileHeaderDisplayName'))).toHaveText(
+      'alice.test',
+    )
+    await expect(element(by.id('profileHeaderDescription'))).toHaveText('')
+  })
+
+  it('Set avi and banner via the edit profile modal', async () => {
+    await expect(element(by.id('userBannerFallback'))).toExist()
+    await expect(element(by.id('userAvatarFallback'))).toExist()
+    await element(by.id('profileHeaderEditProfileButton')).tap()
+    await expect(element(by.id('editProfileModal'))).toBeVisible()
+    await element(by.id('changeBannerBtn')).tap()
+    await element(by.id('changeBannerLibraryBtn')).tap()
+    await sleep(3e3)
+    await element(by.id('changeAvatarBtn')).tap()
+    await element(by.id('changeAvatarLibraryBtn')).tap()
+    await sleep(3e3)
+    await element(by.id('editProfileSaveBtn')).tap()
+    await expect(element(by.id('editProfileModal'))).not.toBeVisible()
+    await expect(element(by.id('userBannerImage'))).toExist()
+    await expect(element(by.id('userAvatarImage'))).toExist()
+  })
+
+  it('Remove avi and banner via the edit profile modal', async () => {
+    await expect(element(by.id('userBannerImage'))).toExist()
+    await expect(element(by.id('userAvatarImage'))).toExist()
+    await element(by.id('profileHeaderEditProfileButton')).tap()
+    await expect(element(by.id('editProfileModal'))).toBeVisible()
+    await element(by.id('changeBannerBtn')).tap()
+    await element(by.id('changeBannerRemoveBtn')).tap()
+    await element(by.id('changeAvatarBtn')).tap()
+    await element(by.id('changeAvatarRemoveBtn')).tap()
+    await element(by.id('editProfileSaveBtn')).tap()
+    await expect(element(by.id('editProfileModal'))).not.toBeVisible()
+    await expect(element(by.id('userBannerFallback'))).toExist()
+    await expect(element(by.id('userAvatarFallback'))).toExist()
+  })
+
+  it('Navigate to another user profile', async () => {
+    await element(by.id('bottomBarSearchBtn')).tap()
+    // have to wait for the toast to clear
+    await waitFor(element(by.id('searchTextInput')))
+      .toBeVisible()
+      .withTimeout(2000)
+    await element(by.id('searchTextInput')).typeText('bob')
+    await element(by.id('searchAutoCompleteResult-bob.test')).tap()
+    await expect(element(by.id('profileView'))).toBeVisible()
+  })
+
+  it('Can follow/unfollow another user', async () => {
+    await element(by.id('followBtn')).tap()
+    await expect(element(by.id('unfollowBtn'))).toBeVisible()
+    await element(by.id('unfollowBtn')).tap()
+    await expect(element(by.id('followBtn'))).toBeVisible()
+  })
+
+  it('Can mute/unmute another user', async () => {
+    await expect(element(by.id('profileHeaderMutedNotice'))).not.toExist()
+    await element(by.id('profileHeaderDropdownBtn')).tap()
+    await element(by.id('profileHeaderDropdownMuteBtn')).tap()
+    await expect(element(by.id('profileHeaderMutedNotice'))).toBeVisible()
+    await element(by.id('profileHeaderDropdownBtn')).tap()
+    await element(by.id('profileHeaderDropdownMuteBtn')).tap()
+    await expect(element(by.id('profileHeaderMutedNotice'))).not.toExist()
+  })
+
+  it('Can report another user', async () => {
+    await element(by.id('profileHeaderDropdownBtn')).tap()
+    await element(by.id('profileHeaderDropdownReportBtn')).tap()
+    await expect(element(by.id('reportAccountModal'))).toBeVisible()
+    await element(by.id('reportAccountRadios-spam')).tap()
+    await element(by.id('sendReportBtn')).tap()
+    await expect(element(by.id('reportAccountModal'))).not.toBeVisible()
+  })
+
+  it('Can like posts', async () => {
+    const posts = by.id('feedItem-by-bob.test')
+    await expect(
+      element(by.id('likeCount').withAncestor(posts)).atIndex(0),
+    ).toHaveText('0')
+    await element(by.id('likeBtn').withAncestor(posts)).atIndex(0).tap()
+    await expect(
+      element(by.id('likeCount').withAncestor(posts)).atIndex(0),
+    ).toHaveText('1')
+    await element(by.id('likeBtn').withAncestor(posts)).atIndex(0).tap()
+    await expect(
+      element(by.id('likeCount').withAncestor(posts)).atIndex(0),
+    ).toHaveText('0')
+  })
+
+  it('Can repost posts', async () => {
+    const posts = by.id('feedItem-by-bob.test')
+    await expect(
+      element(by.id('repostCount').withAncestor(posts)).atIndex(0),
+    ).toHaveText('0')
+    await element(by.id('repostBtn').withAncestor(posts)).atIndex(0).tap()
+    await expect(element(by.id('repostModal'))).toBeVisible()
+    await element(by.id('repostBtn').withAncestor(by.id('repostModal'))).tap()
+    await expect(element(by.id('repostModal'))).not.toBeVisible()
+    await expect(
+      element(by.id('repostCount').withAncestor(posts)).atIndex(0),
+    ).toHaveText('1')
+    await element(by.id('repostBtn').withAncestor(posts)).atIndex(0).tap()
+    await expect(element(by.id('repostModal'))).toBeVisible()
+    await element(by.id('repostBtn').withAncestor(by.id('repostModal'))).tap()
+    await expect(element(by.id('repostModal'))).not.toBeVisible()
+    await expect(
+      element(by.id('repostCount').withAncestor(posts)).atIndex(0),
+    ).toHaveText('0')
+  })
+
+  it('Can report posts', async () => {
+    const posts = by.id('feedItem-by-bob.test')
+    await element(by.id('postDropdownBtn').withAncestor(posts)).atIndex(0).tap()
+    await element(by.id('postDropdownReportBtn')).tap()
+    await expect(element(by.id('reportPostModal'))).toBeVisible()
+    await element(by.id('reportPostRadios-spam')).tap()
+    await element(by.id('sendReportBtn')).tap()
+    await expect(element(by.id('reportPostModal'))).not.toBeVisible()
+  })
+})