Skip to content

Commit

Permalink
Use pattern '*' when group pattern is not specified in config (#1535)
Browse files Browse the repository at this point in the history
* Use '*' if group pattern is not specified; filter out null dependency groups

* Guard against empty arrays too

* Unit tests
  • Loading branch information
Rhys Koedijk authored Jan 15, 2025
1 parent 726e337 commit f531b91
Show file tree
Hide file tree
Showing 2 changed files with 115 additions and 14 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,96 @@
import { IDependabotGroup } from '../dependabot/interfaces/IDependabotConfig';
import { mapGroupsFromDependabotConfigToJobConfig } from './DependabotJobBuilder';

describe('mapGroupsFromDependabotConfigToJobConfig', () => {
it('should return undefined if dependencyGroups is undefined', () => {
const result = mapGroupsFromDependabotConfigToJobConfig(undefined);
expect(result).toBeUndefined();
});

it('should return an empty array if dependencyGroups is an empty object', () => {
const result = mapGroupsFromDependabotConfigToJobConfig({});
expect(result).toEqual([]);
});

it('should filter out undefined groups', () => {
const dependencyGroups: Record<string, any> = {
group1: undefined,
group2: {
patterns: ['pattern2'],
},
};

const result = mapGroupsFromDependabotConfigToJobConfig(dependencyGroups);
expect(result).toEqual([
{
name: 'group2',
rules: {
patterns: ['pattern2'],
},
},
]);
});

it('should filter out null groups', () => {
const dependencyGroups: Record<string, any> = {
group1: null,
group2: {
patterns: ['pattern2'],
},
};

const result = mapGroupsFromDependabotConfigToJobConfig(dependencyGroups);
expect(result).toEqual([
{
name: 'group2',
rules: {
patterns: ['pattern2'],
},
},
]);
});

it('should map dependency group properties correctly', () => {
const dependencyGroups: Record<string, IDependabotGroup> = {
group: {
'applies-to': 'all',
'patterns': ['pattern1', 'pattern2'],
'exclude-patterns': ['exclude1'],
'dependency-type': 'direct',
'update-types': ['security'],
},
};

const result = mapGroupsFromDependabotConfigToJobConfig(dependencyGroups);

expect(result).toEqual([
{
'name': 'group',
'applies-to': 'all',
'rules': {
'patterns': ['pattern1', 'pattern2'],
'exclude-patterns': ['exclude1'],
'dependency-type': 'direct',
'update-types': ['security'],
},
},
]);
});

it('should use pattern "*" if no patterns are provided', () => {
const dependencyGroups: Record<string, IDependabotGroup> = {
group: {},
};

const result = mapGroupsFromDependabotConfigToJobConfig(dependencyGroups);

expect(result).toEqual([
{
name: 'group',
rules: {
patterns: ['*'],
},
},
]);
});
});
Original file line number Diff line number Diff line change
Expand Up @@ -182,23 +182,28 @@ function mapSourceFromDependabotConfigToJobConfig(taskInputs: ISharedVariables,
};
}

function mapGroupsFromDependabotConfigToJobConfig(dependencyGroups: Record<string, IDependabotGroup>): any[] {
export function mapGroupsFromDependabotConfigToJobConfig(dependencyGroups: Record<string, IDependabotGroup>): any[] {
if (!dependencyGroups) {
return undefined;
}
return Object.keys(dependencyGroups).map((name) => {
const group = dependencyGroups[name];
return {
'name': name,
'applies-to': group['applies-to'],
'rules': {
'patterns': group['patterns'],
'exclude-patterns': group['exclude-patterns'],
'dependency-type': group['dependency-type'],
'update-types': group['update-types'],
},
};
});
return Object.keys(dependencyGroups)
.map((name) => {
const group = dependencyGroups[name];
if (!group) {
return;
}
return {
'name': name,
'applies-to': group['applies-to'],
'rules': {
'patterns': group['patterns']?.length ? group['patterns'] : ['*'],
'exclude-patterns': group['exclude-patterns'],
'dependency-type': group['dependency-type'],
'update-types': group['update-types'],
},
};
})
.filter((g) => g);
}

function mapAllowedUpdatesFromDependabotConfigToJobConfig(allowedUpdates: IDependabotAllowCondition[]): any[] {
Expand Down

0 comments on commit f531b91

Please sign in to comment.