mattermost-mobile/detox/e2e/support/server_api/user.js
2020-11-17 14:20:58 -03:00

152 lines
3.9 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);
}
};
/**
* Get a user by username.
* See https://api.mattermost.com/#tag/users/paths/~1users~1username~1{username}/get
* @param {string} username
*/
export const apiGetUserByUsername = async (username) => {
try {
const response = await client.get(`/api/v4/users/username/${username}`);
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,
apiGetUserByUsername,
};
export default User;