Update tests to get them passing again (#2853)

zio/stable
Paul Frazee 2024-02-12 18:55:19 -08:00 committed by GitHub
parent fad40dda97
commit 543e114877
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
15 changed files with 214 additions and 83 deletions

View File

@ -18,9 +18,10 @@ describe('Create account', () => {
await device.takeScreenshot('1- opened create account screen') await device.takeScreenshot('1- opened create account screen')
await element(by.id('selectServiceButton')).tap() await element(by.id('selectServiceButton')).tap()
await device.takeScreenshot('2- selected other server') await device.takeScreenshot('2- selected other server')
await element(by.id('customSelectBtn')).tap()
await element(by.id('customServerTextInput')).typeText(service) await element(by.id('customServerTextInput')).typeText(service)
await element(by.id('customServerTextInput')).tapReturnKey() await element(by.id('customServerTextInput')).tapReturnKey()
await element(by.id('customServerSelectBtn')).tap() await element(by.id('doneBtn')).tap()
await device.takeScreenshot('3- input test server URL') await device.takeScreenshot('3- input test server URL')
await element(by.id('emailInput')).typeText('example@test.com') await element(by.id('emailInput')).typeText('example@test.com')
await element(by.id('passwordInput')).typeText('hunter2') await element(by.id('passwordInput')).typeText('hunter2')
@ -33,12 +34,6 @@ describe('Create account', () => {
await element(by.id('nextBtn')).tap() await element(by.id('nextBtn')).tap()
await expect(element(by.id('welcomeOnboarding'))).toBeVisible() await expect(element(by.id('onboardingInterests'))).toBeVisible()
await element(by.id('continueBtn')).tap()
await expect(element(by.id('recommendedFeedsOnboarding'))).toBeVisible()
await element(by.id('continueBtn')).tap()
await expect(element(by.id('recommendedFollowsOnboarding'))).toBeVisible()
await element(by.id('continueBtn')).tap()
await expect(element(by.id('homeScreen'))).toBeVisible()
}) })
}) })

View File

@ -36,7 +36,7 @@ describe('Home screen', () => {
const carlaPosts = by.id('feedItem-by-carla.test') const carlaPosts = by.id('feedItem-by-carla.test')
await expect( await expect(
element(by.id('likeCount').withAncestor(carlaPosts)).atIndex(0), element(by.id('likeCount').withAncestor(carlaPosts)).atIndex(0),
).toHaveText('0') ).not.toExist()
await element(by.id('likeBtn').withAncestor(carlaPosts)).atIndex(0).tap() await element(by.id('likeBtn').withAncestor(carlaPosts)).atIndex(0).tap()
await expect( await expect(
element(by.id('likeCount').withAncestor(carlaPosts)).atIndex(0), element(by.id('likeCount').withAncestor(carlaPosts)).atIndex(0),
@ -44,14 +44,14 @@ describe('Home screen', () => {
await element(by.id('likeBtn').withAncestor(carlaPosts)).atIndex(0).tap() await element(by.id('likeBtn').withAncestor(carlaPosts)).atIndex(0).tap()
await expect( await expect(
element(by.id('likeCount').withAncestor(carlaPosts)).atIndex(0), element(by.id('likeCount').withAncestor(carlaPosts)).atIndex(0),
).toHaveText('0') ).not.toExist()
}) })
it('Can repost posts', async () => { it('Can repost posts', async () => {
const carlaPosts = by.id('feedItem-by-carla.test') const carlaPosts = by.id('feedItem-by-carla.test')
await expect( await expect(
element(by.id('repostCount').withAncestor(carlaPosts)).atIndex(0), element(by.id('repostCount').withAncestor(carlaPosts)).atIndex(0),
).toHaveText('0') ).not.toExist()
await element(by.id('repostBtn').withAncestor(carlaPosts)).atIndex(0).tap() await element(by.id('repostBtn').withAncestor(carlaPosts)).atIndex(0).tap()
await expect(element(by.id('repostModal'))).toBeVisible() await expect(element(by.id('repostModal'))).toBeVisible()
await element(by.id('repostBtn').withAncestor(by.id('repostModal'))).tap() await element(by.id('repostBtn').withAncestor(by.id('repostModal'))).tap()
@ -65,7 +65,7 @@ describe('Home screen', () => {
await expect(element(by.id('repostModal'))).not.toBeVisible() await expect(element(by.id('repostModal'))).not.toBeVisible()
await expect( await expect(
element(by.id('repostCount').withAncestor(carlaPosts)).atIndex(0), element(by.id('repostCount').withAncestor(carlaPosts)).atIndex(0),
).toHaveText('0') ).not.toExist()
}) })
it('Can report posts', async () => { it('Can report posts', async () => {

View File

@ -28,9 +28,10 @@ describe('invite-codes', () => {
await device.takeScreenshot('1- opened create account screen') await device.takeScreenshot('1- opened create account screen')
await element(by.id('selectServiceButton')).tap() await element(by.id('selectServiceButton')).tap()
await device.takeScreenshot('2- selected other server') await device.takeScreenshot('2- selected other server')
await element(by.id('customSelectBtn')).tap()
await element(by.id('customServerTextInput')).typeText(service) await element(by.id('customServerTextInput')).typeText(service)
await element(by.id('customServerTextInput')).tapReturnKey() await element(by.id('customServerTextInput')).tapReturnKey()
await element(by.id('customServerSelectBtn')).tap() await element(by.id('doneBtn')).tap()
await device.takeScreenshot('3- input test server URL') await device.takeScreenshot('3- input test server URL')
await element(by.id('inviteCodeInput')).typeText(inviteCode) await element(by.id('inviteCodeInput')).typeText(inviteCode)
await element(by.id('emailInput')).typeText('example@test.com') await element(by.id('emailInput')).typeText('example@test.com')
@ -40,12 +41,6 @@ describe('invite-codes', () => {
await element(by.id('handleInput')).typeText('e2e-test') await element(by.id('handleInput')).typeText('e2e-test')
await device.takeScreenshot('4- entered handle') await device.takeScreenshot('4- entered handle')
await element(by.id('nextBtn')).tap() await element(by.id('nextBtn')).tap()
await expect(element(by.id('welcomeOnboarding'))).toBeVisible() await expect(element(by.id('onboardingInterests'))).toBeVisible()
await element(by.id('continueBtn')).tap()
await expect(element(by.id('recommendedFeedsOnboarding'))).toBeVisible()
await element(by.id('continueBtn')).tap()
await expect(element(by.id('recommendedFollowsOnboarding'))).toBeVisible()
await element(by.id('continueBtn')).tap()
await expect(element(by.id('homeScreen'))).toBeVisible()
}) })
}) })

View File

@ -28,16 +28,17 @@ describe('invite-codes', () => {
await device.takeScreenshot('1- opened create account screen') await device.takeScreenshot('1- opened create account screen')
await element(by.id('selectServiceButton')).tap() await element(by.id('selectServiceButton')).tap()
await device.takeScreenshot('2- selected other server') await device.takeScreenshot('2- selected other server')
await element(by.id('customSelectBtn')).tap()
await element(by.id('customServerTextInput')).typeText(service) await element(by.id('customServerTextInput')).typeText(service)
await element(by.id('customServerTextInput')).tapReturnKey() await element(by.id('customServerTextInput')).tapReturnKey()
await element(by.id('customServerSelectBtn')).tap() await element(by.id('doneBtn')).tap()
await device.takeScreenshot('3- input test server URL') await device.takeScreenshot('3- input test server URL')
await element(by.id('inviteCodeInput')).typeText(inviteCode) await element(by.id('inviteCodeInput')).typeText(inviteCode)
await element(by.id('emailInput')).typeText('example@test.com') await element(by.id('emailInput')).typeText('example@test.com')
await element(by.id('passwordInput')).typeText('hunter2') await element(by.id('passwordInput')).typeText('hunter2')
await device.takeScreenshot('4- entered account details') await device.takeScreenshot('4- entered account details')
await element(by.id('nextBtn')).tap() await element(by.id('nextBtn')).tap()
await element(by.id('phoneInput')).typeText('5558675309') await element(by.id('phoneInput')).typeText('2345551234')
await element(by.id('requestCodeBtn')).tap() await element(by.id('requestCodeBtn')).tap()
await device.takeScreenshot('5- requested code') await device.takeScreenshot('5- requested code')
await element(by.id('codeInput')).typeText('000000') await element(by.id('codeInput')).typeText('000000')
@ -46,12 +47,6 @@ describe('invite-codes', () => {
await element(by.id('handleInput')).typeText('e2e-test') await element(by.id('handleInput')).typeText('e2e-test')
await device.takeScreenshot('7- entered handle') await device.takeScreenshot('7- entered handle')
await element(by.id('nextBtn')).tap() await element(by.id('nextBtn')).tap()
await expect(element(by.id('welcomeOnboarding'))).toBeVisible() await expect(element(by.id('onboardingInterests'))).toBeVisible()
await element(by.id('continueBtn')).tap()
await expect(element(by.id('recommendedFeedsOnboarding'))).toBeVisible()
await element(by.id('continueBtn')).tap()
await expect(element(by.id('recommendedFollowsOnboarding'))).toBeVisible()
await element(by.id('continueBtn')).tap()
await expect(element(by.id('homeScreen'))).toBeVisible()
}) })
}) })

View File

@ -2,7 +2,7 @@
import {describe, beforeAll, it} from '@jest/globals' import {describe, beforeAll, it} from '@jest/globals'
import {expect} from 'detox' import {expect} from 'detox'
import {openApp, loginAsAlice, loginAsBob, createServer, sleep} from '../util' import {openApp, loginAsAlice, loginAsBob, createServer} from '../util'
describe('Mod lists', () => { describe('Mod lists', () => {
beforeAll(async () => { beforeAll(async () => {
@ -62,38 +62,39 @@ describe('Mod lists', () => {
.withTimeout(5000) .withTimeout(5000)
}) })
it('Set avi via the edit modlist modal', async () => { // DISABLED e2e environment is real finicky about avatar uploads -prf
await expect(element(by.id('userAvatarFallback'))).toExist() // it('Set avi via the edit modlist modal', async () => {
await element(by.id('headerDropdownBtn')).tap() // await expect(element(by.id('userAvatarFallback'))).toExist()
await element(by.text('Edit list details')).tap() // await element(by.id('headerDropdownBtn')).tap()
await expect(element(by.id('createOrEditListModal'))).toBeVisible() // await element(by.text('Edit list details')).tap()
await element(by.id('changeAvatarBtn')).tap() // await expect(element(by.id('createOrEditListModal'))).toBeVisible()
await element(by.text('Library')).tap() // await element(by.id('changeAvatarBtn')).tap()
await sleep(3e3) // await element(by.text('Library')).tap()
await element(by.id('saveBtn')).tap() // await sleep(3e3)
await expect(element(by.id('createOrEditListModal'))).not.toBeVisible() // await element(by.id('saveBtn')).tap()
await expect(element(by.id('userAvatarImage'))).toExist() // await expect(element(by.id('createOrEditListModal'))).not.toBeVisible()
// have to wait for the toast to clear // await expect(element(by.id('userAvatarImage'))).toExist()
await waitFor(element(by.id('headerDropdownBtn'))) // // have to wait for the toast to clear
.toBeVisible() // await waitFor(element(by.id('headerDropdownBtn')))
.withTimeout(5000) // .toBeVisible()
}) // .withTimeout(5000)
// })
it('Remove avi via the edit modlist modal', async () => { // it('Remove avi via the edit modlist modal', async () => {
await expect(element(by.id('userAvatarImage'))).toExist() // await expect(element(by.id('userAvatarImage'))).toExist()
await element(by.id('headerDropdownBtn')).tap() // await element(by.id('headerDropdownBtn')).tap()
await element(by.text('Edit list details')).tap() // await element(by.text('Edit list details')).tap()
await expect(element(by.id('createOrEditListModal'))).toBeVisible() // await expect(element(by.id('createOrEditListModal'))).toBeVisible()
await element(by.id('changeAvatarBtn')).tap() // await element(by.id('changeAvatarBtn')).tap()
await element(by.text('Remove')).tap() // await element(by.text('Remove')).tap()
await element(by.id('saveBtn')).tap() // await element(by.id('saveBtn')).tap()
await expect(element(by.id('createOrEditListModal'))).not.toBeVisible() // await expect(element(by.id('createOrEditListModal'))).not.toBeVisible()
await expect(element(by.id('userAvatarFallback'))).toExist() // await expect(element(by.id('userAvatarFallback'))).toExist()
// have to wait for the toast to clear // // have to wait for the toast to clear
await waitFor(element(by.id('headerDropdownBtn'))) // await waitFor(element(by.id('headerDropdownBtn')))
.toBeVisible() // .toBeVisible()
.withTimeout(5000) // .withTimeout(5000)
}) // })
it('Delete the modlist', async () => { it('Delete the modlist', async () => {
await element(by.id('headerDropdownBtn')).tap() await element(by.id('headerDropdownBtn')).tap()

View File

@ -147,7 +147,7 @@ describe('Profile screen', () => {
const posts = by.id('feedItem-by-bob.test') const posts = by.id('feedItem-by-bob.test')
await expect( await expect(
element(by.id('likeCount').withAncestor(posts)).atIndex(0), element(by.id('likeCount').withAncestor(posts)).atIndex(0),
).toHaveText('0') ).not.toExist()
await element(by.id('likeBtn').withAncestor(posts)).atIndex(0).tap() await element(by.id('likeBtn').withAncestor(posts)).atIndex(0).tap()
await expect( await expect(
element(by.id('likeCount').withAncestor(posts)).atIndex(0), element(by.id('likeCount').withAncestor(posts)).atIndex(0),
@ -155,14 +155,14 @@ describe('Profile screen', () => {
await element(by.id('likeBtn').withAncestor(posts)).atIndex(0).tap() await element(by.id('likeBtn').withAncestor(posts)).atIndex(0).tap()
await expect( await expect(
element(by.id('likeCount').withAncestor(posts)).atIndex(0), element(by.id('likeCount').withAncestor(posts)).atIndex(0),
).toHaveText('0') ).not.toExist()
}) })
it('Can repost posts', async () => { it('Can repost posts', async () => {
const posts = by.id('feedItem-by-bob.test') const posts = by.id('feedItem-by-bob.test')
await expect( await expect(
element(by.id('repostCount').withAncestor(posts)).atIndex(0), element(by.id('repostCount').withAncestor(posts)).atIndex(0),
).toHaveText('0') ).not.toExist()
await element(by.id('repostBtn').withAncestor(posts)).atIndex(0).tap() await element(by.id('repostBtn').withAncestor(posts)).atIndex(0).tap()
await expect(element(by.id('repostModal'))).toBeVisible() await expect(element(by.id('repostModal'))).toBeVisible()
await element(by.id('repostBtn').withAncestor(by.id('repostModal'))).tap() await element(by.id('repostBtn').withAncestor(by.id('repostModal'))).tap()
@ -176,7 +176,7 @@ describe('Profile screen', () => {
await expect(element(by.id('repostModal'))).not.toBeVisible() await expect(element(by.id('repostModal'))).not.toBeVisible()
await expect( await expect(
element(by.id('repostCount').withAncestor(posts)).atIndex(0), element(by.id('repostCount').withAncestor(posts)).atIndex(0),
).toHaveText('0') ).not.toExist()
}) })
it('Can report posts', async () => { it('Can report posts', async () => {

View File

@ -28,6 +28,7 @@ describe('Self-labeling', () => {
await element(by.id('composerPublishBtn')).tap() await element(by.id('composerPublishBtn')).tap()
await expect(element(by.id('composeFAB'))).toBeVisible() await expect(element(by.id('composeFAB'))).toBeVisible()
const posts = by.id('feedItem-by-alice.test') const posts = by.id('feedItem-by-alice.test')
await element(by.id('e2eRefreshHome')).tap()
await expect( await expect(
element(by.id('contentHider-embed').withAncestor(posts)).atIndex(0), element(by.id('contentHider-embed').withAncestor(posts)).atIndex(0),
).toExist() ).toExist()

View File

@ -18,9 +18,10 @@ describe('Create account', () => {
await device.takeScreenshot('1- opened create account screen') await device.takeScreenshot('1- opened create account screen')
await element(by.id('selectServiceButton')).tap() await element(by.id('selectServiceButton')).tap()
await device.takeScreenshot('2- selected other server') await device.takeScreenshot('2- selected other server')
await element(by.id('customSelectBtn')).tap()
await element(by.id('customServerTextInput')).typeText(service) await element(by.id('customServerTextInput')).typeText(service)
await element(by.id('customServerTextInput')).tapReturnKey() await element(by.id('customServerTextInput')).tapReturnKey()
await element(by.id('customServerSelectBtn')).tap() await element(by.id('doneBtn')).tap()
await device.takeScreenshot('3- input test server URL') await device.takeScreenshot('3- input test server URL')
await element(by.id('emailInput')).typeText('text-verification@test.com') await element(by.id('emailInput')).typeText('text-verification@test.com')
await element(by.id('passwordInput')).typeText('hunter2') await element(by.id('passwordInput')).typeText('hunter2')
@ -40,13 +41,7 @@ describe('Create account', () => {
await element(by.id('nextBtn')).tap() await element(by.id('nextBtn')).tap()
await expect(element(by.id('welcomeOnboarding'))).toBeVisible() await expect(element(by.id('onboardingInterests'))).toBeVisible()
await element(by.id('continueBtn')).tap()
await expect(element(by.id('recommendedFeedsOnboarding'))).toBeVisible()
await element(by.id('continueBtn')).tap()
await expect(element(by.id('recommendedFollowsOnboarding'))).toBeVisible()
await element(by.id('continueBtn')).tap()
await expect(element(by.id('homeScreen'))).toBeVisible()
}) })
it('failed text verification correctly goes back to the code input screen', async () => { it('failed text verification correctly goes back to the code input screen', async () => {
@ -57,9 +52,10 @@ describe('Create account', () => {
await device.takeScreenshot('1- opened create account screen') await device.takeScreenshot('1- opened create account screen')
await element(by.id('selectServiceButton')).tap() await element(by.id('selectServiceButton')).tap()
await device.takeScreenshot('2- selected other server') await device.takeScreenshot('2- selected other server')
await element(by.id('customSelectBtn')).tap()
await element(by.id('customServerTextInput')).typeText(service) await element(by.id('customServerTextInput')).typeText(service)
await element(by.id('customServerTextInput')).tapReturnKey() await element(by.id('customServerTextInput')).tapReturnKey()
await element(by.id('customServerSelectBtn')).tap() await element(by.id('doneBtn')).tap()
await device.takeScreenshot('3- input test server URL') await device.takeScreenshot('3- input test server URL')
await element(by.id('emailInput')).typeText('text-verification2@test.com') await element(by.id('emailInput')).typeText('text-verification2@test.com')
await element(by.id('passwordInput')).typeText('hunter2') await element(by.id('passwordInput')).typeText('hunter2')

View File

@ -49,7 +49,7 @@ describe('Thread screen', () => {
const post = by.id('postThreadItem-by-carla.test') const post = by.id('postThreadItem-by-carla.test')
await expect( await expect(
element(by.id('likeCount').withAncestor(post)).atIndex(0), element(by.id('likeCount').withAncestor(post)).atIndex(0),
).toHaveText('0') ).not.toExist()
await element(by.id('likeBtn').withAncestor(post)).atIndex(0).tap() await element(by.id('likeBtn').withAncestor(post)).atIndex(0).tap()
await expect( await expect(
element(by.id('likeCount').withAncestor(post)).atIndex(0), element(by.id('likeCount').withAncestor(post)).atIndex(0),
@ -57,7 +57,7 @@ describe('Thread screen', () => {
await element(by.id('likeBtn').withAncestor(post)).atIndex(0).tap() await element(by.id('likeBtn').withAncestor(post)).atIndex(0).tap()
await expect( await expect(
element(by.id('likeCount').withAncestor(post)).atIndex(0), element(by.id('likeCount').withAncestor(post)).atIndex(0),
).toHaveText('0') ).not.toExist()
}) })
it('Can repost the root post', async () => { it('Can repost the root post', async () => {
@ -85,7 +85,7 @@ describe('Thread screen', () => {
const post = by.id('postThreadItem-by-carla.test') const post = by.id('postThreadItem-by-carla.test')
await expect( await expect(
element(by.id('repostCount').withAncestor(post)).atIndex(0), element(by.id('repostCount').withAncestor(post)).atIndex(0),
).toHaveText('0') ).not.toExist()
await element(by.id('repostBtn').withAncestor(post)).atIndex(0).tap() await element(by.id('repostBtn').withAncestor(post)).atIndex(0).tap()
await expect(element(by.id('repostModal'))).toBeVisible() await expect(element(by.id('repostModal'))).toBeVisible()
await element(by.id('repostBtn').withAncestor(by.id('repostModal'))).tap() await element(by.id('repostBtn').withAncestor(by.id('repostModal'))).tap()
@ -99,7 +99,7 @@ describe('Thread screen', () => {
await expect(element(by.id('repostModal'))).not.toBeVisible() await expect(element(by.id('repostModal'))).not.toBeVisible()
await expect( await expect(
element(by.id('repostCount').withAncestor(post)).atIndex(0), element(by.id('repostCount').withAncestor(post)).atIndex(0),
).toHaveText('0') ).not.toExist()
}) })
it('Can report the root post', async () => { it('Can report the root post', async () => {

View File

@ -56,9 +56,10 @@ export async function login(
if (takeScreenshots) { if (takeScreenshots) {
await device.takeScreenshot('2- opened service selector') await device.takeScreenshot('2- opened service selector')
} }
await element(by.id('customSelectBtn')).tap()
await element(by.id('customServerTextInput')).typeText(service) await element(by.id('customServerTextInput')).typeText(service)
await element(by.id('customServerTextInput')).tapReturnKey() await element(by.id('customServerTextInput')).tapReturnKey()
await element(by.id('customServerSelectBtn')).tap() await element(by.id('doneBtn')).tap()
if (takeScreenshots) { if (takeScreenshots) {
await device.takeScreenshot('3- input custom service') await device.takeScreenshot('3- input custom service')
} }

View File

@ -5,12 +5,13 @@ import {compressIfNeeded} from './manip'
let _imageCounter = 0 let _imageCounter = 0
async function getFile() { async function getFile() {
const files = await RNFS.readDir( let files = await RNFS.readDir(
RNFS.LibraryDirectoryPath.split('/') RNFS.LibraryDirectoryPath.split('/')
.slice(0, -5) .slice(0, -5)
.concat(['Media', 'DCIM', '100APPLE']) .concat(['Media', 'DCIM', '100APPLE'])
.join('/'), .join('/'),
) )
files = files.filter(file => file.path.endsWith('.JPG'))
const file = files[_imageCounter++ % files.length] const file = files[_imageCounter++ % files.length]
return await compressIfNeeded({ return await compressIfNeeded({
path: file.path, path: file.path,

View File

@ -139,7 +139,7 @@ export function StepInterests() {
) )
return ( return (
<View style={[a.align_start]}> <View style={[a.align_start]} testID="onboardingInterests">
<IconCircle <IconCircle
icon={isError ? EmojiSad : Hashtag} icon={isError ? EmojiSad : Hashtag}
style={[ style={[

View File

@ -0,0 +1,146 @@
import {Image as RNImage} from 'react-native-image-crop-picker'
import {makeAutoObservable} from 'mobx'
import {POST_IMG_MAX} from 'lib/constants'
import {ActionCrop} from 'expo-image-manipulator'
import {Position} from 'react-avatar-editor'
import {Dimensions} from 'lib/media/types'
export interface ImageManipulationAttributes {
aspectRatio?: '4:3' | '1:1' | '3:4' | 'None'
rotate?: number
scale?: number
position?: Position
flipHorizontal?: boolean
flipVertical?: boolean
}
export class ImageModel implements Omit<RNImage, 'size'> {
path: string
mime = 'image/jpeg'
width: number
height: number
altText = ''
cropped?: RNImage = undefined
compressed?: RNImage = undefined
// Web manipulation
prev?: RNImage
attributes: ImageManipulationAttributes = {
aspectRatio: 'None',
scale: 1,
flipHorizontal: false,
flipVertical: false,
rotate: 0,
}
prevAttributes: ImageManipulationAttributes = {}
constructor(image: Omit<RNImage, 'size'>) {
makeAutoObservable(this)
this.path = image.path
this.width = image.width
this.height = image.height
}
setRatio(aspectRatio: ImageManipulationAttributes['aspectRatio']) {
this.attributes.aspectRatio = aspectRatio
}
setRotate(degrees: number) {
this.attributes.rotate = degrees
this.manipulate({})
}
flipVertical() {
this.attributes.flipVertical = !this.attributes.flipVertical
this.manipulate({})
}
flipHorizontal() {
this.attributes.flipHorizontal = !this.attributes.flipHorizontal
this.manipulate({})
}
get ratioMultipliers() {
return {
'4:3': 4 / 3,
'1:1': 1,
'3:4': 3 / 4,
None: this.width / this.height,
}
}
getUploadDimensions(
dimensions: Dimensions,
maxDimensions: Dimensions = POST_IMG_MAX,
as: ImageManipulationAttributes['aspectRatio'] = 'None',
) {
const {width, height} = dimensions
const {width: maxWidth, height: maxHeight} = maxDimensions
return width < maxWidth && height < maxHeight
? {
width,
height,
}
: this.getResizedDimensions(as, POST_IMG_MAX.width)
}
getResizedDimensions(
as: ImageManipulationAttributes['aspectRatio'] = 'None',
maxSide: number,
) {
const ratioMultiplier = this.ratioMultipliers[as]
if (ratioMultiplier === 1) {
return {
height: maxSide,
width: maxSide,
}
}
if (ratioMultiplier < 1) {
return {
width: maxSide * ratioMultiplier,
height: maxSide,
}
}
return {
width: maxSide,
height: maxSide / ratioMultiplier,
}
}
setAltText(altText: string) {
this.altText = altText.trim()
}
// Only compress prior to upload
async compress() {
// do nothing
}
// Mobile
async crop() {
// do nothing
}
// Web manipulation
async manipulate(
_attributes: {
crop?: ActionCrop['crop']
} & ImageManipulationAttributes,
) {
// do nothing
}
resetCropped() {
this.manipulate({})
}
previous() {
this.cropped = this.prev
this.attributes = this.prevAttributes
}
}

View File

@ -88,7 +88,7 @@ export function Step1({
style={[pal.textLight, {marginLeft: 14}]} style={[pal.textLight, {marginLeft: 14}]}
/> />
<TouchableOpacity <TouchableOpacity
testID="loginSelectServiceButton" testID="selectServiceButton"
style={{ style={{
flexDirection: 'row', flexDirection: 'row',
flex: 1, flex: 1,

View File

@ -208,7 +208,7 @@ let PostCtrls = ({
{big && ( {big && (
<View style={styles.ctrlBig}> <View style={styles.ctrlBig}>
<TouchableOpacity <TouchableOpacity
testID="likeBtn" testID="shareBtn"
style={[styles.btn]} style={[styles.btn]}
onPress={onShare} onPress={onShare}
accessibilityRole="button" accessibilityRole="button"