Skip to content

Commit

Permalink
Merge pull request #2601 from opossum-tool/feat-filter-modified-prefe…
Browse files Browse the repository at this point in the history
…rred-v2

feat: filter for modified previously preferred attributions V2
  • Loading branch information
mstykow committed Mar 13, 2024
2 parents 0ef7dcc + 132fe94 commit 875f049
Show file tree
Hide file tree
Showing 27 changed files with 411 additions and 269 deletions.
6 changes: 3 additions & 3 deletions example-files/opossum_input.json

Large diffs are not rendered by default.

44 changes: 18 additions & 26 deletions src/ElectronBackend/input/__tests__/importFromFile.test.ts
Expand Up @@ -55,6 +55,7 @@ const mainWindow = {
setTitle: jest.fn(),
} as unknown as BrowserWindow;

const source = faker.opossum.source();
const inputFileContent: ParsedOpossumInputFile = {
metadata: {
...EMPTY_PROJECT_METADATA,
Expand All @@ -66,10 +67,7 @@ const inputFileContent: ParsedOpossumInputFile = {
},
externalAttributions: {
[externalAttributionUuid]: {
source: {
name: 'REUSER:HHC',
documentConfidence: 13,
},
source,
packageName: 'my app',
packageVersion: '1.2.3',
packageNamespace: 'org.apache.xmlgraphics',
Expand Down Expand Up @@ -116,10 +114,7 @@ const expectedFileContent: ParsedFileContent = {
externalAttributions: {
attributions: {
[externalAttributionUuid]: {
source: {
name: 'REUSER:HHC',
documentConfidence: 13,
},
source,
packageName: 'my app',
packageVersion: '1.2.3',
packageNamespace: 'org.apache.xmlgraphics',
Expand All @@ -134,6 +129,9 @@ const expectedFileContent: ParsedFileContent = {
preferredOverOriginIds: ['test-id'],
wasPreferred: true,
id: externalAttributionUuid,
originalAttributionSource: source,
originalAttributionId: externalAttributionUuid,
originalAttributionWasPreferred: true,
},
},
resourcesToAttributions: {
Expand Down Expand Up @@ -356,6 +354,7 @@ describe('Test of loading function', () => {
'loads file and parses json successfully, ' +
'attribution file and preSelected attributions',
async () => {
const source = faker.opossum.source();
const inputFileContentWithPreselectedAttribution: ParsedOpossumInputFile =
{
metadata: EMPTY_PROJECT_METADATA,
Expand All @@ -364,10 +363,7 @@ describe('Test of loading function', () => {
},
externalAttributions: {
[externalAttributionUuid]: {
source: {
name: 'REUSER:HHC',
documentConfidence: 13,
},
source,
packageName: 'my app',
packageVersion: '1.2.3',
copyright: '(c) first party',
Expand Down Expand Up @@ -443,10 +439,7 @@ describe('Test of loading function', () => {
externalAttributions: {
attributions: {
[externalAttributionUuid]: {
source: {
name: 'REUSER:HHC',
documentConfidence: 13,
},
source,
packageName: 'my app',
packageVersion: '1.2.3',
copyright: '(c) first party',
Expand All @@ -456,6 +449,9 @@ describe('Test of loading function', () => {
preferred: true,
preferredOverOriginIds: ['test-id'],
id: externalAttributionUuid,
originalAttributionSource: source,
originalAttributionId: externalAttributionUuid,
originalAttributionWasPreferred: undefined,
},
},
resourcesToAttributions: {
Expand Down Expand Up @@ -539,15 +535,12 @@ describe('Test of loading function', () => {
});

it('loads file and parses json successfully, origin Ids and original source', async () => {
const source = faker.opossum.source();
const inputFileContentWithOriginIds: ParsedOpossumInputFile = {
...inputFileContent,
externalAttributions: {
uuid: {
source: faker.opossum.source({
name: 'MERGER',
documentConfidence: 13,
additionalName: 'Original Source',
}),
source,
packageName: 'react',
originIds: ['abc', 'def'],
},
Expand All @@ -570,14 +563,13 @@ describe('Test of loading function', () => {
externalAttributions: {
attributions: {
uuid: {
source: faker.opossum.source({
name: 'MERGER',
documentConfidence: 13,
additionalName: 'Original Source',
}),
source,
packageName: 'react',
originIds: ['abc', 'def'],
id: 'uuid',
originalAttributionId: 'uuid',
originalAttributionSource: source,
originalAttributionWasPreferred: undefined,
},
},
resourcesToAttributions: {
Expand Down
152 changes: 97 additions & 55 deletions src/ElectronBackend/input/__tests__/parseInputData.test.ts
Expand Up @@ -35,16 +35,16 @@ describe('deserializeAttributions', () => {
followUp: 'FOLLOW_UP',
},
};
const expectedAttributions: Attributions = {

expect(deserializeAttributions(rawAttributions)).toEqual<Attributions>({
id: {
id: 'id',
followUp: true,
originalAttributionId: 'id',
originalAttributionSource: undefined,
originalAttributionWasPreferred: undefined,
},
};

expect(deserializeAttributions(rawAttributions)).toEqual(
expectedAttributions,
);
});
});

it('removes unknown strings from follow-up', () => {
Expand All @@ -53,13 +53,15 @@ describe('deserializeAttributions', () => {
followUp: 'UNKNOWN_STRING' as 'FOLLOW_UP',
},
};
const expectedAttributions: Attributions = {
id: { id: 'id' },
};

expect(deserializeAttributions(rawAttributions)).toEqual(
expectedAttributions,
);
expect(deserializeAttributions(rawAttributions)).toEqual<Attributions>({
id: {
id: 'id',
originalAttributionId: 'id',
originalAttributionSource: undefined,
originalAttributionWasPreferred: undefined,
},
});
});

it('leaves non-empty comment unchanged', () => {
Expand All @@ -68,16 +70,16 @@ describe('deserializeAttributions', () => {
comment: 'Test comment',
},
};
const expectedAttributions: Attributions = {

expect(deserializeAttributions(rawAttributions)).toEqual<Attributions>({
id: {
id: 'id',
comment: 'Test comment',
originalAttributionId: 'id',
originalAttributionSource: undefined,
originalAttributionWasPreferred: undefined,
},
};

expect(deserializeAttributions(rawAttributions)).toEqual(
expectedAttributions,
);
});
});

it('removes empty comment', () => {
Expand All @@ -86,13 +88,15 @@ describe('deserializeAttributions', () => {
comment: '',
},
};
const expectedAttributions: Attributions = {
id: { id: 'id' },
};

expect(deserializeAttributions(rawAttributions)).toEqual(
expectedAttributions,
);
expect(deserializeAttributions(rawAttributions)).toEqual<Attributions>({
id: {
id: 'id',
originalAttributionId: 'id',
originalAttributionSource: undefined,
originalAttributionWasPreferred: undefined,
},
});
});

it('leaves criticality unchanged', () => {
Expand All @@ -101,16 +105,16 @@ describe('deserializeAttributions', () => {
criticality: 'high' as Criticality,
},
};
const expectedAttributions: Attributions = {

expect(deserializeAttributions(rawAttributions)).toEqual<Attributions>({
id: {
id: 'id',
criticality: Criticality.High,
originalAttributionId: 'id',
originalAttributionSource: undefined,
originalAttributionWasPreferred: undefined,
},
};

expect(deserializeAttributions(rawAttributions)).toEqual(
expectedAttributions,
);
});
});

it('removes invalid criticality', () => {
Expand All @@ -119,68 +123,106 @@ describe('deserializeAttributions', () => {
criticality: 'invalid value' as Criticality,
},
};
const expectedAttributions: Attributions = {
id: { id: 'id' },
};

expect(deserializeAttributions(rawAttributions)).toEqual(
expectedAttributions,
);
expect(deserializeAttributions(rawAttributions)).toEqual<Attributions>({
id: {
id: 'id',
originalAttributionId: 'id',
originalAttributionSource: undefined,
originalAttributionWasPreferred: undefined,
},
});
});

it('merges originIds and originId if both exist', () => {
const testRawAttributions: RawAttributions = {
const rawAttributions: RawAttributions = {
uuid: {
originId: 'abc',
originIds: ['def', 'ghi'],
},
};
const expectedParsedRawAttributions: Attributions = {

expect(deserializeAttributions(rawAttributions)).toEqual({
uuid: {
originIds: ['def', 'ghi', 'abc'],
id: 'uuid',
originalAttributionId: 'uuid',
originalAttributionSource: undefined,
originalAttributionWasPreferred: undefined,
},
};

expect(deserializeAttributions(testRawAttributions)).toEqual(
expectedParsedRawAttributions,
);
});
});

it('creates originIds and writes originId into it if originIds does not exist initially', () => {
const testRawAttributions: RawAttributions = {
const rawAttributions: RawAttributions = {
uuid: {
originId: 'abc',
},
};
const expectedParsedRawAttributions: Attributions = {

expect(deserializeAttributions(rawAttributions)).toEqual<Attributions>({
uuid: {
originIds: ['abc'],
id: 'uuid',
originalAttributionId: 'uuid',
originalAttributionSource: undefined,
originalAttributionWasPreferred: undefined,
},
};

expect(deserializeAttributions(testRawAttributions)).toEqual(
expectedParsedRawAttributions,
);
});
});

it('leaves originIds as it is if originId does not exist', () => {
const testRawAttributions: RawAttributions = {
const rawAttributions: RawAttributions = {
uuid: {
originIds: ['abc', 'cde'],
},
};
const expectedParsedRawAttributions: Attributions = {

expect(deserializeAttributions(rawAttributions)).toEqual<Attributions>({
uuid: {
originIds: ['abc', 'cde'],
id: 'uuid',
originalAttributionId: 'uuid',
originalAttributionSource: undefined,
originalAttributionWasPreferred: undefined,
},
});
});

it('writes original attribution properties correctly', () => {
const attributionId = faker.string.uuid();
const originalAttributionId = faker.string.uuid();
const originId = faker.string.uuid();
const rawAttributions: RawAttributions = {
[attributionId]: {
packageName: faker.word.noun(),
originIds: [originId],
},
};
const originalAttributions: Attributions = {
[originalAttributionId]: {
packageName: faker.word.noun(),
wasPreferred: true,
originIds: [originId, faker.string.uuid()],
source: faker.opossum.source(),
id: originalAttributionId,
},
};

expect(deserializeAttributions(testRawAttributions)).toEqual(
expectedParsedRawAttributions,
);
expect(
deserializeAttributions(rawAttributions, originalAttributions),
).toEqual<Attributions>({
[attributionId]: {
packageName: rawAttributions[attributionId].packageName,
originIds: [originId],
originalAttributionId,
originalAttributionSource:
originalAttributions[originalAttributionId].source,
originalAttributionWasPreferred:
originalAttributions[originalAttributionId].wasPreferred,
id: attributionId,
},
});
});
});

Expand Down
1 change: 1 addition & 0 deletions src/ElectronBackend/input/importFromFile.ts
Expand Up @@ -159,6 +159,7 @@ export async function loadInputAndOutputFromFilePath(
logger.info('Deserializing attributions');
const manualAttributions = deserializeAttributions(
parsedOutputData.manualAttributions,
externalAttributions,
);

logger.info('Sending data to user interface');
Expand Down

0 comments on commit 875f049

Please sign in to comment.