Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
64 changes: 34 additions & 30 deletions infra/api/entities/users-api/Users.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import { APIResponse } from "@playwright/test";
import { ApiClient } from "@api-client";
import MockDataGenerator, { ApplicationUrl, RequestMethod, PaginationType, payloads } from "@api-helpers";
import MockDataGenerator, { ApplicationUrl, RequestMethod, PaginationType, payloads, IUser } from "@api-helpers";
import { ApiEndpoints } from "@api-endpoints";

export class Users extends ApiClient {
Expand All @@ -11,11 +11,12 @@ export class Users extends ApiClient {
return response;
}

async getGenderCount(gender: string) {
async getGenderCount(gender: string): Promise<number> {
let response = await this.get(this.usersEndpoint)
let responseObject = await response?.json()
let genderFilter = responseObject.filter((el: any) => el.gender === gender).length
return genderFilter
let genderFilter = responseObject.filter((user: IUser) => user.gender === gender)
let genderCount = genderFilter.length
return genderCount
}

/**
Expand Down Expand Up @@ -51,11 +52,12 @@ export class Users extends ApiClient {
}

async deleteInactiveUsers() {
let response: APIResponse | undefined
let inActiveUsers = await this.getInactiveUsers()
for (let user of inActiveUsers) {
response = await this.delete(`${this.usersEndpoint}/${user.id}`, { isAuthorizationRequired: true })
}
let response: APIResponse[] = await Promise.all(
inActiveUsers.map((user: IUser) =>
this.delete(`${this.usersEndpoint}/${user.id}`, { isAuthorizationRequired: true })
)
);
return response;
}

Expand All @@ -78,7 +80,7 @@ export class Users extends ApiClient {
async getTypeOfUserProperties() {
const usersResponse = await this.getUsers();
const users = await usersResponse?.json();
return users.map((user: any) => [
return users.map((user: IUser) => [
typeof user.id,
typeof user.name,
typeof user.email,
Expand All @@ -90,36 +92,38 @@ export class Users extends ApiClient {
/**
* @description replaces each email with .co.il extension
*/
async replaceEmailExtensionForUsers() {
async replaceEmailExtensionForUsers(): Promise<APIResponse[]> {
let users = await this.getUsers()
let usersObject = await users?.json()
let response: APIResponse | undefined
try {
for (let user of usersObject) {
let email = user.email
let emailExtension = await this.extractEmailExtension(email)
if (emailExtension && emailExtension !== 'co.il') {
let newEmail = await email.replace(emailExtension, 'co.il');
let newEmailProperty = { email: newEmail }
response = await this.patch(`${this.usersEndpoint}/${user.id}`, { requestData: newEmailProperty, isAuthorizationRequired: true })
let response: APIResponse[] = await Promise.all(usersObject.map(async (user: IUser) => {
let email = user.email;
if (email) {
let extension = await this.extractEmailExtension(email);
if (extension && extension !== 'co.il') {
const updatedEmail = email.replace(extension, 'co.il');
return this.patch(
`${this.usersEndpoint}/${user.id}`,
{
requestData: { email: updatedEmail },
isAuthorizationRequired: true
}
);
}
}
}
return response
}));
return response.filter((res: APIResponse) => res !== undefined);
} catch (error) {
throw new Error(`the user emails could be undefined ${error}`)
throw new Error(`Error updating email extensions: ${error}`);
}
}

async getCurrentUserEmailExtension() {
let extensions: string[] = []
let users = await this.getUsers()
let usersJsonObject = await users?.json()
let userEmails = usersJsonObject
for (let user of userEmails) {
let extension = await this.extractEmailExtension(user.email)
extensions.push(extension!)
}
return extensions
let extentions = await Promise.all(usersJsonObject.map(async (user: IUser) => {
return user.email ? await this.extractEmailExtension(user.email) : undefined
}))
return extentions;
}

private async extractEmailExtension(email: string) {
Expand All @@ -131,7 +135,7 @@ export class Users extends ApiClient {
private async getUserStatus(status: string) {
let users = await this.get(this.usersEndpoint)
let usersJsonObject = await users?.json()
let inactiveUsers = usersJsonObject.filter((user: { status: string; }) => user.status === status)
let inactiveUsers = usersJsonObject.filter((user: IUser) => user.status === status)
return inactiveUsers
}
}
7 changes: 7 additions & 0 deletions infra/api/helpers/types/users-type.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
export interface IUser {
id: number;
name: string;
email: string;
gender: string;
status: string;
}
6 changes: 3 additions & 3 deletions tests/api_tests/users/UsersApiTests.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -31,10 +31,10 @@ test.describe('Api tests for GoRestApi endpoints', async () => {
test('replace email extension of users - [PATCH] /users/:userId', { tag: [TestTags.Users] }, async ({ usersApi }) => {
await test.step('extract extension of each user email and replace each extension with co.il', async () => {
let response = await usersApi.replaceEmailExtensionForUsers()
expect(response?.status()).toBe(StatusCode.OK)
expect(response.every(res => res.status() === StatusCode.OK)).toBe(true)
})
await test.step('validate previous extensions were replaced with co.il extension', async () => {
let actualEmailExtensions = await usersApi.getCurrentUserEmailExtension()
let actualEmailExtensions = await usersApi.getCurrentUserEmailExtension();
let expectedExtensions = new Array(actualEmailExtensions.length).fill('.co.il')
expect(actualEmailExtensions).toEqual(expectedExtensions)
})
Expand All @@ -43,7 +43,7 @@ test.describe('Api tests for GoRestApi endpoints', async () => {
test('delete inactive users - [DELETE] /users/:userId', { tag: [TestTags.Users] }, async ({ usersApi }) => {
await test.step('make a request to delete all users that have an inactive status', async () => {
let response = await usersApi.deleteInactiveUsers()
expect(response?.status()).toBe(StatusCode.UNAUTHORIZED)
expect(response.every(res => res.status() === StatusCode.UNAUTHORIZED)).toBe(true);
let actualInactiveUsers = await usersApi.getInactiveUsers()
let expectedInactiveUsersLength = actualInactiveUsers.length
expect(expectedInactiveUsersLength).toBe(0)
Expand Down
Loading