more refactoring for getDeniedChanges
This commit is contained in:
@@ -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)
|
||||
})
|
||||
|
||||
@@ -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}
|
||||
|
||||
15
src/deny.ts
15
src/deny.ts
@@ -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
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user