* fix comments * add zeego package * get basic native dropdown working * add separator and icon components * refined native dropdown component * add android build properties to app.json * move `PostDropdownBtn` to its own component * fix selectors issue * move `PostDropdownBtn` to its own component * fix hitslop * fix post dropdown hitslop * fix android dropdown icons * move `UserAvatar.tsx` to native dropdown * use native dropdown in `ProfileHeader.tsx` * use native dropdown in `PostThreadItem.tsx` * use native dropdown in `UserBanner.tsx` * use native dropdown in `CustomFeed.tsx` * replace `testId` with `testID` (which is what is used everywhere) * move `Settings.tsx` to use native dropdown * create jest mocks for zeego * create jest mock for `zeego/dropdown-menu` * web styles for native dropdown * remove example native dropdown * adjust web styles * fix propagation * fix pressable in `Settings.tsx` * animate dropdown on web * add keyboard nav and hover styles * add hitslop to constants * add comments to NativeDropdown component * temporarily removed android icons * add testID to PostDropdownBtn * add testID back to all NativeDropdown button implementations * add postDropdownBtn testID * add testID to dropdown items * remove testID from dropdown menu item * refactor home-screen tests for native dropdown * refactor profile-screen tests for native dropdown * refactor thread-muting tests for native dropdown * refactor thread-screen tests for native dropdown * fix dropdown color for post dropdown button * remove icons from android dropdown menu * fix `create-account.test.ts` * fix `invite-codes.test.ts`
94 lines
3.6 KiB
TypeScript
94 lines
3.6 KiB
TypeScript
/* eslint-env detox/detox */
|
|
|
|
import {openApp, login, createServer} from '../util'
|
|
|
|
describe('Home screen', () => {
|
|
let service: string
|
|
beforeAll(async () => {
|
|
service = await createServer('?users&follows&posts')
|
|
await openApp({permissions: {notifications: 'YES'}})
|
|
})
|
|
|
|
it('Login', async () => {
|
|
await login(service, 'alice', 'hunter2')
|
|
await element(by.id('homeScreenFeedTabs-Following')).tap()
|
|
})
|
|
|
|
it('Can like posts', async () => {
|
|
const carlaPosts = by.id('feedItem-by-carla.test')
|
|
await expect(
|
|
element(by.id('likeCount').withAncestor(carlaPosts)).atIndex(0),
|
|
).toHaveText('0')
|
|
await element(by.id('likeBtn').withAncestor(carlaPosts)).atIndex(0).tap()
|
|
await expect(
|
|
element(by.id('likeCount').withAncestor(carlaPosts)).atIndex(0),
|
|
).toHaveText('1')
|
|
await element(by.id('likeBtn').withAncestor(carlaPosts)).atIndex(0).tap()
|
|
await expect(
|
|
element(by.id('likeCount').withAncestor(carlaPosts)).atIndex(0),
|
|
).toHaveText('0')
|
|
})
|
|
|
|
it('Can repost posts', async () => {
|
|
const carlaPosts = by.id('feedItem-by-carla.test')
|
|
await expect(
|
|
element(by.id('repostCount').withAncestor(carlaPosts)).atIndex(0),
|
|
).toHaveText('0')
|
|
await element(by.id('repostBtn').withAncestor(carlaPosts)).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(carlaPosts)).atIndex(0),
|
|
).toHaveText('1')
|
|
await element(by.id('repostBtn').withAncestor(carlaPosts)).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(carlaPosts)).atIndex(0),
|
|
).toHaveText('0')
|
|
})
|
|
|
|
it('Can report posts', async () => {
|
|
const carlaPosts = by.id('feedItem-by-carla.test')
|
|
await element(by.id('postDropdownBtn').withAncestor(carlaPosts))
|
|
.atIndex(0)
|
|
.tap()
|
|
await element(by.text('Report post')).tap()
|
|
await expect(element(by.id('reportPostModal'))).toBeVisible()
|
|
await element(
|
|
by.id('reportPostRadios-com.atproto.moderation.defs#reasonSpam'),
|
|
).tap()
|
|
await element(by.id('sendReportBtn')).tap()
|
|
await expect(element(by.id('reportPostModal'))).not.toBeVisible()
|
|
})
|
|
|
|
it('Can swipe between feeds', async () => {
|
|
await element(by.id('homeScreen')).swipe('left', 'fast', 0.75)
|
|
await expect(element(by.id('whatshotFeedPage'))).toBeVisible()
|
|
await element(by.id('homeScreen')).swipe('right', 'fast', 0.75)
|
|
await expect(element(by.id('followingFeedPage'))).toBeVisible()
|
|
})
|
|
|
|
it('Can tap between feeds', async () => {
|
|
await element(by.id("homeScreenFeedTabs-What's hot")).tap()
|
|
await expect(element(by.id('whatshotFeedPage'))).toBeVisible()
|
|
await element(by.id('homeScreenFeedTabs-Following')).tap()
|
|
await expect(element(by.id('followingFeedPage'))).toBeVisible()
|
|
})
|
|
|
|
it('Can delete posts', async () => {
|
|
const alicePosts = by.id('feedItem-by-alice.test')
|
|
await expect(element(alicePosts.withDescendant(by.text('Post')))).toExist()
|
|
await element(by.id('postDropdownBtn').withAncestor(alicePosts))
|
|
.atIndex(0)
|
|
.tap()
|
|
await element(by.text('Delete post')).tap()
|
|
await expect(element(by.id('confirmModal'))).toBeVisible()
|
|
await element(by.id('confirmBtn')).tap()
|
|
await expect(
|
|
element(alicePosts.withDescendant(by.text('Post'))),
|
|
).not.toExist()
|
|
})
|
|
})
|