From d9c2e09dafcb7ae28ebbbf4e5a27079b8b11db5a Mon Sep 17 00:00:00 2001 From: Naseem Ali <34807727+Naseem77@users.noreply.github.com> Date: Wed, 4 Sep 2024 13:28:21 +0300 Subject: [PATCH] maxQueuedQueries Tests --- app/settings/Configurations.tsx | 2 +- e2e/config/roles.json | 13 +++++++ e2e/config/urls.json | 3 +- e2e/infra/api/apiRequests.ts | 12 +++++- e2e/logic/POM/settingsConfigPage.ts | 13 +++++++ e2e/logic/api/apiCalls.ts | 9 ++++- .../responses/modifySettingsRoleResponse.ts | 3 ++ e2e/tests/settingsConfig.spec.ts | 37 +++++++++++++++++++ 8 files changed, 88 insertions(+), 4 deletions(-) create mode 100644 e2e/config/roles.json create mode 100644 e2e/logic/POM/settingsConfigPage.ts create mode 100644 e2e/logic/api/responses/modifySettingsRoleResponse.ts create mode 100644 e2e/tests/settingsConfig.spec.ts diff --git a/app/settings/Configurations.tsx b/app/settings/Configurations.tsx index 22aea1fe..dc86c23b 100644 --- a/app/settings/Configurations.tsx +++ b/app/settings/Configurations.tsx @@ -192,7 +192,7 @@ export default function Configurations() { { configs.map(({ name, description, value }, index) => ( - + {name} {description} diff --git a/e2e/config/roles.json b/e2e/config/roles.json new file mode 100644 index 00000000..0954df68 --- /dev/null +++ b/e2e/config/roles.json @@ -0,0 +1,13 @@ +{ + "roles":{ + "maxQueuedQueries": "MAX_QUEUED_QUERIES", + "TimeOut": "TIMEOUT", + "maxTimeOut":"TIMEOUT_MAX", + "defaultTimeOut":"TIMEOUT_DEFAULT", + "resultSetSize": "RESULTSET_SIZE", + "queryMemCapacity": "QUERY_MEM_CAPACITY", + "vKeyMaxEntityCount": "VKEY_MAX_ENTITY_COUNT", + "cmdInfo": "CMD_INFO", + "maxInfoQueries": "MAX_INFO_QUERIES" + } +} \ No newline at end of file diff --git a/e2e/config/urls.json b/e2e/config/urls.json index 49647e94..18e378e3 100644 --- a/e2e/config/urls.json +++ b/e2e/config/urls.json @@ -2,7 +2,8 @@ "api": { "addGraphUrl": "http://localhost:3000/api/graph/", "LoginApiUrl": "http://localhost:3000/api/auth/providers", - "deleteGraphUrl": "http://localhost:3000/api/graph/" + "deleteGraphUrl": "http://localhost:3000/api/graph/", + "settingsConfig": "http://localhost:3000/api/graph?config=" }, "falkorDBWeb": "https://www.falkordb.com/", diff --git a/e2e/infra/api/apiRequests.ts b/e2e/infra/api/apiRequests.ts index abbb4c28..9653ebf9 100644 --- a/e2e/infra/api/apiRequests.ts +++ b/e2e/infra/api/apiRequests.ts @@ -10,6 +10,16 @@ const getRequest = async (url: string, body: any, availableRequest?: APIRequestC const requestContext = availableRequest || (await request.newContext()); return await requestContext.get(url, requestOptions); }; + +const postRequest = async (url: string, body: any, availableRequest?: APIRequestContext, headers?: Record) => { + const requestOptions = { + data: body, + headers: headers || undefined, + }; + + const requestContext = availableRequest || (await request.newContext()); + return await requestContext.post(url, requestOptions); +}; const deleteRequest = async (url: string, headers?: Record) => { const requestOptions = { @@ -22,4 +32,4 @@ const deleteRequest = async (url: string, headers?: Record) => { -export{ getRequest, deleteRequest } \ No newline at end of file +export{ getRequest, deleteRequest, postRequest } \ No newline at end of file diff --git a/e2e/logic/POM/settingsConfigPage.ts b/e2e/logic/POM/settingsConfigPage.ts new file mode 100644 index 00000000..e7b08052 --- /dev/null +++ b/e2e/logic/POM/settingsConfigPage.ts @@ -0,0 +1,13 @@ +import { Locator, Page } from "@playwright/test"; +import BasePage from "@/e2e/infra/ui/basePage"; + +export default class SettingsConfigPage extends BasePage { + + private get roleContentValue() : (role : string) => Locator { + return (role : string) => this.page.locator(`//tbody/tr[@data-id='${role}']/td/button/p`) + } + + async getRoleContentValue(role : string): Promise{ + return await this.roleContentValue(role).textContent() + } +} \ No newline at end of file diff --git a/e2e/logic/api/apiCalls.ts b/e2e/logic/api/apiCalls.ts index c7f026ac..ee93b2f6 100644 --- a/e2e/logic/api/apiCalls.ts +++ b/e2e/logic/api/apiCalls.ts @@ -1,7 +1,8 @@ -import { deleteRequest, getRequest } from "../../infra/api/apiRequests"; +import { deleteRequest, getRequest, postRequest } from "../../infra/api/apiRequests"; import urls from '../../config/urls.json' import { AddGraphResponse } from "./responses/addGraphResponse"; import { RemoveGraphResponse } from "./responses/removeGraphResponse"; +import { ModifySettingsRoleResponse } from "./responses/modifySettingsRoleResponse"; export class ApiCalls{ @@ -16,4 +17,10 @@ export class ApiCalls{ const jsonData = await result.json(); return jsonData } + + async modifySettingsRole(roleName: string, roleValue : string, data? :any): Promise{ + const result = await postRequest(urls.api.settingsConfig + roleName + "&value=" + roleValue, data) + const jsonData = await result.json(); + return jsonData + } } \ No newline at end of file diff --git a/e2e/logic/api/responses/modifySettingsRoleResponse.ts b/e2e/logic/api/responses/modifySettingsRoleResponse.ts new file mode 100644 index 00000000..cc871515 --- /dev/null +++ b/e2e/logic/api/responses/modifySettingsRoleResponse.ts @@ -0,0 +1,3 @@ +export interface ModifySettingsRoleResponse { + config: string; + } diff --git a/e2e/tests/settingsConfig.spec.ts b/e2e/tests/settingsConfig.spec.ts new file mode 100644 index 00000000..a7228a2d --- /dev/null +++ b/e2e/tests/settingsConfig.spec.ts @@ -0,0 +1,37 @@ +import { expect, test } from "@playwright/test"; +import urls from '../config/urls.json' +import { roles } from '../config/roles.json' +import BrowserWrapper from "../infra/ui/browserWrapper"; +import SettingsConfigPage from "../logic/POM/settingsConfigPage"; +import { ApiCalls } from "../logic/api/apiCalls"; + +test.describe('Settings Tests', () => { + let browser : BrowserWrapper; + + test.beforeAll(async () => { + browser = new BrowserWrapper(); + }) + + test.afterAll(async () => { + await browser.closeBrowser(); + }) + + const inputData = [ + { input: 'aa', description: "invalid input - character", expected: false}, + { input: "-3", description: "invalid input - negative number", expected: false}, + { input: "0", description: "invalid input - zero value", expected: false}, + { input: "12", description: "without lowercase letters", expected: true}, + + ]; + + inputData.forEach(({ input, description, expected }) => { + test(`Modify ${roles.maxQueuedQueries} via API validation via UI: Input value: ${input} description: ${description}`, async () => { + const settingsConfigPage = await browser.createNewPage(SettingsConfigPage, urls.settingsUrl) + const apiCall = new ApiCalls() + await apiCall.modifySettingsRole(roles.maxQueuedQueries, input) + await settingsConfigPage.refreshPage() + const value = await settingsConfigPage.getRoleContentValue(roles.maxQueuedQueries) + expect(value === input).toBe(expected) + }); + }) +}) \ No newline at end of file