From 445716d6763bded8fe486b10da5091839fdbcfbd Mon Sep 17 00:00:00 2001 From: rverdile Date: Wed, 5 Mar 2025 15:24:54 -0500 Subject: [PATCH 1/2] HMS-5613: search rpms playwright test --- .../tests/API/PopularRepos.spec.ts | 2 +- .../tests/API/Repositories.spec.ts | 52 ++++++++++++------- .../tests/API/helpers/apiHelpers.tsx | 3 ++ 3 files changed, 38 insertions(+), 19 deletions(-) diff --git a/_playwright-tests/tests/API/PopularRepos.spec.ts b/_playwright-tests/tests/API/PopularRepos.spec.ts index d476bd506..78cea24d3 100644 --- a/_playwright-tests/tests/API/PopularRepos.spec.ts +++ b/_playwright-tests/tests/API/PopularRepos.spec.ts @@ -2,7 +2,7 @@ import { expect } from '@playwright/test'; import { test } from './base_client'; import { PopularRepositoriesApi } from './client'; -test.describe('Populat repositories', () => { +test.describe('Popular repositories', () => { test('List popular repositories', async ({ client }) => { const resp = await new PopularRepositoriesApi(client).listPopularRepositories({ search: 'EPEL 9', diff --git a/_playwright-tests/tests/API/Repositories.spec.ts b/_playwright-tests/tests/API/Repositories.spec.ts index ac553cab3..9ee7a8565 100644 --- a/_playwright-tests/tests/API/Repositories.spec.ts +++ b/_playwright-tests/tests/API/Repositories.spec.ts @@ -6,10 +6,12 @@ import { ApiRepositoryValidationResponseFromJSON, type ListRepositoriesRequest, type ValidateRepositoryParametersRequest, + RpmsApi, + ApiSearchRpmResponse, } from './client'; -import { expect } from '@playwright/test'; -import { poll } from './helpers/apiHelpers'; import { randomUUID } from 'crypto'; +import { expect } from '@playwright/test'; +import { poll, SmallRedHatRepoURL } from './helpers/apiHelpers'; test.describe('Repositories', () => { test('Verify repository introspection', async ({ client }) => { @@ -76,8 +78,8 @@ test.describe('Repositories', () => { await test.step('Check that a URLs protocol is supported and yum metadata can be retrieved', async () => { const resp = await new RepositoriesApi(client).validateRepositoryParameters(< - ValidateRepositoryParametersRequest - >{ + ValidateRepositoryParametersRequest + >{ apiRepositoryValidationRequest: [ { url: repoUrl, @@ -91,8 +93,8 @@ test.describe('Repositories', () => { await test.step('Check that lack of yum metadata is detected', async () => { const resp = await new RepositoriesApi(client).validateRepositoryParameters(< - ValidateRepositoryParametersRequest - >{ + ValidateRepositoryParametersRequest + >{ apiRepositoryValidationRequest: [ { url: realButBadRepoUrl, @@ -106,8 +108,8 @@ test.describe('Repositories', () => { await test.step('Check that a random name is valid for use', async () => { const resp = await new RepositoriesApi(client).validateRepositoryParameters(< - ValidateRepositoryParametersRequest - >{ + ValidateRepositoryParametersRequest + >{ apiRepositoryValidationRequest: [ { name: repoName, @@ -132,8 +134,8 @@ test.describe('Repositories', () => { await test.step('Check that url and name has to be unique', async () => { const resp = await new RepositoriesApi(client).validateRepositoryParameters(< - ValidateRepositoryParametersRequest - >{ + ValidateRepositoryParametersRequest + >{ apiRepositoryValidationRequest: [ { name: repoName, @@ -144,18 +146,18 @@ test.describe('Repositories', () => { expect(resp[0].name?.valid).not.toBeTruthy(); expect(resp[0].name?.error).toContain( - `A repository with the name '${repoName}' already exists.`, + `A repository with the name '${repoName}' already exists.`, ); expect(resp[0].url?.valid).not.toBeTruthy(); expect(resp[0].url?.error).toContain( - `A repository with the URL '${repoUrl}' already exists.`, + `A repository with the URL '${repoUrl}' already exists.`, ); }); await test.step('Repeat the check that url and name must be unique, but ignore repo with UUID given', async () => { const resp = await new RepositoriesApi(client).validateRepositoryParameters(< - ValidateRepositoryParametersRequest - >{ + ValidateRepositoryParametersRequest + >{ apiRepositoryValidationRequest: [ { name: repoName, @@ -171,8 +173,8 @@ test.describe('Repositories', () => { await test.step('Check that invalid uuid does not cause an ISE', async () => { const resp = await new RepositoriesApi(client).validateRepositoryParametersRaw(< - ValidateRepositoryParametersRequest - >{ + ValidateRepositoryParametersRequest + >{ apiRepositoryValidationRequest: [ { uuid: invalidFormatUuid, @@ -189,8 +191,8 @@ test.describe('Repositories', () => { await test.step('Check that invalid uuid does not cause an ISE, while validating other values', async () => { const resp = await new RepositoriesApi(client).validateRepositoryParametersRaw(< - ValidateRepositoryParametersRequest - >{ + ValidateRepositoryParametersRequest + >{ apiRepositoryValidationRequest: [ { uuid: invalidFormatUuid, @@ -207,4 +209,18 @@ test.describe('Repositories', () => { expect(json.url?.httpCode).toEqual(0); }); }); + + test('Verify RPM search', async ({ client }) => { + let rpmSearch: ApiSearchRpmResponse[]; + await test.step('Search small red hat repo', async () => { + rpmSearch = await new RpmsApi(client).searchRpm({ + apiContentUnitSearchRequest: { + search: 'gcc-plugin-devel', + urls: [SmallRedHatRepoURL], + }, + }); + const names = rpmSearch.map((v) => v.packageName); + expect(names).toContain('gcc-plugin-devel'); + }); + }); }); diff --git a/_playwright-tests/tests/API/helpers/apiHelpers.tsx b/_playwright-tests/tests/API/helpers/apiHelpers.tsx index 8d480469f..966cb2342 100644 --- a/_playwright-tests/tests/API/helpers/apiHelpers.tsx +++ b/_playwright-tests/tests/API/helpers/apiHelpers.tsx @@ -17,3 +17,6 @@ export const poll = async ( // timer in ms, must await e.g. await timer(num) export const timer = (ms: number) => new Promise((res) => setTimeout(res, ms)); + +export const SmallRedHatRepoURL = + 'https://cdn.redhat.com/content/dist/rhel9/9/aarch64/codeready-builder/os/'; \ No newline at end of file From 18b70cc2a03102d59b00435950b3baebb9a66a2d Mon Sep 17 00:00:00 2001 From: rverdile Date: Mon, 10 Mar 2025 14:43:15 -0400 Subject: [PATCH 2/2] HMS-5614: add popular repo playwright test --- .../tests/API/Repositories.spec.ts | 81 +++++++++++++++---- .../tests/API/helpers/apiHelpers.tsx | 2 +- 2 files changed, 66 insertions(+), 17 deletions(-) diff --git a/_playwright-tests/tests/API/Repositories.spec.ts b/_playwright-tests/tests/API/Repositories.spec.ts index 9ee7a8565..6d8ea3ecc 100644 --- a/_playwright-tests/tests/API/Repositories.spec.ts +++ b/_playwright-tests/tests/API/Repositories.spec.ts @@ -8,6 +8,9 @@ import { type ValidateRepositoryParametersRequest, RpmsApi, ApiSearchRpmResponse, + CreateRepositoryRequest, + ApiPopularRepositoriesCollectionResponse, + PopularRepositoriesApi, } from './client'; import { randomUUID } from 'crypto'; import { expect } from '@playwright/test'; @@ -78,8 +81,8 @@ test.describe('Repositories', () => { await test.step('Check that a URLs protocol is supported and yum metadata can be retrieved', async () => { const resp = await new RepositoriesApi(client).validateRepositoryParameters(< - ValidateRepositoryParametersRequest - >{ + ValidateRepositoryParametersRequest + >{ apiRepositoryValidationRequest: [ { url: repoUrl, @@ -93,8 +96,8 @@ test.describe('Repositories', () => { await test.step('Check that lack of yum metadata is detected', async () => { const resp = await new RepositoriesApi(client).validateRepositoryParameters(< - ValidateRepositoryParametersRequest - >{ + ValidateRepositoryParametersRequest + >{ apiRepositoryValidationRequest: [ { url: realButBadRepoUrl, @@ -108,8 +111,8 @@ test.describe('Repositories', () => { await test.step('Check that a random name is valid for use', async () => { const resp = await new RepositoriesApi(client).validateRepositoryParameters(< - ValidateRepositoryParametersRequest - >{ + ValidateRepositoryParametersRequest + >{ apiRepositoryValidationRequest: [ { name: repoName, @@ -134,8 +137,8 @@ test.describe('Repositories', () => { await test.step('Check that url and name has to be unique', async () => { const resp = await new RepositoriesApi(client).validateRepositoryParameters(< - ValidateRepositoryParametersRequest - >{ + ValidateRepositoryParametersRequest + >{ apiRepositoryValidationRequest: [ { name: repoName, @@ -146,18 +149,18 @@ test.describe('Repositories', () => { expect(resp[0].name?.valid).not.toBeTruthy(); expect(resp[0].name?.error).toContain( - `A repository with the name '${repoName}' already exists.`, + `A repository with the name '${repoName}' already exists.`, ); expect(resp[0].url?.valid).not.toBeTruthy(); expect(resp[0].url?.error).toContain( - `A repository with the URL '${repoUrl}' already exists.`, + `A repository with the URL '${repoUrl}' already exists.`, ); }); await test.step('Repeat the check that url and name must be unique, but ignore repo with UUID given', async () => { const resp = await new RepositoriesApi(client).validateRepositoryParameters(< - ValidateRepositoryParametersRequest - >{ + ValidateRepositoryParametersRequest + >{ apiRepositoryValidationRequest: [ { name: repoName, @@ -173,8 +176,8 @@ test.describe('Repositories', () => { await test.step('Check that invalid uuid does not cause an ISE', async () => { const resp = await new RepositoriesApi(client).validateRepositoryParametersRaw(< - ValidateRepositoryParametersRequest - >{ + ValidateRepositoryParametersRequest + >{ apiRepositoryValidationRequest: [ { uuid: invalidFormatUuid, @@ -191,8 +194,8 @@ test.describe('Repositories', () => { await test.step('Check that invalid uuid does not cause an ISE, while validating other values', async () => { const resp = await new RepositoriesApi(client).validateRepositoryParametersRaw(< - ValidateRepositoryParametersRequest - >{ + ValidateRepositoryParametersRequest + >{ apiRepositoryValidationRequest: [ { uuid: invalidFormatUuid, @@ -223,4 +226,50 @@ test.describe('Repositories', () => { expect(names).toContain('gcc-plugin-devel'); }); }); + + test('Add popular repository', async ({ client }) => { + let popularRepos: ApiPopularRepositoriesCollectionResponse; + await test.step('List popular repositories', async () => { + popularRepos = await new PopularRepositoriesApi(client).listPopularRepositories({ + search: 'EPEL 9', + }); + expect(popularRepos.meta?.count).toBe(1); + expect(popularRepos.data?.[0].suggestedName).toBe('EPEL 9 Everything x86_64'); + }); + + await test.step('Delete existing repository if exists', async () => { + if (popularRepos?.data?.length && popularRepos?.data?.[0].uuid != '') { + const resp = await new RepositoriesApi(client).deleteRepositoryRaw({ + uuid: popularRepos.data[0].uuid?.toString(), + }); + expect(resp.raw.status).toBe(204); + } + }); + + await test.step('Create custom repository for popular repository', async () => { + const repo = await new RepositoriesApi(client).createRepository({ + apiRepositoryRequest: { + name: popularRepos.data?.[0].suggestedName, + url: popularRepos.data?.[0].url, + gpgKey: popularRepos.data?.[0].gpgKey, + }, + }); + expect(repo.name).toBe(popularRepos.data?.[0].suggestedName); + }); + + await test.step('Get repo uuid', async () => { + popularRepos = await new PopularRepositoriesApi(client).listPopularRepositories({ + search: 'EPEL 9', + }); + expect(popularRepos.meta?.count).toBe(1); + expect(popularRepos.data?.[0].suggestedName).toBe('EPEL 9 Everything x86_64'); + }); + + await test.step('Delete repository', async () => { + const resp = await new RepositoriesApi(client).deleteRepositoryRaw({ + uuid: popularRepos.data?.[0].uuid?.toString(), + }); + expect(resp.raw.status).toBe(204); + }); + }); }); diff --git a/_playwright-tests/tests/API/helpers/apiHelpers.tsx b/_playwright-tests/tests/API/helpers/apiHelpers.tsx index 966cb2342..e74346b04 100644 --- a/_playwright-tests/tests/API/helpers/apiHelpers.tsx +++ b/_playwright-tests/tests/API/helpers/apiHelpers.tsx @@ -19,4 +19,4 @@ export const poll = async ( export const timer = (ms: number) => new Promise((res) => setTimeout(res, ms)); export const SmallRedHatRepoURL = - 'https://cdn.redhat.com/content/dist/rhel9/9/aarch64/codeready-builder/os/'; \ No newline at end of file + 'https://cdn.redhat.com/content/dist/rhel9/9/aarch64/codeready-builder/os/';