[ANDROID] AccessibilityLabels and helper fns

This commit is contained in:
Anant Bhasin 2021-06-11 02:20:11 +05:30
parent 1f4920f873
commit 3b42e13489
6 changed files with 26 additions and 12 deletions

View File

@ -135,6 +135,7 @@ const ActionSheet = React.memo(forwardRef(({ children, theme }, ref) => {
onPress={hide} onPress={hide}
style={[styles.button, { backgroundColor: themes[theme].auxiliaryBackground }]} style={[styles.button, { backgroundColor: themes[theme].auxiliaryBackground }]}
theme={theme} theme={theme}
accessibilityLabel={I18n.t('Cancel')}
> >
<Text style={[styles.text, { color: themes[theme].bodyText }]}> <Text style={[styles.text, { color: themes[theme].bodyText }]}>
{I18n.t('Cancel')} {I18n.t('Cancel')}

View File

@ -19,6 +19,7 @@ export const Item = React.memo(({ item, hide, theme }) => {
style={[styles.item, { backgroundColor: themes[theme].focusedBackground }]} style={[styles.item, { backgroundColor: themes[theme].focusedBackground }]}
theme={theme} theme={theme}
testID={item.testID} testID={item.testID}
accessibilityLabel={item.title}
> >
<CustomIcon name={item.icon} size={20} color={item.danger ? themes[theme].dangerColor : themes[theme].bodyText} /> <CustomIcon name={item.icon} size={20} color={item.danger ? themes[theme].dangerColor : themes[theme].bodyText} />
<View style={styles.titleContainer}> <View style={styles.titleContainer}>

View File

@ -153,6 +153,7 @@ class NewMessageView extends React.Component {
style={{ backgroundColor: themes[theme].backgroundColor }} style={{ backgroundColor: themes[theme].backgroundColor }}
testID={testID} testID={testID}
theme={theme} theme={theme}
accessibilityLabel={title}
> >
<View style={[first ? sharedStyles.separatorVertical : sharedStyles.separatorBottom, styles.button, { borderColor: themes[theme].separatorColor }]}> <View style={[first ? sharedStyles.separatorVertical : sharedStyles.separatorBottom, styles.button, { borderColor: themes[theme].separatorColor }]}>
<CustomIcon style={[styles.buttonIcon, { color: themes[theme].tintColor }]} size={24} name={icon} /> <CustomIcon style={[styles.buttonIcon, { color: themes[theme].tintColor }]} size={24} name={icon} />

View File

@ -92,6 +92,17 @@ async function dismissReviewNag(){
await element(by.text('NO').and(by.type(alertButtonType))).tap(); // Tap `no` on ask for review alert await element(by.text('NO').and(by.type(alertButtonType))).tap(); // Tap `no` on ask for review alert
} }
async function mockMessageWithNag(message, isThread = false) {
let input = isThread ? 'messagebox-input-thread' : 'messagebox-input';
await element(by.id(input)).tap();
await element(by.id(input)).typeText(`${ data.random }${ message }`);
await element(by.id('messagebox-send-message')).tap();
await dismissReviewNag();
await waitFor(element(by.text(`${ data.random }${ message }`))).toExist().withTimeout(60000);
await expect(element(by.text(`${ data.random }${ message }`))).toExist();
await element(by.text(`${ data.random }${ message }`)).atIndex(0).tap();
};
async function tapBack() { async function tapBack() {
await element(by.id('header-back')).atIndex(0).tap(); await element(by.id('header-back')).atIndex(0).tap();
} }
@ -153,5 +164,6 @@ module.exports = {
searchRoom, searchRoom,
tryTapping, tryTapping,
checkServer, checkServer,
closeKeyboard closeKeyboard,
mockMessageWithNag
}; };

View File

@ -2,7 +2,7 @@ const {
device, expect, element, by, waitFor device, expect, element, by, waitFor
} = require('detox'); } = require('detox');
const data = require('../../data'); const data = require('../../data');
const { navigateToLogin, login, mockMessage, tapBack, sleep, searchRoom, starMessage, pinMessage, dismissReviewNag, tryTapping } = require('../../helpers/app'); const { navigateToLogin, login, mockMessage, tapBack, sleep, searchRoom, starMessage, pinMessage, dismissReviewNag, tryTapping, mockMessageWithNag } = require('../../helpers/app');
async function navigateToRoom(roomName) { async function navigateToRoom(roomName) {
await device.launchApp({ permissions: { notifications: 'YES' }, delete: true }); await device.launchApp({ permissions: { notifications: 'YES' }, delete: true });
@ -68,11 +68,11 @@ describe('Threads', () => {
const thread = `${ data.random }thread`; const thread = `${ data.random }thread`;
it('should create thread', async() => { it('should create thread', async() => {
await mockMessage('thread'); await mockMessage('thread');
await element(by.label(thread)).atIndex(0).longPress(); await element(by.text(thread)).atIndex(0).longPress();
await expect(element(by.id('action-sheet'))).toExist(); await expect(element(by.id('action-sheet'))).toExist();
await expect(element(by.id('action-sheet-handle'))).toBeVisible(); await expect(element(by.id('action-sheet-handle'))).toBeVisible();
await element(by.id('action-sheet-handle')).swipe('up', 'fast', 0.5); await element(by.id('action-sheet-handle')).swipe('up', 'fast', 0.5);
await element(by.label('Reply in Thread')).tap(); await element(by.text('Reply in Thread')).tap();
await element(by.id('messagebox-input')).typeText('replied'); await element(by.id('messagebox-input')).typeText('replied');
await element(by.id('messagebox-send-message')).tap(); await element(by.id('messagebox-send-message')).tap();
await waitFor(element(by.id(`message-thread-button-${ thread }`))).toExist().withTimeout(5000); await waitFor(element(by.id(`message-thread-button-${ thread }`))).toExist().withTimeout(5000);
@ -105,9 +105,9 @@ describe('Threads', () => {
await mockMessage(messageText, true); await mockMessage(messageText, true);
await tapBack(); await tapBack();
await waitFor(element(by.id('room-header').and(by.label(`${ mainRoom }`)))).toBeVisible().withTimeout(2000); await waitFor(element(by.id('room-header').and(by.label(`${ mainRoom }`)))).toBeVisible().withTimeout(2000);
await waitFor(element(by.id('room-header').and(by.label(`${ data.random }thread`)))).toBeNotVisible().withTimeout(2000); await waitFor(element(by.id('room-header').and(by.text(`${ data.random }thread`)))).toBeNotVisible().withTimeout(2000);
await sleep(500) //TODO: Find a better way to wait for the animation to finish and the messagebox-input to be available and usable :( await sleep(500) //TODO: Find a better way to wait for the animation to finish and the messagebox-input to be available and usable :(
await waitFor(element(by.label(`${ data.random }${ messageText }`)).atIndex(0)).toNotExist().withTimeout(2000); await waitFor(element(by.text(`${ data.random }${ messageText }`)).atIndex(0)).toNotExist().withTimeout(2000);
}); });
it('should mark send to channel and show on main channel', async() => { it('should mark send to channel and show on main channel', async() => {
@ -118,22 +118,21 @@ describe('Threads', () => {
await element(by.id('messagebox-send-message')).tap(); await element(by.id('messagebox-send-message')).tap();
await tapBack(); await tapBack();
await waitFor(element(by.id('room-header').and(by.label(`${ mainRoom }`)))).toBeVisible().withTimeout(2000); await waitFor(element(by.id('room-header').and(by.label(`${ mainRoom }`)))).toBeVisible().withTimeout(2000);
await waitFor(element(by.id('room-header').and(by.label(`${ data.random }thread`)))).toBeNotVisible().withTimeout(2000); await waitFor(element(by.id('room-header').and(by.text(`${ data.random }thread`)))).toBeNotVisible().withTimeout(2000);
await sleep(500) //TODO: Find a better way to wait for the animation to finish and the messagebox-input to be available and usable :( await sleep(500) //TODO: Find a better way to wait for the animation to finish and the messagebox-input to be available and usable :(
await waitFor(element(by.label(messageText)).atIndex(0)).toExist().withTimeout(2000); await waitFor(element(by.label(messageText)).atIndex(0)).toExist().withTimeout(2000);
}); });
it('should navigate to thread from thread name', async() => { it('should navigate to thread from thread name', async() => {
const messageText = 'navthreadname'; const messageText = 'navthreadname';
await mockMessage('dummymessagebetweenthethread'); await mockMessageWithNag('dummymessagebetweenthethread');
await dismissReviewNag() //TODO: Create a proper test for this elsewhere.
await element(by.id(`message-thread-button-${ thread }`)).tap(); await element(by.id(`message-thread-button-${ thread }`)).tap();
await element(by.id('messagebox-input-thread')).typeText(messageText); await element(by.id('messagebox-input-thread')).typeText(messageText);
await element(by.id('messagebox-send-to-channel')).tap(); await element(by.id('messagebox-send-to-channel')).tap();
await element(by.id('messagebox-send-message')).tap(); await element(by.id('messagebox-send-message')).tap();
await tapBack(); await tapBack();
await waitFor(element(by.id('room-header').and(by.label(`${ mainRoom }`)))).toBeVisible().withTimeout(2000); await waitFor(element(by.id('room-header').and(by.label(`${ mainRoom }`)))).toBeVisible().withTimeout(2000);
await waitFor(element(by.id('room-header').and(by.label(`${ data.random }thread`)))).toBeNotVisible().withTimeout(2000); await waitFor(element(by.id('room-header').and(by.text(`${ data.random }thread`)))).toBeNotVisible().withTimeout(2000);
await waitFor(element(by.id(`message-thread-replied-on-${ thread }`))).toBeVisible().withTimeout(2000); await waitFor(element(by.id(`message-thread-replied-on-${ thread }`))).toBeVisible().withTimeout(2000);
await element(by.id(`message-thread-replied-on-${ thread }`)).tap(); await element(by.id(`message-thread-replied-on-${ thread }`)).tap();
await waitFor(element(by.id(`room-view-title-${ thread }`))).toExist().withTimeout(5000); await waitFor(element(by.id(`room-view-title-${ thread }`))).toExist().withTimeout(5000);

View File

@ -28,8 +28,8 @@ describe('Mark as unread', () => {
const message = `${ data.random }message`; const message = `${ data.random }message`;
const channelName = `@${ data.users.regular.username }`; const channelName = `@${ data.users.regular.username }`;
await sendMessage(data.users.alternate, channelName, message); await sendMessage(data.users.alternate, channelName, message);
await waitFor(element(by.label(message)).atIndex(0)).toExist().withTimeout(30000); await waitFor(element(by.text(message)).atIndex(0)).toExist().withTimeout(30000);
await element(by.label(message)).atIndex(0).longPress(); await element(by.text(message)).atIndex(0).longPress();
await expect(element(by.id('action-sheet'))).toExist(); await expect(element(by.id('action-sheet'))).toExist();
await expect(element(by.id('action-sheet-handle'))).toBeVisible(); await expect(element(by.id('action-sheet-handle'))).toBeVisible();
await element(by.id('action-sheet-handle')).swipe('up', 'fast', 0.5); await element(by.id('action-sheet-handle')).swipe('up', 'fast', 0.5);