* initial Detox setup for mobile UI automation * fix iOS allow permission on opening the app, add npm script to root folder, fix test when using longer site URL and add detox dependency to root for android build dependency * remove detox proguardFile * update packages and emulator * change folder build on local and CI * add test to post a message, ability to have test in isolation, server API commands, server config, dependency updates and update folder structure * update snapshot * update detox and do clean up * update dependencies
136 lines
3.4 KiB
JavaScript
136 lines
3.4 KiB
JavaScript
// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.
|
|
// See LICENSE.txt for license information.
|
|
|
|
import testConfig from '@support/test_config';
|
|
import {getRandomId} from '@support/utils';
|
|
|
|
import client from './client';
|
|
import {getResponseFromError} from './common';
|
|
|
|
// ****************************************************************
|
|
// Users
|
|
// See https://api.mattermost.com/#tag/users
|
|
//
|
|
// Exported API function should have the following:
|
|
// - documented using JSDoc
|
|
// - meaningful description
|
|
// - match the referenced API endpoints
|
|
// - parameter/s defined by `@param`
|
|
// - return value defined by `@return`
|
|
// ****************************************************************
|
|
|
|
/**
|
|
* Login to Mattermost server.
|
|
* See https://api.mattermost.com/#tag/users/paths/~1users~1login/post
|
|
* @param {string} user.username - username of a user
|
|
* @param {string} user.password - password of a user
|
|
*/
|
|
export const apiLogin = async (user) => {
|
|
try {
|
|
const response = await client.post(
|
|
'/api/v4/users/login',
|
|
{login_id: user.username, password: user.password},
|
|
);
|
|
|
|
const {data, headers, status} = response;
|
|
|
|
// Get MMAUTHTOKEN cookie and attach to the client instance
|
|
const [mmAuthToken] = headers['set-cookie'];
|
|
client.defaults.headers.Cookie = mmAuthToken;
|
|
|
|
return {
|
|
status,
|
|
user: data,
|
|
};
|
|
} catch (err) {
|
|
return getResponseFromError(err);
|
|
}
|
|
};
|
|
|
|
/**
|
|
* Login to Mattermost server as sysadmin.
|
|
*/
|
|
export const apiAdminLogin = async () => {
|
|
return apiLogin({
|
|
username: testConfig.adminUsername,
|
|
password: testConfig.adminPassword,
|
|
});
|
|
};
|
|
|
|
/**
|
|
* Logout from the Mattermost server.
|
|
* See https://api.mattermost.com/#tag/users/paths/~1users~1logout/post
|
|
*/
|
|
export const apiLogout = async () => {
|
|
const response = await client.post('/api/v4/users/logout');
|
|
|
|
client.defaults.headers.Cookie = '';
|
|
|
|
return response.data;
|
|
};
|
|
|
|
/**
|
|
* Create a user.
|
|
* See https://api.mattermost.com/#tag/users/paths/~1users/post
|
|
* @param {Object} user - user object to be created
|
|
*/
|
|
export const apiCreateUser = async ({prefix = 'user', user = null} = {}) => {
|
|
try {
|
|
const newUser = user || generateRandomUser(prefix);
|
|
|
|
const response = await client.post(
|
|
'/api/v4/users',
|
|
newUser,
|
|
);
|
|
|
|
return {user: {...response.data, password: newUser.password}};
|
|
} catch (err) {
|
|
return getResponseFromError(err);
|
|
}
|
|
};
|
|
|
|
/**
|
|
* Get user from a current session.
|
|
*/
|
|
export const apiGetMe = () => {
|
|
return apiGetUserById('me');
|
|
};
|
|
|
|
/**
|
|
* Get a user by ID.
|
|
* See https://api.mattermost.com/#tag/users/paths/~1users~1{user_id}/get
|
|
* @param {string} userId
|
|
*/
|
|
export const apiGetUserById = async (userId) => {
|
|
try {
|
|
const response = await client.get(`/api/v4/users/${userId}`);
|
|
|
|
return {user: response.data};
|
|
} catch (err) {
|
|
return getResponseFromError(err);
|
|
}
|
|
};
|
|
|
|
function generateRandomUser(prefix) {
|
|
const randomId = getRandomId();
|
|
|
|
return {
|
|
email: `${prefix}${randomId}@sample.mattermost.com`,
|
|
username: `${prefix}${randomId}`,
|
|
password: 'passwd',
|
|
first_name: `First${randomId}`,
|
|
last_name: `Last${randomId}`,
|
|
nickname: `Nickname${randomId}`,
|
|
};
|
|
}
|
|
|
|
export const User = {
|
|
apiAdminLogin,
|
|
apiLogin,
|
|
apiLogout,
|
|
apiCreateUser,
|
|
apiGetMe,
|
|
apiGetUserById,
|
|
};
|
|
|
|
export default User;
|