├── .gitignore ├── CODE_OF_CONDUCT.md ├── CONTRIBUTING.md ├── LICENSE ├── README.md ├── bin └── honeycode-api-blog.js ├── cdk.json ├── doc ├── README.md └── amazon-honeycode-api-sample-architecture.png ├── lambda └── Survey │ ├── README.md │ ├── env.json │ └── index.js ├── lib └── honeycode-api-blog-stack.js ├── package-lock.json ├── package.json ├── s3-manifest.json └── test └── honeycode-api-blog.test.js /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | cdk.out -------------------------------------------------------------------------------- /CODE_OF_CONDUCT.md: -------------------------------------------------------------------------------- 1 | ## Code of Conduct 2 | This project has adopted the [Amazon Open Source Code of Conduct](https://aws.github.io/code-of-conduct). 3 | For more information see the [Code of Conduct FAQ](https://aws.github.io/code-of-conduct-faq) or contact 4 | opensource-codeofconduct@amazon.com with any additional questions or comments. 5 | -------------------------------------------------------------------------------- /CONTRIBUTING.md: -------------------------------------------------------------------------------- 1 | # Contributing Guidelines 2 | 3 | Thank you for your interest in contributing to our project. Whether it's a bug report, new feature, correction, or additional 4 | documentation, we greatly value feedback and contributions from our community. 5 | 6 | Please read through this document before submitting any issues or pull requests to ensure we have all the necessary 7 | information to effectively respond to your bug report or contribution. 8 | 9 | 10 | ## Reporting Bugs/Feature Requests 11 | 12 | We welcome you to use the GitHub issue tracker to report bugs or suggest features. 13 | 14 | When filing an issue, please check existing open, or recently closed, issues to make sure somebody else hasn't already 15 | reported the issue. Please try to include as much information as you can. Details like these are incredibly useful: 16 | 17 | * A reproducible test case or series of steps 18 | * The version of our code being used 19 | * Any modifications you've made relevant to the bug 20 | * Anything unusual about your environment or deployment 21 | 22 | 23 | ## Contributing via Pull Requests 24 | Contributions via pull requests are much appreciated. Before sending us a pull request, please ensure that: 25 | 26 | 1. You are working against the latest source on the *master* branch. 27 | 2. You check existing open, and recently merged, pull requests to make sure someone else hasn't addressed the problem already. 28 | 3. You open an issue to discuss any significant work - we would hate for your time to be wasted. 29 | 30 | To send us a pull request, please: 31 | 32 | 1. Fork the repository. 33 | 2. Modify the source; please focus on the specific change you are contributing. If you also reformat all the code, it will be hard for us to focus on your change. 34 | 3. Ensure local tests pass. 35 | 4. Commit to your fork using clear commit messages. 36 | 5. Send us a pull request, answering any default questions in the pull request interface. 37 | 6. Pay attention to any automated CI failures reported in the pull request, and stay involved in the conversation. 38 | 39 | GitHub provides additional document on [forking a repository](https://help.github.com/articles/fork-a-repo/) and 40 | [creating a pull request](https://help.github.com/articles/creating-a-pull-request/). 41 | 42 | 43 | ## Finding contributions to work on 44 | Looking at the existing issues is a great way to find something to contribute on. As our projects, by default, use the default GitHub issue labels (enhancement/bug/duplicate/help wanted/invalid/question/wontfix), looking at any 'help wanted' issues is a great place to start. 45 | 46 | 47 | ## Code of Conduct 48 | This project has adopted the [Amazon Open Source Code of Conduct](https://aws.github.io/code-of-conduct). 49 | For more information see the [Code of Conduct FAQ](https://aws.github.io/code-of-conduct-faq) or contact 50 | opensource-codeofconduct@amazon.com with any additional questions or comments. 51 | 52 | 53 | ## Security issue notifications 54 | If you discover a potential security issue in this project we ask that you notify AWS/Amazon Security via our [vulnerability reporting page](http://aws.amazon.com/security/vulnerability-reporting/). Please do **not** create a public github issue. 55 | 56 | 57 | ## Licensing 58 | 59 | See the [LICENSE](LICENSE) file for our project's licensing. We will ask you to confirm the licensing of your contribution. 60 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. 2 | 3 | Permission is hereby granted, free of charge, to any person obtaining a copy of 4 | this software and associated documentation files (the "Software"), to deal in 5 | the Software without restriction, including without limitation the rights to 6 | use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of 7 | the Software, and to permit persons to whom the Software is furnished to do so. 8 | 9 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 10 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS 11 | FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR 12 | COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER 13 | IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN 14 | CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 15 | 16 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # NOTICE 2 | 3 | This repository is archived, read-only, and no longer updated. For more information, read [the announcement on the Amazon Honeycode Community](https://honeycodecommunity.aws/t/honeycode-ending-soon-faq/28346). 4 | -------------------------------------------------------------------------------- /bin/honeycode-api-blog.js: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env node 2 | // Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. 3 | // SPDX-License-Identifier: MIT-0 4 | const cdk = require('@aws-cdk/core'); 5 | const { HoneycodeApiBlogStack } = require('../lib/honeycode-api-blog-stack'); 6 | 7 | const app = new cdk.App(); 8 | new HoneycodeApiBlogStack(app, 'HoneycodeApiBlogSurveyStack'); 9 | -------------------------------------------------------------------------------- /cdk.json: -------------------------------------------------------------------------------- 1 | { 2 | "app": "node bin/honeycode-api-blog.js", 3 | "context": { 4 | "@aws-cdk/core:enableStackNameDuplicates": "true", 5 | "aws-cdk:enableDiffNoFail": "true", 6 | "@aws-cdk/core:stackRelativeExports": "true" 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /doc/README.md: -------------------------------------------------------------------------------- 1 | # Use Amazon QuickSight to visualize data from Amazon Honeycode 2 | 3 | [Amazon Honeycode](https://www.honeycode.aws/?trk=el_a134p000006gNooAAE&trkCampaign=pac-edm-2020-honeycode-homepage&sc_channel=el&sc_campaign=pac-edm-2020-honeycode-website_links-adoption-quicksight_post_link&sc_outcome=Enterprise_Digital_Marketing&sc_geo=NAMER&sc_country=US) gives you the power to build custom apps without programming. Honeycode apps are built in four simple steps: 4 | 5 | 1. Organize your data in Tables. 6 | 2. Build apps using the drag-and-drop App Builder. 7 | 3. Use Automations to replace manual steps in your process. 8 | 4. Share your apps with your team. 9 | 10 | Honeycode lets you get started quickly by using an app template or by importing your existing data in CSV files. To export data from Honeycode, you can copy and paste from your Honeycode Tables. 11 | 12 | Honeycode can be used across many different industries and fields and still have the same effect or end goal. What if you’re a Human Resources manager who wants to synchronize employee data from an external system? Or if you’re a compliance officer for a financial firm and want to keep snapshots of your Honeycode data for data retention purposes? How about a retail store manager who wants to visualize and analyze the data you’ve collected in Honeycode using your business intelligence tool? **The answer: Amazon Honeycode API**. Honeycode APIs allow you to extend Honeycode beyond its existing capabilities but they do require IT level skills to set them up. 13 | 14 | In this post I show how to use two of Honeycode’s APIs: 15 | 16 | * **GetScreenData:** Reads data from a Honeycode app screen 17 | * **InvokeScreenAutomation:** Invokes an action defined in a Honeycode app screen such as adding, overwriting, and deleting data 18 | 19 | >Tip: If you would like to learn about and use Honeycode's Table level APIs, refer to the related sample code repo here: [Amazon Honeycode Table API Integration Sample](https://github.com/aws-samples/amazon-honeycode-table-api-integration-sample) 20 | 21 | ## Prerequisite 22 | 23 | If you don’t have one already, [create a new Honeycode account](https://www.honeycode.aws/?trk=el_a134p000006gNooAAE&trkCampaign=pac-edm-2020-honeycode-homepage&sc_channel=el&sc_campaign=pac-edm-2020-honeycode-website_links-adoption-quicksight_post_link&sc_outcome=Enterprise_Digital_Marketing&sc_geo=NAMER&sc_country=US) and log in. To get started with the Honeycode APIs, [link your Honeycode team with your AWS account](https://honeycodecommunity.aws/t/connecting-honeycode-to-an-aws-account/98) 24 | 25 | ## Overview 26 | 27 | In this post, I look at how to set up a survey app using Amazon Honeycode. I show how to write the survey results to an [Amazon S3](https://aws.amazon.com/s3/) bucket using an [AWS Lambda](https://aws.amazon.com/lambda/) function. Finally, I visualize the survey results data using [Amazon QuickSight](https://aws.amazon.com/quicksight/). Here’s an overview of the architecture: ![Honeycode Screen APIs sample architecture](amazon-honeycode-api-sample-architecture.png) 28 | 29 | ## Create a survey app using Amazon Honeycode 30 | 31 | Honeycode provides templates for a number of common use cases. Using a [Honeycode template](https://www.honeycode.aws/templates) creates a workbook with the required tables to store the data, in addition to apps and automations with the basic functionality for that use case. You can then customize the app to meet your needs. 32 | 33 | Use the [Simple Survey template](https://www.honeycode.aws/templates/simple-survey) to create a new workbook. Next, update the **Survey** table data model by adding an additional column, ‘In S3’. You use this column to indicate if a row of survey results is stored in the S3 bucket. You then use the same column to create an automation that deletes survey results older than a month, after being stored in the S3 bucket. 34 | 35 | This allows you to keep your Honeycode tables current and store historical data in cost-effective, long-term storage options, such as Amazon S3 and [Amazon S3 Glacier](https://aws.amazon.com/glacier/). Next, you create another Honeycode app, Survey API, with a user interface to read new survey results and to update existing survey results. Follow along with the instructional video to create this app in your own Honeycode account. 36 | 37 | [![Amazon Honeycode survey app](https://img.youtube.com/vi/2tvib8391OQ/0.jpg)](https://www.youtube.com/watch?v=2tvib8391OQ) 38 | 39 | ## Creating a serverless API to read and write data from Amazon Honeycode 40 | 41 | In this section, you create a serverless API. This reads the survey results from the Honeycode app using GetScreenData API and stores the data in S3. You then update the In S3 column in Honeycode with the current time by using the InvokeScreenAutomation API. 42 | 43 | This section uses the [AWS CDK](https://aws.amazon.com/cdk/) to deploy the serverless API components and policies. AWS CDK allows you to manage infrastructure using code. The application includes: 44 | 45 | * The Survey Lambda function that reads and writes the data. 46 | * The survey-results S3 bucket where the survey results are stored in CSV format. 47 | * The SurveyTimer [Amazon EventBridge](https://aws.amazon.com/eventbridge/) event that triggers the Survey Lambda function every hour. 48 | 49 | > Note: In the video below we make use of [AWS Cloud9](https://aws.amazon.com/cloud9/) to deploy our API application. AWS Cloud9 is a cloud-based integrated development environment (IDE) that lets you write, run, and debug your code with just a browser. It includes a code editor, debugger, and terminal. You can use the default configuration when creating a Cloud9 environment. If you’d like to use your own machine for deploying the API application, you can do so by following the instructions to [install and configure AWS CDK](https://docs.aws.amazon.com/cdk/latest/guide/getting_started.html#getting_started_prerequisites) and using the following commands: 50 | 51 | ``` 52 | npm install 53 | cdk bootstrap 54 | cdk deploy 55 | ``` 56 | 57 | Survey API Application source: https://github.com/aws-samples/amazon-honeycode-quicksight-integration-sample 58 | 59 | [![Amazon Honeycode API serverless application](https://img.youtube.com/vi/LV3FEG6O6H8/0.jpg)](https://www.youtube.com/watch?v=LV3FEG6O6H8) 60 | 61 | ## Create an Amazon QuickSight Dashboard to visualize the survey results 62 | 63 | In this section, you use [Amazon QuickSight](https://aws.amazon.com/quicksight/) to visualize the survey results. Amazon QuickSight is an analytics service that you can use to create datasets, perform one-time analyses, and build visualizations and dashboards. 64 | 65 | First, create a new Amazon QuickSight dataset to read the JSON files stored in the S3 bucket. Then use that dataset to create a visualization of the survey results. Finally, publish the visualization as a dashboard to be shared with other users. 66 | 67 | [![Amazon Honeycode Survey app visualization with Amazon QuickSight](https://img.youtube.com/vi/uVx-Ni7bgE4/0.jpg)](https://www.youtube.com/watch?v=uVx-Ni7bgE4) 68 | 69 | ## Cleanup 70 | 71 | You can remove the serverless API application by running the following command in the AWS Cloud9 IDE: 72 | 73 | ``` 74 | cdk destroy 75 | ``` 76 | 77 | ## Summary 78 | 79 | In this post, you created a survey application in Amazon Honeycode. You use Honeycode’s API to read and write data using a serverless API and finally you visualize the survey results using Amazon QuickSight. The possibilities in Honeycode are virtually endless. Let us know what you think in the comments! 80 | 81 | *Not yet a Honeycode customer? [Sign up for the free version here](https://www.honeycode.aws/?trk=el_a134p000006gNooAAE&trkCampaign=pac-edm-2020-honeycode-homepage&sc_channel=el&sc_campaign=pac-edm-2020-honeycode-website_links-adoption-quicksight_post_link&sc_outcome=Enterprise_Digital_Marketing&sc_geo=NAMER&sc_country=US)*. 82 | -------------------------------------------------------------------------------- /doc/amazon-honeycode-api-sample-architecture.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/amazon-honeycode-quicksight-integration-sample/08b6a4184efddeaf98638728d365553ef3027c47/doc/amazon-honeycode-api-sample-architecture.png -------------------------------------------------------------------------------- /lambda/Survey/README.md: -------------------------------------------------------------------------------- 1 | # Survey Lambda 2 | 3 | This lambda uses the Honeycode `GetScreenData` API to read survey results, saves them to S3, and finally uses `InvokeScreenAutomation` API to update the *In S3* column in survey results. 4 | 5 | Update `env.json` with the appropriate values from your Honeycode app 6 | 7 | `s3bucket` property in `env.json` is set by CDK 8 | -------------------------------------------------------------------------------- /lambda/Survey/env.json: -------------------------------------------------------------------------------- 1 | { 2 | "workbookId": "", 3 | "appId": "", 4 | "readScreenId": "", 5 | "writeScreenId": "", 6 | "screenAutomationId": "", 7 | "readListName": "Survey List", 8 | "writePicklistName": "Picklist" 9 | } -------------------------------------------------------------------------------- /lambda/Survey/index.js: -------------------------------------------------------------------------------- 1 | // Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. 2 | // SPDX-License-Identifier: MIT-0 3 | /** 4 | * Read survey results from Amazon Honeycode 5 | * Write survey results to Amazon S3 6 | */ 7 | const AWS = require('aws-sdk') 8 | const HC = new AWS.Honeycode({ region: 'us-west-2' }) 9 | const S3 = new AWS.S3() 10 | const { workbookId, appId, readScreenId, writeScreenId, screenAutomationId, s3bucket, readListName, writePicklistName } = process.env 11 | 12 | const getSurveyResults = nextToken => HC.getScreenData({ 13 | workbookId, appId, screenId: readScreenId, nextToken 14 | }).promise() 15 | 16 | const updateSurveyResults = variables => HC.invokeScreenAutomation({ 17 | workbookId, appId, screenId: writeScreenId, screenAutomationId, variables 18 | }).promise() 19 | 20 | const saveToS3 = Body => { 21 | //console.log('Writing to S3', Body) 22 | const now = new Date() 23 | //const Key = `${now.getFullYear()}/${now.getMonth() + 1}/${now.getDate()}/${now.getTime()}.csv` 24 | const Key = `${now.getFullYear()}/${now.getMonth() + 1}/${now.getDate()}/${now.getTime()}.json` 25 | return S3.putObject({ Body, Bucket: s3bucket, Key, ContentType: 'text/plain;charset=utf-8' }).promise() 26 | } 27 | 28 | //const escape = str => str.indexOf && str.indexOf(',') !== -1 ? `"${str}"` : str 29 | 30 | exports.handler = async () => { 31 | try { 32 | let nextToken 33 | const surveyResults = [] 34 | const surveyRows = [] 35 | let surveyHeaders 36 | do { 37 | //Read survey results 38 | const response = await getSurveyResults(nextToken) 39 | nextToken = response.nextToken 40 | if (surveyResults.length === 0) { 41 | //Include column headers 42 | //surveyResults.push(response.results[readListName].headers.map(header => escape(header.name)).join(',')) 43 | surveyHeaders = response.results[readListName].headers.map(header => header.name) 44 | } 45 | for (let row of response.results[readListName].rows) { 46 | const { rowId, dataItems } = row 47 | surveyRows.push(rowId) 48 | //surveyResults.push(dataItems.map(item => escape(item.formattedValue)).join(',')) 49 | surveyResults.push(dataItems.reduce((items, item, i) => { 50 | items[surveyHeaders[i]] = item.overrideFormat === 'DATE_TIME' && item.formattedValue ? new Date(item.formattedValue).toISOString() : item.formattedValue 51 | return items 52 | }, {})) 53 | } 54 | } while (nextToken) 55 | if (surveyResults.length > 0) { 56 | //Write survey result to S3 57 | //await saveToS3(surveyResults.join('\n')) 58 | await saveToS3(JSON.stringify(surveyResults, null, 2)) 59 | //Update "In S3" column in survey results 60 | for (let rowId of surveyRows) { 61 | await updateSurveyResults({ 62 | [writePicklistName]: { 63 | rawValue: rowId 64 | } 65 | }) 66 | } 67 | } 68 | const result = `Saved ${surveyResults.length} records to S3` 69 | console.log(result) 70 | return result 71 | } catch (error) { 72 | console.error(error) 73 | throw error 74 | } 75 | } 76 | -------------------------------------------------------------------------------- /lib/honeycode-api-blog-stack.js: -------------------------------------------------------------------------------- 1 | // Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. 2 | // SPDX-License-Identifier: MIT-0 3 | 4 | const cdk = require('@aws-cdk/core'); 5 | const lambda = require('@aws-cdk/aws-lambda'); 6 | const events = require('@aws-cdk/aws-events'); 7 | const targets = require('@aws-cdk/aws-events-targets'); 8 | const iam = require('@aws-cdk/aws-iam'); 9 | const s3 = require('@aws-cdk/aws-s3'); 10 | const fs = require('fs'); 11 | 12 | const environment = require('../lambda/Survey/env.json'); 13 | 14 | class HoneycodeApiBlogStack extends cdk.Stack { 15 | /** 16 | * 17 | * @param {cdk.Construct} scope 18 | * @param {string} id 19 | * @param {cdk.StackProps=} props 20 | */ 21 | constructor(scope, id, props) { 22 | super(scope, id, props); 23 | //Setup Survey Lambda function 24 | const surveyLambda = new lambda.Function(this, 'Survey', { 25 | description: 'Survey lambda reads survey results from Honeycode', 26 | code: lambda.Code.fromAsset('lambda/Survey'), 27 | handler: 'index.handler', 28 | runtime: lambda.Runtime.NODEJS_12_X, 29 | environment, 30 | timeout: cdk.Duration.minutes(3), //Give enough time for reading and updating all survey results 31 | }); 32 | //Allow lambda to access Honeycode workbook 33 | //Using a managed policy will give access to all workbooks so it is recommended to create a policy for the specific workbook/app/screen 34 | //survey.role.addManagedPolicy(iam.ManagedPolicy.fromAwsManagedPolicyName('AmazonHoneycodeWorkbookFullAccess')); 35 | const surveyReadPolicy = new iam.PolicyStatement(); 36 | surveyReadPolicy.addActions(['honeycode:GetScreenData']); 37 | surveyReadPolicy.addResources([`arn:aws:honeycode:*:*:screen:workbook/${environment.workbookId}/app/${environment.appId}/screen/${environment.readScreenId}`]); 38 | surveyLambda.role.addToPrincipalPolicy(surveyReadPolicy) 39 | const surveyWritePolicy = new iam.PolicyStatement(); 40 | surveyWritePolicy.addActions(['honeycode:InvokeScreenAutomation']); 41 | surveyWritePolicy.addResources([`arn:aws:honeycode:*:*:screen-automation:workbook/${environment.workbookId}/app/${environment.appId}/screen/${environment.writeScreenId}/automation/${environment.screenAutomationId}`]); 42 | surveyLambda.role.addToPrincipalPolicy(surveyWritePolicy) 43 | //Run Survey Lambda every hour 44 | const surveyTimer = new events.Rule(this, 'SurveyTimer', { 45 | schedule: events.Schedule.expression('rate(1 hour)') 46 | }); 47 | surveyTimer.addTarget(new targets.LambdaFunction(surveyLambda)); 48 | //Setup S3 bucket to write Survey results to 49 | const surveyBucket = new s3.Bucket(this, 'survey-results'); 50 | surveyBucket.grantWrite(surveyLambda); 51 | surveyLambda.addEnvironment('s3bucket', surveyBucket.bucketName); 52 | //Output the Survey Bucket URL 53 | new cdk.CfnOutput(this, "Survey Bucket Name", { 54 | value: surveyBucket.bucketName 55 | }); 56 | } 57 | } 58 | 59 | module.exports = { HoneycodeApiBlogStack } 60 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "honeycode-api-blog", 3 | "version": "0.1.0", 4 | "bin": { 5 | "honeycode-api-blog": "bin/honeycode-api-blog.js" 6 | }, 7 | "scripts": { 8 | "build": "echo \"The build step is not required when using JavaScript!\" && exit 0", 9 | "cdk": "cdk", 10 | "test": "jest", 11 | "zip": "zip -r src.zip * -x \"node_modules/*\" -x src.zip -x \"cdk.out/*\"" 12 | }, 13 | "devDependencies": { 14 | "@aws-cdk/assert": "^1.169.0", 15 | "@aws-cdk/aws-events-targets": "^1.169.0", 16 | "@aws-cdk/aws-s3": "^1.169.0", 17 | "@aws-cdk/aws-s3-deployment": "^1.169.0", 18 | "@aws-cdk/core": "^1.169.0", 19 | "aws-cdk": "^1.169.0", 20 | "jest": "^26.6.3" 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /s3-manifest.json: -------------------------------------------------------------------------------- 1 | { 2 | "fileLocations": [ 3 | { 4 | "URIPrefixes": [ 5 | "https://.s3.us-west-2.amazonaws.com/" 6 | ] 7 | } 8 | ], 9 | "globalUploadSettings": { 10 | "format": "JSON", 11 | "delimiter": ",", 12 | "containsHeader": "true" 13 | } 14 | } -------------------------------------------------------------------------------- /test/honeycode-api-blog.test.js: -------------------------------------------------------------------------------- 1 | // Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. 2 | // SPDX-License-Identifier: MIT-0 3 | 4 | const { expect, matchTemplate, MatchStyle } = require('@aws-cdk/assert'); 5 | const cdk = require('@aws-cdk/core'); 6 | const HoneycodeApiBlog = require('../lib/honeycode-api-blog-stack'); 7 | 8 | test('Empty Stack', () => { 9 | const app = new cdk.App(); 10 | // WHEN 11 | const stack = new HoneycodeApiBlog.HoneycodeApiBlogStack(app, 'MyTestStack'); 12 | // THEN 13 | expect(stack).to(matchTemplate({ 14 | "Resources": {} 15 | }, MatchStyle.EXACT)) 16 | }); 17 | --------------------------------------------------------------------------------