diff --git a/apps/meteor/tests/e2e/channel-management.spec.ts b/apps/meteor/tests/e2e/channel-management.spec.ts index 42a9aacb74b..86b0b4bd908 100644 --- a/apps/meteor/tests/e2e/channel-management.spec.ts +++ b/apps/meteor/tests/e2e/channel-management.spec.ts @@ -8,8 +8,8 @@ test.describe.serial('channel-management', () => { let poHomeChannel: HomeChannel; let targetChannel: string; - test.beforeAll(async ({ browser }) => { - targetChannel = await createTargetChannel(browser); + test.beforeAll(async ({ api }) => { + targetChannel = await createTargetChannel(api); }); test.beforeEach(async ({ page }) => { diff --git a/apps/meteor/tests/e2e/emojis.spec.ts b/apps/meteor/tests/e2e/emojis.spec.ts index 64fc1186180..41b713e9ed4 100644 --- a/apps/meteor/tests/e2e/emojis.spec.ts +++ b/apps/meteor/tests/e2e/emojis.spec.ts @@ -8,8 +8,8 @@ test.describe.serial('emoji', () => { let poHomeChannel: HomeChannel; let targetChannel: string; - test.beforeAll(async ({ browser }) => { - targetChannel = await createTargetChannel(browser); + test.beforeAll(async ({ api }) => { + targetChannel = await createTargetChannel(api); }); test.beforeEach(async ({ page }) => { diff --git a/apps/meteor/tests/e2e/file-upload.spec.ts b/apps/meteor/tests/e2e/file-upload.spec.ts index ba19ba0e4a9..5d4b439af84 100644 --- a/apps/meteor/tests/e2e/file-upload.spec.ts +++ b/apps/meteor/tests/e2e/file-upload.spec.ts @@ -8,8 +8,8 @@ test.describe.serial('file-upload', () => { let poHomeChannel: HomeChannel; let targetChannel: string; - test.beforeAll(async ({ browser }) => { - targetChannel = await createTargetChannel(browser); + test.beforeAll(async ({ api }) => { + targetChannel = await createTargetChannel(api); }); test.beforeEach(async ({ page }) => { diff --git a/apps/meteor/tests/e2e/message-actions.spec.ts b/apps/meteor/tests/e2e/message-actions.spec.ts index de88828b812..d0a68c62452 100644 --- a/apps/meteor/tests/e2e/message-actions.spec.ts +++ b/apps/meteor/tests/e2e/message-actions.spec.ts @@ -8,8 +8,8 @@ test.describe.serial('message-actions', () => { let poHomeChannel: HomeChannel; let targetChannel: string; - test.beforeAll(async ({ browser }) => { - targetChannel = await createTargetChannel(browser); + test.beforeAll(async ({ api }) => { + targetChannel = await createTargetChannel(api); }); test.beforeEach(async ({ page }) => { diff --git a/apps/meteor/tests/e2e/messaging.spec.ts b/apps/meteor/tests/e2e/messaging.spec.ts index 9449bf0f1da..2b4f25b89b6 100644 --- a/apps/meteor/tests/e2e/messaging.spec.ts +++ b/apps/meteor/tests/e2e/messaging.spec.ts @@ -18,8 +18,8 @@ test.describe.serial('Messaging', () => { let poHomeChannel: HomeChannel; let targetChannel: string; - test.beforeAll(async ({ browser }) => { - targetChannel = await createTargetChannel(browser); + test.beforeAll(async ({ api }) => { + targetChannel = await createTargetChannel(api); }); test.beforeEach(async ({ page }) => { diff --git a/apps/meteor/tests/e2e/permissions.spec.ts b/apps/meteor/tests/e2e/permissions.spec.ts index c05273a3461..6ca8e020bd1 100644 --- a/apps/meteor/tests/e2e/permissions.spec.ts +++ b/apps/meteor/tests/e2e/permissions.spec.ts @@ -1,5 +1,4 @@ import { test, expect } from './utils/test'; -import { BASE_API_URL, ADMIN_CREDENTIALS } from './config/constants'; import { HomeChannel } from './page-objects'; import { createTargetChannel } from './utils'; @@ -7,18 +6,10 @@ test.use({ storageState: 'user2-session.json' }); test.describe.serial('permissions', () => { let poHomeChannel: HomeChannel; - let apiSessionHeaders: { 'X-Auth-Token': string; 'X-User-Id': string }; let targetChannel: string; - test.beforeAll(async ({ request }) => { - const response = await request.post(`${BASE_API_URL}/login`, { data: ADMIN_CREDENTIALS }); - const { userId, authToken } = (await response.json()).data; - - apiSessionHeaders = { 'X-Auth-Token': authToken, 'X-User-Id': userId }; - }); - - test.beforeAll(async ({ browser }) => { - targetChannel = await createTargetChannel(browser); + test.beforeAll(async ({ api }) => { + targetChannel = await createTargetChannel(api); }); test.beforeEach(async ({ page }) => { @@ -28,13 +19,10 @@ test.describe.serial('permissions', () => { }); test.describe.serial('Edit message', () => { - test.beforeAll(async ({ request }) => { - const response = await request.post(`${BASE_API_URL}/settings/Message_AllowEditing`, { - headers: apiSessionHeaders, - data: { value: false }, - }); + test.beforeAll(async ({ api }) => { + const statusCode = (await api.post('/settings/Message_AllowEditing', { value: false })).status(); - expect(response.status()).toBe(200); + expect(statusCode).toBe(200); }); test('expect option(edit) not be visible', async () => { @@ -45,24 +33,18 @@ test.describe.serial('permissions', () => { await expect(poHomeChannel.content.btnOptionEditMessage).toBeHidden(); }); - test.afterAll(async ({ request }) => { - const response = await request.post(`${BASE_API_URL}/settings/Message_AllowEditing`, { - headers: apiSessionHeaders, - data: { value: true }, - }); + test.afterAll(async ({ api }) => { + const statusCode = (await api.post('/settings/Message_AllowEditing', { value: true })).status(); - expect(response.status()).toBe(200); + expect(statusCode).toBe(200); }); }); test.describe.serial('Delete message', () => { - test.beforeAll(async ({ request }) => { - const response = await request.post(`${BASE_API_URL}/settings/Message_AllowDeleting`, { - headers: apiSessionHeaders, - data: { value: false }, - }); + test.beforeAll(async ({ api }) => { + const statusCode = (await api.post('/settings/Message_AllowDeleting', { value: false })).status(); - expect(response.status()).toBe(200); + expect(statusCode).toBe(200); }); test('expect option(delete) not be visible', async () => { @@ -73,26 +55,20 @@ test.describe.serial('permissions', () => { await expect(poHomeChannel.content.btnOptionDeleteMessage).toBeHidden(); }); - test.afterAll(async ({ request }) => { - const response = await request.post(`${BASE_API_URL}/settings/Message_AllowDeleting`, { - headers: apiSessionHeaders, - data: { value: true }, - }); + test.afterAll(async ({ api }) => { + const statusCode = (await api.post('/settings/Message_AllowDeleting', { value: true })).status(); - expect(response.status()).toBe(200); + expect(statusCode).toBe(200); }); }); test.describe.serial('Pin message', () => { test.use({ storageState: 'admin-session.json' }); - test.beforeAll(async ({ request }) => { - const response = await request.post(`${BASE_API_URL}/settings/Message_AllowPinning`, { - headers: apiSessionHeaders, - data: { value: false }, - }); + test.beforeAll(async ({ api }) => { + const statusCode = (await api.post('/settings/Message_AllowPinning', { value: false })).status(); - expect(response.status()).toBe(200); + expect(statusCode).toBe(200); }); test('expect option(pin) not be visible', async () => { @@ -103,26 +79,20 @@ test.describe.serial('permissions', () => { await expect(poHomeChannel.content.btnOptionPinMessage).toBeHidden(); }); - test.afterAll(async ({ request }) => { - const response = await request.post(`${BASE_API_URL}/settings/Message_AllowPinning`, { - headers: apiSessionHeaders, - data: { value: true }, - }); + test.afterAll(async ({ api }) => { + const statusCode = (await api.post('/settings/Message_AllowPinning', { value: true })).status(); - expect(response.status()).toBe(200); + expect(statusCode).toBe(200); }); }); // FIXME: Wrong behavior in Rocket.chat, currently it shows the button // and after a click a "not allowed" alert pops up test.describe.skip('Star message', () => { - test.beforeAll(async ({ request }) => { - const response = await request.post(`${BASE_API_URL}/settings/Message_AllowStarring`, { - headers: apiSessionHeaders, - data: { value: false }, - }); + test.beforeAll(async ({ api }) => { + const statusCode = (await api.post('/settings/Message_AllowStarring', { value: false })).status(); - expect(response.status()).toBe(200); + expect(statusCode).toBe(200); }); test('expect option(star) not be visible', async () => { @@ -133,24 +103,18 @@ test.describe.serial('permissions', () => { await expect(poHomeChannel.content.btnOptionStarMessage).toBeHidden(); }); - test.afterAll(async ({ request }) => { - const response = await request.post(`${BASE_API_URL}/settings/Message_AllowStarring`, { - headers: apiSessionHeaders, - data: { value: true }, - }); + test.afterAll(async ({ api }) => { + const statusCode = (await api.post('/settings/Message_AllowStarring', { value: true })).status(); - expect(response.status()).toBe(200); + expect(statusCode).toBe(200); }); }); test.describe.serial('Upload file', () => { - test.beforeAll(async ({ request }) => { - const response = await request.post(`${BASE_API_URL}/settings/FileUpload_Enabled`, { - headers: apiSessionHeaders, - data: { value: false }, - }); + test.beforeAll(async ({ api }) => { + const statusCode = (await api.post('/settings/FileUpload_Enabled', { value: false })).status(); - expect(response.status()).toBe(200); + expect(statusCode).toBe(200); }); test('expect option(upload file) not be visible', async () => { @@ -160,24 +124,18 @@ test.describe.serial('permissions', () => { await expect(poHomeChannel.content.btnOptionFileUpload).toBeHidden(); }); - test.afterAll(async ({ request }) => { - const response = await request.post(`${BASE_API_URL}/settings/FileUpload_Enabled`, { - headers: apiSessionHeaders, - data: { value: true }, - }); + test.afterAll(async ({ api }) => { + const statusCode = (await api.post('/settings/FileUpload_Enabled', { value: true })).status(); - expect(response.status()).toBe(200); + expect(statusCode).toBe(200); }); }); test.describe.serial('Upload audio', () => { - test.beforeAll(async ({ request }) => { - const response = await request.post(`${BASE_API_URL}/settings/Message_AudioRecorderEnabled`, { - headers: apiSessionHeaders, - data: { value: false }, - }); + test.beforeAll(async ({ api }) => { + const statusCode = (await api.post('/settings/Message_AudioRecorderEnabled', { value: false })).status(); - expect(response.status()).toBe(200); + expect(statusCode).toBe(200); }); test('expect option(upload audio) not be visible', async () => { @@ -187,24 +145,18 @@ test.describe.serial('permissions', () => { await expect(poHomeChannel.content.btnRecordAudio).toBeHidden(); }); - test.afterAll(async ({ request }) => { - const response = await request.post(`${BASE_API_URL}/settings/Message_AudioRecorderEnabled`, { - headers: apiSessionHeaders, - data: { value: true }, - }); + test.afterAll(async ({ api }) => { + const statusCode = (await api.post('/settings/Message_AudioRecorderEnabled', { value: true })).status(); - expect(response.status()).toBe(200); + expect(statusCode).toBe(200); }); }); test.describe.serial('Upload video', () => { - test.beforeAll(async ({ request }) => { - const response = await request.post(`${BASE_API_URL}/settings/Message_VideoRecorderEnabled`, { - headers: apiSessionHeaders, - data: { value: false }, - }); + test.beforeAll(async ({ api }) => { + const statusCode = (await api.post('/settings/Message_VideoRecorderEnabled', { value: false })).status(); - expect(response.status()).toBe(200); + expect(statusCode).toBe(200); }); test('expect option(upload video) not be visible', async () => { @@ -214,31 +166,20 @@ test.describe.serial('permissions', () => { await expect(poHomeChannel.content.btnVideoMessage).toBeHidden(); }); - test.afterAll(async ({ request }) => { - const response = await request.post(`${BASE_API_URL}/settings/Message_VideoRecorderEnabled`, { - headers: apiSessionHeaders, - data: { value: true }, - }); + test.afterAll(async ({ api }) => { + const statusCode = (await api.post('/settings/Message_VideoRecorderEnabled', { value: true })).status(); - expect(response.status()).toBe(200); + expect(statusCode).toBe(200); }); }); - // FIXME: test.describe.skip('Filter words', () => { - test.beforeAll(async ({ request }) => { - const response1 = await request.post(`${BASE_API_URL}/settings/Message_AllowBadWordsFilter`, { - headers: apiSessionHeaders, - data: { value: false }, - }); - - const response2 = await request.post(`${BASE_API_URL}/settings/Message_BadWordsFilterList`, { - headers: apiSessionHeaders, - data: { value: 'badword' }, - }); - - expect(response1.status()).toBe(200); - expect(response2.status()).toBe(200); + test.beforeAll(async ({ api }) => { + const statusCode1 = (await api.post('/settings/Message_AllowBadWordsFilter', { value: true })).status(); + const statusCode2 = (await api.post('/settings/Message_BadWordsFilterList', { value: 'badword' })).status(); + + expect(statusCode1).toBe(200); + expect(statusCode2).toBe(200); }); test('expect badword be censored', async () => { @@ -248,13 +189,10 @@ test.describe.serial('permissions', () => { await expect(poHomeChannel.content.lastUserMessage).toContainText('*'.repeat(7)); }); - test.afterAll(async ({ request }) => { - const response = await request.post(`${BASE_API_URL}/settings/Message_AllowBadWordsFilter`, { - headers: apiSessionHeaders, - data: { value: true }, - }); + test.afterAll(async ({ api }) => { + const statusCode = (await api.post('/settings/Message_AllowBadWordsFilter', { value: false })).status(); - expect(response.status()).toBe(200); + expect(statusCode).toBe(200); }); }); }); diff --git a/apps/meteor/tests/e2e/utils/create-target-channel.ts b/apps/meteor/tests/e2e/utils/create-target-channel.ts index 1c6fa876ebf..0918305dcb4 100644 --- a/apps/meteor/tests/e2e/utils/create-target-channel.ts +++ b/apps/meteor/tests/e2e/utils/create-target-channel.ts @@ -1,19 +1,15 @@ -import { Browser } from '@playwright/test'; import faker from '@faker-js/faker'; -import { HomeChannel } from '../page-objects/home-channel'; +import { BaseTest } from './test'; /** * createTargetChannel: * - Usefull to create a target channel for message related tests */ -export async function createTargetChannel(browser: Browser): Promise { - const page = await browser.newPage({ storageState: 'admin-session.json' }); +export async function createTargetChannel(api: BaseTest['api']): Promise { const name = faker.datatype.uuid(); - await page.goto('/home'); - await new HomeChannel(page).sidenav.createPublicChannel(name); - await page.close(); + await api.post('/channels.create', { name }); return name; } diff --git a/apps/meteor/tests/e2e/utils/test.ts b/apps/meteor/tests/e2e/utils/test.ts index 8809ce92599..1da94570dc8 100644 --- a/apps/meteor/tests/e2e/utils/test.ts +++ b/apps/meteor/tests/e2e/utils/test.ts @@ -2,11 +2,25 @@ import * as fs from 'fs'; import * as path from 'path'; import { v4 as uuid } from 'uuid'; -import { test as baseTest } from '@playwright/test'; +import { APIResponse, test as baseTest } from '@playwright/test'; + +import { BASE_API_URL, ADMIN_CREDENTIALS } from '../config/constants'; const PATH_NYC_OUTPUT = path.join(process.cwd(), '.nyc_output'); + +export type AnyObj = { [key: string]: any }; + +export type BaseTest = { + api: { + get(uri: string): Promise; + post(uri: string, data: AnyObj): Promise; + put(uri: string, data: AnyObj): Promise; + delete(uri: string): Promise; + }; +}; + // @ts-ignore -export const test = baseTest.extend({ +export const test = baseTest.extend({ context: async ({ context }, use) => { if (!process.env.E2E_COVERAGE) { await use(context); @@ -36,6 +50,31 @@ export const test = baseTest.extend({ }), ); }, + + api: async ({ request }, use) => { + const resp = await request.post(`${BASE_API_URL}/login`, { data: ADMIN_CREDENTIALS }); + const json = await resp.json(); + + const headers = { + 'X-Auth-Token': json.data.authToken, + 'X-User-Id': json.data.userId, + }; + + await use({ + get(uri: string) { + return request.get(BASE_API_URL + uri, { headers }); + }, + post(uri: string, data: AnyObj) { + return request.post(BASE_API_URL + uri, { headers, data }); + }, + put(uri: string, data: AnyObj) { + return request.put(BASE_API_URL + uri, { headers, data }); + }, + delete(uri: string) { + return request.delete(BASE_API_URL + uri, { headers }); + }, + }); + }, }); export const { expect } = test;