Rocket.Chat.ReactNative/e2e/tests/assorted/12-i18n.spec.js

139 lines
5.1 KiB
JavaScript

const { navigateToLogin, login, sleep } = require('../../helpers/app');
const { post } = require('../../helpers/data_setup');
const data = require('../../data');
const testuser = data.users.regular;
const defaultLaunchArgs = { permissions: { notifications: 'YES' } };
const navToLanguage = async () => {
await waitFor(element(by.id('rooms-list-view')))
.toBeVisible()
.withTimeout(10000);
await element(by.id('rooms-list-view-sidebar')).tap();
await waitFor(element(by.id('sidebar-view')))
.toBeVisible()
.withTimeout(2000);
await waitFor(element(by.id('sidebar-settings')))
.toBeVisible()
.withTimeout(2000);
await element(by.id('sidebar-settings')).tap();
await waitFor(element(by.id('settings-view')))
.toBeVisible()
.withTimeout(2000);
await element(by.id('settings-view-language')).tap();
await waitFor(element(by.id('language-view')))
.toBeVisible()
.withTimeout(10000);
};
describe('i18n', () => {
describe('OS language', () => {
it("OS set to 'en' and proper translate to 'en'", async () => {
if (device.getPlatform() === 'android') {
return; // FIXME: Passing language with launch parameters doesn't work with Android
}
await device.launchApp({
...defaultLaunchArgs,
languageAndLocale: {
language: 'en',
locale: 'en'
},
delete: true
});
await waitFor(element(by.id('new-server-view')))
.toBeVisible()
.withTimeout(20000);
await expect(element(by.id('new-server-view-open').and(by.label('Join our open workspace')))).toBeVisible();
});
it("OS set to unavailable language and fallback to 'en'", async () => {
if (device.getPlatform() === 'android') {
return; // FIXME: Passing language with launch parameters doesn't work with Android
}
await device.launchApp({
...defaultLaunchArgs,
languageAndLocale: {
language: 'es-MX',
locale: 'es-MX'
}
});
await waitFor(element(by.id('new-server-view')))
.toBeVisible()
.withTimeout(20000);
await expect(element(by.id('new-server-view-open').and(by.label('Join our open workspace')))).toBeVisible();
});
/**
* This test might become outdated as soon as we support the language
* Although this seems to be a bad approach, that's the intention for having fallback enabled
*/
// it('OS set to available language and fallback to \'en\' on strings missing translation', async() => {
// await device.launchApp({
// ...defaultLaunchArgs,
// languageAndLocale: {
// language: "nl",
// locale: "nl"
// }
// });
// });
});
describe('Rocket.Chat language', () => {
before(async () => {
await device.launchApp({ ...defaultLaunchArgs, delete: true });
await navigateToLogin();
await login(testuser.username, testuser.password);
});
it("should select 'en'", async () => {
await navToLanguage();
await element(by.id('language-view-en')).tap();
await waitFor(element(by.id('rooms-list-view')))
.toBeVisible()
.withTimeout(10000);
await element(by.id('rooms-list-view-sidebar')).tap();
await waitFor(element(by.id('sidebar-view')))
.toBeVisible()
.withTimeout(2000);
await expect(element(by.id('sidebar-chats').withDescendant(by.label('Chats')))).toBeVisible();
await expect(element(by.id('sidebar-profile').withDescendant(by.label('Profile')))).toBeVisible();
await expect(element(by.id('sidebar-settings').withDescendant(by.label('Settings')))).toBeVisible();
await element(by.id('sidebar-close-drawer')).tap();
});
it("should select 'nl' and fallback to 'en'", async () => {
await navToLanguage();
await element(by.id('language-view-nl')).tap();
await waitFor(element(by.id('rooms-list-view')))
.toBeVisible()
.withTimeout(10000);
await element(by.id('rooms-list-view-sidebar')).tap();
await waitFor(element(by.id('sidebar-view')))
.toBeVisible()
.withTimeout(2000);
await expect(element(by.id('sidebar-chats').withDescendant(by.label('Chats')))).toBeVisible(); // fallback to en
await expect(element(by.id('sidebar-profile').withDescendant(by.label('Profiel')))).toBeVisible();
await expect(element(by.id('sidebar-settings').withDescendant(by.label('Instellingen')))).toBeVisible();
await element(by.id('sidebar-close-drawer')).tap();
});
it("should set unsupported language and fallback to 'en'", async () => {
await post('users.setPreferences', { data: { language: 'eo' } }); // Set language to Esperanto
await device.launchApp({ ...defaultLaunchArgs, newInstance: true });
await waitFor(element(by.id('rooms-list-view')))
.toBeVisible()
.withTimeout(10000);
await element(by.id('rooms-list-view-sidebar')).tap();
await waitFor(element(by.id('sidebar-view')))
.toBeVisible()
.withTimeout(2000);
// give the app some time to apply new language
await sleep(3000);
await expect(element(by.id('sidebar-chats').withDescendant(by.label('Chats')))).toBeVisible();
await expect(element(by.id('sidebar-profile').withDescendant(by.label('Profile')))).toBeVisible();
await expect(element(by.id('sidebar-settings').withDescendant(by.label('Settings')))).toBeVisible();
await post('users.setPreferences', { data: { language: 'en' } }); // Set back to english
});
});
});