Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
150 changes: 75 additions & 75 deletions src/__tests__/__snapshots__/construct-hub.test.ts.snap

Large diffs are not rendered by default.

107 changes: 78 additions & 29 deletions src/__tests__/backend/ingestion/framework-detection.test.ts
Original file line number Diff line number Diff line change
@@ -1,61 +1,110 @@
import { Assembly } from '@jsii/spec';
import { ConstructFramework, ConstructFrameworkName, detectConstructFramework } from '../../../backend/ingestion/framework-detection.lambda-shared';
import { ConstructFramework, ConstructFrameworkName, detectConstructFrameworks } from '../../../backend/ingestion/framework-detection.lambda-shared';

describe('AWS CDK frameworks', () => {
expect(frameworkForDeps(['@aws-cdk/aws-s3@1.134.0'])).toEqual({ name: ConstructFrameworkName.AWS_CDK, majorVersion: 1 });
expect(frameworkForDeps(['@aws-cdk/aws-s3@1.134.0', '@aws-cdk/aws-lambda@1.134.0'])).toEqual({ name: ConstructFrameworkName.AWS_CDK, majorVersion: 1 });
expect(frameworkForDeps(['@aws-cdk/aws-s3@1.134.0', '@aws-cdk/aws-lambda@1.135.0'])).toEqual({ name: ConstructFrameworkName.AWS_CDK, majorVersion: 1 });
expect(frameworkForDeps(['@aws-cdk/aws-s3@1.134.0']))
.toEqual([{ name: ConstructFrameworkName.AWS_CDK, majorVersion: 1 }]);

expect(frameworkForDeps(['@aws-cdk/aws-s3@1.134.0', '@aws-cdk/aws-lambda@1.134.0']))
.toEqual([{ name: ConstructFrameworkName.AWS_CDK, majorVersion: 1 }]);

expect(frameworkForDeps(['@aws-cdk/aws-s3@1.134.0', '@aws-cdk/aws-lambda@1.135.0']))
.toEqual([{ name: ConstructFrameworkName.AWS_CDK, majorVersion: 1 }]);

it('classifies no major version if versions are mixed', () => {
expect(frameworkForDeps(['@aws-cdk/aws-s3@1.134.0', '@aws-cdk/aws-lambda@2.0.0'])).toEqual({ name: ConstructFrameworkName.AWS_CDK, majorVersion: undefined });
expect(frameworkForDeps(['@aws-cdk/aws-s3@1.134.0', '@aws-cdk/aws-lambda@2.0.0']))
.toEqual([{ name: ConstructFrameworkName.AWS_CDK, majorVersion: undefined }]);
});
Comment on lines 14 to 17
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Should it instead classify as BOTH?


it('classifies core libraries', () => {
for (const name of ['monocdk', 'aws-cdk-lib', '@aws-cdk/aws-s3']) {
it('classifies v1 libraries', () => {
for (const name of ['monocdk', '@aws-cdk/core', '@aws-cdk/aws-s3']) {
const assembly = { name, version: '1.134.0' };
expect(detectConstructFramework(assembly as Assembly)).toEqual({ name: ConstructFrameworkName.AWS_CDK, majorVersion: 1 });
expect(detectConstructFrameworks(assembly as Assembly))
.toEqual([{ name: ConstructFrameworkName.AWS_CDK, majorVersion: 1 }]);
}
});

it('classifies v2 libraries', () => {
expect(frameworkForDeps(['aws-cdk-lib@2.0.0']))
.toEqual([{ name: ConstructFrameworkName.AWS_CDK, majorVersion: 2 }]);
});

it('classifies when there are transitive dependencies without major version information', () => {
const assembly = {
name: 'mylib',
version: '1.2.3',
dependencies: {
'@aws-cdk/core': '1.123.0',
'@aws-cdk/s3': '1.123.0',
'@aws-cdk/ec2': '1.123.0',
},
dependencyClosure: {
'@aws-cdk/assets': {},
'@aws-cdk/core': {},
'@aws-cdk/s3': {},
'@aws-cdk/iam': {},
'@aws-cdk/ec2': {},
},
};
expect(detectConstructFrameworks(assembly as unknown as Assembly))
.toEqual([{ name: ConstructFrameworkName.AWS_CDK, majorVersion: 1 }]);
});
});

describe('CDK8s frameworks', () => {
expect(frameworkForDeps(['cdk8s@1.1.0'])).toEqual({ name: ConstructFrameworkName.CDK8S, majorVersion: 1 });
expect(frameworkForDeps(['cdk8s@1.1.0', 'cdk8s-plus-22@1.0.0-beta.54'])).toEqual({ name: ConstructFrameworkName.CDK8S, majorVersion: 1 });
describe('cdk8s frameworks', () => {
expect(frameworkForDeps(['cdk8s@1.1.0']))
.toEqual([{ name: ConstructFrameworkName.CDK8S, majorVersion: 1 }]);

expect(frameworkForDeps(['cdk8s@1.1.0', 'cdk8s-plus-22@1.0.0-beta.54']))
.toEqual([{ name: ConstructFrameworkName.CDK8S, majorVersion: 1 }]);
});

describe('cdktf frameworks', () => {
expect(frameworkForDeps(['cdktf@0.7.0'])).toEqual({ name: ConstructFrameworkName.CDKTF, majorVersion: 0 });
expect(frameworkForDeps(['cdktf@0.7.0', '@cdktf/provider-aws@0.1.0'])).toEqual({ name: ConstructFrameworkName.CDKTF, majorVersion: 0 });
expect(frameworkForDeps(['cdktf@0.7.0']))
.toEqual([{ name: ConstructFrameworkName.CDKTF, majorVersion: 0 }]);

it('ignores cdktf provider versions', () => {
expect(frameworkForDeps(['cdktf@0.7.0', '@cdktf/provider-aws@2.0.0'])).toEqual({ name: ConstructFrameworkName.CDKTF, majorVersion: 0 });
});

it('classifies cdktf', () => {
const assembly = { name: 'cdktf', version: '0.7.0' };
expect(detectConstructFramework(assembly as Assembly)).toEqual({ name: ConstructFrameworkName.CDKTF, majorVersion: 0 });
});
expect(frameworkForDeps(['cdktf@0.7.0', '@cdktf/provider-aws@0.1.0']))
.toEqual([{ name: ConstructFrameworkName.CDKTF, majorVersion: 0 }]);

it('never classifies @cdktf/ as ambiguous', () => {
const mixedAssembly = assemblyWithDeps(['cdktf@0.7.0', 'aws-cdk-lib@2.0.0-rc.17'], '@cdktf/aws-cdk');
expect(detectConstructFramework(mixedAssembly)).toEqual({ name: ConstructFrameworkName.CDKTF, majorVersion: 0 });
it('ignores cdktf provider versions', () => {
expect(frameworkForDeps(['cdktf@0.7.0', '@cdktf/provider-aws@2.0.0']))
.toEqual([{ name: ConstructFrameworkName.CDKTF, majorVersion: 0 }]);
});
});

it('classifies non-frameworks', () => {
const assembly = { name: 'constructs', version: '10.0.0' };
expect(detectConstructFramework(assembly as Assembly)).toEqual(undefined);
expect(detectConstructFrameworks(assembly as Assembly)).toEqual([]);
});

it('classifies mixed frameworks', () => {
expect(frameworkForDeps(['@aws-cdk/aws-s3@1.134.0', 'cdk8s@1.1.0'])).toEqual(undefined);
expect(frameworkForDeps(['@aws-cdk/aws-s3@1.134.0', 'cdk8s@1.1.0']))
.toEqual([
{ name: ConstructFrameworkName.AWS_CDK, majorVersion: 1 },
{ name: ConstructFrameworkName.CDK8S, majorVersion: 1 },
]);

expect(frameworkForDeps(['cdktf@0.7.0', 'aws-cdk-lib@2.0.0-rc.17']))
.toEqual([
{ name: ConstructFrameworkName.CDKTF, majorVersion: 0 },
{ name: ConstructFrameworkName.AWS_CDK, majorVersion: 2 },
]);

// wow all three!!
expect(frameworkForDeps(['cdktf@0.7.0', 'aws-cdk-lib@2.0.0-rc.17', 'cdk8s@1.1.0']))
.toEqual([
{ name: ConstructFrameworkName.CDKTF, majorVersion: 0 },
{ name: ConstructFrameworkName.AWS_CDK, majorVersion: 2 },
{ name: ConstructFrameworkName.CDK8S, majorVersion: 1 },
]);
});

function frameworkForDeps(deps: string[]): ConstructFramework | undefined {
return detectConstructFramework(assemblyWithDeps(deps));
function frameworkForDeps(deps: string[]): ConstructFramework[] {
return detectConstructFrameworks(assemblyWithDeps({ deps }));
}

function assemblyWithDeps(deps: string[], name?: string): Assembly {
function assemblyWithDeps(options: { deps: string[]; name?: string }): Assembly {
const { deps, name } = options;
// Split on the @ that is not at the beginning of the string
const depVersions: string[][] = deps.map((dep) => dep.split(/(?!^)@/));
const assembly: Partial<Assembly> = {
Expand Down
16 changes: 12 additions & 4 deletions src/__tests__/backend/ingestion/ingestion.lambda.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -142,7 +142,12 @@ test('basic happy case', async () => {
break;
case metadataKey:
expect(req.ContentType).toBe('application/json');
expect(Buffer.from(req.Body! as any)).toEqual(Buffer.from(JSON.stringify({ date: time, packageLinks: {}, packageTags: [] })));
expect(Buffer.from(req.Body! as any)).toEqual(Buffer.from(JSON.stringify({
constructFrameworks: [],
date: time,
packageLinks: {},
packageTags: [],
})));
mockMetadataCreated = true;
break;
case packageKey:
Expand Down Expand Up @@ -302,6 +307,7 @@ test('basic happy case with license file', async () => {
expect(req.ContentType).toBe('application/json');
expect(Buffer.from(req.Body! as any))
.toEqual(Buffer.from(JSON.stringify({
constructFrameworks: [],
date: time,
licenseText: fakeLicense,
packageLinks: {},
Expand Down Expand Up @@ -490,6 +496,7 @@ test('basic happy case with custom package links', async () => {
case metadataKey:
expect(req.ContentType).toBe('application/json');
expect(Buffer.from(req.Body! as any)).toEqual(Buffer.from(JSON.stringify({
constructFrameworks: [],
date: time,
packageLinks: {
PackageLinkKey: packageLinkValue,
Expand Down Expand Up @@ -699,6 +706,7 @@ test('basic happy case with custom tags', async () => {
case metadataKey:
expect(req.ContentType).toBe('application/json');
expect(Buffer.from(req.Body! as any)).toEqual(Buffer.from(JSON.stringify({
constructFrameworks: [],
date: time,
packageLinks: {},
// only includes true tags
Expand Down Expand Up @@ -865,7 +873,7 @@ for (const [frameworkName, frameworkPackage] of [['aws-cdk', '@aws-cdk/core'], [
case metadataKey:
expect(req.ContentType).toBe('application/json');
expect(JSON.parse(req.Body!.toString('utf-8'))).toEqual({
constructFramework: { name: frameworkName, majorVersion: 1337 },
constructFrameworks: [{ name: frameworkName, majorVersion: 1337 }],
date: time,
packageLinks: {},
packageTags: [],
Expand Down Expand Up @@ -1025,7 +1033,7 @@ for (const [frameworkName, frameworkPackage] of [['aws-cdk', '@aws-cdk/core'], [
case metadataKey:
expect(req.ContentType).toBe('application/json');
expect(JSON.parse(req.Body!.toString('utf-8'))).toEqual({
constructFramework: { name: frameworkName, majorVersion: 42 },
constructFrameworks: [{ name: frameworkName, majorVersion: 42 }],
date: time,
packageLinks: {},
packageTags: [],
Expand Down Expand Up @@ -1191,7 +1199,7 @@ for (const [frameworkName, frameworkPackage] of [['aws-cdk', '@aws-cdk/core'], [
case metadataKey:
expect(req.ContentType).toBe('application/json');
expect(JSON.parse(req.Body!.toString('utf-8'))).toEqual({
constructFramework: { name: frameworkName }, // No major versio here (intentional)
constructFrameworks: [{ name: frameworkName }], // No major version here (intentional)
date: time,
packageLinks: {},
packageTags: [],
Expand Down
18 changes: 9 additions & 9 deletions src/__tests__/devapp/__snapshots__/snapshot.test.ts.snap

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Loading