more refactoring for getDeniedChanges

This commit is contained in:
Brandon Teng
2024-04-04 15:18:51 -05:00
parent 7cebd9d64d
commit a323510dae
3 changed files with 36 additions and 60 deletions

View File

@@ -1,11 +1,7 @@
import {expect, jest, test} from '@jest/globals'
import {Change, Changes} from '../src/schemas'
import {
createMavenTestChange,
createPipTestChange,
createRubyTestChange,
createTestChange
} from './fixtures/create-test-change'
import {createTestChange} from './fixtures/create-test-change'
import {getDeniedChanges} from '../src/deny'
jest.mock('@actions/core')
@@ -19,7 +15,6 @@ const mockOctokit = {
}
}
let getDeniedChanges: Function
let npmChange: Change
let rubyChange: Change
let pipChange: Change
@@ -43,22 +38,18 @@ beforeEach(async () => {
// true for BSD, false for all others
return jest.fn((license: string, _: string): boolean => license === 'BSD')
})
// eslint-disable-next-line @typescript-eslint/no-require-imports
;({getDeniedChanges} = require('../src/deny'))
npmChange = createTestChange()
rubyChange = createRubyTestChange()
pipChange = createPipTestChange()
mvnChange = createMavenTestChange()
npmChange = createTestChange({ecosystem: 'npm'})
rubyChange = createTestChange({ecosystem: 'rubygems'})
pipChange = createTestChange({ecosystem: 'pip'})
mvnChange = createTestChange({ecosystem: 'maven'})
})
test('denies packages from the deny packages list', async () => {
const changes: Changes = [npmChange, rubyChange]
const deniedChanges = await getDeniedChanges(
changes,
['pkg:gem/actionsomething@3.2.0'],
[]
)
const deniedChanges = await getDeniedChanges(changes, [
'pkg:gem/actionsomething@3.2.0'
])
expect(deniedChanges[0]).toBe(rubyChange)
expect(deniedChanges.length).toEqual(1)
@@ -67,11 +58,9 @@ test('denies packages from the deny packages list', async () => {
test('denies packages only for the specified version from deny packages list', async () => {
const packageWithDifferentVersion = 'pkg:npm/lodash@1.2.3'
const changes: Changes = [npmChange]
const deniedChanges = await getDeniedChanges(
changes,
[packageWithDifferentVersion],
[]
)
const deniedChanges = await getDeniedChanges(changes, [
packageWithDifferentVersion
])
expect(deniedChanges.length).toEqual(0)
})
@@ -83,11 +72,7 @@ test('if no specified version from deny packages list, it will treat package as
createTestChange({name: 'lodash', version: '7.8.9'})
]
const denyAllLodashVersions = 'pkg:npm/lodash'
const deniedChanges = await getDeniedChanges(
changes,
[denyAllLodashVersions],
[]
)
const deniedChanges = await getDeniedChanges(changes, [denyAllLodashVersions])
expect(deniedChanges.length).toEqual(3)
})

View File

@@ -101,29 +101,19 @@ const defaultMavenChange: Change = {
]
}
const createTestChange = (overwrites: Partial<Change> = {}): Change => ({
...defaultNpmChange,
...overwrites
})
const createRubyTestChange = (overwrites: Partial<Change> = {}): Change => ({
...defaultRubyChange,
...overwrites
})
const createPipTestChange = (overwrites: Partial<Change> = {}): Change => ({
...defaultPipChange,
...overwrites
})
const createMavenTestChange = (overwrites: Partial<Change> = {}): Change => ({
...defaultMavenChange,
...overwrites
})
export {
createTestChange,
createRubyTestChange,
createPipTestChange,
createMavenTestChange
const ecosystemToDefaultChange: {[key: string]: Change} = {
npm: defaultNpmChange,
rubygems: defaultRubyChange,
pip: defaultPipChange,
maven: defaultMavenChange
}
const createTestChange = (overwrites: Partial<Change> = {}): Change => {
const ecosystem = overwrites.ecosystem || 'npm'
return {
...ecosystemToDefaultChange[ecosystem],
...overwrites
}
}
export {createTestChange}

View File

@@ -3,21 +3,22 @@ import * as core from '@actions/core'
export async function getDeniedChanges(
changes: Change[],
deniedPackages: string[],
deniedGroups: string[]
deniedPackages: string[] = [],
deniedGroups: string[] = []
): Promise<Change[]> {
const changesDenied: Change[] = []
let hasDeniedPackage = false
for (const change of changes) {
change.name = change.name.toLowerCase()
const [name, version] = change.package_url.toLowerCase().split('@')
const [packageName, packageVersion] = change.package_url
.toLowerCase()
.split('@')
for (const denied of deniedPackages) {
const [deniedName, deniedVersion] = denied.toLowerCase().split('@')
if (
(!deniedVersion || version === deniedVersion) &&
name === deniedName
(!deniedVersion || packageVersion === deniedVersion) &&
packageName === deniedName
) {
changesDenied.push(change)
hasDeniedPackage = true
@@ -25,7 +26,7 @@ export async function getDeniedChanges(
}
for (const denied of deniedGroups) {
if (name.startsWith(denied.toLowerCase())) {
if (packageName.startsWith(denied.toLowerCase())) {
changesDenied.push(change)
hasDeniedPackage = true
}