From 85252683ef946d30ef5cc57e988f9760d4037bea Mon Sep 17 00:00:00 2001 From: Justin Dalrymple Date: Sat, 19 Oct 2024 19:36:04 -0400 Subject: [PATCH] Adding support for `GroupJobTokenScopes` and moved `JobTokenScopes` to `ProjectJobTokenScopes`(#3643) --- .husky/pre-commit | 2 +- packages/core/src/resources/Gitlab.ts | 9 +- .../core/src/resources/GroupJobTokenScopes.ts | 25 ++++++ .../src/resources/ProjectJobTokenScopes.ts | 43 ++++++++++ packages/core/src/resources/index.ts | 3 +- .../ResourceJobTokenScopes.ts} | 37 +++++---- packages/core/src/templates/index.ts | 1 + packages/core/test/integration/map.ts | 3 +- .../test/unit/resources/JobTokenScopes.ts | 74 ----------------- .../unit/templates/ResourceJobTokenScopes.ts | 82 +++++++++++++++++++ packages/rest/src/index.ts | 3 +- packages/rest/test/e2e/browser/General.ts | 3 +- .../rest/test/integration/browser/General.ts | 3 +- 13 files changed, 188 insertions(+), 100 deletions(-) create mode 100644 packages/core/src/resources/GroupJobTokenScopes.ts create mode 100644 packages/core/src/resources/ProjectJobTokenScopes.ts rename packages/core/src/{resources/JobTokenScopes.ts => templates/ResourceJobTokenScopes.ts} (60%) delete mode 100644 packages/core/test/unit/resources/JobTokenScopes.ts create mode 100644 packages/core/test/unit/templates/ResourceJobTokenScopes.ts diff --git a/.husky/pre-commit b/.husky/pre-commit index 48e3a77a0..53e066ff1 100755 --- a/.husky/pre-commit +++ b/.husky/pre-commit @@ -1 +1 @@ -yarn dlx --no-install lint-staged \ No newline at end of file +yarn test diff --git a/packages/core/src/resources/Gitlab.ts b/packages/core/src/resources/Gitlab.ts index e4ecaa19c..b8f9c6972 100644 --- a/packages/core/src/resources/Gitlab.ts +++ b/packages/core/src/resources/Gitlab.ts @@ -86,7 +86,6 @@ import { IssueStateEvents } from './IssueStateEvents'; import { IssueWeightEvents } from './IssueWeightEvents'; import { JobArtifacts } from './JobArtifacts'; import { Jobs } from './Jobs'; -import { JobTokenScopes } from './JobTokenScopes'; import { MergeRequestApprovals } from './MergeRequestApprovals'; import { MergeRequestAwardEmojis } from './MergeRequestAwardEmojis'; import { MergeRequestContextCommits } from './MergeRequestContextCommits'; @@ -117,6 +116,7 @@ import { ProjectImportExports } from './ProjectImportExports'; import { ProjectInvitations } from './ProjectInvitations'; import { ProjectIssueBoards } from './ProjectIssueBoards'; import { ProjectIterations } from './ProjectIterations'; +import { ProjectJobTokenScopes } from './ProjectJobTokenScopes'; import { ProjectLabels } from './ProjectLabels'; import { ProjectMembers } from './ProjectMembers'; import { ProjectMilestones } from './ProjectMilestones'; @@ -166,6 +166,7 @@ import { GroupImportExports } from './GroupImportExports'; import { GroupInvitations } from './GroupInvitations'; import { GroupIssueBoards } from './GroupIssueBoards'; import { GroupIterations } from './GroupIterations'; +import { GroupJobTokenScopes } from './GroupJobTokenScopes'; import { GroupLabels } from './GroupLabels'; import { GroupLDAPLinks } from './GroupLDAPLinks'; import { GroupMembers } from './GroupMembers'; @@ -279,7 +280,6 @@ export interface Gitlab extends BaseResource { IssueWeightEvents: IssueWeightEvents; JobArtifacts: JobArtifacts; Jobs: Jobs; - JobTokenScopes: JobTokenScopes; MergeRequestApprovals: MergeRequestApprovals; MergeRequestAwardEmojis: MergeRequestAwardEmojis; MergeRequestContextCommits: MergeRequestContextCommits; @@ -310,6 +310,7 @@ export interface Gitlab extends BaseResource { ProjectInvitations: ProjectInvitations; ProjectIssueBoards: ProjectIssueBoards; ProjectIterations: ProjectIterations; + ProjectJobTokenScopes: ProjectJobTokenScopes; ProjectLabels: ProjectLabels; ProjectMembers: ProjectMembers; ProjectMilestones: ProjectMilestones; @@ -359,6 +360,7 @@ export interface Gitlab extends BaseResource { GroupInvitations: GroupInvitations; GroupIssueBoards: GroupIssueBoards; GroupIterations: GroupIterations; + GroupJobTokenScopes: GroupJobTokenScopes; GroupLabels: GroupLabels; GroupLDAPLinks: GroupLDAPLinks; GroupMembers: GroupMembers; @@ -470,7 +472,6 @@ const resources = { IssueWeightEvents, JobArtifacts, Jobs, - JobTokenScopes, MergeRequestApprovals, MergeRequestAwardEmojis, MergeRequestContextCommits, @@ -501,6 +502,7 @@ const resources = { ProjectInvitations, ProjectIssueBoards, ProjectIterations, + ProjectJobTokenScopes, ProjectLabels, ProjectMembers, ProjectMilestones, @@ -550,6 +552,7 @@ const resources = { GroupInvitations, GroupIssueBoards, GroupIterations, + GroupJobTokenScopes, GroupLabels, GroupLDAPLinks, GroupMembers, diff --git a/packages/core/src/resources/GroupJobTokenScopes.ts b/packages/core/src/resources/GroupJobTokenScopes.ts new file mode 100644 index 000000000..8e904b103 --- /dev/null +++ b/packages/core/src/resources/GroupJobTokenScopes.ts @@ -0,0 +1,25 @@ +import type { BaseResourceOptions } from '@gitbeaker/requester-utils'; +import type { GitlabAPIResponse, ShowExpanded, Sudo } from '../infrastructure'; +import type { AllowListSchema } from '../templates/ResourceJobTokenScopes'; +import { ResourceJobTokenScopes } from '../templates/ResourceJobTokenScopes'; + +export interface GroupJobTokenScopes extends ResourceJobTokenScopes { + addToInboundAllowList( + groupId: string | number, + targetGroupId: string | number, + options?: Sudo & ShowExpanded, + ): Promise>; + + removeFromInboundAllowList( + groupId: string | number, + targetGroupId: string | number, + options?: Sudo & ShowExpanded, + ): Promise>; +} + +export class GroupJobTokenScopes extends ResourceJobTokenScopes { + constructor(options: BaseResourceOptions) { + /* istanbul ignore next */ + super('groups', options); + } +} diff --git a/packages/core/src/resources/ProjectJobTokenScopes.ts b/packages/core/src/resources/ProjectJobTokenScopes.ts new file mode 100644 index 000000000..1251d15d0 --- /dev/null +++ b/packages/core/src/resources/ProjectJobTokenScopes.ts @@ -0,0 +1,43 @@ +import type { BaseResourceOptions } from '@gitbeaker/requester-utils'; +import type { GitlabAPIResponse, ShowExpanded, Sudo } from '../infrastructure'; +import type { SimpleProjectSchema } from './Projects'; +import type { AllowListSchema, JobTokenScopeSchema } from '../templates/ResourceJobTokenScopes'; +import { ResourceJobTokenScopes } from '../templates/ResourceJobTokenScopes'; + +export interface ProjectJobTokenScopes + extends ResourceJobTokenScopes { + edit( + projectId: string | number, + enabled: boolean, + options?: Sudo & ShowExpanded, + ): Promise>; + + show( + projectId: string | number, + options?: Sudo & ShowExpanded, + ): Promise>; + + showInboundAllowList( + projectId: string | number, + options?: Sudo & ShowExpanded, + ): Promise>; + + addToInboundAllowList( + projectId: string | number, + targetProjectId: string | number, + options?: Sudo & ShowExpanded, + ): Promise>; + + removeFromInboundAllowList( + projectId: string | number, + targetProjectId: string | number, + options?: Sudo & ShowExpanded, + ): Promise>; +} + +export class ProjectJobTokenScopes extends ResourceJobTokenScopes { + constructor(options: BaseResourceOptions) { + /* istanbul ignore next */ + super('projects', options); + } +} diff --git a/packages/core/src/resources/index.ts b/packages/core/src/resources/index.ts index 9f20308b7..3bfd8589b 100644 --- a/packages/core/src/resources/index.ts +++ b/packages/core/src/resources/index.ts @@ -85,7 +85,6 @@ export * from './Issues'; export * from './IssuesStatistics'; export * from './JobArtifacts'; export * from './Jobs'; -export * from './JobTokenScopes'; export * from './MergeRequestApprovals'; export * from './MergeRequestAwardEmojis'; export * from './MergeRequestContextCommits'; @@ -116,6 +115,7 @@ export * from './ProjectImportExports'; export * from './ProjectInvitations'; export * from './ProjectIssueBoards'; export * from './ProjectIterations'; +export * from './ProjectJobTokenScopes'; export * from './ProjectLabels'; export * from './ProjectMembers'; export * from './ProjectMilestones'; @@ -167,6 +167,7 @@ export * from './GroupImportExports'; export * from './GroupInvitations'; export * from './GroupIssueBoards'; export * from './GroupIterations'; +export * from './GroupJobTokenScopes'; export * from './GroupLDAPLinks'; export * from './GroupLabels'; export * from './GroupMemberRoles'; diff --git a/packages/core/src/resources/JobTokenScopes.ts b/packages/core/src/templates/ResourceJobTokenScopes.ts similarity index 60% rename from packages/core/src/resources/JobTokenScopes.ts rename to packages/core/src/templates/ResourceJobTokenScopes.ts index d5c7146b4..5c4316020 100644 --- a/packages/core/src/resources/JobTokenScopes.ts +++ b/packages/core/src/templates/ResourceJobTokenScopes.ts @@ -1,7 +1,6 @@ -import { BaseResource } from '@gitbeaker/requester-utils'; +import { BaseResource, BaseResourceOptions } from '@gitbeaker/requester-utils'; import { RequestHelper, endpoint } from '../infrastructure'; import type { GitlabAPIResponse, ShowExpanded, Sudo } from '../infrastructure'; -import { SimpleProjectSchema } from './Projects'; export interface JobTokenScopeSchema extends Record { inbound_enabled: boolean; @@ -13,61 +12,65 @@ export interface AllowListSchema extends Record { target_project_id: number; } -export class JobTokenScopes extends BaseResource { +export class ResourceJobTokenScopes extends BaseResource { + constructor(resourceType: string, options: BaseResourceOptions) { + super({ prefixUrl: resourceType, ...options }); + } + show( - projectId: string | number, + resourceId: string | number, options?: Sudo & ShowExpanded, ): Promise> { return RequestHelper.get()( this, - endpoint`projects/${projectId}/job_token_scope`, + endpoint`${resourceId}/job_token_scope`, options, ); } edit( - projectId: string | number, + resourceId: string | number, enabled: boolean, options?: Sudo & ShowExpanded, ): Promise> { return RequestHelper.patch()( this, - endpoint`projects/${projectId}/job_token_scope`, + endpoint`${resourceId}/job_token_scope`, { ...options, enabled }, ); } showInboundAllowList( - projectId: string | number, + resourceId: string | number, options?: Sudo & ShowExpanded, - ): Promise> { - return RequestHelper.get()( + ): Promise[], C, E, void>> { + return RequestHelper.get[]>()( this, - endpoint`projects/${projectId}/job_token_scope/allowlist`, + endpoint`${resourceId}/job_token_scope/allowlist`, options, ); } addToInboundAllowList( - projectId: string | number, - targetProjectId: string | number, + resourceId: string | number, + targetResourceId: string | number, options?: Sudo & ShowExpanded, ): Promise> { return RequestHelper.post()( this, - endpoint`projects/${projectId}/job_token_scope/allowlist/${targetProjectId}`, + endpoint`${resourceId}/job_token_scope/allowlist/${targetResourceId}`, options, ); } removeFromInboundAllowList( - projectId: string | number, - targetProjectId: string | number, + resourceId: string | number, + targetResourceId: string | number, options?: Sudo & ShowExpanded, ): Promise> { return RequestHelper.del()( this, - endpoint`projects/${projectId}/job_token_scope/allowlist/${targetProjectId}`, + endpoint`${resourceId}/job_token_scope/allowlist/${targetResourceId}`, options, ); } diff --git a/packages/core/src/templates/index.ts b/packages/core/src/templates/index.ts index bed2afb03..cfc915d31 100644 --- a/packages/core/src/templates/index.ts +++ b/packages/core/src/templates/index.ts @@ -25,3 +25,4 @@ export * from './ResourceLabelEvents'; export * from './ResourceMilestoneEvents'; export * from './ResourceStateEvents'; export * from './ResourceWeightEvents'; +export * from './ResourceJobTokenScopes'; diff --git a/packages/core/test/integration/map.ts b/packages/core/test/integration/map.ts index 3d4420057..f3d4dcb95 100644 --- a/packages/core/test/integration/map.ts +++ b/packages/core/test/integration/map.ts @@ -81,7 +81,6 @@ describe('API Map', () => { 'IssueWeightEvents', 'JobArtifacts', 'Jobs', - 'JobTokenScopes', 'MergeRequestApprovals', 'MergeRequestAwardEmojis', 'MergeRequestContextCommits', @@ -112,6 +111,7 @@ describe('API Map', () => { 'ProjectInvitations', 'ProjectIssueBoards', 'ProjectIterations', + 'ProjectJobTokenScopes', 'ProjectLabels', 'ProjectMembers', 'ProjectMilestones', @@ -160,6 +160,7 @@ describe('API Map', () => { 'GroupInvitations', 'GroupIssueBoards', 'GroupIterations', + 'GroupJobTokenScopes', 'GroupLabels', 'GroupLDAPLinks', 'GroupMembers', diff --git a/packages/core/test/unit/resources/JobTokenScopes.ts b/packages/core/test/unit/resources/JobTokenScopes.ts deleted file mode 100644 index f03ccf47a..000000000 --- a/packages/core/test/unit/resources/JobTokenScopes.ts +++ /dev/null @@ -1,74 +0,0 @@ -import { JobTokenScopes } from '../../../src'; -import { RequestHelper } from '../../../src/infrastructure'; - -jest.mock( - '../../../src/infrastructure/RequestHelper', - () => require('../../__mocks__/RequestHelper').default, -); - -let service: JobTokenScopes; - -beforeEach(() => { - service = new JobTokenScopes({ - requesterFn: jest.fn(), - token: 'abcdefg', - }); -}); - -describe('JobTokenScopes.show', () => { - it('should request GET /projects/:id/job_token_scope', async () => { - await service.show(1); - - expect(RequestHelper.get()).toHaveBeenCalledWith( - service, - 'projects/1/job_token_scope', - undefined, - ); - }); -}); - -describe('JobTokenScopes.edit', () => { - it('should request PATCH /projects/:id/job_token_scope', async () => { - await service.edit(1, false); - - expect(RequestHelper.get()).toHaveBeenCalledWith(service, 'projects/1/job_token_scope', { - enabled: false, - }); - }); -}); - -describe('JobTokenScopes.showInboundAllowList', () => { - it('should request GET /projects/:id/job_token_scope/allowlist', async () => { - await service.showInboundAllowList(1); - - expect(RequestHelper.get()).toHaveBeenCalledWith( - service, - 'projects/1/job_token_scope/allowlist', - undefined, - ); - }); -}); - -describe('JobTokenScopes.addToInboundAllowList', () => { - it('should request POST /projects/:id/job_token_scope/allowlist/:targetId', async () => { - await service.addToInboundAllowList(1, 2); - - expect(RequestHelper.post()).toHaveBeenCalledWith( - service, - 'projects/1/job_token_scope/allowlist/2', - undefined, - ); - }); -}); - -describe('JobTokenScopes.removeFromInboundAllowList', () => { - it('should request DEL /projects/:id/job_token_scope/allowlist/:targetId', async () => { - await service.removeFromInboundAllowList(1, 2); - - expect(RequestHelper.del()).toHaveBeenCalledWith( - service, - 'projects/1/job_token_scope/allowlist/2', - undefined, - ); - }); -}); diff --git a/packages/core/test/unit/templates/ResourceJobTokenScopes.ts b/packages/core/test/unit/templates/ResourceJobTokenScopes.ts new file mode 100644 index 000000000..d6f6230a2 --- /dev/null +++ b/packages/core/test/unit/templates/ResourceJobTokenScopes.ts @@ -0,0 +1,82 @@ +import { ResourceJobTokenScopes } from '../../../src/templates'; +import { RequestHelper } from '../../../src/infrastructure'; + +jest.mock( + '../../../src/infrastructure/RequestHelper', + () => require('../../__mocks__/RequestHelper').default, +); + +let service: ResourceJobTokenScopes; + +beforeEach(() => { + service = new ResourceJobTokenScopes('resource', { + requesterFn: jest.fn(), + token: 'abcdefg', + }); +}); + +afterEach(() => { + jest.clearAllMocks(); +}); + +describe('Instantiating ResourceJobTokenScopes service', () => { + it('should create a valid service object', () => { + expect(service).toBeInstanceOf(ResourceJobTokenScopes); + expect(service.url).toBeDefined(); + expect(service.url).toContain('resource'); + }); +}); + +describe('ResourceJobTokenScopes.show', () => { + it('should call the correct url with a resource id', async () => { + await service.show(5); + + expect(RequestHelper.get()).toHaveBeenCalledWith(service, '5/job_token_scope', undefined); + }); +}); + +describe('ResourceJobTokenScopes.edit', () => { + it('should call the correct url with a resource id and resource id', async () => { + await service.edit('5', true); + + expect(RequestHelper.patch()).toHaveBeenCalledWith(service, '5/job_token_scope', { + enabled: true, + }); + }); +}); + +describe('ResourceJobTokenScopes.showInboundAllowList', () => { + it('should call the correct url with a resource id', async () => { + await service.showInboundAllowList('5'); + + expect(RequestHelper.get()).toHaveBeenCalledWith( + service, + '5/job_token_scope/allowlist', + undefined, + ); + }); +}); + +describe('ResourceJobTokenScopes.addToInboundAllowList', () => { + it('should call the correct resource and targetResource id', async () => { + await service.addToInboundAllowList('5', 6); + + expect(RequestHelper.post()).toHaveBeenCalledWith( + service, + '5/job_token_scope/allowlist/6', + undefined, + ); + }); +}); + +describe('ResourceJobTokenScopes.removeFromInboundAllowList', () => { + it('should call the correct resource and targetResource id', async () => { + await service.removeFromInboundAllowList('5', 6); + + expect(RequestHelper.del()).toHaveBeenCalledWith( + service, + '5/job_token_scope/allowlist/6', + undefined, + ); + }); +}); diff --git a/packages/rest/src/index.ts b/packages/rest/src/index.ts index 4e84a64be..ca80ef890 100644 --- a/packages/rest/src/index.ts +++ b/packages/rest/src/index.ts @@ -96,7 +96,6 @@ export const { IssueWeightEvents, JobArtifacts, Jobs, - JobTokenScopes, MergeRequestApprovals, MergeRequestAwardEmojis, MergeRequestContextCommits, @@ -127,6 +126,7 @@ export const { ProjectInvitations, ProjectIssueBoards, ProjectIterations, + ProjectJobTokenScopes, ProjectLabels, ProjectMembers, ProjectMilestones, @@ -176,6 +176,7 @@ export const { GroupInvitations, GroupIssueBoards, GroupIterations, + GroupJobTokenScopes, GroupLabels, GroupLDAPLinks, GroupMembers, diff --git a/packages/rest/test/e2e/browser/General.ts b/packages/rest/test/e2e/browser/General.ts index c189e9d8b..38e51fb5e 100644 --- a/packages/rest/test/e2e/browser/General.ts +++ b/packages/rest/test/e2e/browser/General.ts @@ -88,7 +88,6 @@ describe('Browser Import', () => { 'IssueStateEvents', 'IssueWeightEvents', 'JobArtifacts', - 'JobTokenScopes', 'Jobs', 'MergeRequestApprovals', 'MergeRequestAwardEmojis', @@ -120,6 +119,7 @@ describe('Browser Import', () => { 'ProjectInvitations', 'ProjectIssueBoards', 'ProjectIterations', + 'ProjectJobTokenScopes', 'ProjectLabels', 'ProjectMembers', 'ProjectMilestones', @@ -170,6 +170,7 @@ describe('Browser Import', () => { 'GroupInvitations', 'GroupIssueBoards', 'GroupIterations', + 'GroupJobTokenScopes', 'GroupLabels', 'GroupLDAPLinks', 'GroupMembers', diff --git a/packages/rest/test/integration/browser/General.ts b/packages/rest/test/integration/browser/General.ts index 6cca898b3..c328131ba 100644 --- a/packages/rest/test/integration/browser/General.ts +++ b/packages/rest/test/integration/browser/General.ts @@ -89,7 +89,6 @@ describe('Browser Import', () => { 'IssueWeightEvents', 'JobArtifacts', 'Jobs', - 'JobTokenScopes', 'MergeRequestApprovals', 'MergeRequestAwardEmojis', 'MergeRequestContextCommits', @@ -120,6 +119,7 @@ describe('Browser Import', () => { 'ProjectInvitations', 'ProjectIssueBoards', 'ProjectIterations', + 'ProjectJobTokenScopes', 'ProjectLabels', 'ProjectMembers', 'ProjectMilestones', @@ -170,6 +170,7 @@ describe('Browser Import', () => { 'GroupInvitations', 'GroupIssueBoards', 'GroupIterations', + 'GroupJobTokenScopes', 'GroupLabels', 'GroupLDAPLinks', 'GroupMembers',