@sitblueprint/website-construct 0.1.5 → 0.1.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +83 -0
- package/docs/CHANGELOG.md +20 -0
- package/lambda/index.d.ts +11 -0
- package/lambda/index.js +238 -0
- package/lambda/index.ts +335 -0
- package/lib/index.d.ts +39 -0
- package/lib/index.js +139 -2
- package/lib/index.ts +214 -0
- package/package.json +3 -3
- package/test/website-construct.test.js +127 -1
- package/test/website-construct.test.ts +140 -0
|
@@ -420,3 +420,143 @@ describe("Website", () => {
|
|
|
420
420
|
});
|
|
421
421
|
});
|
|
422
422
|
});
|
|
423
|
+
|
|
424
|
+
describe("Preview config on Website", () => {
|
|
425
|
+
let app: cdk.App;
|
|
426
|
+
let stack: cdk.Stack;
|
|
427
|
+
|
|
428
|
+
beforeEach(() => {
|
|
429
|
+
app = new cdk.App();
|
|
430
|
+
stack = new cdk.Stack(app, "PreviewTestStack", {
|
|
431
|
+
env: { account: "123456789012", region: "us-east-1" },
|
|
432
|
+
});
|
|
433
|
+
});
|
|
434
|
+
|
|
435
|
+
test("creates two preview buckets by default when previewConfig is enabled", () => {
|
|
436
|
+
const website = new Website(stack, "PreviewEnabledWebsite", {
|
|
437
|
+
bucketName: "website-bucket",
|
|
438
|
+
indexFile: "index.html",
|
|
439
|
+
errorFile: "error.html",
|
|
440
|
+
previewConfig: {
|
|
441
|
+
bucketPrefix: "preview-bucket",
|
|
442
|
+
},
|
|
443
|
+
});
|
|
444
|
+
|
|
445
|
+
const template = Template.fromStack(stack);
|
|
446
|
+
template.resourceCountIs("AWS::S3::Bucket", 3);
|
|
447
|
+
expect(website.previewEnvironment).toBeDefined();
|
|
448
|
+
});
|
|
449
|
+
|
|
450
|
+
test("creates requested number of preview buckets from previewConfig", () => {
|
|
451
|
+
new Website(stack, "PreviewEnabledWebsite", {
|
|
452
|
+
bucketName: "website-bucket",
|
|
453
|
+
indexFile: "index.html",
|
|
454
|
+
errorFile: "error.html",
|
|
455
|
+
previewConfig: {
|
|
456
|
+
bucketPrefix: "preview-bucket",
|
|
457
|
+
bucketCount: 3,
|
|
458
|
+
},
|
|
459
|
+
});
|
|
460
|
+
|
|
461
|
+
const template = Template.fromStack(stack);
|
|
462
|
+
template.resourceCountIs("AWS::S3::Bucket", 4);
|
|
463
|
+
});
|
|
464
|
+
|
|
465
|
+
test("reuses website index and error files for preview buckets", () => {
|
|
466
|
+
new Website(stack, "PreviewEnabledWebsite", {
|
|
467
|
+
bucketName: "website-bucket",
|
|
468
|
+
indexFile: "app.html",
|
|
469
|
+
errorFile: "fallback.html",
|
|
470
|
+
previewConfig: {
|
|
471
|
+
bucketPrefix: "preview-bucket",
|
|
472
|
+
},
|
|
473
|
+
});
|
|
474
|
+
|
|
475
|
+
const template = Template.fromStack(stack);
|
|
476
|
+
template.hasResourceProperties("AWS::S3::Bucket", {
|
|
477
|
+
BucketName: "preview-bucket-0",
|
|
478
|
+
WebsiteConfiguration: {
|
|
479
|
+
IndexDocument: "app.html",
|
|
480
|
+
ErrorDocument: "fallback.html",
|
|
481
|
+
},
|
|
482
|
+
});
|
|
483
|
+
template.hasResourceProperties("AWS::S3::Bucket", {
|
|
484
|
+
BucketName: "preview-bucket-1",
|
|
485
|
+
WebsiteConfiguration: {
|
|
486
|
+
IndexDocument: "app.html",
|
|
487
|
+
ErrorDocument: "fallback.html",
|
|
488
|
+
},
|
|
489
|
+
});
|
|
490
|
+
});
|
|
491
|
+
|
|
492
|
+
test("creates lease table with repo-pr lookup index when preview is enabled", () => {
|
|
493
|
+
new Website(stack, "PreviewEnabledWebsite", {
|
|
494
|
+
bucketName: "website-bucket",
|
|
495
|
+
indexFile: "index.html",
|
|
496
|
+
errorFile: "error.html",
|
|
497
|
+
previewConfig: {
|
|
498
|
+
bucketPrefix: "preview-bucket",
|
|
499
|
+
},
|
|
500
|
+
});
|
|
501
|
+
|
|
502
|
+
const template = Template.fromStack(stack);
|
|
503
|
+
template.hasResourceProperties("AWS::DynamoDB::Table", {
|
|
504
|
+
KeySchema: [
|
|
505
|
+
{
|
|
506
|
+
AttributeName: "slotId",
|
|
507
|
+
KeyType: "HASH",
|
|
508
|
+
},
|
|
509
|
+
],
|
|
510
|
+
GlobalSecondaryIndexes: [
|
|
511
|
+
{
|
|
512
|
+
IndexName: "RepoPrKeyIndex",
|
|
513
|
+
KeySchema: [
|
|
514
|
+
{
|
|
515
|
+
AttributeName: "repoPrKey",
|
|
516
|
+
KeyType: "HASH",
|
|
517
|
+
},
|
|
518
|
+
],
|
|
519
|
+
Projection: {
|
|
520
|
+
ProjectionType: "ALL",
|
|
521
|
+
},
|
|
522
|
+
},
|
|
523
|
+
],
|
|
524
|
+
});
|
|
525
|
+
});
|
|
526
|
+
|
|
527
|
+
test("creates lease API routes when preview is enabled", () => {
|
|
528
|
+
new Website(stack, "PreviewEnabledWebsite", {
|
|
529
|
+
bucketName: "website-bucket",
|
|
530
|
+
indexFile: "index.html",
|
|
531
|
+
errorFile: "error.html",
|
|
532
|
+
previewConfig: {
|
|
533
|
+
bucketPrefix: "preview-bucket",
|
|
534
|
+
},
|
|
535
|
+
});
|
|
536
|
+
|
|
537
|
+
const template = Template.fromStack(stack);
|
|
538
|
+
template.hasResourceProperties("AWS::ApiGateway::Resource", {
|
|
539
|
+
PathPart: "claim",
|
|
540
|
+
});
|
|
541
|
+
template.hasResourceProperties("AWS::ApiGateway::Resource", {
|
|
542
|
+
PathPart: "heartbeat",
|
|
543
|
+
});
|
|
544
|
+
template.hasResourceProperties("AWS::ApiGateway::Resource", {
|
|
545
|
+
PathPart: "release",
|
|
546
|
+
});
|
|
547
|
+
template.resourceCountIs("AWS::ApiGateway::Method", 3);
|
|
548
|
+
});
|
|
549
|
+
|
|
550
|
+
test("does not create preview resources when previewConfig is omitted", () => {
|
|
551
|
+
const website = new Website(stack, "WebsiteWithoutPreview", {
|
|
552
|
+
bucketName: "website-bucket",
|
|
553
|
+
indexFile: "index.html",
|
|
554
|
+
errorFile: "error.html",
|
|
555
|
+
});
|
|
556
|
+
|
|
557
|
+
const template = Template.fromStack(stack);
|
|
558
|
+
template.resourceCountIs("AWS::DynamoDB::Table", 0);
|
|
559
|
+
template.resourceCountIs("AWS::ApiGateway::RestApi", 0);
|
|
560
|
+
expect(website.previewEnvironment).toBeUndefined();
|
|
561
|
+
});
|
|
562
|
+
});
|