diff --git a/api/config/contentSources.ts b/api/config/contentSources.ts index b6b102e4..6df15964 100644 --- a/api/config/contentSources.ts +++ b/api/config/contentSources.ts @@ -7,7 +7,7 @@ const config: ConfigFile = { outputFile: '../../src/store/contentSourcesApi.ts', exportName: 'contentSourcesApi', hooks: true, - filterEndpoints: ['listRepositories'], + filterEndpoints: ['listRepositories', 'listRepositoriesRpms'], } export default config diff --git a/api/config/imageBuilder.ts b/api/config/imageBuilder.ts index 6666e611..cbd19f7c 100644 --- a/api/config/imageBuilder.ts +++ b/api/config/imageBuilder.ts @@ -7,7 +7,7 @@ const config: ConfigFile = { outputFile: '../../src/store/imageBuilderApi.ts', exportName: 'imageBuilderApi', hooks: true, - filterEndpoints: ['getComposes', 'getComposeStatus', 'getComposeClones', 'getCloneStatus', 'getArchitectures'], + filterEndpoints: ['getComposes', 'getComposeStatus', 'getComposeClones', 'getCloneStatus', 'getArchitectures', 'getPackages'], } export default config diff --git a/src/store/contentSourcesApi.ts b/src/store/contentSourcesApi.ts index 37b6a9f9..ef312d43 100644 --- a/src/store/contentSourcesApi.ts +++ b/src/store/contentSourcesApi.ts @@ -22,6 +22,20 @@ const injectedRtkApi = api.injectEndpoints({ }, }), }), + listRepositoriesRpms: build.query< + ListRepositoriesRpmsApiResponse, + ListRepositoriesRpmsApiArg + >({ + query: (queryArg) => ({ + url: `/repositories/${queryArg.uuid}/rpms`, + params: { + limit: queryArg.limit, + offset: queryArg.offset, + search: queryArg.search, + sort_by: queryArg.sortBy, + }, + }), + }), }), overrideExisting: false, }); @@ -52,6 +66,20 @@ export type ListRepositoriesApiArg = { /** Comma separated list of statuses to optionally filter on */ status?: string; }; +export type ListRepositoriesRpmsApiResponse = + /** status 200 OK */ ApiRepositoryRpmCollectionResponse; +export type ListRepositoriesRpmsApiArg = { + /** Identifier of the Repository */ + uuid: string; + /** Limit the number of items returned */ + limit?: number; + /** Offset into the list of results to return in the response */ + offset?: number; + /** Search term for name. */ + search?: string; + /** Sets the sort order of the results. */ + sortBy?: string; +}; export type ApiRepositoryResponse = { account_id?: string; distribution_arch?: string; @@ -95,4 +123,20 @@ export type ErrorsHandlerError = { export type ErrorsErrorResponse = { errors?: ErrorsHandlerError[]; }; -export const { useListRepositoriesQuery } = injectedRtkApi; +export type ApiRepositoryRpm = { + arch?: string; + checksum?: string; + epoch?: number; + name?: string; + release?: string; + summary?: string; + uuid?: string; + version?: string; +}; +export type ApiRepositoryRpmCollectionResponse = { + data?: ApiRepositoryRpm[]; + links?: ApiLinks; + meta?: ApiResponseMetadata; +}; +export const { useListRepositoriesQuery, useListRepositoriesRpmsQuery } = + injectedRtkApi; diff --git a/src/store/imageBuilderApi.ts b/src/store/imageBuilderApi.ts index 382b18aa..57cb7d7b 100644 --- a/src/store/imageBuilderApi.ts +++ b/src/store/imageBuilderApi.ts @@ -34,6 +34,18 @@ const injectedRtkApi = api.injectEndpoints({ params: { limit: queryArg.limit, offset: queryArg.offset }, }), }), + getPackages: build.query({ + query: (queryArg) => ({ + url: `/packages`, + params: { + distribution: queryArg.distribution, + architecture: queryArg.architecture, + search: queryArg.search, + limit: queryArg.limit, + offset: queryArg.offset, + }, + }), + }), }), overrideExisting: false, }); @@ -74,6 +86,20 @@ export type GetComposeClonesApiArg = { /** clones page offset, default 0 */ offset?: number; }; +export type GetPackagesApiResponse = + /** status 200 a list of packages */ PackagesResponse; +export type GetPackagesApiArg = { + /** distribution to look up packages for */ + distribution: Distributions; + /** architecture to look up packages for */ + architecture: "x86_64" | "aarch64"; + /** packages to look for */ + search: string; + /** max amount of packages, default 100 */ + limit?: number; + /** packages page offset, default 0 */ + offset?: number; +}; export type Repository = { baseurl?: string; check_gpg?: boolean; @@ -281,10 +307,25 @@ export type ClonesResponse = { count: number; }; }; +export type Package = { + name: string; + summary: string; +}; +export type PackagesResponse = { + data: Package[]; + links: { + first: string; + last: string; + }; + meta: { + count: number; + }; +}; export const { useGetArchitecturesQuery, useGetCloneStatusQuery, useGetComposesQuery, useGetComposeStatusQuery, useGetComposeClonesQuery, + useGetPackagesQuery, } = injectedRtkApi; diff --git a/src/test/Components/CreateImageWizard/CreateImageWizard.beta.test.js b/src/test/Components/CreateImageWizard/CreateImageWizard.beta.test.js index 9271d64c..cd388c50 100644 --- a/src/test/Components/CreateImageWizard/CreateImageWizard.beta.test.js +++ b/src/test/Components/CreateImageWizard/CreateImageWizard.beta.test.js @@ -14,7 +14,7 @@ import api from '../../../api.js'; import { RHEL_8, RHEL_9, PROVISIONING_API } from '../../../constants.js'; import { mockComposesEmpty } from '../../fixtures/composes.js'; import { customizations, ids } from '../../fixtures/customizations.js'; -import { mockPkgResultAlphaContentSources } from '../../fixtures/packages.js'; +import { mockPkgResultAlphaContentSources } from '../../fixtures/packages'; import { server } from '../../mocks/server.js'; import { clickBack, diff --git a/src/test/Components/CreateImageWizard/CreateImageWizard.test.js b/src/test/Components/CreateImageWizard/CreateImageWizard.test.js index 84c47dd4..3575a913 100644 --- a/src/test/Components/CreateImageWizard/CreateImageWizard.test.js +++ b/src/test/Components/CreateImageWizard/CreateImageWizard.test.js @@ -16,7 +16,7 @@ import { mockPkgResultAlpha, mockPkgResultAll, mockPkgResultPartial, -} from '../../fixtures/packages.js'; +} from '../../fixtures/packages'; import { clickBack, clickNext, diff --git a/src/test/fixtures/packages.js b/src/test/fixtures/packages.tsx similarity index 68% rename from src/test/fixtures/packages.js rename to src/test/fixtures/packages.tsx index 1adfc187..7cc1ce7e 100644 --- a/src/test/fixtures/packages.js +++ b/src/test/fixtures/packages.tsx @@ -1,33 +1,39 @@ -export const mockPackagesResults = (search) => { +import { + ApiRepositoryRpm, + ApiRepositoryRpmCollectionResponse, +} from '../../store/contentSourcesApi'; +import { PackagesResponse } from '../../store/imageBuilderApi'; + +export const mockPackagesResults = (search: string): PackagesResponse => { if (search === 'test') { return { data: [ { name: 'testPkg', summary: 'test package summary', - version: '1.0', }, { name: 'lib-test', summary: 'lib-test package summary', - version: '1.0', }, { name: 'test', summary: 'summary for test package', - version: '1.0', }, ], + links: { first: '', last: '' }, meta: { count: 3, }, }; } else { - return { data: [], meta: 0 }; + return { data: [], links: { first: '', last: '' }, meta: { count: 0 } }; } }; -export const mockSourcesPackagesResults = (search) => { +export const mockSourcesPackagesResults = ( + search: string +): ApiRepositoryRpm[] => { if (search === 'test') { return [ { @@ -51,29 +57,26 @@ export const mockSourcesPackagesResults = (search) => { } }; -export const mockPkgResultAlpha = { +export const mockPkgResultAlpha: PackagesResponse = { meta: { count: 3 }, links: { first: '', last: '' }, data: [ { name: 'lib-test', summary: 'lib-test package summary', - version: '1.0', }, { name: 'Z-test', summary: 'Z-test package summary', - version: '1.0', }, { name: 'test', summary: 'summary for test package', - version: '1.0', }, ], }; -export const mockPkgResultAlphaContentSources = [ +export const mockPkgResultAlphaContentSources: ApiRepositoryRpm[] = [ { name: 'lib-test', summary: 'lib-test package summary', @@ -91,10 +94,10 @@ export const mockPkgResultAlphaContentSources = [ }, ]; -export const mockPkgResultPartial = { +export const mockPkgResultPartial: PackagesResponse = { meta: { count: 132 }, links: { first: '', last: '' }, - data: new Array(100).fill().map((_, i) => { + data: new Array(100).fill(undefined).map((_, i) => { return { name: 'testPkg-' + i, summary: 'test package summary', @@ -103,10 +106,10 @@ export const mockPkgResultPartial = { }), }; -export const mockPkgResultAll = { +export const mockPkgResultAll: ApiRepositoryRpmCollectionResponse = { meta: { count: 132 }, links: { first: '', last: '' }, - data: new Array(132).fill().map((_, i) => { + data: new Array(132).fill(undefined).map((_, i) => { return { name: 'testPkg-' + i, summary: 'test package summary',