<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://izara.io/wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Mint</id>
	<title>Izara Wiki - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://izara.io/wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Mint"/>
	<link rel="alternate" type="text/html" href="https://izara.io/wiki/index.php/Special:Contributions/Mint"/>
	<updated>2026-08-25T07:41:52Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.43.0</generator>
	<entry>
		<id>https://izara.io/wiki/index.php?title=Service_-_Organization&amp;diff=4603</id>
		<title>Service - Organization</title>
		<link rel="alternate" type="text/html" href="https://izara.io/wiki/index.php?title=Service_-_Organization&amp;diff=4603"/>
		<updated>2026-08-18T03:45:58Z</updated>

		<summary type="html">&lt;p&gt;Mint: /* organization */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Overview =&lt;br /&gt;
&lt;br /&gt;
A user can have many organizations, each organization has it&#039;s independent accounting.&lt;br /&gt;
&lt;br /&gt;
= Repository =&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
= Object Schemas =&lt;br /&gt;
; Additional Information: [[Per Service Schemas]]&lt;br /&gt;
&lt;br /&gt;
== organization ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
	objectType: &amp;quot;organization&amp;quot;,&lt;br /&gt;
	canDelete: false,&lt;br /&gt;
    generatedBy: &amp;quot;userGenerated&amp;quot;,&lt;br /&gt;
	addOnDataStructure: [&lt;br /&gt;
		{&lt;br /&gt;
			type:&amp;quot;rbac&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		{&lt;br /&gt;
			type: &amp;quot;propertyValue&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		{&lt;br /&gt;
			type: &amp;quot;versionedData&amp;quot;,&lt;br /&gt;
			versionedDataLabel: &amp;quot;Detail&amp;quot;,&lt;br /&gt;
			storageResourceTag : &amp;quot;myGraph&amp;quot;,&lt;br /&gt;
			fieldNames: {&lt;br /&gt;
				&amp;quot;organizationName&amp;quot;:{&lt;br /&gt;
					type: &amp;quot;string&amp;quot;,&lt;br /&gt;
					requiredOnCreate: true,&lt;br /&gt;
					canUpdate: true,&lt;br /&gt;
					userCanUpdate: true,&lt;br /&gt;
				},&lt;br /&gt;
				&amp;quot;dailyRateCurrencyTableId&amp;quot;:{&lt;br /&gt;
					type: &amp;quot;string&amp;quot;,&lt;br /&gt;
					requiredOnCreate: true,&lt;br /&gt;
					canUpdate: true,&lt;br /&gt;
					userCanUpdate: true,&lt;br /&gt;
				},&lt;br /&gt;
			}&lt;br /&gt;
		},&lt;br /&gt;
	],&lt;br /&gt;
	storageResources: {&lt;br /&gt;
		myGraph: {&lt;br /&gt;
			storageType: &amp;quot;graph&amp;quot;,&lt;br /&gt;
			graphServerTag: &amp;quot;GraphHandler&amp;quot;&lt;br /&gt;
		}&lt;br /&gt;
    },&lt;br /&gt;
    fieldNames: {&lt;br /&gt;
		organizationId: {&lt;br /&gt;
			type: &amp;quot;string&amp;quot;,&lt;br /&gt;
			randomOnCreate: true,&lt;br /&gt;
			storageResourceTags: [&#039;myGraph&#039;]&lt;br /&gt;
		},&lt;br /&gt;
		functionalCurrency: {&lt;br /&gt;
			type: &amp;quot;currency&amp;quot;,&lt;br /&gt;
			requiredOnCreate: true,&lt;br /&gt;
			canUpdate: false,&lt;br /&gt;
			userCanUpdate: false,&lt;br /&gt;
			storageResourceTags: [&#039;myGraph&#039;]&lt;br /&gt;
		},&lt;br /&gt;
&lt;br /&gt;
      precision: {&lt;br /&gt;
        type: &amp;quot;integer&amp;quot;,&lt;br /&gt;
        randomOnCreate: false,  &lt;br /&gt;
        optionalOnCreate: true,&lt;br /&gt;
        requiredOnCreate: false, &lt;br /&gt;
        validation: {&lt;br /&gt;
          pattern: pattern&lt;br /&gt;
        },&lt;br /&gt;
        storageResourceTags: [&#039;graph&#039;],&lt;br /&gt;
      }&lt;br /&gt;
    },&lt;br /&gt;
    identifiers: [&lt;br /&gt;
		{&lt;br /&gt;
			type: &amp;quot;identifier&amp;quot;,&lt;br /&gt;
			fieldName: &amp;quot;organizationId&amp;quot;&lt;br /&gt;
		}&lt;br /&gt;
    ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Relationships ==&lt;br /&gt;
&lt;br /&gt;
=== hasOrganization ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
	hasOrganization: {&lt;br /&gt;
		storageResources: {&lt;br /&gt;
			myGraph: {&lt;br /&gt;
				storageType: &amp;quot;graph&amp;quot;,&lt;br /&gt;
				graphServerTag: &amp;quot;GraphHandler&amp;quot;			&lt;br /&gt;
			}&lt;br /&gt;
		},&lt;br /&gt;
		canChangeToRelTypes: [&lt;br /&gt;
			{&lt;br /&gt;
				serviceTag: &amp;quot;Organization&amp;quot;,&lt;br /&gt;
				relationshipTag: &amp;quot;removedOrganization&amp;quot;&lt;br /&gt;
			},&lt;br /&gt;
		],		&lt;br /&gt;
		links: [&lt;br /&gt;
			{&lt;br /&gt;
				storageResourceTags: [&amp;quot;myGraph&amp;quot;],&lt;br /&gt;
				from: {&lt;br /&gt;
					objType: {&lt;br /&gt;
						serviceTag: &amp;quot;User&amp;quot;,&lt;br /&gt;
						objectType: &amp;quot;user&amp;quot;&lt;br /&gt;
					},&lt;br /&gt;
					linkType: &amp;quot;one&amp;quot;,&lt;br /&gt;
				},&lt;br /&gt;
				to: {&lt;br /&gt;
					objType: {&lt;br /&gt;
						serviceTag: &amp;quot;Organization&amp;quot;,&lt;br /&gt;
						objectType: &amp;quot;organization&amp;quot;&lt;br /&gt;
					},&lt;br /&gt;
					linkType: &amp;quot;many&amp;quot;&lt;br /&gt;
				}&lt;br /&gt;
			},&lt;br /&gt;
		]&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== removedOrganization ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
	removedOrganization: {&lt;br /&gt;
		storageResources: {&lt;br /&gt;
			myGraph: {&lt;br /&gt;
				storageType: &amp;quot;graph&amp;quot;,&lt;br /&gt;
				graphServerTag: &amp;quot;GraphHandler&amp;quot;			&lt;br /&gt;
			}&lt;br /&gt;
		},&lt;br /&gt;
		canChangeToRelTypes: [&lt;br /&gt;
			{&lt;br /&gt;
				serviceTag: &amp;quot;Organization&amp;quot;,&lt;br /&gt;
				relationshipTag: &amp;quot;hasOrganization&amp;quot;&lt;br /&gt;
			},&lt;br /&gt;
		],		&lt;br /&gt;
		links: [&lt;br /&gt;
			{&lt;br /&gt;
				storageResourceTags: [&amp;quot;myGraph&amp;quot;],&lt;br /&gt;
				from: {&lt;br /&gt;
					objType: {&lt;br /&gt;
						serviceTag: &amp;quot;User&amp;quot;,&lt;br /&gt;
						objectType: &amp;quot;user&amp;quot;&lt;br /&gt;
					},&lt;br /&gt;
					linkType: &amp;quot;one&amp;quot;,&lt;br /&gt;
				},&lt;br /&gt;
				to: {&lt;br /&gt;
					objType: {&lt;br /&gt;
						serviceTag: &amp;quot;Organization&amp;quot;,&lt;br /&gt;
						objectType: &amp;quot;organization&amp;quot;&lt;br /&gt;
					},&lt;br /&gt;
					linkType: &amp;quot;many&amp;quot;&lt;br /&gt;
				}&lt;br /&gt;
			},&lt;br /&gt;
		]&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* links a user to the organization they manage&lt;br /&gt;
* does not convey ownership, each organization is a standalone organization that has it&#039;s own RBAC&lt;br /&gt;
* this allows for simple transfer of ownership of data&lt;br /&gt;
&lt;br /&gt;
= Addresses =&lt;br /&gt;
&lt;br /&gt;
* use same structure as users in Izara Market&lt;br /&gt;
&lt;br /&gt;
= Working documents =&lt;br /&gt;
&lt;br /&gt;
[[:Category:Working_documents - Organization| Organization]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Backend services| Organization]]&lt;/div&gt;</summary>
		<author><name>Mint</name></author>
	</entry>
	<entry>
		<id>https://izara.io/wiki/index.php?title=2025-11-20_IntegrationTest&amp;diff=4585</id>
		<title>2025-11-20 IntegrationTest</title>
		<link rel="alternate" type="text/html" href="https://izara.io/wiki/index.php?title=2025-11-20_IntegrationTest&amp;diff=4585"/>
		<updated>2026-08-17T03:25:49Z</updated>

		<summary type="html">&lt;p&gt;Mint: /* dynamoDBSeedDataTags */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Reference:&lt;br /&gt;
&lt;br /&gt;
*[[2020-10-01 - Integration Test Config - Functions|IntegrationtestConfig]]&lt;br /&gt;
*[[2020-10-01 - Integration Testing - Lambda Functions|Integrationtesting]]&lt;br /&gt;
*[[2025-02-20 - Integration Test examples|Example]]&lt;br /&gt;
&lt;br /&gt;
= File extension =&lt;br /&gt;
&lt;br /&gt;
uploadS3: &amp;quot;.json&amp;quot;&lt;br /&gt;
integrationtestConfig: &amp;quot;.js&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=TestRecord=&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JSON&amp;quot;&amp;gt;&lt;br /&gt;
[&lt;br /&gt;
  {&lt;br /&gt;
    integrationTestTag: &amp;quot;Integrationtest_xx&amp;quot;,&lt;br /&gt;
    testStartedTimestamp: 111111111, // start time&lt;br /&gt;
    bucketName: &amp;quot;integrationtest-config-us-east-2&amp;quot;,&lt;br /&gt;
    lastUpdateUniqueRequestId: &amp;quot;sssss&amp;quot;, //_izContext.uniqueRequestId protacts race coditionn dynamodb&lt;br /&gt;
    testStatus: &amp;quot;passed&amp;quot;,//failed,processing,passed&lt;br /&gt;
    testCompleteTimestamp: 1111113, // all test finish&lt;br /&gt;
    stages: [&lt;br /&gt;
      {&lt;br /&gt;
        stageConfig: {&lt;br /&gt;
          //straight copy of this stage from integration test config&lt;br /&gt;
          inputEventTag: &amp;quot;xx&amp;quot;,&lt;br /&gt;
          inputEventConfig: {//event input&lt;br /&gt;
          },&lt;br /&gt;
          outputEventTag: &amp;quot;output_xx&amp;quot;,&lt;br /&gt;
          outputEventConfig: {//event out put&lt;br /&gt;
          },&lt;br /&gt;
          resourceName: &amp;quot;ComplexfilterTestProcessComplexfilter&amp;quot;,// function name&lt;br /&gt;
          resourceType: &amp;quot;Lambda&amp;quot;, // function name&lt;br /&gt;
          serviceTag: &amp;quot;Complexfilter&amp;quot;,// (initeate sqs)&lt;br /&gt;
          snsServiceName: &amp;quot;Complexfilter&amp;quot;,// (initeate sqs)&lt;br /&gt;
          snsTopic: &amp;quot;PorcessComplexfilter_In&amp;quot;// (initeate sqs)&lt;br /&gt;
&lt;br /&gt;
        },&lt;br /&gt;
        stageStatus: &amp;quot;waiting&amp;quot;, //waiting|passed|failed,&lt;br /&gt;
        stageFinishedTimestamp: 111111111,// time that all tests finished and testRecord.stages.{stageKey}.stageStatus updated&lt;br /&gt;
        stageResults: {&lt;br /&gt;
          //results at the point of entering the resource (eg a Lambda function is invoked)&lt;br /&gt;
          inputResult: {&lt;br /&gt;
            resultTimestamp: 111111111,//{time result saved},&lt;br /&gt;
            resultStatus: &amp;quot;passed&amp;quot;,//passed|failed,&lt;br /&gt;
            requestParams: {//event input&lt;br /&gt;
            }&lt;br /&gt;
          },&lt;br /&gt;
          //results at the point of returning from the resource (eg a Lambda function returns)&lt;br /&gt;
          outputResult: {&lt;br /&gt;
            resultTimestamp: 111111111,//{time result saved},&lt;br /&gt;
            resultStatus: &amp;quot;passed&amp;quot;,//passed|failed,&lt;br /&gt;
            requestParams: {//event input&lt;br /&gt;
            }&lt;br /&gt;
          },&lt;br /&gt;
          //results at the point of invoking an external resource (eg the tested Lambda function is invoking another Lambda function)&lt;br /&gt;
          invokes: {&lt;br /&gt;
            &amp;quot;serviceName_resourceType_resourceName_inputEventTag &amp;quot;: {&lt;br /&gt;
              invokeTimestamp: 111111111,//{ time result saved },&lt;br /&gt;
              resultTimestamp: 111111112,//{ time result saved },&lt;br /&gt;
              resultStatus: &amp;quot;passed&amp;quot;,//passed | failed,&lt;br /&gt;
              invokeParams: {},//{event invoke input config }&lt;br /&gt;
              requestParams: {}// event invoke input request&lt;br /&gt;
            },&lt;br /&gt;
          },&lt;br /&gt;
          dynamodbResults: [&lt;br /&gt;
            {&lt;br /&gt;
              indexOfDynamodbOutput: 0,&lt;br /&gt;
              requestParams,&lt;br /&gt;
              resultStatus: &amp;quot;passed&amp;quot;,//&lt;br /&gt;
              resultTimestamp: 22222&lt;br /&gt;
            }]&lt;br /&gt;
&lt;br /&gt;
        },&lt;br /&gt;
        stageErrors: [&lt;br /&gt;
          //misc errors encountered&lt;br /&gt;
        ]&lt;br /&gt;
      }]&lt;br /&gt;
&lt;br /&gt;
  }&lt;br /&gt;
]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Seed Data=&lt;br /&gt;
integrationtest manager seed date 2 process&lt;br /&gt;
&lt;br /&gt;
=== Main Seed Data===&lt;br /&gt;
:Save file in s3 (in &#039;&#039;&#039;buckname&#039;&#039;&#039; :integrationtest-config-us-east-2, &#039;&#039;&#039;folder&#039;&#039;&#039;:seedData_integrationTest).For other dev use service,If a developer wants to add more for other important testing purposes.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;How to use:&#039;&#039;&#039;&lt;br /&gt;
#Add it from the s3 bucket at this point&lt;br /&gt;
#Run batch refreshSeedData [[Developer guide for making Integration Tests#Bash script|batch RefreshSeedData]]&lt;br /&gt;
&#039;&#039;&#039;Logic&#039;&#039;&#039;:Process by storage resouse (graph or dynamodb)&lt;br /&gt;
:To clean up the seed data in the table after it creates seed data form service deploy and pulls seed data from s3.&lt;br /&gt;
&lt;br /&gt;
=== Refresh Seed Data ===&lt;br /&gt;
:ProcessRefreshSeedData use seedDataTag for create data environment of &#039;&#039;&#039;test&#039;&#039;&#039; and can be refresh seeddata re-test agian.&lt;br /&gt;
:&#039;&#039;&#039;canbe share&#039;&#039;&#039; seed data for other test by seed data tag.&lt;br /&gt;
&#039;&#039;&#039;How to use:&#039;&#039;&#039;&lt;br /&gt;
:Save file in s3 (for other dav keep in floder dev name) or testConfig/seedData_config(for admin)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Folder&#039;&#039;&#039;&lt;br /&gt;
*dynamoDBSeedDataTags.json&lt;br /&gt;
*graphSeedDataTags.json&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Example&#039;&#039;&#039;&lt;br /&gt;
==== dynamoDBSeedDataTags ====&lt;br /&gt;
:If set tag in this setting integrationtest is generate seed data. in storage resource dynammodb.&lt;br /&gt;
Example&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;seedDynamodb_abc_ver2&amp;quot;: [ // seedDataTag&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;tableName&amp;quot;: &amp;quot;DelivMethodSTDTestLogicalResultsData&amp;quot;,  // servcieTag+stage+tablename&lt;br /&gt;
      &amp;quot;partitionKey&amp;quot;: &amp;quot;logicalResultId&amp;quot;,&lt;br /&gt;
      &amp;quot;sortKey&amp;quot;: &amp;quot;identifiersId&amp;quot;,&lt;br /&gt;
      &amp;quot;datas&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
          logicalResultId: {&lt;br /&gt;
            value: &amp;quot;eeeeeeeeee4&amp;quot;&lt;br /&gt;
          },&lt;br /&gt;
          identifiersId: {&lt;br /&gt;
            value: &amp;quot;lllll123456&amp;quot;&lt;br /&gt;
          },&lt;br /&gt;
          processLogicalResultExpiryTimestamp: {&lt;br /&gt;
            calcType: &amp;quot;currentTimestampAdjustment&amp;quot;, // can add other types of calculated data in future&lt;br /&gt;
            action: &amp;quot;subtract&amp;quot;, // add|subtract&lt;br /&gt;
            adjustmentInSeconds: 300  // Seconds eg 5 minite = 5*60 = 300 Seconds. or 2 day  = 2*(24*60*60) = 172800&lt;br /&gt;
          }&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
          logicalResultId: {&lt;br /&gt;
            value: &amp;quot;eeeeeeeeee4&amp;quot;&lt;br /&gt;
          },&lt;br /&gt;
          &amp;quot;identifiersId&amp;quot;: {&lt;br /&gt;
            value: &amp;quot;lllll777777&amp;quot;&lt;br /&gt;
          },&lt;br /&gt;
          processLogicalResultExpiryTimestamp: {&lt;br /&gt;
            calcType: &amp;quot;currentTimestampAdjustment&amp;quot;, // can add other types of calculated data in future&lt;br /&gt;
            action: &amp;quot;add&amp;quot;, // add|subtract&lt;br /&gt;
            adjustmentInSeconds: 172800  // Seconds eg 5 minite = 5*60 = 300 Seconds. or 2 day  = 2*(24*60*60) = 172800&lt;br /&gt;
          } &lt;br /&gt;
        }&lt;br /&gt;
      ],&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;tableName&amp;quot;: &amp;quot;MLocationsTestFloatingRelationships&amp;quot;,// servcieTag+stage+tablename&lt;br /&gt;
      &amp;quot;partitionKey&amp;quot;: &amp;quot;importBatchId&amp;quot;,&lt;br /&gt;
      &amp;quot;sortKey&amp;quot;: &amp;quot;identifierRelationshipsId&amp;quot;,&lt;br /&gt;
      &amp;quot;datas&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;importBatchId&amp;quot;:{value: &amp;quot;2-uuuuuuuuuuuuuu&amp;quot;},&lt;br /&gt;
          &amp;quot;identifierRelationshipsId&amp;quot;: {value:&amp;quot;lllll123456&amp;quot;}&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;importBatchId&amp;quot;: {value:&amp;quot;2-uuuuuuuuuuuuuu&amp;quot;},&lt;br /&gt;
          &amp;quot;identifierRelationshipsId&amp;quot;: {value:&amp;quot;lllll777777&amp;quot;}&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;importBatchId&amp;quot;: {value:&amp;quot;2-uuuuuuuuuuuuuu&amp;quot;},&lt;br /&gt;
          &amp;quot;identifierRelationshipsId&amp;quot;: {value:&amp;quot;lllll99999999&amp;quot;}&lt;br /&gt;
        }&lt;br /&gt;
      ]&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;tableName&amp;quot;: &amp;quot;MLocationsTestFindDataMain&amp;quot;,&lt;br /&gt;
      &amp;quot;partitionKey&amp;quot;: &amp;quot;findDataId&amp;quot;,&lt;br /&gt;
      &amp;quot;datas&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;findDataId&amp;quot;:{value: &amp;quot;111111&amp;quot;}&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;findDataId&amp;quot;: {value:&amp;quot;22222&amp;quot;}&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;findDataId&amp;quot;: {value:&amp;quot;333333&amp;quot;}&lt;br /&gt;
        }&lt;br /&gt;
      ]&lt;br /&gt;
    }&lt;br /&gt;
  ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== graphSeedDataTags ====&lt;br /&gt;
:If set tag in this setting integrationtest is generate seed data. in storage resource graphHanler.&lt;br /&gt;
Example&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;seedData_testTag_GG&amp;quot;: [ // seedDataTag&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;nodes&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;nodeLabels&amp;quot;: [&lt;br /&gt;
            &amp;quot;SellOfferPlan_sellOfferPlanDeliveryMethodLink&amp;quot;&lt;br /&gt;
          ],&lt;br /&gt;
          &amp;quot;objectDetail&amp;quot;: {&lt;br /&gt;
            &amp;quot;identifiers&amp;quot;: {&lt;br /&gt;
              &amp;quot;sellOfferPlanDeliveryMethodLinkId&amp;quot;: {&lt;br /&gt;
                &amp;quot;value&amp;quot;: &amp;quot;minttestrefreshSeedData_01&amp;quot;,&lt;br /&gt;
              },&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;fields&amp;quot;: {&lt;br /&gt;
              &amp;quot;productId&amp;quot;: {&lt;br /&gt;
                &amp;quot;value&amp;quot;: &amp;quot;ddddd&amp;quot;,&lt;br /&gt;
              },&lt;br /&gt;
              &amp;quot;price&amp;quot;: {&lt;br /&gt;
                &amp;quot;value&amp;quot;: 9999&lt;br /&gt;
              },&lt;br /&gt;
              exampleTimestamp: {&lt;br /&gt;
                calcType: &amp;quot;currentTimestampAdjustment&amp;quot;, // can add other types of calculated data in future &lt;br /&gt;
                action: &amp;quot;subtract&amp;quot;, // add|subtract&lt;br /&gt;
                adjustmentInSeconds: 300  // Seconds eg 5 minite = 5*60 = 300 Seconds. or 2 day  = 2*(24*60*60) = 172800&lt;br /&gt;
              }&lt;br /&gt;
            }&lt;br /&gt;
          }&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;nodeLabels&amp;quot;: [&lt;br /&gt;
            &amp;quot;servcieMintTest_shoppingMall&amp;quot;&lt;br /&gt;
          ],&lt;br /&gt;
          &amp;quot;objectDetail&amp;quot;: {&lt;br /&gt;
            &amp;quot;identifiers&amp;quot;: {&lt;br /&gt;
              &amp;quot;shoppingMallId&amp;quot;: {&amp;quot;value&amp;quot;:&amp;quot;minttestrefreshSeedData_shoppingMallId&amp;quot;}&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;fields&amp;quot;: {&lt;br /&gt;
              &amp;quot;name&amp;quot;: {&amp;quot;value&amp;quot;:&amp;quot;hotpot-man&amp;quot;},&lt;br /&gt;
              &amp;quot;totalPrice&amp;quot;: {&amp;quot;value&amp;quot;:500}&lt;br /&gt;
            }&lt;br /&gt;
          }&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;nodeLabels&amp;quot;: [&lt;br /&gt;
            &amp;quot;servcieMintTest_shoppingMallCalculateSetting&amp;quot;&lt;br /&gt;
          ],&lt;br /&gt;
          &amp;quot;objectDetail&amp;quot;: {&lt;br /&gt;
            &amp;quot;identifiers&amp;quot;: {&lt;br /&gt;
              &amp;quot;versionedDataId&amp;quot;: {&amp;quot;value&amp;quot;:&amp;quot;minttestrefreshSeedData_versionedDataId&amp;quot;}&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;fields&amp;quot;: {&lt;br /&gt;
              &amp;quot;addToCalculatedValuePerOrder&amp;quot;: {&amp;quot;value&amp;quot;:10},&lt;br /&gt;
              &amp;quot;addToRateTableValuePerOrder&amp;quot;: {&amp;quot;value&amp;quot;:77}&lt;br /&gt;
            }&lt;br /&gt;
          }&lt;br /&gt;
        }&lt;br /&gt;
      ],&lt;br /&gt;
      &amp;quot;relationships&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;fromObject&amp;quot;: {&lt;br /&gt;
            &amp;quot;nodeLabel&amp;quot;: &amp;quot;SellOfferPlan_sellOfferPlanDeliveryMethodLink&amp;quot;,&lt;br /&gt;
            &amp;quot;identifiers&amp;quot;: {&lt;br /&gt;
              &amp;quot;sellOfferPlanDeliveryMethodLinkId&amp;quot;: {&amp;quot;value&amp;quot;:&amp;quot;minttestrefreshSeedData_01&amp;quot;}&lt;br /&gt;
            }&lt;br /&gt;
          },&lt;br /&gt;
          &amp;quot;toObject&amp;quot;: {&lt;br /&gt;
            &amp;quot;nodeLabel&amp;quot;: &amp;quot;servcieMintTest_shoppingMall&amp;quot;,&lt;br /&gt;
            &amp;quot;identifiers&amp;quot;: {&lt;br /&gt;
              &amp;quot;shoppingMallId&amp;quot;: {&amp;quot;value&amp;quot;:&amp;quot;minttestrefreshSeedData_shoppingMallId&amp;quot;}&lt;br /&gt;
            }&lt;br /&gt;
          },&lt;br /&gt;
          &amp;quot;relationships&amp;quot;: [&lt;br /&gt;
            {&lt;br /&gt;
              &amp;quot;relTypeConcat&amp;quot;: &amp;quot;SellOfferPlan_hasCCCCCCC&amp;quot;,&lt;br /&gt;
              &amp;quot;relId&amp;quot;: &amp;quot;uuid-4s56df74s9df79w-w6de4f5w689ef&amp;quot;&lt;br /&gt;
            }&lt;br /&gt;
          ]&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;fromObject&amp;quot;: {&lt;br /&gt;
            &amp;quot;nodeLabel&amp;quot;: &amp;quot;servcieMintTest_shoppingMall&amp;quot;,&lt;br /&gt;
            &amp;quot;identifiers&amp;quot;: {&lt;br /&gt;
              &amp;quot;shoppingMallId&amp;quot;: {&amp;quot;value&amp;quot;:&amp;quot;minttestrefreshSeedData_shoppingMallId&amp;quot;}&lt;br /&gt;
            }&lt;br /&gt;
          },&lt;br /&gt;
          &amp;quot;toObject&amp;quot;: {&lt;br /&gt;
            &amp;quot;nodeLabel&amp;quot;: &amp;quot;servcieMintTest_shoppingMallCalculateSetting&amp;quot;,&lt;br /&gt;
            &amp;quot;identifiers&amp;quot;: {&lt;br /&gt;
              &amp;quot;versionedDataId&amp;quot;: {&amp;quot;value&amp;quot;:&amp;quot;minttestrefreshSeedData_versionedDataId&amp;quot;}&lt;br /&gt;
            }&lt;br /&gt;
          },&lt;br /&gt;
          &amp;quot;relationships&amp;quot;: [&lt;br /&gt;
            {&lt;br /&gt;
              &amp;quot;relTypeConcat&amp;quot;: &amp;quot;servcieMintTest_shoppingMall_currentShoppingMallCalculateSetting&amp;quot;,&lt;br /&gt;
              &amp;quot;relId&amp;quot;: &amp;quot;uuid-s122df5-s21df&amp;quot;,&lt;br /&gt;
              &amp;quot;relationshipProperty&amp;quot;: {&lt;br /&gt;
                &amp;quot;timeStamp&amp;quot;:{&amp;quot;value&amp;quot;: 1234567879},&lt;br /&gt;
                &amp;quot;statusName&amp;quot;: {&amp;quot;value&amp;quot;:true}&lt;br /&gt;
              }&lt;br /&gt;
            },&lt;br /&gt;
            {&lt;br /&gt;
              &amp;quot;relTypeConcat&amp;quot;: &amp;quot;servcieMintTest_shoppingMall_hasShoppingMallCalculateSetting&amp;quot;,&lt;br /&gt;
              &amp;quot;relId&amp;quot;: &amp;quot;uuid-77777-99999&amp;quot;,&lt;br /&gt;
              &amp;quot;relationshipProperties&amp;quot;: {&lt;br /&gt;
                &amp;quot;statusName&amp;quot;: {&lt;br /&gt;
                  &amp;quot;value&amp;quot;: true&lt;br /&gt;
                },&lt;br /&gt;
                exampleTimestamp: {&lt;br /&gt;
                  calcType: &amp;quot;currentTimestampAdjustment&amp;quot;, // can add other types of calculated data in future&lt;br /&gt;
                  action: &amp;quot;subtract&amp;quot;, // add|subtract&lt;br /&gt;
                  adjustmentInSeconds: 300  // Seconds eg 5 minite = 5*60 = 300 Seconds. or 2 day  = 2*(24*60*60) = 172800&lt;br /&gt;
              }&lt;br /&gt;
            }&lt;br /&gt;
          ]&lt;br /&gt;
        }&lt;br /&gt;
      ]&lt;br /&gt;
    }&lt;br /&gt;
  ],&lt;br /&gt;
  &lt;br /&gt;
  &amp;quot;seedData_testTag_LL&amp;quot;: []&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Cleaning Seed Data ===&lt;br /&gt;
:Delete seed data for set environment of &#039;&#039;&#039;test&#039;&#039;&#039;.&lt;br /&gt;
*cleaningeDynamoOneRecordsTags.json&lt;br /&gt;
*cleaningeDynamoManyRecordsTags.json&lt;br /&gt;
&lt;br /&gt;
====cleaningeDynamoOneRecordsTags====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;cleaningSeed_TestFindData_and_Education_case_invalid01&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;tableName&amp;quot;: &amp;quot;MLocationsTestFindDataMain&amp;quot;,&lt;br /&gt;
      &amp;quot;primaryKeys&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;findDataId&amp;quot;: &amp;quot;cleaning-1&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;findDataId&amp;quot;: &amp;quot;cleaning-2&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
      ]&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;tableName&amp;quot;: &amp;quot;MLocationsTestEducation&amp;quot;,&lt;br /&gt;
      &amp;quot;primaryKeys&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;studentId&amp;quot;: &amp;quot;cleaning-AA&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;studentId&amp;quot;: &amp;quot;cleaning-BB&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;studentId&amp;quot;: &amp;quot;cleaning-CC&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
      ]&lt;br /&gt;
    }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;cleaningSeed_TestMemberPersonnel_case_invalid01&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;tableName&amp;quot;: &amp;quot;MLocationsTestMemberPersonnel&amp;quot;,&lt;br /&gt;
      &amp;quot;primaryKeys&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;userId&amp;quot;: &amp;quot;namtan&amp;quot;,&lt;br /&gt;
          &amp;quot;passwordId&amp;quot;: &amp;quot;qqqww&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;userId&amp;quot;: &amp;quot;jack&amp;quot;,&lt;br /&gt;
          &amp;quot;passwordId&amp;quot;: &amp;quot;q1&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;userId&amp;quot;: &amp;quot;Momay&amp;quot;,&lt;br /&gt;
          &amp;quot;passwordId&amp;quot;: &amp;quot;ttr&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
      ]&lt;br /&gt;
    }&lt;br /&gt;
  ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== cleaningeDynamoManyRecordsTags ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;cleaningSeed_manyData_partitionKey_only_miss_sort&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;tableName&amp;quot;: &amp;quot;MLocationsTestMemberPersonnel&amp;quot;,&lt;br /&gt;
      &amp;quot;primaryKeys&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;userId&amp;quot;: &amp;quot;many-data&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
      ]&lt;br /&gt;
    }&lt;br /&gt;
  ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*logic query table MLocationsTestMemberPersonnel use primary Keys &amp;quot;userId&amp;quot; and then delete all data from primary Keys.&lt;br /&gt;
&lt;br /&gt;
=resources=&lt;br /&gt;
syntax is object&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{ &lt;br /&gt;
	&amp;quot;Lambda&amp;quot;:{&lt;br /&gt;
		&amp;quot;{FunctionNameHdrSqs}&amp;quot;:{ // FunctionNameHdrSqs is match resourceName in file tests&lt;br /&gt;
			&amp;quot;localLacation&amp;quot;:&amp;quot;/src/FunctionNameHdrSqs.js&amp;quot;,&lt;br /&gt;
			&amp;quot;localHandler&amp;quot;:&amp;quot;main&amp;quot;, &lt;br /&gt;
			&amp;quot;functionName&amp;quot;:&amp;quot;FunctionNameHdrSqs&amp;quot;	// FunctionName is function name match key of function.yml of servcie.&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;ProcessComplexFilterHdrSqs&amp;quot;:{ &lt;br /&gt;
			&amp;quot;localLacation&amp;quot;:&amp;quot;/src/ProcessComplexFilterHdrSqs.js&amp;quot;, &lt;br /&gt;
			&amp;quot;localHandler&amp;quot;:&amp;quot;main&amp;quot;, &lt;br /&gt;
			&amp;quot;functionName&amp;quot;:&amp;quot;ProcessComplexFilterHdrSqs&amp;quot; &lt;br /&gt;
		},&lt;br /&gt;
		... &lt;br /&gt;
	},&lt;br /&gt;
	&amp;quot;Dynamodb&amp;quot;: {&lt;br /&gt;
		&amp;quot;filterMain&amp;quot;:{ // match resourceName in file tests(dynamodbOutputEventIdentifiers)&lt;br /&gt;
			&amp;quot;tableName&amp;quot;:&amp;quot;filterMain&amp;quot; &lt;br /&gt;
		}, &lt;br /&gt;
		&amp;quot;tableNameBB&amp;quot;:{ &lt;br /&gt;
			&amp;quot;tableName&amp;quot;:&amp;quot;tableNameBB&amp;quot; &lt;br /&gt;
		},&lt;br /&gt;
		... &lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=events=&lt;br /&gt;
Syntax is object&lt;br /&gt;
==Syntax Name==&lt;br /&gt;
===FileName===&lt;br /&gt;
::Event_{inputEventTag}&lt;br /&gt;
&lt;br /&gt;
===eventTag===&lt;br /&gt;
#inputEventTag&lt;br /&gt;
#outputEventTag&lt;br /&gt;
#dynamodbTag&lt;br /&gt;
&lt;br /&gt;
*file events.js is have eventTag  (inputEventTag,outputEventTag,dynamodbTag)&lt;br /&gt;
**How to create name eventTag&lt;br /&gt;
***Example case : &amp;quot;test in service complexFilter functionname ProcessComplexFilter case element type is logical basic&amp;quot;.&lt;br /&gt;
::*&#039;&#039;&#039;inputEventTag&#039;&#039;&#039;&lt;br /&gt;
::::{serviceName}_{functionName}_{caseTest}&lt;br /&gt;
&#039;&#039;Conplexfilter_ProcessComplexFilter_Typelogical_basic&#039;&#039;&lt;br /&gt;
::*&#039;&#039;&#039;outputEventTag&#039;&#039;&#039;&lt;br /&gt;
::::output_{inputEventTag}&lt;br /&gt;
&#039;&#039;output_Conplexfilter_ProcessComplexFilter_Typelogical_basic&#039;&#039;&lt;br /&gt;
::*&#039;&#039;&#039;dynamodbTag&#039;&#039;&#039;&lt;br /&gt;
::::{inputEventTag}__Dynamodb__{&#039;&#039;&#039;action*&#039;&#039;&#039;}_{tableName} &lt;br /&gt;
&#039;&#039;Conplexfilter_ProcessComplexFilter_Typelogical_basic___Dynamodb__putItem_filterMain&#039;&#039;&lt;br /&gt;
: &amp;lt;u&amp;gt;&#039;&#039;&#039;{action}&#039;&#039;&#039; is only &#039;&#039;put&#039;&#039; or &#039;&#039;update&#039;&#039;, and in case of &#039;&#039;update&#039;&#039; must only test the last step of update &amp;lt;/u&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Syntax event===&lt;br /&gt;
====initiate by handlerServcie====&lt;br /&gt;
=====Sqs=====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
// An example input and output event of Sns&lt;br /&gt;
{&lt;br /&gt;
   &amp;quot;LambdaFunctionHdrSqs_input__pass&amp;quot;:{&lt;br /&gt;
      &amp;quot;properties&amp;quot;:{&lt;br /&gt;
         &amp;quot;propertyA&amp;quot;:{&lt;br /&gt;
            &amp;quot;value&amp;quot;:&amp;quot;valueProperty1&amp;quot;&lt;br /&gt;
         },&lt;br /&gt;
         &amp;quot;propertyB&amp;quot;:{&lt;br /&gt;
            &amp;quot;properties&amp;quot;:{&lt;br /&gt;
               &amp;quot;propertyB1&amp;quot;:{&lt;br /&gt;
                  &amp;quot;value&amp;quot;:&amp;quot;valuePropertyB1&amp;quot;&lt;br /&gt;
               }&lt;br /&gt;
            }&lt;br /&gt;
         },&lt;br /&gt;
         &amp;quot;propertyC&amp;quot;:{&lt;br /&gt;
            &amp;quot;eventValue&amp;quot;:[&lt;br /&gt;
               &amp;quot;valuePropertyC1&amp;quot;,&lt;br /&gt;
               &amp;quot;valuePropertyC2&amp;quot;,&lt;br /&gt;
               &amp;quot;valuePropertyC3&amp;quot;&lt;br /&gt;
            ]&lt;br /&gt;
         }&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;snsSqsTrigger&amp;quot;:true,&lt;br /&gt;
      &amp;quot;messageAttributes&amp;quot;:{&lt;br /&gt;
            &amp;quot;msgTag&amp;quot;:{&lt;br /&gt;
               &amp;quot;value&amp;quot;:&amp;quot;msgTag&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;propertyD&amp;quot;:{&lt;br /&gt;
               &amp;quot;value&amp;quot;:&amp;quot;valuePropertyD&amp;quot;&lt;br /&gt;
            }&lt;br /&gt;
      }&lt;br /&gt;
   },&lt;br /&gt;
   {&lt;br /&gt;
      &amp;quot;output_LambdaFunctionHdrSqs_pass&amp;quot;:{&lt;br /&gt;
         &amp;quot;properties&amp;quot;:{&lt;br /&gt;
            &amp;quot;propertyA&amp;quot;:{&lt;br /&gt;
               &amp;quot;value&amp;quot;:&amp;quot;valueProperty1&amp;quot;&lt;br /&gt;
            }&lt;br /&gt;
         }&lt;br /&gt;
      }&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot; linein&amp;gt;&lt;br /&gt;
&amp;quot;snsSqsTrigger&amp;quot;:true&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Dsq=====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
// An example input and output event of Direct Sqs&lt;br /&gt;
{&lt;br /&gt;
   &amp;quot;LambdaFunctionHdrDsq_input__pass&amp;quot;:{&lt;br /&gt;
      &amp;quot;forStageMatching&amp;quot;:true,&lt;br /&gt;
      &amp;quot;properties&amp;quot;:{&lt;br /&gt;
         &amp;quot;propertyA&amp;quot;:{&lt;br /&gt;
            &amp;quot;forStageMatching&amp;quot;:true,&lt;br /&gt;
            &amp;quot;value&amp;quot;:&amp;quot;valueProperty1&amp;quot;&lt;br /&gt;
         },&lt;br /&gt;
         &amp;quot;propertyB&amp;quot;:{&lt;br /&gt;
            &amp;quot;forStageMatching&amp;quot;:true,&lt;br /&gt;
            &amp;quot;properties&amp;quot;:{&lt;br /&gt;
               &amp;quot;propertyB1&amp;quot;:{&lt;br /&gt;
                  &amp;quot;forStageMatching&amp;quot;:true,&lt;br /&gt;
                  &amp;quot;value&amp;quot;:&amp;quot;valuePropertyB1&amp;quot;&lt;br /&gt;
               }&lt;br /&gt;
            }&lt;br /&gt;
         },&lt;br /&gt;
         &amp;quot;propertyC&amp;quot;:{&lt;br /&gt;
            &amp;quot;eventValue&amp;quot;:[&lt;br /&gt;
               &amp;quot;valuePropertyC1&amp;quot;,&lt;br /&gt;
               &amp;quot;valuePropertyC2&amp;quot;,&lt;br /&gt;
               &amp;quot;valuePropertyC3&amp;quot;&lt;br /&gt;
            ]&lt;br /&gt;
         }&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;DirectSqs&amp;quot;:true,&lt;br /&gt;
      &amp;quot;messageAttributes&amp;quot;:{&lt;br /&gt;
         &amp;quot;msgTag&amp;quot;:{&lt;br /&gt;
           &amp;quot;forStageMatching&amp;quot;:true,&lt;br /&gt;
           &amp;quot;value&amp;quot;:&amp;quot;msgTag&amp;quot;&lt;br /&gt;
          },&lt;br /&gt;
          &amp;quot;propertyD&amp;quot;:{&lt;br /&gt;
           &amp;quot;forStageMatching&amp;quot;:true,&lt;br /&gt;
           &amp;quot;value&amp;quot;:&amp;quot;valuePropertyD&amp;quot;&lt;br /&gt;
          }&lt;br /&gt;
      }&lt;br /&gt;
   },&lt;br /&gt;
   {&lt;br /&gt;
      &amp;quot;output_LambdaFunctionHdrDsq_pass&amp;quot;:{&lt;br /&gt;
         &amp;quot;forStageMatching&amp;quot;:true,&lt;br /&gt;
         &amp;quot;properties&amp;quot;:{&lt;br /&gt;
            &amp;quot;propertyA&amp;quot;:{&lt;br /&gt;
               &amp;quot;forStageMatching&amp;quot;:true,&lt;br /&gt;
               &amp;quot;value&amp;quot;:&amp;quot;valueProperty1&amp;quot;&lt;br /&gt;
            }&lt;br /&gt;
         }&lt;br /&gt;
      }&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* DirectSqs = true &lt;br /&gt;
:: for initialStage of Dsq&lt;br /&gt;
* messageAttributes is optional&lt;br /&gt;
&lt;br /&gt;
=====Inv=====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;LambdaFunctionHdrInv_input__pass&amp;quot;:{&lt;br /&gt;
     &amp;quot;forStageMatching&amp;quot;:true,&lt;br /&gt;
     &amp;quot;properties&amp;quot;:{&lt;br /&gt;
        &amp;quot;propertyA&amp;quot;:{&lt;br /&gt;
           &amp;quot;forStageMatching&amp;quot;:true,&lt;br /&gt;
           &amp;quot;value&amp;quot;:&amp;quot;valueProperty1&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;propertyB&amp;quot;:{&lt;br /&gt;
           &amp;quot;forStageMatching&amp;quot;:true,&lt;br /&gt;
           &amp;quot;properties&amp;quot;:{&lt;br /&gt;
              &amp;quot;propertyB1&amp;quot;:{&lt;br /&gt;
                 &amp;quot;forStageMatching&amp;quot;:true,&lt;br /&gt;
                 &amp;quot;value&amp;quot;:&amp;quot;valuePropertyB1&amp;quot;&lt;br /&gt;
              }&lt;br /&gt;
           }&lt;br /&gt;
        }&lt;br /&gt;
     }&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
        &amp;quot;output_LambdaFunctionHdrInv_pass&amp;quot;:{&lt;br /&gt;
           &amp;quot;forStageMatching&amp;quot;:true,&lt;br /&gt;
           &amp;quot;properties&amp;quot;:{&lt;br /&gt;
              &amp;quot;propertyA&amp;quot;:{&lt;br /&gt;
                 &amp;quot;forStageMatching&amp;quot;:true,&lt;br /&gt;
                 &amp;quot;value&amp;quot;:&amp;quot;valueProperty1&amp;quot;&lt;br /&gt;
              }&lt;br /&gt;
           }&lt;br /&gt;
        }&lt;br /&gt;
     }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Api=====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
// An example input and output event of API&lt;br /&gt;
{&lt;br /&gt;
	&amp;quot;LambdaFunctionHdrApi_input__pass_notTestAuthorizer&amp;quot;: { &lt;br /&gt;
		&amp;quot;forstageMatvhing&amp;quot;: true, &lt;br /&gt;
		&amp;quot;properties&amp;quot;: { &lt;br /&gt;
			&amp;quot;body&amp;quot;: { &lt;br /&gt;
				&amp;quot;properties&amp;quot;: { &lt;br /&gt;
					&amp;quot;propertyA&amp;quot;: { &lt;br /&gt;
						&amp;quot;testValueMatches&amp;quot;: false, &lt;br /&gt;
						&amp;quot;value&amp;quot;: &amp;quot;valueProperty1&amp;quot;, &lt;br /&gt;
					}, &lt;br /&gt;
					&amp;quot;propertyB&amp;quot;: { &lt;br /&gt;
						&amp;quot;properties&amp;quot;: { &lt;br /&gt;
							&amp;quot;propertyB1&amp;quot;: { &lt;br /&gt;
								&amp;quot;value&amp;quot;: &amp;quot;valuePropertyB1&amp;quot;, &lt;br /&gt;
							} &lt;br /&gt;
						} &lt;br /&gt;
					}, &lt;br /&gt;
					&amp;quot;propertyC&amp;quot;: { &lt;br /&gt;
						&amp;quot;eventValue&amp;quot;: [ &lt;br /&gt;
							&amp;quot;valuePropertyC1&amp;quot;, &lt;br /&gt;
							&amp;quot;valuePropertyC2&amp;quot;, &lt;br /&gt;
							&amp;quot;valuePropertyC3&amp;quot;, &lt;br /&gt;
						] &lt;br /&gt;
					},&lt;br /&gt;
					... &lt;br /&gt;
				} &lt;br /&gt;
			} &lt;br /&gt;
		}&lt;br /&gt;
	}, &lt;br /&gt;
	&amp;quot;Output_LambdaFunctionHdrApi_input__pass_notTestAuthorizer&amp;quot;: { &lt;br /&gt;
		&amp;quot;properties&amp;quot;: { &lt;br /&gt;
			&amp;quot;body&amp;quot;: { &lt;br /&gt;
				&amp;quot;properties&amp;quot;: { &lt;br /&gt;
					&amp;quot;propertyA&amp;quot;: { &lt;br /&gt;
						&amp;quot;testValueMatches&amp;quot;: false, &lt;br /&gt;
						&amp;quot;value&amp;quot;: &amp;quot;valueProperty1&amp;quot;&lt;br /&gt;
					}, &lt;br /&gt;
					...&lt;br /&gt;
				} &lt;br /&gt;
			} &lt;br /&gt;
		}  &lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====S3=====&lt;br /&gt;
&lt;br /&gt;
====dynamodb====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
// An example event of Dynamodb //optional &lt;br /&gt;
{&lt;br /&gt;
	{inputEventTag}__dynamodb_{action}_{tablename}: { // eg. &amp;quot;Complexfilter_ProcessComplexfilter_logical_basic__dynamodb_update_FilterMain&amp;quot;&lt;br /&gt;
	&amp;quot;forStageMatching&amp;quot;: true,&lt;br /&gt;
     &amp;quot;properties&amp;quot;: {&lt;br /&gt;
        &amp;quot;filterMainUniqueRequestId&amp;quot;: {&lt;br /&gt;
          &amp;quot;testValueMatches&amp;quot;: fase,&lt;br /&gt;
          &amp;quot;value&amp;quot;: &amp;quot;bbc4f4a9-2032-4dec-9129-8c7d169fecc5&amp;quot;&lt;br /&gt;
         },&lt;br /&gt;
        &amp;quot;filterObject&amp;quot;: {&lt;br /&gt;
        &amp;quot;forStageMatching&amp;quot;: true,&lt;br /&gt;
        &amp;quot;properties&amp;quot;: {&lt;br /&gt;
          &amp;quot;logicalType&amp;quot;: {&lt;br /&gt;
            &amp;quot;value&amp;quot;: &amp;quot;partitionKey&amp;quot;&lt;br /&gt;
          },&lt;br /&gt;
          &amp;quot;comparison&amp;quot;: {&lt;br /&gt;
            &amp;quot;value&amp;quot;: &amp;quot;equals&amp;quot;&lt;br /&gt;
          },&lt;br /&gt;
          &amp;quot;type&amp;quot;: {&lt;br /&gt;
            &amp;quot;value&amp;quot;: &amp;quot;logical&amp;quot;&lt;br /&gt;
          },&lt;br /&gt;
          &amp;quot;partitionKey&amp;quot;: {&lt;br /&gt;
            &amp;quot;forStageMatching&amp;quot;: true,&lt;br /&gt;
            &amp;quot;value&amp;quot;: &amp;quot;mockIntegratioTestCPF&amp;quot;&lt;br /&gt;
          }&lt;br /&gt;
        }&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;filterMainExpiryTime&amp;quot;: {&lt;br /&gt;
        &amp;quot;testValueMatches&amp;quot;: fase,&lt;br /&gt;
        &amp;quot;value&amp;quot;: 1731980802858&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;filterMainStatus&amp;quot;: {&lt;br /&gt;
       &amp;quot;forStageMatching&amp;quot;: true,&lt;br /&gt;
        &amp;quot;value&amp;quot;: &amp;quot;processing&amp;quot;&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;createTime&amp;quot;: {&lt;br /&gt;
        &amp;quot;testValueMatches&amp;quot;: fase,&lt;br /&gt;
        &amp;quot;value&amp;quot;: 1731894402678&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;objType&amp;quot;: {&lt;br /&gt;
        &amp;quot;forStageMatching&amp;quot;: true,&lt;br /&gt;
        &amp;quot;properties&amp;quot;: {&lt;br /&gt;
          &amp;quot;serviceTag&amp;quot;: {&lt;br /&gt;
            &amp;quot;forStageMatching&amp;quot;: true,&lt;br /&gt;
            &amp;quot;value&amp;quot;: &amp;quot;IntTesting&amp;quot;&lt;br /&gt;
          },&lt;br /&gt;
          &amp;quot;objectType&amp;quot;: {&lt;br /&gt;
            &amp;quot;forStageMatching&amp;quot;: true,&lt;br /&gt;
            &amp;quot;value&amp;quot;: &amp;quot;TestRecord&amp;quot;&lt;br /&gt;
          }&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;keyValues&amp;quot;: {&lt;br /&gt;
      &amp;quot;filterMainId&amp;quot;: &amp;quot;4865d2451a621cb7f71225cfabf2df4f98e20801&amp;quot;,&lt;br /&gt;
      &amp;quot;objTypeId&amp;quot;: &amp;quot;cdb170690571df7522b3850920fce02507c077ee&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
	} &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* partition key: filterMainId&lt;br /&gt;
* sort key: objTypeId&lt;br /&gt;
&lt;br /&gt;
[[2021-01-15 - Integration Testing - Adding DynamoDB result tests]]&lt;br /&gt;
&lt;br /&gt;
===Type paramiter===&lt;br /&gt;
use for evnet and dyanmodb event&lt;br /&gt;
====Normal====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 object: {&lt;br /&gt;
  forStageMatching: true,&lt;br /&gt;
  properties: {&lt;br /&gt;
    name:{&lt;br /&gt;
     forStageMatching: true,&lt;br /&gt;
     value:&amp;quot;Tom&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
   }&lt;br /&gt;
 },&lt;br /&gt;
 array: {&lt;br /&gt;
  forStageMatching: true,&lt;br /&gt;
  useIsEqual: true,&lt;br /&gt;
  eventValue: [&lt;br /&gt;
   {&lt;br /&gt;
     &amp;quot;relTypeAndDirection&amp;quot;: {&lt;br /&gt;
       &amp;quot;relType&amp;quot;: {&lt;br /&gt;
         &amp;quot;serviceTag&amp;quot;: &amp;quot;maxxCart2&amp;quot;,&lt;br /&gt;
         &amp;quot;relationshipTag&amp;quot;: &amp;quot;hasCartOrder&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;relationshipDirection&amp;quot;: &amp;quot;from&amp;quot;&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;targetObjects&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;objType&amp;quot;: {&lt;br /&gt;
           &amp;quot;serviceTag&amp;quot;: &amp;quot;maxxCart2&amp;quot;,&lt;br /&gt;
           &amp;quot;objectType&amp;quot;: &amp;quot;cartOrder&amp;quot;&lt;br /&gt;
          }&lt;br /&gt;
        }&lt;br /&gt;
      ]&lt;br /&gt;
    }&lt;br /&gt;
  ]&lt;br /&gt;
 },&lt;br /&gt;
 number: {&lt;br /&gt;
  forStageMatching: true,&lt;br /&gt;
  value: 1111&lt;br /&gt;
 },&lt;br /&gt;
 string: {&lt;br /&gt;
  forStageMatching: true,&lt;br /&gt;
  value: &amp;quot;hi&amp;quot;&lt;br /&gt;
 },&lt;br /&gt;
 boolean: {&lt;br /&gt;
  forStageMatching: true,&lt;br /&gt;
  value: true&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
 forStageMatching: true&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
::set true for check match value,It is not necessary to set every value&lt;br /&gt;
:::use in test importent paramiter&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
testValueMatches:false&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
::setting paramiter require on create but can not test random value eg: identifier or timeStamp or uuid&lt;br /&gt;
&lt;br /&gt;
====Empty====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
 EmptyString:{&lt;br /&gt;
forStageMatching: true,&lt;br /&gt;
  value:&amp;quot;&amp;quot;&lt;br /&gt;
 },&lt;br /&gt;
 EmptyArray:{&lt;br /&gt;
   forStageMatching: true,&lt;br /&gt;
   useIsEqual: true,&lt;br /&gt;
   eventValue: []&lt;br /&gt;
 },&lt;br /&gt;
 EmptyObject:{&lt;br /&gt;
  forStageMatching: true,&lt;br /&gt;
  value:{}&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Error====&lt;br /&gt;
can test noRetryError&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;quot;errorMessage&amp;quot;: {&lt;br /&gt;
    forStageMatching: true,&lt;br /&gt;
    &amp;quot;value&amp;quot;: &amp;quot;Not found schema of {serviceTag:TestGraphHandler, objectType:notFoundObjType}&amp;quot;&lt;br /&gt;
   }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Paramiter random====&lt;br /&gt;
Can not test case random numbber or uuid.&lt;br /&gt;
But requriOnCreate mush be set &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
testValueMatches:false&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
or set&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
forStageMatching:false&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=tests=&lt;br /&gt;
Syntax is array of object&lt;br /&gt;
==Syntax name== &lt;br /&gt;
===Testtag name ===&lt;br /&gt;
*{integrationTestTag}&lt;br /&gt;
#Test Own servcie or not a lot stage&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
Test_{inputEventTag}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
#Mix multiple servcie and multiple stage&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt; &lt;br /&gt;
IntegrationTest_{inputEventTag}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===File name ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt; &lt;br /&gt;
{integrationTestTag}.json&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Setting of test==&lt;br /&gt;
[[Service - Integration Test Config#tests.js Syntax|syntax test]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
            integrationTestTag: {integrationTestTag},&lt;br /&gt;
            productionSafe: true|false, //default false&lt;br /&gt;
            noInitialStage: true, // default false, if set to true, no error when no foundInitialStages found&lt;br /&gt;
            errorIfStageUndefined: true|false, //default false&lt;br /&gt;
            errorIfInvokeUndefined: true|false, //default false,&lt;br /&gt;
            dynamoDBSeedDataTags:[&amp;quot;seedDataDB_test_case_xx&amp;quot;], //[seedDataTag] optional if have seed data for test&lt;br /&gt;
            graphSeedDataTags:[&amp;quot;seedDataGraph_test_case_xx&amp;quot;], //[seedDataTag] optional if have seed data for test&lt;br /&gt;
            cleaningeDynamoOneRecordsTags: [&amp;quot;cleaningSeed_partitionKey_sortKey_normol&amp;quot;], //optional&lt;br /&gt;
            cleaningeDynamoManyRecordsTags: [], // optional&lt;br /&gt;
            stages:[&lt;br /&gt;
               ...&lt;br /&gt;
            ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
*[[2025-11-20 IntegrationTest#dynamoDBSeedDataTags|dynamoDBSeedDataTags]]&lt;br /&gt;
*[[2025-11-20 IntegrationTest#graphSeedDataTags|graphSeedDataTags]]&lt;br /&gt;
*[[2025-11-20 IntegrationTest#cleaningeDynamoOneRecordsTags|cleaningeDynamoOneRecordsTags]]&lt;br /&gt;
*[[2025-11-20 IntegrationTest#cleaningeDynamoManyRecordsTags|cleaningeDynamoManyRecordsTags]]&lt;br /&gt;
&lt;br /&gt;
==Stages==&lt;br /&gt;
====Initiate stage====&lt;br /&gt;
:&#039;&#039;&#039;&amp;quot;initialStage&amp;quot;:true&#039;&#039;&#039;&lt;br /&gt;
[[Service_-_Integration_Test_Config#tests.js Syntax|detail property of test]]&lt;br /&gt;
=====HandlerService=====&lt;br /&gt;
======Sqs======&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;quot;stages&amp;quot;:[&lt;br /&gt;
         {&lt;br /&gt;
            &amp;quot;initialStage&amp;quot;:true,&lt;br /&gt;
            &amp;quot;inputEventTag&amp;quot;:&amp;quot;Locations_ProcessLocationNodeSomting_casenotHaveData&amp;quot;,&lt;br /&gt;
            &amp;quot;serviceName&amp;quot;:&amp;quot;Locations&amp;quot;,&lt;br /&gt;
            &amp;quot;resourceType&amp;quot;:&amp;quot;Lambda&amp;quot;,&lt;br /&gt;
            &amp;quot;resourceName&amp;quot;:&amp;quot;ProcessLocationNodeSomtingHdrDsq&amp;quot;,&lt;br /&gt;
            &amp;quot;outputEventTag&amp;quot;:&amp;quot;Output_Locations_ProcessLocationNodeSomting_casenotHaveData&amp;quot;&lt;br /&gt;
         }&lt;br /&gt;
      ]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
======Dsq======&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
stages: [&lt;br /&gt;
        {&lt;br /&gt;
          initialStage: true,&lt;br /&gt;
          inputEventTag: &#039;LambdaFunctionHdrDsq_input_singleStage_directSqs__pass&#039;,&lt;br /&gt;
          serviceName: &#039;ServiceTemplate&#039;,&lt;br /&gt;
          resourceType: &#039;Lambda&#039;,&lt;br /&gt;
          resourceName: &#039;LambdaFunctionHdrDsq&#039;,&lt;br /&gt;
          outputEventTag: &#039;LambdaFunctionHdrDsq_output__returnvalue_pass&#039;,&lt;br /&gt;
          // **** not set snsServiceName and snsTopic&lt;br /&gt;
          // can be test dynamodbOutput&lt;br /&gt;
        }&lt;br /&gt;
      ]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
======Api======&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;quot;stages&amp;quot;:[&lt;br /&gt;
    {&lt;br /&gt;
       &amp;quot;initialStage&amp;quot;:true,&lt;br /&gt;
       &amp;quot;inputEventTag&amp;quot;:&amp;quot;LambdaFunctionHdrApi_input__pass&amp;quot;,&lt;br /&gt;
       &amp;quot;serviceName&amp;quot;:&amp;quot;ServiceTemplate&amp;quot;,&lt;br /&gt;
       &amp;quot;resourceType&amp;quot;:&amp;quot;Lambda&amp;quot;,&lt;br /&gt;
       &amp;quot;resourceName&amp;quot;:&amp;quot;LambdaFunctionHdrApi&amp;quot;,&lt;br /&gt;
       &amp;quot;outputEventTag&amp;quot;:&amp;quot;LambdaFunctionHdrApi_output__pass&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
======Inv======&lt;br /&gt;
*&#039;&#039;&#039;single stage&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
[{&lt;br /&gt;
   &amp;quot;integrationTestTag&amp;quot;:&amp;quot;LambdaFunctionHdrInv__pass&amp;quot;,&lt;br /&gt;
   &amp;quot;productionSafe&amp;quot;:false,&lt;br /&gt;
   &amp;quot;errorIfStageUndefined&amp;quot;:false,&lt;br /&gt;
   &amp;quot;errorIfInvokeUndefined&amp;quot;:false,&lt;br /&gt;
   &amp;quot;dynamoDBSeedDataTags&amp;quot;:[&amp;quot;seedDataDB_test_case_xx&amp;quot;], //[seedDataTag] optional if have seed data for test&lt;br /&gt;
   &amp;quot;graphSeedDataTags&amp;quot;:[&amp;quot;seedDataGraph_test_case_xx&amp;quot;], //[seedDataTag] optional if have seed data for test&lt;br /&gt;
   &amp;quot;cleaningeDynamoOneRecordsTags&amp;quot;: [&amp;quot;cleaningSeed_partitionKey_sortKey_normol&amp;quot;], //optional&lt;br /&gt;
   &amp;quot;cleaningeDynamoManyRecordsTags&amp;quot;: []&lt;br /&gt;
   &amp;quot;stages&amp;quot;:[&lt;br /&gt;
      {&lt;br /&gt;
         &amp;quot;initialStage&amp;quot;:true,&lt;br /&gt;
         &amp;quot;inputEventTag&amp;quot;:&amp;quot;LambdaFunctionHdrInv_input__pass&amp;quot;,&lt;br /&gt;
         &amp;quot;serviceName&amp;quot;:&amp;quot;ServiceTemplate&amp;quot;,&lt;br /&gt;
         &amp;quot;resourceType&amp;quot;:&amp;quot;Lambda&amp;quot;,&lt;br /&gt;
         &amp;quot;resourceName&amp;quot;:&amp;quot;LambdaFunctionHdrInv&amp;quot;,&lt;br /&gt;
         &amp;quot;outputEventTag&amp;quot;:&amp;quot;LambdaFunctionHdrInv_output__pass&amp;quot;&lt;br /&gt;
      }&lt;br /&gt;
   ]&lt;br /&gt;
}]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;invoke multiple stage&#039;&#039;&#039; &lt;br /&gt;
:*Each stage test can invoke multiple lambda by use &amp;quot;eventStage Tag&amp;quot; point to stage for test integration test.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
[{&lt;br /&gt;
   &amp;quot;integrationTestTag&amp;quot;:&amp;quot;LambdaFunctionHdrInv_invokes__pass&amp;quot;,&lt;br /&gt;
   &amp;quot;productionSafe&amp;quot;:false,&lt;br /&gt;
   &amp;quot;errorIfStageUndefined&amp;quot;:false,&lt;br /&gt;
   &amp;quot;errorIfInvokeUndefined&amp;quot;:false,&lt;br /&gt;
   &amp;quot;dynamoDBSeedDataTags&amp;quot;:[], //[seedDataTag] optional if have seed data for test&lt;br /&gt;
   &amp;quot;graphSeedDataTags&amp;quot;:[], //[seedDataTag] optional if have seed data for test&lt;br /&gt;
   &amp;quot;cleaningeDynamoOneRecordsTags&amp;quot;: [], //optional&lt;br /&gt;
   &amp;quot;cleaningeDynamoManyRecordsTags&amp;quot;: [], // optional&lt;br /&gt;
   &amp;quot;stages&amp;quot;:[&lt;br /&gt;
      {&lt;br /&gt;
         &amp;quot;initialStage&amp;quot;:true,&lt;br /&gt;
         &amp;quot;inputEventTag&amp;quot;:&amp;quot;LambdaFunctionHdrInv_input__pass&amp;quot;,&lt;br /&gt;
         &amp;quot;serviceName&amp;quot;:&amp;quot;ServiceTemplate&amp;quot;,&lt;br /&gt;
         &amp;quot;resourceType&amp;quot;:&amp;quot;Lambda&amp;quot;,&lt;br /&gt;
         &amp;quot;resourceName&amp;quot;:&amp;quot;LambdaFunctionHdrInv&amp;quot;,&lt;br /&gt;
         &amp;quot;outputEventTag&amp;quot;:&amp;quot;LambdaFunctionHdrInv_output__pass&amp;quot;,&lt;br /&gt;
         &amp;quot;invokes&amp;quot;:[&lt;br /&gt;
            {&lt;br /&gt;
               &amp;quot;eventStageTag&amp;quot;:&amp;quot;service_invokesB__pass&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            {&lt;br /&gt;
               &amp;quot;eventStageTag&amp;quot;:&amp;quot;service_invokesD__pass&amp;quot;&lt;br /&gt;
            }&lt;br /&gt;
         ]&lt;br /&gt;
      },&lt;br /&gt;
      {&lt;br /&gt;
         &amp;quot;eventStageTag&amp;quot;:&amp;quot;service_invokesB__pass&amp;quot;,&lt;br /&gt;
         &amp;quot;inputEventTag&amp;quot;:&amp;quot;input_service_invokes__pass&amp;quot;,&lt;br /&gt;
         &amp;quot;serviceName&amp;quot;:&amp;quot;ServiceTemplate_B&amp;quot;,&lt;br /&gt;
         &amp;quot;resourceType&amp;quot;:&amp;quot;Lambda&amp;quot;,&lt;br /&gt;
         &amp;quot;resourceName&amp;quot;:&amp;quot;LambdaFunction_B_HdrInv&amp;quot;,&lt;br /&gt;
         &amp;quot;outputEventTag&amp;quot;:&amp;quot;output_service_invokes__pass&amp;quot;&lt;br /&gt;
      },&lt;br /&gt;
      {&lt;br /&gt;
         &amp;quot;eventStageTag&amp;quot;:&amp;quot;service_invokesD__pass&amp;quot;,&lt;br /&gt;
         &amp;quot;inputEventTag&amp;quot;:&amp;quot;input_service_invokesD__pass&amp;quot;,&lt;br /&gt;
         &amp;quot;serviceName&amp;quot;:&amp;quot;ServiceTemplate_D&amp;quot;,&lt;br /&gt;
         &amp;quot;resourceType&amp;quot;:&amp;quot;Lambda&amp;quot;,&lt;br /&gt;
         &amp;quot;resourceName&amp;quot;:&amp;quot;LambdaFunction_D_HdrInv&amp;quot;,&lt;br /&gt;
         &amp;quot;outputEventTag&amp;quot;:&amp;quot;output_service_invokesD__pass&amp;quot;&lt;br /&gt;
      }&lt;br /&gt;
   ]&lt;br /&gt;
}]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
======S3======&lt;br /&gt;
======Batch======&lt;br /&gt;
&lt;br /&gt;
====GeneratedSeedData====&lt;br /&gt;
*Integrationtest must be delete identifier every time before test.&lt;br /&gt;
*Set &#039;generatedSeedData&#039; in file tests.json case by case of stage eg: stages[0] create identifier is randomOnCreate will set &#039;generatedSeedData&#039; and stages[1] create relationship is randomOnCreate(It is usually random, except in the case of relationship version) set generatedSeedData this stages[1].&lt;br /&gt;
*How to delete case identifier rendomOnCreate?: set in stage use setting generateSeedData &amp;quot;randomOnCreateIdentifier&amp;quot;&lt;br /&gt;
#randomOnCreateIdentifier&lt;br /&gt;
#notRandomOnIdentifier&lt;br /&gt;
#relationships&lt;br /&gt;
=====randomOnCreateIdentifier=====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;quot;stages&amp;quot;: [&lt;br /&gt;
      {&lt;br /&gt;
        &amp;quot;initialStage&amp;quot;: true,&lt;br /&gt;
        &amp;quot;inputEventTag&amp;quot;: &amp;quot;MLocation_CreateHdrSqs__case_NodeVersionData_Jaya&amp;quot;,&lt;br /&gt;
        &amp;quot;serviceTag&amp;quot;: &amp;quot;MLocations&amp;quot;,&lt;br /&gt;
        &amp;quot;resourceType&amp;quot;: &amp;quot;Lambda&amp;quot;,&lt;br /&gt;
        &amp;quot;resourceName&amp;quot;: &amp;quot;CreateHdrSqs&amp;quot;,&lt;br /&gt;
        &amp;quot;snsServiceName&amp;quot;: &amp;quot;MLocations&amp;quot;,&lt;br /&gt;
        &amp;quot;snsTopic&amp;quot;: &amp;quot;Create_In&amp;quot;,&lt;br /&gt;
        &amp;quot;generatedSeedData&amp;quot;: {&lt;br /&gt;
          &amp;quot;randomOnCreateIdentifier&amp;quot;: [&lt;br /&gt;
            {&lt;br /&gt;
              &amp;quot;objType&amp;quot;: {&lt;br /&gt;
                &amp;quot;serviceTag&amp;quot;: &amp;quot;MLocations&amp;quot;,&lt;br /&gt;
                &amp;quot;objectType&amp;quot;: &amp;quot;Member&amp;quot;&lt;br /&gt;
              },&lt;br /&gt;
              &amp;quot;identifierValue&amp;quot;: &amp;quot;Jaya-member-001&amp;quot;&lt;br /&gt;
            }&lt;br /&gt;
          ]&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
=====notRandomOnIdentifier=====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;quot;stages&amp;quot;: [&lt;br /&gt;
      {&lt;br /&gt;
        &amp;quot;initialStage&amp;quot;: true,&lt;br /&gt;
        &amp;quot;inputEventTag&amp;quot;: &amp;quot;MLocation_CreateHdrSqs__case_NodeVersionData_Jaya&amp;quot;,&lt;br /&gt;
        &amp;quot;serviceTag&amp;quot;: &amp;quot;MLocations&amp;quot;,&lt;br /&gt;
        &amp;quot;resourceType&amp;quot;: &amp;quot;Lambda&amp;quot;,&lt;br /&gt;
        &amp;quot;resourceName&amp;quot;: &amp;quot;CreateHdrSqs&amp;quot;,&lt;br /&gt;
        &amp;quot;snsServiceName&amp;quot;: &amp;quot;MLocations&amp;quot;,&lt;br /&gt;
        &amp;quot;snsTopic&amp;quot;: &amp;quot;Create_In&amp;quot;,&lt;br /&gt;
        &amp;quot;generatedSeedData&amp;quot;: {&lt;br /&gt;
          &amp;quot;notRandomOnIdentifier&amp;quot;: [&lt;br /&gt;
            {&lt;br /&gt;
              &amp;quot;objType&amp;quot;: {&lt;br /&gt;
                &amp;quot;serviceTag&amp;quot;: &amp;quot;gggg&amp;quot;,&lt;br /&gt;
                &amp;quot;objectType&amp;quot;: &amp;quot;ssssss&amp;quot;&lt;br /&gt;
              },&lt;br /&gt;
              &amp;quot;identifiers&amp;quot;: {&lt;br /&gt;
                &amp;quot;topId&amp;quot;: &amp;quot;123456&amp;quot;&lt;br /&gt;
              }&lt;br /&gt;
            }&lt;br /&gt;
          ]&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    ]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
=====relationships=====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;quot;stages&amp;quot;: [&lt;br /&gt;
      {&lt;br /&gt;
        &amp;quot;initialStage&amp;quot;: true,&lt;br /&gt;
        &amp;quot;inputEventTag&amp;quot;: &amp;quot;MLocation_CreateHdrSqs__case_NodeVersionData_Jaya&amp;quot;,&lt;br /&gt;
        &amp;quot;serviceTag&amp;quot;: &amp;quot;MLocations&amp;quot;,&lt;br /&gt;
        &amp;quot;resourceType&amp;quot;: &amp;quot;Lambda&amp;quot;,&lt;br /&gt;
        &amp;quot;resourceName&amp;quot;: &amp;quot;CreateHdrSqs&amp;quot;,&lt;br /&gt;
        &amp;quot;snsServiceName&amp;quot;: &amp;quot;MLocations&amp;quot;,&lt;br /&gt;
        &amp;quot;snsTopic&amp;quot;: &amp;quot;Create_In&amp;quot;,&lt;br /&gt;
        &amp;quot;generatedSeedData&amp;quot;: {&lt;br /&gt;
         &amp;quot;relationships&amp;quot;: [&lt;br /&gt;
            {&lt;br /&gt;
              &amp;quot;relType&amp;quot;: {&lt;br /&gt;
                &amp;quot;serviceTag&amp;quot;: &amp;quot;PaymentMethodGeneric&amp;quot;,&lt;br /&gt;
                &amp;quot;relationshipTag&amp;quot;: &amp;quot;disabledPaymentMethodGenericPropertyValue&amp;quot;&lt;br /&gt;
              },&lt;br /&gt;
              &amp;quot;relId&amp;quot;: &amp;quot;f4f73de7-647c-4b3b-8043-87cc002f361a&amp;quot;&lt;br /&gt;
            }&lt;br /&gt;
          ]&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    ]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Dynamodb==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
stages: [&lt;br /&gt;
        {&lt;br /&gt;
          initialStage: true,&lt;br /&gt;
          inputEventTag: &#039;Locations_LambdaFunctionHdrDsq_singleStage_directSqs__pass&#039;,&lt;br /&gt;
          serviceName: &#039;ServiceTemplate&#039;,&lt;br /&gt;
          resourceType: &#039;Lambda&#039;,&lt;br /&gt;
          resourceName: &#039;LambdaFunctionHdrDsq&#039;,&lt;br /&gt;
          outputEventTag: &#039;output_Locations_LambdaFunctionHdrDsq_singleStage_directSqs__pass&#039;,&lt;br /&gt;
          dynamodbOutputEventIdentifiers: [&lt;br /&gt;
			{&lt;br /&gt;
              serviceName: {tableName}, //service that deployed the DynamoDB table, so can build table&#039;s full resource name&lt;br /&gt;
              resourceName: {resourceName}, //DynamoDB resourceName&lt;br /&gt;
              eventTag: {eventTagDynamoDB}&lt;br /&gt;
		    }&lt;br /&gt;
          ],&lt;br /&gt;
        }&lt;br /&gt;
      ]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Result of integrationtest =&lt;br /&gt;
Data have 2 table &amp;quot;TestRecord&amp;quot; and &amp;quot;TestUnit&amp;quot;.&lt;br /&gt;
:- TestRecord is table all unti of stage inside eg input output invokes and dynamodb&lt;br /&gt;
:- TestUnit is store status each unit &lt;br /&gt;
each unit save in table TestUnit&lt;br /&gt;
testRecordId is  name of test concat with testTime.&lt;br /&gt;
testUnitId is point to position of unti instage.&lt;br /&gt;
resultStatus is status of unit.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
eg:&lt;br /&gt;
input_0 = stages index 0 result &#039;&#039;&#039;input&#039;&#039;&#039;&lt;br /&gt;
output_1 = stages index 1 result &#039;&#039;&#039;output&#039;&#039;&#039;&lt;br /&gt;
invokeInput_0_1 = stages index 0 result &#039;&#039;&#039;invokes&#039;&#039;&#039; index 1 position input &lt;br /&gt;
invokeOutput_0_1 = stages index 0 result &#039;&#039;&#039;invokes&#039;&#039;&#039; index 1 position output&lt;br /&gt;
dynamodb_0_1 =  stages index 0 result &#039;&#039;&#039;dynamodb&#039;&#039;&#039; index 1.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
after all TestUnit finish (check  by awaitingMultiplestep penditnStep is integrationtestTag awaitingStepId is each TestUnit )&lt;br /&gt;
check all awaitingStep finish send message to ultimateIntegrationtest for sumla all test is status&lt;br /&gt;
&lt;br /&gt;
== Summary of test status == &lt;br /&gt;
:1.testStatus is &amp;quot;passed&amp;quot; all unit passed.&lt;br /&gt;
:2.testStatus is &amp;quot;failed&amp;quot;  have some is failed.&lt;br /&gt;
:3.testStatus is &amp;quot;processing&amp;quot; have some is have status processing after check all awaiting step is finish.&lt;br /&gt;
:4.testStatus is &amp;quot;failed&amp;quot; have record &amp;quot;errorsTest&amp;quot; in case &amp;quot;not match stage invoke&amp;quot;, &#039;found multiple matchingInvokes&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*[[2025-02-20 - Integration Test examples#tests.js Syntax|Syntax Dynamodb]]&lt;br /&gt;
&lt;br /&gt;
=How to test integrationtest s3=&lt;br /&gt;
[[Developer guide for making Integration Tests]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Working documents| 2025-11-20]]&lt;br /&gt;
[[Category:Working documents - Integration Testing| 2025-11-20]]&lt;/div&gt;</summary>
		<author><name>Mint</name></author>
	</entry>
	<entry>
		<id>https://izara.io/wiki/index.php?title=2025-11-20_IntegrationTest&amp;diff=4584</id>
		<title>2025-11-20 IntegrationTest</title>
		<link rel="alternate" type="text/html" href="https://izara.io/wiki/index.php?title=2025-11-20_IntegrationTest&amp;diff=4584"/>
		<updated>2026-08-17T03:24:43Z</updated>

		<summary type="html">&lt;p&gt;Mint: /* graphSeedDataTags */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Reference:&lt;br /&gt;
&lt;br /&gt;
*[[2020-10-01 - Integration Test Config - Functions|IntegrationtestConfig]]&lt;br /&gt;
*[[2020-10-01 - Integration Testing - Lambda Functions|Integrationtesting]]&lt;br /&gt;
*[[2025-02-20 - Integration Test examples|Example]]&lt;br /&gt;
&lt;br /&gt;
= File extension =&lt;br /&gt;
&lt;br /&gt;
uploadS3: &amp;quot;.json&amp;quot;&lt;br /&gt;
integrationtestConfig: &amp;quot;.js&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=TestRecord=&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JSON&amp;quot;&amp;gt;&lt;br /&gt;
[&lt;br /&gt;
  {&lt;br /&gt;
    integrationTestTag: &amp;quot;Integrationtest_xx&amp;quot;,&lt;br /&gt;
    testStartedTimestamp: 111111111, // start time&lt;br /&gt;
    bucketName: &amp;quot;integrationtest-config-us-east-2&amp;quot;,&lt;br /&gt;
    lastUpdateUniqueRequestId: &amp;quot;sssss&amp;quot;, //_izContext.uniqueRequestId protacts race coditionn dynamodb&lt;br /&gt;
    testStatus: &amp;quot;passed&amp;quot;,//failed,processing,passed&lt;br /&gt;
    testCompleteTimestamp: 1111113, // all test finish&lt;br /&gt;
    stages: [&lt;br /&gt;
      {&lt;br /&gt;
        stageConfig: {&lt;br /&gt;
          //straight copy of this stage from integration test config&lt;br /&gt;
          inputEventTag: &amp;quot;xx&amp;quot;,&lt;br /&gt;
          inputEventConfig: {//event input&lt;br /&gt;
          },&lt;br /&gt;
          outputEventTag: &amp;quot;output_xx&amp;quot;,&lt;br /&gt;
          outputEventConfig: {//event out put&lt;br /&gt;
          },&lt;br /&gt;
          resourceName: &amp;quot;ComplexfilterTestProcessComplexfilter&amp;quot;,// function name&lt;br /&gt;
          resourceType: &amp;quot;Lambda&amp;quot;, // function name&lt;br /&gt;
          serviceTag: &amp;quot;Complexfilter&amp;quot;,// (initeate sqs)&lt;br /&gt;
          snsServiceName: &amp;quot;Complexfilter&amp;quot;,// (initeate sqs)&lt;br /&gt;
          snsTopic: &amp;quot;PorcessComplexfilter_In&amp;quot;// (initeate sqs)&lt;br /&gt;
&lt;br /&gt;
        },&lt;br /&gt;
        stageStatus: &amp;quot;waiting&amp;quot;, //waiting|passed|failed,&lt;br /&gt;
        stageFinishedTimestamp: 111111111,// time that all tests finished and testRecord.stages.{stageKey}.stageStatus updated&lt;br /&gt;
        stageResults: {&lt;br /&gt;
          //results at the point of entering the resource (eg a Lambda function is invoked)&lt;br /&gt;
          inputResult: {&lt;br /&gt;
            resultTimestamp: 111111111,//{time result saved},&lt;br /&gt;
            resultStatus: &amp;quot;passed&amp;quot;,//passed|failed,&lt;br /&gt;
            requestParams: {//event input&lt;br /&gt;
            }&lt;br /&gt;
          },&lt;br /&gt;
          //results at the point of returning from the resource (eg a Lambda function returns)&lt;br /&gt;
          outputResult: {&lt;br /&gt;
            resultTimestamp: 111111111,//{time result saved},&lt;br /&gt;
            resultStatus: &amp;quot;passed&amp;quot;,//passed|failed,&lt;br /&gt;
            requestParams: {//event input&lt;br /&gt;
            }&lt;br /&gt;
          },&lt;br /&gt;
          //results at the point of invoking an external resource (eg the tested Lambda function is invoking another Lambda function)&lt;br /&gt;
          invokes: {&lt;br /&gt;
            &amp;quot;serviceName_resourceType_resourceName_inputEventTag &amp;quot;: {&lt;br /&gt;
              invokeTimestamp: 111111111,//{ time result saved },&lt;br /&gt;
              resultTimestamp: 111111112,//{ time result saved },&lt;br /&gt;
              resultStatus: &amp;quot;passed&amp;quot;,//passed | failed,&lt;br /&gt;
              invokeParams: {},//{event invoke input config }&lt;br /&gt;
              requestParams: {}// event invoke input request&lt;br /&gt;
            },&lt;br /&gt;
          },&lt;br /&gt;
          dynamodbResults: [&lt;br /&gt;
            {&lt;br /&gt;
              indexOfDynamodbOutput: 0,&lt;br /&gt;
              requestParams,&lt;br /&gt;
              resultStatus: &amp;quot;passed&amp;quot;,//&lt;br /&gt;
              resultTimestamp: 22222&lt;br /&gt;
            }]&lt;br /&gt;
&lt;br /&gt;
        },&lt;br /&gt;
        stageErrors: [&lt;br /&gt;
          //misc errors encountered&lt;br /&gt;
        ]&lt;br /&gt;
      }]&lt;br /&gt;
&lt;br /&gt;
  }&lt;br /&gt;
]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Seed Data=&lt;br /&gt;
integrationtest manager seed date 2 process&lt;br /&gt;
&lt;br /&gt;
=== Main Seed Data===&lt;br /&gt;
:Save file in s3 (in &#039;&#039;&#039;buckname&#039;&#039;&#039; :integrationtest-config-us-east-2, &#039;&#039;&#039;folder&#039;&#039;&#039;:seedData_integrationTest).For other dev use service,If a developer wants to add more for other important testing purposes.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;How to use:&#039;&#039;&#039;&lt;br /&gt;
#Add it from the s3 bucket at this point&lt;br /&gt;
#Run batch refreshSeedData [[Developer guide for making Integration Tests#Bash script|batch RefreshSeedData]]&lt;br /&gt;
&#039;&#039;&#039;Logic&#039;&#039;&#039;:Process by storage resouse (graph or dynamodb)&lt;br /&gt;
:To clean up the seed data in the table after it creates seed data form service deploy and pulls seed data from s3.&lt;br /&gt;
&lt;br /&gt;
=== Refresh Seed Data ===&lt;br /&gt;
:ProcessRefreshSeedData use seedDataTag for create data environment of &#039;&#039;&#039;test&#039;&#039;&#039; and can be refresh seeddata re-test agian.&lt;br /&gt;
:&#039;&#039;&#039;canbe share&#039;&#039;&#039; seed data for other test by seed data tag.&lt;br /&gt;
&#039;&#039;&#039;How to use:&#039;&#039;&#039;&lt;br /&gt;
:Save file in s3 (for other dav keep in floder dev name) or testConfig/seedData_config(for admin)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Folder&#039;&#039;&#039;&lt;br /&gt;
*dynamoDBSeedDataTags.json&lt;br /&gt;
*graphSeedDataTags.json&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Example&#039;&#039;&#039;&lt;br /&gt;
==== dynamoDBSeedDataTags ====&lt;br /&gt;
:If set tag in this setting integrationtest is generate seed data. in storage resource dynammodb.&lt;br /&gt;
Example&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;seedDynamodb_abc_ver2&amp;quot;: [ // seedDataTag&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;tableName&amp;quot;: &amp;quot;DelivMethodSTDTestLogicalResultsData&amp;quot;,  // servcieTag+stage+tablename&lt;br /&gt;
      &amp;quot;partitionKey&amp;quot;: &amp;quot;logicalResultId&amp;quot;,&lt;br /&gt;
      &amp;quot;sortKey&amp;quot;: &amp;quot;identifiersId&amp;quot;,&lt;br /&gt;
      &amp;quot;datas&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
          logicalResultId: {&lt;br /&gt;
            value: &amp;quot;eeeeeeeeee4&amp;quot;&lt;br /&gt;
          },&lt;br /&gt;
          identifiersId: {&lt;br /&gt;
            value: &amp;quot;lllll123456&amp;quot;&lt;br /&gt;
          },&lt;br /&gt;
          processLogicalResultExpiryTimestamp: {&lt;br /&gt;
            calcType: &amp;quot;currentTimestampAdjustment&amp;quot;, // can add other types of calculated data in future&lt;br /&gt;
            action: &amp;quot;subtract&amp;quot;, // add|subtract&lt;br /&gt;
            adjustmentInSeconds: 300  // Seconds eg 5 minite = 5*60 = 300 Seconds. or 2 day  = 2*(24*60*60) = 172800&lt;br /&gt;
          }&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
          logicalResultId: {&lt;br /&gt;
            value: &amp;quot;eeeeeeeeee4&amp;quot;&lt;br /&gt;
          },&lt;br /&gt;
          &amp;quot;identifiersId&amp;quot;: {&lt;br /&gt;
            value: &amp;quot;lllll777777&amp;quot;&lt;br /&gt;
          },&lt;br /&gt;
          processLogicalResultExpiryTimestamp: {&lt;br /&gt;
            calcType: &amp;quot;currentTimestampAdjustment&amp;quot;, // can add other types of calculated data in future&lt;br /&gt;
            action: &amp;quot;add&amp;quot;, // add|subtract&lt;br /&gt;
            adjustmentInSeconds: 172800  // Seconds eg 5 minite = 5*60 = 300 Seconds. or 2 day  = 2*(24*60*60) = 172800&lt;br /&gt;
          } &lt;br /&gt;
        }&lt;br /&gt;
      ],&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;tableName&amp;quot;: &amp;quot;MLocationsTestFloatingRelationships&amp;quot;,// servcieTag+stage+tablename&lt;br /&gt;
      &amp;quot;partitionKey&amp;quot;: &amp;quot;importBatchId&amp;quot;,&lt;br /&gt;
      &amp;quot;sortKey&amp;quot;: &amp;quot;identifierRelationshipsId&amp;quot;,&lt;br /&gt;
      &amp;quot;datas&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;importBatchId&amp;quot;: &amp;quot;2-uuuuuuuuuuuuuu&amp;quot;,&lt;br /&gt;
          &amp;quot;identifierRelationshipsId&amp;quot;: &amp;quot;lllll123456&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;importBatchId&amp;quot;: &amp;quot;2-uuuuuuuuuuuuuu&amp;quot;,&lt;br /&gt;
          &amp;quot;identifierRelationshipsId&amp;quot;: &amp;quot;lllll777777&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;importBatchId&amp;quot;: &amp;quot;2-uuuuuuuuuuuuuu&amp;quot;,&lt;br /&gt;
          &amp;quot;identifierRelationshipsId&amp;quot;: &amp;quot;lllll99999999&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
      ]&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;tableName&amp;quot;: &amp;quot;MLocationsTestFindDataMain&amp;quot;,&lt;br /&gt;
      &amp;quot;partitionKey&amp;quot;: &amp;quot;findDataId&amp;quot;,&lt;br /&gt;
      &amp;quot;datas&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;findDataId&amp;quot;: &amp;quot;111111&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;findDataId&amp;quot;: &amp;quot;22222&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;findDataId&amp;quot;: &amp;quot;333333&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
      ]&lt;br /&gt;
    }&lt;br /&gt;
  ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== graphSeedDataTags ====&lt;br /&gt;
:If set tag in this setting integrationtest is generate seed data. in storage resource graphHanler.&lt;br /&gt;
Example&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;seedData_testTag_GG&amp;quot;: [ // seedDataTag&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;nodes&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;nodeLabels&amp;quot;: [&lt;br /&gt;
            &amp;quot;SellOfferPlan_sellOfferPlanDeliveryMethodLink&amp;quot;&lt;br /&gt;
          ],&lt;br /&gt;
          &amp;quot;objectDetail&amp;quot;: {&lt;br /&gt;
            &amp;quot;identifiers&amp;quot;: {&lt;br /&gt;
              &amp;quot;sellOfferPlanDeliveryMethodLinkId&amp;quot;: {&lt;br /&gt;
                &amp;quot;value&amp;quot;: &amp;quot;minttestrefreshSeedData_01&amp;quot;,&lt;br /&gt;
              },&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;fields&amp;quot;: {&lt;br /&gt;
              &amp;quot;productId&amp;quot;: {&lt;br /&gt;
                &amp;quot;value&amp;quot;: &amp;quot;ddddd&amp;quot;,&lt;br /&gt;
              },&lt;br /&gt;
              &amp;quot;price&amp;quot;: {&lt;br /&gt;
                &amp;quot;value&amp;quot;: 9999&lt;br /&gt;
              },&lt;br /&gt;
              exampleTimestamp: {&lt;br /&gt;
                calcType: &amp;quot;currentTimestampAdjustment&amp;quot;, // can add other types of calculated data in future &lt;br /&gt;
                action: &amp;quot;subtract&amp;quot;, // add|subtract&lt;br /&gt;
                adjustmentInSeconds: 300  // Seconds eg 5 minite = 5*60 = 300 Seconds. or 2 day  = 2*(24*60*60) = 172800&lt;br /&gt;
              }&lt;br /&gt;
            }&lt;br /&gt;
          }&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;nodeLabels&amp;quot;: [&lt;br /&gt;
            &amp;quot;servcieMintTest_shoppingMall&amp;quot;&lt;br /&gt;
          ],&lt;br /&gt;
          &amp;quot;objectDetail&amp;quot;: {&lt;br /&gt;
            &amp;quot;identifiers&amp;quot;: {&lt;br /&gt;
              &amp;quot;shoppingMallId&amp;quot;: {&amp;quot;value&amp;quot;:&amp;quot;minttestrefreshSeedData_shoppingMallId&amp;quot;}&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;fields&amp;quot;: {&lt;br /&gt;
              &amp;quot;name&amp;quot;: {&amp;quot;value&amp;quot;:&amp;quot;hotpot-man&amp;quot;},&lt;br /&gt;
              &amp;quot;totalPrice&amp;quot;: {&amp;quot;value&amp;quot;:500}&lt;br /&gt;
            }&lt;br /&gt;
          }&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;nodeLabels&amp;quot;: [&lt;br /&gt;
            &amp;quot;servcieMintTest_shoppingMallCalculateSetting&amp;quot;&lt;br /&gt;
          ],&lt;br /&gt;
          &amp;quot;objectDetail&amp;quot;: {&lt;br /&gt;
            &amp;quot;identifiers&amp;quot;: {&lt;br /&gt;
              &amp;quot;versionedDataId&amp;quot;: {&amp;quot;value&amp;quot;:&amp;quot;minttestrefreshSeedData_versionedDataId&amp;quot;}&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;fields&amp;quot;: {&lt;br /&gt;
              &amp;quot;addToCalculatedValuePerOrder&amp;quot;: {&amp;quot;value&amp;quot;:10},&lt;br /&gt;
              &amp;quot;addToRateTableValuePerOrder&amp;quot;: {&amp;quot;value&amp;quot;:77}&lt;br /&gt;
            }&lt;br /&gt;
          }&lt;br /&gt;
        }&lt;br /&gt;
      ],&lt;br /&gt;
      &amp;quot;relationships&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;fromObject&amp;quot;: {&lt;br /&gt;
            &amp;quot;nodeLabel&amp;quot;: &amp;quot;SellOfferPlan_sellOfferPlanDeliveryMethodLink&amp;quot;,&lt;br /&gt;
            &amp;quot;identifiers&amp;quot;: {&lt;br /&gt;
              &amp;quot;sellOfferPlanDeliveryMethodLinkId&amp;quot;: {&amp;quot;value&amp;quot;:&amp;quot;minttestrefreshSeedData_01&amp;quot;}&lt;br /&gt;
            }&lt;br /&gt;
          },&lt;br /&gt;
          &amp;quot;toObject&amp;quot;: {&lt;br /&gt;
            &amp;quot;nodeLabel&amp;quot;: &amp;quot;servcieMintTest_shoppingMall&amp;quot;,&lt;br /&gt;
            &amp;quot;identifiers&amp;quot;: {&lt;br /&gt;
              &amp;quot;shoppingMallId&amp;quot;: {&amp;quot;value&amp;quot;:&amp;quot;minttestrefreshSeedData_shoppingMallId&amp;quot;}&lt;br /&gt;
            }&lt;br /&gt;
          },&lt;br /&gt;
          &amp;quot;relationships&amp;quot;: [&lt;br /&gt;
            {&lt;br /&gt;
              &amp;quot;relTypeConcat&amp;quot;: &amp;quot;SellOfferPlan_hasCCCCCCC&amp;quot;,&lt;br /&gt;
              &amp;quot;relId&amp;quot;: &amp;quot;uuid-4s56df74s9df79w-w6de4f5w689ef&amp;quot;&lt;br /&gt;
            }&lt;br /&gt;
          ]&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;fromObject&amp;quot;: {&lt;br /&gt;
            &amp;quot;nodeLabel&amp;quot;: &amp;quot;servcieMintTest_shoppingMall&amp;quot;,&lt;br /&gt;
            &amp;quot;identifiers&amp;quot;: {&lt;br /&gt;
              &amp;quot;shoppingMallId&amp;quot;: {&amp;quot;value&amp;quot;:&amp;quot;minttestrefreshSeedData_shoppingMallId&amp;quot;}&lt;br /&gt;
            }&lt;br /&gt;
          },&lt;br /&gt;
          &amp;quot;toObject&amp;quot;: {&lt;br /&gt;
            &amp;quot;nodeLabel&amp;quot;: &amp;quot;servcieMintTest_shoppingMallCalculateSetting&amp;quot;,&lt;br /&gt;
            &amp;quot;identifiers&amp;quot;: {&lt;br /&gt;
              &amp;quot;versionedDataId&amp;quot;: {&amp;quot;value&amp;quot;:&amp;quot;minttestrefreshSeedData_versionedDataId&amp;quot;}&lt;br /&gt;
            }&lt;br /&gt;
          },&lt;br /&gt;
          &amp;quot;relationships&amp;quot;: [&lt;br /&gt;
            {&lt;br /&gt;
              &amp;quot;relTypeConcat&amp;quot;: &amp;quot;servcieMintTest_shoppingMall_currentShoppingMallCalculateSetting&amp;quot;,&lt;br /&gt;
              &amp;quot;relId&amp;quot;: &amp;quot;uuid-s122df5-s21df&amp;quot;,&lt;br /&gt;
              &amp;quot;relationshipProperty&amp;quot;: {&lt;br /&gt;
                &amp;quot;timeStamp&amp;quot;:{&amp;quot;value&amp;quot;: 1234567879},&lt;br /&gt;
                &amp;quot;statusName&amp;quot;: {&amp;quot;value&amp;quot;:true}&lt;br /&gt;
              }&lt;br /&gt;
            },&lt;br /&gt;
            {&lt;br /&gt;
              &amp;quot;relTypeConcat&amp;quot;: &amp;quot;servcieMintTest_shoppingMall_hasShoppingMallCalculateSetting&amp;quot;,&lt;br /&gt;
              &amp;quot;relId&amp;quot;: &amp;quot;uuid-77777-99999&amp;quot;,&lt;br /&gt;
              &amp;quot;relationshipProperties&amp;quot;: {&lt;br /&gt;
                &amp;quot;statusName&amp;quot;: {&lt;br /&gt;
                  &amp;quot;value&amp;quot;: true&lt;br /&gt;
                },&lt;br /&gt;
                exampleTimestamp: {&lt;br /&gt;
                  calcType: &amp;quot;currentTimestampAdjustment&amp;quot;, // can add other types of calculated data in future&lt;br /&gt;
                  action: &amp;quot;subtract&amp;quot;, // add|subtract&lt;br /&gt;
                  adjustmentInSeconds: 300  // Seconds eg 5 minite = 5*60 = 300 Seconds. or 2 day  = 2*(24*60*60) = 172800&lt;br /&gt;
              }&lt;br /&gt;
            }&lt;br /&gt;
          ]&lt;br /&gt;
        }&lt;br /&gt;
      ]&lt;br /&gt;
    }&lt;br /&gt;
  ],&lt;br /&gt;
  &lt;br /&gt;
  &amp;quot;seedData_testTag_LL&amp;quot;: []&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Cleaning Seed Data ===&lt;br /&gt;
:Delete seed data for set environment of &#039;&#039;&#039;test&#039;&#039;&#039;.&lt;br /&gt;
*cleaningeDynamoOneRecordsTags.json&lt;br /&gt;
*cleaningeDynamoManyRecordsTags.json&lt;br /&gt;
&lt;br /&gt;
====cleaningeDynamoOneRecordsTags====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;cleaningSeed_TestFindData_and_Education_case_invalid01&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;tableName&amp;quot;: &amp;quot;MLocationsTestFindDataMain&amp;quot;,&lt;br /&gt;
      &amp;quot;primaryKeys&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;findDataId&amp;quot;: &amp;quot;cleaning-1&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;findDataId&amp;quot;: &amp;quot;cleaning-2&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
      ]&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;tableName&amp;quot;: &amp;quot;MLocationsTestEducation&amp;quot;,&lt;br /&gt;
      &amp;quot;primaryKeys&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;studentId&amp;quot;: &amp;quot;cleaning-AA&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;studentId&amp;quot;: &amp;quot;cleaning-BB&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;studentId&amp;quot;: &amp;quot;cleaning-CC&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
      ]&lt;br /&gt;
    }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;cleaningSeed_TestMemberPersonnel_case_invalid01&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;tableName&amp;quot;: &amp;quot;MLocationsTestMemberPersonnel&amp;quot;,&lt;br /&gt;
      &amp;quot;primaryKeys&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;userId&amp;quot;: &amp;quot;namtan&amp;quot;,&lt;br /&gt;
          &amp;quot;passwordId&amp;quot;: &amp;quot;qqqww&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;userId&amp;quot;: &amp;quot;jack&amp;quot;,&lt;br /&gt;
          &amp;quot;passwordId&amp;quot;: &amp;quot;q1&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;userId&amp;quot;: &amp;quot;Momay&amp;quot;,&lt;br /&gt;
          &amp;quot;passwordId&amp;quot;: &amp;quot;ttr&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
      ]&lt;br /&gt;
    }&lt;br /&gt;
  ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== cleaningeDynamoManyRecordsTags ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;cleaningSeed_manyData_partitionKey_only_miss_sort&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;tableName&amp;quot;: &amp;quot;MLocationsTestMemberPersonnel&amp;quot;,&lt;br /&gt;
      &amp;quot;primaryKeys&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;userId&amp;quot;: &amp;quot;many-data&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
      ]&lt;br /&gt;
    }&lt;br /&gt;
  ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*logic query table MLocationsTestMemberPersonnel use primary Keys &amp;quot;userId&amp;quot; and then delete all data from primary Keys.&lt;br /&gt;
&lt;br /&gt;
=resources=&lt;br /&gt;
syntax is object&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{ &lt;br /&gt;
	&amp;quot;Lambda&amp;quot;:{&lt;br /&gt;
		&amp;quot;{FunctionNameHdrSqs}&amp;quot;:{ // FunctionNameHdrSqs is match resourceName in file tests&lt;br /&gt;
			&amp;quot;localLacation&amp;quot;:&amp;quot;/src/FunctionNameHdrSqs.js&amp;quot;,&lt;br /&gt;
			&amp;quot;localHandler&amp;quot;:&amp;quot;main&amp;quot;, &lt;br /&gt;
			&amp;quot;functionName&amp;quot;:&amp;quot;FunctionNameHdrSqs&amp;quot;	// FunctionName is function name match key of function.yml of servcie.&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;ProcessComplexFilterHdrSqs&amp;quot;:{ &lt;br /&gt;
			&amp;quot;localLacation&amp;quot;:&amp;quot;/src/ProcessComplexFilterHdrSqs.js&amp;quot;, &lt;br /&gt;
			&amp;quot;localHandler&amp;quot;:&amp;quot;main&amp;quot;, &lt;br /&gt;
			&amp;quot;functionName&amp;quot;:&amp;quot;ProcessComplexFilterHdrSqs&amp;quot; &lt;br /&gt;
		},&lt;br /&gt;
		... &lt;br /&gt;
	},&lt;br /&gt;
	&amp;quot;Dynamodb&amp;quot;: {&lt;br /&gt;
		&amp;quot;filterMain&amp;quot;:{ // match resourceName in file tests(dynamodbOutputEventIdentifiers)&lt;br /&gt;
			&amp;quot;tableName&amp;quot;:&amp;quot;filterMain&amp;quot; &lt;br /&gt;
		}, &lt;br /&gt;
		&amp;quot;tableNameBB&amp;quot;:{ &lt;br /&gt;
			&amp;quot;tableName&amp;quot;:&amp;quot;tableNameBB&amp;quot; &lt;br /&gt;
		},&lt;br /&gt;
		... &lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=events=&lt;br /&gt;
Syntax is object&lt;br /&gt;
==Syntax Name==&lt;br /&gt;
===FileName===&lt;br /&gt;
::Event_{inputEventTag}&lt;br /&gt;
&lt;br /&gt;
===eventTag===&lt;br /&gt;
#inputEventTag&lt;br /&gt;
#outputEventTag&lt;br /&gt;
#dynamodbTag&lt;br /&gt;
&lt;br /&gt;
*file events.js is have eventTag  (inputEventTag,outputEventTag,dynamodbTag)&lt;br /&gt;
**How to create name eventTag&lt;br /&gt;
***Example case : &amp;quot;test in service complexFilter functionname ProcessComplexFilter case element type is logical basic&amp;quot;.&lt;br /&gt;
::*&#039;&#039;&#039;inputEventTag&#039;&#039;&#039;&lt;br /&gt;
::::{serviceName}_{functionName}_{caseTest}&lt;br /&gt;
&#039;&#039;Conplexfilter_ProcessComplexFilter_Typelogical_basic&#039;&#039;&lt;br /&gt;
::*&#039;&#039;&#039;outputEventTag&#039;&#039;&#039;&lt;br /&gt;
::::output_{inputEventTag}&lt;br /&gt;
&#039;&#039;output_Conplexfilter_ProcessComplexFilter_Typelogical_basic&#039;&#039;&lt;br /&gt;
::*&#039;&#039;&#039;dynamodbTag&#039;&#039;&#039;&lt;br /&gt;
::::{inputEventTag}__Dynamodb__{&#039;&#039;&#039;action*&#039;&#039;&#039;}_{tableName} &lt;br /&gt;
&#039;&#039;Conplexfilter_ProcessComplexFilter_Typelogical_basic___Dynamodb__putItem_filterMain&#039;&#039;&lt;br /&gt;
: &amp;lt;u&amp;gt;&#039;&#039;&#039;{action}&#039;&#039;&#039; is only &#039;&#039;put&#039;&#039; or &#039;&#039;update&#039;&#039;, and in case of &#039;&#039;update&#039;&#039; must only test the last step of update &amp;lt;/u&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Syntax event===&lt;br /&gt;
====initiate by handlerServcie====&lt;br /&gt;
=====Sqs=====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
// An example input and output event of Sns&lt;br /&gt;
{&lt;br /&gt;
   &amp;quot;LambdaFunctionHdrSqs_input__pass&amp;quot;:{&lt;br /&gt;
      &amp;quot;properties&amp;quot;:{&lt;br /&gt;
         &amp;quot;propertyA&amp;quot;:{&lt;br /&gt;
            &amp;quot;value&amp;quot;:&amp;quot;valueProperty1&amp;quot;&lt;br /&gt;
         },&lt;br /&gt;
         &amp;quot;propertyB&amp;quot;:{&lt;br /&gt;
            &amp;quot;properties&amp;quot;:{&lt;br /&gt;
               &amp;quot;propertyB1&amp;quot;:{&lt;br /&gt;
                  &amp;quot;value&amp;quot;:&amp;quot;valuePropertyB1&amp;quot;&lt;br /&gt;
               }&lt;br /&gt;
            }&lt;br /&gt;
         },&lt;br /&gt;
         &amp;quot;propertyC&amp;quot;:{&lt;br /&gt;
            &amp;quot;eventValue&amp;quot;:[&lt;br /&gt;
               &amp;quot;valuePropertyC1&amp;quot;,&lt;br /&gt;
               &amp;quot;valuePropertyC2&amp;quot;,&lt;br /&gt;
               &amp;quot;valuePropertyC3&amp;quot;&lt;br /&gt;
            ]&lt;br /&gt;
         }&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;snsSqsTrigger&amp;quot;:true,&lt;br /&gt;
      &amp;quot;messageAttributes&amp;quot;:{&lt;br /&gt;
            &amp;quot;msgTag&amp;quot;:{&lt;br /&gt;
               &amp;quot;value&amp;quot;:&amp;quot;msgTag&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;propertyD&amp;quot;:{&lt;br /&gt;
               &amp;quot;value&amp;quot;:&amp;quot;valuePropertyD&amp;quot;&lt;br /&gt;
            }&lt;br /&gt;
      }&lt;br /&gt;
   },&lt;br /&gt;
   {&lt;br /&gt;
      &amp;quot;output_LambdaFunctionHdrSqs_pass&amp;quot;:{&lt;br /&gt;
         &amp;quot;properties&amp;quot;:{&lt;br /&gt;
            &amp;quot;propertyA&amp;quot;:{&lt;br /&gt;
               &amp;quot;value&amp;quot;:&amp;quot;valueProperty1&amp;quot;&lt;br /&gt;
            }&lt;br /&gt;
         }&lt;br /&gt;
      }&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot; linein&amp;gt;&lt;br /&gt;
&amp;quot;snsSqsTrigger&amp;quot;:true&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Dsq=====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
// An example input and output event of Direct Sqs&lt;br /&gt;
{&lt;br /&gt;
   &amp;quot;LambdaFunctionHdrDsq_input__pass&amp;quot;:{&lt;br /&gt;
      &amp;quot;forStageMatching&amp;quot;:true,&lt;br /&gt;
      &amp;quot;properties&amp;quot;:{&lt;br /&gt;
         &amp;quot;propertyA&amp;quot;:{&lt;br /&gt;
            &amp;quot;forStageMatching&amp;quot;:true,&lt;br /&gt;
            &amp;quot;value&amp;quot;:&amp;quot;valueProperty1&amp;quot;&lt;br /&gt;
         },&lt;br /&gt;
         &amp;quot;propertyB&amp;quot;:{&lt;br /&gt;
            &amp;quot;forStageMatching&amp;quot;:true,&lt;br /&gt;
            &amp;quot;properties&amp;quot;:{&lt;br /&gt;
               &amp;quot;propertyB1&amp;quot;:{&lt;br /&gt;
                  &amp;quot;forStageMatching&amp;quot;:true,&lt;br /&gt;
                  &amp;quot;value&amp;quot;:&amp;quot;valuePropertyB1&amp;quot;&lt;br /&gt;
               }&lt;br /&gt;
            }&lt;br /&gt;
         },&lt;br /&gt;
         &amp;quot;propertyC&amp;quot;:{&lt;br /&gt;
            &amp;quot;eventValue&amp;quot;:[&lt;br /&gt;
               &amp;quot;valuePropertyC1&amp;quot;,&lt;br /&gt;
               &amp;quot;valuePropertyC2&amp;quot;,&lt;br /&gt;
               &amp;quot;valuePropertyC3&amp;quot;&lt;br /&gt;
            ]&lt;br /&gt;
         }&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;DirectSqs&amp;quot;:true,&lt;br /&gt;
      &amp;quot;messageAttributes&amp;quot;:{&lt;br /&gt;
         &amp;quot;msgTag&amp;quot;:{&lt;br /&gt;
           &amp;quot;forStageMatching&amp;quot;:true,&lt;br /&gt;
           &amp;quot;value&amp;quot;:&amp;quot;msgTag&amp;quot;&lt;br /&gt;
          },&lt;br /&gt;
          &amp;quot;propertyD&amp;quot;:{&lt;br /&gt;
           &amp;quot;forStageMatching&amp;quot;:true,&lt;br /&gt;
           &amp;quot;value&amp;quot;:&amp;quot;valuePropertyD&amp;quot;&lt;br /&gt;
          }&lt;br /&gt;
      }&lt;br /&gt;
   },&lt;br /&gt;
   {&lt;br /&gt;
      &amp;quot;output_LambdaFunctionHdrDsq_pass&amp;quot;:{&lt;br /&gt;
         &amp;quot;forStageMatching&amp;quot;:true,&lt;br /&gt;
         &amp;quot;properties&amp;quot;:{&lt;br /&gt;
            &amp;quot;propertyA&amp;quot;:{&lt;br /&gt;
               &amp;quot;forStageMatching&amp;quot;:true,&lt;br /&gt;
               &amp;quot;value&amp;quot;:&amp;quot;valueProperty1&amp;quot;&lt;br /&gt;
            }&lt;br /&gt;
         }&lt;br /&gt;
      }&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* DirectSqs = true &lt;br /&gt;
:: for initialStage of Dsq&lt;br /&gt;
* messageAttributes is optional&lt;br /&gt;
&lt;br /&gt;
=====Inv=====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;LambdaFunctionHdrInv_input__pass&amp;quot;:{&lt;br /&gt;
     &amp;quot;forStageMatching&amp;quot;:true,&lt;br /&gt;
     &amp;quot;properties&amp;quot;:{&lt;br /&gt;
        &amp;quot;propertyA&amp;quot;:{&lt;br /&gt;
           &amp;quot;forStageMatching&amp;quot;:true,&lt;br /&gt;
           &amp;quot;value&amp;quot;:&amp;quot;valueProperty1&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;propertyB&amp;quot;:{&lt;br /&gt;
           &amp;quot;forStageMatching&amp;quot;:true,&lt;br /&gt;
           &amp;quot;properties&amp;quot;:{&lt;br /&gt;
              &amp;quot;propertyB1&amp;quot;:{&lt;br /&gt;
                 &amp;quot;forStageMatching&amp;quot;:true,&lt;br /&gt;
                 &amp;quot;value&amp;quot;:&amp;quot;valuePropertyB1&amp;quot;&lt;br /&gt;
              }&lt;br /&gt;
           }&lt;br /&gt;
        }&lt;br /&gt;
     }&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
        &amp;quot;output_LambdaFunctionHdrInv_pass&amp;quot;:{&lt;br /&gt;
           &amp;quot;forStageMatching&amp;quot;:true,&lt;br /&gt;
           &amp;quot;properties&amp;quot;:{&lt;br /&gt;
              &amp;quot;propertyA&amp;quot;:{&lt;br /&gt;
                 &amp;quot;forStageMatching&amp;quot;:true,&lt;br /&gt;
                 &amp;quot;value&amp;quot;:&amp;quot;valueProperty1&amp;quot;&lt;br /&gt;
              }&lt;br /&gt;
           }&lt;br /&gt;
        }&lt;br /&gt;
     }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Api=====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
// An example input and output event of API&lt;br /&gt;
{&lt;br /&gt;
	&amp;quot;LambdaFunctionHdrApi_input__pass_notTestAuthorizer&amp;quot;: { &lt;br /&gt;
		&amp;quot;forstageMatvhing&amp;quot;: true, &lt;br /&gt;
		&amp;quot;properties&amp;quot;: { &lt;br /&gt;
			&amp;quot;body&amp;quot;: { &lt;br /&gt;
				&amp;quot;properties&amp;quot;: { &lt;br /&gt;
					&amp;quot;propertyA&amp;quot;: { &lt;br /&gt;
						&amp;quot;testValueMatches&amp;quot;: false, &lt;br /&gt;
						&amp;quot;value&amp;quot;: &amp;quot;valueProperty1&amp;quot;, &lt;br /&gt;
					}, &lt;br /&gt;
					&amp;quot;propertyB&amp;quot;: { &lt;br /&gt;
						&amp;quot;properties&amp;quot;: { &lt;br /&gt;
							&amp;quot;propertyB1&amp;quot;: { &lt;br /&gt;
								&amp;quot;value&amp;quot;: &amp;quot;valuePropertyB1&amp;quot;, &lt;br /&gt;
							} &lt;br /&gt;
						} &lt;br /&gt;
					}, &lt;br /&gt;
					&amp;quot;propertyC&amp;quot;: { &lt;br /&gt;
						&amp;quot;eventValue&amp;quot;: [ &lt;br /&gt;
							&amp;quot;valuePropertyC1&amp;quot;, &lt;br /&gt;
							&amp;quot;valuePropertyC2&amp;quot;, &lt;br /&gt;
							&amp;quot;valuePropertyC3&amp;quot;, &lt;br /&gt;
						] &lt;br /&gt;
					},&lt;br /&gt;
					... &lt;br /&gt;
				} &lt;br /&gt;
			} &lt;br /&gt;
		}&lt;br /&gt;
	}, &lt;br /&gt;
	&amp;quot;Output_LambdaFunctionHdrApi_input__pass_notTestAuthorizer&amp;quot;: { &lt;br /&gt;
		&amp;quot;properties&amp;quot;: { &lt;br /&gt;
			&amp;quot;body&amp;quot;: { &lt;br /&gt;
				&amp;quot;properties&amp;quot;: { &lt;br /&gt;
					&amp;quot;propertyA&amp;quot;: { &lt;br /&gt;
						&amp;quot;testValueMatches&amp;quot;: false, &lt;br /&gt;
						&amp;quot;value&amp;quot;: &amp;quot;valueProperty1&amp;quot;&lt;br /&gt;
					}, &lt;br /&gt;
					...&lt;br /&gt;
				} &lt;br /&gt;
			} &lt;br /&gt;
		}  &lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====S3=====&lt;br /&gt;
&lt;br /&gt;
====dynamodb====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
// An example event of Dynamodb //optional &lt;br /&gt;
{&lt;br /&gt;
	{inputEventTag}__dynamodb_{action}_{tablename}: { // eg. &amp;quot;Complexfilter_ProcessComplexfilter_logical_basic__dynamodb_update_FilterMain&amp;quot;&lt;br /&gt;
	&amp;quot;forStageMatching&amp;quot;: true,&lt;br /&gt;
     &amp;quot;properties&amp;quot;: {&lt;br /&gt;
        &amp;quot;filterMainUniqueRequestId&amp;quot;: {&lt;br /&gt;
          &amp;quot;testValueMatches&amp;quot;: fase,&lt;br /&gt;
          &amp;quot;value&amp;quot;: &amp;quot;bbc4f4a9-2032-4dec-9129-8c7d169fecc5&amp;quot;&lt;br /&gt;
         },&lt;br /&gt;
        &amp;quot;filterObject&amp;quot;: {&lt;br /&gt;
        &amp;quot;forStageMatching&amp;quot;: true,&lt;br /&gt;
        &amp;quot;properties&amp;quot;: {&lt;br /&gt;
          &amp;quot;logicalType&amp;quot;: {&lt;br /&gt;
            &amp;quot;value&amp;quot;: &amp;quot;partitionKey&amp;quot;&lt;br /&gt;
          },&lt;br /&gt;
          &amp;quot;comparison&amp;quot;: {&lt;br /&gt;
            &amp;quot;value&amp;quot;: &amp;quot;equals&amp;quot;&lt;br /&gt;
          },&lt;br /&gt;
          &amp;quot;type&amp;quot;: {&lt;br /&gt;
            &amp;quot;value&amp;quot;: &amp;quot;logical&amp;quot;&lt;br /&gt;
          },&lt;br /&gt;
          &amp;quot;partitionKey&amp;quot;: {&lt;br /&gt;
            &amp;quot;forStageMatching&amp;quot;: true,&lt;br /&gt;
            &amp;quot;value&amp;quot;: &amp;quot;mockIntegratioTestCPF&amp;quot;&lt;br /&gt;
          }&lt;br /&gt;
        }&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;filterMainExpiryTime&amp;quot;: {&lt;br /&gt;
        &amp;quot;testValueMatches&amp;quot;: fase,&lt;br /&gt;
        &amp;quot;value&amp;quot;: 1731980802858&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;filterMainStatus&amp;quot;: {&lt;br /&gt;
       &amp;quot;forStageMatching&amp;quot;: true,&lt;br /&gt;
        &amp;quot;value&amp;quot;: &amp;quot;processing&amp;quot;&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;createTime&amp;quot;: {&lt;br /&gt;
        &amp;quot;testValueMatches&amp;quot;: fase,&lt;br /&gt;
        &amp;quot;value&amp;quot;: 1731894402678&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;objType&amp;quot;: {&lt;br /&gt;
        &amp;quot;forStageMatching&amp;quot;: true,&lt;br /&gt;
        &amp;quot;properties&amp;quot;: {&lt;br /&gt;
          &amp;quot;serviceTag&amp;quot;: {&lt;br /&gt;
            &amp;quot;forStageMatching&amp;quot;: true,&lt;br /&gt;
            &amp;quot;value&amp;quot;: &amp;quot;IntTesting&amp;quot;&lt;br /&gt;
          },&lt;br /&gt;
          &amp;quot;objectType&amp;quot;: {&lt;br /&gt;
            &amp;quot;forStageMatching&amp;quot;: true,&lt;br /&gt;
            &amp;quot;value&amp;quot;: &amp;quot;TestRecord&amp;quot;&lt;br /&gt;
          }&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;keyValues&amp;quot;: {&lt;br /&gt;
      &amp;quot;filterMainId&amp;quot;: &amp;quot;4865d2451a621cb7f71225cfabf2df4f98e20801&amp;quot;,&lt;br /&gt;
      &amp;quot;objTypeId&amp;quot;: &amp;quot;cdb170690571df7522b3850920fce02507c077ee&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
	} &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* partition key: filterMainId&lt;br /&gt;
* sort key: objTypeId&lt;br /&gt;
&lt;br /&gt;
[[2021-01-15 - Integration Testing - Adding DynamoDB result tests]]&lt;br /&gt;
&lt;br /&gt;
===Type paramiter===&lt;br /&gt;
use for evnet and dyanmodb event&lt;br /&gt;
====Normal====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 object: {&lt;br /&gt;
  forStageMatching: true,&lt;br /&gt;
  properties: {&lt;br /&gt;
    name:{&lt;br /&gt;
     forStageMatching: true,&lt;br /&gt;
     value:&amp;quot;Tom&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
   }&lt;br /&gt;
 },&lt;br /&gt;
 array: {&lt;br /&gt;
  forStageMatching: true,&lt;br /&gt;
  useIsEqual: true,&lt;br /&gt;
  eventValue: [&lt;br /&gt;
   {&lt;br /&gt;
     &amp;quot;relTypeAndDirection&amp;quot;: {&lt;br /&gt;
       &amp;quot;relType&amp;quot;: {&lt;br /&gt;
         &amp;quot;serviceTag&amp;quot;: &amp;quot;maxxCart2&amp;quot;,&lt;br /&gt;
         &amp;quot;relationshipTag&amp;quot;: &amp;quot;hasCartOrder&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;relationshipDirection&amp;quot;: &amp;quot;from&amp;quot;&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;targetObjects&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;objType&amp;quot;: {&lt;br /&gt;
           &amp;quot;serviceTag&amp;quot;: &amp;quot;maxxCart2&amp;quot;,&lt;br /&gt;
           &amp;quot;objectType&amp;quot;: &amp;quot;cartOrder&amp;quot;&lt;br /&gt;
          }&lt;br /&gt;
        }&lt;br /&gt;
      ]&lt;br /&gt;
    }&lt;br /&gt;
  ]&lt;br /&gt;
 },&lt;br /&gt;
 number: {&lt;br /&gt;
  forStageMatching: true,&lt;br /&gt;
  value: 1111&lt;br /&gt;
 },&lt;br /&gt;
 string: {&lt;br /&gt;
  forStageMatching: true,&lt;br /&gt;
  value: &amp;quot;hi&amp;quot;&lt;br /&gt;
 },&lt;br /&gt;
 boolean: {&lt;br /&gt;
  forStageMatching: true,&lt;br /&gt;
  value: true&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
 forStageMatching: true&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
::set true for check match value,It is not necessary to set every value&lt;br /&gt;
:::use in test importent paramiter&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
testValueMatches:false&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
::setting paramiter require on create but can not test random value eg: identifier or timeStamp or uuid&lt;br /&gt;
&lt;br /&gt;
====Empty====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
 EmptyString:{&lt;br /&gt;
forStageMatching: true,&lt;br /&gt;
  value:&amp;quot;&amp;quot;&lt;br /&gt;
 },&lt;br /&gt;
 EmptyArray:{&lt;br /&gt;
   forStageMatching: true,&lt;br /&gt;
   useIsEqual: true,&lt;br /&gt;
   eventValue: []&lt;br /&gt;
 },&lt;br /&gt;
 EmptyObject:{&lt;br /&gt;
  forStageMatching: true,&lt;br /&gt;
  value:{}&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Error====&lt;br /&gt;
can test noRetryError&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;quot;errorMessage&amp;quot;: {&lt;br /&gt;
    forStageMatching: true,&lt;br /&gt;
    &amp;quot;value&amp;quot;: &amp;quot;Not found schema of {serviceTag:TestGraphHandler, objectType:notFoundObjType}&amp;quot;&lt;br /&gt;
   }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Paramiter random====&lt;br /&gt;
Can not test case random numbber or uuid.&lt;br /&gt;
But requriOnCreate mush be set &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
testValueMatches:false&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
or set&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
forStageMatching:false&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=tests=&lt;br /&gt;
Syntax is array of object&lt;br /&gt;
==Syntax name== &lt;br /&gt;
===Testtag name ===&lt;br /&gt;
*{integrationTestTag}&lt;br /&gt;
#Test Own servcie or not a lot stage&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
Test_{inputEventTag}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
#Mix multiple servcie and multiple stage&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt; &lt;br /&gt;
IntegrationTest_{inputEventTag}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===File name ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt; &lt;br /&gt;
{integrationTestTag}.json&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Setting of test==&lt;br /&gt;
[[Service - Integration Test Config#tests.js Syntax|syntax test]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
            integrationTestTag: {integrationTestTag},&lt;br /&gt;
            productionSafe: true|false, //default false&lt;br /&gt;
            noInitialStage: true, // default false, if set to true, no error when no foundInitialStages found&lt;br /&gt;
            errorIfStageUndefined: true|false, //default false&lt;br /&gt;
            errorIfInvokeUndefined: true|false, //default false,&lt;br /&gt;
            dynamoDBSeedDataTags:[&amp;quot;seedDataDB_test_case_xx&amp;quot;], //[seedDataTag] optional if have seed data for test&lt;br /&gt;
            graphSeedDataTags:[&amp;quot;seedDataGraph_test_case_xx&amp;quot;], //[seedDataTag] optional if have seed data for test&lt;br /&gt;
            cleaningeDynamoOneRecordsTags: [&amp;quot;cleaningSeed_partitionKey_sortKey_normol&amp;quot;], //optional&lt;br /&gt;
            cleaningeDynamoManyRecordsTags: [], // optional&lt;br /&gt;
            stages:[&lt;br /&gt;
               ...&lt;br /&gt;
            ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
*[[2025-11-20 IntegrationTest#dynamoDBSeedDataTags|dynamoDBSeedDataTags]]&lt;br /&gt;
*[[2025-11-20 IntegrationTest#graphSeedDataTags|graphSeedDataTags]]&lt;br /&gt;
*[[2025-11-20 IntegrationTest#cleaningeDynamoOneRecordsTags|cleaningeDynamoOneRecordsTags]]&lt;br /&gt;
*[[2025-11-20 IntegrationTest#cleaningeDynamoManyRecordsTags|cleaningeDynamoManyRecordsTags]]&lt;br /&gt;
&lt;br /&gt;
==Stages==&lt;br /&gt;
====Initiate stage====&lt;br /&gt;
:&#039;&#039;&#039;&amp;quot;initialStage&amp;quot;:true&#039;&#039;&#039;&lt;br /&gt;
[[Service_-_Integration_Test_Config#tests.js Syntax|detail property of test]]&lt;br /&gt;
=====HandlerService=====&lt;br /&gt;
======Sqs======&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;quot;stages&amp;quot;:[&lt;br /&gt;
         {&lt;br /&gt;
            &amp;quot;initialStage&amp;quot;:true,&lt;br /&gt;
            &amp;quot;inputEventTag&amp;quot;:&amp;quot;Locations_ProcessLocationNodeSomting_casenotHaveData&amp;quot;,&lt;br /&gt;
            &amp;quot;serviceName&amp;quot;:&amp;quot;Locations&amp;quot;,&lt;br /&gt;
            &amp;quot;resourceType&amp;quot;:&amp;quot;Lambda&amp;quot;,&lt;br /&gt;
            &amp;quot;resourceName&amp;quot;:&amp;quot;ProcessLocationNodeSomtingHdrDsq&amp;quot;,&lt;br /&gt;
            &amp;quot;outputEventTag&amp;quot;:&amp;quot;Output_Locations_ProcessLocationNodeSomting_casenotHaveData&amp;quot;&lt;br /&gt;
         }&lt;br /&gt;
      ]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
======Dsq======&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
stages: [&lt;br /&gt;
        {&lt;br /&gt;
          initialStage: true,&lt;br /&gt;
          inputEventTag: &#039;LambdaFunctionHdrDsq_input_singleStage_directSqs__pass&#039;,&lt;br /&gt;
          serviceName: &#039;ServiceTemplate&#039;,&lt;br /&gt;
          resourceType: &#039;Lambda&#039;,&lt;br /&gt;
          resourceName: &#039;LambdaFunctionHdrDsq&#039;,&lt;br /&gt;
          outputEventTag: &#039;LambdaFunctionHdrDsq_output__returnvalue_pass&#039;,&lt;br /&gt;
          // **** not set snsServiceName and snsTopic&lt;br /&gt;
          // can be test dynamodbOutput&lt;br /&gt;
        }&lt;br /&gt;
      ]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
======Api======&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;quot;stages&amp;quot;:[&lt;br /&gt;
    {&lt;br /&gt;
       &amp;quot;initialStage&amp;quot;:true,&lt;br /&gt;
       &amp;quot;inputEventTag&amp;quot;:&amp;quot;LambdaFunctionHdrApi_input__pass&amp;quot;,&lt;br /&gt;
       &amp;quot;serviceName&amp;quot;:&amp;quot;ServiceTemplate&amp;quot;,&lt;br /&gt;
       &amp;quot;resourceType&amp;quot;:&amp;quot;Lambda&amp;quot;,&lt;br /&gt;
       &amp;quot;resourceName&amp;quot;:&amp;quot;LambdaFunctionHdrApi&amp;quot;,&lt;br /&gt;
       &amp;quot;outputEventTag&amp;quot;:&amp;quot;LambdaFunctionHdrApi_output__pass&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
======Inv======&lt;br /&gt;
*&#039;&#039;&#039;single stage&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
[{&lt;br /&gt;
   &amp;quot;integrationTestTag&amp;quot;:&amp;quot;LambdaFunctionHdrInv__pass&amp;quot;,&lt;br /&gt;
   &amp;quot;productionSafe&amp;quot;:false,&lt;br /&gt;
   &amp;quot;errorIfStageUndefined&amp;quot;:false,&lt;br /&gt;
   &amp;quot;errorIfInvokeUndefined&amp;quot;:false,&lt;br /&gt;
   &amp;quot;dynamoDBSeedDataTags&amp;quot;:[&amp;quot;seedDataDB_test_case_xx&amp;quot;], //[seedDataTag] optional if have seed data for test&lt;br /&gt;
   &amp;quot;graphSeedDataTags&amp;quot;:[&amp;quot;seedDataGraph_test_case_xx&amp;quot;], //[seedDataTag] optional if have seed data for test&lt;br /&gt;
   &amp;quot;cleaningeDynamoOneRecordsTags&amp;quot;: [&amp;quot;cleaningSeed_partitionKey_sortKey_normol&amp;quot;], //optional&lt;br /&gt;
   &amp;quot;cleaningeDynamoManyRecordsTags&amp;quot;: []&lt;br /&gt;
   &amp;quot;stages&amp;quot;:[&lt;br /&gt;
      {&lt;br /&gt;
         &amp;quot;initialStage&amp;quot;:true,&lt;br /&gt;
         &amp;quot;inputEventTag&amp;quot;:&amp;quot;LambdaFunctionHdrInv_input__pass&amp;quot;,&lt;br /&gt;
         &amp;quot;serviceName&amp;quot;:&amp;quot;ServiceTemplate&amp;quot;,&lt;br /&gt;
         &amp;quot;resourceType&amp;quot;:&amp;quot;Lambda&amp;quot;,&lt;br /&gt;
         &amp;quot;resourceName&amp;quot;:&amp;quot;LambdaFunctionHdrInv&amp;quot;,&lt;br /&gt;
         &amp;quot;outputEventTag&amp;quot;:&amp;quot;LambdaFunctionHdrInv_output__pass&amp;quot;&lt;br /&gt;
      }&lt;br /&gt;
   ]&lt;br /&gt;
}]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;invoke multiple stage&#039;&#039;&#039; &lt;br /&gt;
:*Each stage test can invoke multiple lambda by use &amp;quot;eventStage Tag&amp;quot; point to stage for test integration test.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
[{&lt;br /&gt;
   &amp;quot;integrationTestTag&amp;quot;:&amp;quot;LambdaFunctionHdrInv_invokes__pass&amp;quot;,&lt;br /&gt;
   &amp;quot;productionSafe&amp;quot;:false,&lt;br /&gt;
   &amp;quot;errorIfStageUndefined&amp;quot;:false,&lt;br /&gt;
   &amp;quot;errorIfInvokeUndefined&amp;quot;:false,&lt;br /&gt;
   &amp;quot;dynamoDBSeedDataTags&amp;quot;:[], //[seedDataTag] optional if have seed data for test&lt;br /&gt;
   &amp;quot;graphSeedDataTags&amp;quot;:[], //[seedDataTag] optional if have seed data for test&lt;br /&gt;
   &amp;quot;cleaningeDynamoOneRecordsTags&amp;quot;: [], //optional&lt;br /&gt;
   &amp;quot;cleaningeDynamoManyRecordsTags&amp;quot;: [], // optional&lt;br /&gt;
   &amp;quot;stages&amp;quot;:[&lt;br /&gt;
      {&lt;br /&gt;
         &amp;quot;initialStage&amp;quot;:true,&lt;br /&gt;
         &amp;quot;inputEventTag&amp;quot;:&amp;quot;LambdaFunctionHdrInv_input__pass&amp;quot;,&lt;br /&gt;
         &amp;quot;serviceName&amp;quot;:&amp;quot;ServiceTemplate&amp;quot;,&lt;br /&gt;
         &amp;quot;resourceType&amp;quot;:&amp;quot;Lambda&amp;quot;,&lt;br /&gt;
         &amp;quot;resourceName&amp;quot;:&amp;quot;LambdaFunctionHdrInv&amp;quot;,&lt;br /&gt;
         &amp;quot;outputEventTag&amp;quot;:&amp;quot;LambdaFunctionHdrInv_output__pass&amp;quot;,&lt;br /&gt;
         &amp;quot;invokes&amp;quot;:[&lt;br /&gt;
            {&lt;br /&gt;
               &amp;quot;eventStageTag&amp;quot;:&amp;quot;service_invokesB__pass&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            {&lt;br /&gt;
               &amp;quot;eventStageTag&amp;quot;:&amp;quot;service_invokesD__pass&amp;quot;&lt;br /&gt;
            }&lt;br /&gt;
         ]&lt;br /&gt;
      },&lt;br /&gt;
      {&lt;br /&gt;
         &amp;quot;eventStageTag&amp;quot;:&amp;quot;service_invokesB__pass&amp;quot;,&lt;br /&gt;
         &amp;quot;inputEventTag&amp;quot;:&amp;quot;input_service_invokes__pass&amp;quot;,&lt;br /&gt;
         &amp;quot;serviceName&amp;quot;:&amp;quot;ServiceTemplate_B&amp;quot;,&lt;br /&gt;
         &amp;quot;resourceType&amp;quot;:&amp;quot;Lambda&amp;quot;,&lt;br /&gt;
         &amp;quot;resourceName&amp;quot;:&amp;quot;LambdaFunction_B_HdrInv&amp;quot;,&lt;br /&gt;
         &amp;quot;outputEventTag&amp;quot;:&amp;quot;output_service_invokes__pass&amp;quot;&lt;br /&gt;
      },&lt;br /&gt;
      {&lt;br /&gt;
         &amp;quot;eventStageTag&amp;quot;:&amp;quot;service_invokesD__pass&amp;quot;,&lt;br /&gt;
         &amp;quot;inputEventTag&amp;quot;:&amp;quot;input_service_invokesD__pass&amp;quot;,&lt;br /&gt;
         &amp;quot;serviceName&amp;quot;:&amp;quot;ServiceTemplate_D&amp;quot;,&lt;br /&gt;
         &amp;quot;resourceType&amp;quot;:&amp;quot;Lambda&amp;quot;,&lt;br /&gt;
         &amp;quot;resourceName&amp;quot;:&amp;quot;LambdaFunction_D_HdrInv&amp;quot;,&lt;br /&gt;
         &amp;quot;outputEventTag&amp;quot;:&amp;quot;output_service_invokesD__pass&amp;quot;&lt;br /&gt;
      }&lt;br /&gt;
   ]&lt;br /&gt;
}]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
======S3======&lt;br /&gt;
======Batch======&lt;br /&gt;
&lt;br /&gt;
====GeneratedSeedData====&lt;br /&gt;
*Integrationtest must be delete identifier every time before test.&lt;br /&gt;
*Set &#039;generatedSeedData&#039; in file tests.json case by case of stage eg: stages[0] create identifier is randomOnCreate will set &#039;generatedSeedData&#039; and stages[1] create relationship is randomOnCreate(It is usually random, except in the case of relationship version) set generatedSeedData this stages[1].&lt;br /&gt;
*How to delete case identifier rendomOnCreate?: set in stage use setting generateSeedData &amp;quot;randomOnCreateIdentifier&amp;quot;&lt;br /&gt;
#randomOnCreateIdentifier&lt;br /&gt;
#notRandomOnIdentifier&lt;br /&gt;
#relationships&lt;br /&gt;
=====randomOnCreateIdentifier=====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;quot;stages&amp;quot;: [&lt;br /&gt;
      {&lt;br /&gt;
        &amp;quot;initialStage&amp;quot;: true,&lt;br /&gt;
        &amp;quot;inputEventTag&amp;quot;: &amp;quot;MLocation_CreateHdrSqs__case_NodeVersionData_Jaya&amp;quot;,&lt;br /&gt;
        &amp;quot;serviceTag&amp;quot;: &amp;quot;MLocations&amp;quot;,&lt;br /&gt;
        &amp;quot;resourceType&amp;quot;: &amp;quot;Lambda&amp;quot;,&lt;br /&gt;
        &amp;quot;resourceName&amp;quot;: &amp;quot;CreateHdrSqs&amp;quot;,&lt;br /&gt;
        &amp;quot;snsServiceName&amp;quot;: &amp;quot;MLocations&amp;quot;,&lt;br /&gt;
        &amp;quot;snsTopic&amp;quot;: &amp;quot;Create_In&amp;quot;,&lt;br /&gt;
        &amp;quot;generatedSeedData&amp;quot;: {&lt;br /&gt;
          &amp;quot;randomOnCreateIdentifier&amp;quot;: [&lt;br /&gt;
            {&lt;br /&gt;
              &amp;quot;objType&amp;quot;: {&lt;br /&gt;
                &amp;quot;serviceTag&amp;quot;: &amp;quot;MLocations&amp;quot;,&lt;br /&gt;
                &amp;quot;objectType&amp;quot;: &amp;quot;Member&amp;quot;&lt;br /&gt;
              },&lt;br /&gt;
              &amp;quot;identifierValue&amp;quot;: &amp;quot;Jaya-member-001&amp;quot;&lt;br /&gt;
            }&lt;br /&gt;
          ]&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
=====notRandomOnIdentifier=====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;quot;stages&amp;quot;: [&lt;br /&gt;
      {&lt;br /&gt;
        &amp;quot;initialStage&amp;quot;: true,&lt;br /&gt;
        &amp;quot;inputEventTag&amp;quot;: &amp;quot;MLocation_CreateHdrSqs__case_NodeVersionData_Jaya&amp;quot;,&lt;br /&gt;
        &amp;quot;serviceTag&amp;quot;: &amp;quot;MLocations&amp;quot;,&lt;br /&gt;
        &amp;quot;resourceType&amp;quot;: &amp;quot;Lambda&amp;quot;,&lt;br /&gt;
        &amp;quot;resourceName&amp;quot;: &amp;quot;CreateHdrSqs&amp;quot;,&lt;br /&gt;
        &amp;quot;snsServiceName&amp;quot;: &amp;quot;MLocations&amp;quot;,&lt;br /&gt;
        &amp;quot;snsTopic&amp;quot;: &amp;quot;Create_In&amp;quot;,&lt;br /&gt;
        &amp;quot;generatedSeedData&amp;quot;: {&lt;br /&gt;
          &amp;quot;notRandomOnIdentifier&amp;quot;: [&lt;br /&gt;
            {&lt;br /&gt;
              &amp;quot;objType&amp;quot;: {&lt;br /&gt;
                &amp;quot;serviceTag&amp;quot;: &amp;quot;gggg&amp;quot;,&lt;br /&gt;
                &amp;quot;objectType&amp;quot;: &amp;quot;ssssss&amp;quot;&lt;br /&gt;
              },&lt;br /&gt;
              &amp;quot;identifiers&amp;quot;: {&lt;br /&gt;
                &amp;quot;topId&amp;quot;: &amp;quot;123456&amp;quot;&lt;br /&gt;
              }&lt;br /&gt;
            }&lt;br /&gt;
          ]&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    ]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
=====relationships=====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;quot;stages&amp;quot;: [&lt;br /&gt;
      {&lt;br /&gt;
        &amp;quot;initialStage&amp;quot;: true,&lt;br /&gt;
        &amp;quot;inputEventTag&amp;quot;: &amp;quot;MLocation_CreateHdrSqs__case_NodeVersionData_Jaya&amp;quot;,&lt;br /&gt;
        &amp;quot;serviceTag&amp;quot;: &amp;quot;MLocations&amp;quot;,&lt;br /&gt;
        &amp;quot;resourceType&amp;quot;: &amp;quot;Lambda&amp;quot;,&lt;br /&gt;
        &amp;quot;resourceName&amp;quot;: &amp;quot;CreateHdrSqs&amp;quot;,&lt;br /&gt;
        &amp;quot;snsServiceName&amp;quot;: &amp;quot;MLocations&amp;quot;,&lt;br /&gt;
        &amp;quot;snsTopic&amp;quot;: &amp;quot;Create_In&amp;quot;,&lt;br /&gt;
        &amp;quot;generatedSeedData&amp;quot;: {&lt;br /&gt;
         &amp;quot;relationships&amp;quot;: [&lt;br /&gt;
            {&lt;br /&gt;
              &amp;quot;relType&amp;quot;: {&lt;br /&gt;
                &amp;quot;serviceTag&amp;quot;: &amp;quot;PaymentMethodGeneric&amp;quot;,&lt;br /&gt;
                &amp;quot;relationshipTag&amp;quot;: &amp;quot;disabledPaymentMethodGenericPropertyValue&amp;quot;&lt;br /&gt;
              },&lt;br /&gt;
              &amp;quot;relId&amp;quot;: &amp;quot;f4f73de7-647c-4b3b-8043-87cc002f361a&amp;quot;&lt;br /&gt;
            }&lt;br /&gt;
          ]&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    ]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Dynamodb==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
stages: [&lt;br /&gt;
        {&lt;br /&gt;
          initialStage: true,&lt;br /&gt;
          inputEventTag: &#039;Locations_LambdaFunctionHdrDsq_singleStage_directSqs__pass&#039;,&lt;br /&gt;
          serviceName: &#039;ServiceTemplate&#039;,&lt;br /&gt;
          resourceType: &#039;Lambda&#039;,&lt;br /&gt;
          resourceName: &#039;LambdaFunctionHdrDsq&#039;,&lt;br /&gt;
          outputEventTag: &#039;output_Locations_LambdaFunctionHdrDsq_singleStage_directSqs__pass&#039;,&lt;br /&gt;
          dynamodbOutputEventIdentifiers: [&lt;br /&gt;
			{&lt;br /&gt;
              serviceName: {tableName}, //service that deployed the DynamoDB table, so can build table&#039;s full resource name&lt;br /&gt;
              resourceName: {resourceName}, //DynamoDB resourceName&lt;br /&gt;
              eventTag: {eventTagDynamoDB}&lt;br /&gt;
		    }&lt;br /&gt;
          ],&lt;br /&gt;
        }&lt;br /&gt;
      ]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Result of integrationtest =&lt;br /&gt;
Data have 2 table &amp;quot;TestRecord&amp;quot; and &amp;quot;TestUnit&amp;quot;.&lt;br /&gt;
:- TestRecord is table all unti of stage inside eg input output invokes and dynamodb&lt;br /&gt;
:- TestUnit is store status each unit &lt;br /&gt;
each unit save in table TestUnit&lt;br /&gt;
testRecordId is  name of test concat with testTime.&lt;br /&gt;
testUnitId is point to position of unti instage.&lt;br /&gt;
resultStatus is status of unit.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
eg:&lt;br /&gt;
input_0 = stages index 0 result &#039;&#039;&#039;input&#039;&#039;&#039;&lt;br /&gt;
output_1 = stages index 1 result &#039;&#039;&#039;output&#039;&#039;&#039;&lt;br /&gt;
invokeInput_0_1 = stages index 0 result &#039;&#039;&#039;invokes&#039;&#039;&#039; index 1 position input &lt;br /&gt;
invokeOutput_0_1 = stages index 0 result &#039;&#039;&#039;invokes&#039;&#039;&#039; index 1 position output&lt;br /&gt;
dynamodb_0_1 =  stages index 0 result &#039;&#039;&#039;dynamodb&#039;&#039;&#039; index 1.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
after all TestUnit finish (check  by awaitingMultiplestep penditnStep is integrationtestTag awaitingStepId is each TestUnit )&lt;br /&gt;
check all awaitingStep finish send message to ultimateIntegrationtest for sumla all test is status&lt;br /&gt;
&lt;br /&gt;
== Summary of test status == &lt;br /&gt;
:1.testStatus is &amp;quot;passed&amp;quot; all unit passed.&lt;br /&gt;
:2.testStatus is &amp;quot;failed&amp;quot;  have some is failed.&lt;br /&gt;
:3.testStatus is &amp;quot;processing&amp;quot; have some is have status processing after check all awaiting step is finish.&lt;br /&gt;
:4.testStatus is &amp;quot;failed&amp;quot; have record &amp;quot;errorsTest&amp;quot; in case &amp;quot;not match stage invoke&amp;quot;, &#039;found multiple matchingInvokes&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*[[2025-02-20 - Integration Test examples#tests.js Syntax|Syntax Dynamodb]]&lt;br /&gt;
&lt;br /&gt;
=How to test integrationtest s3=&lt;br /&gt;
[[Developer guide for making Integration Tests]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Working documents| 2025-11-20]]&lt;br /&gt;
[[Category:Working documents - Integration Testing| 2025-11-20]]&lt;/div&gt;</summary>
		<author><name>Mint</name></author>
	</entry>
	<entry>
		<id>https://izara.io/wiki/index.php?title=2025-11-20_IntegrationTest&amp;diff=4583</id>
		<title>2025-11-20 IntegrationTest</title>
		<link rel="alternate" type="text/html" href="https://izara.io/wiki/index.php?title=2025-11-20_IntegrationTest&amp;diff=4583"/>
		<updated>2026-08-17T03:23:18Z</updated>

		<summary type="html">&lt;p&gt;Mint: /* graphSeedDataTags */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Reference:&lt;br /&gt;
&lt;br /&gt;
*[[2020-10-01 - Integration Test Config - Functions|IntegrationtestConfig]]&lt;br /&gt;
*[[2020-10-01 - Integration Testing - Lambda Functions|Integrationtesting]]&lt;br /&gt;
*[[2025-02-20 - Integration Test examples|Example]]&lt;br /&gt;
&lt;br /&gt;
= File extension =&lt;br /&gt;
&lt;br /&gt;
uploadS3: &amp;quot;.json&amp;quot;&lt;br /&gt;
integrationtestConfig: &amp;quot;.js&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=TestRecord=&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JSON&amp;quot;&amp;gt;&lt;br /&gt;
[&lt;br /&gt;
  {&lt;br /&gt;
    integrationTestTag: &amp;quot;Integrationtest_xx&amp;quot;,&lt;br /&gt;
    testStartedTimestamp: 111111111, // start time&lt;br /&gt;
    bucketName: &amp;quot;integrationtest-config-us-east-2&amp;quot;,&lt;br /&gt;
    lastUpdateUniqueRequestId: &amp;quot;sssss&amp;quot;, //_izContext.uniqueRequestId protacts race coditionn dynamodb&lt;br /&gt;
    testStatus: &amp;quot;passed&amp;quot;,//failed,processing,passed&lt;br /&gt;
    testCompleteTimestamp: 1111113, // all test finish&lt;br /&gt;
    stages: [&lt;br /&gt;
      {&lt;br /&gt;
        stageConfig: {&lt;br /&gt;
          //straight copy of this stage from integration test config&lt;br /&gt;
          inputEventTag: &amp;quot;xx&amp;quot;,&lt;br /&gt;
          inputEventConfig: {//event input&lt;br /&gt;
          },&lt;br /&gt;
          outputEventTag: &amp;quot;output_xx&amp;quot;,&lt;br /&gt;
          outputEventConfig: {//event out put&lt;br /&gt;
          },&lt;br /&gt;
          resourceName: &amp;quot;ComplexfilterTestProcessComplexfilter&amp;quot;,// function name&lt;br /&gt;
          resourceType: &amp;quot;Lambda&amp;quot;, // function name&lt;br /&gt;
          serviceTag: &amp;quot;Complexfilter&amp;quot;,// (initeate sqs)&lt;br /&gt;
          snsServiceName: &amp;quot;Complexfilter&amp;quot;,// (initeate sqs)&lt;br /&gt;
          snsTopic: &amp;quot;PorcessComplexfilter_In&amp;quot;// (initeate sqs)&lt;br /&gt;
&lt;br /&gt;
        },&lt;br /&gt;
        stageStatus: &amp;quot;waiting&amp;quot;, //waiting|passed|failed,&lt;br /&gt;
        stageFinishedTimestamp: 111111111,// time that all tests finished and testRecord.stages.{stageKey}.stageStatus updated&lt;br /&gt;
        stageResults: {&lt;br /&gt;
          //results at the point of entering the resource (eg a Lambda function is invoked)&lt;br /&gt;
          inputResult: {&lt;br /&gt;
            resultTimestamp: 111111111,//{time result saved},&lt;br /&gt;
            resultStatus: &amp;quot;passed&amp;quot;,//passed|failed,&lt;br /&gt;
            requestParams: {//event input&lt;br /&gt;
            }&lt;br /&gt;
          },&lt;br /&gt;
          //results at the point of returning from the resource (eg a Lambda function returns)&lt;br /&gt;
          outputResult: {&lt;br /&gt;
            resultTimestamp: 111111111,//{time result saved},&lt;br /&gt;
            resultStatus: &amp;quot;passed&amp;quot;,//passed|failed,&lt;br /&gt;
            requestParams: {//event input&lt;br /&gt;
            }&lt;br /&gt;
          },&lt;br /&gt;
          //results at the point of invoking an external resource (eg the tested Lambda function is invoking another Lambda function)&lt;br /&gt;
          invokes: {&lt;br /&gt;
            &amp;quot;serviceName_resourceType_resourceName_inputEventTag &amp;quot;: {&lt;br /&gt;
              invokeTimestamp: 111111111,//{ time result saved },&lt;br /&gt;
              resultTimestamp: 111111112,//{ time result saved },&lt;br /&gt;
              resultStatus: &amp;quot;passed&amp;quot;,//passed | failed,&lt;br /&gt;
              invokeParams: {},//{event invoke input config }&lt;br /&gt;
              requestParams: {}// event invoke input request&lt;br /&gt;
            },&lt;br /&gt;
          },&lt;br /&gt;
          dynamodbResults: [&lt;br /&gt;
            {&lt;br /&gt;
              indexOfDynamodbOutput: 0,&lt;br /&gt;
              requestParams,&lt;br /&gt;
              resultStatus: &amp;quot;passed&amp;quot;,//&lt;br /&gt;
              resultTimestamp: 22222&lt;br /&gt;
            }]&lt;br /&gt;
&lt;br /&gt;
        },&lt;br /&gt;
        stageErrors: [&lt;br /&gt;
          //misc errors encountered&lt;br /&gt;
        ]&lt;br /&gt;
      }]&lt;br /&gt;
&lt;br /&gt;
  }&lt;br /&gt;
]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Seed Data=&lt;br /&gt;
integrationtest manager seed date 2 process&lt;br /&gt;
&lt;br /&gt;
=== Main Seed Data===&lt;br /&gt;
:Save file in s3 (in &#039;&#039;&#039;buckname&#039;&#039;&#039; :integrationtest-config-us-east-2, &#039;&#039;&#039;folder&#039;&#039;&#039;:seedData_integrationTest).For other dev use service,If a developer wants to add more for other important testing purposes.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;How to use:&#039;&#039;&#039;&lt;br /&gt;
#Add it from the s3 bucket at this point&lt;br /&gt;
#Run batch refreshSeedData [[Developer guide for making Integration Tests#Bash script|batch RefreshSeedData]]&lt;br /&gt;
&#039;&#039;&#039;Logic&#039;&#039;&#039;:Process by storage resouse (graph or dynamodb)&lt;br /&gt;
:To clean up the seed data in the table after it creates seed data form service deploy and pulls seed data from s3.&lt;br /&gt;
&lt;br /&gt;
=== Refresh Seed Data ===&lt;br /&gt;
:ProcessRefreshSeedData use seedDataTag for create data environment of &#039;&#039;&#039;test&#039;&#039;&#039; and can be refresh seeddata re-test agian.&lt;br /&gt;
:&#039;&#039;&#039;canbe share&#039;&#039;&#039; seed data for other test by seed data tag.&lt;br /&gt;
&#039;&#039;&#039;How to use:&#039;&#039;&#039;&lt;br /&gt;
:Save file in s3 (for other dav keep in floder dev name) or testConfig/seedData_config(for admin)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Folder&#039;&#039;&#039;&lt;br /&gt;
*dynamoDBSeedDataTags.json&lt;br /&gt;
*graphSeedDataTags.json&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Example&#039;&#039;&#039;&lt;br /&gt;
==== dynamoDBSeedDataTags ====&lt;br /&gt;
:If set tag in this setting integrationtest is generate seed data. in storage resource dynammodb.&lt;br /&gt;
Example&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;seedDynamodb_abc_ver2&amp;quot;: [ // seedDataTag&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;tableName&amp;quot;: &amp;quot;DelivMethodSTDTestLogicalResultsData&amp;quot;,  // servcieTag+stage+tablename&lt;br /&gt;
      &amp;quot;partitionKey&amp;quot;: &amp;quot;logicalResultId&amp;quot;,&lt;br /&gt;
      &amp;quot;sortKey&amp;quot;: &amp;quot;identifiersId&amp;quot;,&lt;br /&gt;
      &amp;quot;datas&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
          logicalResultId: {&lt;br /&gt;
            value: &amp;quot;eeeeeeeeee4&amp;quot;&lt;br /&gt;
          },&lt;br /&gt;
          identifiersId: {&lt;br /&gt;
            value: &amp;quot;lllll123456&amp;quot;&lt;br /&gt;
          },&lt;br /&gt;
          processLogicalResultExpiryTimestamp: {&lt;br /&gt;
            calcType: &amp;quot;currentTimestampAdjustment&amp;quot;, // can add other types of calculated data in future&lt;br /&gt;
            action: &amp;quot;subtract&amp;quot;, // add|subtract&lt;br /&gt;
            adjustmentInSeconds: 300  // Seconds eg 5 minite = 5*60 = 300 Seconds. or 2 day  = 2*(24*60*60) = 172800&lt;br /&gt;
          }&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
          logicalResultId: {&lt;br /&gt;
            value: &amp;quot;eeeeeeeeee4&amp;quot;&lt;br /&gt;
          },&lt;br /&gt;
          &amp;quot;identifiersId&amp;quot;: {&lt;br /&gt;
            value: &amp;quot;lllll777777&amp;quot;&lt;br /&gt;
          },&lt;br /&gt;
          processLogicalResultExpiryTimestamp: {&lt;br /&gt;
            calcType: &amp;quot;currentTimestampAdjustment&amp;quot;, // can add other types of calculated data in future&lt;br /&gt;
            action: &amp;quot;add&amp;quot;, // add|subtract&lt;br /&gt;
            adjustmentInSeconds: 172800  // Seconds eg 5 minite = 5*60 = 300 Seconds. or 2 day  = 2*(24*60*60) = 172800&lt;br /&gt;
          } &lt;br /&gt;
        }&lt;br /&gt;
      ],&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;tableName&amp;quot;: &amp;quot;MLocationsTestFloatingRelationships&amp;quot;,// servcieTag+stage+tablename&lt;br /&gt;
      &amp;quot;partitionKey&amp;quot;: &amp;quot;importBatchId&amp;quot;,&lt;br /&gt;
      &amp;quot;sortKey&amp;quot;: &amp;quot;identifierRelationshipsId&amp;quot;,&lt;br /&gt;
      &amp;quot;datas&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;importBatchId&amp;quot;: &amp;quot;2-uuuuuuuuuuuuuu&amp;quot;,&lt;br /&gt;
          &amp;quot;identifierRelationshipsId&amp;quot;: &amp;quot;lllll123456&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;importBatchId&amp;quot;: &amp;quot;2-uuuuuuuuuuuuuu&amp;quot;,&lt;br /&gt;
          &amp;quot;identifierRelationshipsId&amp;quot;: &amp;quot;lllll777777&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;importBatchId&amp;quot;: &amp;quot;2-uuuuuuuuuuuuuu&amp;quot;,&lt;br /&gt;
          &amp;quot;identifierRelationshipsId&amp;quot;: &amp;quot;lllll99999999&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
      ]&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;tableName&amp;quot;: &amp;quot;MLocationsTestFindDataMain&amp;quot;,&lt;br /&gt;
      &amp;quot;partitionKey&amp;quot;: &amp;quot;findDataId&amp;quot;,&lt;br /&gt;
      &amp;quot;datas&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;findDataId&amp;quot;: &amp;quot;111111&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;findDataId&amp;quot;: &amp;quot;22222&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;findDataId&amp;quot;: &amp;quot;333333&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
      ]&lt;br /&gt;
    }&lt;br /&gt;
  ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== graphSeedDataTags ====&lt;br /&gt;
:If set tag in this setting integrationtest is generate seed data. in storage resource graphHanler.&lt;br /&gt;
Example&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;seedData_testTag_GG&amp;quot;: [ // seedDataTag&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;nodes&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;nodeLabels&amp;quot;: [&lt;br /&gt;
            &amp;quot;SellOfferPlan_sellOfferPlanDeliveryMethodLink&amp;quot;&lt;br /&gt;
          ],&lt;br /&gt;
          &amp;quot;objectDetail&amp;quot;: {&lt;br /&gt;
            &amp;quot;identifiers&amp;quot;: {&lt;br /&gt;
              &amp;quot;sellOfferPlanDeliveryMethodLinkId&amp;quot;: {&lt;br /&gt;
                &amp;quot;value&amp;quot;: &amp;quot;minttestrefreshSeedData_01&amp;quot;,&lt;br /&gt;
              },&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;fields&amp;quot;: {&lt;br /&gt;
              &amp;quot;productId&amp;quot;: {&lt;br /&gt;
                &amp;quot;value&amp;quot;: &amp;quot;ddddd&amp;quot;,&lt;br /&gt;
              },&lt;br /&gt;
              &amp;quot;price&amp;quot;: {&lt;br /&gt;
                &amp;quot;value&amp;quot;: 9999&lt;br /&gt;
              },&lt;br /&gt;
              exampleTimestamp: {&lt;br /&gt;
                calcType: &amp;quot;currentTimestampAdjustment&amp;quot;, // can add other types of calculated data in future &lt;br /&gt;
                action: &amp;quot;subtract&amp;quot;, // add|subtract&lt;br /&gt;
                adjustmentInSeconds: 300  // Seconds eg 5 minite = 5*60 = 300 Seconds. or 2 day  = 2*(24*60*60) = 172800&lt;br /&gt;
              }&lt;br /&gt;
            }&lt;br /&gt;
          }&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;nodeLabels&amp;quot;: [&lt;br /&gt;
            &amp;quot;servcieMintTest_shoppingMall&amp;quot;&lt;br /&gt;
          ],&lt;br /&gt;
          &amp;quot;objectDetail&amp;quot;: {&lt;br /&gt;
            &amp;quot;identifiers&amp;quot;: {&lt;br /&gt;
              &amp;quot;shoppingMallId&amp;quot;: {&amp;quot;value&amp;quot;:&amp;quot;minttestrefreshSeedData_shoppingMallId&amp;quot;}&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;fields&amp;quot;: {&lt;br /&gt;
              &amp;quot;name&amp;quot;: {&amp;quot;value&amp;quot;:&amp;quot;hotpot-man&amp;quot;},&lt;br /&gt;
              &amp;quot;totalPrice&amp;quot;: {&amp;quot;value&amp;quot;:500}&lt;br /&gt;
            }&lt;br /&gt;
          }&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;nodeLabels&amp;quot;: [&lt;br /&gt;
            &amp;quot;servcieMintTest_shoppingMallCalculateSetting&amp;quot;&lt;br /&gt;
          ],&lt;br /&gt;
          &amp;quot;objectDetail&amp;quot;: {&lt;br /&gt;
            &amp;quot;identifiers&amp;quot;: {&lt;br /&gt;
              &amp;quot;versionedDataId&amp;quot;: {&amp;quot;value&amp;quot;:&amp;quot;minttestrefreshSeedData_versionedDataId&amp;quot;}&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;fields&amp;quot;: {&lt;br /&gt;
              &amp;quot;addToCalculatedValuePerOrder&amp;quot;: {&amp;quot;value&amp;quot;:10},&lt;br /&gt;
              &amp;quot;addToRateTableValuePerOrder&amp;quot;: {&amp;quot;value&amp;quot;:77}&lt;br /&gt;
            }&lt;br /&gt;
          }&lt;br /&gt;
        }&lt;br /&gt;
      ],&lt;br /&gt;
      &amp;quot;relationships&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;fromObject&amp;quot;: {&lt;br /&gt;
            &amp;quot;nodeLabel&amp;quot;: &amp;quot;SellOfferPlan_sellOfferPlanDeliveryMethodLink&amp;quot;,&lt;br /&gt;
            &amp;quot;identifiers&amp;quot;: {&lt;br /&gt;
              &amp;quot;sellOfferPlanDeliveryMethodLinkId&amp;quot;: {&amp;quot;value&amp;quot;:&amp;quot;minttestrefreshSeedData_01&amp;quot;}&lt;br /&gt;
            }&lt;br /&gt;
          },&lt;br /&gt;
          &amp;quot;toObject&amp;quot;: {&lt;br /&gt;
            &amp;quot;nodeLabel&amp;quot;: &amp;quot;servcieMintTest_shoppingMall&amp;quot;,&lt;br /&gt;
            &amp;quot;identifiers&amp;quot;: {&lt;br /&gt;
              &amp;quot;shoppingMallId&amp;quot;: {&amp;quot;value&amp;quot;:&amp;quot;minttestrefreshSeedData_shoppingMallId&amp;quot;}&lt;br /&gt;
            }&lt;br /&gt;
          },&lt;br /&gt;
          &amp;quot;relationships&amp;quot;: [&lt;br /&gt;
            {&lt;br /&gt;
              &amp;quot;relTypeConcat&amp;quot;: &amp;quot;SellOfferPlan_hasCCCCCCC&amp;quot;,&lt;br /&gt;
              &amp;quot;relId&amp;quot;: &amp;quot;uuid-4s56df74s9df79w-w6de4f5w689ef&amp;quot;&lt;br /&gt;
            }&lt;br /&gt;
          ]&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;fromObject&amp;quot;: {&lt;br /&gt;
            &amp;quot;nodeLabel&amp;quot;: &amp;quot;servcieMintTest_shoppingMall&amp;quot;,&lt;br /&gt;
            &amp;quot;identifiers&amp;quot;: {&lt;br /&gt;
              &amp;quot;shoppingMallId&amp;quot;: {&amp;quot;value&amp;quot;:&amp;quot;minttestrefreshSeedData_shoppingMallId&amp;quot;}&lt;br /&gt;
            }&lt;br /&gt;
          },&lt;br /&gt;
          &amp;quot;toObject&amp;quot;: {&lt;br /&gt;
            &amp;quot;nodeLabel&amp;quot;: &amp;quot;servcieMintTest_shoppingMallCalculateSetting&amp;quot;,&lt;br /&gt;
            &amp;quot;identifiers&amp;quot;: {&lt;br /&gt;
              &amp;quot;versionedDataId&amp;quot;: {&amp;quot;value&amp;quot;:&amp;quot;minttestrefreshSeedData_versionedDataId&amp;quot;}&lt;br /&gt;
            }&lt;br /&gt;
          },&lt;br /&gt;
          &amp;quot;relationships&amp;quot;: [&lt;br /&gt;
            {&lt;br /&gt;
              &amp;quot;relTypeConcat&amp;quot;: &amp;quot;servcieMintTest_shoppingMall_currentShoppingMallCalculateSetting&amp;quot;,&lt;br /&gt;
              &amp;quot;relId&amp;quot;: &amp;quot;uuid-s122df5-s21df&amp;quot;,&lt;br /&gt;
              &amp;quot;relationshipProperty&amp;quot;: {&lt;br /&gt;
                &amp;quot;timeStamp&amp;quot;:{&amp;quot;value&amp;quot;: 1234567879},&lt;br /&gt;
                &amp;quot;statusName&amp;quot;: {&amp;quot;value&amp;quot;:true}&lt;br /&gt;
              }&lt;br /&gt;
            },&lt;br /&gt;
            {&lt;br /&gt;
              &amp;quot;relTypeConcat&amp;quot;: &amp;quot;servcieMintTest_shoppingMall_hasShoppingMallCalculateSetting&amp;quot;,&lt;br /&gt;
              &amp;quot;relId&amp;quot;: &amp;quot;uuid-77777-99999&amp;quot;,&lt;br /&gt;
              &amp;quot;relationshipProperties&amp;quot;: {&lt;br /&gt;
                &amp;quot;statusName&amp;quot;: {&lt;br /&gt;
                  &amp;quot;value&amp;quot;: true&lt;br /&gt;
                },&lt;br /&gt;
                exampleTimestamp: {&lt;br /&gt;
                  calcType: &amp;quot;currentTimestampAdjustment&amp;quot;, // can add other types of calculated data in future&lt;br /&gt;
                  action: &amp;quot;subtract&amp;quot;, // add|subtract&lt;br /&gt;
                  adjustmentInSeconds: 300  // Seconds eg 5 minite = 5*60 = 300 Seconds. or 2 day  = 2*(24*60*60) = 172800&lt;br /&gt;
              }&lt;br /&gt;
            }&lt;br /&gt;
          ]&lt;br /&gt;
        }&lt;br /&gt;
      ]&lt;br /&gt;
    }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;seedData_testTag_ABC&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;objType&amp;quot;: {&lt;br /&gt;
        &amp;quot;objectType&amp;quot;: &amp;quot;productAttributeLink&amp;quot;,&lt;br /&gt;
        &amp;quot;serviceTag&amp;quot;: &amp;quot;ProductAttribute&amp;quot;&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;objInstanceFull&amp;quot;: {&lt;br /&gt;
        &amp;quot;identifiers&amp;quot;: {&lt;br /&gt;
          &amp;quot;productAttributeLinkId&amp;quot;:{&amp;quot;value&amp;quot;: &amp;quot;f90b57ca8b2fe1a83459d57da038cf50fb6d40e6&amp;quot;}&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;fields&amp;quot;: {}&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;relationships&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;relType&amp;quot;: {&lt;br /&gt;
            &amp;quot;serviceTag&amp;quot;: &amp;quot;ProductAttribute&amp;quot;,&lt;br /&gt;
            &amp;quot;relationshipTag&amp;quot;: &amp;quot;hasProductAttributeLink&amp;quot;&lt;br /&gt;
          },&lt;br /&gt;
          &amp;quot;relationshipDirection&amp;quot;: &amp;quot;to&amp;quot;,&lt;br /&gt;
          &amp;quot;targetObjType&amp;quot;: {&lt;br /&gt;
            &amp;quot;serviceTag&amp;quot;: &amp;quot;ProductStandard&amp;quot;,&lt;br /&gt;
            &amp;quot;objectType&amp;quot;: &amp;quot;productStandard&amp;quot;&lt;br /&gt;
          },&lt;br /&gt;
          &amp;quot;targetIdentifiers&amp;quot;: {&lt;br /&gt;
            &amp;quot;productId&amp;quot;: {&amp;quot;value&amp;quot;:&amp;quot;f526a367a2b66cb0f37ca61b6c43f419929f521d&amp;quot;}&lt;br /&gt;
          },&lt;br /&gt;
          &amp;quot;relationshipProperties&amp;quot;: {}&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;relType&amp;quot;: {&lt;br /&gt;
            &amp;quot;serviceTag&amp;quot;: &amp;quot;ProductAttribute&amp;quot;,&lt;br /&gt;
            &amp;quot;relationshipTag&amp;quot;: &amp;quot;isProductAttribute&amp;quot;&lt;br /&gt;
          },&lt;br /&gt;
          &amp;quot;relationshipDirection&amp;quot;: &amp;quot;from&amp;quot;,&lt;br /&gt;
          &amp;quot;targetObjType&amp;quot;: {&lt;br /&gt;
            &amp;quot;serviceTag&amp;quot;: &amp;quot;ProductAttribute&amp;quot;,&lt;br /&gt;
            &amp;quot;objectType&amp;quot;: &amp;quot;productAttribute&amp;quot;&lt;br /&gt;
          },&lt;br /&gt;
          &amp;quot;targetIdentifiers&amp;quot;: {&lt;br /&gt;
            &amp;quot;productAttributeId&amp;quot;: {&amp;quot;value&amp;quot;:&amp;quot;f4bf7a078071d54036656df544197ba638bc3a68&amp;quot;}&lt;br /&gt;
          },&lt;br /&gt;
          &amp;quot;relationshipProperties&amp;quot;: {}&lt;br /&gt;
        }&lt;br /&gt;
      ]&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;objType&amp;quot;: {&lt;br /&gt;
        &amp;quot;objectType&amp;quot;: &amp;quot;productAttributeLink&amp;quot;,&lt;br /&gt;
        &amp;quot;serviceTag&amp;quot;: &amp;quot;ProductAttribute&amp;quot;&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;objInstanceFull&amp;quot;: {&lt;br /&gt;
        &amp;quot;identifiers&amp;quot;: {&lt;br /&gt;
          &amp;quot;productAttributeLinkId&amp;quot;:{&amp;quot;value&amp;quot;: &amp;quot;f90b57ca8b2fe1a83459d57da038cf50fb6d40e6&amp;quot;}&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;fields&amp;quot;: {}&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;relationships&amp;quot;: []&lt;br /&gt;
    }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;seedData_testTag_LL&amp;quot;: []&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Cleaning Seed Data ===&lt;br /&gt;
:Delete seed data for set environment of &#039;&#039;&#039;test&#039;&#039;&#039;.&lt;br /&gt;
*cleaningeDynamoOneRecordsTags.json&lt;br /&gt;
*cleaningeDynamoManyRecordsTags.json&lt;br /&gt;
&lt;br /&gt;
====cleaningeDynamoOneRecordsTags====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;cleaningSeed_TestFindData_and_Education_case_invalid01&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;tableName&amp;quot;: &amp;quot;MLocationsTestFindDataMain&amp;quot;,&lt;br /&gt;
      &amp;quot;primaryKeys&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;findDataId&amp;quot;: &amp;quot;cleaning-1&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;findDataId&amp;quot;: &amp;quot;cleaning-2&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
      ]&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;tableName&amp;quot;: &amp;quot;MLocationsTestEducation&amp;quot;,&lt;br /&gt;
      &amp;quot;primaryKeys&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;studentId&amp;quot;: &amp;quot;cleaning-AA&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;studentId&amp;quot;: &amp;quot;cleaning-BB&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;studentId&amp;quot;: &amp;quot;cleaning-CC&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
      ]&lt;br /&gt;
    }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;cleaningSeed_TestMemberPersonnel_case_invalid01&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;tableName&amp;quot;: &amp;quot;MLocationsTestMemberPersonnel&amp;quot;,&lt;br /&gt;
      &amp;quot;primaryKeys&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;userId&amp;quot;: &amp;quot;namtan&amp;quot;,&lt;br /&gt;
          &amp;quot;passwordId&amp;quot;: &amp;quot;qqqww&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;userId&amp;quot;: &amp;quot;jack&amp;quot;,&lt;br /&gt;
          &amp;quot;passwordId&amp;quot;: &amp;quot;q1&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;userId&amp;quot;: &amp;quot;Momay&amp;quot;,&lt;br /&gt;
          &amp;quot;passwordId&amp;quot;: &amp;quot;ttr&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
      ]&lt;br /&gt;
    }&lt;br /&gt;
  ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== cleaningeDynamoManyRecordsTags ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;cleaningSeed_manyData_partitionKey_only_miss_sort&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;tableName&amp;quot;: &amp;quot;MLocationsTestMemberPersonnel&amp;quot;,&lt;br /&gt;
      &amp;quot;primaryKeys&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;userId&amp;quot;: &amp;quot;many-data&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
      ]&lt;br /&gt;
    }&lt;br /&gt;
  ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*logic query table MLocationsTestMemberPersonnel use primary Keys &amp;quot;userId&amp;quot; and then delete all data from primary Keys.&lt;br /&gt;
&lt;br /&gt;
=resources=&lt;br /&gt;
syntax is object&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{ &lt;br /&gt;
	&amp;quot;Lambda&amp;quot;:{&lt;br /&gt;
		&amp;quot;{FunctionNameHdrSqs}&amp;quot;:{ // FunctionNameHdrSqs is match resourceName in file tests&lt;br /&gt;
			&amp;quot;localLacation&amp;quot;:&amp;quot;/src/FunctionNameHdrSqs.js&amp;quot;,&lt;br /&gt;
			&amp;quot;localHandler&amp;quot;:&amp;quot;main&amp;quot;, &lt;br /&gt;
			&amp;quot;functionName&amp;quot;:&amp;quot;FunctionNameHdrSqs&amp;quot;	// FunctionName is function name match key of function.yml of servcie.&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;ProcessComplexFilterHdrSqs&amp;quot;:{ &lt;br /&gt;
			&amp;quot;localLacation&amp;quot;:&amp;quot;/src/ProcessComplexFilterHdrSqs.js&amp;quot;, &lt;br /&gt;
			&amp;quot;localHandler&amp;quot;:&amp;quot;main&amp;quot;, &lt;br /&gt;
			&amp;quot;functionName&amp;quot;:&amp;quot;ProcessComplexFilterHdrSqs&amp;quot; &lt;br /&gt;
		},&lt;br /&gt;
		... &lt;br /&gt;
	},&lt;br /&gt;
	&amp;quot;Dynamodb&amp;quot;: {&lt;br /&gt;
		&amp;quot;filterMain&amp;quot;:{ // match resourceName in file tests(dynamodbOutputEventIdentifiers)&lt;br /&gt;
			&amp;quot;tableName&amp;quot;:&amp;quot;filterMain&amp;quot; &lt;br /&gt;
		}, &lt;br /&gt;
		&amp;quot;tableNameBB&amp;quot;:{ &lt;br /&gt;
			&amp;quot;tableName&amp;quot;:&amp;quot;tableNameBB&amp;quot; &lt;br /&gt;
		},&lt;br /&gt;
		... &lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=events=&lt;br /&gt;
Syntax is object&lt;br /&gt;
==Syntax Name==&lt;br /&gt;
===FileName===&lt;br /&gt;
::Event_{inputEventTag}&lt;br /&gt;
&lt;br /&gt;
===eventTag===&lt;br /&gt;
#inputEventTag&lt;br /&gt;
#outputEventTag&lt;br /&gt;
#dynamodbTag&lt;br /&gt;
&lt;br /&gt;
*file events.js is have eventTag  (inputEventTag,outputEventTag,dynamodbTag)&lt;br /&gt;
**How to create name eventTag&lt;br /&gt;
***Example case : &amp;quot;test in service complexFilter functionname ProcessComplexFilter case element type is logical basic&amp;quot;.&lt;br /&gt;
::*&#039;&#039;&#039;inputEventTag&#039;&#039;&#039;&lt;br /&gt;
::::{serviceName}_{functionName}_{caseTest}&lt;br /&gt;
&#039;&#039;Conplexfilter_ProcessComplexFilter_Typelogical_basic&#039;&#039;&lt;br /&gt;
::*&#039;&#039;&#039;outputEventTag&#039;&#039;&#039;&lt;br /&gt;
::::output_{inputEventTag}&lt;br /&gt;
&#039;&#039;output_Conplexfilter_ProcessComplexFilter_Typelogical_basic&#039;&#039;&lt;br /&gt;
::*&#039;&#039;&#039;dynamodbTag&#039;&#039;&#039;&lt;br /&gt;
::::{inputEventTag}__Dynamodb__{&#039;&#039;&#039;action*&#039;&#039;&#039;}_{tableName} &lt;br /&gt;
&#039;&#039;Conplexfilter_ProcessComplexFilter_Typelogical_basic___Dynamodb__putItem_filterMain&#039;&#039;&lt;br /&gt;
: &amp;lt;u&amp;gt;&#039;&#039;&#039;{action}&#039;&#039;&#039; is only &#039;&#039;put&#039;&#039; or &#039;&#039;update&#039;&#039;, and in case of &#039;&#039;update&#039;&#039; must only test the last step of update &amp;lt;/u&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Syntax event===&lt;br /&gt;
====initiate by handlerServcie====&lt;br /&gt;
=====Sqs=====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
// An example input and output event of Sns&lt;br /&gt;
{&lt;br /&gt;
   &amp;quot;LambdaFunctionHdrSqs_input__pass&amp;quot;:{&lt;br /&gt;
      &amp;quot;properties&amp;quot;:{&lt;br /&gt;
         &amp;quot;propertyA&amp;quot;:{&lt;br /&gt;
            &amp;quot;value&amp;quot;:&amp;quot;valueProperty1&amp;quot;&lt;br /&gt;
         },&lt;br /&gt;
         &amp;quot;propertyB&amp;quot;:{&lt;br /&gt;
            &amp;quot;properties&amp;quot;:{&lt;br /&gt;
               &amp;quot;propertyB1&amp;quot;:{&lt;br /&gt;
                  &amp;quot;value&amp;quot;:&amp;quot;valuePropertyB1&amp;quot;&lt;br /&gt;
               }&lt;br /&gt;
            }&lt;br /&gt;
         },&lt;br /&gt;
         &amp;quot;propertyC&amp;quot;:{&lt;br /&gt;
            &amp;quot;eventValue&amp;quot;:[&lt;br /&gt;
               &amp;quot;valuePropertyC1&amp;quot;,&lt;br /&gt;
               &amp;quot;valuePropertyC2&amp;quot;,&lt;br /&gt;
               &amp;quot;valuePropertyC3&amp;quot;&lt;br /&gt;
            ]&lt;br /&gt;
         }&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;snsSqsTrigger&amp;quot;:true,&lt;br /&gt;
      &amp;quot;messageAttributes&amp;quot;:{&lt;br /&gt;
            &amp;quot;msgTag&amp;quot;:{&lt;br /&gt;
               &amp;quot;value&amp;quot;:&amp;quot;msgTag&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;propertyD&amp;quot;:{&lt;br /&gt;
               &amp;quot;value&amp;quot;:&amp;quot;valuePropertyD&amp;quot;&lt;br /&gt;
            }&lt;br /&gt;
      }&lt;br /&gt;
   },&lt;br /&gt;
   {&lt;br /&gt;
      &amp;quot;output_LambdaFunctionHdrSqs_pass&amp;quot;:{&lt;br /&gt;
         &amp;quot;properties&amp;quot;:{&lt;br /&gt;
            &amp;quot;propertyA&amp;quot;:{&lt;br /&gt;
               &amp;quot;value&amp;quot;:&amp;quot;valueProperty1&amp;quot;&lt;br /&gt;
            }&lt;br /&gt;
         }&lt;br /&gt;
      }&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot; linein&amp;gt;&lt;br /&gt;
&amp;quot;snsSqsTrigger&amp;quot;:true&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Dsq=====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
// An example input and output event of Direct Sqs&lt;br /&gt;
{&lt;br /&gt;
   &amp;quot;LambdaFunctionHdrDsq_input__pass&amp;quot;:{&lt;br /&gt;
      &amp;quot;forStageMatching&amp;quot;:true,&lt;br /&gt;
      &amp;quot;properties&amp;quot;:{&lt;br /&gt;
         &amp;quot;propertyA&amp;quot;:{&lt;br /&gt;
            &amp;quot;forStageMatching&amp;quot;:true,&lt;br /&gt;
            &amp;quot;value&amp;quot;:&amp;quot;valueProperty1&amp;quot;&lt;br /&gt;
         },&lt;br /&gt;
         &amp;quot;propertyB&amp;quot;:{&lt;br /&gt;
            &amp;quot;forStageMatching&amp;quot;:true,&lt;br /&gt;
            &amp;quot;properties&amp;quot;:{&lt;br /&gt;
               &amp;quot;propertyB1&amp;quot;:{&lt;br /&gt;
                  &amp;quot;forStageMatching&amp;quot;:true,&lt;br /&gt;
                  &amp;quot;value&amp;quot;:&amp;quot;valuePropertyB1&amp;quot;&lt;br /&gt;
               }&lt;br /&gt;
            }&lt;br /&gt;
         },&lt;br /&gt;
         &amp;quot;propertyC&amp;quot;:{&lt;br /&gt;
            &amp;quot;eventValue&amp;quot;:[&lt;br /&gt;
               &amp;quot;valuePropertyC1&amp;quot;,&lt;br /&gt;
               &amp;quot;valuePropertyC2&amp;quot;,&lt;br /&gt;
               &amp;quot;valuePropertyC3&amp;quot;&lt;br /&gt;
            ]&lt;br /&gt;
         }&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;DirectSqs&amp;quot;:true,&lt;br /&gt;
      &amp;quot;messageAttributes&amp;quot;:{&lt;br /&gt;
         &amp;quot;msgTag&amp;quot;:{&lt;br /&gt;
           &amp;quot;forStageMatching&amp;quot;:true,&lt;br /&gt;
           &amp;quot;value&amp;quot;:&amp;quot;msgTag&amp;quot;&lt;br /&gt;
          },&lt;br /&gt;
          &amp;quot;propertyD&amp;quot;:{&lt;br /&gt;
           &amp;quot;forStageMatching&amp;quot;:true,&lt;br /&gt;
           &amp;quot;value&amp;quot;:&amp;quot;valuePropertyD&amp;quot;&lt;br /&gt;
          }&lt;br /&gt;
      }&lt;br /&gt;
   },&lt;br /&gt;
   {&lt;br /&gt;
      &amp;quot;output_LambdaFunctionHdrDsq_pass&amp;quot;:{&lt;br /&gt;
         &amp;quot;forStageMatching&amp;quot;:true,&lt;br /&gt;
         &amp;quot;properties&amp;quot;:{&lt;br /&gt;
            &amp;quot;propertyA&amp;quot;:{&lt;br /&gt;
               &amp;quot;forStageMatching&amp;quot;:true,&lt;br /&gt;
               &amp;quot;value&amp;quot;:&amp;quot;valueProperty1&amp;quot;&lt;br /&gt;
            }&lt;br /&gt;
         }&lt;br /&gt;
      }&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* DirectSqs = true &lt;br /&gt;
:: for initialStage of Dsq&lt;br /&gt;
* messageAttributes is optional&lt;br /&gt;
&lt;br /&gt;
=====Inv=====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;LambdaFunctionHdrInv_input__pass&amp;quot;:{&lt;br /&gt;
     &amp;quot;forStageMatching&amp;quot;:true,&lt;br /&gt;
     &amp;quot;properties&amp;quot;:{&lt;br /&gt;
        &amp;quot;propertyA&amp;quot;:{&lt;br /&gt;
           &amp;quot;forStageMatching&amp;quot;:true,&lt;br /&gt;
           &amp;quot;value&amp;quot;:&amp;quot;valueProperty1&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;propertyB&amp;quot;:{&lt;br /&gt;
           &amp;quot;forStageMatching&amp;quot;:true,&lt;br /&gt;
           &amp;quot;properties&amp;quot;:{&lt;br /&gt;
              &amp;quot;propertyB1&amp;quot;:{&lt;br /&gt;
                 &amp;quot;forStageMatching&amp;quot;:true,&lt;br /&gt;
                 &amp;quot;value&amp;quot;:&amp;quot;valuePropertyB1&amp;quot;&lt;br /&gt;
              }&lt;br /&gt;
           }&lt;br /&gt;
        }&lt;br /&gt;
     }&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
        &amp;quot;output_LambdaFunctionHdrInv_pass&amp;quot;:{&lt;br /&gt;
           &amp;quot;forStageMatching&amp;quot;:true,&lt;br /&gt;
           &amp;quot;properties&amp;quot;:{&lt;br /&gt;
              &amp;quot;propertyA&amp;quot;:{&lt;br /&gt;
                 &amp;quot;forStageMatching&amp;quot;:true,&lt;br /&gt;
                 &amp;quot;value&amp;quot;:&amp;quot;valueProperty1&amp;quot;&lt;br /&gt;
              }&lt;br /&gt;
           }&lt;br /&gt;
        }&lt;br /&gt;
     }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Api=====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
// An example input and output event of API&lt;br /&gt;
{&lt;br /&gt;
	&amp;quot;LambdaFunctionHdrApi_input__pass_notTestAuthorizer&amp;quot;: { &lt;br /&gt;
		&amp;quot;forstageMatvhing&amp;quot;: true, &lt;br /&gt;
		&amp;quot;properties&amp;quot;: { &lt;br /&gt;
			&amp;quot;body&amp;quot;: { &lt;br /&gt;
				&amp;quot;properties&amp;quot;: { &lt;br /&gt;
					&amp;quot;propertyA&amp;quot;: { &lt;br /&gt;
						&amp;quot;testValueMatches&amp;quot;: false, &lt;br /&gt;
						&amp;quot;value&amp;quot;: &amp;quot;valueProperty1&amp;quot;, &lt;br /&gt;
					}, &lt;br /&gt;
					&amp;quot;propertyB&amp;quot;: { &lt;br /&gt;
						&amp;quot;properties&amp;quot;: { &lt;br /&gt;
							&amp;quot;propertyB1&amp;quot;: { &lt;br /&gt;
								&amp;quot;value&amp;quot;: &amp;quot;valuePropertyB1&amp;quot;, &lt;br /&gt;
							} &lt;br /&gt;
						} &lt;br /&gt;
					}, &lt;br /&gt;
					&amp;quot;propertyC&amp;quot;: { &lt;br /&gt;
						&amp;quot;eventValue&amp;quot;: [ &lt;br /&gt;
							&amp;quot;valuePropertyC1&amp;quot;, &lt;br /&gt;
							&amp;quot;valuePropertyC2&amp;quot;, &lt;br /&gt;
							&amp;quot;valuePropertyC3&amp;quot;, &lt;br /&gt;
						] &lt;br /&gt;
					},&lt;br /&gt;
					... &lt;br /&gt;
				} &lt;br /&gt;
			} &lt;br /&gt;
		}&lt;br /&gt;
	}, &lt;br /&gt;
	&amp;quot;Output_LambdaFunctionHdrApi_input__pass_notTestAuthorizer&amp;quot;: { &lt;br /&gt;
		&amp;quot;properties&amp;quot;: { &lt;br /&gt;
			&amp;quot;body&amp;quot;: { &lt;br /&gt;
				&amp;quot;properties&amp;quot;: { &lt;br /&gt;
					&amp;quot;propertyA&amp;quot;: { &lt;br /&gt;
						&amp;quot;testValueMatches&amp;quot;: false, &lt;br /&gt;
						&amp;quot;value&amp;quot;: &amp;quot;valueProperty1&amp;quot;&lt;br /&gt;
					}, &lt;br /&gt;
					...&lt;br /&gt;
				} &lt;br /&gt;
			} &lt;br /&gt;
		}  &lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====S3=====&lt;br /&gt;
&lt;br /&gt;
====dynamodb====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
// An example event of Dynamodb //optional &lt;br /&gt;
{&lt;br /&gt;
	{inputEventTag}__dynamodb_{action}_{tablename}: { // eg. &amp;quot;Complexfilter_ProcessComplexfilter_logical_basic__dynamodb_update_FilterMain&amp;quot;&lt;br /&gt;
	&amp;quot;forStageMatching&amp;quot;: true,&lt;br /&gt;
     &amp;quot;properties&amp;quot;: {&lt;br /&gt;
        &amp;quot;filterMainUniqueRequestId&amp;quot;: {&lt;br /&gt;
          &amp;quot;testValueMatches&amp;quot;: fase,&lt;br /&gt;
          &amp;quot;value&amp;quot;: &amp;quot;bbc4f4a9-2032-4dec-9129-8c7d169fecc5&amp;quot;&lt;br /&gt;
         },&lt;br /&gt;
        &amp;quot;filterObject&amp;quot;: {&lt;br /&gt;
        &amp;quot;forStageMatching&amp;quot;: true,&lt;br /&gt;
        &amp;quot;properties&amp;quot;: {&lt;br /&gt;
          &amp;quot;logicalType&amp;quot;: {&lt;br /&gt;
            &amp;quot;value&amp;quot;: &amp;quot;partitionKey&amp;quot;&lt;br /&gt;
          },&lt;br /&gt;
          &amp;quot;comparison&amp;quot;: {&lt;br /&gt;
            &amp;quot;value&amp;quot;: &amp;quot;equals&amp;quot;&lt;br /&gt;
          },&lt;br /&gt;
          &amp;quot;type&amp;quot;: {&lt;br /&gt;
            &amp;quot;value&amp;quot;: &amp;quot;logical&amp;quot;&lt;br /&gt;
          },&lt;br /&gt;
          &amp;quot;partitionKey&amp;quot;: {&lt;br /&gt;
            &amp;quot;forStageMatching&amp;quot;: true,&lt;br /&gt;
            &amp;quot;value&amp;quot;: &amp;quot;mockIntegratioTestCPF&amp;quot;&lt;br /&gt;
          }&lt;br /&gt;
        }&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;filterMainExpiryTime&amp;quot;: {&lt;br /&gt;
        &amp;quot;testValueMatches&amp;quot;: fase,&lt;br /&gt;
        &amp;quot;value&amp;quot;: 1731980802858&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;filterMainStatus&amp;quot;: {&lt;br /&gt;
       &amp;quot;forStageMatching&amp;quot;: true,&lt;br /&gt;
        &amp;quot;value&amp;quot;: &amp;quot;processing&amp;quot;&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;createTime&amp;quot;: {&lt;br /&gt;
        &amp;quot;testValueMatches&amp;quot;: fase,&lt;br /&gt;
        &amp;quot;value&amp;quot;: 1731894402678&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;objType&amp;quot;: {&lt;br /&gt;
        &amp;quot;forStageMatching&amp;quot;: true,&lt;br /&gt;
        &amp;quot;properties&amp;quot;: {&lt;br /&gt;
          &amp;quot;serviceTag&amp;quot;: {&lt;br /&gt;
            &amp;quot;forStageMatching&amp;quot;: true,&lt;br /&gt;
            &amp;quot;value&amp;quot;: &amp;quot;IntTesting&amp;quot;&lt;br /&gt;
          },&lt;br /&gt;
          &amp;quot;objectType&amp;quot;: {&lt;br /&gt;
            &amp;quot;forStageMatching&amp;quot;: true,&lt;br /&gt;
            &amp;quot;value&amp;quot;: &amp;quot;TestRecord&amp;quot;&lt;br /&gt;
          }&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;keyValues&amp;quot;: {&lt;br /&gt;
      &amp;quot;filterMainId&amp;quot;: &amp;quot;4865d2451a621cb7f71225cfabf2df4f98e20801&amp;quot;,&lt;br /&gt;
      &amp;quot;objTypeId&amp;quot;: &amp;quot;cdb170690571df7522b3850920fce02507c077ee&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
	} &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* partition key: filterMainId&lt;br /&gt;
* sort key: objTypeId&lt;br /&gt;
&lt;br /&gt;
[[2021-01-15 - Integration Testing - Adding DynamoDB result tests]]&lt;br /&gt;
&lt;br /&gt;
===Type paramiter===&lt;br /&gt;
use for evnet and dyanmodb event&lt;br /&gt;
====Normal====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 object: {&lt;br /&gt;
  forStageMatching: true,&lt;br /&gt;
  properties: {&lt;br /&gt;
    name:{&lt;br /&gt;
     forStageMatching: true,&lt;br /&gt;
     value:&amp;quot;Tom&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
   }&lt;br /&gt;
 },&lt;br /&gt;
 array: {&lt;br /&gt;
  forStageMatching: true,&lt;br /&gt;
  useIsEqual: true,&lt;br /&gt;
  eventValue: [&lt;br /&gt;
   {&lt;br /&gt;
     &amp;quot;relTypeAndDirection&amp;quot;: {&lt;br /&gt;
       &amp;quot;relType&amp;quot;: {&lt;br /&gt;
         &amp;quot;serviceTag&amp;quot;: &amp;quot;maxxCart2&amp;quot;,&lt;br /&gt;
         &amp;quot;relationshipTag&amp;quot;: &amp;quot;hasCartOrder&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;relationshipDirection&amp;quot;: &amp;quot;from&amp;quot;&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;targetObjects&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;objType&amp;quot;: {&lt;br /&gt;
           &amp;quot;serviceTag&amp;quot;: &amp;quot;maxxCart2&amp;quot;,&lt;br /&gt;
           &amp;quot;objectType&amp;quot;: &amp;quot;cartOrder&amp;quot;&lt;br /&gt;
          }&lt;br /&gt;
        }&lt;br /&gt;
      ]&lt;br /&gt;
    }&lt;br /&gt;
  ]&lt;br /&gt;
 },&lt;br /&gt;
 number: {&lt;br /&gt;
  forStageMatching: true,&lt;br /&gt;
  value: 1111&lt;br /&gt;
 },&lt;br /&gt;
 string: {&lt;br /&gt;
  forStageMatching: true,&lt;br /&gt;
  value: &amp;quot;hi&amp;quot;&lt;br /&gt;
 },&lt;br /&gt;
 boolean: {&lt;br /&gt;
  forStageMatching: true,&lt;br /&gt;
  value: true&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
 forStageMatching: true&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
::set true for check match value,It is not necessary to set every value&lt;br /&gt;
:::use in test importent paramiter&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
testValueMatches:false&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
::setting paramiter require on create but can not test random value eg: identifier or timeStamp or uuid&lt;br /&gt;
&lt;br /&gt;
====Empty====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
 EmptyString:{&lt;br /&gt;
forStageMatching: true,&lt;br /&gt;
  value:&amp;quot;&amp;quot;&lt;br /&gt;
 },&lt;br /&gt;
 EmptyArray:{&lt;br /&gt;
   forStageMatching: true,&lt;br /&gt;
   useIsEqual: true,&lt;br /&gt;
   eventValue: []&lt;br /&gt;
 },&lt;br /&gt;
 EmptyObject:{&lt;br /&gt;
  forStageMatching: true,&lt;br /&gt;
  value:{}&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Error====&lt;br /&gt;
can test noRetryError&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;quot;errorMessage&amp;quot;: {&lt;br /&gt;
    forStageMatching: true,&lt;br /&gt;
    &amp;quot;value&amp;quot;: &amp;quot;Not found schema of {serviceTag:TestGraphHandler, objectType:notFoundObjType}&amp;quot;&lt;br /&gt;
   }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Paramiter random====&lt;br /&gt;
Can not test case random numbber or uuid.&lt;br /&gt;
But requriOnCreate mush be set &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
testValueMatches:false&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
or set&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
forStageMatching:false&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=tests=&lt;br /&gt;
Syntax is array of object&lt;br /&gt;
==Syntax name== &lt;br /&gt;
===Testtag name ===&lt;br /&gt;
*{integrationTestTag}&lt;br /&gt;
#Test Own servcie or not a lot stage&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
Test_{inputEventTag}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
#Mix multiple servcie and multiple stage&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt; &lt;br /&gt;
IntegrationTest_{inputEventTag}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===File name ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt; &lt;br /&gt;
{integrationTestTag}.json&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Setting of test==&lt;br /&gt;
[[Service - Integration Test Config#tests.js Syntax|syntax test]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
            integrationTestTag: {integrationTestTag},&lt;br /&gt;
            productionSafe: true|false, //default false&lt;br /&gt;
            noInitialStage: true, // default false, if set to true, no error when no foundInitialStages found&lt;br /&gt;
            errorIfStageUndefined: true|false, //default false&lt;br /&gt;
            errorIfInvokeUndefined: true|false, //default false,&lt;br /&gt;
            dynamoDBSeedDataTags:[&amp;quot;seedDataDB_test_case_xx&amp;quot;], //[seedDataTag] optional if have seed data for test&lt;br /&gt;
            graphSeedDataTags:[&amp;quot;seedDataGraph_test_case_xx&amp;quot;], //[seedDataTag] optional if have seed data for test&lt;br /&gt;
            cleaningeDynamoOneRecordsTags: [&amp;quot;cleaningSeed_partitionKey_sortKey_normol&amp;quot;], //optional&lt;br /&gt;
            cleaningeDynamoManyRecordsTags: [], // optional&lt;br /&gt;
            stages:[&lt;br /&gt;
               ...&lt;br /&gt;
            ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
*[[2025-11-20 IntegrationTest#dynamoDBSeedDataTags|dynamoDBSeedDataTags]]&lt;br /&gt;
*[[2025-11-20 IntegrationTest#graphSeedDataTags|graphSeedDataTags]]&lt;br /&gt;
*[[2025-11-20 IntegrationTest#cleaningeDynamoOneRecordsTags|cleaningeDynamoOneRecordsTags]]&lt;br /&gt;
*[[2025-11-20 IntegrationTest#cleaningeDynamoManyRecordsTags|cleaningeDynamoManyRecordsTags]]&lt;br /&gt;
&lt;br /&gt;
==Stages==&lt;br /&gt;
====Initiate stage====&lt;br /&gt;
:&#039;&#039;&#039;&amp;quot;initialStage&amp;quot;:true&#039;&#039;&#039;&lt;br /&gt;
[[Service_-_Integration_Test_Config#tests.js Syntax|detail property of test]]&lt;br /&gt;
=====HandlerService=====&lt;br /&gt;
======Sqs======&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;quot;stages&amp;quot;:[&lt;br /&gt;
         {&lt;br /&gt;
            &amp;quot;initialStage&amp;quot;:true,&lt;br /&gt;
            &amp;quot;inputEventTag&amp;quot;:&amp;quot;Locations_ProcessLocationNodeSomting_casenotHaveData&amp;quot;,&lt;br /&gt;
            &amp;quot;serviceName&amp;quot;:&amp;quot;Locations&amp;quot;,&lt;br /&gt;
            &amp;quot;resourceType&amp;quot;:&amp;quot;Lambda&amp;quot;,&lt;br /&gt;
            &amp;quot;resourceName&amp;quot;:&amp;quot;ProcessLocationNodeSomtingHdrDsq&amp;quot;,&lt;br /&gt;
            &amp;quot;outputEventTag&amp;quot;:&amp;quot;Output_Locations_ProcessLocationNodeSomting_casenotHaveData&amp;quot;&lt;br /&gt;
         }&lt;br /&gt;
      ]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
======Dsq======&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
stages: [&lt;br /&gt;
        {&lt;br /&gt;
          initialStage: true,&lt;br /&gt;
          inputEventTag: &#039;LambdaFunctionHdrDsq_input_singleStage_directSqs__pass&#039;,&lt;br /&gt;
          serviceName: &#039;ServiceTemplate&#039;,&lt;br /&gt;
          resourceType: &#039;Lambda&#039;,&lt;br /&gt;
          resourceName: &#039;LambdaFunctionHdrDsq&#039;,&lt;br /&gt;
          outputEventTag: &#039;LambdaFunctionHdrDsq_output__returnvalue_pass&#039;,&lt;br /&gt;
          // **** not set snsServiceName and snsTopic&lt;br /&gt;
          // can be test dynamodbOutput&lt;br /&gt;
        }&lt;br /&gt;
      ]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
======Api======&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;quot;stages&amp;quot;:[&lt;br /&gt;
    {&lt;br /&gt;
       &amp;quot;initialStage&amp;quot;:true,&lt;br /&gt;
       &amp;quot;inputEventTag&amp;quot;:&amp;quot;LambdaFunctionHdrApi_input__pass&amp;quot;,&lt;br /&gt;
       &amp;quot;serviceName&amp;quot;:&amp;quot;ServiceTemplate&amp;quot;,&lt;br /&gt;
       &amp;quot;resourceType&amp;quot;:&amp;quot;Lambda&amp;quot;,&lt;br /&gt;
       &amp;quot;resourceName&amp;quot;:&amp;quot;LambdaFunctionHdrApi&amp;quot;,&lt;br /&gt;
       &amp;quot;outputEventTag&amp;quot;:&amp;quot;LambdaFunctionHdrApi_output__pass&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
======Inv======&lt;br /&gt;
*&#039;&#039;&#039;single stage&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
[{&lt;br /&gt;
   &amp;quot;integrationTestTag&amp;quot;:&amp;quot;LambdaFunctionHdrInv__pass&amp;quot;,&lt;br /&gt;
   &amp;quot;productionSafe&amp;quot;:false,&lt;br /&gt;
   &amp;quot;errorIfStageUndefined&amp;quot;:false,&lt;br /&gt;
   &amp;quot;errorIfInvokeUndefined&amp;quot;:false,&lt;br /&gt;
   &amp;quot;dynamoDBSeedDataTags&amp;quot;:[&amp;quot;seedDataDB_test_case_xx&amp;quot;], //[seedDataTag] optional if have seed data for test&lt;br /&gt;
   &amp;quot;graphSeedDataTags&amp;quot;:[&amp;quot;seedDataGraph_test_case_xx&amp;quot;], //[seedDataTag] optional if have seed data for test&lt;br /&gt;
   &amp;quot;cleaningeDynamoOneRecordsTags&amp;quot;: [&amp;quot;cleaningSeed_partitionKey_sortKey_normol&amp;quot;], //optional&lt;br /&gt;
   &amp;quot;cleaningeDynamoManyRecordsTags&amp;quot;: []&lt;br /&gt;
   &amp;quot;stages&amp;quot;:[&lt;br /&gt;
      {&lt;br /&gt;
         &amp;quot;initialStage&amp;quot;:true,&lt;br /&gt;
         &amp;quot;inputEventTag&amp;quot;:&amp;quot;LambdaFunctionHdrInv_input__pass&amp;quot;,&lt;br /&gt;
         &amp;quot;serviceName&amp;quot;:&amp;quot;ServiceTemplate&amp;quot;,&lt;br /&gt;
         &amp;quot;resourceType&amp;quot;:&amp;quot;Lambda&amp;quot;,&lt;br /&gt;
         &amp;quot;resourceName&amp;quot;:&amp;quot;LambdaFunctionHdrInv&amp;quot;,&lt;br /&gt;
         &amp;quot;outputEventTag&amp;quot;:&amp;quot;LambdaFunctionHdrInv_output__pass&amp;quot;&lt;br /&gt;
      }&lt;br /&gt;
   ]&lt;br /&gt;
}]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;invoke multiple stage&#039;&#039;&#039; &lt;br /&gt;
:*Each stage test can invoke multiple lambda by use &amp;quot;eventStage Tag&amp;quot; point to stage for test integration test.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
[{&lt;br /&gt;
   &amp;quot;integrationTestTag&amp;quot;:&amp;quot;LambdaFunctionHdrInv_invokes__pass&amp;quot;,&lt;br /&gt;
   &amp;quot;productionSafe&amp;quot;:false,&lt;br /&gt;
   &amp;quot;errorIfStageUndefined&amp;quot;:false,&lt;br /&gt;
   &amp;quot;errorIfInvokeUndefined&amp;quot;:false,&lt;br /&gt;
   &amp;quot;dynamoDBSeedDataTags&amp;quot;:[], //[seedDataTag] optional if have seed data for test&lt;br /&gt;
   &amp;quot;graphSeedDataTags&amp;quot;:[], //[seedDataTag] optional if have seed data for test&lt;br /&gt;
   &amp;quot;cleaningeDynamoOneRecordsTags&amp;quot;: [], //optional&lt;br /&gt;
   &amp;quot;cleaningeDynamoManyRecordsTags&amp;quot;: [], // optional&lt;br /&gt;
   &amp;quot;stages&amp;quot;:[&lt;br /&gt;
      {&lt;br /&gt;
         &amp;quot;initialStage&amp;quot;:true,&lt;br /&gt;
         &amp;quot;inputEventTag&amp;quot;:&amp;quot;LambdaFunctionHdrInv_input__pass&amp;quot;,&lt;br /&gt;
         &amp;quot;serviceName&amp;quot;:&amp;quot;ServiceTemplate&amp;quot;,&lt;br /&gt;
         &amp;quot;resourceType&amp;quot;:&amp;quot;Lambda&amp;quot;,&lt;br /&gt;
         &amp;quot;resourceName&amp;quot;:&amp;quot;LambdaFunctionHdrInv&amp;quot;,&lt;br /&gt;
         &amp;quot;outputEventTag&amp;quot;:&amp;quot;LambdaFunctionHdrInv_output__pass&amp;quot;,&lt;br /&gt;
         &amp;quot;invokes&amp;quot;:[&lt;br /&gt;
            {&lt;br /&gt;
               &amp;quot;eventStageTag&amp;quot;:&amp;quot;service_invokesB__pass&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            {&lt;br /&gt;
               &amp;quot;eventStageTag&amp;quot;:&amp;quot;service_invokesD__pass&amp;quot;&lt;br /&gt;
            }&lt;br /&gt;
         ]&lt;br /&gt;
      },&lt;br /&gt;
      {&lt;br /&gt;
         &amp;quot;eventStageTag&amp;quot;:&amp;quot;service_invokesB__pass&amp;quot;,&lt;br /&gt;
         &amp;quot;inputEventTag&amp;quot;:&amp;quot;input_service_invokes__pass&amp;quot;,&lt;br /&gt;
         &amp;quot;serviceName&amp;quot;:&amp;quot;ServiceTemplate_B&amp;quot;,&lt;br /&gt;
         &amp;quot;resourceType&amp;quot;:&amp;quot;Lambda&amp;quot;,&lt;br /&gt;
         &amp;quot;resourceName&amp;quot;:&amp;quot;LambdaFunction_B_HdrInv&amp;quot;,&lt;br /&gt;
         &amp;quot;outputEventTag&amp;quot;:&amp;quot;output_service_invokes__pass&amp;quot;&lt;br /&gt;
      },&lt;br /&gt;
      {&lt;br /&gt;
         &amp;quot;eventStageTag&amp;quot;:&amp;quot;service_invokesD__pass&amp;quot;,&lt;br /&gt;
         &amp;quot;inputEventTag&amp;quot;:&amp;quot;input_service_invokesD__pass&amp;quot;,&lt;br /&gt;
         &amp;quot;serviceName&amp;quot;:&amp;quot;ServiceTemplate_D&amp;quot;,&lt;br /&gt;
         &amp;quot;resourceType&amp;quot;:&amp;quot;Lambda&amp;quot;,&lt;br /&gt;
         &amp;quot;resourceName&amp;quot;:&amp;quot;LambdaFunction_D_HdrInv&amp;quot;,&lt;br /&gt;
         &amp;quot;outputEventTag&amp;quot;:&amp;quot;output_service_invokesD__pass&amp;quot;&lt;br /&gt;
      }&lt;br /&gt;
   ]&lt;br /&gt;
}]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
======S3======&lt;br /&gt;
======Batch======&lt;br /&gt;
&lt;br /&gt;
====GeneratedSeedData====&lt;br /&gt;
*Integrationtest must be delete identifier every time before test.&lt;br /&gt;
*Set &#039;generatedSeedData&#039; in file tests.json case by case of stage eg: stages[0] create identifier is randomOnCreate will set &#039;generatedSeedData&#039; and stages[1] create relationship is randomOnCreate(It is usually random, except in the case of relationship version) set generatedSeedData this stages[1].&lt;br /&gt;
*How to delete case identifier rendomOnCreate?: set in stage use setting generateSeedData &amp;quot;randomOnCreateIdentifier&amp;quot;&lt;br /&gt;
#randomOnCreateIdentifier&lt;br /&gt;
#notRandomOnIdentifier&lt;br /&gt;
#relationships&lt;br /&gt;
=====randomOnCreateIdentifier=====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;quot;stages&amp;quot;: [&lt;br /&gt;
      {&lt;br /&gt;
        &amp;quot;initialStage&amp;quot;: true,&lt;br /&gt;
        &amp;quot;inputEventTag&amp;quot;: &amp;quot;MLocation_CreateHdrSqs__case_NodeVersionData_Jaya&amp;quot;,&lt;br /&gt;
        &amp;quot;serviceTag&amp;quot;: &amp;quot;MLocations&amp;quot;,&lt;br /&gt;
        &amp;quot;resourceType&amp;quot;: &amp;quot;Lambda&amp;quot;,&lt;br /&gt;
        &amp;quot;resourceName&amp;quot;: &amp;quot;CreateHdrSqs&amp;quot;,&lt;br /&gt;
        &amp;quot;snsServiceName&amp;quot;: &amp;quot;MLocations&amp;quot;,&lt;br /&gt;
        &amp;quot;snsTopic&amp;quot;: &amp;quot;Create_In&amp;quot;,&lt;br /&gt;
        &amp;quot;generatedSeedData&amp;quot;: {&lt;br /&gt;
          &amp;quot;randomOnCreateIdentifier&amp;quot;: [&lt;br /&gt;
            {&lt;br /&gt;
              &amp;quot;objType&amp;quot;: {&lt;br /&gt;
                &amp;quot;serviceTag&amp;quot;: &amp;quot;MLocations&amp;quot;,&lt;br /&gt;
                &amp;quot;objectType&amp;quot;: &amp;quot;Member&amp;quot;&lt;br /&gt;
              },&lt;br /&gt;
              &amp;quot;identifierValue&amp;quot;: &amp;quot;Jaya-member-001&amp;quot;&lt;br /&gt;
            }&lt;br /&gt;
          ]&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
=====notRandomOnIdentifier=====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;quot;stages&amp;quot;: [&lt;br /&gt;
      {&lt;br /&gt;
        &amp;quot;initialStage&amp;quot;: true,&lt;br /&gt;
        &amp;quot;inputEventTag&amp;quot;: &amp;quot;MLocation_CreateHdrSqs__case_NodeVersionData_Jaya&amp;quot;,&lt;br /&gt;
        &amp;quot;serviceTag&amp;quot;: &amp;quot;MLocations&amp;quot;,&lt;br /&gt;
        &amp;quot;resourceType&amp;quot;: &amp;quot;Lambda&amp;quot;,&lt;br /&gt;
        &amp;quot;resourceName&amp;quot;: &amp;quot;CreateHdrSqs&amp;quot;,&lt;br /&gt;
        &amp;quot;snsServiceName&amp;quot;: &amp;quot;MLocations&amp;quot;,&lt;br /&gt;
        &amp;quot;snsTopic&amp;quot;: &amp;quot;Create_In&amp;quot;,&lt;br /&gt;
        &amp;quot;generatedSeedData&amp;quot;: {&lt;br /&gt;
          &amp;quot;notRandomOnIdentifier&amp;quot;: [&lt;br /&gt;
            {&lt;br /&gt;
              &amp;quot;objType&amp;quot;: {&lt;br /&gt;
                &amp;quot;serviceTag&amp;quot;: &amp;quot;gggg&amp;quot;,&lt;br /&gt;
                &amp;quot;objectType&amp;quot;: &amp;quot;ssssss&amp;quot;&lt;br /&gt;
              },&lt;br /&gt;
              &amp;quot;identifiers&amp;quot;: {&lt;br /&gt;
                &amp;quot;topId&amp;quot;: &amp;quot;123456&amp;quot;&lt;br /&gt;
              }&lt;br /&gt;
            }&lt;br /&gt;
          ]&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    ]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
=====relationships=====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;quot;stages&amp;quot;: [&lt;br /&gt;
      {&lt;br /&gt;
        &amp;quot;initialStage&amp;quot;: true,&lt;br /&gt;
        &amp;quot;inputEventTag&amp;quot;: &amp;quot;MLocation_CreateHdrSqs__case_NodeVersionData_Jaya&amp;quot;,&lt;br /&gt;
        &amp;quot;serviceTag&amp;quot;: &amp;quot;MLocations&amp;quot;,&lt;br /&gt;
        &amp;quot;resourceType&amp;quot;: &amp;quot;Lambda&amp;quot;,&lt;br /&gt;
        &amp;quot;resourceName&amp;quot;: &amp;quot;CreateHdrSqs&amp;quot;,&lt;br /&gt;
        &amp;quot;snsServiceName&amp;quot;: &amp;quot;MLocations&amp;quot;,&lt;br /&gt;
        &amp;quot;snsTopic&amp;quot;: &amp;quot;Create_In&amp;quot;,&lt;br /&gt;
        &amp;quot;generatedSeedData&amp;quot;: {&lt;br /&gt;
         &amp;quot;relationships&amp;quot;: [&lt;br /&gt;
            {&lt;br /&gt;
              &amp;quot;relType&amp;quot;: {&lt;br /&gt;
                &amp;quot;serviceTag&amp;quot;: &amp;quot;PaymentMethodGeneric&amp;quot;,&lt;br /&gt;
                &amp;quot;relationshipTag&amp;quot;: &amp;quot;disabledPaymentMethodGenericPropertyValue&amp;quot;&lt;br /&gt;
              },&lt;br /&gt;
              &amp;quot;relId&amp;quot;: &amp;quot;f4f73de7-647c-4b3b-8043-87cc002f361a&amp;quot;&lt;br /&gt;
            }&lt;br /&gt;
          ]&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    ]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Dynamodb==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
stages: [&lt;br /&gt;
        {&lt;br /&gt;
          initialStage: true,&lt;br /&gt;
          inputEventTag: &#039;Locations_LambdaFunctionHdrDsq_singleStage_directSqs__pass&#039;,&lt;br /&gt;
          serviceName: &#039;ServiceTemplate&#039;,&lt;br /&gt;
          resourceType: &#039;Lambda&#039;,&lt;br /&gt;
          resourceName: &#039;LambdaFunctionHdrDsq&#039;,&lt;br /&gt;
          outputEventTag: &#039;output_Locations_LambdaFunctionHdrDsq_singleStage_directSqs__pass&#039;,&lt;br /&gt;
          dynamodbOutputEventIdentifiers: [&lt;br /&gt;
			{&lt;br /&gt;
              serviceName: {tableName}, //service that deployed the DynamoDB table, so can build table&#039;s full resource name&lt;br /&gt;
              resourceName: {resourceName}, //DynamoDB resourceName&lt;br /&gt;
              eventTag: {eventTagDynamoDB}&lt;br /&gt;
		    }&lt;br /&gt;
          ],&lt;br /&gt;
        }&lt;br /&gt;
      ]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Result of integrationtest =&lt;br /&gt;
Data have 2 table &amp;quot;TestRecord&amp;quot; and &amp;quot;TestUnit&amp;quot;.&lt;br /&gt;
:- TestRecord is table all unti of stage inside eg input output invokes and dynamodb&lt;br /&gt;
:- TestUnit is store status each unit &lt;br /&gt;
each unit save in table TestUnit&lt;br /&gt;
testRecordId is  name of test concat with testTime.&lt;br /&gt;
testUnitId is point to position of unti instage.&lt;br /&gt;
resultStatus is status of unit.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
eg:&lt;br /&gt;
input_0 = stages index 0 result &#039;&#039;&#039;input&#039;&#039;&#039;&lt;br /&gt;
output_1 = stages index 1 result &#039;&#039;&#039;output&#039;&#039;&#039;&lt;br /&gt;
invokeInput_0_1 = stages index 0 result &#039;&#039;&#039;invokes&#039;&#039;&#039; index 1 position input &lt;br /&gt;
invokeOutput_0_1 = stages index 0 result &#039;&#039;&#039;invokes&#039;&#039;&#039; index 1 position output&lt;br /&gt;
dynamodb_0_1 =  stages index 0 result &#039;&#039;&#039;dynamodb&#039;&#039;&#039; index 1.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
after all TestUnit finish (check  by awaitingMultiplestep penditnStep is integrationtestTag awaitingStepId is each TestUnit )&lt;br /&gt;
check all awaitingStep finish send message to ultimateIntegrationtest for sumla all test is status&lt;br /&gt;
&lt;br /&gt;
== Summary of test status == &lt;br /&gt;
:1.testStatus is &amp;quot;passed&amp;quot; all unit passed.&lt;br /&gt;
:2.testStatus is &amp;quot;failed&amp;quot;  have some is failed.&lt;br /&gt;
:3.testStatus is &amp;quot;processing&amp;quot; have some is have status processing after check all awaiting step is finish.&lt;br /&gt;
:4.testStatus is &amp;quot;failed&amp;quot; have record &amp;quot;errorsTest&amp;quot; in case &amp;quot;not match stage invoke&amp;quot;, &#039;found multiple matchingInvokes&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*[[2025-02-20 - Integration Test examples#tests.js Syntax|Syntax Dynamodb]]&lt;br /&gt;
&lt;br /&gt;
=How to test integrationtest s3=&lt;br /&gt;
[[Developer guide for making Integration Tests]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Working documents| 2025-11-20]]&lt;br /&gt;
[[Category:Working documents - Integration Testing| 2025-11-20]]&lt;/div&gt;</summary>
		<author><name>Mint</name></author>
	</entry>
	<entry>
		<id>https://izara.io/wiki/index.php?title=2025-11-20_IntegrationTest&amp;diff=4582</id>
		<title>2025-11-20 IntegrationTest</title>
		<link rel="alternate" type="text/html" href="https://izara.io/wiki/index.php?title=2025-11-20_IntegrationTest&amp;diff=4582"/>
		<updated>2026-08-17T03:19:40Z</updated>

		<summary type="html">&lt;p&gt;Mint: /* dynamoDBSeedDataTags */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Reference:&lt;br /&gt;
&lt;br /&gt;
*[[2020-10-01 - Integration Test Config - Functions|IntegrationtestConfig]]&lt;br /&gt;
*[[2020-10-01 - Integration Testing - Lambda Functions|Integrationtesting]]&lt;br /&gt;
*[[2025-02-20 - Integration Test examples|Example]]&lt;br /&gt;
&lt;br /&gt;
= File extension =&lt;br /&gt;
&lt;br /&gt;
uploadS3: &amp;quot;.json&amp;quot;&lt;br /&gt;
integrationtestConfig: &amp;quot;.js&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=TestRecord=&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JSON&amp;quot;&amp;gt;&lt;br /&gt;
[&lt;br /&gt;
  {&lt;br /&gt;
    integrationTestTag: &amp;quot;Integrationtest_xx&amp;quot;,&lt;br /&gt;
    testStartedTimestamp: 111111111, // start time&lt;br /&gt;
    bucketName: &amp;quot;integrationtest-config-us-east-2&amp;quot;,&lt;br /&gt;
    lastUpdateUniqueRequestId: &amp;quot;sssss&amp;quot;, //_izContext.uniqueRequestId protacts race coditionn dynamodb&lt;br /&gt;
    testStatus: &amp;quot;passed&amp;quot;,//failed,processing,passed&lt;br /&gt;
    testCompleteTimestamp: 1111113, // all test finish&lt;br /&gt;
    stages: [&lt;br /&gt;
      {&lt;br /&gt;
        stageConfig: {&lt;br /&gt;
          //straight copy of this stage from integration test config&lt;br /&gt;
          inputEventTag: &amp;quot;xx&amp;quot;,&lt;br /&gt;
          inputEventConfig: {//event input&lt;br /&gt;
          },&lt;br /&gt;
          outputEventTag: &amp;quot;output_xx&amp;quot;,&lt;br /&gt;
          outputEventConfig: {//event out put&lt;br /&gt;
          },&lt;br /&gt;
          resourceName: &amp;quot;ComplexfilterTestProcessComplexfilter&amp;quot;,// function name&lt;br /&gt;
          resourceType: &amp;quot;Lambda&amp;quot;, // function name&lt;br /&gt;
          serviceTag: &amp;quot;Complexfilter&amp;quot;,// (initeate sqs)&lt;br /&gt;
          snsServiceName: &amp;quot;Complexfilter&amp;quot;,// (initeate sqs)&lt;br /&gt;
          snsTopic: &amp;quot;PorcessComplexfilter_In&amp;quot;// (initeate sqs)&lt;br /&gt;
&lt;br /&gt;
        },&lt;br /&gt;
        stageStatus: &amp;quot;waiting&amp;quot;, //waiting|passed|failed,&lt;br /&gt;
        stageFinishedTimestamp: 111111111,// time that all tests finished and testRecord.stages.{stageKey}.stageStatus updated&lt;br /&gt;
        stageResults: {&lt;br /&gt;
          //results at the point of entering the resource (eg a Lambda function is invoked)&lt;br /&gt;
          inputResult: {&lt;br /&gt;
            resultTimestamp: 111111111,//{time result saved},&lt;br /&gt;
            resultStatus: &amp;quot;passed&amp;quot;,//passed|failed,&lt;br /&gt;
            requestParams: {//event input&lt;br /&gt;
            }&lt;br /&gt;
          },&lt;br /&gt;
          //results at the point of returning from the resource (eg a Lambda function returns)&lt;br /&gt;
          outputResult: {&lt;br /&gt;
            resultTimestamp: 111111111,//{time result saved},&lt;br /&gt;
            resultStatus: &amp;quot;passed&amp;quot;,//passed|failed,&lt;br /&gt;
            requestParams: {//event input&lt;br /&gt;
            }&lt;br /&gt;
          },&lt;br /&gt;
          //results at the point of invoking an external resource (eg the tested Lambda function is invoking another Lambda function)&lt;br /&gt;
          invokes: {&lt;br /&gt;
            &amp;quot;serviceName_resourceType_resourceName_inputEventTag &amp;quot;: {&lt;br /&gt;
              invokeTimestamp: 111111111,//{ time result saved },&lt;br /&gt;
              resultTimestamp: 111111112,//{ time result saved },&lt;br /&gt;
              resultStatus: &amp;quot;passed&amp;quot;,//passed | failed,&lt;br /&gt;
              invokeParams: {},//{event invoke input config }&lt;br /&gt;
              requestParams: {}// event invoke input request&lt;br /&gt;
            },&lt;br /&gt;
          },&lt;br /&gt;
          dynamodbResults: [&lt;br /&gt;
            {&lt;br /&gt;
              indexOfDynamodbOutput: 0,&lt;br /&gt;
              requestParams,&lt;br /&gt;
              resultStatus: &amp;quot;passed&amp;quot;,//&lt;br /&gt;
              resultTimestamp: 22222&lt;br /&gt;
            }]&lt;br /&gt;
&lt;br /&gt;
        },&lt;br /&gt;
        stageErrors: [&lt;br /&gt;
          //misc errors encountered&lt;br /&gt;
        ]&lt;br /&gt;
      }]&lt;br /&gt;
&lt;br /&gt;
  }&lt;br /&gt;
]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Seed Data=&lt;br /&gt;
integrationtest manager seed date 2 process&lt;br /&gt;
&lt;br /&gt;
=== Main Seed Data===&lt;br /&gt;
:Save file in s3 (in &#039;&#039;&#039;buckname&#039;&#039;&#039; :integrationtest-config-us-east-2, &#039;&#039;&#039;folder&#039;&#039;&#039;:seedData_integrationTest).For other dev use service,If a developer wants to add more for other important testing purposes.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;How to use:&#039;&#039;&#039;&lt;br /&gt;
#Add it from the s3 bucket at this point&lt;br /&gt;
#Run batch refreshSeedData [[Developer guide for making Integration Tests#Bash script|batch RefreshSeedData]]&lt;br /&gt;
&#039;&#039;&#039;Logic&#039;&#039;&#039;:Process by storage resouse (graph or dynamodb)&lt;br /&gt;
:To clean up the seed data in the table after it creates seed data form service deploy and pulls seed data from s3.&lt;br /&gt;
&lt;br /&gt;
=== Refresh Seed Data ===&lt;br /&gt;
:ProcessRefreshSeedData use seedDataTag for create data environment of &#039;&#039;&#039;test&#039;&#039;&#039; and can be refresh seeddata re-test agian.&lt;br /&gt;
:&#039;&#039;&#039;canbe share&#039;&#039;&#039; seed data for other test by seed data tag.&lt;br /&gt;
&#039;&#039;&#039;How to use:&#039;&#039;&#039;&lt;br /&gt;
:Save file in s3 (for other dav keep in floder dev name) or testConfig/seedData_config(for admin)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Folder&#039;&#039;&#039;&lt;br /&gt;
*dynamoDBSeedDataTags.json&lt;br /&gt;
*graphSeedDataTags.json&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Example&#039;&#039;&#039;&lt;br /&gt;
==== dynamoDBSeedDataTags ====&lt;br /&gt;
:If set tag in this setting integrationtest is generate seed data. in storage resource dynammodb.&lt;br /&gt;
Example&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;seedDynamodb_abc_ver2&amp;quot;: [ // seedDataTag&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;tableName&amp;quot;: &amp;quot;DelivMethodSTDTestLogicalResultsData&amp;quot;,  // servcieTag+stage+tablename&lt;br /&gt;
      &amp;quot;partitionKey&amp;quot;: &amp;quot;logicalResultId&amp;quot;,&lt;br /&gt;
      &amp;quot;sortKey&amp;quot;: &amp;quot;identifiersId&amp;quot;,&lt;br /&gt;
      &amp;quot;datas&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
          logicalResultId: {&lt;br /&gt;
            value: &amp;quot;eeeeeeeeee4&amp;quot;&lt;br /&gt;
          },&lt;br /&gt;
          identifiersId: {&lt;br /&gt;
            value: &amp;quot;lllll123456&amp;quot;&lt;br /&gt;
          },&lt;br /&gt;
          processLogicalResultExpiryTimestamp: {&lt;br /&gt;
            calcType: &amp;quot;currentTimestampAdjustment&amp;quot;, // can add other types of calculated data in future&lt;br /&gt;
            action: &amp;quot;subtract&amp;quot;, // add|subtract&lt;br /&gt;
            adjustmentInSeconds: 300  // Seconds eg 5 minite = 5*60 = 300 Seconds. or 2 day  = 2*(24*60*60) = 172800&lt;br /&gt;
          }&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
          logicalResultId: {&lt;br /&gt;
            value: &amp;quot;eeeeeeeeee4&amp;quot;&lt;br /&gt;
          },&lt;br /&gt;
          &amp;quot;identifiersId&amp;quot;: {&lt;br /&gt;
            value: &amp;quot;lllll777777&amp;quot;&lt;br /&gt;
          },&lt;br /&gt;
          processLogicalResultExpiryTimestamp: {&lt;br /&gt;
            calcType: &amp;quot;currentTimestampAdjustment&amp;quot;, // can add other types of calculated data in future&lt;br /&gt;
            action: &amp;quot;add&amp;quot;, // add|subtract&lt;br /&gt;
            adjustmentInSeconds: 172800  // Seconds eg 5 minite = 5*60 = 300 Seconds. or 2 day  = 2*(24*60*60) = 172800&lt;br /&gt;
          } &lt;br /&gt;
        }&lt;br /&gt;
      ],&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;tableName&amp;quot;: &amp;quot;MLocationsTestFloatingRelationships&amp;quot;,// servcieTag+stage+tablename&lt;br /&gt;
      &amp;quot;partitionKey&amp;quot;: &amp;quot;importBatchId&amp;quot;,&lt;br /&gt;
      &amp;quot;sortKey&amp;quot;: &amp;quot;identifierRelationshipsId&amp;quot;,&lt;br /&gt;
      &amp;quot;datas&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;importBatchId&amp;quot;: &amp;quot;2-uuuuuuuuuuuuuu&amp;quot;,&lt;br /&gt;
          &amp;quot;identifierRelationshipsId&amp;quot;: &amp;quot;lllll123456&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;importBatchId&amp;quot;: &amp;quot;2-uuuuuuuuuuuuuu&amp;quot;,&lt;br /&gt;
          &amp;quot;identifierRelationshipsId&amp;quot;: &amp;quot;lllll777777&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;importBatchId&amp;quot;: &amp;quot;2-uuuuuuuuuuuuuu&amp;quot;,&lt;br /&gt;
          &amp;quot;identifierRelationshipsId&amp;quot;: &amp;quot;lllll99999999&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
      ]&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;tableName&amp;quot;: &amp;quot;MLocationsTestFindDataMain&amp;quot;,&lt;br /&gt;
      &amp;quot;partitionKey&amp;quot;: &amp;quot;findDataId&amp;quot;,&lt;br /&gt;
      &amp;quot;datas&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;findDataId&amp;quot;: &amp;quot;111111&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;findDataId&amp;quot;: &amp;quot;22222&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;findDataId&amp;quot;: &amp;quot;333333&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
      ]&lt;br /&gt;
    }&lt;br /&gt;
  ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== graphSeedDataTags ====&lt;br /&gt;
:If set tag in this setting integrationtest is generate seed data. in storage resource graphHanler.&lt;br /&gt;
Example&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;seedData_testTag_GG&amp;quot;: [ // seedDataTag&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;nodes&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;nodeLabels&amp;quot;: [&lt;br /&gt;
            &amp;quot;SellOfferPlan_sellOfferPlanDeliveryMethodLink&amp;quot;&lt;br /&gt;
          ],&lt;br /&gt;
          &amp;quot;objectDetail&amp;quot;: {&lt;br /&gt;
            &amp;quot;identifiers&amp;quot;: {&lt;br /&gt;
              &amp;quot;sellOfferPlanDeliveryMethodLinkId&amp;quot;: {&lt;br /&gt;
                &amp;quot;value&amp;quot;: &amp;quot;minttestrefreshSeedData_01&amp;quot;,&lt;br /&gt;
              },&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;fields&amp;quot;: {&lt;br /&gt;
              &amp;quot;productId&amp;quot;: {&lt;br /&gt;
                &amp;quot;value&amp;quot;: &amp;quot;ddddd&amp;quot;,&lt;br /&gt;
              },&lt;br /&gt;
              &amp;quot;price&amp;quot;: {&lt;br /&gt;
                &amp;quot;value&amp;quot;: 9999&lt;br /&gt;
              },&lt;br /&gt;
              exampleTimestamp: {&lt;br /&gt;
                calcType: &amp;quot;currentTimestampAdjustment&amp;quot;, // can add other types of calculated data in future &lt;br /&gt;
                action: &amp;quot;subtract&amp;quot;, // add|subtract&lt;br /&gt;
                adjustment: &amp;quot;2 days&amp;quot;, // Human-Readable Relative Format  //Month,Months|Week,Weeks|day,days|Hour,Hours|Minute,Minutes|Second,Seconds|&lt;br /&gt;
              }&lt;br /&gt;
            }&lt;br /&gt;
          }&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;nodeLabels&amp;quot;: [&lt;br /&gt;
            &amp;quot;servcieMintTest_shoppingMall&amp;quot;&lt;br /&gt;
          ],&lt;br /&gt;
          &amp;quot;objectDetail&amp;quot;: {&lt;br /&gt;
            &amp;quot;identifiers&amp;quot;: {&lt;br /&gt;
              &amp;quot;shoppingMallId&amp;quot;: &amp;quot;minttestrefreshSeedData_shoppingMallId&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;fields&amp;quot;: {&lt;br /&gt;
              &amp;quot;name&amp;quot;: &amp;quot;hotpot-man&amp;quot;,&lt;br /&gt;
              &amp;quot;totalPrice&amp;quot;: 500&lt;br /&gt;
            }&lt;br /&gt;
          }&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;nodeLabels&amp;quot;: [&lt;br /&gt;
            &amp;quot;servcieMintTest_shoppingMallCalculateSetting&amp;quot;&lt;br /&gt;
          ],&lt;br /&gt;
          &amp;quot;objectDetail&amp;quot;: {&lt;br /&gt;
            &amp;quot;identifiers&amp;quot;: {&lt;br /&gt;
              &amp;quot;versionedDataId&amp;quot;: &amp;quot;minttestrefreshSeedData_versionedDataId&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;fields&amp;quot;: {&lt;br /&gt;
              &amp;quot;addToCalculatedValuePerOrder&amp;quot;: 10,&lt;br /&gt;
              &amp;quot;addToRateTableValuePerOrder&amp;quot;: 77&lt;br /&gt;
            }&lt;br /&gt;
          }&lt;br /&gt;
        }&lt;br /&gt;
      ],&lt;br /&gt;
      &amp;quot;relationships&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;fromObject&amp;quot;: {&lt;br /&gt;
            &amp;quot;nodeLabel&amp;quot;: &amp;quot;SellOfferPlan_sellOfferPlanDeliveryMethodLink&amp;quot;,&lt;br /&gt;
            &amp;quot;identifiers&amp;quot;: {&lt;br /&gt;
              &amp;quot;sellOfferPlanDeliveryMethodLinkId&amp;quot;: &amp;quot;minttestrefreshSeedData_01&amp;quot;&lt;br /&gt;
            }&lt;br /&gt;
          },&lt;br /&gt;
          &amp;quot;toObject&amp;quot;: {&lt;br /&gt;
            &amp;quot;nodeLabel&amp;quot;: &amp;quot;servcieMintTest_shoppingMall&amp;quot;,&lt;br /&gt;
            &amp;quot;identifiers&amp;quot;: {&lt;br /&gt;
              &amp;quot;shoppingMallId&amp;quot;: &amp;quot;minttestrefreshSeedData_shoppingMallId&amp;quot;&lt;br /&gt;
            }&lt;br /&gt;
          },&lt;br /&gt;
          &amp;quot;relationships&amp;quot;: [&lt;br /&gt;
            {&lt;br /&gt;
              &amp;quot;relTypeConcat&amp;quot;: &amp;quot;SellOfferPlan_hasCCCCCCC&amp;quot;,&lt;br /&gt;
              &amp;quot;relId&amp;quot;: &amp;quot;uuid-4s56df74s9df79w-w6de4f5w689ef&amp;quot;&lt;br /&gt;
            }&lt;br /&gt;
          ]&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;fromObject&amp;quot;: {&lt;br /&gt;
            &amp;quot;nodeLabel&amp;quot;: &amp;quot;servcieMintTest_shoppingMall&amp;quot;,&lt;br /&gt;
            &amp;quot;identifiers&amp;quot;: {&lt;br /&gt;
              &amp;quot;shoppingMallId&amp;quot;: &amp;quot;minttestrefreshSeedData_shoppingMallId&amp;quot;&lt;br /&gt;
            }&lt;br /&gt;
          },&lt;br /&gt;
          &amp;quot;toObject&amp;quot;: {&lt;br /&gt;
            &amp;quot;nodeLabel&amp;quot;: &amp;quot;servcieMintTest_shoppingMallCalculateSetting&amp;quot;,&lt;br /&gt;
            &amp;quot;identifiers&amp;quot;: {&lt;br /&gt;
              &amp;quot;versionedDataId&amp;quot;: &amp;quot;minttestrefreshSeedData_versionedDataId&amp;quot;&lt;br /&gt;
            }&lt;br /&gt;
          },&lt;br /&gt;
          &amp;quot;relationships&amp;quot;: [&lt;br /&gt;
            {&lt;br /&gt;
              &amp;quot;relTypeConcat&amp;quot;: &amp;quot;servcieMintTest_shoppingMall_currentShoppingMallCalculateSetting&amp;quot;,&lt;br /&gt;
              &amp;quot;relId&amp;quot;: &amp;quot;uuid-s122df5-s21df&amp;quot;,&lt;br /&gt;
              &amp;quot;relationshipProperty&amp;quot;: {&lt;br /&gt;
                &amp;quot;timeStamp&amp;quot;: 1234567879,&lt;br /&gt;
                &amp;quot;statusName&amp;quot;: true&lt;br /&gt;
              }&lt;br /&gt;
            },&lt;br /&gt;
            {&lt;br /&gt;
              &amp;quot;relTypeConcat&amp;quot;: &amp;quot;servcieMintTest_shoppingMall_hasShoppingMallCalculateSetting&amp;quot;,&lt;br /&gt;
              &amp;quot;relId&amp;quot;: &amp;quot;uuid-77777-99999&amp;quot;,&lt;br /&gt;
              &amp;quot;relationshipProperties&amp;quot;: {&lt;br /&gt;
                &amp;quot;statusName&amp;quot;: {&lt;br /&gt;
                  &amp;quot;value&amp;quot;: true&lt;br /&gt;
                },&lt;br /&gt;
                exampleTimestamp: {&lt;br /&gt;
                  calcType: &amp;quot;currentTimestampAdjustment&amp;quot;, // can add other types of calculated data in future&lt;br /&gt;
                  action: &amp;quot;subtract&amp;quot;, // add|subtract&lt;br /&gt;
                  adjustment: &amp;quot;2 days&amp;quot;, // Human-Readable Relative Format  //Month,Months|Week,Weeks|day,days|Hour,Hours|Minute,Minutes|Second,Seconds|&lt;br /&gt;
                }&lt;br /&gt;
              }&lt;br /&gt;
            }&lt;br /&gt;
          ]&lt;br /&gt;
        }&lt;br /&gt;
      ]&lt;br /&gt;
    }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;seedData_testTag_ABC&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;objType&amp;quot;: {&lt;br /&gt;
        &amp;quot;objectType&amp;quot;: &amp;quot;productAttributeLink&amp;quot;,&lt;br /&gt;
        &amp;quot;serviceTag&amp;quot;: &amp;quot;ProductAttribute&amp;quot;&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;objInstanceFull&amp;quot;: {&lt;br /&gt;
        &amp;quot;identifiers&amp;quot;: {&lt;br /&gt;
          &amp;quot;productAttributeLinkId&amp;quot;: &amp;quot;f90b57ca8b2fe1a83459d57da038cf50fb6d40e6&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;fields&amp;quot;: {}&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;relationships&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;relType&amp;quot;: {&lt;br /&gt;
            &amp;quot;serviceTag&amp;quot;: &amp;quot;ProductAttribute&amp;quot;,&lt;br /&gt;
            &amp;quot;relationshipTag&amp;quot;: &amp;quot;hasProductAttributeLink&amp;quot;&lt;br /&gt;
          },&lt;br /&gt;
          &amp;quot;relationshipDirection&amp;quot;: &amp;quot;to&amp;quot;,&lt;br /&gt;
          &amp;quot;targetObjType&amp;quot;: {&lt;br /&gt;
            &amp;quot;serviceTag&amp;quot;: &amp;quot;ProductStandard&amp;quot;,&lt;br /&gt;
            &amp;quot;objectType&amp;quot;: &amp;quot;productStandard&amp;quot;&lt;br /&gt;
          },&lt;br /&gt;
          &amp;quot;targetIdentifiers&amp;quot;: {&lt;br /&gt;
            &amp;quot;productId&amp;quot;: &amp;quot;f526a367a2b66cb0f37ca61b6c43f419929f521d&amp;quot;&lt;br /&gt;
          },&lt;br /&gt;
          &amp;quot;relationshipProperties&amp;quot;: {}&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;relType&amp;quot;: {&lt;br /&gt;
            &amp;quot;serviceTag&amp;quot;: &amp;quot;ProductAttribute&amp;quot;,&lt;br /&gt;
            &amp;quot;relationshipTag&amp;quot;: &amp;quot;isProductAttribute&amp;quot;&lt;br /&gt;
          },&lt;br /&gt;
          &amp;quot;relationshipDirection&amp;quot;: &amp;quot;from&amp;quot;,&lt;br /&gt;
          &amp;quot;targetObjType&amp;quot;: {&lt;br /&gt;
            &amp;quot;serviceTag&amp;quot;: &amp;quot;ProductAttribute&amp;quot;,&lt;br /&gt;
            &amp;quot;objectType&amp;quot;: &amp;quot;productAttribute&amp;quot;&lt;br /&gt;
          },&lt;br /&gt;
          &amp;quot;targetIdentifiers&amp;quot;: {&lt;br /&gt;
            &amp;quot;productAttributeId&amp;quot;: &amp;quot;f4bf7a078071d54036656df544197ba638bc3a68&amp;quot;&lt;br /&gt;
          },&lt;br /&gt;
          &amp;quot;relationshipProperties&amp;quot;: {}&lt;br /&gt;
        }&lt;br /&gt;
      ]&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;objType&amp;quot;: {&lt;br /&gt;
        &amp;quot;objectType&amp;quot;: &amp;quot;productAttributeLink&amp;quot;,&lt;br /&gt;
        &amp;quot;serviceTag&amp;quot;: &amp;quot;ProductAttribute&amp;quot;&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;objInstanceFull&amp;quot;: {&lt;br /&gt;
        &amp;quot;identifiers&amp;quot;: {&lt;br /&gt;
          &amp;quot;productAttributeLinkId&amp;quot;: &amp;quot;f90b57ca8b2fe1a83459d57da038cf50fb6d40e6&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;fields&amp;quot;: {}&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;relationships&amp;quot;: []&lt;br /&gt;
    }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;seedData_testTag_LL&amp;quot;: []&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Cleaning Seed Data ===&lt;br /&gt;
:Delete seed data for set environment of &#039;&#039;&#039;test&#039;&#039;&#039;.&lt;br /&gt;
*cleaningeDynamoOneRecordsTags.json&lt;br /&gt;
*cleaningeDynamoManyRecordsTags.json&lt;br /&gt;
&lt;br /&gt;
====cleaningeDynamoOneRecordsTags====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;cleaningSeed_TestFindData_and_Education_case_invalid01&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;tableName&amp;quot;: &amp;quot;MLocationsTestFindDataMain&amp;quot;,&lt;br /&gt;
      &amp;quot;primaryKeys&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;findDataId&amp;quot;: &amp;quot;cleaning-1&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;findDataId&amp;quot;: &amp;quot;cleaning-2&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
      ]&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;tableName&amp;quot;: &amp;quot;MLocationsTestEducation&amp;quot;,&lt;br /&gt;
      &amp;quot;primaryKeys&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;studentId&amp;quot;: &amp;quot;cleaning-AA&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;studentId&amp;quot;: &amp;quot;cleaning-BB&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;studentId&amp;quot;: &amp;quot;cleaning-CC&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
      ]&lt;br /&gt;
    }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;cleaningSeed_TestMemberPersonnel_case_invalid01&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;tableName&amp;quot;: &amp;quot;MLocationsTestMemberPersonnel&amp;quot;,&lt;br /&gt;
      &amp;quot;primaryKeys&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;userId&amp;quot;: &amp;quot;namtan&amp;quot;,&lt;br /&gt;
          &amp;quot;passwordId&amp;quot;: &amp;quot;qqqww&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;userId&amp;quot;: &amp;quot;jack&amp;quot;,&lt;br /&gt;
          &amp;quot;passwordId&amp;quot;: &amp;quot;q1&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;userId&amp;quot;: &amp;quot;Momay&amp;quot;,&lt;br /&gt;
          &amp;quot;passwordId&amp;quot;: &amp;quot;ttr&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
      ]&lt;br /&gt;
    }&lt;br /&gt;
  ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== cleaningeDynamoManyRecordsTags ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;cleaningSeed_manyData_partitionKey_only_miss_sort&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;tableName&amp;quot;: &amp;quot;MLocationsTestMemberPersonnel&amp;quot;,&lt;br /&gt;
      &amp;quot;primaryKeys&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;userId&amp;quot;: &amp;quot;many-data&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
      ]&lt;br /&gt;
    }&lt;br /&gt;
  ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*logic query table MLocationsTestMemberPersonnel use primary Keys &amp;quot;userId&amp;quot; and then delete all data from primary Keys.&lt;br /&gt;
&lt;br /&gt;
=resources=&lt;br /&gt;
syntax is object&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{ &lt;br /&gt;
	&amp;quot;Lambda&amp;quot;:{&lt;br /&gt;
		&amp;quot;{FunctionNameHdrSqs}&amp;quot;:{ // FunctionNameHdrSqs is match resourceName in file tests&lt;br /&gt;
			&amp;quot;localLacation&amp;quot;:&amp;quot;/src/FunctionNameHdrSqs.js&amp;quot;,&lt;br /&gt;
			&amp;quot;localHandler&amp;quot;:&amp;quot;main&amp;quot;, &lt;br /&gt;
			&amp;quot;functionName&amp;quot;:&amp;quot;FunctionNameHdrSqs&amp;quot;	// FunctionName is function name match key of function.yml of servcie.&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;ProcessComplexFilterHdrSqs&amp;quot;:{ &lt;br /&gt;
			&amp;quot;localLacation&amp;quot;:&amp;quot;/src/ProcessComplexFilterHdrSqs.js&amp;quot;, &lt;br /&gt;
			&amp;quot;localHandler&amp;quot;:&amp;quot;main&amp;quot;, &lt;br /&gt;
			&amp;quot;functionName&amp;quot;:&amp;quot;ProcessComplexFilterHdrSqs&amp;quot; &lt;br /&gt;
		},&lt;br /&gt;
		... &lt;br /&gt;
	},&lt;br /&gt;
	&amp;quot;Dynamodb&amp;quot;: {&lt;br /&gt;
		&amp;quot;filterMain&amp;quot;:{ // match resourceName in file tests(dynamodbOutputEventIdentifiers)&lt;br /&gt;
			&amp;quot;tableName&amp;quot;:&amp;quot;filterMain&amp;quot; &lt;br /&gt;
		}, &lt;br /&gt;
		&amp;quot;tableNameBB&amp;quot;:{ &lt;br /&gt;
			&amp;quot;tableName&amp;quot;:&amp;quot;tableNameBB&amp;quot; &lt;br /&gt;
		},&lt;br /&gt;
		... &lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=events=&lt;br /&gt;
Syntax is object&lt;br /&gt;
==Syntax Name==&lt;br /&gt;
===FileName===&lt;br /&gt;
::Event_{inputEventTag}&lt;br /&gt;
&lt;br /&gt;
===eventTag===&lt;br /&gt;
#inputEventTag&lt;br /&gt;
#outputEventTag&lt;br /&gt;
#dynamodbTag&lt;br /&gt;
&lt;br /&gt;
*file events.js is have eventTag  (inputEventTag,outputEventTag,dynamodbTag)&lt;br /&gt;
**How to create name eventTag&lt;br /&gt;
***Example case : &amp;quot;test in service complexFilter functionname ProcessComplexFilter case element type is logical basic&amp;quot;.&lt;br /&gt;
::*&#039;&#039;&#039;inputEventTag&#039;&#039;&#039;&lt;br /&gt;
::::{serviceName}_{functionName}_{caseTest}&lt;br /&gt;
&#039;&#039;Conplexfilter_ProcessComplexFilter_Typelogical_basic&#039;&#039;&lt;br /&gt;
::*&#039;&#039;&#039;outputEventTag&#039;&#039;&#039;&lt;br /&gt;
::::output_{inputEventTag}&lt;br /&gt;
&#039;&#039;output_Conplexfilter_ProcessComplexFilter_Typelogical_basic&#039;&#039;&lt;br /&gt;
::*&#039;&#039;&#039;dynamodbTag&#039;&#039;&#039;&lt;br /&gt;
::::{inputEventTag}__Dynamodb__{&#039;&#039;&#039;action*&#039;&#039;&#039;}_{tableName} &lt;br /&gt;
&#039;&#039;Conplexfilter_ProcessComplexFilter_Typelogical_basic___Dynamodb__putItem_filterMain&#039;&#039;&lt;br /&gt;
: &amp;lt;u&amp;gt;&#039;&#039;&#039;{action}&#039;&#039;&#039; is only &#039;&#039;put&#039;&#039; or &#039;&#039;update&#039;&#039;, and in case of &#039;&#039;update&#039;&#039; must only test the last step of update &amp;lt;/u&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Syntax event===&lt;br /&gt;
====initiate by handlerServcie====&lt;br /&gt;
=====Sqs=====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
// An example input and output event of Sns&lt;br /&gt;
{&lt;br /&gt;
   &amp;quot;LambdaFunctionHdrSqs_input__pass&amp;quot;:{&lt;br /&gt;
      &amp;quot;properties&amp;quot;:{&lt;br /&gt;
         &amp;quot;propertyA&amp;quot;:{&lt;br /&gt;
            &amp;quot;value&amp;quot;:&amp;quot;valueProperty1&amp;quot;&lt;br /&gt;
         },&lt;br /&gt;
         &amp;quot;propertyB&amp;quot;:{&lt;br /&gt;
            &amp;quot;properties&amp;quot;:{&lt;br /&gt;
               &amp;quot;propertyB1&amp;quot;:{&lt;br /&gt;
                  &amp;quot;value&amp;quot;:&amp;quot;valuePropertyB1&amp;quot;&lt;br /&gt;
               }&lt;br /&gt;
            }&lt;br /&gt;
         },&lt;br /&gt;
         &amp;quot;propertyC&amp;quot;:{&lt;br /&gt;
            &amp;quot;eventValue&amp;quot;:[&lt;br /&gt;
               &amp;quot;valuePropertyC1&amp;quot;,&lt;br /&gt;
               &amp;quot;valuePropertyC2&amp;quot;,&lt;br /&gt;
               &amp;quot;valuePropertyC3&amp;quot;&lt;br /&gt;
            ]&lt;br /&gt;
         }&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;snsSqsTrigger&amp;quot;:true,&lt;br /&gt;
      &amp;quot;messageAttributes&amp;quot;:{&lt;br /&gt;
            &amp;quot;msgTag&amp;quot;:{&lt;br /&gt;
               &amp;quot;value&amp;quot;:&amp;quot;msgTag&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;propertyD&amp;quot;:{&lt;br /&gt;
               &amp;quot;value&amp;quot;:&amp;quot;valuePropertyD&amp;quot;&lt;br /&gt;
            }&lt;br /&gt;
      }&lt;br /&gt;
   },&lt;br /&gt;
   {&lt;br /&gt;
      &amp;quot;output_LambdaFunctionHdrSqs_pass&amp;quot;:{&lt;br /&gt;
         &amp;quot;properties&amp;quot;:{&lt;br /&gt;
            &amp;quot;propertyA&amp;quot;:{&lt;br /&gt;
               &amp;quot;value&amp;quot;:&amp;quot;valueProperty1&amp;quot;&lt;br /&gt;
            }&lt;br /&gt;
         }&lt;br /&gt;
      }&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot; linein&amp;gt;&lt;br /&gt;
&amp;quot;snsSqsTrigger&amp;quot;:true&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Dsq=====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
// An example input and output event of Direct Sqs&lt;br /&gt;
{&lt;br /&gt;
   &amp;quot;LambdaFunctionHdrDsq_input__pass&amp;quot;:{&lt;br /&gt;
      &amp;quot;forStageMatching&amp;quot;:true,&lt;br /&gt;
      &amp;quot;properties&amp;quot;:{&lt;br /&gt;
         &amp;quot;propertyA&amp;quot;:{&lt;br /&gt;
            &amp;quot;forStageMatching&amp;quot;:true,&lt;br /&gt;
            &amp;quot;value&amp;quot;:&amp;quot;valueProperty1&amp;quot;&lt;br /&gt;
         },&lt;br /&gt;
         &amp;quot;propertyB&amp;quot;:{&lt;br /&gt;
            &amp;quot;forStageMatching&amp;quot;:true,&lt;br /&gt;
            &amp;quot;properties&amp;quot;:{&lt;br /&gt;
               &amp;quot;propertyB1&amp;quot;:{&lt;br /&gt;
                  &amp;quot;forStageMatching&amp;quot;:true,&lt;br /&gt;
                  &amp;quot;value&amp;quot;:&amp;quot;valuePropertyB1&amp;quot;&lt;br /&gt;
               }&lt;br /&gt;
            }&lt;br /&gt;
         },&lt;br /&gt;
         &amp;quot;propertyC&amp;quot;:{&lt;br /&gt;
            &amp;quot;eventValue&amp;quot;:[&lt;br /&gt;
               &amp;quot;valuePropertyC1&amp;quot;,&lt;br /&gt;
               &amp;quot;valuePropertyC2&amp;quot;,&lt;br /&gt;
               &amp;quot;valuePropertyC3&amp;quot;&lt;br /&gt;
            ]&lt;br /&gt;
         }&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;DirectSqs&amp;quot;:true,&lt;br /&gt;
      &amp;quot;messageAttributes&amp;quot;:{&lt;br /&gt;
         &amp;quot;msgTag&amp;quot;:{&lt;br /&gt;
           &amp;quot;forStageMatching&amp;quot;:true,&lt;br /&gt;
           &amp;quot;value&amp;quot;:&amp;quot;msgTag&amp;quot;&lt;br /&gt;
          },&lt;br /&gt;
          &amp;quot;propertyD&amp;quot;:{&lt;br /&gt;
           &amp;quot;forStageMatching&amp;quot;:true,&lt;br /&gt;
           &amp;quot;value&amp;quot;:&amp;quot;valuePropertyD&amp;quot;&lt;br /&gt;
          }&lt;br /&gt;
      }&lt;br /&gt;
   },&lt;br /&gt;
   {&lt;br /&gt;
      &amp;quot;output_LambdaFunctionHdrDsq_pass&amp;quot;:{&lt;br /&gt;
         &amp;quot;forStageMatching&amp;quot;:true,&lt;br /&gt;
         &amp;quot;properties&amp;quot;:{&lt;br /&gt;
            &amp;quot;propertyA&amp;quot;:{&lt;br /&gt;
               &amp;quot;forStageMatching&amp;quot;:true,&lt;br /&gt;
               &amp;quot;value&amp;quot;:&amp;quot;valueProperty1&amp;quot;&lt;br /&gt;
            }&lt;br /&gt;
         }&lt;br /&gt;
      }&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* DirectSqs = true &lt;br /&gt;
:: for initialStage of Dsq&lt;br /&gt;
* messageAttributes is optional&lt;br /&gt;
&lt;br /&gt;
=====Inv=====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;LambdaFunctionHdrInv_input__pass&amp;quot;:{&lt;br /&gt;
     &amp;quot;forStageMatching&amp;quot;:true,&lt;br /&gt;
     &amp;quot;properties&amp;quot;:{&lt;br /&gt;
        &amp;quot;propertyA&amp;quot;:{&lt;br /&gt;
           &amp;quot;forStageMatching&amp;quot;:true,&lt;br /&gt;
           &amp;quot;value&amp;quot;:&amp;quot;valueProperty1&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;propertyB&amp;quot;:{&lt;br /&gt;
           &amp;quot;forStageMatching&amp;quot;:true,&lt;br /&gt;
           &amp;quot;properties&amp;quot;:{&lt;br /&gt;
              &amp;quot;propertyB1&amp;quot;:{&lt;br /&gt;
                 &amp;quot;forStageMatching&amp;quot;:true,&lt;br /&gt;
                 &amp;quot;value&amp;quot;:&amp;quot;valuePropertyB1&amp;quot;&lt;br /&gt;
              }&lt;br /&gt;
           }&lt;br /&gt;
        }&lt;br /&gt;
     }&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
        &amp;quot;output_LambdaFunctionHdrInv_pass&amp;quot;:{&lt;br /&gt;
           &amp;quot;forStageMatching&amp;quot;:true,&lt;br /&gt;
           &amp;quot;properties&amp;quot;:{&lt;br /&gt;
              &amp;quot;propertyA&amp;quot;:{&lt;br /&gt;
                 &amp;quot;forStageMatching&amp;quot;:true,&lt;br /&gt;
                 &amp;quot;value&amp;quot;:&amp;quot;valueProperty1&amp;quot;&lt;br /&gt;
              }&lt;br /&gt;
           }&lt;br /&gt;
        }&lt;br /&gt;
     }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Api=====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
// An example input and output event of API&lt;br /&gt;
{&lt;br /&gt;
	&amp;quot;LambdaFunctionHdrApi_input__pass_notTestAuthorizer&amp;quot;: { &lt;br /&gt;
		&amp;quot;forstageMatvhing&amp;quot;: true, &lt;br /&gt;
		&amp;quot;properties&amp;quot;: { &lt;br /&gt;
			&amp;quot;body&amp;quot;: { &lt;br /&gt;
				&amp;quot;properties&amp;quot;: { &lt;br /&gt;
					&amp;quot;propertyA&amp;quot;: { &lt;br /&gt;
						&amp;quot;testValueMatches&amp;quot;: false, &lt;br /&gt;
						&amp;quot;value&amp;quot;: &amp;quot;valueProperty1&amp;quot;, &lt;br /&gt;
					}, &lt;br /&gt;
					&amp;quot;propertyB&amp;quot;: { &lt;br /&gt;
						&amp;quot;properties&amp;quot;: { &lt;br /&gt;
							&amp;quot;propertyB1&amp;quot;: { &lt;br /&gt;
								&amp;quot;value&amp;quot;: &amp;quot;valuePropertyB1&amp;quot;, &lt;br /&gt;
							} &lt;br /&gt;
						} &lt;br /&gt;
					}, &lt;br /&gt;
					&amp;quot;propertyC&amp;quot;: { &lt;br /&gt;
						&amp;quot;eventValue&amp;quot;: [ &lt;br /&gt;
							&amp;quot;valuePropertyC1&amp;quot;, &lt;br /&gt;
							&amp;quot;valuePropertyC2&amp;quot;, &lt;br /&gt;
							&amp;quot;valuePropertyC3&amp;quot;, &lt;br /&gt;
						] &lt;br /&gt;
					},&lt;br /&gt;
					... &lt;br /&gt;
				} &lt;br /&gt;
			} &lt;br /&gt;
		}&lt;br /&gt;
	}, &lt;br /&gt;
	&amp;quot;Output_LambdaFunctionHdrApi_input__pass_notTestAuthorizer&amp;quot;: { &lt;br /&gt;
		&amp;quot;properties&amp;quot;: { &lt;br /&gt;
			&amp;quot;body&amp;quot;: { &lt;br /&gt;
				&amp;quot;properties&amp;quot;: { &lt;br /&gt;
					&amp;quot;propertyA&amp;quot;: { &lt;br /&gt;
						&amp;quot;testValueMatches&amp;quot;: false, &lt;br /&gt;
						&amp;quot;value&amp;quot;: &amp;quot;valueProperty1&amp;quot;&lt;br /&gt;
					}, &lt;br /&gt;
					...&lt;br /&gt;
				} &lt;br /&gt;
			} &lt;br /&gt;
		}  &lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====S3=====&lt;br /&gt;
&lt;br /&gt;
====dynamodb====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
// An example event of Dynamodb //optional &lt;br /&gt;
{&lt;br /&gt;
	{inputEventTag}__dynamodb_{action}_{tablename}: { // eg. &amp;quot;Complexfilter_ProcessComplexfilter_logical_basic__dynamodb_update_FilterMain&amp;quot;&lt;br /&gt;
	&amp;quot;forStageMatching&amp;quot;: true,&lt;br /&gt;
     &amp;quot;properties&amp;quot;: {&lt;br /&gt;
        &amp;quot;filterMainUniqueRequestId&amp;quot;: {&lt;br /&gt;
          &amp;quot;testValueMatches&amp;quot;: fase,&lt;br /&gt;
          &amp;quot;value&amp;quot;: &amp;quot;bbc4f4a9-2032-4dec-9129-8c7d169fecc5&amp;quot;&lt;br /&gt;
         },&lt;br /&gt;
        &amp;quot;filterObject&amp;quot;: {&lt;br /&gt;
        &amp;quot;forStageMatching&amp;quot;: true,&lt;br /&gt;
        &amp;quot;properties&amp;quot;: {&lt;br /&gt;
          &amp;quot;logicalType&amp;quot;: {&lt;br /&gt;
            &amp;quot;value&amp;quot;: &amp;quot;partitionKey&amp;quot;&lt;br /&gt;
          },&lt;br /&gt;
          &amp;quot;comparison&amp;quot;: {&lt;br /&gt;
            &amp;quot;value&amp;quot;: &amp;quot;equals&amp;quot;&lt;br /&gt;
          },&lt;br /&gt;
          &amp;quot;type&amp;quot;: {&lt;br /&gt;
            &amp;quot;value&amp;quot;: &amp;quot;logical&amp;quot;&lt;br /&gt;
          },&lt;br /&gt;
          &amp;quot;partitionKey&amp;quot;: {&lt;br /&gt;
            &amp;quot;forStageMatching&amp;quot;: true,&lt;br /&gt;
            &amp;quot;value&amp;quot;: &amp;quot;mockIntegratioTestCPF&amp;quot;&lt;br /&gt;
          }&lt;br /&gt;
        }&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;filterMainExpiryTime&amp;quot;: {&lt;br /&gt;
        &amp;quot;testValueMatches&amp;quot;: fase,&lt;br /&gt;
        &amp;quot;value&amp;quot;: 1731980802858&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;filterMainStatus&amp;quot;: {&lt;br /&gt;
       &amp;quot;forStageMatching&amp;quot;: true,&lt;br /&gt;
        &amp;quot;value&amp;quot;: &amp;quot;processing&amp;quot;&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;createTime&amp;quot;: {&lt;br /&gt;
        &amp;quot;testValueMatches&amp;quot;: fase,&lt;br /&gt;
        &amp;quot;value&amp;quot;: 1731894402678&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;objType&amp;quot;: {&lt;br /&gt;
        &amp;quot;forStageMatching&amp;quot;: true,&lt;br /&gt;
        &amp;quot;properties&amp;quot;: {&lt;br /&gt;
          &amp;quot;serviceTag&amp;quot;: {&lt;br /&gt;
            &amp;quot;forStageMatching&amp;quot;: true,&lt;br /&gt;
            &amp;quot;value&amp;quot;: &amp;quot;IntTesting&amp;quot;&lt;br /&gt;
          },&lt;br /&gt;
          &amp;quot;objectType&amp;quot;: {&lt;br /&gt;
            &amp;quot;forStageMatching&amp;quot;: true,&lt;br /&gt;
            &amp;quot;value&amp;quot;: &amp;quot;TestRecord&amp;quot;&lt;br /&gt;
          }&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;keyValues&amp;quot;: {&lt;br /&gt;
      &amp;quot;filterMainId&amp;quot;: &amp;quot;4865d2451a621cb7f71225cfabf2df4f98e20801&amp;quot;,&lt;br /&gt;
      &amp;quot;objTypeId&amp;quot;: &amp;quot;cdb170690571df7522b3850920fce02507c077ee&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
	} &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* partition key: filterMainId&lt;br /&gt;
* sort key: objTypeId&lt;br /&gt;
&lt;br /&gt;
[[2021-01-15 - Integration Testing - Adding DynamoDB result tests]]&lt;br /&gt;
&lt;br /&gt;
===Type paramiter===&lt;br /&gt;
use for evnet and dyanmodb event&lt;br /&gt;
====Normal====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 object: {&lt;br /&gt;
  forStageMatching: true,&lt;br /&gt;
  properties: {&lt;br /&gt;
    name:{&lt;br /&gt;
     forStageMatching: true,&lt;br /&gt;
     value:&amp;quot;Tom&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
   }&lt;br /&gt;
 },&lt;br /&gt;
 array: {&lt;br /&gt;
  forStageMatching: true,&lt;br /&gt;
  useIsEqual: true,&lt;br /&gt;
  eventValue: [&lt;br /&gt;
   {&lt;br /&gt;
     &amp;quot;relTypeAndDirection&amp;quot;: {&lt;br /&gt;
       &amp;quot;relType&amp;quot;: {&lt;br /&gt;
         &amp;quot;serviceTag&amp;quot;: &amp;quot;maxxCart2&amp;quot;,&lt;br /&gt;
         &amp;quot;relationshipTag&amp;quot;: &amp;quot;hasCartOrder&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;relationshipDirection&amp;quot;: &amp;quot;from&amp;quot;&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;targetObjects&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;objType&amp;quot;: {&lt;br /&gt;
           &amp;quot;serviceTag&amp;quot;: &amp;quot;maxxCart2&amp;quot;,&lt;br /&gt;
           &amp;quot;objectType&amp;quot;: &amp;quot;cartOrder&amp;quot;&lt;br /&gt;
          }&lt;br /&gt;
        }&lt;br /&gt;
      ]&lt;br /&gt;
    }&lt;br /&gt;
  ]&lt;br /&gt;
 },&lt;br /&gt;
 number: {&lt;br /&gt;
  forStageMatching: true,&lt;br /&gt;
  value: 1111&lt;br /&gt;
 },&lt;br /&gt;
 string: {&lt;br /&gt;
  forStageMatching: true,&lt;br /&gt;
  value: &amp;quot;hi&amp;quot;&lt;br /&gt;
 },&lt;br /&gt;
 boolean: {&lt;br /&gt;
  forStageMatching: true,&lt;br /&gt;
  value: true&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
 forStageMatching: true&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
::set true for check match value,It is not necessary to set every value&lt;br /&gt;
:::use in test importent paramiter&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
testValueMatches:false&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
::setting paramiter require on create but can not test random value eg: identifier or timeStamp or uuid&lt;br /&gt;
&lt;br /&gt;
====Empty====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
 EmptyString:{&lt;br /&gt;
forStageMatching: true,&lt;br /&gt;
  value:&amp;quot;&amp;quot;&lt;br /&gt;
 },&lt;br /&gt;
 EmptyArray:{&lt;br /&gt;
   forStageMatching: true,&lt;br /&gt;
   useIsEqual: true,&lt;br /&gt;
   eventValue: []&lt;br /&gt;
 },&lt;br /&gt;
 EmptyObject:{&lt;br /&gt;
  forStageMatching: true,&lt;br /&gt;
  value:{}&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Error====&lt;br /&gt;
can test noRetryError&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;quot;errorMessage&amp;quot;: {&lt;br /&gt;
    forStageMatching: true,&lt;br /&gt;
    &amp;quot;value&amp;quot;: &amp;quot;Not found schema of {serviceTag:TestGraphHandler, objectType:notFoundObjType}&amp;quot;&lt;br /&gt;
   }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Paramiter random====&lt;br /&gt;
Can not test case random numbber or uuid.&lt;br /&gt;
But requriOnCreate mush be set &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
testValueMatches:false&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
or set&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
forStageMatching:false&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=tests=&lt;br /&gt;
Syntax is array of object&lt;br /&gt;
==Syntax name== &lt;br /&gt;
===Testtag name ===&lt;br /&gt;
*{integrationTestTag}&lt;br /&gt;
#Test Own servcie or not a lot stage&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
Test_{inputEventTag}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
#Mix multiple servcie and multiple stage&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt; &lt;br /&gt;
IntegrationTest_{inputEventTag}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===File name ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt; &lt;br /&gt;
{integrationTestTag}.json&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Setting of test==&lt;br /&gt;
[[Service - Integration Test Config#tests.js Syntax|syntax test]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
            integrationTestTag: {integrationTestTag},&lt;br /&gt;
            productionSafe: true|false, //default false&lt;br /&gt;
            noInitialStage: true, // default false, if set to true, no error when no foundInitialStages found&lt;br /&gt;
            errorIfStageUndefined: true|false, //default false&lt;br /&gt;
            errorIfInvokeUndefined: true|false, //default false,&lt;br /&gt;
            dynamoDBSeedDataTags:[&amp;quot;seedDataDB_test_case_xx&amp;quot;], //[seedDataTag] optional if have seed data for test&lt;br /&gt;
            graphSeedDataTags:[&amp;quot;seedDataGraph_test_case_xx&amp;quot;], //[seedDataTag] optional if have seed data for test&lt;br /&gt;
            cleaningeDynamoOneRecordsTags: [&amp;quot;cleaningSeed_partitionKey_sortKey_normol&amp;quot;], //optional&lt;br /&gt;
            cleaningeDynamoManyRecordsTags: [], // optional&lt;br /&gt;
            stages:[&lt;br /&gt;
               ...&lt;br /&gt;
            ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
*[[2025-11-20 IntegrationTest#dynamoDBSeedDataTags|dynamoDBSeedDataTags]]&lt;br /&gt;
*[[2025-11-20 IntegrationTest#graphSeedDataTags|graphSeedDataTags]]&lt;br /&gt;
*[[2025-11-20 IntegrationTest#cleaningeDynamoOneRecordsTags|cleaningeDynamoOneRecordsTags]]&lt;br /&gt;
*[[2025-11-20 IntegrationTest#cleaningeDynamoManyRecordsTags|cleaningeDynamoManyRecordsTags]]&lt;br /&gt;
&lt;br /&gt;
==Stages==&lt;br /&gt;
====Initiate stage====&lt;br /&gt;
:&#039;&#039;&#039;&amp;quot;initialStage&amp;quot;:true&#039;&#039;&#039;&lt;br /&gt;
[[Service_-_Integration_Test_Config#tests.js Syntax|detail property of test]]&lt;br /&gt;
=====HandlerService=====&lt;br /&gt;
======Sqs======&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;quot;stages&amp;quot;:[&lt;br /&gt;
         {&lt;br /&gt;
            &amp;quot;initialStage&amp;quot;:true,&lt;br /&gt;
            &amp;quot;inputEventTag&amp;quot;:&amp;quot;Locations_ProcessLocationNodeSomting_casenotHaveData&amp;quot;,&lt;br /&gt;
            &amp;quot;serviceName&amp;quot;:&amp;quot;Locations&amp;quot;,&lt;br /&gt;
            &amp;quot;resourceType&amp;quot;:&amp;quot;Lambda&amp;quot;,&lt;br /&gt;
            &amp;quot;resourceName&amp;quot;:&amp;quot;ProcessLocationNodeSomtingHdrDsq&amp;quot;,&lt;br /&gt;
            &amp;quot;outputEventTag&amp;quot;:&amp;quot;Output_Locations_ProcessLocationNodeSomting_casenotHaveData&amp;quot;&lt;br /&gt;
         }&lt;br /&gt;
      ]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
======Dsq======&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
stages: [&lt;br /&gt;
        {&lt;br /&gt;
          initialStage: true,&lt;br /&gt;
          inputEventTag: &#039;LambdaFunctionHdrDsq_input_singleStage_directSqs__pass&#039;,&lt;br /&gt;
          serviceName: &#039;ServiceTemplate&#039;,&lt;br /&gt;
          resourceType: &#039;Lambda&#039;,&lt;br /&gt;
          resourceName: &#039;LambdaFunctionHdrDsq&#039;,&lt;br /&gt;
          outputEventTag: &#039;LambdaFunctionHdrDsq_output__returnvalue_pass&#039;,&lt;br /&gt;
          // **** not set snsServiceName and snsTopic&lt;br /&gt;
          // can be test dynamodbOutput&lt;br /&gt;
        }&lt;br /&gt;
      ]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
======Api======&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;quot;stages&amp;quot;:[&lt;br /&gt;
    {&lt;br /&gt;
       &amp;quot;initialStage&amp;quot;:true,&lt;br /&gt;
       &amp;quot;inputEventTag&amp;quot;:&amp;quot;LambdaFunctionHdrApi_input__pass&amp;quot;,&lt;br /&gt;
       &amp;quot;serviceName&amp;quot;:&amp;quot;ServiceTemplate&amp;quot;,&lt;br /&gt;
       &amp;quot;resourceType&amp;quot;:&amp;quot;Lambda&amp;quot;,&lt;br /&gt;
       &amp;quot;resourceName&amp;quot;:&amp;quot;LambdaFunctionHdrApi&amp;quot;,&lt;br /&gt;
       &amp;quot;outputEventTag&amp;quot;:&amp;quot;LambdaFunctionHdrApi_output__pass&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
======Inv======&lt;br /&gt;
*&#039;&#039;&#039;single stage&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
[{&lt;br /&gt;
   &amp;quot;integrationTestTag&amp;quot;:&amp;quot;LambdaFunctionHdrInv__pass&amp;quot;,&lt;br /&gt;
   &amp;quot;productionSafe&amp;quot;:false,&lt;br /&gt;
   &amp;quot;errorIfStageUndefined&amp;quot;:false,&lt;br /&gt;
   &amp;quot;errorIfInvokeUndefined&amp;quot;:false,&lt;br /&gt;
   &amp;quot;dynamoDBSeedDataTags&amp;quot;:[&amp;quot;seedDataDB_test_case_xx&amp;quot;], //[seedDataTag] optional if have seed data for test&lt;br /&gt;
   &amp;quot;graphSeedDataTags&amp;quot;:[&amp;quot;seedDataGraph_test_case_xx&amp;quot;], //[seedDataTag] optional if have seed data for test&lt;br /&gt;
   &amp;quot;cleaningeDynamoOneRecordsTags&amp;quot;: [&amp;quot;cleaningSeed_partitionKey_sortKey_normol&amp;quot;], //optional&lt;br /&gt;
   &amp;quot;cleaningeDynamoManyRecordsTags&amp;quot;: []&lt;br /&gt;
   &amp;quot;stages&amp;quot;:[&lt;br /&gt;
      {&lt;br /&gt;
         &amp;quot;initialStage&amp;quot;:true,&lt;br /&gt;
         &amp;quot;inputEventTag&amp;quot;:&amp;quot;LambdaFunctionHdrInv_input__pass&amp;quot;,&lt;br /&gt;
         &amp;quot;serviceName&amp;quot;:&amp;quot;ServiceTemplate&amp;quot;,&lt;br /&gt;
         &amp;quot;resourceType&amp;quot;:&amp;quot;Lambda&amp;quot;,&lt;br /&gt;
         &amp;quot;resourceName&amp;quot;:&amp;quot;LambdaFunctionHdrInv&amp;quot;,&lt;br /&gt;
         &amp;quot;outputEventTag&amp;quot;:&amp;quot;LambdaFunctionHdrInv_output__pass&amp;quot;&lt;br /&gt;
      }&lt;br /&gt;
   ]&lt;br /&gt;
}]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;invoke multiple stage&#039;&#039;&#039; &lt;br /&gt;
:*Each stage test can invoke multiple lambda by use &amp;quot;eventStage Tag&amp;quot; point to stage for test integration test.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
[{&lt;br /&gt;
   &amp;quot;integrationTestTag&amp;quot;:&amp;quot;LambdaFunctionHdrInv_invokes__pass&amp;quot;,&lt;br /&gt;
   &amp;quot;productionSafe&amp;quot;:false,&lt;br /&gt;
   &amp;quot;errorIfStageUndefined&amp;quot;:false,&lt;br /&gt;
   &amp;quot;errorIfInvokeUndefined&amp;quot;:false,&lt;br /&gt;
   &amp;quot;dynamoDBSeedDataTags&amp;quot;:[], //[seedDataTag] optional if have seed data for test&lt;br /&gt;
   &amp;quot;graphSeedDataTags&amp;quot;:[], //[seedDataTag] optional if have seed data for test&lt;br /&gt;
   &amp;quot;cleaningeDynamoOneRecordsTags&amp;quot;: [], //optional&lt;br /&gt;
   &amp;quot;cleaningeDynamoManyRecordsTags&amp;quot;: [], // optional&lt;br /&gt;
   &amp;quot;stages&amp;quot;:[&lt;br /&gt;
      {&lt;br /&gt;
         &amp;quot;initialStage&amp;quot;:true,&lt;br /&gt;
         &amp;quot;inputEventTag&amp;quot;:&amp;quot;LambdaFunctionHdrInv_input__pass&amp;quot;,&lt;br /&gt;
         &amp;quot;serviceName&amp;quot;:&amp;quot;ServiceTemplate&amp;quot;,&lt;br /&gt;
         &amp;quot;resourceType&amp;quot;:&amp;quot;Lambda&amp;quot;,&lt;br /&gt;
         &amp;quot;resourceName&amp;quot;:&amp;quot;LambdaFunctionHdrInv&amp;quot;,&lt;br /&gt;
         &amp;quot;outputEventTag&amp;quot;:&amp;quot;LambdaFunctionHdrInv_output__pass&amp;quot;,&lt;br /&gt;
         &amp;quot;invokes&amp;quot;:[&lt;br /&gt;
            {&lt;br /&gt;
               &amp;quot;eventStageTag&amp;quot;:&amp;quot;service_invokesB__pass&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            {&lt;br /&gt;
               &amp;quot;eventStageTag&amp;quot;:&amp;quot;service_invokesD__pass&amp;quot;&lt;br /&gt;
            }&lt;br /&gt;
         ]&lt;br /&gt;
      },&lt;br /&gt;
      {&lt;br /&gt;
         &amp;quot;eventStageTag&amp;quot;:&amp;quot;service_invokesB__pass&amp;quot;,&lt;br /&gt;
         &amp;quot;inputEventTag&amp;quot;:&amp;quot;input_service_invokes__pass&amp;quot;,&lt;br /&gt;
         &amp;quot;serviceName&amp;quot;:&amp;quot;ServiceTemplate_B&amp;quot;,&lt;br /&gt;
         &amp;quot;resourceType&amp;quot;:&amp;quot;Lambda&amp;quot;,&lt;br /&gt;
         &amp;quot;resourceName&amp;quot;:&amp;quot;LambdaFunction_B_HdrInv&amp;quot;,&lt;br /&gt;
         &amp;quot;outputEventTag&amp;quot;:&amp;quot;output_service_invokes__pass&amp;quot;&lt;br /&gt;
      },&lt;br /&gt;
      {&lt;br /&gt;
         &amp;quot;eventStageTag&amp;quot;:&amp;quot;service_invokesD__pass&amp;quot;,&lt;br /&gt;
         &amp;quot;inputEventTag&amp;quot;:&amp;quot;input_service_invokesD__pass&amp;quot;,&lt;br /&gt;
         &amp;quot;serviceName&amp;quot;:&amp;quot;ServiceTemplate_D&amp;quot;,&lt;br /&gt;
         &amp;quot;resourceType&amp;quot;:&amp;quot;Lambda&amp;quot;,&lt;br /&gt;
         &amp;quot;resourceName&amp;quot;:&amp;quot;LambdaFunction_D_HdrInv&amp;quot;,&lt;br /&gt;
         &amp;quot;outputEventTag&amp;quot;:&amp;quot;output_service_invokesD__pass&amp;quot;&lt;br /&gt;
      }&lt;br /&gt;
   ]&lt;br /&gt;
}]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
======S3======&lt;br /&gt;
======Batch======&lt;br /&gt;
&lt;br /&gt;
====GeneratedSeedData====&lt;br /&gt;
*Integrationtest must be delete identifier every time before test.&lt;br /&gt;
*Set &#039;generatedSeedData&#039; in file tests.json case by case of stage eg: stages[0] create identifier is randomOnCreate will set &#039;generatedSeedData&#039; and stages[1] create relationship is randomOnCreate(It is usually random, except in the case of relationship version) set generatedSeedData this stages[1].&lt;br /&gt;
*How to delete case identifier rendomOnCreate?: set in stage use setting generateSeedData &amp;quot;randomOnCreateIdentifier&amp;quot;&lt;br /&gt;
#randomOnCreateIdentifier&lt;br /&gt;
#notRandomOnIdentifier&lt;br /&gt;
#relationships&lt;br /&gt;
=====randomOnCreateIdentifier=====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;quot;stages&amp;quot;: [&lt;br /&gt;
      {&lt;br /&gt;
        &amp;quot;initialStage&amp;quot;: true,&lt;br /&gt;
        &amp;quot;inputEventTag&amp;quot;: &amp;quot;MLocation_CreateHdrSqs__case_NodeVersionData_Jaya&amp;quot;,&lt;br /&gt;
        &amp;quot;serviceTag&amp;quot;: &amp;quot;MLocations&amp;quot;,&lt;br /&gt;
        &amp;quot;resourceType&amp;quot;: &amp;quot;Lambda&amp;quot;,&lt;br /&gt;
        &amp;quot;resourceName&amp;quot;: &amp;quot;CreateHdrSqs&amp;quot;,&lt;br /&gt;
        &amp;quot;snsServiceName&amp;quot;: &amp;quot;MLocations&amp;quot;,&lt;br /&gt;
        &amp;quot;snsTopic&amp;quot;: &amp;quot;Create_In&amp;quot;,&lt;br /&gt;
        &amp;quot;generatedSeedData&amp;quot;: {&lt;br /&gt;
          &amp;quot;randomOnCreateIdentifier&amp;quot;: [&lt;br /&gt;
            {&lt;br /&gt;
              &amp;quot;objType&amp;quot;: {&lt;br /&gt;
                &amp;quot;serviceTag&amp;quot;: &amp;quot;MLocations&amp;quot;,&lt;br /&gt;
                &amp;quot;objectType&amp;quot;: &amp;quot;Member&amp;quot;&lt;br /&gt;
              },&lt;br /&gt;
              &amp;quot;identifierValue&amp;quot;: &amp;quot;Jaya-member-001&amp;quot;&lt;br /&gt;
            }&lt;br /&gt;
          ]&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
=====notRandomOnIdentifier=====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;quot;stages&amp;quot;: [&lt;br /&gt;
      {&lt;br /&gt;
        &amp;quot;initialStage&amp;quot;: true,&lt;br /&gt;
        &amp;quot;inputEventTag&amp;quot;: &amp;quot;MLocation_CreateHdrSqs__case_NodeVersionData_Jaya&amp;quot;,&lt;br /&gt;
        &amp;quot;serviceTag&amp;quot;: &amp;quot;MLocations&amp;quot;,&lt;br /&gt;
        &amp;quot;resourceType&amp;quot;: &amp;quot;Lambda&amp;quot;,&lt;br /&gt;
        &amp;quot;resourceName&amp;quot;: &amp;quot;CreateHdrSqs&amp;quot;,&lt;br /&gt;
        &amp;quot;snsServiceName&amp;quot;: &amp;quot;MLocations&amp;quot;,&lt;br /&gt;
        &amp;quot;snsTopic&amp;quot;: &amp;quot;Create_In&amp;quot;,&lt;br /&gt;
        &amp;quot;generatedSeedData&amp;quot;: {&lt;br /&gt;
          &amp;quot;notRandomOnIdentifier&amp;quot;: [&lt;br /&gt;
            {&lt;br /&gt;
              &amp;quot;objType&amp;quot;: {&lt;br /&gt;
                &amp;quot;serviceTag&amp;quot;: &amp;quot;gggg&amp;quot;,&lt;br /&gt;
                &amp;quot;objectType&amp;quot;: &amp;quot;ssssss&amp;quot;&lt;br /&gt;
              },&lt;br /&gt;
              &amp;quot;identifiers&amp;quot;: {&lt;br /&gt;
                &amp;quot;topId&amp;quot;: &amp;quot;123456&amp;quot;&lt;br /&gt;
              }&lt;br /&gt;
            }&lt;br /&gt;
          ]&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    ]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
=====relationships=====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;quot;stages&amp;quot;: [&lt;br /&gt;
      {&lt;br /&gt;
        &amp;quot;initialStage&amp;quot;: true,&lt;br /&gt;
        &amp;quot;inputEventTag&amp;quot;: &amp;quot;MLocation_CreateHdrSqs__case_NodeVersionData_Jaya&amp;quot;,&lt;br /&gt;
        &amp;quot;serviceTag&amp;quot;: &amp;quot;MLocations&amp;quot;,&lt;br /&gt;
        &amp;quot;resourceType&amp;quot;: &amp;quot;Lambda&amp;quot;,&lt;br /&gt;
        &amp;quot;resourceName&amp;quot;: &amp;quot;CreateHdrSqs&amp;quot;,&lt;br /&gt;
        &amp;quot;snsServiceName&amp;quot;: &amp;quot;MLocations&amp;quot;,&lt;br /&gt;
        &amp;quot;snsTopic&amp;quot;: &amp;quot;Create_In&amp;quot;,&lt;br /&gt;
        &amp;quot;generatedSeedData&amp;quot;: {&lt;br /&gt;
         &amp;quot;relationships&amp;quot;: [&lt;br /&gt;
            {&lt;br /&gt;
              &amp;quot;relType&amp;quot;: {&lt;br /&gt;
                &amp;quot;serviceTag&amp;quot;: &amp;quot;PaymentMethodGeneric&amp;quot;,&lt;br /&gt;
                &amp;quot;relationshipTag&amp;quot;: &amp;quot;disabledPaymentMethodGenericPropertyValue&amp;quot;&lt;br /&gt;
              },&lt;br /&gt;
              &amp;quot;relId&amp;quot;: &amp;quot;f4f73de7-647c-4b3b-8043-87cc002f361a&amp;quot;&lt;br /&gt;
            }&lt;br /&gt;
          ]&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    ]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Dynamodb==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
stages: [&lt;br /&gt;
        {&lt;br /&gt;
          initialStage: true,&lt;br /&gt;
          inputEventTag: &#039;Locations_LambdaFunctionHdrDsq_singleStage_directSqs__pass&#039;,&lt;br /&gt;
          serviceName: &#039;ServiceTemplate&#039;,&lt;br /&gt;
          resourceType: &#039;Lambda&#039;,&lt;br /&gt;
          resourceName: &#039;LambdaFunctionHdrDsq&#039;,&lt;br /&gt;
          outputEventTag: &#039;output_Locations_LambdaFunctionHdrDsq_singleStage_directSqs__pass&#039;,&lt;br /&gt;
          dynamodbOutputEventIdentifiers: [&lt;br /&gt;
			{&lt;br /&gt;
              serviceName: {tableName}, //service that deployed the DynamoDB table, so can build table&#039;s full resource name&lt;br /&gt;
              resourceName: {resourceName}, //DynamoDB resourceName&lt;br /&gt;
              eventTag: {eventTagDynamoDB}&lt;br /&gt;
		    }&lt;br /&gt;
          ],&lt;br /&gt;
        }&lt;br /&gt;
      ]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Result of integrationtest =&lt;br /&gt;
Data have 2 table &amp;quot;TestRecord&amp;quot; and &amp;quot;TestUnit&amp;quot;.&lt;br /&gt;
:- TestRecord is table all unti of stage inside eg input output invokes and dynamodb&lt;br /&gt;
:- TestUnit is store status each unit &lt;br /&gt;
each unit save in table TestUnit&lt;br /&gt;
testRecordId is  name of test concat with testTime.&lt;br /&gt;
testUnitId is point to position of unti instage.&lt;br /&gt;
resultStatus is status of unit.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
eg:&lt;br /&gt;
input_0 = stages index 0 result &#039;&#039;&#039;input&#039;&#039;&#039;&lt;br /&gt;
output_1 = stages index 1 result &#039;&#039;&#039;output&#039;&#039;&#039;&lt;br /&gt;
invokeInput_0_1 = stages index 0 result &#039;&#039;&#039;invokes&#039;&#039;&#039; index 1 position input &lt;br /&gt;
invokeOutput_0_1 = stages index 0 result &#039;&#039;&#039;invokes&#039;&#039;&#039; index 1 position output&lt;br /&gt;
dynamodb_0_1 =  stages index 0 result &#039;&#039;&#039;dynamodb&#039;&#039;&#039; index 1.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
after all TestUnit finish (check  by awaitingMultiplestep penditnStep is integrationtestTag awaitingStepId is each TestUnit )&lt;br /&gt;
check all awaitingStep finish send message to ultimateIntegrationtest for sumla all test is status&lt;br /&gt;
&lt;br /&gt;
== Summary of test status == &lt;br /&gt;
:1.testStatus is &amp;quot;passed&amp;quot; all unit passed.&lt;br /&gt;
:2.testStatus is &amp;quot;failed&amp;quot;  have some is failed.&lt;br /&gt;
:3.testStatus is &amp;quot;processing&amp;quot; have some is have status processing after check all awaiting step is finish.&lt;br /&gt;
:4.testStatus is &amp;quot;failed&amp;quot; have record &amp;quot;errorsTest&amp;quot; in case &amp;quot;not match stage invoke&amp;quot;, &#039;found multiple matchingInvokes&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*[[2025-02-20 - Integration Test examples#tests.js Syntax|Syntax Dynamodb]]&lt;br /&gt;
&lt;br /&gt;
=How to test integrationtest s3=&lt;br /&gt;
[[Developer guide for making Integration Tests]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Working documents| 2025-11-20]]&lt;br /&gt;
[[Category:Working documents - Integration Testing| 2025-11-20]]&lt;/div&gt;</summary>
		<author><name>Mint</name></author>
	</entry>
	<entry>
		<id>https://izara.io/wiki/index.php?title=2025-11-20_IntegrationTest&amp;diff=4581</id>
		<title>2025-11-20 IntegrationTest</title>
		<link rel="alternate" type="text/html" href="https://izara.io/wiki/index.php?title=2025-11-20_IntegrationTest&amp;diff=4581"/>
		<updated>2026-08-17T03:19:10Z</updated>

		<summary type="html">&lt;p&gt;Mint: /* dynamoDBSeedDataTags */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Reference:&lt;br /&gt;
&lt;br /&gt;
*[[2020-10-01 - Integration Test Config - Functions|IntegrationtestConfig]]&lt;br /&gt;
*[[2020-10-01 - Integration Testing - Lambda Functions|Integrationtesting]]&lt;br /&gt;
*[[2025-02-20 - Integration Test examples|Example]]&lt;br /&gt;
&lt;br /&gt;
= File extension =&lt;br /&gt;
&lt;br /&gt;
uploadS3: &amp;quot;.json&amp;quot;&lt;br /&gt;
integrationtestConfig: &amp;quot;.js&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=TestRecord=&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JSON&amp;quot;&amp;gt;&lt;br /&gt;
[&lt;br /&gt;
  {&lt;br /&gt;
    integrationTestTag: &amp;quot;Integrationtest_xx&amp;quot;,&lt;br /&gt;
    testStartedTimestamp: 111111111, // start time&lt;br /&gt;
    bucketName: &amp;quot;integrationtest-config-us-east-2&amp;quot;,&lt;br /&gt;
    lastUpdateUniqueRequestId: &amp;quot;sssss&amp;quot;, //_izContext.uniqueRequestId protacts race coditionn dynamodb&lt;br /&gt;
    testStatus: &amp;quot;passed&amp;quot;,//failed,processing,passed&lt;br /&gt;
    testCompleteTimestamp: 1111113, // all test finish&lt;br /&gt;
    stages: [&lt;br /&gt;
      {&lt;br /&gt;
        stageConfig: {&lt;br /&gt;
          //straight copy of this stage from integration test config&lt;br /&gt;
          inputEventTag: &amp;quot;xx&amp;quot;,&lt;br /&gt;
          inputEventConfig: {//event input&lt;br /&gt;
          },&lt;br /&gt;
          outputEventTag: &amp;quot;output_xx&amp;quot;,&lt;br /&gt;
          outputEventConfig: {//event out put&lt;br /&gt;
          },&lt;br /&gt;
          resourceName: &amp;quot;ComplexfilterTestProcessComplexfilter&amp;quot;,// function name&lt;br /&gt;
          resourceType: &amp;quot;Lambda&amp;quot;, // function name&lt;br /&gt;
          serviceTag: &amp;quot;Complexfilter&amp;quot;,// (initeate sqs)&lt;br /&gt;
          snsServiceName: &amp;quot;Complexfilter&amp;quot;,// (initeate sqs)&lt;br /&gt;
          snsTopic: &amp;quot;PorcessComplexfilter_In&amp;quot;// (initeate sqs)&lt;br /&gt;
&lt;br /&gt;
        },&lt;br /&gt;
        stageStatus: &amp;quot;waiting&amp;quot;, //waiting|passed|failed,&lt;br /&gt;
        stageFinishedTimestamp: 111111111,// time that all tests finished and testRecord.stages.{stageKey}.stageStatus updated&lt;br /&gt;
        stageResults: {&lt;br /&gt;
          //results at the point of entering the resource (eg a Lambda function is invoked)&lt;br /&gt;
          inputResult: {&lt;br /&gt;
            resultTimestamp: 111111111,//{time result saved},&lt;br /&gt;
            resultStatus: &amp;quot;passed&amp;quot;,//passed|failed,&lt;br /&gt;
            requestParams: {//event input&lt;br /&gt;
            }&lt;br /&gt;
          },&lt;br /&gt;
          //results at the point of returning from the resource (eg a Lambda function returns)&lt;br /&gt;
          outputResult: {&lt;br /&gt;
            resultTimestamp: 111111111,//{time result saved},&lt;br /&gt;
            resultStatus: &amp;quot;passed&amp;quot;,//passed|failed,&lt;br /&gt;
            requestParams: {//event input&lt;br /&gt;
            }&lt;br /&gt;
          },&lt;br /&gt;
          //results at the point of invoking an external resource (eg the tested Lambda function is invoking another Lambda function)&lt;br /&gt;
          invokes: {&lt;br /&gt;
            &amp;quot;serviceName_resourceType_resourceName_inputEventTag &amp;quot;: {&lt;br /&gt;
              invokeTimestamp: 111111111,//{ time result saved },&lt;br /&gt;
              resultTimestamp: 111111112,//{ time result saved },&lt;br /&gt;
              resultStatus: &amp;quot;passed&amp;quot;,//passed | failed,&lt;br /&gt;
              invokeParams: {},//{event invoke input config }&lt;br /&gt;
              requestParams: {}// event invoke input request&lt;br /&gt;
            },&lt;br /&gt;
          },&lt;br /&gt;
          dynamodbResults: [&lt;br /&gt;
            {&lt;br /&gt;
              indexOfDynamodbOutput: 0,&lt;br /&gt;
              requestParams,&lt;br /&gt;
              resultStatus: &amp;quot;passed&amp;quot;,//&lt;br /&gt;
              resultTimestamp: 22222&lt;br /&gt;
            }]&lt;br /&gt;
&lt;br /&gt;
        },&lt;br /&gt;
        stageErrors: [&lt;br /&gt;
          //misc errors encountered&lt;br /&gt;
        ]&lt;br /&gt;
      }]&lt;br /&gt;
&lt;br /&gt;
  }&lt;br /&gt;
]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Seed Data=&lt;br /&gt;
integrationtest manager seed date 2 process&lt;br /&gt;
&lt;br /&gt;
=== Main Seed Data===&lt;br /&gt;
:Save file in s3 (in &#039;&#039;&#039;buckname&#039;&#039;&#039; :integrationtest-config-us-east-2, &#039;&#039;&#039;folder&#039;&#039;&#039;:seedData_integrationTest).For other dev use service,If a developer wants to add more for other important testing purposes.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;How to use:&#039;&#039;&#039;&lt;br /&gt;
#Add it from the s3 bucket at this point&lt;br /&gt;
#Run batch refreshSeedData [[Developer guide for making Integration Tests#Bash script|batch RefreshSeedData]]&lt;br /&gt;
&#039;&#039;&#039;Logic&#039;&#039;&#039;:Process by storage resouse (graph or dynamodb)&lt;br /&gt;
:To clean up the seed data in the table after it creates seed data form service deploy and pulls seed data from s3.&lt;br /&gt;
&lt;br /&gt;
=== Refresh Seed Data ===&lt;br /&gt;
:ProcessRefreshSeedData use seedDataTag for create data environment of &#039;&#039;&#039;test&#039;&#039;&#039; and can be refresh seeddata re-test agian.&lt;br /&gt;
:&#039;&#039;&#039;canbe share&#039;&#039;&#039; seed data for other test by seed data tag.&lt;br /&gt;
&#039;&#039;&#039;How to use:&#039;&#039;&#039;&lt;br /&gt;
:Save file in s3 (for other dav keep in floder dev name) or testConfig/seedData_config(for admin)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Folder&#039;&#039;&#039;&lt;br /&gt;
*dynamoDBSeedDataTags.json&lt;br /&gt;
*graphSeedDataTags.json&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Example&#039;&#039;&#039;&lt;br /&gt;
==== dynamoDBSeedDataTags ====&lt;br /&gt;
:If set tag in this setting integrationtest is generate seed data. in storage resource dynammodb.&lt;br /&gt;
Example&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;seedDynamodb_abc_ver2&amp;quot;: [ // seedDataTag&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;tableName&amp;quot;: &amp;quot;DelivMethodSTDTestLogicalResultsData&amp;quot;,  // servcieTag+stage+tablename&lt;br /&gt;
      &amp;quot;partitionKey&amp;quot;: &amp;quot;logicalResultId&amp;quot;,&lt;br /&gt;
      &amp;quot;sortKey&amp;quot;: &amp;quot;identifiersId&amp;quot;,&lt;br /&gt;
      &amp;quot;datas&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
          logicalResultId: {&lt;br /&gt;
            value: &amp;quot;eeeeeeeeee4&amp;quot;&lt;br /&gt;
          },&lt;br /&gt;
          identifiersId: {&lt;br /&gt;
            value: &amp;quot;lllll123456&amp;quot;&lt;br /&gt;
          },&lt;br /&gt;
          processLogicalResultExpiryTimestamp: {&lt;br /&gt;
            calcType: &amp;quot;currentTimestampAdjustment&amp;quot;, // can add other types of calculated data in future&lt;br /&gt;
            action: &amp;quot;subtract&amp;quot;, // add|subtract&lt;br /&gt;
            adjustmentInSeconds: 300  // Seconds eg 5 minite = 5*60 = 300 Seconds. or 2 day  = 2*(24*60*60) = 172800&lt;br /&gt;
          }&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
          logicalResultId: {&lt;br /&gt;
            value: &amp;quot;eeeeeeeeee4&amp;quot;&lt;br /&gt;
          },&lt;br /&gt;
          &amp;quot;identifiersId&amp;quot;: {&lt;br /&gt;
            value: &amp;quot;lllll777777&amp;quot;&lt;br /&gt;
          },&lt;br /&gt;
          processLogicalResultExpiryTimestamp: {&lt;br /&gt;
            calcType: &amp;quot;currentTimestampAdjustment&amp;quot;, // can add other types of calculated data in future&lt;br /&gt;
            action: &amp;quot;add&amp;quot;, // add|subtract&lt;br /&gt;
            adjustment: &amp;quot;2 days&amp;quot;, // Human-Readable Relative Format , //Month,Months|Week,Weeks|day,days|Hour,Hours|Minute,Minutes|Second,Seconds|&lt;br /&gt;
          } &lt;br /&gt;
        }&lt;br /&gt;
      ],&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;tableName&amp;quot;: &amp;quot;MLocationsTestFloatingRelationships&amp;quot;,// servcieTag+stage+tablename&lt;br /&gt;
      &amp;quot;partitionKey&amp;quot;: &amp;quot;importBatchId&amp;quot;,&lt;br /&gt;
      &amp;quot;sortKey&amp;quot;: &amp;quot;identifierRelationshipsId&amp;quot;,&lt;br /&gt;
      &amp;quot;datas&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;importBatchId&amp;quot;: &amp;quot;2-uuuuuuuuuuuuuu&amp;quot;,&lt;br /&gt;
          &amp;quot;identifierRelationshipsId&amp;quot;: &amp;quot;lllll123456&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;importBatchId&amp;quot;: &amp;quot;2-uuuuuuuuuuuuuu&amp;quot;,&lt;br /&gt;
          &amp;quot;identifierRelationshipsId&amp;quot;: &amp;quot;lllll777777&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;importBatchId&amp;quot;: &amp;quot;2-uuuuuuuuuuuuuu&amp;quot;,&lt;br /&gt;
          &amp;quot;identifierRelationshipsId&amp;quot;: &amp;quot;lllll99999999&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
      ]&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;tableName&amp;quot;: &amp;quot;MLocationsTestFindDataMain&amp;quot;,&lt;br /&gt;
      &amp;quot;partitionKey&amp;quot;: &amp;quot;findDataId&amp;quot;,&lt;br /&gt;
      &amp;quot;datas&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;findDataId&amp;quot;: &amp;quot;111111&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;findDataId&amp;quot;: &amp;quot;22222&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;findDataId&amp;quot;: &amp;quot;333333&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
      ]&lt;br /&gt;
    }&lt;br /&gt;
  ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== graphSeedDataTags ====&lt;br /&gt;
:If set tag in this setting integrationtest is generate seed data. in storage resource graphHanler.&lt;br /&gt;
Example&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;seedData_testTag_GG&amp;quot;: [ // seedDataTag&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;nodes&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;nodeLabels&amp;quot;: [&lt;br /&gt;
            &amp;quot;SellOfferPlan_sellOfferPlanDeliveryMethodLink&amp;quot;&lt;br /&gt;
          ],&lt;br /&gt;
          &amp;quot;objectDetail&amp;quot;: {&lt;br /&gt;
            &amp;quot;identifiers&amp;quot;: {&lt;br /&gt;
              &amp;quot;sellOfferPlanDeliveryMethodLinkId&amp;quot;: {&lt;br /&gt;
                &amp;quot;value&amp;quot;: &amp;quot;minttestrefreshSeedData_01&amp;quot;,&lt;br /&gt;
              },&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;fields&amp;quot;: {&lt;br /&gt;
              &amp;quot;productId&amp;quot;: {&lt;br /&gt;
                &amp;quot;value&amp;quot;: &amp;quot;ddddd&amp;quot;,&lt;br /&gt;
              },&lt;br /&gt;
              &amp;quot;price&amp;quot;: {&lt;br /&gt;
                &amp;quot;value&amp;quot;: 9999&lt;br /&gt;
              },&lt;br /&gt;
              exampleTimestamp: {&lt;br /&gt;
                calcType: &amp;quot;currentTimestampAdjustment&amp;quot;, // can add other types of calculated data in future &lt;br /&gt;
                action: &amp;quot;subtract&amp;quot;, // add|subtract&lt;br /&gt;
                adjustment: &amp;quot;2 days&amp;quot;, // Human-Readable Relative Format  //Month,Months|Week,Weeks|day,days|Hour,Hours|Minute,Minutes|Second,Seconds|&lt;br /&gt;
              }&lt;br /&gt;
            }&lt;br /&gt;
          }&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;nodeLabels&amp;quot;: [&lt;br /&gt;
            &amp;quot;servcieMintTest_shoppingMall&amp;quot;&lt;br /&gt;
          ],&lt;br /&gt;
          &amp;quot;objectDetail&amp;quot;: {&lt;br /&gt;
            &amp;quot;identifiers&amp;quot;: {&lt;br /&gt;
              &amp;quot;shoppingMallId&amp;quot;: &amp;quot;minttestrefreshSeedData_shoppingMallId&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;fields&amp;quot;: {&lt;br /&gt;
              &amp;quot;name&amp;quot;: &amp;quot;hotpot-man&amp;quot;,&lt;br /&gt;
              &amp;quot;totalPrice&amp;quot;: 500&lt;br /&gt;
            }&lt;br /&gt;
          }&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;nodeLabels&amp;quot;: [&lt;br /&gt;
            &amp;quot;servcieMintTest_shoppingMallCalculateSetting&amp;quot;&lt;br /&gt;
          ],&lt;br /&gt;
          &amp;quot;objectDetail&amp;quot;: {&lt;br /&gt;
            &amp;quot;identifiers&amp;quot;: {&lt;br /&gt;
              &amp;quot;versionedDataId&amp;quot;: &amp;quot;minttestrefreshSeedData_versionedDataId&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;fields&amp;quot;: {&lt;br /&gt;
              &amp;quot;addToCalculatedValuePerOrder&amp;quot;: 10,&lt;br /&gt;
              &amp;quot;addToRateTableValuePerOrder&amp;quot;: 77&lt;br /&gt;
            }&lt;br /&gt;
          }&lt;br /&gt;
        }&lt;br /&gt;
      ],&lt;br /&gt;
      &amp;quot;relationships&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;fromObject&amp;quot;: {&lt;br /&gt;
            &amp;quot;nodeLabel&amp;quot;: &amp;quot;SellOfferPlan_sellOfferPlanDeliveryMethodLink&amp;quot;,&lt;br /&gt;
            &amp;quot;identifiers&amp;quot;: {&lt;br /&gt;
              &amp;quot;sellOfferPlanDeliveryMethodLinkId&amp;quot;: &amp;quot;minttestrefreshSeedData_01&amp;quot;&lt;br /&gt;
            }&lt;br /&gt;
          },&lt;br /&gt;
          &amp;quot;toObject&amp;quot;: {&lt;br /&gt;
            &amp;quot;nodeLabel&amp;quot;: &amp;quot;servcieMintTest_shoppingMall&amp;quot;,&lt;br /&gt;
            &amp;quot;identifiers&amp;quot;: {&lt;br /&gt;
              &amp;quot;shoppingMallId&amp;quot;: &amp;quot;minttestrefreshSeedData_shoppingMallId&amp;quot;&lt;br /&gt;
            }&lt;br /&gt;
          },&lt;br /&gt;
          &amp;quot;relationships&amp;quot;: [&lt;br /&gt;
            {&lt;br /&gt;
              &amp;quot;relTypeConcat&amp;quot;: &amp;quot;SellOfferPlan_hasCCCCCCC&amp;quot;,&lt;br /&gt;
              &amp;quot;relId&amp;quot;: &amp;quot;uuid-4s56df74s9df79w-w6de4f5w689ef&amp;quot;&lt;br /&gt;
            }&lt;br /&gt;
          ]&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;fromObject&amp;quot;: {&lt;br /&gt;
            &amp;quot;nodeLabel&amp;quot;: &amp;quot;servcieMintTest_shoppingMall&amp;quot;,&lt;br /&gt;
            &amp;quot;identifiers&amp;quot;: {&lt;br /&gt;
              &amp;quot;shoppingMallId&amp;quot;: &amp;quot;minttestrefreshSeedData_shoppingMallId&amp;quot;&lt;br /&gt;
            }&lt;br /&gt;
          },&lt;br /&gt;
          &amp;quot;toObject&amp;quot;: {&lt;br /&gt;
            &amp;quot;nodeLabel&amp;quot;: &amp;quot;servcieMintTest_shoppingMallCalculateSetting&amp;quot;,&lt;br /&gt;
            &amp;quot;identifiers&amp;quot;: {&lt;br /&gt;
              &amp;quot;versionedDataId&amp;quot;: &amp;quot;minttestrefreshSeedData_versionedDataId&amp;quot;&lt;br /&gt;
            }&lt;br /&gt;
          },&lt;br /&gt;
          &amp;quot;relationships&amp;quot;: [&lt;br /&gt;
            {&lt;br /&gt;
              &amp;quot;relTypeConcat&amp;quot;: &amp;quot;servcieMintTest_shoppingMall_currentShoppingMallCalculateSetting&amp;quot;,&lt;br /&gt;
              &amp;quot;relId&amp;quot;: &amp;quot;uuid-s122df5-s21df&amp;quot;,&lt;br /&gt;
              &amp;quot;relationshipProperty&amp;quot;: {&lt;br /&gt;
                &amp;quot;timeStamp&amp;quot;: 1234567879,&lt;br /&gt;
                &amp;quot;statusName&amp;quot;: true&lt;br /&gt;
              }&lt;br /&gt;
            },&lt;br /&gt;
            {&lt;br /&gt;
              &amp;quot;relTypeConcat&amp;quot;: &amp;quot;servcieMintTest_shoppingMall_hasShoppingMallCalculateSetting&amp;quot;,&lt;br /&gt;
              &amp;quot;relId&amp;quot;: &amp;quot;uuid-77777-99999&amp;quot;,&lt;br /&gt;
              &amp;quot;relationshipProperties&amp;quot;: {&lt;br /&gt;
                &amp;quot;statusName&amp;quot;: {&lt;br /&gt;
                  &amp;quot;value&amp;quot;: true&lt;br /&gt;
                },&lt;br /&gt;
                exampleTimestamp: {&lt;br /&gt;
                  calcType: &amp;quot;currentTimestampAdjustment&amp;quot;, // can add other types of calculated data in future&lt;br /&gt;
                  action: &amp;quot;subtract&amp;quot;, // add|subtract&lt;br /&gt;
                  adjustment: &amp;quot;2 days&amp;quot;, // Human-Readable Relative Format  //Month,Months|Week,Weeks|day,days|Hour,Hours|Minute,Minutes|Second,Seconds|&lt;br /&gt;
                }&lt;br /&gt;
              }&lt;br /&gt;
            }&lt;br /&gt;
          ]&lt;br /&gt;
        }&lt;br /&gt;
      ]&lt;br /&gt;
    }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;seedData_testTag_ABC&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;objType&amp;quot;: {&lt;br /&gt;
        &amp;quot;objectType&amp;quot;: &amp;quot;productAttributeLink&amp;quot;,&lt;br /&gt;
        &amp;quot;serviceTag&amp;quot;: &amp;quot;ProductAttribute&amp;quot;&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;objInstanceFull&amp;quot;: {&lt;br /&gt;
        &amp;quot;identifiers&amp;quot;: {&lt;br /&gt;
          &amp;quot;productAttributeLinkId&amp;quot;: &amp;quot;f90b57ca8b2fe1a83459d57da038cf50fb6d40e6&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;fields&amp;quot;: {}&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;relationships&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;relType&amp;quot;: {&lt;br /&gt;
            &amp;quot;serviceTag&amp;quot;: &amp;quot;ProductAttribute&amp;quot;,&lt;br /&gt;
            &amp;quot;relationshipTag&amp;quot;: &amp;quot;hasProductAttributeLink&amp;quot;&lt;br /&gt;
          },&lt;br /&gt;
          &amp;quot;relationshipDirection&amp;quot;: &amp;quot;to&amp;quot;,&lt;br /&gt;
          &amp;quot;targetObjType&amp;quot;: {&lt;br /&gt;
            &amp;quot;serviceTag&amp;quot;: &amp;quot;ProductStandard&amp;quot;,&lt;br /&gt;
            &amp;quot;objectType&amp;quot;: &amp;quot;productStandard&amp;quot;&lt;br /&gt;
          },&lt;br /&gt;
          &amp;quot;targetIdentifiers&amp;quot;: {&lt;br /&gt;
            &amp;quot;productId&amp;quot;: &amp;quot;f526a367a2b66cb0f37ca61b6c43f419929f521d&amp;quot;&lt;br /&gt;
          },&lt;br /&gt;
          &amp;quot;relationshipProperties&amp;quot;: {}&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;relType&amp;quot;: {&lt;br /&gt;
            &amp;quot;serviceTag&amp;quot;: &amp;quot;ProductAttribute&amp;quot;,&lt;br /&gt;
            &amp;quot;relationshipTag&amp;quot;: &amp;quot;isProductAttribute&amp;quot;&lt;br /&gt;
          },&lt;br /&gt;
          &amp;quot;relationshipDirection&amp;quot;: &amp;quot;from&amp;quot;,&lt;br /&gt;
          &amp;quot;targetObjType&amp;quot;: {&lt;br /&gt;
            &amp;quot;serviceTag&amp;quot;: &amp;quot;ProductAttribute&amp;quot;,&lt;br /&gt;
            &amp;quot;objectType&amp;quot;: &amp;quot;productAttribute&amp;quot;&lt;br /&gt;
          },&lt;br /&gt;
          &amp;quot;targetIdentifiers&amp;quot;: {&lt;br /&gt;
            &amp;quot;productAttributeId&amp;quot;: &amp;quot;f4bf7a078071d54036656df544197ba638bc3a68&amp;quot;&lt;br /&gt;
          },&lt;br /&gt;
          &amp;quot;relationshipProperties&amp;quot;: {}&lt;br /&gt;
        }&lt;br /&gt;
      ]&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;objType&amp;quot;: {&lt;br /&gt;
        &amp;quot;objectType&amp;quot;: &amp;quot;productAttributeLink&amp;quot;,&lt;br /&gt;
        &amp;quot;serviceTag&amp;quot;: &amp;quot;ProductAttribute&amp;quot;&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;objInstanceFull&amp;quot;: {&lt;br /&gt;
        &amp;quot;identifiers&amp;quot;: {&lt;br /&gt;
          &amp;quot;productAttributeLinkId&amp;quot;: &amp;quot;f90b57ca8b2fe1a83459d57da038cf50fb6d40e6&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;fields&amp;quot;: {}&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;relationships&amp;quot;: []&lt;br /&gt;
    }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;seedData_testTag_LL&amp;quot;: []&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Cleaning Seed Data ===&lt;br /&gt;
:Delete seed data for set environment of &#039;&#039;&#039;test&#039;&#039;&#039;.&lt;br /&gt;
*cleaningeDynamoOneRecordsTags.json&lt;br /&gt;
*cleaningeDynamoManyRecordsTags.json&lt;br /&gt;
&lt;br /&gt;
====cleaningeDynamoOneRecordsTags====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;cleaningSeed_TestFindData_and_Education_case_invalid01&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;tableName&amp;quot;: &amp;quot;MLocationsTestFindDataMain&amp;quot;,&lt;br /&gt;
      &amp;quot;primaryKeys&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;findDataId&amp;quot;: &amp;quot;cleaning-1&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;findDataId&amp;quot;: &amp;quot;cleaning-2&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
      ]&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;tableName&amp;quot;: &amp;quot;MLocationsTestEducation&amp;quot;,&lt;br /&gt;
      &amp;quot;primaryKeys&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;studentId&amp;quot;: &amp;quot;cleaning-AA&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;studentId&amp;quot;: &amp;quot;cleaning-BB&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;studentId&amp;quot;: &amp;quot;cleaning-CC&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
      ]&lt;br /&gt;
    }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;cleaningSeed_TestMemberPersonnel_case_invalid01&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;tableName&amp;quot;: &amp;quot;MLocationsTestMemberPersonnel&amp;quot;,&lt;br /&gt;
      &amp;quot;primaryKeys&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;userId&amp;quot;: &amp;quot;namtan&amp;quot;,&lt;br /&gt;
          &amp;quot;passwordId&amp;quot;: &amp;quot;qqqww&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;userId&amp;quot;: &amp;quot;jack&amp;quot;,&lt;br /&gt;
          &amp;quot;passwordId&amp;quot;: &amp;quot;q1&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;userId&amp;quot;: &amp;quot;Momay&amp;quot;,&lt;br /&gt;
          &amp;quot;passwordId&amp;quot;: &amp;quot;ttr&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
      ]&lt;br /&gt;
    }&lt;br /&gt;
  ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== cleaningeDynamoManyRecordsTags ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;cleaningSeed_manyData_partitionKey_only_miss_sort&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;tableName&amp;quot;: &amp;quot;MLocationsTestMemberPersonnel&amp;quot;,&lt;br /&gt;
      &amp;quot;primaryKeys&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;userId&amp;quot;: &amp;quot;many-data&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
      ]&lt;br /&gt;
    }&lt;br /&gt;
  ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*logic query table MLocationsTestMemberPersonnel use primary Keys &amp;quot;userId&amp;quot; and then delete all data from primary Keys.&lt;br /&gt;
&lt;br /&gt;
=resources=&lt;br /&gt;
syntax is object&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{ &lt;br /&gt;
	&amp;quot;Lambda&amp;quot;:{&lt;br /&gt;
		&amp;quot;{FunctionNameHdrSqs}&amp;quot;:{ // FunctionNameHdrSqs is match resourceName in file tests&lt;br /&gt;
			&amp;quot;localLacation&amp;quot;:&amp;quot;/src/FunctionNameHdrSqs.js&amp;quot;,&lt;br /&gt;
			&amp;quot;localHandler&amp;quot;:&amp;quot;main&amp;quot;, &lt;br /&gt;
			&amp;quot;functionName&amp;quot;:&amp;quot;FunctionNameHdrSqs&amp;quot;	// FunctionName is function name match key of function.yml of servcie.&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;ProcessComplexFilterHdrSqs&amp;quot;:{ &lt;br /&gt;
			&amp;quot;localLacation&amp;quot;:&amp;quot;/src/ProcessComplexFilterHdrSqs.js&amp;quot;, &lt;br /&gt;
			&amp;quot;localHandler&amp;quot;:&amp;quot;main&amp;quot;, &lt;br /&gt;
			&amp;quot;functionName&amp;quot;:&amp;quot;ProcessComplexFilterHdrSqs&amp;quot; &lt;br /&gt;
		},&lt;br /&gt;
		... &lt;br /&gt;
	},&lt;br /&gt;
	&amp;quot;Dynamodb&amp;quot;: {&lt;br /&gt;
		&amp;quot;filterMain&amp;quot;:{ // match resourceName in file tests(dynamodbOutputEventIdentifiers)&lt;br /&gt;
			&amp;quot;tableName&amp;quot;:&amp;quot;filterMain&amp;quot; &lt;br /&gt;
		}, &lt;br /&gt;
		&amp;quot;tableNameBB&amp;quot;:{ &lt;br /&gt;
			&amp;quot;tableName&amp;quot;:&amp;quot;tableNameBB&amp;quot; &lt;br /&gt;
		},&lt;br /&gt;
		... &lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=events=&lt;br /&gt;
Syntax is object&lt;br /&gt;
==Syntax Name==&lt;br /&gt;
===FileName===&lt;br /&gt;
::Event_{inputEventTag}&lt;br /&gt;
&lt;br /&gt;
===eventTag===&lt;br /&gt;
#inputEventTag&lt;br /&gt;
#outputEventTag&lt;br /&gt;
#dynamodbTag&lt;br /&gt;
&lt;br /&gt;
*file events.js is have eventTag  (inputEventTag,outputEventTag,dynamodbTag)&lt;br /&gt;
**How to create name eventTag&lt;br /&gt;
***Example case : &amp;quot;test in service complexFilter functionname ProcessComplexFilter case element type is logical basic&amp;quot;.&lt;br /&gt;
::*&#039;&#039;&#039;inputEventTag&#039;&#039;&#039;&lt;br /&gt;
::::{serviceName}_{functionName}_{caseTest}&lt;br /&gt;
&#039;&#039;Conplexfilter_ProcessComplexFilter_Typelogical_basic&#039;&#039;&lt;br /&gt;
::*&#039;&#039;&#039;outputEventTag&#039;&#039;&#039;&lt;br /&gt;
::::output_{inputEventTag}&lt;br /&gt;
&#039;&#039;output_Conplexfilter_ProcessComplexFilter_Typelogical_basic&#039;&#039;&lt;br /&gt;
::*&#039;&#039;&#039;dynamodbTag&#039;&#039;&#039;&lt;br /&gt;
::::{inputEventTag}__Dynamodb__{&#039;&#039;&#039;action*&#039;&#039;&#039;}_{tableName} &lt;br /&gt;
&#039;&#039;Conplexfilter_ProcessComplexFilter_Typelogical_basic___Dynamodb__putItem_filterMain&#039;&#039;&lt;br /&gt;
: &amp;lt;u&amp;gt;&#039;&#039;&#039;{action}&#039;&#039;&#039; is only &#039;&#039;put&#039;&#039; or &#039;&#039;update&#039;&#039;, and in case of &#039;&#039;update&#039;&#039; must only test the last step of update &amp;lt;/u&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Syntax event===&lt;br /&gt;
====initiate by handlerServcie====&lt;br /&gt;
=====Sqs=====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
// An example input and output event of Sns&lt;br /&gt;
{&lt;br /&gt;
   &amp;quot;LambdaFunctionHdrSqs_input__pass&amp;quot;:{&lt;br /&gt;
      &amp;quot;properties&amp;quot;:{&lt;br /&gt;
         &amp;quot;propertyA&amp;quot;:{&lt;br /&gt;
            &amp;quot;value&amp;quot;:&amp;quot;valueProperty1&amp;quot;&lt;br /&gt;
         },&lt;br /&gt;
         &amp;quot;propertyB&amp;quot;:{&lt;br /&gt;
            &amp;quot;properties&amp;quot;:{&lt;br /&gt;
               &amp;quot;propertyB1&amp;quot;:{&lt;br /&gt;
                  &amp;quot;value&amp;quot;:&amp;quot;valuePropertyB1&amp;quot;&lt;br /&gt;
               }&lt;br /&gt;
            }&lt;br /&gt;
         },&lt;br /&gt;
         &amp;quot;propertyC&amp;quot;:{&lt;br /&gt;
            &amp;quot;eventValue&amp;quot;:[&lt;br /&gt;
               &amp;quot;valuePropertyC1&amp;quot;,&lt;br /&gt;
               &amp;quot;valuePropertyC2&amp;quot;,&lt;br /&gt;
               &amp;quot;valuePropertyC3&amp;quot;&lt;br /&gt;
            ]&lt;br /&gt;
         }&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;snsSqsTrigger&amp;quot;:true,&lt;br /&gt;
      &amp;quot;messageAttributes&amp;quot;:{&lt;br /&gt;
            &amp;quot;msgTag&amp;quot;:{&lt;br /&gt;
               &amp;quot;value&amp;quot;:&amp;quot;msgTag&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;propertyD&amp;quot;:{&lt;br /&gt;
               &amp;quot;value&amp;quot;:&amp;quot;valuePropertyD&amp;quot;&lt;br /&gt;
            }&lt;br /&gt;
      }&lt;br /&gt;
   },&lt;br /&gt;
   {&lt;br /&gt;
      &amp;quot;output_LambdaFunctionHdrSqs_pass&amp;quot;:{&lt;br /&gt;
         &amp;quot;properties&amp;quot;:{&lt;br /&gt;
            &amp;quot;propertyA&amp;quot;:{&lt;br /&gt;
               &amp;quot;value&amp;quot;:&amp;quot;valueProperty1&amp;quot;&lt;br /&gt;
            }&lt;br /&gt;
         }&lt;br /&gt;
      }&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot; linein&amp;gt;&lt;br /&gt;
&amp;quot;snsSqsTrigger&amp;quot;:true&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Dsq=====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
// An example input and output event of Direct Sqs&lt;br /&gt;
{&lt;br /&gt;
   &amp;quot;LambdaFunctionHdrDsq_input__pass&amp;quot;:{&lt;br /&gt;
      &amp;quot;forStageMatching&amp;quot;:true,&lt;br /&gt;
      &amp;quot;properties&amp;quot;:{&lt;br /&gt;
         &amp;quot;propertyA&amp;quot;:{&lt;br /&gt;
            &amp;quot;forStageMatching&amp;quot;:true,&lt;br /&gt;
            &amp;quot;value&amp;quot;:&amp;quot;valueProperty1&amp;quot;&lt;br /&gt;
         },&lt;br /&gt;
         &amp;quot;propertyB&amp;quot;:{&lt;br /&gt;
            &amp;quot;forStageMatching&amp;quot;:true,&lt;br /&gt;
            &amp;quot;properties&amp;quot;:{&lt;br /&gt;
               &amp;quot;propertyB1&amp;quot;:{&lt;br /&gt;
                  &amp;quot;forStageMatching&amp;quot;:true,&lt;br /&gt;
                  &amp;quot;value&amp;quot;:&amp;quot;valuePropertyB1&amp;quot;&lt;br /&gt;
               }&lt;br /&gt;
            }&lt;br /&gt;
         },&lt;br /&gt;
         &amp;quot;propertyC&amp;quot;:{&lt;br /&gt;
            &amp;quot;eventValue&amp;quot;:[&lt;br /&gt;
               &amp;quot;valuePropertyC1&amp;quot;,&lt;br /&gt;
               &amp;quot;valuePropertyC2&amp;quot;,&lt;br /&gt;
               &amp;quot;valuePropertyC3&amp;quot;&lt;br /&gt;
            ]&lt;br /&gt;
         }&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;DirectSqs&amp;quot;:true,&lt;br /&gt;
      &amp;quot;messageAttributes&amp;quot;:{&lt;br /&gt;
         &amp;quot;msgTag&amp;quot;:{&lt;br /&gt;
           &amp;quot;forStageMatching&amp;quot;:true,&lt;br /&gt;
           &amp;quot;value&amp;quot;:&amp;quot;msgTag&amp;quot;&lt;br /&gt;
          },&lt;br /&gt;
          &amp;quot;propertyD&amp;quot;:{&lt;br /&gt;
           &amp;quot;forStageMatching&amp;quot;:true,&lt;br /&gt;
           &amp;quot;value&amp;quot;:&amp;quot;valuePropertyD&amp;quot;&lt;br /&gt;
          }&lt;br /&gt;
      }&lt;br /&gt;
   },&lt;br /&gt;
   {&lt;br /&gt;
      &amp;quot;output_LambdaFunctionHdrDsq_pass&amp;quot;:{&lt;br /&gt;
         &amp;quot;forStageMatching&amp;quot;:true,&lt;br /&gt;
         &amp;quot;properties&amp;quot;:{&lt;br /&gt;
            &amp;quot;propertyA&amp;quot;:{&lt;br /&gt;
               &amp;quot;forStageMatching&amp;quot;:true,&lt;br /&gt;
               &amp;quot;value&amp;quot;:&amp;quot;valueProperty1&amp;quot;&lt;br /&gt;
            }&lt;br /&gt;
         }&lt;br /&gt;
      }&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* DirectSqs = true &lt;br /&gt;
:: for initialStage of Dsq&lt;br /&gt;
* messageAttributes is optional&lt;br /&gt;
&lt;br /&gt;
=====Inv=====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;LambdaFunctionHdrInv_input__pass&amp;quot;:{&lt;br /&gt;
     &amp;quot;forStageMatching&amp;quot;:true,&lt;br /&gt;
     &amp;quot;properties&amp;quot;:{&lt;br /&gt;
        &amp;quot;propertyA&amp;quot;:{&lt;br /&gt;
           &amp;quot;forStageMatching&amp;quot;:true,&lt;br /&gt;
           &amp;quot;value&amp;quot;:&amp;quot;valueProperty1&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;propertyB&amp;quot;:{&lt;br /&gt;
           &amp;quot;forStageMatching&amp;quot;:true,&lt;br /&gt;
           &amp;quot;properties&amp;quot;:{&lt;br /&gt;
              &amp;quot;propertyB1&amp;quot;:{&lt;br /&gt;
                 &amp;quot;forStageMatching&amp;quot;:true,&lt;br /&gt;
                 &amp;quot;value&amp;quot;:&amp;quot;valuePropertyB1&amp;quot;&lt;br /&gt;
              }&lt;br /&gt;
           }&lt;br /&gt;
        }&lt;br /&gt;
     }&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
        &amp;quot;output_LambdaFunctionHdrInv_pass&amp;quot;:{&lt;br /&gt;
           &amp;quot;forStageMatching&amp;quot;:true,&lt;br /&gt;
           &amp;quot;properties&amp;quot;:{&lt;br /&gt;
              &amp;quot;propertyA&amp;quot;:{&lt;br /&gt;
                 &amp;quot;forStageMatching&amp;quot;:true,&lt;br /&gt;
                 &amp;quot;value&amp;quot;:&amp;quot;valueProperty1&amp;quot;&lt;br /&gt;
              }&lt;br /&gt;
           }&lt;br /&gt;
        }&lt;br /&gt;
     }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Api=====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
// An example input and output event of API&lt;br /&gt;
{&lt;br /&gt;
	&amp;quot;LambdaFunctionHdrApi_input__pass_notTestAuthorizer&amp;quot;: { &lt;br /&gt;
		&amp;quot;forstageMatvhing&amp;quot;: true, &lt;br /&gt;
		&amp;quot;properties&amp;quot;: { &lt;br /&gt;
			&amp;quot;body&amp;quot;: { &lt;br /&gt;
				&amp;quot;properties&amp;quot;: { &lt;br /&gt;
					&amp;quot;propertyA&amp;quot;: { &lt;br /&gt;
						&amp;quot;testValueMatches&amp;quot;: false, &lt;br /&gt;
						&amp;quot;value&amp;quot;: &amp;quot;valueProperty1&amp;quot;, &lt;br /&gt;
					}, &lt;br /&gt;
					&amp;quot;propertyB&amp;quot;: { &lt;br /&gt;
						&amp;quot;properties&amp;quot;: { &lt;br /&gt;
							&amp;quot;propertyB1&amp;quot;: { &lt;br /&gt;
								&amp;quot;value&amp;quot;: &amp;quot;valuePropertyB1&amp;quot;, &lt;br /&gt;
							} &lt;br /&gt;
						} &lt;br /&gt;
					}, &lt;br /&gt;
					&amp;quot;propertyC&amp;quot;: { &lt;br /&gt;
						&amp;quot;eventValue&amp;quot;: [ &lt;br /&gt;
							&amp;quot;valuePropertyC1&amp;quot;, &lt;br /&gt;
							&amp;quot;valuePropertyC2&amp;quot;, &lt;br /&gt;
							&amp;quot;valuePropertyC3&amp;quot;, &lt;br /&gt;
						] &lt;br /&gt;
					},&lt;br /&gt;
					... &lt;br /&gt;
				} &lt;br /&gt;
			} &lt;br /&gt;
		}&lt;br /&gt;
	}, &lt;br /&gt;
	&amp;quot;Output_LambdaFunctionHdrApi_input__pass_notTestAuthorizer&amp;quot;: { &lt;br /&gt;
		&amp;quot;properties&amp;quot;: { &lt;br /&gt;
			&amp;quot;body&amp;quot;: { &lt;br /&gt;
				&amp;quot;properties&amp;quot;: { &lt;br /&gt;
					&amp;quot;propertyA&amp;quot;: { &lt;br /&gt;
						&amp;quot;testValueMatches&amp;quot;: false, &lt;br /&gt;
						&amp;quot;value&amp;quot;: &amp;quot;valueProperty1&amp;quot;&lt;br /&gt;
					}, &lt;br /&gt;
					...&lt;br /&gt;
				} &lt;br /&gt;
			} &lt;br /&gt;
		}  &lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====S3=====&lt;br /&gt;
&lt;br /&gt;
====dynamodb====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
// An example event of Dynamodb //optional &lt;br /&gt;
{&lt;br /&gt;
	{inputEventTag}__dynamodb_{action}_{tablename}: { // eg. &amp;quot;Complexfilter_ProcessComplexfilter_logical_basic__dynamodb_update_FilterMain&amp;quot;&lt;br /&gt;
	&amp;quot;forStageMatching&amp;quot;: true,&lt;br /&gt;
     &amp;quot;properties&amp;quot;: {&lt;br /&gt;
        &amp;quot;filterMainUniqueRequestId&amp;quot;: {&lt;br /&gt;
          &amp;quot;testValueMatches&amp;quot;: fase,&lt;br /&gt;
          &amp;quot;value&amp;quot;: &amp;quot;bbc4f4a9-2032-4dec-9129-8c7d169fecc5&amp;quot;&lt;br /&gt;
         },&lt;br /&gt;
        &amp;quot;filterObject&amp;quot;: {&lt;br /&gt;
        &amp;quot;forStageMatching&amp;quot;: true,&lt;br /&gt;
        &amp;quot;properties&amp;quot;: {&lt;br /&gt;
          &amp;quot;logicalType&amp;quot;: {&lt;br /&gt;
            &amp;quot;value&amp;quot;: &amp;quot;partitionKey&amp;quot;&lt;br /&gt;
          },&lt;br /&gt;
          &amp;quot;comparison&amp;quot;: {&lt;br /&gt;
            &amp;quot;value&amp;quot;: &amp;quot;equals&amp;quot;&lt;br /&gt;
          },&lt;br /&gt;
          &amp;quot;type&amp;quot;: {&lt;br /&gt;
            &amp;quot;value&amp;quot;: &amp;quot;logical&amp;quot;&lt;br /&gt;
          },&lt;br /&gt;
          &amp;quot;partitionKey&amp;quot;: {&lt;br /&gt;
            &amp;quot;forStageMatching&amp;quot;: true,&lt;br /&gt;
            &amp;quot;value&amp;quot;: &amp;quot;mockIntegratioTestCPF&amp;quot;&lt;br /&gt;
          }&lt;br /&gt;
        }&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;filterMainExpiryTime&amp;quot;: {&lt;br /&gt;
        &amp;quot;testValueMatches&amp;quot;: fase,&lt;br /&gt;
        &amp;quot;value&amp;quot;: 1731980802858&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;filterMainStatus&amp;quot;: {&lt;br /&gt;
       &amp;quot;forStageMatching&amp;quot;: true,&lt;br /&gt;
        &amp;quot;value&amp;quot;: &amp;quot;processing&amp;quot;&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;createTime&amp;quot;: {&lt;br /&gt;
        &amp;quot;testValueMatches&amp;quot;: fase,&lt;br /&gt;
        &amp;quot;value&amp;quot;: 1731894402678&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;objType&amp;quot;: {&lt;br /&gt;
        &amp;quot;forStageMatching&amp;quot;: true,&lt;br /&gt;
        &amp;quot;properties&amp;quot;: {&lt;br /&gt;
          &amp;quot;serviceTag&amp;quot;: {&lt;br /&gt;
            &amp;quot;forStageMatching&amp;quot;: true,&lt;br /&gt;
            &amp;quot;value&amp;quot;: &amp;quot;IntTesting&amp;quot;&lt;br /&gt;
          },&lt;br /&gt;
          &amp;quot;objectType&amp;quot;: {&lt;br /&gt;
            &amp;quot;forStageMatching&amp;quot;: true,&lt;br /&gt;
            &amp;quot;value&amp;quot;: &amp;quot;TestRecord&amp;quot;&lt;br /&gt;
          }&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;keyValues&amp;quot;: {&lt;br /&gt;
      &amp;quot;filterMainId&amp;quot;: &amp;quot;4865d2451a621cb7f71225cfabf2df4f98e20801&amp;quot;,&lt;br /&gt;
      &amp;quot;objTypeId&amp;quot;: &amp;quot;cdb170690571df7522b3850920fce02507c077ee&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
	} &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* partition key: filterMainId&lt;br /&gt;
* sort key: objTypeId&lt;br /&gt;
&lt;br /&gt;
[[2021-01-15 - Integration Testing - Adding DynamoDB result tests]]&lt;br /&gt;
&lt;br /&gt;
===Type paramiter===&lt;br /&gt;
use for evnet and dyanmodb event&lt;br /&gt;
====Normal====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 object: {&lt;br /&gt;
  forStageMatching: true,&lt;br /&gt;
  properties: {&lt;br /&gt;
    name:{&lt;br /&gt;
     forStageMatching: true,&lt;br /&gt;
     value:&amp;quot;Tom&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
   }&lt;br /&gt;
 },&lt;br /&gt;
 array: {&lt;br /&gt;
  forStageMatching: true,&lt;br /&gt;
  useIsEqual: true,&lt;br /&gt;
  eventValue: [&lt;br /&gt;
   {&lt;br /&gt;
     &amp;quot;relTypeAndDirection&amp;quot;: {&lt;br /&gt;
       &amp;quot;relType&amp;quot;: {&lt;br /&gt;
         &amp;quot;serviceTag&amp;quot;: &amp;quot;maxxCart2&amp;quot;,&lt;br /&gt;
         &amp;quot;relationshipTag&amp;quot;: &amp;quot;hasCartOrder&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;relationshipDirection&amp;quot;: &amp;quot;from&amp;quot;&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;targetObjects&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;objType&amp;quot;: {&lt;br /&gt;
           &amp;quot;serviceTag&amp;quot;: &amp;quot;maxxCart2&amp;quot;,&lt;br /&gt;
           &amp;quot;objectType&amp;quot;: &amp;quot;cartOrder&amp;quot;&lt;br /&gt;
          }&lt;br /&gt;
        }&lt;br /&gt;
      ]&lt;br /&gt;
    }&lt;br /&gt;
  ]&lt;br /&gt;
 },&lt;br /&gt;
 number: {&lt;br /&gt;
  forStageMatching: true,&lt;br /&gt;
  value: 1111&lt;br /&gt;
 },&lt;br /&gt;
 string: {&lt;br /&gt;
  forStageMatching: true,&lt;br /&gt;
  value: &amp;quot;hi&amp;quot;&lt;br /&gt;
 },&lt;br /&gt;
 boolean: {&lt;br /&gt;
  forStageMatching: true,&lt;br /&gt;
  value: true&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
 forStageMatching: true&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
::set true for check match value,It is not necessary to set every value&lt;br /&gt;
:::use in test importent paramiter&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
testValueMatches:false&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
::setting paramiter require on create but can not test random value eg: identifier or timeStamp or uuid&lt;br /&gt;
&lt;br /&gt;
====Empty====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
 EmptyString:{&lt;br /&gt;
forStageMatching: true,&lt;br /&gt;
  value:&amp;quot;&amp;quot;&lt;br /&gt;
 },&lt;br /&gt;
 EmptyArray:{&lt;br /&gt;
   forStageMatching: true,&lt;br /&gt;
   useIsEqual: true,&lt;br /&gt;
   eventValue: []&lt;br /&gt;
 },&lt;br /&gt;
 EmptyObject:{&lt;br /&gt;
  forStageMatching: true,&lt;br /&gt;
  value:{}&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Error====&lt;br /&gt;
can test noRetryError&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;quot;errorMessage&amp;quot;: {&lt;br /&gt;
    forStageMatching: true,&lt;br /&gt;
    &amp;quot;value&amp;quot;: &amp;quot;Not found schema of {serviceTag:TestGraphHandler, objectType:notFoundObjType}&amp;quot;&lt;br /&gt;
   }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Paramiter random====&lt;br /&gt;
Can not test case random numbber or uuid.&lt;br /&gt;
But requriOnCreate mush be set &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
testValueMatches:false&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
or set&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
forStageMatching:false&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=tests=&lt;br /&gt;
Syntax is array of object&lt;br /&gt;
==Syntax name== &lt;br /&gt;
===Testtag name ===&lt;br /&gt;
*{integrationTestTag}&lt;br /&gt;
#Test Own servcie or not a lot stage&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
Test_{inputEventTag}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
#Mix multiple servcie and multiple stage&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt; &lt;br /&gt;
IntegrationTest_{inputEventTag}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===File name ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt; &lt;br /&gt;
{integrationTestTag}.json&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Setting of test==&lt;br /&gt;
[[Service - Integration Test Config#tests.js Syntax|syntax test]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
            integrationTestTag: {integrationTestTag},&lt;br /&gt;
            productionSafe: true|false, //default false&lt;br /&gt;
            noInitialStage: true, // default false, if set to true, no error when no foundInitialStages found&lt;br /&gt;
            errorIfStageUndefined: true|false, //default false&lt;br /&gt;
            errorIfInvokeUndefined: true|false, //default false,&lt;br /&gt;
            dynamoDBSeedDataTags:[&amp;quot;seedDataDB_test_case_xx&amp;quot;], //[seedDataTag] optional if have seed data for test&lt;br /&gt;
            graphSeedDataTags:[&amp;quot;seedDataGraph_test_case_xx&amp;quot;], //[seedDataTag] optional if have seed data for test&lt;br /&gt;
            cleaningeDynamoOneRecordsTags: [&amp;quot;cleaningSeed_partitionKey_sortKey_normol&amp;quot;], //optional&lt;br /&gt;
            cleaningeDynamoManyRecordsTags: [], // optional&lt;br /&gt;
            stages:[&lt;br /&gt;
               ...&lt;br /&gt;
            ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
*[[2025-11-20 IntegrationTest#dynamoDBSeedDataTags|dynamoDBSeedDataTags]]&lt;br /&gt;
*[[2025-11-20 IntegrationTest#graphSeedDataTags|graphSeedDataTags]]&lt;br /&gt;
*[[2025-11-20 IntegrationTest#cleaningeDynamoOneRecordsTags|cleaningeDynamoOneRecordsTags]]&lt;br /&gt;
*[[2025-11-20 IntegrationTest#cleaningeDynamoManyRecordsTags|cleaningeDynamoManyRecordsTags]]&lt;br /&gt;
&lt;br /&gt;
==Stages==&lt;br /&gt;
====Initiate stage====&lt;br /&gt;
:&#039;&#039;&#039;&amp;quot;initialStage&amp;quot;:true&#039;&#039;&#039;&lt;br /&gt;
[[Service_-_Integration_Test_Config#tests.js Syntax|detail property of test]]&lt;br /&gt;
=====HandlerService=====&lt;br /&gt;
======Sqs======&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;quot;stages&amp;quot;:[&lt;br /&gt;
         {&lt;br /&gt;
            &amp;quot;initialStage&amp;quot;:true,&lt;br /&gt;
            &amp;quot;inputEventTag&amp;quot;:&amp;quot;Locations_ProcessLocationNodeSomting_casenotHaveData&amp;quot;,&lt;br /&gt;
            &amp;quot;serviceName&amp;quot;:&amp;quot;Locations&amp;quot;,&lt;br /&gt;
            &amp;quot;resourceType&amp;quot;:&amp;quot;Lambda&amp;quot;,&lt;br /&gt;
            &amp;quot;resourceName&amp;quot;:&amp;quot;ProcessLocationNodeSomtingHdrDsq&amp;quot;,&lt;br /&gt;
            &amp;quot;outputEventTag&amp;quot;:&amp;quot;Output_Locations_ProcessLocationNodeSomting_casenotHaveData&amp;quot;&lt;br /&gt;
         }&lt;br /&gt;
      ]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
======Dsq======&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
stages: [&lt;br /&gt;
        {&lt;br /&gt;
          initialStage: true,&lt;br /&gt;
          inputEventTag: &#039;LambdaFunctionHdrDsq_input_singleStage_directSqs__pass&#039;,&lt;br /&gt;
          serviceName: &#039;ServiceTemplate&#039;,&lt;br /&gt;
          resourceType: &#039;Lambda&#039;,&lt;br /&gt;
          resourceName: &#039;LambdaFunctionHdrDsq&#039;,&lt;br /&gt;
          outputEventTag: &#039;LambdaFunctionHdrDsq_output__returnvalue_pass&#039;,&lt;br /&gt;
          // **** not set snsServiceName and snsTopic&lt;br /&gt;
          // can be test dynamodbOutput&lt;br /&gt;
        }&lt;br /&gt;
      ]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
======Api======&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;quot;stages&amp;quot;:[&lt;br /&gt;
    {&lt;br /&gt;
       &amp;quot;initialStage&amp;quot;:true,&lt;br /&gt;
       &amp;quot;inputEventTag&amp;quot;:&amp;quot;LambdaFunctionHdrApi_input__pass&amp;quot;,&lt;br /&gt;
       &amp;quot;serviceName&amp;quot;:&amp;quot;ServiceTemplate&amp;quot;,&lt;br /&gt;
       &amp;quot;resourceType&amp;quot;:&amp;quot;Lambda&amp;quot;,&lt;br /&gt;
       &amp;quot;resourceName&amp;quot;:&amp;quot;LambdaFunctionHdrApi&amp;quot;,&lt;br /&gt;
       &amp;quot;outputEventTag&amp;quot;:&amp;quot;LambdaFunctionHdrApi_output__pass&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
======Inv======&lt;br /&gt;
*&#039;&#039;&#039;single stage&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
[{&lt;br /&gt;
   &amp;quot;integrationTestTag&amp;quot;:&amp;quot;LambdaFunctionHdrInv__pass&amp;quot;,&lt;br /&gt;
   &amp;quot;productionSafe&amp;quot;:false,&lt;br /&gt;
   &amp;quot;errorIfStageUndefined&amp;quot;:false,&lt;br /&gt;
   &amp;quot;errorIfInvokeUndefined&amp;quot;:false,&lt;br /&gt;
   &amp;quot;dynamoDBSeedDataTags&amp;quot;:[&amp;quot;seedDataDB_test_case_xx&amp;quot;], //[seedDataTag] optional if have seed data for test&lt;br /&gt;
   &amp;quot;graphSeedDataTags&amp;quot;:[&amp;quot;seedDataGraph_test_case_xx&amp;quot;], //[seedDataTag] optional if have seed data for test&lt;br /&gt;
   &amp;quot;cleaningeDynamoOneRecordsTags&amp;quot;: [&amp;quot;cleaningSeed_partitionKey_sortKey_normol&amp;quot;], //optional&lt;br /&gt;
   &amp;quot;cleaningeDynamoManyRecordsTags&amp;quot;: []&lt;br /&gt;
   &amp;quot;stages&amp;quot;:[&lt;br /&gt;
      {&lt;br /&gt;
         &amp;quot;initialStage&amp;quot;:true,&lt;br /&gt;
         &amp;quot;inputEventTag&amp;quot;:&amp;quot;LambdaFunctionHdrInv_input__pass&amp;quot;,&lt;br /&gt;
         &amp;quot;serviceName&amp;quot;:&amp;quot;ServiceTemplate&amp;quot;,&lt;br /&gt;
         &amp;quot;resourceType&amp;quot;:&amp;quot;Lambda&amp;quot;,&lt;br /&gt;
         &amp;quot;resourceName&amp;quot;:&amp;quot;LambdaFunctionHdrInv&amp;quot;,&lt;br /&gt;
         &amp;quot;outputEventTag&amp;quot;:&amp;quot;LambdaFunctionHdrInv_output__pass&amp;quot;&lt;br /&gt;
      }&lt;br /&gt;
   ]&lt;br /&gt;
}]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;invoke multiple stage&#039;&#039;&#039; &lt;br /&gt;
:*Each stage test can invoke multiple lambda by use &amp;quot;eventStage Tag&amp;quot; point to stage for test integration test.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
[{&lt;br /&gt;
   &amp;quot;integrationTestTag&amp;quot;:&amp;quot;LambdaFunctionHdrInv_invokes__pass&amp;quot;,&lt;br /&gt;
   &amp;quot;productionSafe&amp;quot;:false,&lt;br /&gt;
   &amp;quot;errorIfStageUndefined&amp;quot;:false,&lt;br /&gt;
   &amp;quot;errorIfInvokeUndefined&amp;quot;:false,&lt;br /&gt;
   &amp;quot;dynamoDBSeedDataTags&amp;quot;:[], //[seedDataTag] optional if have seed data for test&lt;br /&gt;
   &amp;quot;graphSeedDataTags&amp;quot;:[], //[seedDataTag] optional if have seed data for test&lt;br /&gt;
   &amp;quot;cleaningeDynamoOneRecordsTags&amp;quot;: [], //optional&lt;br /&gt;
   &amp;quot;cleaningeDynamoManyRecordsTags&amp;quot;: [], // optional&lt;br /&gt;
   &amp;quot;stages&amp;quot;:[&lt;br /&gt;
      {&lt;br /&gt;
         &amp;quot;initialStage&amp;quot;:true,&lt;br /&gt;
         &amp;quot;inputEventTag&amp;quot;:&amp;quot;LambdaFunctionHdrInv_input__pass&amp;quot;,&lt;br /&gt;
         &amp;quot;serviceName&amp;quot;:&amp;quot;ServiceTemplate&amp;quot;,&lt;br /&gt;
         &amp;quot;resourceType&amp;quot;:&amp;quot;Lambda&amp;quot;,&lt;br /&gt;
         &amp;quot;resourceName&amp;quot;:&amp;quot;LambdaFunctionHdrInv&amp;quot;,&lt;br /&gt;
         &amp;quot;outputEventTag&amp;quot;:&amp;quot;LambdaFunctionHdrInv_output__pass&amp;quot;,&lt;br /&gt;
         &amp;quot;invokes&amp;quot;:[&lt;br /&gt;
            {&lt;br /&gt;
               &amp;quot;eventStageTag&amp;quot;:&amp;quot;service_invokesB__pass&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            {&lt;br /&gt;
               &amp;quot;eventStageTag&amp;quot;:&amp;quot;service_invokesD__pass&amp;quot;&lt;br /&gt;
            }&lt;br /&gt;
         ]&lt;br /&gt;
      },&lt;br /&gt;
      {&lt;br /&gt;
         &amp;quot;eventStageTag&amp;quot;:&amp;quot;service_invokesB__pass&amp;quot;,&lt;br /&gt;
         &amp;quot;inputEventTag&amp;quot;:&amp;quot;input_service_invokes__pass&amp;quot;,&lt;br /&gt;
         &amp;quot;serviceName&amp;quot;:&amp;quot;ServiceTemplate_B&amp;quot;,&lt;br /&gt;
         &amp;quot;resourceType&amp;quot;:&amp;quot;Lambda&amp;quot;,&lt;br /&gt;
         &amp;quot;resourceName&amp;quot;:&amp;quot;LambdaFunction_B_HdrInv&amp;quot;,&lt;br /&gt;
         &amp;quot;outputEventTag&amp;quot;:&amp;quot;output_service_invokes__pass&amp;quot;&lt;br /&gt;
      },&lt;br /&gt;
      {&lt;br /&gt;
         &amp;quot;eventStageTag&amp;quot;:&amp;quot;service_invokesD__pass&amp;quot;,&lt;br /&gt;
         &amp;quot;inputEventTag&amp;quot;:&amp;quot;input_service_invokesD__pass&amp;quot;,&lt;br /&gt;
         &amp;quot;serviceName&amp;quot;:&amp;quot;ServiceTemplate_D&amp;quot;,&lt;br /&gt;
         &amp;quot;resourceType&amp;quot;:&amp;quot;Lambda&amp;quot;,&lt;br /&gt;
         &amp;quot;resourceName&amp;quot;:&amp;quot;LambdaFunction_D_HdrInv&amp;quot;,&lt;br /&gt;
         &amp;quot;outputEventTag&amp;quot;:&amp;quot;output_service_invokesD__pass&amp;quot;&lt;br /&gt;
      }&lt;br /&gt;
   ]&lt;br /&gt;
}]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
======S3======&lt;br /&gt;
======Batch======&lt;br /&gt;
&lt;br /&gt;
====GeneratedSeedData====&lt;br /&gt;
*Integrationtest must be delete identifier every time before test.&lt;br /&gt;
*Set &#039;generatedSeedData&#039; in file tests.json case by case of stage eg: stages[0] create identifier is randomOnCreate will set &#039;generatedSeedData&#039; and stages[1] create relationship is randomOnCreate(It is usually random, except in the case of relationship version) set generatedSeedData this stages[1].&lt;br /&gt;
*How to delete case identifier rendomOnCreate?: set in stage use setting generateSeedData &amp;quot;randomOnCreateIdentifier&amp;quot;&lt;br /&gt;
#randomOnCreateIdentifier&lt;br /&gt;
#notRandomOnIdentifier&lt;br /&gt;
#relationships&lt;br /&gt;
=====randomOnCreateIdentifier=====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;quot;stages&amp;quot;: [&lt;br /&gt;
      {&lt;br /&gt;
        &amp;quot;initialStage&amp;quot;: true,&lt;br /&gt;
        &amp;quot;inputEventTag&amp;quot;: &amp;quot;MLocation_CreateHdrSqs__case_NodeVersionData_Jaya&amp;quot;,&lt;br /&gt;
        &amp;quot;serviceTag&amp;quot;: &amp;quot;MLocations&amp;quot;,&lt;br /&gt;
        &amp;quot;resourceType&amp;quot;: &amp;quot;Lambda&amp;quot;,&lt;br /&gt;
        &amp;quot;resourceName&amp;quot;: &amp;quot;CreateHdrSqs&amp;quot;,&lt;br /&gt;
        &amp;quot;snsServiceName&amp;quot;: &amp;quot;MLocations&amp;quot;,&lt;br /&gt;
        &amp;quot;snsTopic&amp;quot;: &amp;quot;Create_In&amp;quot;,&lt;br /&gt;
        &amp;quot;generatedSeedData&amp;quot;: {&lt;br /&gt;
          &amp;quot;randomOnCreateIdentifier&amp;quot;: [&lt;br /&gt;
            {&lt;br /&gt;
              &amp;quot;objType&amp;quot;: {&lt;br /&gt;
                &amp;quot;serviceTag&amp;quot;: &amp;quot;MLocations&amp;quot;,&lt;br /&gt;
                &amp;quot;objectType&amp;quot;: &amp;quot;Member&amp;quot;&lt;br /&gt;
              },&lt;br /&gt;
              &amp;quot;identifierValue&amp;quot;: &amp;quot;Jaya-member-001&amp;quot;&lt;br /&gt;
            }&lt;br /&gt;
          ]&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
=====notRandomOnIdentifier=====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;quot;stages&amp;quot;: [&lt;br /&gt;
      {&lt;br /&gt;
        &amp;quot;initialStage&amp;quot;: true,&lt;br /&gt;
        &amp;quot;inputEventTag&amp;quot;: &amp;quot;MLocation_CreateHdrSqs__case_NodeVersionData_Jaya&amp;quot;,&lt;br /&gt;
        &amp;quot;serviceTag&amp;quot;: &amp;quot;MLocations&amp;quot;,&lt;br /&gt;
        &amp;quot;resourceType&amp;quot;: &amp;quot;Lambda&amp;quot;,&lt;br /&gt;
        &amp;quot;resourceName&amp;quot;: &amp;quot;CreateHdrSqs&amp;quot;,&lt;br /&gt;
        &amp;quot;snsServiceName&amp;quot;: &amp;quot;MLocations&amp;quot;,&lt;br /&gt;
        &amp;quot;snsTopic&amp;quot;: &amp;quot;Create_In&amp;quot;,&lt;br /&gt;
        &amp;quot;generatedSeedData&amp;quot;: {&lt;br /&gt;
          &amp;quot;notRandomOnIdentifier&amp;quot;: [&lt;br /&gt;
            {&lt;br /&gt;
              &amp;quot;objType&amp;quot;: {&lt;br /&gt;
                &amp;quot;serviceTag&amp;quot;: &amp;quot;gggg&amp;quot;,&lt;br /&gt;
                &amp;quot;objectType&amp;quot;: &amp;quot;ssssss&amp;quot;&lt;br /&gt;
              },&lt;br /&gt;
              &amp;quot;identifiers&amp;quot;: {&lt;br /&gt;
                &amp;quot;topId&amp;quot;: &amp;quot;123456&amp;quot;&lt;br /&gt;
              }&lt;br /&gt;
            }&lt;br /&gt;
          ]&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    ]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
=====relationships=====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;quot;stages&amp;quot;: [&lt;br /&gt;
      {&lt;br /&gt;
        &amp;quot;initialStage&amp;quot;: true,&lt;br /&gt;
        &amp;quot;inputEventTag&amp;quot;: &amp;quot;MLocation_CreateHdrSqs__case_NodeVersionData_Jaya&amp;quot;,&lt;br /&gt;
        &amp;quot;serviceTag&amp;quot;: &amp;quot;MLocations&amp;quot;,&lt;br /&gt;
        &amp;quot;resourceType&amp;quot;: &amp;quot;Lambda&amp;quot;,&lt;br /&gt;
        &amp;quot;resourceName&amp;quot;: &amp;quot;CreateHdrSqs&amp;quot;,&lt;br /&gt;
        &amp;quot;snsServiceName&amp;quot;: &amp;quot;MLocations&amp;quot;,&lt;br /&gt;
        &amp;quot;snsTopic&amp;quot;: &amp;quot;Create_In&amp;quot;,&lt;br /&gt;
        &amp;quot;generatedSeedData&amp;quot;: {&lt;br /&gt;
         &amp;quot;relationships&amp;quot;: [&lt;br /&gt;
            {&lt;br /&gt;
              &amp;quot;relType&amp;quot;: {&lt;br /&gt;
                &amp;quot;serviceTag&amp;quot;: &amp;quot;PaymentMethodGeneric&amp;quot;,&lt;br /&gt;
                &amp;quot;relationshipTag&amp;quot;: &amp;quot;disabledPaymentMethodGenericPropertyValue&amp;quot;&lt;br /&gt;
              },&lt;br /&gt;
              &amp;quot;relId&amp;quot;: &amp;quot;f4f73de7-647c-4b3b-8043-87cc002f361a&amp;quot;&lt;br /&gt;
            }&lt;br /&gt;
          ]&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    ]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Dynamodb==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
stages: [&lt;br /&gt;
        {&lt;br /&gt;
          initialStage: true,&lt;br /&gt;
          inputEventTag: &#039;Locations_LambdaFunctionHdrDsq_singleStage_directSqs__pass&#039;,&lt;br /&gt;
          serviceName: &#039;ServiceTemplate&#039;,&lt;br /&gt;
          resourceType: &#039;Lambda&#039;,&lt;br /&gt;
          resourceName: &#039;LambdaFunctionHdrDsq&#039;,&lt;br /&gt;
          outputEventTag: &#039;output_Locations_LambdaFunctionHdrDsq_singleStage_directSqs__pass&#039;,&lt;br /&gt;
          dynamodbOutputEventIdentifiers: [&lt;br /&gt;
			{&lt;br /&gt;
              serviceName: {tableName}, //service that deployed the DynamoDB table, so can build table&#039;s full resource name&lt;br /&gt;
              resourceName: {resourceName}, //DynamoDB resourceName&lt;br /&gt;
              eventTag: {eventTagDynamoDB}&lt;br /&gt;
		    }&lt;br /&gt;
          ],&lt;br /&gt;
        }&lt;br /&gt;
      ]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Result of integrationtest =&lt;br /&gt;
Data have 2 table &amp;quot;TestRecord&amp;quot; and &amp;quot;TestUnit&amp;quot;.&lt;br /&gt;
:- TestRecord is table all unti of stage inside eg input output invokes and dynamodb&lt;br /&gt;
:- TestUnit is store status each unit &lt;br /&gt;
each unit save in table TestUnit&lt;br /&gt;
testRecordId is  name of test concat with testTime.&lt;br /&gt;
testUnitId is point to position of unti instage.&lt;br /&gt;
resultStatus is status of unit.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
eg:&lt;br /&gt;
input_0 = stages index 0 result &#039;&#039;&#039;input&#039;&#039;&#039;&lt;br /&gt;
output_1 = stages index 1 result &#039;&#039;&#039;output&#039;&#039;&#039;&lt;br /&gt;
invokeInput_0_1 = stages index 0 result &#039;&#039;&#039;invokes&#039;&#039;&#039; index 1 position input &lt;br /&gt;
invokeOutput_0_1 = stages index 0 result &#039;&#039;&#039;invokes&#039;&#039;&#039; index 1 position output&lt;br /&gt;
dynamodb_0_1 =  stages index 0 result &#039;&#039;&#039;dynamodb&#039;&#039;&#039; index 1.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
after all TestUnit finish (check  by awaitingMultiplestep penditnStep is integrationtestTag awaitingStepId is each TestUnit )&lt;br /&gt;
check all awaitingStep finish send message to ultimateIntegrationtest for sumla all test is status&lt;br /&gt;
&lt;br /&gt;
== Summary of test status == &lt;br /&gt;
:1.testStatus is &amp;quot;passed&amp;quot; all unit passed.&lt;br /&gt;
:2.testStatus is &amp;quot;failed&amp;quot;  have some is failed.&lt;br /&gt;
:3.testStatus is &amp;quot;processing&amp;quot; have some is have status processing after check all awaiting step is finish.&lt;br /&gt;
:4.testStatus is &amp;quot;failed&amp;quot; have record &amp;quot;errorsTest&amp;quot; in case &amp;quot;not match stage invoke&amp;quot;, &#039;found multiple matchingInvokes&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*[[2025-02-20 - Integration Test examples#tests.js Syntax|Syntax Dynamodb]]&lt;br /&gt;
&lt;br /&gt;
=How to test integrationtest s3=&lt;br /&gt;
[[Developer guide for making Integration Tests]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Working documents| 2025-11-20]]&lt;br /&gt;
[[Category:Working documents - Integration Testing| 2025-11-20]]&lt;/div&gt;</summary>
		<author><name>Mint</name></author>
	</entry>
	<entry>
		<id>https://izara.io/wiki/index.php?title=2025-11-20_IntegrationTest&amp;diff=4580</id>
		<title>2025-11-20 IntegrationTest</title>
		<link rel="alternate" type="text/html" href="https://izara.io/wiki/index.php?title=2025-11-20_IntegrationTest&amp;diff=4580"/>
		<updated>2026-08-14T05:14:22Z</updated>

		<summary type="html">&lt;p&gt;Mint: /* graphSeedDataTags */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Reference:&lt;br /&gt;
&lt;br /&gt;
*[[2020-10-01 - Integration Test Config - Functions|IntegrationtestConfig]]&lt;br /&gt;
*[[2020-10-01 - Integration Testing - Lambda Functions|Integrationtesting]]&lt;br /&gt;
*[[2025-02-20 - Integration Test examples|Example]]&lt;br /&gt;
&lt;br /&gt;
= File extension =&lt;br /&gt;
&lt;br /&gt;
uploadS3: &amp;quot;.json&amp;quot;&lt;br /&gt;
integrationtestConfig: &amp;quot;.js&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=TestRecord=&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JSON&amp;quot;&amp;gt;&lt;br /&gt;
[&lt;br /&gt;
  {&lt;br /&gt;
    integrationTestTag: &amp;quot;Integrationtest_xx&amp;quot;,&lt;br /&gt;
    testStartedTimestamp: 111111111, // start time&lt;br /&gt;
    bucketName: &amp;quot;integrationtest-config-us-east-2&amp;quot;,&lt;br /&gt;
    lastUpdateUniqueRequestId: &amp;quot;sssss&amp;quot;, //_izContext.uniqueRequestId protacts race coditionn dynamodb&lt;br /&gt;
    testStatus: &amp;quot;passed&amp;quot;,//failed,processing,passed&lt;br /&gt;
    testCompleteTimestamp: 1111113, // all test finish&lt;br /&gt;
    stages: [&lt;br /&gt;
      {&lt;br /&gt;
        stageConfig: {&lt;br /&gt;
          //straight copy of this stage from integration test config&lt;br /&gt;
          inputEventTag: &amp;quot;xx&amp;quot;,&lt;br /&gt;
          inputEventConfig: {//event input&lt;br /&gt;
          },&lt;br /&gt;
          outputEventTag: &amp;quot;output_xx&amp;quot;,&lt;br /&gt;
          outputEventConfig: {//event out put&lt;br /&gt;
          },&lt;br /&gt;
          resourceName: &amp;quot;ComplexfilterTestProcessComplexfilter&amp;quot;,// function name&lt;br /&gt;
          resourceType: &amp;quot;Lambda&amp;quot;, // function name&lt;br /&gt;
          serviceTag: &amp;quot;Complexfilter&amp;quot;,// (initeate sqs)&lt;br /&gt;
          snsServiceName: &amp;quot;Complexfilter&amp;quot;,// (initeate sqs)&lt;br /&gt;
          snsTopic: &amp;quot;PorcessComplexfilter_In&amp;quot;// (initeate sqs)&lt;br /&gt;
&lt;br /&gt;
        },&lt;br /&gt;
        stageStatus: &amp;quot;waiting&amp;quot;, //waiting|passed|failed,&lt;br /&gt;
        stageFinishedTimestamp: 111111111,// time that all tests finished and testRecord.stages.{stageKey}.stageStatus updated&lt;br /&gt;
        stageResults: {&lt;br /&gt;
          //results at the point of entering the resource (eg a Lambda function is invoked)&lt;br /&gt;
          inputResult: {&lt;br /&gt;
            resultTimestamp: 111111111,//{time result saved},&lt;br /&gt;
            resultStatus: &amp;quot;passed&amp;quot;,//passed|failed,&lt;br /&gt;
            requestParams: {//event input&lt;br /&gt;
            }&lt;br /&gt;
          },&lt;br /&gt;
          //results at the point of returning from the resource (eg a Lambda function returns)&lt;br /&gt;
          outputResult: {&lt;br /&gt;
            resultTimestamp: 111111111,//{time result saved},&lt;br /&gt;
            resultStatus: &amp;quot;passed&amp;quot;,//passed|failed,&lt;br /&gt;
            requestParams: {//event input&lt;br /&gt;
            }&lt;br /&gt;
          },&lt;br /&gt;
          //results at the point of invoking an external resource (eg the tested Lambda function is invoking another Lambda function)&lt;br /&gt;
          invokes: {&lt;br /&gt;
            &amp;quot;serviceName_resourceType_resourceName_inputEventTag &amp;quot;: {&lt;br /&gt;
              invokeTimestamp: 111111111,//{ time result saved },&lt;br /&gt;
              resultTimestamp: 111111112,//{ time result saved },&lt;br /&gt;
              resultStatus: &amp;quot;passed&amp;quot;,//passed | failed,&lt;br /&gt;
              invokeParams: {},//{event invoke input config }&lt;br /&gt;
              requestParams: {}// event invoke input request&lt;br /&gt;
            },&lt;br /&gt;
          },&lt;br /&gt;
          dynamodbResults: [&lt;br /&gt;
            {&lt;br /&gt;
              indexOfDynamodbOutput: 0,&lt;br /&gt;
              requestParams,&lt;br /&gt;
              resultStatus: &amp;quot;passed&amp;quot;,//&lt;br /&gt;
              resultTimestamp: 22222&lt;br /&gt;
            }]&lt;br /&gt;
&lt;br /&gt;
        },&lt;br /&gt;
        stageErrors: [&lt;br /&gt;
          //misc errors encountered&lt;br /&gt;
        ]&lt;br /&gt;
      }]&lt;br /&gt;
&lt;br /&gt;
  }&lt;br /&gt;
]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Seed Data=&lt;br /&gt;
integrationtest manager seed date 2 process&lt;br /&gt;
&lt;br /&gt;
=== Main Seed Data===&lt;br /&gt;
:Save file in s3 (in &#039;&#039;&#039;buckname&#039;&#039;&#039; :integrationtest-config-us-east-2, &#039;&#039;&#039;folder&#039;&#039;&#039;:seedData_integrationTest).For other dev use service,If a developer wants to add more for other important testing purposes.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;How to use:&#039;&#039;&#039;&lt;br /&gt;
#Add it from the s3 bucket at this point&lt;br /&gt;
#Run batch refreshSeedData [[Developer guide for making Integration Tests#Bash script|batch RefreshSeedData]]&lt;br /&gt;
&#039;&#039;&#039;Logic&#039;&#039;&#039;:Process by storage resouse (graph or dynamodb)&lt;br /&gt;
:To clean up the seed data in the table after it creates seed data form service deploy and pulls seed data from s3.&lt;br /&gt;
&lt;br /&gt;
=== Refresh Seed Data ===&lt;br /&gt;
:ProcessRefreshSeedData use seedDataTag for create data environment of &#039;&#039;&#039;test&#039;&#039;&#039; and can be refresh seeddata re-test agian.&lt;br /&gt;
:&#039;&#039;&#039;canbe share&#039;&#039;&#039; seed data for other test by seed data tag.&lt;br /&gt;
&#039;&#039;&#039;How to use:&#039;&#039;&#039;&lt;br /&gt;
:Save file in s3 (for other dav keep in floder dev name) or testConfig/seedData_config(for admin)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Folder&#039;&#039;&#039;&lt;br /&gt;
*dynamoDBSeedDataTags.json&lt;br /&gt;
*graphSeedDataTags.json&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Example&#039;&#039;&#039;&lt;br /&gt;
==== dynamoDBSeedDataTags ====&lt;br /&gt;
:If set tag in this setting integrationtest is generate seed data. in storage resource dynammodb.&lt;br /&gt;
Example&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;seedDynamodb_abc_ver2&amp;quot;: [ // seedDataTag&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;tableName&amp;quot;: &amp;quot;DelivMethodSTDTestLogicalResultsData&amp;quot;,  // servcieTag+stage+tablename&lt;br /&gt;
      &amp;quot;partitionKey&amp;quot;: &amp;quot;logicalResultId&amp;quot;,&lt;br /&gt;
      &amp;quot;sortKey&amp;quot;: &amp;quot;identifiersId&amp;quot;,&lt;br /&gt;
      &amp;quot;datas&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
          logicalResultId: {&lt;br /&gt;
            value: &amp;quot;eeeeeeeeee4&amp;quot;&lt;br /&gt;
          },&lt;br /&gt;
          identifiersId: {&lt;br /&gt;
            value: &amp;quot;lllll123456&amp;quot;&lt;br /&gt;
          },&lt;br /&gt;
          processLogicalResultExpiryTimestamp: {&lt;br /&gt;
            calcType: &amp;quot;currentTimestampAdjustment&amp;quot;, // can add other types of calculated data in future&lt;br /&gt;
            action: &amp;quot;subtract&amp;quot;, // add|subtract&lt;br /&gt;
            adjustment: &amp;quot;2 days&amp;quot;, // Human-Readable Relative Format , //Month,Months|Week,Weeks|day,days|Hour,Hours|Minute,Minutes|Second,Seconds|&lt;br /&gt;
          }&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
          logicalResultId: {&lt;br /&gt;
            value: &amp;quot;eeeeeeeeee4&amp;quot;&lt;br /&gt;
          },&lt;br /&gt;
          &amp;quot;identifiersId&amp;quot;: {&lt;br /&gt;
            value: &amp;quot;lllll777777&amp;quot;&lt;br /&gt;
          },&lt;br /&gt;
          processLogicalResultExpiryTimestamp: {&lt;br /&gt;
            calcType: &amp;quot;currentTimestampAdjustment&amp;quot;, // can add other types of calculated data in future&lt;br /&gt;
            action: &amp;quot;add&amp;quot;, // add|subtract&lt;br /&gt;
            adjustment: &amp;quot;2 days&amp;quot;, // Human-Readable Relative Format , //Month,Months|Week,Weeks|day,days|Hour,Hours|Minute,Minutes|Second,Seconds|&lt;br /&gt;
          } &lt;br /&gt;
        }&lt;br /&gt;
      ],&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;tableName&amp;quot;: &amp;quot;MLocationsTestFloatingRelationships&amp;quot;,// servcieTag+stage+tablename&lt;br /&gt;
      &amp;quot;partitionKey&amp;quot;: &amp;quot;importBatchId&amp;quot;,&lt;br /&gt;
      &amp;quot;sortKey&amp;quot;: &amp;quot;identifierRelationshipsId&amp;quot;,&lt;br /&gt;
      &amp;quot;datas&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;importBatchId&amp;quot;: &amp;quot;2-uuuuuuuuuuuuuu&amp;quot;,&lt;br /&gt;
          &amp;quot;identifierRelationshipsId&amp;quot;: &amp;quot;lllll123456&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;importBatchId&amp;quot;: &amp;quot;2-uuuuuuuuuuuuuu&amp;quot;,&lt;br /&gt;
          &amp;quot;identifierRelationshipsId&amp;quot;: &amp;quot;lllll777777&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;importBatchId&amp;quot;: &amp;quot;2-uuuuuuuuuuuuuu&amp;quot;,&lt;br /&gt;
          &amp;quot;identifierRelationshipsId&amp;quot;: &amp;quot;lllll99999999&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
      ]&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;tableName&amp;quot;: &amp;quot;MLocationsTestFindDataMain&amp;quot;,&lt;br /&gt;
      &amp;quot;partitionKey&amp;quot;: &amp;quot;findDataId&amp;quot;,&lt;br /&gt;
      &amp;quot;datas&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;findDataId&amp;quot;: &amp;quot;111111&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;findDataId&amp;quot;: &amp;quot;22222&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;findDataId&amp;quot;: &amp;quot;333333&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
      ]&lt;br /&gt;
    }&lt;br /&gt;
  ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== graphSeedDataTags ====&lt;br /&gt;
:If set tag in this setting integrationtest is generate seed data. in storage resource graphHanler.&lt;br /&gt;
Example&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;seedData_testTag_GG&amp;quot;: [ // seedDataTag&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;nodes&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;nodeLabels&amp;quot;: [&lt;br /&gt;
            &amp;quot;SellOfferPlan_sellOfferPlanDeliveryMethodLink&amp;quot;&lt;br /&gt;
          ],&lt;br /&gt;
          &amp;quot;objectDetail&amp;quot;: {&lt;br /&gt;
            &amp;quot;identifiers&amp;quot;: {&lt;br /&gt;
              &amp;quot;sellOfferPlanDeliveryMethodLinkId&amp;quot;: {&lt;br /&gt;
                &amp;quot;value&amp;quot;: &amp;quot;minttestrefreshSeedData_01&amp;quot;,&lt;br /&gt;
              },&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;fields&amp;quot;: {&lt;br /&gt;
              &amp;quot;productId&amp;quot;: {&lt;br /&gt;
                &amp;quot;value&amp;quot;: &amp;quot;ddddd&amp;quot;,&lt;br /&gt;
              },&lt;br /&gt;
              &amp;quot;price&amp;quot;: {&lt;br /&gt;
                &amp;quot;value&amp;quot;: 9999&lt;br /&gt;
              },&lt;br /&gt;
              exampleTimestamp: {&lt;br /&gt;
                calcType: &amp;quot;currentTimestampAdjustment&amp;quot;, // can add other types of calculated data in future &lt;br /&gt;
                action: &amp;quot;subtract&amp;quot;, // add|subtract&lt;br /&gt;
                adjustment: &amp;quot;2 days&amp;quot;, // Human-Readable Relative Format  //Month,Months|Week,Weeks|day,days|Hour,Hours|Minute,Minutes|Second,Seconds|&lt;br /&gt;
              }&lt;br /&gt;
            }&lt;br /&gt;
          }&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;nodeLabels&amp;quot;: [&lt;br /&gt;
            &amp;quot;servcieMintTest_shoppingMall&amp;quot;&lt;br /&gt;
          ],&lt;br /&gt;
          &amp;quot;objectDetail&amp;quot;: {&lt;br /&gt;
            &amp;quot;identifiers&amp;quot;: {&lt;br /&gt;
              &amp;quot;shoppingMallId&amp;quot;: &amp;quot;minttestrefreshSeedData_shoppingMallId&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;fields&amp;quot;: {&lt;br /&gt;
              &amp;quot;name&amp;quot;: &amp;quot;hotpot-man&amp;quot;,&lt;br /&gt;
              &amp;quot;totalPrice&amp;quot;: 500&lt;br /&gt;
            }&lt;br /&gt;
          }&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;nodeLabels&amp;quot;: [&lt;br /&gt;
            &amp;quot;servcieMintTest_shoppingMallCalculateSetting&amp;quot;&lt;br /&gt;
          ],&lt;br /&gt;
          &amp;quot;objectDetail&amp;quot;: {&lt;br /&gt;
            &amp;quot;identifiers&amp;quot;: {&lt;br /&gt;
              &amp;quot;versionedDataId&amp;quot;: &amp;quot;minttestrefreshSeedData_versionedDataId&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;fields&amp;quot;: {&lt;br /&gt;
              &amp;quot;addToCalculatedValuePerOrder&amp;quot;: 10,&lt;br /&gt;
              &amp;quot;addToRateTableValuePerOrder&amp;quot;: 77&lt;br /&gt;
            }&lt;br /&gt;
          }&lt;br /&gt;
        }&lt;br /&gt;
      ],&lt;br /&gt;
      &amp;quot;relationships&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;fromObject&amp;quot;: {&lt;br /&gt;
            &amp;quot;nodeLabel&amp;quot;: &amp;quot;SellOfferPlan_sellOfferPlanDeliveryMethodLink&amp;quot;,&lt;br /&gt;
            &amp;quot;identifiers&amp;quot;: {&lt;br /&gt;
              &amp;quot;sellOfferPlanDeliveryMethodLinkId&amp;quot;: &amp;quot;minttestrefreshSeedData_01&amp;quot;&lt;br /&gt;
            }&lt;br /&gt;
          },&lt;br /&gt;
          &amp;quot;toObject&amp;quot;: {&lt;br /&gt;
            &amp;quot;nodeLabel&amp;quot;: &amp;quot;servcieMintTest_shoppingMall&amp;quot;,&lt;br /&gt;
            &amp;quot;identifiers&amp;quot;: {&lt;br /&gt;
              &amp;quot;shoppingMallId&amp;quot;: &amp;quot;minttestrefreshSeedData_shoppingMallId&amp;quot;&lt;br /&gt;
            }&lt;br /&gt;
          },&lt;br /&gt;
          &amp;quot;relationships&amp;quot;: [&lt;br /&gt;
            {&lt;br /&gt;
              &amp;quot;relTypeConcat&amp;quot;: &amp;quot;SellOfferPlan_hasCCCCCCC&amp;quot;,&lt;br /&gt;
              &amp;quot;relId&amp;quot;: &amp;quot;uuid-4s56df74s9df79w-w6de4f5w689ef&amp;quot;&lt;br /&gt;
            }&lt;br /&gt;
          ]&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;fromObject&amp;quot;: {&lt;br /&gt;
            &amp;quot;nodeLabel&amp;quot;: &amp;quot;servcieMintTest_shoppingMall&amp;quot;,&lt;br /&gt;
            &amp;quot;identifiers&amp;quot;: {&lt;br /&gt;
              &amp;quot;shoppingMallId&amp;quot;: &amp;quot;minttestrefreshSeedData_shoppingMallId&amp;quot;&lt;br /&gt;
            }&lt;br /&gt;
          },&lt;br /&gt;
          &amp;quot;toObject&amp;quot;: {&lt;br /&gt;
            &amp;quot;nodeLabel&amp;quot;: &amp;quot;servcieMintTest_shoppingMallCalculateSetting&amp;quot;,&lt;br /&gt;
            &amp;quot;identifiers&amp;quot;: {&lt;br /&gt;
              &amp;quot;versionedDataId&amp;quot;: &amp;quot;minttestrefreshSeedData_versionedDataId&amp;quot;&lt;br /&gt;
            }&lt;br /&gt;
          },&lt;br /&gt;
          &amp;quot;relationships&amp;quot;: [&lt;br /&gt;
            {&lt;br /&gt;
              &amp;quot;relTypeConcat&amp;quot;: &amp;quot;servcieMintTest_shoppingMall_currentShoppingMallCalculateSetting&amp;quot;,&lt;br /&gt;
              &amp;quot;relId&amp;quot;: &amp;quot;uuid-s122df5-s21df&amp;quot;,&lt;br /&gt;
              &amp;quot;relationshipProperty&amp;quot;: {&lt;br /&gt;
                &amp;quot;timeStamp&amp;quot;: 1234567879,&lt;br /&gt;
                &amp;quot;statusName&amp;quot;: true&lt;br /&gt;
              }&lt;br /&gt;
            },&lt;br /&gt;
            {&lt;br /&gt;
              &amp;quot;relTypeConcat&amp;quot;: &amp;quot;servcieMintTest_shoppingMall_hasShoppingMallCalculateSetting&amp;quot;,&lt;br /&gt;
              &amp;quot;relId&amp;quot;: &amp;quot;uuid-77777-99999&amp;quot;,&lt;br /&gt;
              &amp;quot;relationshipProperties&amp;quot;: {&lt;br /&gt;
                &amp;quot;statusName&amp;quot;: {&lt;br /&gt;
                  &amp;quot;value&amp;quot;: true&lt;br /&gt;
                },&lt;br /&gt;
                exampleTimestamp: {&lt;br /&gt;
                  calcType: &amp;quot;currentTimestampAdjustment&amp;quot;, // can add other types of calculated data in future&lt;br /&gt;
                  action: &amp;quot;subtract&amp;quot;, // add|subtract&lt;br /&gt;
                  adjustment: &amp;quot;2 days&amp;quot;, // Human-Readable Relative Format  //Month,Months|Week,Weeks|day,days|Hour,Hours|Minute,Minutes|Second,Seconds|&lt;br /&gt;
                }&lt;br /&gt;
              }&lt;br /&gt;
            }&lt;br /&gt;
          ]&lt;br /&gt;
        }&lt;br /&gt;
      ]&lt;br /&gt;
    }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;seedData_testTag_ABC&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;objType&amp;quot;: {&lt;br /&gt;
        &amp;quot;objectType&amp;quot;: &amp;quot;productAttributeLink&amp;quot;,&lt;br /&gt;
        &amp;quot;serviceTag&amp;quot;: &amp;quot;ProductAttribute&amp;quot;&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;objInstanceFull&amp;quot;: {&lt;br /&gt;
        &amp;quot;identifiers&amp;quot;: {&lt;br /&gt;
          &amp;quot;productAttributeLinkId&amp;quot;: &amp;quot;f90b57ca8b2fe1a83459d57da038cf50fb6d40e6&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;fields&amp;quot;: {}&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;relationships&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;relType&amp;quot;: {&lt;br /&gt;
            &amp;quot;serviceTag&amp;quot;: &amp;quot;ProductAttribute&amp;quot;,&lt;br /&gt;
            &amp;quot;relationshipTag&amp;quot;: &amp;quot;hasProductAttributeLink&amp;quot;&lt;br /&gt;
          },&lt;br /&gt;
          &amp;quot;relationshipDirection&amp;quot;: &amp;quot;to&amp;quot;,&lt;br /&gt;
          &amp;quot;targetObjType&amp;quot;: {&lt;br /&gt;
            &amp;quot;serviceTag&amp;quot;: &amp;quot;ProductStandard&amp;quot;,&lt;br /&gt;
            &amp;quot;objectType&amp;quot;: &amp;quot;productStandard&amp;quot;&lt;br /&gt;
          },&lt;br /&gt;
          &amp;quot;targetIdentifiers&amp;quot;: {&lt;br /&gt;
            &amp;quot;productId&amp;quot;: &amp;quot;f526a367a2b66cb0f37ca61b6c43f419929f521d&amp;quot;&lt;br /&gt;
          },&lt;br /&gt;
          &amp;quot;relationshipProperties&amp;quot;: {}&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;relType&amp;quot;: {&lt;br /&gt;
            &amp;quot;serviceTag&amp;quot;: &amp;quot;ProductAttribute&amp;quot;,&lt;br /&gt;
            &amp;quot;relationshipTag&amp;quot;: &amp;quot;isProductAttribute&amp;quot;&lt;br /&gt;
          },&lt;br /&gt;
          &amp;quot;relationshipDirection&amp;quot;: &amp;quot;from&amp;quot;,&lt;br /&gt;
          &amp;quot;targetObjType&amp;quot;: {&lt;br /&gt;
            &amp;quot;serviceTag&amp;quot;: &amp;quot;ProductAttribute&amp;quot;,&lt;br /&gt;
            &amp;quot;objectType&amp;quot;: &amp;quot;productAttribute&amp;quot;&lt;br /&gt;
          },&lt;br /&gt;
          &amp;quot;targetIdentifiers&amp;quot;: {&lt;br /&gt;
            &amp;quot;productAttributeId&amp;quot;: &amp;quot;f4bf7a078071d54036656df544197ba638bc3a68&amp;quot;&lt;br /&gt;
          },&lt;br /&gt;
          &amp;quot;relationshipProperties&amp;quot;: {}&lt;br /&gt;
        }&lt;br /&gt;
      ]&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;objType&amp;quot;: {&lt;br /&gt;
        &amp;quot;objectType&amp;quot;: &amp;quot;productAttributeLink&amp;quot;,&lt;br /&gt;
        &amp;quot;serviceTag&amp;quot;: &amp;quot;ProductAttribute&amp;quot;&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;objInstanceFull&amp;quot;: {&lt;br /&gt;
        &amp;quot;identifiers&amp;quot;: {&lt;br /&gt;
          &amp;quot;productAttributeLinkId&amp;quot;: &amp;quot;f90b57ca8b2fe1a83459d57da038cf50fb6d40e6&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;fields&amp;quot;: {}&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;relationships&amp;quot;: []&lt;br /&gt;
    }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;seedData_testTag_LL&amp;quot;: []&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Cleaning Seed Data ===&lt;br /&gt;
:Delete seed data for set environment of &#039;&#039;&#039;test&#039;&#039;&#039;.&lt;br /&gt;
*cleaningeDynamoOneRecordsTags.json&lt;br /&gt;
*cleaningeDynamoManyRecordsTags.json&lt;br /&gt;
&lt;br /&gt;
====cleaningeDynamoOneRecordsTags====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;cleaningSeed_TestFindData_and_Education_case_invalid01&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;tableName&amp;quot;: &amp;quot;MLocationsTestFindDataMain&amp;quot;,&lt;br /&gt;
      &amp;quot;primaryKeys&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;findDataId&amp;quot;: &amp;quot;cleaning-1&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;findDataId&amp;quot;: &amp;quot;cleaning-2&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
      ]&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;tableName&amp;quot;: &amp;quot;MLocationsTestEducation&amp;quot;,&lt;br /&gt;
      &amp;quot;primaryKeys&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;studentId&amp;quot;: &amp;quot;cleaning-AA&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;studentId&amp;quot;: &amp;quot;cleaning-BB&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;studentId&amp;quot;: &amp;quot;cleaning-CC&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
      ]&lt;br /&gt;
    }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;cleaningSeed_TestMemberPersonnel_case_invalid01&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;tableName&amp;quot;: &amp;quot;MLocationsTestMemberPersonnel&amp;quot;,&lt;br /&gt;
      &amp;quot;primaryKeys&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;userId&amp;quot;: &amp;quot;namtan&amp;quot;,&lt;br /&gt;
          &amp;quot;passwordId&amp;quot;: &amp;quot;qqqww&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;userId&amp;quot;: &amp;quot;jack&amp;quot;,&lt;br /&gt;
          &amp;quot;passwordId&amp;quot;: &amp;quot;q1&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;userId&amp;quot;: &amp;quot;Momay&amp;quot;,&lt;br /&gt;
          &amp;quot;passwordId&amp;quot;: &amp;quot;ttr&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
      ]&lt;br /&gt;
    }&lt;br /&gt;
  ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== cleaningeDynamoManyRecordsTags ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;cleaningSeed_manyData_partitionKey_only_miss_sort&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;tableName&amp;quot;: &amp;quot;MLocationsTestMemberPersonnel&amp;quot;,&lt;br /&gt;
      &amp;quot;primaryKeys&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;userId&amp;quot;: &amp;quot;many-data&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
      ]&lt;br /&gt;
    }&lt;br /&gt;
  ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*logic query table MLocationsTestMemberPersonnel use primary Keys &amp;quot;userId&amp;quot; and then delete all data from primary Keys.&lt;br /&gt;
&lt;br /&gt;
=resources=&lt;br /&gt;
syntax is object&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{ &lt;br /&gt;
	&amp;quot;Lambda&amp;quot;:{&lt;br /&gt;
		&amp;quot;{FunctionNameHdrSqs}&amp;quot;:{ // FunctionNameHdrSqs is match resourceName in file tests&lt;br /&gt;
			&amp;quot;localLacation&amp;quot;:&amp;quot;/src/FunctionNameHdrSqs.js&amp;quot;,&lt;br /&gt;
			&amp;quot;localHandler&amp;quot;:&amp;quot;main&amp;quot;, &lt;br /&gt;
			&amp;quot;functionName&amp;quot;:&amp;quot;FunctionNameHdrSqs&amp;quot;	// FunctionName is function name match key of function.yml of servcie.&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;ProcessComplexFilterHdrSqs&amp;quot;:{ &lt;br /&gt;
			&amp;quot;localLacation&amp;quot;:&amp;quot;/src/ProcessComplexFilterHdrSqs.js&amp;quot;, &lt;br /&gt;
			&amp;quot;localHandler&amp;quot;:&amp;quot;main&amp;quot;, &lt;br /&gt;
			&amp;quot;functionName&amp;quot;:&amp;quot;ProcessComplexFilterHdrSqs&amp;quot; &lt;br /&gt;
		},&lt;br /&gt;
		... &lt;br /&gt;
	},&lt;br /&gt;
	&amp;quot;Dynamodb&amp;quot;: {&lt;br /&gt;
		&amp;quot;filterMain&amp;quot;:{ // match resourceName in file tests(dynamodbOutputEventIdentifiers)&lt;br /&gt;
			&amp;quot;tableName&amp;quot;:&amp;quot;filterMain&amp;quot; &lt;br /&gt;
		}, &lt;br /&gt;
		&amp;quot;tableNameBB&amp;quot;:{ &lt;br /&gt;
			&amp;quot;tableName&amp;quot;:&amp;quot;tableNameBB&amp;quot; &lt;br /&gt;
		},&lt;br /&gt;
		... &lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=events=&lt;br /&gt;
Syntax is object&lt;br /&gt;
==Syntax Name==&lt;br /&gt;
===FileName===&lt;br /&gt;
::Event_{inputEventTag}&lt;br /&gt;
&lt;br /&gt;
===eventTag===&lt;br /&gt;
#inputEventTag&lt;br /&gt;
#outputEventTag&lt;br /&gt;
#dynamodbTag&lt;br /&gt;
&lt;br /&gt;
*file events.js is have eventTag  (inputEventTag,outputEventTag,dynamodbTag)&lt;br /&gt;
**How to create name eventTag&lt;br /&gt;
***Example case : &amp;quot;test in service complexFilter functionname ProcessComplexFilter case element type is logical basic&amp;quot;.&lt;br /&gt;
::*&#039;&#039;&#039;inputEventTag&#039;&#039;&#039;&lt;br /&gt;
::::{serviceName}_{functionName}_{caseTest}&lt;br /&gt;
&#039;&#039;Conplexfilter_ProcessComplexFilter_Typelogical_basic&#039;&#039;&lt;br /&gt;
::*&#039;&#039;&#039;outputEventTag&#039;&#039;&#039;&lt;br /&gt;
::::output_{inputEventTag}&lt;br /&gt;
&#039;&#039;output_Conplexfilter_ProcessComplexFilter_Typelogical_basic&#039;&#039;&lt;br /&gt;
::*&#039;&#039;&#039;dynamodbTag&#039;&#039;&#039;&lt;br /&gt;
::::{inputEventTag}__Dynamodb__{&#039;&#039;&#039;action*&#039;&#039;&#039;}_{tableName} &lt;br /&gt;
&#039;&#039;Conplexfilter_ProcessComplexFilter_Typelogical_basic___Dynamodb__putItem_filterMain&#039;&#039;&lt;br /&gt;
: &amp;lt;u&amp;gt;&#039;&#039;&#039;{action}&#039;&#039;&#039; is only &#039;&#039;put&#039;&#039; or &#039;&#039;update&#039;&#039;, and in case of &#039;&#039;update&#039;&#039; must only test the last step of update &amp;lt;/u&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Syntax event===&lt;br /&gt;
====initiate by handlerServcie====&lt;br /&gt;
=====Sqs=====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
// An example input and output event of Sns&lt;br /&gt;
{&lt;br /&gt;
   &amp;quot;LambdaFunctionHdrSqs_input__pass&amp;quot;:{&lt;br /&gt;
      &amp;quot;properties&amp;quot;:{&lt;br /&gt;
         &amp;quot;propertyA&amp;quot;:{&lt;br /&gt;
            &amp;quot;value&amp;quot;:&amp;quot;valueProperty1&amp;quot;&lt;br /&gt;
         },&lt;br /&gt;
         &amp;quot;propertyB&amp;quot;:{&lt;br /&gt;
            &amp;quot;properties&amp;quot;:{&lt;br /&gt;
               &amp;quot;propertyB1&amp;quot;:{&lt;br /&gt;
                  &amp;quot;value&amp;quot;:&amp;quot;valuePropertyB1&amp;quot;&lt;br /&gt;
               }&lt;br /&gt;
            }&lt;br /&gt;
         },&lt;br /&gt;
         &amp;quot;propertyC&amp;quot;:{&lt;br /&gt;
            &amp;quot;eventValue&amp;quot;:[&lt;br /&gt;
               &amp;quot;valuePropertyC1&amp;quot;,&lt;br /&gt;
               &amp;quot;valuePropertyC2&amp;quot;,&lt;br /&gt;
               &amp;quot;valuePropertyC3&amp;quot;&lt;br /&gt;
            ]&lt;br /&gt;
         }&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;snsSqsTrigger&amp;quot;:true,&lt;br /&gt;
      &amp;quot;messageAttributes&amp;quot;:{&lt;br /&gt;
            &amp;quot;msgTag&amp;quot;:{&lt;br /&gt;
               &amp;quot;value&amp;quot;:&amp;quot;msgTag&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;propertyD&amp;quot;:{&lt;br /&gt;
               &amp;quot;value&amp;quot;:&amp;quot;valuePropertyD&amp;quot;&lt;br /&gt;
            }&lt;br /&gt;
      }&lt;br /&gt;
   },&lt;br /&gt;
   {&lt;br /&gt;
      &amp;quot;output_LambdaFunctionHdrSqs_pass&amp;quot;:{&lt;br /&gt;
         &amp;quot;properties&amp;quot;:{&lt;br /&gt;
            &amp;quot;propertyA&amp;quot;:{&lt;br /&gt;
               &amp;quot;value&amp;quot;:&amp;quot;valueProperty1&amp;quot;&lt;br /&gt;
            }&lt;br /&gt;
         }&lt;br /&gt;
      }&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot; linein&amp;gt;&lt;br /&gt;
&amp;quot;snsSqsTrigger&amp;quot;:true&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Dsq=====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
// An example input and output event of Direct Sqs&lt;br /&gt;
{&lt;br /&gt;
   &amp;quot;LambdaFunctionHdrDsq_input__pass&amp;quot;:{&lt;br /&gt;
      &amp;quot;forStageMatching&amp;quot;:true,&lt;br /&gt;
      &amp;quot;properties&amp;quot;:{&lt;br /&gt;
         &amp;quot;propertyA&amp;quot;:{&lt;br /&gt;
            &amp;quot;forStageMatching&amp;quot;:true,&lt;br /&gt;
            &amp;quot;value&amp;quot;:&amp;quot;valueProperty1&amp;quot;&lt;br /&gt;
         },&lt;br /&gt;
         &amp;quot;propertyB&amp;quot;:{&lt;br /&gt;
            &amp;quot;forStageMatching&amp;quot;:true,&lt;br /&gt;
            &amp;quot;properties&amp;quot;:{&lt;br /&gt;
               &amp;quot;propertyB1&amp;quot;:{&lt;br /&gt;
                  &amp;quot;forStageMatching&amp;quot;:true,&lt;br /&gt;
                  &amp;quot;value&amp;quot;:&amp;quot;valuePropertyB1&amp;quot;&lt;br /&gt;
               }&lt;br /&gt;
            }&lt;br /&gt;
         },&lt;br /&gt;
         &amp;quot;propertyC&amp;quot;:{&lt;br /&gt;
            &amp;quot;eventValue&amp;quot;:[&lt;br /&gt;
               &amp;quot;valuePropertyC1&amp;quot;,&lt;br /&gt;
               &amp;quot;valuePropertyC2&amp;quot;,&lt;br /&gt;
               &amp;quot;valuePropertyC3&amp;quot;&lt;br /&gt;
            ]&lt;br /&gt;
         }&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;DirectSqs&amp;quot;:true,&lt;br /&gt;
      &amp;quot;messageAttributes&amp;quot;:{&lt;br /&gt;
         &amp;quot;msgTag&amp;quot;:{&lt;br /&gt;
           &amp;quot;forStageMatching&amp;quot;:true,&lt;br /&gt;
           &amp;quot;value&amp;quot;:&amp;quot;msgTag&amp;quot;&lt;br /&gt;
          },&lt;br /&gt;
          &amp;quot;propertyD&amp;quot;:{&lt;br /&gt;
           &amp;quot;forStageMatching&amp;quot;:true,&lt;br /&gt;
           &amp;quot;value&amp;quot;:&amp;quot;valuePropertyD&amp;quot;&lt;br /&gt;
          }&lt;br /&gt;
      }&lt;br /&gt;
   },&lt;br /&gt;
   {&lt;br /&gt;
      &amp;quot;output_LambdaFunctionHdrDsq_pass&amp;quot;:{&lt;br /&gt;
         &amp;quot;forStageMatching&amp;quot;:true,&lt;br /&gt;
         &amp;quot;properties&amp;quot;:{&lt;br /&gt;
            &amp;quot;propertyA&amp;quot;:{&lt;br /&gt;
               &amp;quot;forStageMatching&amp;quot;:true,&lt;br /&gt;
               &amp;quot;value&amp;quot;:&amp;quot;valueProperty1&amp;quot;&lt;br /&gt;
            }&lt;br /&gt;
         }&lt;br /&gt;
      }&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* DirectSqs = true &lt;br /&gt;
:: for initialStage of Dsq&lt;br /&gt;
* messageAttributes is optional&lt;br /&gt;
&lt;br /&gt;
=====Inv=====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;LambdaFunctionHdrInv_input__pass&amp;quot;:{&lt;br /&gt;
     &amp;quot;forStageMatching&amp;quot;:true,&lt;br /&gt;
     &amp;quot;properties&amp;quot;:{&lt;br /&gt;
        &amp;quot;propertyA&amp;quot;:{&lt;br /&gt;
           &amp;quot;forStageMatching&amp;quot;:true,&lt;br /&gt;
           &amp;quot;value&amp;quot;:&amp;quot;valueProperty1&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;propertyB&amp;quot;:{&lt;br /&gt;
           &amp;quot;forStageMatching&amp;quot;:true,&lt;br /&gt;
           &amp;quot;properties&amp;quot;:{&lt;br /&gt;
              &amp;quot;propertyB1&amp;quot;:{&lt;br /&gt;
                 &amp;quot;forStageMatching&amp;quot;:true,&lt;br /&gt;
                 &amp;quot;value&amp;quot;:&amp;quot;valuePropertyB1&amp;quot;&lt;br /&gt;
              }&lt;br /&gt;
           }&lt;br /&gt;
        }&lt;br /&gt;
     }&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
        &amp;quot;output_LambdaFunctionHdrInv_pass&amp;quot;:{&lt;br /&gt;
           &amp;quot;forStageMatching&amp;quot;:true,&lt;br /&gt;
           &amp;quot;properties&amp;quot;:{&lt;br /&gt;
              &amp;quot;propertyA&amp;quot;:{&lt;br /&gt;
                 &amp;quot;forStageMatching&amp;quot;:true,&lt;br /&gt;
                 &amp;quot;value&amp;quot;:&amp;quot;valueProperty1&amp;quot;&lt;br /&gt;
              }&lt;br /&gt;
           }&lt;br /&gt;
        }&lt;br /&gt;
     }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Api=====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
// An example input and output event of API&lt;br /&gt;
{&lt;br /&gt;
	&amp;quot;LambdaFunctionHdrApi_input__pass_notTestAuthorizer&amp;quot;: { &lt;br /&gt;
		&amp;quot;forstageMatvhing&amp;quot;: true, &lt;br /&gt;
		&amp;quot;properties&amp;quot;: { &lt;br /&gt;
			&amp;quot;body&amp;quot;: { &lt;br /&gt;
				&amp;quot;properties&amp;quot;: { &lt;br /&gt;
					&amp;quot;propertyA&amp;quot;: { &lt;br /&gt;
						&amp;quot;testValueMatches&amp;quot;: false, &lt;br /&gt;
						&amp;quot;value&amp;quot;: &amp;quot;valueProperty1&amp;quot;, &lt;br /&gt;
					}, &lt;br /&gt;
					&amp;quot;propertyB&amp;quot;: { &lt;br /&gt;
						&amp;quot;properties&amp;quot;: { &lt;br /&gt;
							&amp;quot;propertyB1&amp;quot;: { &lt;br /&gt;
								&amp;quot;value&amp;quot;: &amp;quot;valuePropertyB1&amp;quot;, &lt;br /&gt;
							} &lt;br /&gt;
						} &lt;br /&gt;
					}, &lt;br /&gt;
					&amp;quot;propertyC&amp;quot;: { &lt;br /&gt;
						&amp;quot;eventValue&amp;quot;: [ &lt;br /&gt;
							&amp;quot;valuePropertyC1&amp;quot;, &lt;br /&gt;
							&amp;quot;valuePropertyC2&amp;quot;, &lt;br /&gt;
							&amp;quot;valuePropertyC3&amp;quot;, &lt;br /&gt;
						] &lt;br /&gt;
					},&lt;br /&gt;
					... &lt;br /&gt;
				} &lt;br /&gt;
			} &lt;br /&gt;
		}&lt;br /&gt;
	}, &lt;br /&gt;
	&amp;quot;Output_LambdaFunctionHdrApi_input__pass_notTestAuthorizer&amp;quot;: { &lt;br /&gt;
		&amp;quot;properties&amp;quot;: { &lt;br /&gt;
			&amp;quot;body&amp;quot;: { &lt;br /&gt;
				&amp;quot;properties&amp;quot;: { &lt;br /&gt;
					&amp;quot;propertyA&amp;quot;: { &lt;br /&gt;
						&amp;quot;testValueMatches&amp;quot;: false, &lt;br /&gt;
						&amp;quot;value&amp;quot;: &amp;quot;valueProperty1&amp;quot;&lt;br /&gt;
					}, &lt;br /&gt;
					...&lt;br /&gt;
				} &lt;br /&gt;
			} &lt;br /&gt;
		}  &lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====S3=====&lt;br /&gt;
&lt;br /&gt;
====dynamodb====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
// An example event of Dynamodb //optional &lt;br /&gt;
{&lt;br /&gt;
	{inputEventTag}__dynamodb_{action}_{tablename}: { // eg. &amp;quot;Complexfilter_ProcessComplexfilter_logical_basic__dynamodb_update_FilterMain&amp;quot;&lt;br /&gt;
	&amp;quot;forStageMatching&amp;quot;: true,&lt;br /&gt;
     &amp;quot;properties&amp;quot;: {&lt;br /&gt;
        &amp;quot;filterMainUniqueRequestId&amp;quot;: {&lt;br /&gt;
          &amp;quot;testValueMatches&amp;quot;: fase,&lt;br /&gt;
          &amp;quot;value&amp;quot;: &amp;quot;bbc4f4a9-2032-4dec-9129-8c7d169fecc5&amp;quot;&lt;br /&gt;
         },&lt;br /&gt;
        &amp;quot;filterObject&amp;quot;: {&lt;br /&gt;
        &amp;quot;forStageMatching&amp;quot;: true,&lt;br /&gt;
        &amp;quot;properties&amp;quot;: {&lt;br /&gt;
          &amp;quot;logicalType&amp;quot;: {&lt;br /&gt;
            &amp;quot;value&amp;quot;: &amp;quot;partitionKey&amp;quot;&lt;br /&gt;
          },&lt;br /&gt;
          &amp;quot;comparison&amp;quot;: {&lt;br /&gt;
            &amp;quot;value&amp;quot;: &amp;quot;equals&amp;quot;&lt;br /&gt;
          },&lt;br /&gt;
          &amp;quot;type&amp;quot;: {&lt;br /&gt;
            &amp;quot;value&amp;quot;: &amp;quot;logical&amp;quot;&lt;br /&gt;
          },&lt;br /&gt;
          &amp;quot;partitionKey&amp;quot;: {&lt;br /&gt;
            &amp;quot;forStageMatching&amp;quot;: true,&lt;br /&gt;
            &amp;quot;value&amp;quot;: &amp;quot;mockIntegratioTestCPF&amp;quot;&lt;br /&gt;
          }&lt;br /&gt;
        }&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;filterMainExpiryTime&amp;quot;: {&lt;br /&gt;
        &amp;quot;testValueMatches&amp;quot;: fase,&lt;br /&gt;
        &amp;quot;value&amp;quot;: 1731980802858&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;filterMainStatus&amp;quot;: {&lt;br /&gt;
       &amp;quot;forStageMatching&amp;quot;: true,&lt;br /&gt;
        &amp;quot;value&amp;quot;: &amp;quot;processing&amp;quot;&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;createTime&amp;quot;: {&lt;br /&gt;
        &amp;quot;testValueMatches&amp;quot;: fase,&lt;br /&gt;
        &amp;quot;value&amp;quot;: 1731894402678&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;objType&amp;quot;: {&lt;br /&gt;
        &amp;quot;forStageMatching&amp;quot;: true,&lt;br /&gt;
        &amp;quot;properties&amp;quot;: {&lt;br /&gt;
          &amp;quot;serviceTag&amp;quot;: {&lt;br /&gt;
            &amp;quot;forStageMatching&amp;quot;: true,&lt;br /&gt;
            &amp;quot;value&amp;quot;: &amp;quot;IntTesting&amp;quot;&lt;br /&gt;
          },&lt;br /&gt;
          &amp;quot;objectType&amp;quot;: {&lt;br /&gt;
            &amp;quot;forStageMatching&amp;quot;: true,&lt;br /&gt;
            &amp;quot;value&amp;quot;: &amp;quot;TestRecord&amp;quot;&lt;br /&gt;
          }&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;keyValues&amp;quot;: {&lt;br /&gt;
      &amp;quot;filterMainId&amp;quot;: &amp;quot;4865d2451a621cb7f71225cfabf2df4f98e20801&amp;quot;,&lt;br /&gt;
      &amp;quot;objTypeId&amp;quot;: &amp;quot;cdb170690571df7522b3850920fce02507c077ee&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
	} &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* partition key: filterMainId&lt;br /&gt;
* sort key: objTypeId&lt;br /&gt;
&lt;br /&gt;
[[2021-01-15 - Integration Testing - Adding DynamoDB result tests]]&lt;br /&gt;
&lt;br /&gt;
===Type paramiter===&lt;br /&gt;
use for evnet and dyanmodb event&lt;br /&gt;
====Normal====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 object: {&lt;br /&gt;
  forStageMatching: true,&lt;br /&gt;
  properties: {&lt;br /&gt;
    name:{&lt;br /&gt;
     forStageMatching: true,&lt;br /&gt;
     value:&amp;quot;Tom&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
   }&lt;br /&gt;
 },&lt;br /&gt;
 array: {&lt;br /&gt;
  forStageMatching: true,&lt;br /&gt;
  useIsEqual: true,&lt;br /&gt;
  eventValue: [&lt;br /&gt;
   {&lt;br /&gt;
     &amp;quot;relTypeAndDirection&amp;quot;: {&lt;br /&gt;
       &amp;quot;relType&amp;quot;: {&lt;br /&gt;
         &amp;quot;serviceTag&amp;quot;: &amp;quot;maxxCart2&amp;quot;,&lt;br /&gt;
         &amp;quot;relationshipTag&amp;quot;: &amp;quot;hasCartOrder&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;relationshipDirection&amp;quot;: &amp;quot;from&amp;quot;&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;targetObjects&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;objType&amp;quot;: {&lt;br /&gt;
           &amp;quot;serviceTag&amp;quot;: &amp;quot;maxxCart2&amp;quot;,&lt;br /&gt;
           &amp;quot;objectType&amp;quot;: &amp;quot;cartOrder&amp;quot;&lt;br /&gt;
          }&lt;br /&gt;
        }&lt;br /&gt;
      ]&lt;br /&gt;
    }&lt;br /&gt;
  ]&lt;br /&gt;
 },&lt;br /&gt;
 number: {&lt;br /&gt;
  forStageMatching: true,&lt;br /&gt;
  value: 1111&lt;br /&gt;
 },&lt;br /&gt;
 string: {&lt;br /&gt;
  forStageMatching: true,&lt;br /&gt;
  value: &amp;quot;hi&amp;quot;&lt;br /&gt;
 },&lt;br /&gt;
 boolean: {&lt;br /&gt;
  forStageMatching: true,&lt;br /&gt;
  value: true&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
 forStageMatching: true&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
::set true for check match value,It is not necessary to set every value&lt;br /&gt;
:::use in test importent paramiter&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
testValueMatches:false&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
::setting paramiter require on create but can not test random value eg: identifier or timeStamp or uuid&lt;br /&gt;
&lt;br /&gt;
====Empty====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
 EmptyString:{&lt;br /&gt;
forStageMatching: true,&lt;br /&gt;
  value:&amp;quot;&amp;quot;&lt;br /&gt;
 },&lt;br /&gt;
 EmptyArray:{&lt;br /&gt;
   forStageMatching: true,&lt;br /&gt;
   useIsEqual: true,&lt;br /&gt;
   eventValue: []&lt;br /&gt;
 },&lt;br /&gt;
 EmptyObject:{&lt;br /&gt;
  forStageMatching: true,&lt;br /&gt;
  value:{}&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Error====&lt;br /&gt;
can test noRetryError&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;quot;errorMessage&amp;quot;: {&lt;br /&gt;
    forStageMatching: true,&lt;br /&gt;
    &amp;quot;value&amp;quot;: &amp;quot;Not found schema of {serviceTag:TestGraphHandler, objectType:notFoundObjType}&amp;quot;&lt;br /&gt;
   }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Paramiter random====&lt;br /&gt;
Can not test case random numbber or uuid.&lt;br /&gt;
But requriOnCreate mush be set &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
testValueMatches:false&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
or set&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
forStageMatching:false&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=tests=&lt;br /&gt;
Syntax is array of object&lt;br /&gt;
==Syntax name== &lt;br /&gt;
===Testtag name ===&lt;br /&gt;
*{integrationTestTag}&lt;br /&gt;
#Test Own servcie or not a lot stage&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
Test_{inputEventTag}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
#Mix multiple servcie and multiple stage&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt; &lt;br /&gt;
IntegrationTest_{inputEventTag}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===File name ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt; &lt;br /&gt;
{integrationTestTag}.json&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Setting of test==&lt;br /&gt;
[[Service - Integration Test Config#tests.js Syntax|syntax test]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
            integrationTestTag: {integrationTestTag},&lt;br /&gt;
            productionSafe: true|false, //default false&lt;br /&gt;
            noInitialStage: true, // default false, if set to true, no error when no foundInitialStages found&lt;br /&gt;
            errorIfStageUndefined: true|false, //default false&lt;br /&gt;
            errorIfInvokeUndefined: true|false, //default false,&lt;br /&gt;
            dynamoDBSeedDataTags:[&amp;quot;seedDataDB_test_case_xx&amp;quot;], //[seedDataTag] optional if have seed data for test&lt;br /&gt;
            graphSeedDataTags:[&amp;quot;seedDataGraph_test_case_xx&amp;quot;], //[seedDataTag] optional if have seed data for test&lt;br /&gt;
            cleaningeDynamoOneRecordsTags: [&amp;quot;cleaningSeed_partitionKey_sortKey_normol&amp;quot;], //optional&lt;br /&gt;
            cleaningeDynamoManyRecordsTags: [], // optional&lt;br /&gt;
            stages:[&lt;br /&gt;
               ...&lt;br /&gt;
            ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
*[[2025-11-20 IntegrationTest#dynamoDBSeedDataTags|dynamoDBSeedDataTags]]&lt;br /&gt;
*[[2025-11-20 IntegrationTest#graphSeedDataTags|graphSeedDataTags]]&lt;br /&gt;
*[[2025-11-20 IntegrationTest#cleaningeDynamoOneRecordsTags|cleaningeDynamoOneRecordsTags]]&lt;br /&gt;
*[[2025-11-20 IntegrationTest#cleaningeDynamoManyRecordsTags|cleaningeDynamoManyRecordsTags]]&lt;br /&gt;
&lt;br /&gt;
==Stages==&lt;br /&gt;
====Initiate stage====&lt;br /&gt;
:&#039;&#039;&#039;&amp;quot;initialStage&amp;quot;:true&#039;&#039;&#039;&lt;br /&gt;
[[Service_-_Integration_Test_Config#tests.js Syntax|detail property of test]]&lt;br /&gt;
=====HandlerService=====&lt;br /&gt;
======Sqs======&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;quot;stages&amp;quot;:[&lt;br /&gt;
         {&lt;br /&gt;
            &amp;quot;initialStage&amp;quot;:true,&lt;br /&gt;
            &amp;quot;inputEventTag&amp;quot;:&amp;quot;Locations_ProcessLocationNodeSomting_casenotHaveData&amp;quot;,&lt;br /&gt;
            &amp;quot;serviceName&amp;quot;:&amp;quot;Locations&amp;quot;,&lt;br /&gt;
            &amp;quot;resourceType&amp;quot;:&amp;quot;Lambda&amp;quot;,&lt;br /&gt;
            &amp;quot;resourceName&amp;quot;:&amp;quot;ProcessLocationNodeSomtingHdrDsq&amp;quot;,&lt;br /&gt;
            &amp;quot;outputEventTag&amp;quot;:&amp;quot;Output_Locations_ProcessLocationNodeSomting_casenotHaveData&amp;quot;&lt;br /&gt;
         }&lt;br /&gt;
      ]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
======Dsq======&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
stages: [&lt;br /&gt;
        {&lt;br /&gt;
          initialStage: true,&lt;br /&gt;
          inputEventTag: &#039;LambdaFunctionHdrDsq_input_singleStage_directSqs__pass&#039;,&lt;br /&gt;
          serviceName: &#039;ServiceTemplate&#039;,&lt;br /&gt;
          resourceType: &#039;Lambda&#039;,&lt;br /&gt;
          resourceName: &#039;LambdaFunctionHdrDsq&#039;,&lt;br /&gt;
          outputEventTag: &#039;LambdaFunctionHdrDsq_output__returnvalue_pass&#039;,&lt;br /&gt;
          // **** not set snsServiceName and snsTopic&lt;br /&gt;
          // can be test dynamodbOutput&lt;br /&gt;
        }&lt;br /&gt;
      ]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
======Api======&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;quot;stages&amp;quot;:[&lt;br /&gt;
    {&lt;br /&gt;
       &amp;quot;initialStage&amp;quot;:true,&lt;br /&gt;
       &amp;quot;inputEventTag&amp;quot;:&amp;quot;LambdaFunctionHdrApi_input__pass&amp;quot;,&lt;br /&gt;
       &amp;quot;serviceName&amp;quot;:&amp;quot;ServiceTemplate&amp;quot;,&lt;br /&gt;
       &amp;quot;resourceType&amp;quot;:&amp;quot;Lambda&amp;quot;,&lt;br /&gt;
       &amp;quot;resourceName&amp;quot;:&amp;quot;LambdaFunctionHdrApi&amp;quot;,&lt;br /&gt;
       &amp;quot;outputEventTag&amp;quot;:&amp;quot;LambdaFunctionHdrApi_output__pass&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
======Inv======&lt;br /&gt;
*&#039;&#039;&#039;single stage&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
[{&lt;br /&gt;
   &amp;quot;integrationTestTag&amp;quot;:&amp;quot;LambdaFunctionHdrInv__pass&amp;quot;,&lt;br /&gt;
   &amp;quot;productionSafe&amp;quot;:false,&lt;br /&gt;
   &amp;quot;errorIfStageUndefined&amp;quot;:false,&lt;br /&gt;
   &amp;quot;errorIfInvokeUndefined&amp;quot;:false,&lt;br /&gt;
   &amp;quot;dynamoDBSeedDataTags&amp;quot;:[&amp;quot;seedDataDB_test_case_xx&amp;quot;], //[seedDataTag] optional if have seed data for test&lt;br /&gt;
   &amp;quot;graphSeedDataTags&amp;quot;:[&amp;quot;seedDataGraph_test_case_xx&amp;quot;], //[seedDataTag] optional if have seed data for test&lt;br /&gt;
   &amp;quot;cleaningeDynamoOneRecordsTags&amp;quot;: [&amp;quot;cleaningSeed_partitionKey_sortKey_normol&amp;quot;], //optional&lt;br /&gt;
   &amp;quot;cleaningeDynamoManyRecordsTags&amp;quot;: []&lt;br /&gt;
   &amp;quot;stages&amp;quot;:[&lt;br /&gt;
      {&lt;br /&gt;
         &amp;quot;initialStage&amp;quot;:true,&lt;br /&gt;
         &amp;quot;inputEventTag&amp;quot;:&amp;quot;LambdaFunctionHdrInv_input__pass&amp;quot;,&lt;br /&gt;
         &amp;quot;serviceName&amp;quot;:&amp;quot;ServiceTemplate&amp;quot;,&lt;br /&gt;
         &amp;quot;resourceType&amp;quot;:&amp;quot;Lambda&amp;quot;,&lt;br /&gt;
         &amp;quot;resourceName&amp;quot;:&amp;quot;LambdaFunctionHdrInv&amp;quot;,&lt;br /&gt;
         &amp;quot;outputEventTag&amp;quot;:&amp;quot;LambdaFunctionHdrInv_output__pass&amp;quot;&lt;br /&gt;
      }&lt;br /&gt;
   ]&lt;br /&gt;
}]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;invoke multiple stage&#039;&#039;&#039; &lt;br /&gt;
:*Each stage test can invoke multiple lambda by use &amp;quot;eventStage Tag&amp;quot; point to stage for test integration test.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
[{&lt;br /&gt;
   &amp;quot;integrationTestTag&amp;quot;:&amp;quot;LambdaFunctionHdrInv_invokes__pass&amp;quot;,&lt;br /&gt;
   &amp;quot;productionSafe&amp;quot;:false,&lt;br /&gt;
   &amp;quot;errorIfStageUndefined&amp;quot;:false,&lt;br /&gt;
   &amp;quot;errorIfInvokeUndefined&amp;quot;:false,&lt;br /&gt;
   &amp;quot;dynamoDBSeedDataTags&amp;quot;:[], //[seedDataTag] optional if have seed data for test&lt;br /&gt;
   &amp;quot;graphSeedDataTags&amp;quot;:[], //[seedDataTag] optional if have seed data for test&lt;br /&gt;
   &amp;quot;cleaningeDynamoOneRecordsTags&amp;quot;: [], //optional&lt;br /&gt;
   &amp;quot;cleaningeDynamoManyRecordsTags&amp;quot;: [], // optional&lt;br /&gt;
   &amp;quot;stages&amp;quot;:[&lt;br /&gt;
      {&lt;br /&gt;
         &amp;quot;initialStage&amp;quot;:true,&lt;br /&gt;
         &amp;quot;inputEventTag&amp;quot;:&amp;quot;LambdaFunctionHdrInv_input__pass&amp;quot;,&lt;br /&gt;
         &amp;quot;serviceName&amp;quot;:&amp;quot;ServiceTemplate&amp;quot;,&lt;br /&gt;
         &amp;quot;resourceType&amp;quot;:&amp;quot;Lambda&amp;quot;,&lt;br /&gt;
         &amp;quot;resourceName&amp;quot;:&amp;quot;LambdaFunctionHdrInv&amp;quot;,&lt;br /&gt;
         &amp;quot;outputEventTag&amp;quot;:&amp;quot;LambdaFunctionHdrInv_output__pass&amp;quot;,&lt;br /&gt;
         &amp;quot;invokes&amp;quot;:[&lt;br /&gt;
            {&lt;br /&gt;
               &amp;quot;eventStageTag&amp;quot;:&amp;quot;service_invokesB__pass&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            {&lt;br /&gt;
               &amp;quot;eventStageTag&amp;quot;:&amp;quot;service_invokesD__pass&amp;quot;&lt;br /&gt;
            }&lt;br /&gt;
         ]&lt;br /&gt;
      },&lt;br /&gt;
      {&lt;br /&gt;
         &amp;quot;eventStageTag&amp;quot;:&amp;quot;service_invokesB__pass&amp;quot;,&lt;br /&gt;
         &amp;quot;inputEventTag&amp;quot;:&amp;quot;input_service_invokes__pass&amp;quot;,&lt;br /&gt;
         &amp;quot;serviceName&amp;quot;:&amp;quot;ServiceTemplate_B&amp;quot;,&lt;br /&gt;
         &amp;quot;resourceType&amp;quot;:&amp;quot;Lambda&amp;quot;,&lt;br /&gt;
         &amp;quot;resourceName&amp;quot;:&amp;quot;LambdaFunction_B_HdrInv&amp;quot;,&lt;br /&gt;
         &amp;quot;outputEventTag&amp;quot;:&amp;quot;output_service_invokes__pass&amp;quot;&lt;br /&gt;
      },&lt;br /&gt;
      {&lt;br /&gt;
         &amp;quot;eventStageTag&amp;quot;:&amp;quot;service_invokesD__pass&amp;quot;,&lt;br /&gt;
         &amp;quot;inputEventTag&amp;quot;:&amp;quot;input_service_invokesD__pass&amp;quot;,&lt;br /&gt;
         &amp;quot;serviceName&amp;quot;:&amp;quot;ServiceTemplate_D&amp;quot;,&lt;br /&gt;
         &amp;quot;resourceType&amp;quot;:&amp;quot;Lambda&amp;quot;,&lt;br /&gt;
         &amp;quot;resourceName&amp;quot;:&amp;quot;LambdaFunction_D_HdrInv&amp;quot;,&lt;br /&gt;
         &amp;quot;outputEventTag&amp;quot;:&amp;quot;output_service_invokesD__pass&amp;quot;&lt;br /&gt;
      }&lt;br /&gt;
   ]&lt;br /&gt;
}]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
======S3======&lt;br /&gt;
======Batch======&lt;br /&gt;
&lt;br /&gt;
====GeneratedSeedData====&lt;br /&gt;
*Integrationtest must be delete identifier every time before test.&lt;br /&gt;
*Set &#039;generatedSeedData&#039; in file tests.json case by case of stage eg: stages[0] create identifier is randomOnCreate will set &#039;generatedSeedData&#039; and stages[1] create relationship is randomOnCreate(It is usually random, except in the case of relationship version) set generatedSeedData this stages[1].&lt;br /&gt;
*How to delete case identifier rendomOnCreate?: set in stage use setting generateSeedData &amp;quot;randomOnCreateIdentifier&amp;quot;&lt;br /&gt;
#randomOnCreateIdentifier&lt;br /&gt;
#notRandomOnIdentifier&lt;br /&gt;
#relationships&lt;br /&gt;
=====randomOnCreateIdentifier=====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;quot;stages&amp;quot;: [&lt;br /&gt;
      {&lt;br /&gt;
        &amp;quot;initialStage&amp;quot;: true,&lt;br /&gt;
        &amp;quot;inputEventTag&amp;quot;: &amp;quot;MLocation_CreateHdrSqs__case_NodeVersionData_Jaya&amp;quot;,&lt;br /&gt;
        &amp;quot;serviceTag&amp;quot;: &amp;quot;MLocations&amp;quot;,&lt;br /&gt;
        &amp;quot;resourceType&amp;quot;: &amp;quot;Lambda&amp;quot;,&lt;br /&gt;
        &amp;quot;resourceName&amp;quot;: &amp;quot;CreateHdrSqs&amp;quot;,&lt;br /&gt;
        &amp;quot;snsServiceName&amp;quot;: &amp;quot;MLocations&amp;quot;,&lt;br /&gt;
        &amp;quot;snsTopic&amp;quot;: &amp;quot;Create_In&amp;quot;,&lt;br /&gt;
        &amp;quot;generatedSeedData&amp;quot;: {&lt;br /&gt;
          &amp;quot;randomOnCreateIdentifier&amp;quot;: [&lt;br /&gt;
            {&lt;br /&gt;
              &amp;quot;objType&amp;quot;: {&lt;br /&gt;
                &amp;quot;serviceTag&amp;quot;: &amp;quot;MLocations&amp;quot;,&lt;br /&gt;
                &amp;quot;objectType&amp;quot;: &amp;quot;Member&amp;quot;&lt;br /&gt;
              },&lt;br /&gt;
              &amp;quot;identifierValue&amp;quot;: &amp;quot;Jaya-member-001&amp;quot;&lt;br /&gt;
            }&lt;br /&gt;
          ]&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
=====notRandomOnIdentifier=====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;quot;stages&amp;quot;: [&lt;br /&gt;
      {&lt;br /&gt;
        &amp;quot;initialStage&amp;quot;: true,&lt;br /&gt;
        &amp;quot;inputEventTag&amp;quot;: &amp;quot;MLocation_CreateHdrSqs__case_NodeVersionData_Jaya&amp;quot;,&lt;br /&gt;
        &amp;quot;serviceTag&amp;quot;: &amp;quot;MLocations&amp;quot;,&lt;br /&gt;
        &amp;quot;resourceType&amp;quot;: &amp;quot;Lambda&amp;quot;,&lt;br /&gt;
        &amp;quot;resourceName&amp;quot;: &amp;quot;CreateHdrSqs&amp;quot;,&lt;br /&gt;
        &amp;quot;snsServiceName&amp;quot;: &amp;quot;MLocations&amp;quot;,&lt;br /&gt;
        &amp;quot;snsTopic&amp;quot;: &amp;quot;Create_In&amp;quot;,&lt;br /&gt;
        &amp;quot;generatedSeedData&amp;quot;: {&lt;br /&gt;
          &amp;quot;notRandomOnIdentifier&amp;quot;: [&lt;br /&gt;
            {&lt;br /&gt;
              &amp;quot;objType&amp;quot;: {&lt;br /&gt;
                &amp;quot;serviceTag&amp;quot;: &amp;quot;gggg&amp;quot;,&lt;br /&gt;
                &amp;quot;objectType&amp;quot;: &amp;quot;ssssss&amp;quot;&lt;br /&gt;
              },&lt;br /&gt;
              &amp;quot;identifiers&amp;quot;: {&lt;br /&gt;
                &amp;quot;topId&amp;quot;: &amp;quot;123456&amp;quot;&lt;br /&gt;
              }&lt;br /&gt;
            }&lt;br /&gt;
          ]&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    ]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
=====relationships=====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;quot;stages&amp;quot;: [&lt;br /&gt;
      {&lt;br /&gt;
        &amp;quot;initialStage&amp;quot;: true,&lt;br /&gt;
        &amp;quot;inputEventTag&amp;quot;: &amp;quot;MLocation_CreateHdrSqs__case_NodeVersionData_Jaya&amp;quot;,&lt;br /&gt;
        &amp;quot;serviceTag&amp;quot;: &amp;quot;MLocations&amp;quot;,&lt;br /&gt;
        &amp;quot;resourceType&amp;quot;: &amp;quot;Lambda&amp;quot;,&lt;br /&gt;
        &amp;quot;resourceName&amp;quot;: &amp;quot;CreateHdrSqs&amp;quot;,&lt;br /&gt;
        &amp;quot;snsServiceName&amp;quot;: &amp;quot;MLocations&amp;quot;,&lt;br /&gt;
        &amp;quot;snsTopic&amp;quot;: &amp;quot;Create_In&amp;quot;,&lt;br /&gt;
        &amp;quot;generatedSeedData&amp;quot;: {&lt;br /&gt;
         &amp;quot;relationships&amp;quot;: [&lt;br /&gt;
            {&lt;br /&gt;
              &amp;quot;relType&amp;quot;: {&lt;br /&gt;
                &amp;quot;serviceTag&amp;quot;: &amp;quot;PaymentMethodGeneric&amp;quot;,&lt;br /&gt;
                &amp;quot;relationshipTag&amp;quot;: &amp;quot;disabledPaymentMethodGenericPropertyValue&amp;quot;&lt;br /&gt;
              },&lt;br /&gt;
              &amp;quot;relId&amp;quot;: &amp;quot;f4f73de7-647c-4b3b-8043-87cc002f361a&amp;quot;&lt;br /&gt;
            }&lt;br /&gt;
          ]&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    ]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Dynamodb==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
stages: [&lt;br /&gt;
        {&lt;br /&gt;
          initialStage: true,&lt;br /&gt;
          inputEventTag: &#039;Locations_LambdaFunctionHdrDsq_singleStage_directSqs__pass&#039;,&lt;br /&gt;
          serviceName: &#039;ServiceTemplate&#039;,&lt;br /&gt;
          resourceType: &#039;Lambda&#039;,&lt;br /&gt;
          resourceName: &#039;LambdaFunctionHdrDsq&#039;,&lt;br /&gt;
          outputEventTag: &#039;output_Locations_LambdaFunctionHdrDsq_singleStage_directSqs__pass&#039;,&lt;br /&gt;
          dynamodbOutputEventIdentifiers: [&lt;br /&gt;
			{&lt;br /&gt;
              serviceName: {tableName}, //service that deployed the DynamoDB table, so can build table&#039;s full resource name&lt;br /&gt;
              resourceName: {resourceName}, //DynamoDB resourceName&lt;br /&gt;
              eventTag: {eventTagDynamoDB}&lt;br /&gt;
		    }&lt;br /&gt;
          ],&lt;br /&gt;
        }&lt;br /&gt;
      ]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Result of integrationtest =&lt;br /&gt;
Data have 2 table &amp;quot;TestRecord&amp;quot; and &amp;quot;TestUnit&amp;quot;.&lt;br /&gt;
:- TestRecord is table all unti of stage inside eg input output invokes and dynamodb&lt;br /&gt;
:- TestUnit is store status each unit &lt;br /&gt;
each unit save in table TestUnit&lt;br /&gt;
testRecordId is  name of test concat with testTime.&lt;br /&gt;
testUnitId is point to position of unti instage.&lt;br /&gt;
resultStatus is status of unit.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
eg:&lt;br /&gt;
input_0 = stages index 0 result &#039;&#039;&#039;input&#039;&#039;&#039;&lt;br /&gt;
output_1 = stages index 1 result &#039;&#039;&#039;output&#039;&#039;&#039;&lt;br /&gt;
invokeInput_0_1 = stages index 0 result &#039;&#039;&#039;invokes&#039;&#039;&#039; index 1 position input &lt;br /&gt;
invokeOutput_0_1 = stages index 0 result &#039;&#039;&#039;invokes&#039;&#039;&#039; index 1 position output&lt;br /&gt;
dynamodb_0_1 =  stages index 0 result &#039;&#039;&#039;dynamodb&#039;&#039;&#039; index 1.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
after all TestUnit finish (check  by awaitingMultiplestep penditnStep is integrationtestTag awaitingStepId is each TestUnit )&lt;br /&gt;
check all awaitingStep finish send message to ultimateIntegrationtest for sumla all test is status&lt;br /&gt;
&lt;br /&gt;
== Summary of test status == &lt;br /&gt;
:1.testStatus is &amp;quot;passed&amp;quot; all unit passed.&lt;br /&gt;
:2.testStatus is &amp;quot;failed&amp;quot;  have some is failed.&lt;br /&gt;
:3.testStatus is &amp;quot;processing&amp;quot; have some is have status processing after check all awaiting step is finish.&lt;br /&gt;
:4.testStatus is &amp;quot;failed&amp;quot; have record &amp;quot;errorsTest&amp;quot; in case &amp;quot;not match stage invoke&amp;quot;, &#039;found multiple matchingInvokes&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*[[2025-02-20 - Integration Test examples#tests.js Syntax|Syntax Dynamodb]]&lt;br /&gt;
&lt;br /&gt;
=How to test integrationtest s3=&lt;br /&gt;
[[Developer guide for making Integration Tests]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Working documents| 2025-11-20]]&lt;br /&gt;
[[Category:Working documents - Integration Testing| 2025-11-20]]&lt;/div&gt;</summary>
		<author><name>Mint</name></author>
	</entry>
	<entry>
		<id>https://izara.io/wiki/index.php?title=2025-11-20_IntegrationTest&amp;diff=4579</id>
		<title>2025-11-20 IntegrationTest</title>
		<link rel="alternate" type="text/html" href="https://izara.io/wiki/index.php?title=2025-11-20_IntegrationTest&amp;diff=4579"/>
		<updated>2026-08-14T05:11:18Z</updated>

		<summary type="html">&lt;p&gt;Mint: /* dynamoDBSeedDataTags */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Reference:&lt;br /&gt;
&lt;br /&gt;
*[[2020-10-01 - Integration Test Config - Functions|IntegrationtestConfig]]&lt;br /&gt;
*[[2020-10-01 - Integration Testing - Lambda Functions|Integrationtesting]]&lt;br /&gt;
*[[2025-02-20 - Integration Test examples|Example]]&lt;br /&gt;
&lt;br /&gt;
= File extension =&lt;br /&gt;
&lt;br /&gt;
uploadS3: &amp;quot;.json&amp;quot;&lt;br /&gt;
integrationtestConfig: &amp;quot;.js&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=TestRecord=&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JSON&amp;quot;&amp;gt;&lt;br /&gt;
[&lt;br /&gt;
  {&lt;br /&gt;
    integrationTestTag: &amp;quot;Integrationtest_xx&amp;quot;,&lt;br /&gt;
    testStartedTimestamp: 111111111, // start time&lt;br /&gt;
    bucketName: &amp;quot;integrationtest-config-us-east-2&amp;quot;,&lt;br /&gt;
    lastUpdateUniqueRequestId: &amp;quot;sssss&amp;quot;, //_izContext.uniqueRequestId protacts race coditionn dynamodb&lt;br /&gt;
    testStatus: &amp;quot;passed&amp;quot;,//failed,processing,passed&lt;br /&gt;
    testCompleteTimestamp: 1111113, // all test finish&lt;br /&gt;
    stages: [&lt;br /&gt;
      {&lt;br /&gt;
        stageConfig: {&lt;br /&gt;
          //straight copy of this stage from integration test config&lt;br /&gt;
          inputEventTag: &amp;quot;xx&amp;quot;,&lt;br /&gt;
          inputEventConfig: {//event input&lt;br /&gt;
          },&lt;br /&gt;
          outputEventTag: &amp;quot;output_xx&amp;quot;,&lt;br /&gt;
          outputEventConfig: {//event out put&lt;br /&gt;
          },&lt;br /&gt;
          resourceName: &amp;quot;ComplexfilterTestProcessComplexfilter&amp;quot;,// function name&lt;br /&gt;
          resourceType: &amp;quot;Lambda&amp;quot;, // function name&lt;br /&gt;
          serviceTag: &amp;quot;Complexfilter&amp;quot;,// (initeate sqs)&lt;br /&gt;
          snsServiceName: &amp;quot;Complexfilter&amp;quot;,// (initeate sqs)&lt;br /&gt;
          snsTopic: &amp;quot;PorcessComplexfilter_In&amp;quot;// (initeate sqs)&lt;br /&gt;
&lt;br /&gt;
        },&lt;br /&gt;
        stageStatus: &amp;quot;waiting&amp;quot;, //waiting|passed|failed,&lt;br /&gt;
        stageFinishedTimestamp: 111111111,// time that all tests finished and testRecord.stages.{stageKey}.stageStatus updated&lt;br /&gt;
        stageResults: {&lt;br /&gt;
          //results at the point of entering the resource (eg a Lambda function is invoked)&lt;br /&gt;
          inputResult: {&lt;br /&gt;
            resultTimestamp: 111111111,//{time result saved},&lt;br /&gt;
            resultStatus: &amp;quot;passed&amp;quot;,//passed|failed,&lt;br /&gt;
            requestParams: {//event input&lt;br /&gt;
            }&lt;br /&gt;
          },&lt;br /&gt;
          //results at the point of returning from the resource (eg a Lambda function returns)&lt;br /&gt;
          outputResult: {&lt;br /&gt;
            resultTimestamp: 111111111,//{time result saved},&lt;br /&gt;
            resultStatus: &amp;quot;passed&amp;quot;,//passed|failed,&lt;br /&gt;
            requestParams: {//event input&lt;br /&gt;
            }&lt;br /&gt;
          },&lt;br /&gt;
          //results at the point of invoking an external resource (eg the tested Lambda function is invoking another Lambda function)&lt;br /&gt;
          invokes: {&lt;br /&gt;
            &amp;quot;serviceName_resourceType_resourceName_inputEventTag &amp;quot;: {&lt;br /&gt;
              invokeTimestamp: 111111111,//{ time result saved },&lt;br /&gt;
              resultTimestamp: 111111112,//{ time result saved },&lt;br /&gt;
              resultStatus: &amp;quot;passed&amp;quot;,//passed | failed,&lt;br /&gt;
              invokeParams: {},//{event invoke input config }&lt;br /&gt;
              requestParams: {}// event invoke input request&lt;br /&gt;
            },&lt;br /&gt;
          },&lt;br /&gt;
          dynamodbResults: [&lt;br /&gt;
            {&lt;br /&gt;
              indexOfDynamodbOutput: 0,&lt;br /&gt;
              requestParams,&lt;br /&gt;
              resultStatus: &amp;quot;passed&amp;quot;,//&lt;br /&gt;
              resultTimestamp: 22222&lt;br /&gt;
            }]&lt;br /&gt;
&lt;br /&gt;
        },&lt;br /&gt;
        stageErrors: [&lt;br /&gt;
          //misc errors encountered&lt;br /&gt;
        ]&lt;br /&gt;
      }]&lt;br /&gt;
&lt;br /&gt;
  }&lt;br /&gt;
]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Seed Data=&lt;br /&gt;
integrationtest manager seed date 2 process&lt;br /&gt;
&lt;br /&gt;
=== Main Seed Data===&lt;br /&gt;
:Save file in s3 (in &#039;&#039;&#039;buckname&#039;&#039;&#039; :integrationtest-config-us-east-2, &#039;&#039;&#039;folder&#039;&#039;&#039;:seedData_integrationTest).For other dev use service,If a developer wants to add more for other important testing purposes.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;How to use:&#039;&#039;&#039;&lt;br /&gt;
#Add it from the s3 bucket at this point&lt;br /&gt;
#Run batch refreshSeedData [[Developer guide for making Integration Tests#Bash script|batch RefreshSeedData]]&lt;br /&gt;
&#039;&#039;&#039;Logic&#039;&#039;&#039;:Process by storage resouse (graph or dynamodb)&lt;br /&gt;
:To clean up the seed data in the table after it creates seed data form service deploy and pulls seed data from s3.&lt;br /&gt;
&lt;br /&gt;
=== Refresh Seed Data ===&lt;br /&gt;
:ProcessRefreshSeedData use seedDataTag for create data environment of &#039;&#039;&#039;test&#039;&#039;&#039; and can be refresh seeddata re-test agian.&lt;br /&gt;
:&#039;&#039;&#039;canbe share&#039;&#039;&#039; seed data for other test by seed data tag.&lt;br /&gt;
&#039;&#039;&#039;How to use:&#039;&#039;&#039;&lt;br /&gt;
:Save file in s3 (for other dav keep in floder dev name) or testConfig/seedData_config(for admin)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Folder&#039;&#039;&#039;&lt;br /&gt;
*dynamoDBSeedDataTags.json&lt;br /&gt;
*graphSeedDataTags.json&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Example&#039;&#039;&#039;&lt;br /&gt;
==== dynamoDBSeedDataTags ====&lt;br /&gt;
:If set tag in this setting integrationtest is generate seed data. in storage resource dynammodb.&lt;br /&gt;
Example&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;seedDynamodb_abc_ver2&amp;quot;: [ // seedDataTag&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;tableName&amp;quot;: &amp;quot;DelivMethodSTDTestLogicalResultsData&amp;quot;,  // servcieTag+stage+tablename&lt;br /&gt;
      &amp;quot;partitionKey&amp;quot;: &amp;quot;logicalResultId&amp;quot;,&lt;br /&gt;
      &amp;quot;sortKey&amp;quot;: &amp;quot;identifiersId&amp;quot;,&lt;br /&gt;
      &amp;quot;datas&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
          logicalResultId: {&lt;br /&gt;
            value: &amp;quot;eeeeeeeeee4&amp;quot;&lt;br /&gt;
          },&lt;br /&gt;
          identifiersId: {&lt;br /&gt;
            value: &amp;quot;lllll123456&amp;quot;&lt;br /&gt;
          },&lt;br /&gt;
          processLogicalResultExpiryTimestamp: {&lt;br /&gt;
            calcType: &amp;quot;currentTimestampAdjustment&amp;quot;, // can add other types of calculated data in future&lt;br /&gt;
            action: &amp;quot;subtract&amp;quot;, // add|subtract&lt;br /&gt;
            adjustment: &amp;quot;2 days&amp;quot;, // Human-Readable Relative Format , //Month,Months|Week,Weeks|day,days|Hour,Hours|Minute,Minutes|Second,Seconds|&lt;br /&gt;
          }&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
          logicalResultId: {&lt;br /&gt;
            value: &amp;quot;eeeeeeeeee4&amp;quot;&lt;br /&gt;
          },&lt;br /&gt;
          &amp;quot;identifiersId&amp;quot;: {&lt;br /&gt;
            value: &amp;quot;lllll777777&amp;quot;&lt;br /&gt;
          },&lt;br /&gt;
          processLogicalResultExpiryTimestamp: {&lt;br /&gt;
            calcType: &amp;quot;currentTimestampAdjustment&amp;quot;, // can add other types of calculated data in future&lt;br /&gt;
            action: &amp;quot;add&amp;quot;, // add|subtract&lt;br /&gt;
            adjustment: &amp;quot;2 days&amp;quot;, // Human-Readable Relative Format , //Month,Months|Week,Weeks|day,days|Hour,Hours|Minute,Minutes|Second,Seconds|&lt;br /&gt;
          } &lt;br /&gt;
        }&lt;br /&gt;
      ],&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;tableName&amp;quot;: &amp;quot;MLocationsTestFloatingRelationships&amp;quot;,// servcieTag+stage+tablename&lt;br /&gt;
      &amp;quot;partitionKey&amp;quot;: &amp;quot;importBatchId&amp;quot;,&lt;br /&gt;
      &amp;quot;sortKey&amp;quot;: &amp;quot;identifierRelationshipsId&amp;quot;,&lt;br /&gt;
      &amp;quot;datas&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;importBatchId&amp;quot;: &amp;quot;2-uuuuuuuuuuuuuu&amp;quot;,&lt;br /&gt;
          &amp;quot;identifierRelationshipsId&amp;quot;: &amp;quot;lllll123456&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;importBatchId&amp;quot;: &amp;quot;2-uuuuuuuuuuuuuu&amp;quot;,&lt;br /&gt;
          &amp;quot;identifierRelationshipsId&amp;quot;: &amp;quot;lllll777777&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;importBatchId&amp;quot;: &amp;quot;2-uuuuuuuuuuuuuu&amp;quot;,&lt;br /&gt;
          &amp;quot;identifierRelationshipsId&amp;quot;: &amp;quot;lllll99999999&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
      ]&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;tableName&amp;quot;: &amp;quot;MLocationsTestFindDataMain&amp;quot;,&lt;br /&gt;
      &amp;quot;partitionKey&amp;quot;: &amp;quot;findDataId&amp;quot;,&lt;br /&gt;
      &amp;quot;datas&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;findDataId&amp;quot;: &amp;quot;111111&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;findDataId&amp;quot;: &amp;quot;22222&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;findDataId&amp;quot;: &amp;quot;333333&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
      ]&lt;br /&gt;
    }&lt;br /&gt;
  ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== graphSeedDataTags ====&lt;br /&gt;
:If set tag in this setting integrationtest is generate seed data. in storage resource graphHanler.&lt;br /&gt;
Example&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;seedData_testTag_GG&amp;quot;: [ // seedDataTag&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;nodes&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;nodeLabels&amp;quot;: [&lt;br /&gt;
            &amp;quot;SellOfferPlan_sellOfferPlanDeliveryMethodLink&amp;quot;&lt;br /&gt;
          ],&lt;br /&gt;
          &amp;quot;objectDetail&amp;quot;: {&lt;br /&gt;
            &amp;quot;identifiers&amp;quot;: {&lt;br /&gt;
              &amp;quot;sellOfferPlanDeliveryMethodLinkId&amp;quot;: {&lt;br /&gt;
                &amp;quot;value&amp;quot;: &amp;quot;minttestrefreshSeedData_01&amp;quot;,&lt;br /&gt;
              },&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;fields&amp;quot;: {&lt;br /&gt;
              &amp;quot;productId&amp;quot;: {&lt;br /&gt;
                &amp;quot;value&amp;quot;: &amp;quot;ddddd&amp;quot;,&lt;br /&gt;
              },&lt;br /&gt;
              &amp;quot;price&amp;quot;: {&lt;br /&gt;
                &amp;quot;value&amp;quot;: 9999&lt;br /&gt;
              },&lt;br /&gt;
              exampleTimestamp: {&lt;br /&gt;
                calcType: &amp;quot;currentTimestampAdjustment&amp;quot;, // can add other types of calculated data in future&lt;br /&gt;
                action: &amp;quot;subtract&amp;quot;, // add|subtract&lt;br /&gt;
                adjustment: &amp;quot;2 days&amp;quot;, // Human-Readable Relative Format&lt;br /&gt;
              }&lt;br /&gt;
            }&lt;br /&gt;
          }&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;nodeLabels&amp;quot;: [&lt;br /&gt;
            &amp;quot;servcieMintTest_shoppingMall&amp;quot;&lt;br /&gt;
          ],&lt;br /&gt;
          &amp;quot;objectDetail&amp;quot;: {&lt;br /&gt;
            &amp;quot;identifiers&amp;quot;: {&lt;br /&gt;
              &amp;quot;shoppingMallId&amp;quot;: &amp;quot;minttestrefreshSeedData_shoppingMallId&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;fields&amp;quot;: {&lt;br /&gt;
              &amp;quot;name&amp;quot;: &amp;quot;hotpot-man&amp;quot;,&lt;br /&gt;
              &amp;quot;totalPrice&amp;quot;: 500&lt;br /&gt;
            }&lt;br /&gt;
          }&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;nodeLabels&amp;quot;: [&lt;br /&gt;
            &amp;quot;servcieMintTest_shoppingMallCalculateSetting&amp;quot;&lt;br /&gt;
          ],&lt;br /&gt;
          &amp;quot;objectDetail&amp;quot;: {&lt;br /&gt;
            &amp;quot;identifiers&amp;quot;: {&lt;br /&gt;
              &amp;quot;versionedDataId&amp;quot;: &amp;quot;minttestrefreshSeedData_versionedDataId&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;fields&amp;quot;: {&lt;br /&gt;
              &amp;quot;addToCalculatedValuePerOrder&amp;quot;: 10,&lt;br /&gt;
              &amp;quot;addToRateTableValuePerOrder&amp;quot;: 77&lt;br /&gt;
            }&lt;br /&gt;
          }&lt;br /&gt;
        }&lt;br /&gt;
      ],&lt;br /&gt;
      &amp;quot;relationships&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;fromObject&amp;quot;: {&lt;br /&gt;
            &amp;quot;nodeLabel&amp;quot;: &amp;quot;SellOfferPlan_sellOfferPlanDeliveryMethodLink&amp;quot;,&lt;br /&gt;
            &amp;quot;identifiers&amp;quot;: {&lt;br /&gt;
              &amp;quot;sellOfferPlanDeliveryMethodLinkId&amp;quot;: &amp;quot;minttestrefreshSeedData_01&amp;quot;&lt;br /&gt;
            }&lt;br /&gt;
          },&lt;br /&gt;
          &amp;quot;toObject&amp;quot;: {&lt;br /&gt;
            &amp;quot;nodeLabel&amp;quot;: &amp;quot;servcieMintTest_shoppingMall&amp;quot;,&lt;br /&gt;
            &amp;quot;identifiers&amp;quot;: {&lt;br /&gt;
              &amp;quot;shoppingMallId&amp;quot;: &amp;quot;minttestrefreshSeedData_shoppingMallId&amp;quot;&lt;br /&gt;
            }&lt;br /&gt;
          },&lt;br /&gt;
          &amp;quot;relationships&amp;quot;: [&lt;br /&gt;
            {&lt;br /&gt;
              &amp;quot;relTypeConcat&amp;quot;: &amp;quot;SellOfferPlan_hasCCCCCCC&amp;quot;,&lt;br /&gt;
              &amp;quot;relId&amp;quot;: &amp;quot;uuid-4s56df74s9df79w-w6de4f5w689ef&amp;quot;&lt;br /&gt;
            }&lt;br /&gt;
          ]&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;fromObject&amp;quot;: {&lt;br /&gt;
            &amp;quot;nodeLabel&amp;quot;: &amp;quot;servcieMintTest_shoppingMall&amp;quot;,&lt;br /&gt;
            &amp;quot;identifiers&amp;quot;: {&lt;br /&gt;
              &amp;quot;shoppingMallId&amp;quot;: &amp;quot;minttestrefreshSeedData_shoppingMallId&amp;quot;&lt;br /&gt;
            }&lt;br /&gt;
          },&lt;br /&gt;
          &amp;quot;toObject&amp;quot;: {&lt;br /&gt;
            &amp;quot;nodeLabel&amp;quot;: &amp;quot;servcieMintTest_shoppingMallCalculateSetting&amp;quot;,&lt;br /&gt;
            &amp;quot;identifiers&amp;quot;: {&lt;br /&gt;
              &amp;quot;versionedDataId&amp;quot;: &amp;quot;minttestrefreshSeedData_versionedDataId&amp;quot;&lt;br /&gt;
            }&lt;br /&gt;
          },&lt;br /&gt;
          &amp;quot;relationships&amp;quot;: [&lt;br /&gt;
            {&lt;br /&gt;
              &amp;quot;relTypeConcat&amp;quot;: &amp;quot;servcieMintTest_shoppingMall_currentShoppingMallCalculateSetting&amp;quot;,&lt;br /&gt;
              &amp;quot;relId&amp;quot;: &amp;quot;uuid-s122df5-s21df&amp;quot;,&lt;br /&gt;
              &amp;quot;relationshipProperty&amp;quot;: {&lt;br /&gt;
                &amp;quot;timeStamp&amp;quot;: 1234567879,&lt;br /&gt;
                &amp;quot;statusName&amp;quot;: true&lt;br /&gt;
              }&lt;br /&gt;
            },&lt;br /&gt;
            {&lt;br /&gt;
              &amp;quot;relTypeConcat&amp;quot;: &amp;quot;servcieMintTest_shoppingMall_hasShoppingMallCalculateSetting&amp;quot;,&lt;br /&gt;
              &amp;quot;relId&amp;quot;: &amp;quot;uuid-77777-99999&amp;quot;,&lt;br /&gt;
              &amp;quot;relationshipProperties&amp;quot;: {&lt;br /&gt;
                &amp;quot;statusName&amp;quot;: {&lt;br /&gt;
                  &amp;quot;value&amp;quot;: true&lt;br /&gt;
                },&lt;br /&gt;
                exampleTimestamp: {&lt;br /&gt;
                  calcType: &amp;quot;currentTimestampAdjustment&amp;quot;, // can add other types of calculated data in future&lt;br /&gt;
                  action: &amp;quot;subtract&amp;quot;, // add|subtract&lt;br /&gt;
                  adjustment: &amp;quot;2 days&amp;quot;, // Human-Readable Relative Format&lt;br /&gt;
                }&lt;br /&gt;
              }&lt;br /&gt;
            }&lt;br /&gt;
          ]&lt;br /&gt;
        }&lt;br /&gt;
      ]&lt;br /&gt;
    }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;seedData_testTag_ABC&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;objType&amp;quot;: {&lt;br /&gt;
        &amp;quot;objectType&amp;quot;: &amp;quot;productAttributeLink&amp;quot;,&lt;br /&gt;
        &amp;quot;serviceTag&amp;quot;: &amp;quot;ProductAttribute&amp;quot;&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;objInstanceFull&amp;quot;: {&lt;br /&gt;
        &amp;quot;identifiers&amp;quot;: {&lt;br /&gt;
          &amp;quot;productAttributeLinkId&amp;quot;: &amp;quot;f90b57ca8b2fe1a83459d57da038cf50fb6d40e6&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;fields&amp;quot;: {}&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;relationships&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;relType&amp;quot;: {&lt;br /&gt;
            &amp;quot;serviceTag&amp;quot;: &amp;quot;ProductAttribute&amp;quot;,&lt;br /&gt;
            &amp;quot;relationshipTag&amp;quot;: &amp;quot;hasProductAttributeLink&amp;quot;&lt;br /&gt;
          },&lt;br /&gt;
          &amp;quot;relationshipDirection&amp;quot;: &amp;quot;to&amp;quot;,&lt;br /&gt;
          &amp;quot;targetObjType&amp;quot;: {&lt;br /&gt;
            &amp;quot;serviceTag&amp;quot;: &amp;quot;ProductStandard&amp;quot;,&lt;br /&gt;
            &amp;quot;objectType&amp;quot;: &amp;quot;productStandard&amp;quot;&lt;br /&gt;
          },&lt;br /&gt;
          &amp;quot;targetIdentifiers&amp;quot;: {&lt;br /&gt;
            &amp;quot;productId&amp;quot;: &amp;quot;f526a367a2b66cb0f37ca61b6c43f419929f521d&amp;quot;&lt;br /&gt;
          },&lt;br /&gt;
          &amp;quot;relationshipProperties&amp;quot;: {}&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;relType&amp;quot;: {&lt;br /&gt;
            &amp;quot;serviceTag&amp;quot;: &amp;quot;ProductAttribute&amp;quot;,&lt;br /&gt;
            &amp;quot;relationshipTag&amp;quot;: &amp;quot;isProductAttribute&amp;quot;&lt;br /&gt;
          },&lt;br /&gt;
          &amp;quot;relationshipDirection&amp;quot;: &amp;quot;from&amp;quot;,&lt;br /&gt;
          &amp;quot;targetObjType&amp;quot;: {&lt;br /&gt;
            &amp;quot;serviceTag&amp;quot;: &amp;quot;ProductAttribute&amp;quot;,&lt;br /&gt;
            &amp;quot;objectType&amp;quot;: &amp;quot;productAttribute&amp;quot;&lt;br /&gt;
          },&lt;br /&gt;
          &amp;quot;targetIdentifiers&amp;quot;: {&lt;br /&gt;
            &amp;quot;productAttributeId&amp;quot;: &amp;quot;f4bf7a078071d54036656df544197ba638bc3a68&amp;quot;&lt;br /&gt;
          },&lt;br /&gt;
          &amp;quot;relationshipProperties&amp;quot;: {}&lt;br /&gt;
        }&lt;br /&gt;
      ]&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;objType&amp;quot;: {&lt;br /&gt;
        &amp;quot;objectType&amp;quot;: &amp;quot;productAttributeLink&amp;quot;,&lt;br /&gt;
        &amp;quot;serviceTag&amp;quot;: &amp;quot;ProductAttribute&amp;quot;&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;objInstanceFull&amp;quot;: {&lt;br /&gt;
        &amp;quot;identifiers&amp;quot;: {&lt;br /&gt;
          &amp;quot;productAttributeLinkId&amp;quot;: &amp;quot;f90b57ca8b2fe1a83459d57da038cf50fb6d40e6&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;fields&amp;quot;: {}&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;relationships&amp;quot;: []&lt;br /&gt;
    }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;seedData_testTag_LL&amp;quot;: []&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Cleaning Seed Data ===&lt;br /&gt;
:Delete seed data for set environment of &#039;&#039;&#039;test&#039;&#039;&#039;.&lt;br /&gt;
*cleaningeDynamoOneRecordsTags.json&lt;br /&gt;
*cleaningeDynamoManyRecordsTags.json&lt;br /&gt;
&lt;br /&gt;
====cleaningeDynamoOneRecordsTags====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;cleaningSeed_TestFindData_and_Education_case_invalid01&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;tableName&amp;quot;: &amp;quot;MLocationsTestFindDataMain&amp;quot;,&lt;br /&gt;
      &amp;quot;primaryKeys&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;findDataId&amp;quot;: &amp;quot;cleaning-1&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;findDataId&amp;quot;: &amp;quot;cleaning-2&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
      ]&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;tableName&amp;quot;: &amp;quot;MLocationsTestEducation&amp;quot;,&lt;br /&gt;
      &amp;quot;primaryKeys&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;studentId&amp;quot;: &amp;quot;cleaning-AA&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;studentId&amp;quot;: &amp;quot;cleaning-BB&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;studentId&amp;quot;: &amp;quot;cleaning-CC&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
      ]&lt;br /&gt;
    }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;cleaningSeed_TestMemberPersonnel_case_invalid01&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;tableName&amp;quot;: &amp;quot;MLocationsTestMemberPersonnel&amp;quot;,&lt;br /&gt;
      &amp;quot;primaryKeys&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;userId&amp;quot;: &amp;quot;namtan&amp;quot;,&lt;br /&gt;
          &amp;quot;passwordId&amp;quot;: &amp;quot;qqqww&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;userId&amp;quot;: &amp;quot;jack&amp;quot;,&lt;br /&gt;
          &amp;quot;passwordId&amp;quot;: &amp;quot;q1&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;userId&amp;quot;: &amp;quot;Momay&amp;quot;,&lt;br /&gt;
          &amp;quot;passwordId&amp;quot;: &amp;quot;ttr&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
      ]&lt;br /&gt;
    }&lt;br /&gt;
  ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== cleaningeDynamoManyRecordsTags ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;cleaningSeed_manyData_partitionKey_only_miss_sort&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;tableName&amp;quot;: &amp;quot;MLocationsTestMemberPersonnel&amp;quot;,&lt;br /&gt;
      &amp;quot;primaryKeys&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;userId&amp;quot;: &amp;quot;many-data&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
      ]&lt;br /&gt;
    }&lt;br /&gt;
  ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*logic query table MLocationsTestMemberPersonnel use primary Keys &amp;quot;userId&amp;quot; and then delete all data from primary Keys.&lt;br /&gt;
&lt;br /&gt;
=resources=&lt;br /&gt;
syntax is object&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{ &lt;br /&gt;
	&amp;quot;Lambda&amp;quot;:{&lt;br /&gt;
		&amp;quot;{FunctionNameHdrSqs}&amp;quot;:{ // FunctionNameHdrSqs is match resourceName in file tests&lt;br /&gt;
			&amp;quot;localLacation&amp;quot;:&amp;quot;/src/FunctionNameHdrSqs.js&amp;quot;,&lt;br /&gt;
			&amp;quot;localHandler&amp;quot;:&amp;quot;main&amp;quot;, &lt;br /&gt;
			&amp;quot;functionName&amp;quot;:&amp;quot;FunctionNameHdrSqs&amp;quot;	// FunctionName is function name match key of function.yml of servcie.&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;ProcessComplexFilterHdrSqs&amp;quot;:{ &lt;br /&gt;
			&amp;quot;localLacation&amp;quot;:&amp;quot;/src/ProcessComplexFilterHdrSqs.js&amp;quot;, &lt;br /&gt;
			&amp;quot;localHandler&amp;quot;:&amp;quot;main&amp;quot;, &lt;br /&gt;
			&amp;quot;functionName&amp;quot;:&amp;quot;ProcessComplexFilterHdrSqs&amp;quot; &lt;br /&gt;
		},&lt;br /&gt;
		... &lt;br /&gt;
	},&lt;br /&gt;
	&amp;quot;Dynamodb&amp;quot;: {&lt;br /&gt;
		&amp;quot;filterMain&amp;quot;:{ // match resourceName in file tests(dynamodbOutputEventIdentifiers)&lt;br /&gt;
			&amp;quot;tableName&amp;quot;:&amp;quot;filterMain&amp;quot; &lt;br /&gt;
		}, &lt;br /&gt;
		&amp;quot;tableNameBB&amp;quot;:{ &lt;br /&gt;
			&amp;quot;tableName&amp;quot;:&amp;quot;tableNameBB&amp;quot; &lt;br /&gt;
		},&lt;br /&gt;
		... &lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=events=&lt;br /&gt;
Syntax is object&lt;br /&gt;
==Syntax Name==&lt;br /&gt;
===FileName===&lt;br /&gt;
::Event_{inputEventTag}&lt;br /&gt;
&lt;br /&gt;
===eventTag===&lt;br /&gt;
#inputEventTag&lt;br /&gt;
#outputEventTag&lt;br /&gt;
#dynamodbTag&lt;br /&gt;
&lt;br /&gt;
*file events.js is have eventTag  (inputEventTag,outputEventTag,dynamodbTag)&lt;br /&gt;
**How to create name eventTag&lt;br /&gt;
***Example case : &amp;quot;test in service complexFilter functionname ProcessComplexFilter case element type is logical basic&amp;quot;.&lt;br /&gt;
::*&#039;&#039;&#039;inputEventTag&#039;&#039;&#039;&lt;br /&gt;
::::{serviceName}_{functionName}_{caseTest}&lt;br /&gt;
&#039;&#039;Conplexfilter_ProcessComplexFilter_Typelogical_basic&#039;&#039;&lt;br /&gt;
::*&#039;&#039;&#039;outputEventTag&#039;&#039;&#039;&lt;br /&gt;
::::output_{inputEventTag}&lt;br /&gt;
&#039;&#039;output_Conplexfilter_ProcessComplexFilter_Typelogical_basic&#039;&#039;&lt;br /&gt;
::*&#039;&#039;&#039;dynamodbTag&#039;&#039;&#039;&lt;br /&gt;
::::{inputEventTag}__Dynamodb__{&#039;&#039;&#039;action*&#039;&#039;&#039;}_{tableName} &lt;br /&gt;
&#039;&#039;Conplexfilter_ProcessComplexFilter_Typelogical_basic___Dynamodb__putItem_filterMain&#039;&#039;&lt;br /&gt;
: &amp;lt;u&amp;gt;&#039;&#039;&#039;{action}&#039;&#039;&#039; is only &#039;&#039;put&#039;&#039; or &#039;&#039;update&#039;&#039;, and in case of &#039;&#039;update&#039;&#039; must only test the last step of update &amp;lt;/u&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Syntax event===&lt;br /&gt;
====initiate by handlerServcie====&lt;br /&gt;
=====Sqs=====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
// An example input and output event of Sns&lt;br /&gt;
{&lt;br /&gt;
   &amp;quot;LambdaFunctionHdrSqs_input__pass&amp;quot;:{&lt;br /&gt;
      &amp;quot;properties&amp;quot;:{&lt;br /&gt;
         &amp;quot;propertyA&amp;quot;:{&lt;br /&gt;
            &amp;quot;value&amp;quot;:&amp;quot;valueProperty1&amp;quot;&lt;br /&gt;
         },&lt;br /&gt;
         &amp;quot;propertyB&amp;quot;:{&lt;br /&gt;
            &amp;quot;properties&amp;quot;:{&lt;br /&gt;
               &amp;quot;propertyB1&amp;quot;:{&lt;br /&gt;
                  &amp;quot;value&amp;quot;:&amp;quot;valuePropertyB1&amp;quot;&lt;br /&gt;
               }&lt;br /&gt;
            }&lt;br /&gt;
         },&lt;br /&gt;
         &amp;quot;propertyC&amp;quot;:{&lt;br /&gt;
            &amp;quot;eventValue&amp;quot;:[&lt;br /&gt;
               &amp;quot;valuePropertyC1&amp;quot;,&lt;br /&gt;
               &amp;quot;valuePropertyC2&amp;quot;,&lt;br /&gt;
               &amp;quot;valuePropertyC3&amp;quot;&lt;br /&gt;
            ]&lt;br /&gt;
         }&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;snsSqsTrigger&amp;quot;:true,&lt;br /&gt;
      &amp;quot;messageAttributes&amp;quot;:{&lt;br /&gt;
            &amp;quot;msgTag&amp;quot;:{&lt;br /&gt;
               &amp;quot;value&amp;quot;:&amp;quot;msgTag&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;propertyD&amp;quot;:{&lt;br /&gt;
               &amp;quot;value&amp;quot;:&amp;quot;valuePropertyD&amp;quot;&lt;br /&gt;
            }&lt;br /&gt;
      }&lt;br /&gt;
   },&lt;br /&gt;
   {&lt;br /&gt;
      &amp;quot;output_LambdaFunctionHdrSqs_pass&amp;quot;:{&lt;br /&gt;
         &amp;quot;properties&amp;quot;:{&lt;br /&gt;
            &amp;quot;propertyA&amp;quot;:{&lt;br /&gt;
               &amp;quot;value&amp;quot;:&amp;quot;valueProperty1&amp;quot;&lt;br /&gt;
            }&lt;br /&gt;
         }&lt;br /&gt;
      }&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot; linein&amp;gt;&lt;br /&gt;
&amp;quot;snsSqsTrigger&amp;quot;:true&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Dsq=====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
// An example input and output event of Direct Sqs&lt;br /&gt;
{&lt;br /&gt;
   &amp;quot;LambdaFunctionHdrDsq_input__pass&amp;quot;:{&lt;br /&gt;
      &amp;quot;forStageMatching&amp;quot;:true,&lt;br /&gt;
      &amp;quot;properties&amp;quot;:{&lt;br /&gt;
         &amp;quot;propertyA&amp;quot;:{&lt;br /&gt;
            &amp;quot;forStageMatching&amp;quot;:true,&lt;br /&gt;
            &amp;quot;value&amp;quot;:&amp;quot;valueProperty1&amp;quot;&lt;br /&gt;
         },&lt;br /&gt;
         &amp;quot;propertyB&amp;quot;:{&lt;br /&gt;
            &amp;quot;forStageMatching&amp;quot;:true,&lt;br /&gt;
            &amp;quot;properties&amp;quot;:{&lt;br /&gt;
               &amp;quot;propertyB1&amp;quot;:{&lt;br /&gt;
                  &amp;quot;forStageMatching&amp;quot;:true,&lt;br /&gt;
                  &amp;quot;value&amp;quot;:&amp;quot;valuePropertyB1&amp;quot;&lt;br /&gt;
               }&lt;br /&gt;
            }&lt;br /&gt;
         },&lt;br /&gt;
         &amp;quot;propertyC&amp;quot;:{&lt;br /&gt;
            &amp;quot;eventValue&amp;quot;:[&lt;br /&gt;
               &amp;quot;valuePropertyC1&amp;quot;,&lt;br /&gt;
               &amp;quot;valuePropertyC2&amp;quot;,&lt;br /&gt;
               &amp;quot;valuePropertyC3&amp;quot;&lt;br /&gt;
            ]&lt;br /&gt;
         }&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;DirectSqs&amp;quot;:true,&lt;br /&gt;
      &amp;quot;messageAttributes&amp;quot;:{&lt;br /&gt;
         &amp;quot;msgTag&amp;quot;:{&lt;br /&gt;
           &amp;quot;forStageMatching&amp;quot;:true,&lt;br /&gt;
           &amp;quot;value&amp;quot;:&amp;quot;msgTag&amp;quot;&lt;br /&gt;
          },&lt;br /&gt;
          &amp;quot;propertyD&amp;quot;:{&lt;br /&gt;
           &amp;quot;forStageMatching&amp;quot;:true,&lt;br /&gt;
           &amp;quot;value&amp;quot;:&amp;quot;valuePropertyD&amp;quot;&lt;br /&gt;
          }&lt;br /&gt;
      }&lt;br /&gt;
   },&lt;br /&gt;
   {&lt;br /&gt;
      &amp;quot;output_LambdaFunctionHdrDsq_pass&amp;quot;:{&lt;br /&gt;
         &amp;quot;forStageMatching&amp;quot;:true,&lt;br /&gt;
         &amp;quot;properties&amp;quot;:{&lt;br /&gt;
            &amp;quot;propertyA&amp;quot;:{&lt;br /&gt;
               &amp;quot;forStageMatching&amp;quot;:true,&lt;br /&gt;
               &amp;quot;value&amp;quot;:&amp;quot;valueProperty1&amp;quot;&lt;br /&gt;
            }&lt;br /&gt;
         }&lt;br /&gt;
      }&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* DirectSqs = true &lt;br /&gt;
:: for initialStage of Dsq&lt;br /&gt;
* messageAttributes is optional&lt;br /&gt;
&lt;br /&gt;
=====Inv=====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;LambdaFunctionHdrInv_input__pass&amp;quot;:{&lt;br /&gt;
     &amp;quot;forStageMatching&amp;quot;:true,&lt;br /&gt;
     &amp;quot;properties&amp;quot;:{&lt;br /&gt;
        &amp;quot;propertyA&amp;quot;:{&lt;br /&gt;
           &amp;quot;forStageMatching&amp;quot;:true,&lt;br /&gt;
           &amp;quot;value&amp;quot;:&amp;quot;valueProperty1&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;propertyB&amp;quot;:{&lt;br /&gt;
           &amp;quot;forStageMatching&amp;quot;:true,&lt;br /&gt;
           &amp;quot;properties&amp;quot;:{&lt;br /&gt;
              &amp;quot;propertyB1&amp;quot;:{&lt;br /&gt;
                 &amp;quot;forStageMatching&amp;quot;:true,&lt;br /&gt;
                 &amp;quot;value&amp;quot;:&amp;quot;valuePropertyB1&amp;quot;&lt;br /&gt;
              }&lt;br /&gt;
           }&lt;br /&gt;
        }&lt;br /&gt;
     }&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
        &amp;quot;output_LambdaFunctionHdrInv_pass&amp;quot;:{&lt;br /&gt;
           &amp;quot;forStageMatching&amp;quot;:true,&lt;br /&gt;
           &amp;quot;properties&amp;quot;:{&lt;br /&gt;
              &amp;quot;propertyA&amp;quot;:{&lt;br /&gt;
                 &amp;quot;forStageMatching&amp;quot;:true,&lt;br /&gt;
                 &amp;quot;value&amp;quot;:&amp;quot;valueProperty1&amp;quot;&lt;br /&gt;
              }&lt;br /&gt;
           }&lt;br /&gt;
        }&lt;br /&gt;
     }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Api=====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
// An example input and output event of API&lt;br /&gt;
{&lt;br /&gt;
	&amp;quot;LambdaFunctionHdrApi_input__pass_notTestAuthorizer&amp;quot;: { &lt;br /&gt;
		&amp;quot;forstageMatvhing&amp;quot;: true, &lt;br /&gt;
		&amp;quot;properties&amp;quot;: { &lt;br /&gt;
			&amp;quot;body&amp;quot;: { &lt;br /&gt;
				&amp;quot;properties&amp;quot;: { &lt;br /&gt;
					&amp;quot;propertyA&amp;quot;: { &lt;br /&gt;
						&amp;quot;testValueMatches&amp;quot;: false, &lt;br /&gt;
						&amp;quot;value&amp;quot;: &amp;quot;valueProperty1&amp;quot;, &lt;br /&gt;
					}, &lt;br /&gt;
					&amp;quot;propertyB&amp;quot;: { &lt;br /&gt;
						&amp;quot;properties&amp;quot;: { &lt;br /&gt;
							&amp;quot;propertyB1&amp;quot;: { &lt;br /&gt;
								&amp;quot;value&amp;quot;: &amp;quot;valuePropertyB1&amp;quot;, &lt;br /&gt;
							} &lt;br /&gt;
						} &lt;br /&gt;
					}, &lt;br /&gt;
					&amp;quot;propertyC&amp;quot;: { &lt;br /&gt;
						&amp;quot;eventValue&amp;quot;: [ &lt;br /&gt;
							&amp;quot;valuePropertyC1&amp;quot;, &lt;br /&gt;
							&amp;quot;valuePropertyC2&amp;quot;, &lt;br /&gt;
							&amp;quot;valuePropertyC3&amp;quot;, &lt;br /&gt;
						] &lt;br /&gt;
					},&lt;br /&gt;
					... &lt;br /&gt;
				} &lt;br /&gt;
			} &lt;br /&gt;
		}&lt;br /&gt;
	}, &lt;br /&gt;
	&amp;quot;Output_LambdaFunctionHdrApi_input__pass_notTestAuthorizer&amp;quot;: { &lt;br /&gt;
		&amp;quot;properties&amp;quot;: { &lt;br /&gt;
			&amp;quot;body&amp;quot;: { &lt;br /&gt;
				&amp;quot;properties&amp;quot;: { &lt;br /&gt;
					&amp;quot;propertyA&amp;quot;: { &lt;br /&gt;
						&amp;quot;testValueMatches&amp;quot;: false, &lt;br /&gt;
						&amp;quot;value&amp;quot;: &amp;quot;valueProperty1&amp;quot;&lt;br /&gt;
					}, &lt;br /&gt;
					...&lt;br /&gt;
				} &lt;br /&gt;
			} &lt;br /&gt;
		}  &lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====S3=====&lt;br /&gt;
&lt;br /&gt;
====dynamodb====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
// An example event of Dynamodb //optional &lt;br /&gt;
{&lt;br /&gt;
	{inputEventTag}__dynamodb_{action}_{tablename}: { // eg. &amp;quot;Complexfilter_ProcessComplexfilter_logical_basic__dynamodb_update_FilterMain&amp;quot;&lt;br /&gt;
	&amp;quot;forStageMatching&amp;quot;: true,&lt;br /&gt;
     &amp;quot;properties&amp;quot;: {&lt;br /&gt;
        &amp;quot;filterMainUniqueRequestId&amp;quot;: {&lt;br /&gt;
          &amp;quot;testValueMatches&amp;quot;: fase,&lt;br /&gt;
          &amp;quot;value&amp;quot;: &amp;quot;bbc4f4a9-2032-4dec-9129-8c7d169fecc5&amp;quot;&lt;br /&gt;
         },&lt;br /&gt;
        &amp;quot;filterObject&amp;quot;: {&lt;br /&gt;
        &amp;quot;forStageMatching&amp;quot;: true,&lt;br /&gt;
        &amp;quot;properties&amp;quot;: {&lt;br /&gt;
          &amp;quot;logicalType&amp;quot;: {&lt;br /&gt;
            &amp;quot;value&amp;quot;: &amp;quot;partitionKey&amp;quot;&lt;br /&gt;
          },&lt;br /&gt;
          &amp;quot;comparison&amp;quot;: {&lt;br /&gt;
            &amp;quot;value&amp;quot;: &amp;quot;equals&amp;quot;&lt;br /&gt;
          },&lt;br /&gt;
          &amp;quot;type&amp;quot;: {&lt;br /&gt;
            &amp;quot;value&amp;quot;: &amp;quot;logical&amp;quot;&lt;br /&gt;
          },&lt;br /&gt;
          &amp;quot;partitionKey&amp;quot;: {&lt;br /&gt;
            &amp;quot;forStageMatching&amp;quot;: true,&lt;br /&gt;
            &amp;quot;value&amp;quot;: &amp;quot;mockIntegratioTestCPF&amp;quot;&lt;br /&gt;
          }&lt;br /&gt;
        }&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;filterMainExpiryTime&amp;quot;: {&lt;br /&gt;
        &amp;quot;testValueMatches&amp;quot;: fase,&lt;br /&gt;
        &amp;quot;value&amp;quot;: 1731980802858&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;filterMainStatus&amp;quot;: {&lt;br /&gt;
       &amp;quot;forStageMatching&amp;quot;: true,&lt;br /&gt;
        &amp;quot;value&amp;quot;: &amp;quot;processing&amp;quot;&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;createTime&amp;quot;: {&lt;br /&gt;
        &amp;quot;testValueMatches&amp;quot;: fase,&lt;br /&gt;
        &amp;quot;value&amp;quot;: 1731894402678&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;objType&amp;quot;: {&lt;br /&gt;
        &amp;quot;forStageMatching&amp;quot;: true,&lt;br /&gt;
        &amp;quot;properties&amp;quot;: {&lt;br /&gt;
          &amp;quot;serviceTag&amp;quot;: {&lt;br /&gt;
            &amp;quot;forStageMatching&amp;quot;: true,&lt;br /&gt;
            &amp;quot;value&amp;quot;: &amp;quot;IntTesting&amp;quot;&lt;br /&gt;
          },&lt;br /&gt;
          &amp;quot;objectType&amp;quot;: {&lt;br /&gt;
            &amp;quot;forStageMatching&amp;quot;: true,&lt;br /&gt;
            &amp;quot;value&amp;quot;: &amp;quot;TestRecord&amp;quot;&lt;br /&gt;
          }&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;keyValues&amp;quot;: {&lt;br /&gt;
      &amp;quot;filterMainId&amp;quot;: &amp;quot;4865d2451a621cb7f71225cfabf2df4f98e20801&amp;quot;,&lt;br /&gt;
      &amp;quot;objTypeId&amp;quot;: &amp;quot;cdb170690571df7522b3850920fce02507c077ee&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
	} &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* partition key: filterMainId&lt;br /&gt;
* sort key: objTypeId&lt;br /&gt;
&lt;br /&gt;
[[2021-01-15 - Integration Testing - Adding DynamoDB result tests]]&lt;br /&gt;
&lt;br /&gt;
===Type paramiter===&lt;br /&gt;
use for evnet and dyanmodb event&lt;br /&gt;
====Normal====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 object: {&lt;br /&gt;
  forStageMatching: true,&lt;br /&gt;
  properties: {&lt;br /&gt;
    name:{&lt;br /&gt;
     forStageMatching: true,&lt;br /&gt;
     value:&amp;quot;Tom&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
   }&lt;br /&gt;
 },&lt;br /&gt;
 array: {&lt;br /&gt;
  forStageMatching: true,&lt;br /&gt;
  useIsEqual: true,&lt;br /&gt;
  eventValue: [&lt;br /&gt;
   {&lt;br /&gt;
     &amp;quot;relTypeAndDirection&amp;quot;: {&lt;br /&gt;
       &amp;quot;relType&amp;quot;: {&lt;br /&gt;
         &amp;quot;serviceTag&amp;quot;: &amp;quot;maxxCart2&amp;quot;,&lt;br /&gt;
         &amp;quot;relationshipTag&amp;quot;: &amp;quot;hasCartOrder&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;relationshipDirection&amp;quot;: &amp;quot;from&amp;quot;&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;targetObjects&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;objType&amp;quot;: {&lt;br /&gt;
           &amp;quot;serviceTag&amp;quot;: &amp;quot;maxxCart2&amp;quot;,&lt;br /&gt;
           &amp;quot;objectType&amp;quot;: &amp;quot;cartOrder&amp;quot;&lt;br /&gt;
          }&lt;br /&gt;
        }&lt;br /&gt;
      ]&lt;br /&gt;
    }&lt;br /&gt;
  ]&lt;br /&gt;
 },&lt;br /&gt;
 number: {&lt;br /&gt;
  forStageMatching: true,&lt;br /&gt;
  value: 1111&lt;br /&gt;
 },&lt;br /&gt;
 string: {&lt;br /&gt;
  forStageMatching: true,&lt;br /&gt;
  value: &amp;quot;hi&amp;quot;&lt;br /&gt;
 },&lt;br /&gt;
 boolean: {&lt;br /&gt;
  forStageMatching: true,&lt;br /&gt;
  value: true&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
 forStageMatching: true&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
::set true for check match value,It is not necessary to set every value&lt;br /&gt;
:::use in test importent paramiter&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
testValueMatches:false&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
::setting paramiter require on create but can not test random value eg: identifier or timeStamp or uuid&lt;br /&gt;
&lt;br /&gt;
====Empty====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
 EmptyString:{&lt;br /&gt;
forStageMatching: true,&lt;br /&gt;
  value:&amp;quot;&amp;quot;&lt;br /&gt;
 },&lt;br /&gt;
 EmptyArray:{&lt;br /&gt;
   forStageMatching: true,&lt;br /&gt;
   useIsEqual: true,&lt;br /&gt;
   eventValue: []&lt;br /&gt;
 },&lt;br /&gt;
 EmptyObject:{&lt;br /&gt;
  forStageMatching: true,&lt;br /&gt;
  value:{}&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Error====&lt;br /&gt;
can test noRetryError&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;quot;errorMessage&amp;quot;: {&lt;br /&gt;
    forStageMatching: true,&lt;br /&gt;
    &amp;quot;value&amp;quot;: &amp;quot;Not found schema of {serviceTag:TestGraphHandler, objectType:notFoundObjType}&amp;quot;&lt;br /&gt;
   }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Paramiter random====&lt;br /&gt;
Can not test case random numbber or uuid.&lt;br /&gt;
But requriOnCreate mush be set &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
testValueMatches:false&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
or set&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
forStageMatching:false&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=tests=&lt;br /&gt;
Syntax is array of object&lt;br /&gt;
==Syntax name== &lt;br /&gt;
===Testtag name ===&lt;br /&gt;
*{integrationTestTag}&lt;br /&gt;
#Test Own servcie or not a lot stage&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
Test_{inputEventTag}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
#Mix multiple servcie and multiple stage&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt; &lt;br /&gt;
IntegrationTest_{inputEventTag}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===File name ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt; &lt;br /&gt;
{integrationTestTag}.json&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Setting of test==&lt;br /&gt;
[[Service - Integration Test Config#tests.js Syntax|syntax test]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
            integrationTestTag: {integrationTestTag},&lt;br /&gt;
            productionSafe: true|false, //default false&lt;br /&gt;
            noInitialStage: true, // default false, if set to true, no error when no foundInitialStages found&lt;br /&gt;
            errorIfStageUndefined: true|false, //default false&lt;br /&gt;
            errorIfInvokeUndefined: true|false, //default false,&lt;br /&gt;
            dynamoDBSeedDataTags:[&amp;quot;seedDataDB_test_case_xx&amp;quot;], //[seedDataTag] optional if have seed data for test&lt;br /&gt;
            graphSeedDataTags:[&amp;quot;seedDataGraph_test_case_xx&amp;quot;], //[seedDataTag] optional if have seed data for test&lt;br /&gt;
            cleaningeDynamoOneRecordsTags: [&amp;quot;cleaningSeed_partitionKey_sortKey_normol&amp;quot;], //optional&lt;br /&gt;
            cleaningeDynamoManyRecordsTags: [], // optional&lt;br /&gt;
            stages:[&lt;br /&gt;
               ...&lt;br /&gt;
            ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
*[[2025-11-20 IntegrationTest#dynamoDBSeedDataTags|dynamoDBSeedDataTags]]&lt;br /&gt;
*[[2025-11-20 IntegrationTest#graphSeedDataTags|graphSeedDataTags]]&lt;br /&gt;
*[[2025-11-20 IntegrationTest#cleaningeDynamoOneRecordsTags|cleaningeDynamoOneRecordsTags]]&lt;br /&gt;
*[[2025-11-20 IntegrationTest#cleaningeDynamoManyRecordsTags|cleaningeDynamoManyRecordsTags]]&lt;br /&gt;
&lt;br /&gt;
==Stages==&lt;br /&gt;
====Initiate stage====&lt;br /&gt;
:&#039;&#039;&#039;&amp;quot;initialStage&amp;quot;:true&#039;&#039;&#039;&lt;br /&gt;
[[Service_-_Integration_Test_Config#tests.js Syntax|detail property of test]]&lt;br /&gt;
=====HandlerService=====&lt;br /&gt;
======Sqs======&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;quot;stages&amp;quot;:[&lt;br /&gt;
         {&lt;br /&gt;
            &amp;quot;initialStage&amp;quot;:true,&lt;br /&gt;
            &amp;quot;inputEventTag&amp;quot;:&amp;quot;Locations_ProcessLocationNodeSomting_casenotHaveData&amp;quot;,&lt;br /&gt;
            &amp;quot;serviceName&amp;quot;:&amp;quot;Locations&amp;quot;,&lt;br /&gt;
            &amp;quot;resourceType&amp;quot;:&amp;quot;Lambda&amp;quot;,&lt;br /&gt;
            &amp;quot;resourceName&amp;quot;:&amp;quot;ProcessLocationNodeSomtingHdrDsq&amp;quot;,&lt;br /&gt;
            &amp;quot;outputEventTag&amp;quot;:&amp;quot;Output_Locations_ProcessLocationNodeSomting_casenotHaveData&amp;quot;&lt;br /&gt;
         }&lt;br /&gt;
      ]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
======Dsq======&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
stages: [&lt;br /&gt;
        {&lt;br /&gt;
          initialStage: true,&lt;br /&gt;
          inputEventTag: &#039;LambdaFunctionHdrDsq_input_singleStage_directSqs__pass&#039;,&lt;br /&gt;
          serviceName: &#039;ServiceTemplate&#039;,&lt;br /&gt;
          resourceType: &#039;Lambda&#039;,&lt;br /&gt;
          resourceName: &#039;LambdaFunctionHdrDsq&#039;,&lt;br /&gt;
          outputEventTag: &#039;LambdaFunctionHdrDsq_output__returnvalue_pass&#039;,&lt;br /&gt;
          // **** not set snsServiceName and snsTopic&lt;br /&gt;
          // can be test dynamodbOutput&lt;br /&gt;
        }&lt;br /&gt;
      ]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
======Api======&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;quot;stages&amp;quot;:[&lt;br /&gt;
    {&lt;br /&gt;
       &amp;quot;initialStage&amp;quot;:true,&lt;br /&gt;
       &amp;quot;inputEventTag&amp;quot;:&amp;quot;LambdaFunctionHdrApi_input__pass&amp;quot;,&lt;br /&gt;
       &amp;quot;serviceName&amp;quot;:&amp;quot;ServiceTemplate&amp;quot;,&lt;br /&gt;
       &amp;quot;resourceType&amp;quot;:&amp;quot;Lambda&amp;quot;,&lt;br /&gt;
       &amp;quot;resourceName&amp;quot;:&amp;quot;LambdaFunctionHdrApi&amp;quot;,&lt;br /&gt;
       &amp;quot;outputEventTag&amp;quot;:&amp;quot;LambdaFunctionHdrApi_output__pass&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
======Inv======&lt;br /&gt;
*&#039;&#039;&#039;single stage&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
[{&lt;br /&gt;
   &amp;quot;integrationTestTag&amp;quot;:&amp;quot;LambdaFunctionHdrInv__pass&amp;quot;,&lt;br /&gt;
   &amp;quot;productionSafe&amp;quot;:false,&lt;br /&gt;
   &amp;quot;errorIfStageUndefined&amp;quot;:false,&lt;br /&gt;
   &amp;quot;errorIfInvokeUndefined&amp;quot;:false,&lt;br /&gt;
   &amp;quot;dynamoDBSeedDataTags&amp;quot;:[&amp;quot;seedDataDB_test_case_xx&amp;quot;], //[seedDataTag] optional if have seed data for test&lt;br /&gt;
   &amp;quot;graphSeedDataTags&amp;quot;:[&amp;quot;seedDataGraph_test_case_xx&amp;quot;], //[seedDataTag] optional if have seed data for test&lt;br /&gt;
   &amp;quot;cleaningeDynamoOneRecordsTags&amp;quot;: [&amp;quot;cleaningSeed_partitionKey_sortKey_normol&amp;quot;], //optional&lt;br /&gt;
   &amp;quot;cleaningeDynamoManyRecordsTags&amp;quot;: []&lt;br /&gt;
   &amp;quot;stages&amp;quot;:[&lt;br /&gt;
      {&lt;br /&gt;
         &amp;quot;initialStage&amp;quot;:true,&lt;br /&gt;
         &amp;quot;inputEventTag&amp;quot;:&amp;quot;LambdaFunctionHdrInv_input__pass&amp;quot;,&lt;br /&gt;
         &amp;quot;serviceName&amp;quot;:&amp;quot;ServiceTemplate&amp;quot;,&lt;br /&gt;
         &amp;quot;resourceType&amp;quot;:&amp;quot;Lambda&amp;quot;,&lt;br /&gt;
         &amp;quot;resourceName&amp;quot;:&amp;quot;LambdaFunctionHdrInv&amp;quot;,&lt;br /&gt;
         &amp;quot;outputEventTag&amp;quot;:&amp;quot;LambdaFunctionHdrInv_output__pass&amp;quot;&lt;br /&gt;
      }&lt;br /&gt;
   ]&lt;br /&gt;
}]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;invoke multiple stage&#039;&#039;&#039; &lt;br /&gt;
:*Each stage test can invoke multiple lambda by use &amp;quot;eventStage Tag&amp;quot; point to stage for test integration test.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
[{&lt;br /&gt;
   &amp;quot;integrationTestTag&amp;quot;:&amp;quot;LambdaFunctionHdrInv_invokes__pass&amp;quot;,&lt;br /&gt;
   &amp;quot;productionSafe&amp;quot;:false,&lt;br /&gt;
   &amp;quot;errorIfStageUndefined&amp;quot;:false,&lt;br /&gt;
   &amp;quot;errorIfInvokeUndefined&amp;quot;:false,&lt;br /&gt;
   &amp;quot;dynamoDBSeedDataTags&amp;quot;:[], //[seedDataTag] optional if have seed data for test&lt;br /&gt;
   &amp;quot;graphSeedDataTags&amp;quot;:[], //[seedDataTag] optional if have seed data for test&lt;br /&gt;
   &amp;quot;cleaningeDynamoOneRecordsTags&amp;quot;: [], //optional&lt;br /&gt;
   &amp;quot;cleaningeDynamoManyRecordsTags&amp;quot;: [], // optional&lt;br /&gt;
   &amp;quot;stages&amp;quot;:[&lt;br /&gt;
      {&lt;br /&gt;
         &amp;quot;initialStage&amp;quot;:true,&lt;br /&gt;
         &amp;quot;inputEventTag&amp;quot;:&amp;quot;LambdaFunctionHdrInv_input__pass&amp;quot;,&lt;br /&gt;
         &amp;quot;serviceName&amp;quot;:&amp;quot;ServiceTemplate&amp;quot;,&lt;br /&gt;
         &amp;quot;resourceType&amp;quot;:&amp;quot;Lambda&amp;quot;,&lt;br /&gt;
         &amp;quot;resourceName&amp;quot;:&amp;quot;LambdaFunctionHdrInv&amp;quot;,&lt;br /&gt;
         &amp;quot;outputEventTag&amp;quot;:&amp;quot;LambdaFunctionHdrInv_output__pass&amp;quot;,&lt;br /&gt;
         &amp;quot;invokes&amp;quot;:[&lt;br /&gt;
            {&lt;br /&gt;
               &amp;quot;eventStageTag&amp;quot;:&amp;quot;service_invokesB__pass&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            {&lt;br /&gt;
               &amp;quot;eventStageTag&amp;quot;:&amp;quot;service_invokesD__pass&amp;quot;&lt;br /&gt;
            }&lt;br /&gt;
         ]&lt;br /&gt;
      },&lt;br /&gt;
      {&lt;br /&gt;
         &amp;quot;eventStageTag&amp;quot;:&amp;quot;service_invokesB__pass&amp;quot;,&lt;br /&gt;
         &amp;quot;inputEventTag&amp;quot;:&amp;quot;input_service_invokes__pass&amp;quot;,&lt;br /&gt;
         &amp;quot;serviceName&amp;quot;:&amp;quot;ServiceTemplate_B&amp;quot;,&lt;br /&gt;
         &amp;quot;resourceType&amp;quot;:&amp;quot;Lambda&amp;quot;,&lt;br /&gt;
         &amp;quot;resourceName&amp;quot;:&amp;quot;LambdaFunction_B_HdrInv&amp;quot;,&lt;br /&gt;
         &amp;quot;outputEventTag&amp;quot;:&amp;quot;output_service_invokes__pass&amp;quot;&lt;br /&gt;
      },&lt;br /&gt;
      {&lt;br /&gt;
         &amp;quot;eventStageTag&amp;quot;:&amp;quot;service_invokesD__pass&amp;quot;,&lt;br /&gt;
         &amp;quot;inputEventTag&amp;quot;:&amp;quot;input_service_invokesD__pass&amp;quot;,&lt;br /&gt;
         &amp;quot;serviceName&amp;quot;:&amp;quot;ServiceTemplate_D&amp;quot;,&lt;br /&gt;
         &amp;quot;resourceType&amp;quot;:&amp;quot;Lambda&amp;quot;,&lt;br /&gt;
         &amp;quot;resourceName&amp;quot;:&amp;quot;LambdaFunction_D_HdrInv&amp;quot;,&lt;br /&gt;
         &amp;quot;outputEventTag&amp;quot;:&amp;quot;output_service_invokesD__pass&amp;quot;&lt;br /&gt;
      }&lt;br /&gt;
   ]&lt;br /&gt;
}]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
======S3======&lt;br /&gt;
======Batch======&lt;br /&gt;
&lt;br /&gt;
====GeneratedSeedData====&lt;br /&gt;
*Integrationtest must be delete identifier every time before test.&lt;br /&gt;
*Set &#039;generatedSeedData&#039; in file tests.json case by case of stage eg: stages[0] create identifier is randomOnCreate will set &#039;generatedSeedData&#039; and stages[1] create relationship is randomOnCreate(It is usually random, except in the case of relationship version) set generatedSeedData this stages[1].&lt;br /&gt;
*How to delete case identifier rendomOnCreate?: set in stage use setting generateSeedData &amp;quot;randomOnCreateIdentifier&amp;quot;&lt;br /&gt;
#randomOnCreateIdentifier&lt;br /&gt;
#notRandomOnIdentifier&lt;br /&gt;
#relationships&lt;br /&gt;
=====randomOnCreateIdentifier=====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;quot;stages&amp;quot;: [&lt;br /&gt;
      {&lt;br /&gt;
        &amp;quot;initialStage&amp;quot;: true,&lt;br /&gt;
        &amp;quot;inputEventTag&amp;quot;: &amp;quot;MLocation_CreateHdrSqs__case_NodeVersionData_Jaya&amp;quot;,&lt;br /&gt;
        &amp;quot;serviceTag&amp;quot;: &amp;quot;MLocations&amp;quot;,&lt;br /&gt;
        &amp;quot;resourceType&amp;quot;: &amp;quot;Lambda&amp;quot;,&lt;br /&gt;
        &amp;quot;resourceName&amp;quot;: &amp;quot;CreateHdrSqs&amp;quot;,&lt;br /&gt;
        &amp;quot;snsServiceName&amp;quot;: &amp;quot;MLocations&amp;quot;,&lt;br /&gt;
        &amp;quot;snsTopic&amp;quot;: &amp;quot;Create_In&amp;quot;,&lt;br /&gt;
        &amp;quot;generatedSeedData&amp;quot;: {&lt;br /&gt;
          &amp;quot;randomOnCreateIdentifier&amp;quot;: [&lt;br /&gt;
            {&lt;br /&gt;
              &amp;quot;objType&amp;quot;: {&lt;br /&gt;
                &amp;quot;serviceTag&amp;quot;: &amp;quot;MLocations&amp;quot;,&lt;br /&gt;
                &amp;quot;objectType&amp;quot;: &amp;quot;Member&amp;quot;&lt;br /&gt;
              },&lt;br /&gt;
              &amp;quot;identifierValue&amp;quot;: &amp;quot;Jaya-member-001&amp;quot;&lt;br /&gt;
            }&lt;br /&gt;
          ]&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
=====notRandomOnIdentifier=====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;quot;stages&amp;quot;: [&lt;br /&gt;
      {&lt;br /&gt;
        &amp;quot;initialStage&amp;quot;: true,&lt;br /&gt;
        &amp;quot;inputEventTag&amp;quot;: &amp;quot;MLocation_CreateHdrSqs__case_NodeVersionData_Jaya&amp;quot;,&lt;br /&gt;
        &amp;quot;serviceTag&amp;quot;: &amp;quot;MLocations&amp;quot;,&lt;br /&gt;
        &amp;quot;resourceType&amp;quot;: &amp;quot;Lambda&amp;quot;,&lt;br /&gt;
        &amp;quot;resourceName&amp;quot;: &amp;quot;CreateHdrSqs&amp;quot;,&lt;br /&gt;
        &amp;quot;snsServiceName&amp;quot;: &amp;quot;MLocations&amp;quot;,&lt;br /&gt;
        &amp;quot;snsTopic&amp;quot;: &amp;quot;Create_In&amp;quot;,&lt;br /&gt;
        &amp;quot;generatedSeedData&amp;quot;: {&lt;br /&gt;
          &amp;quot;notRandomOnIdentifier&amp;quot;: [&lt;br /&gt;
            {&lt;br /&gt;
              &amp;quot;objType&amp;quot;: {&lt;br /&gt;
                &amp;quot;serviceTag&amp;quot;: &amp;quot;gggg&amp;quot;,&lt;br /&gt;
                &amp;quot;objectType&amp;quot;: &amp;quot;ssssss&amp;quot;&lt;br /&gt;
              },&lt;br /&gt;
              &amp;quot;identifiers&amp;quot;: {&lt;br /&gt;
                &amp;quot;topId&amp;quot;: &amp;quot;123456&amp;quot;&lt;br /&gt;
              }&lt;br /&gt;
            }&lt;br /&gt;
          ]&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    ]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
=====relationships=====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;quot;stages&amp;quot;: [&lt;br /&gt;
      {&lt;br /&gt;
        &amp;quot;initialStage&amp;quot;: true,&lt;br /&gt;
        &amp;quot;inputEventTag&amp;quot;: &amp;quot;MLocation_CreateHdrSqs__case_NodeVersionData_Jaya&amp;quot;,&lt;br /&gt;
        &amp;quot;serviceTag&amp;quot;: &amp;quot;MLocations&amp;quot;,&lt;br /&gt;
        &amp;quot;resourceType&amp;quot;: &amp;quot;Lambda&amp;quot;,&lt;br /&gt;
        &amp;quot;resourceName&amp;quot;: &amp;quot;CreateHdrSqs&amp;quot;,&lt;br /&gt;
        &amp;quot;snsServiceName&amp;quot;: &amp;quot;MLocations&amp;quot;,&lt;br /&gt;
        &amp;quot;snsTopic&amp;quot;: &amp;quot;Create_In&amp;quot;,&lt;br /&gt;
        &amp;quot;generatedSeedData&amp;quot;: {&lt;br /&gt;
         &amp;quot;relationships&amp;quot;: [&lt;br /&gt;
            {&lt;br /&gt;
              &amp;quot;relType&amp;quot;: {&lt;br /&gt;
                &amp;quot;serviceTag&amp;quot;: &amp;quot;PaymentMethodGeneric&amp;quot;,&lt;br /&gt;
                &amp;quot;relationshipTag&amp;quot;: &amp;quot;disabledPaymentMethodGenericPropertyValue&amp;quot;&lt;br /&gt;
              },&lt;br /&gt;
              &amp;quot;relId&amp;quot;: &amp;quot;f4f73de7-647c-4b3b-8043-87cc002f361a&amp;quot;&lt;br /&gt;
            }&lt;br /&gt;
          ]&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    ]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Dynamodb==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
stages: [&lt;br /&gt;
        {&lt;br /&gt;
          initialStage: true,&lt;br /&gt;
          inputEventTag: &#039;Locations_LambdaFunctionHdrDsq_singleStage_directSqs__pass&#039;,&lt;br /&gt;
          serviceName: &#039;ServiceTemplate&#039;,&lt;br /&gt;
          resourceType: &#039;Lambda&#039;,&lt;br /&gt;
          resourceName: &#039;LambdaFunctionHdrDsq&#039;,&lt;br /&gt;
          outputEventTag: &#039;output_Locations_LambdaFunctionHdrDsq_singleStage_directSqs__pass&#039;,&lt;br /&gt;
          dynamodbOutputEventIdentifiers: [&lt;br /&gt;
			{&lt;br /&gt;
              serviceName: {tableName}, //service that deployed the DynamoDB table, so can build table&#039;s full resource name&lt;br /&gt;
              resourceName: {resourceName}, //DynamoDB resourceName&lt;br /&gt;
              eventTag: {eventTagDynamoDB}&lt;br /&gt;
		    }&lt;br /&gt;
          ],&lt;br /&gt;
        }&lt;br /&gt;
      ]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Result of integrationtest =&lt;br /&gt;
Data have 2 table &amp;quot;TestRecord&amp;quot; and &amp;quot;TestUnit&amp;quot;.&lt;br /&gt;
:- TestRecord is table all unti of stage inside eg input output invokes and dynamodb&lt;br /&gt;
:- TestUnit is store status each unit &lt;br /&gt;
each unit save in table TestUnit&lt;br /&gt;
testRecordId is  name of test concat with testTime.&lt;br /&gt;
testUnitId is point to position of unti instage.&lt;br /&gt;
resultStatus is status of unit.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
eg:&lt;br /&gt;
input_0 = stages index 0 result &#039;&#039;&#039;input&#039;&#039;&#039;&lt;br /&gt;
output_1 = stages index 1 result &#039;&#039;&#039;output&#039;&#039;&#039;&lt;br /&gt;
invokeInput_0_1 = stages index 0 result &#039;&#039;&#039;invokes&#039;&#039;&#039; index 1 position input &lt;br /&gt;
invokeOutput_0_1 = stages index 0 result &#039;&#039;&#039;invokes&#039;&#039;&#039; index 1 position output&lt;br /&gt;
dynamodb_0_1 =  stages index 0 result &#039;&#039;&#039;dynamodb&#039;&#039;&#039; index 1.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
after all TestUnit finish (check  by awaitingMultiplestep penditnStep is integrationtestTag awaitingStepId is each TestUnit )&lt;br /&gt;
check all awaitingStep finish send message to ultimateIntegrationtest for sumla all test is status&lt;br /&gt;
&lt;br /&gt;
== Summary of test status == &lt;br /&gt;
:1.testStatus is &amp;quot;passed&amp;quot; all unit passed.&lt;br /&gt;
:2.testStatus is &amp;quot;failed&amp;quot;  have some is failed.&lt;br /&gt;
:3.testStatus is &amp;quot;processing&amp;quot; have some is have status processing after check all awaiting step is finish.&lt;br /&gt;
:4.testStatus is &amp;quot;failed&amp;quot; have record &amp;quot;errorsTest&amp;quot; in case &amp;quot;not match stage invoke&amp;quot;, &#039;found multiple matchingInvokes&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*[[2025-02-20 - Integration Test examples#tests.js Syntax|Syntax Dynamodb]]&lt;br /&gt;
&lt;br /&gt;
=How to test integrationtest s3=&lt;br /&gt;
[[Developer guide for making Integration Tests]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Working documents| 2025-11-20]]&lt;br /&gt;
[[Category:Working documents - Integration Testing| 2025-11-20]]&lt;/div&gt;</summary>
		<author><name>Mint</name></author>
	</entry>
	<entry>
		<id>https://izara.io/wiki/index.php?title=2025-11-20_IntegrationTest&amp;diff=4574</id>
		<title>2025-11-20 IntegrationTest</title>
		<link rel="alternate" type="text/html" href="https://izara.io/wiki/index.php?title=2025-11-20_IntegrationTest&amp;diff=4574"/>
		<updated>2026-08-11T07:18:47Z</updated>

		<summary type="html">&lt;p&gt;Mint: /* graphSeedDataTags */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Reference:&lt;br /&gt;
&lt;br /&gt;
*[[2020-10-01 - Integration Test Config - Functions|IntegrationtestConfig]]&lt;br /&gt;
*[[2020-10-01 - Integration Testing - Lambda Functions|Integrationtesting]]&lt;br /&gt;
*[[2025-02-20 - Integration Test examples|Example]]&lt;br /&gt;
&lt;br /&gt;
= File extension =&lt;br /&gt;
&lt;br /&gt;
uploadS3: &amp;quot;.json&amp;quot;&lt;br /&gt;
integrationtestConfig: &amp;quot;.js&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=TestRecord=&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JSON&amp;quot;&amp;gt;&lt;br /&gt;
[&lt;br /&gt;
  {&lt;br /&gt;
    integrationTestTag: &amp;quot;Integrationtest_xx&amp;quot;,&lt;br /&gt;
    testStartedTimestamp: 111111111, // start time&lt;br /&gt;
    bucketName: &amp;quot;integrationtest-config-us-east-2&amp;quot;,&lt;br /&gt;
    lastUpdateUniqueRequestId: &amp;quot;sssss&amp;quot;, //_izContext.uniqueRequestId protacts race coditionn dynamodb&lt;br /&gt;
    testStatus: &amp;quot;passed&amp;quot;,//failed,processing,passed&lt;br /&gt;
    testCompleteTimestamp: 1111113, // all test finish&lt;br /&gt;
    stages: [&lt;br /&gt;
      {&lt;br /&gt;
        stageConfig: {&lt;br /&gt;
          //straight copy of this stage from integration test config&lt;br /&gt;
          inputEventTag: &amp;quot;xx&amp;quot;,&lt;br /&gt;
          inputEventConfig: {//event input&lt;br /&gt;
          },&lt;br /&gt;
          outputEventTag: &amp;quot;output_xx&amp;quot;,&lt;br /&gt;
          outputEventConfig: {//event out put&lt;br /&gt;
          },&lt;br /&gt;
          resourceName: &amp;quot;ComplexfilterTestProcessComplexfilter&amp;quot;,// function name&lt;br /&gt;
          resourceType: &amp;quot;Lambda&amp;quot;, // function name&lt;br /&gt;
          serviceTag: &amp;quot;Complexfilter&amp;quot;,// (initeate sqs)&lt;br /&gt;
          snsServiceName: &amp;quot;Complexfilter&amp;quot;,// (initeate sqs)&lt;br /&gt;
          snsTopic: &amp;quot;PorcessComplexfilter_In&amp;quot;// (initeate sqs)&lt;br /&gt;
&lt;br /&gt;
        },&lt;br /&gt;
        stageStatus: &amp;quot;waiting&amp;quot;, //waiting|passed|failed,&lt;br /&gt;
        stageFinishedTimestamp: 111111111,// time that all tests finished and testRecord.stages.{stageKey}.stageStatus updated&lt;br /&gt;
        stageResults: {&lt;br /&gt;
          //results at the point of entering the resource (eg a Lambda function is invoked)&lt;br /&gt;
          inputResult: {&lt;br /&gt;
            resultTimestamp: 111111111,//{time result saved},&lt;br /&gt;
            resultStatus: &amp;quot;passed&amp;quot;,//passed|failed,&lt;br /&gt;
            requestParams: {//event input&lt;br /&gt;
            }&lt;br /&gt;
          },&lt;br /&gt;
          //results at the point of returning from the resource (eg a Lambda function returns)&lt;br /&gt;
          outputResult: {&lt;br /&gt;
            resultTimestamp: 111111111,//{time result saved},&lt;br /&gt;
            resultStatus: &amp;quot;passed&amp;quot;,//passed|failed,&lt;br /&gt;
            requestParams: {//event input&lt;br /&gt;
            }&lt;br /&gt;
          },&lt;br /&gt;
          //results at the point of invoking an external resource (eg the tested Lambda function is invoking another Lambda function)&lt;br /&gt;
          invokes: {&lt;br /&gt;
            &amp;quot;serviceName_resourceType_resourceName_inputEventTag &amp;quot;: {&lt;br /&gt;
              invokeTimestamp: 111111111,//{ time result saved },&lt;br /&gt;
              resultTimestamp: 111111112,//{ time result saved },&lt;br /&gt;
              resultStatus: &amp;quot;passed&amp;quot;,//passed | failed,&lt;br /&gt;
              invokeParams: {},//{event invoke input config }&lt;br /&gt;
              requestParams: {}// event invoke input request&lt;br /&gt;
            },&lt;br /&gt;
          },&lt;br /&gt;
          dynamodbResults: [&lt;br /&gt;
            {&lt;br /&gt;
              indexOfDynamodbOutput: 0,&lt;br /&gt;
              requestParams,&lt;br /&gt;
              resultStatus: &amp;quot;passed&amp;quot;,//&lt;br /&gt;
              resultTimestamp: 22222&lt;br /&gt;
            }]&lt;br /&gt;
&lt;br /&gt;
        },&lt;br /&gt;
        stageErrors: [&lt;br /&gt;
          //misc errors encountered&lt;br /&gt;
        ]&lt;br /&gt;
      }]&lt;br /&gt;
&lt;br /&gt;
  }&lt;br /&gt;
]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Seed Data=&lt;br /&gt;
integrationtest manager seed date 2 process&lt;br /&gt;
&lt;br /&gt;
=== Main Seed Data===&lt;br /&gt;
:Save file in s3 (in &#039;&#039;&#039;buckname&#039;&#039;&#039; :integrationtest-config-us-east-2, &#039;&#039;&#039;folder&#039;&#039;&#039;:seedData_integrationTest).For other dev use service,If a developer wants to add more for other important testing purposes.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;How to use:&#039;&#039;&#039;&lt;br /&gt;
#Add it from the s3 bucket at this point&lt;br /&gt;
#Run batch refreshSeedData [[Developer guide for making Integration Tests#Bash script|batch RefreshSeedData]]&lt;br /&gt;
&#039;&#039;&#039;Logic&#039;&#039;&#039;:Process by storage resouse (graph or dynamodb)&lt;br /&gt;
:To clean up the seed data in the table after it creates seed data form service deploy and pulls seed data from s3.&lt;br /&gt;
&lt;br /&gt;
=== Refresh Seed Data ===&lt;br /&gt;
:ProcessRefreshSeedData use seedDataTag for create data environment of &#039;&#039;&#039;test&#039;&#039;&#039; and can be refresh seeddata re-test agian.&lt;br /&gt;
:&#039;&#039;&#039;canbe share&#039;&#039;&#039; seed data for other test by seed data tag.&lt;br /&gt;
&#039;&#039;&#039;How to use:&#039;&#039;&#039;&lt;br /&gt;
:Save file in s3 (for other dav keep in floder dev name) or testConfig/seedData_config(for admin)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Folder&#039;&#039;&#039;&lt;br /&gt;
*dynamoDBSeedDataTags.json&lt;br /&gt;
*graphSeedDataTags.json&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Example&#039;&#039;&#039;&lt;br /&gt;
==== dynamoDBSeedDataTags ====&lt;br /&gt;
:If set tag in this setting integrationtest is generate seed data. in storage resource dynammodb.&lt;br /&gt;
Example&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;seedDynamodb_abc_ver2&amp;quot;: [ // seedDataTag&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;tableName&amp;quot;: &amp;quot;DelivMethodSTDTestLogicalResultsData&amp;quot;,  // servcieTag+stage+tablename&lt;br /&gt;
      &amp;quot;partitionKey&amp;quot;: &amp;quot;logicalResultId&amp;quot;,&lt;br /&gt;
      &amp;quot;sortKey&amp;quot;: &amp;quot;identifiersId&amp;quot;,&lt;br /&gt;
      &amp;quot;datas&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
          logicalResultId: {&lt;br /&gt;
	    		  value: &amp;quot;eeeeeeeeee4&amp;quot;&lt;br /&gt;
          },&lt;br /&gt;
          &amp;quot;identifiersId&amp;quot;: {&lt;br /&gt;
			      &amp;quot;value: &amp;quot;lllll123456&amp;quot;&lt;br /&gt;
          },&lt;br /&gt;
          &amp;quot;processLogicalResultExpiryTimestamp&amp;quot; {&lt;br /&gt;
            calcType: &amp;quot;currentTimestampAdjustment&amp;quot;, // can add other types of calculated data in future&lt;br /&gt;
            action: &amp;quot;subtract&amp;quot;, // add|subtract&lt;br /&gt;
            adjustment: &amp;quot;2 days&amp;quot;, // Human-Readable Relative Format&lt;br /&gt;
          }&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
          logicalResultId: {&lt;br /&gt;
	    		  value: &amp;quot;eeeeeeeeee4&amp;quot;&lt;br /&gt;
          },&lt;br /&gt;
          &amp;quot;identifiersId&amp;quot;: {&lt;br /&gt;
			      &amp;quot;value: &amp;quot;lllll777777&amp;quot;&lt;br /&gt;
          },&lt;br /&gt;
          &amp;quot;processLogicalResultExpiryTimestamp&amp;quot; {&lt;br /&gt;
            calcType: &amp;quot;currentTimestampAdjustment&amp;quot;, // can add other types of calculated data in future&lt;br /&gt;
            action: &amp;quot;add&amp;quot;, // add|subtract&lt;br /&gt;
            adjustment: &amp;quot;2 days&amp;quot;, // Human-Readable Relative Format&lt;br /&gt;
          }&lt;br /&gt;
        }&lt;br /&gt;
      ],&lt;br /&gt;
		},&lt;br /&gt;
	},&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;tableName&amp;quot;: &amp;quot;MLocationsTestFloatingRelationships&amp;quot;,// servcieTag+stage+tablename&lt;br /&gt;
      &amp;quot;partitionKey&amp;quot;: &amp;quot;importBatchId&amp;quot;,&lt;br /&gt;
      &amp;quot;sortKey&amp;quot;: &amp;quot;identifierRelationshipsId&amp;quot;,&lt;br /&gt;
      &amp;quot;datas&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;importBatchId&amp;quot;: &amp;quot;2-uuuuuuuuuuuuuu&amp;quot;,&lt;br /&gt;
          &amp;quot;identifierRelationshipsId&amp;quot;: &amp;quot;lllll123456&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;importBatchId&amp;quot;: &amp;quot;2-uuuuuuuuuuuuuu&amp;quot;,&lt;br /&gt;
          &amp;quot;identifierRelationshipsId&amp;quot;: &amp;quot;lllll777777&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;importBatchId&amp;quot;: &amp;quot;2-uuuuuuuuuuuuuu&amp;quot;,&lt;br /&gt;
          &amp;quot;identifierRelationshipsId&amp;quot;: &amp;quot;lllll99999999&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
      ]&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;tableName&amp;quot;: &amp;quot;MLocationsTestFindDataMain&amp;quot;,&lt;br /&gt;
      &amp;quot;partitionKey&amp;quot;: &amp;quot;findDataId&amp;quot;,&lt;br /&gt;
      &amp;quot;datas&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;findDataId&amp;quot;: &amp;quot;111111&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;findDataId&amp;quot;: &amp;quot;22222&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;findDataId&amp;quot;: &amp;quot;333333&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
      ]&lt;br /&gt;
    }&lt;br /&gt;
  ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== graphSeedDataTags ====&lt;br /&gt;
:If set tag in this setting integrationtest is generate seed data. in storage resource graphHanler.&lt;br /&gt;
Example&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;seedData_testTag_GG&amp;quot;: [ // seedDataTag&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;nodes&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;nodeLabels&amp;quot;: [&lt;br /&gt;
            &amp;quot;SellOfferPlan_sellOfferPlanDeliveryMethodLink&amp;quot;&lt;br /&gt;
          ],&lt;br /&gt;
          &amp;quot;objectDetail&amp;quot;: {&lt;br /&gt;
            &amp;quot;identifiers&amp;quot;: {&lt;br /&gt;
              &amp;quot;sellOfferPlanDeliveryMethodLinkId&amp;quot;: {&lt;br /&gt;
				        &amp;quot;value&amp;quot;: &amp;quot;minttestrefreshSeedData_01&amp;quot;,&lt;br /&gt;
		      		},&lt;br /&gt;
			      },&lt;br /&gt;
            &amp;quot;fields&amp;quot;: {&lt;br /&gt;
              &amp;quot;productId&amp;quot;: {&lt;br /&gt;
				        &amp;quot;value&amp;quot;: &amp;quot;ddddd&amp;quot;,&lt;br /&gt;
              },&lt;br /&gt;
              &amp;quot;price&amp;quot;: {&lt;br /&gt;
				        &amp;quot;value&amp;quot;: 9999&lt;br /&gt;
              },&lt;br /&gt;
              exampleTimestamp:{&lt;br /&gt;
                calcType: &amp;quot;currentTimestampAdjustment&amp;quot;, // can add other types of calculated data in future&lt;br /&gt;
                action: &amp;quot;subtract&amp;quot;, // add|subtract&lt;br /&gt;
                adjustment: &amp;quot;2 days&amp;quot;, // Human-Readable Relative Format&lt;br /&gt;
              }&lt;br /&gt;
            }&lt;br /&gt;
          }&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;nodeLabels&amp;quot;: [&lt;br /&gt;
            &amp;quot;servcieMintTest_shoppingMall&amp;quot;&lt;br /&gt;
          ],&lt;br /&gt;
          &amp;quot;objectDetail&amp;quot;: {&lt;br /&gt;
            &amp;quot;identifiers&amp;quot;: {&lt;br /&gt;
              &amp;quot;shoppingMallId&amp;quot;: &amp;quot;minttestrefreshSeedData_shoppingMallId&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;fields&amp;quot;: {&lt;br /&gt;
              &amp;quot;name&amp;quot;: &amp;quot;hotpot-man&amp;quot;,&lt;br /&gt;
              &amp;quot;totalPrice&amp;quot;: 500&lt;br /&gt;
            }&lt;br /&gt;
          }&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;nodeLabels&amp;quot;: [&lt;br /&gt;
            &amp;quot;servcieMintTest_shoppingMallCalculateSetting&amp;quot;&lt;br /&gt;
          ],&lt;br /&gt;
          &amp;quot;objectDetail&amp;quot;: {&lt;br /&gt;
            &amp;quot;identifiers&amp;quot;: {&lt;br /&gt;
              &amp;quot;versionedDataId&amp;quot;: &amp;quot;minttestrefreshSeedData_versionedDataId&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;fields&amp;quot;: {&lt;br /&gt;
              &amp;quot;addToCalculatedValuePerOrder&amp;quot;: 10,&lt;br /&gt;
              &amp;quot;addToRateTableValuePerOrder&amp;quot;: 77&lt;br /&gt;
            }&lt;br /&gt;
          }&lt;br /&gt;
        }&lt;br /&gt;
      ],&lt;br /&gt;
      &amp;quot;relationships&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;fromObject&amp;quot;: {&lt;br /&gt;
            &amp;quot;nodeLabel&amp;quot;: &amp;quot;SellOfferPlan_sellOfferPlanDeliveryMethodLink&amp;quot;,&lt;br /&gt;
            &amp;quot;identifiers&amp;quot;: {&lt;br /&gt;
              &amp;quot;sellOfferPlanDeliveryMethodLinkId&amp;quot;: &amp;quot;minttestrefreshSeedData_01&amp;quot;&lt;br /&gt;
            }&lt;br /&gt;
          },&lt;br /&gt;
          &amp;quot;toObject&amp;quot;: {&lt;br /&gt;
            &amp;quot;nodeLabel&amp;quot;: &amp;quot;servcieMintTest_shoppingMall&amp;quot;,&lt;br /&gt;
            &amp;quot;identifiers&amp;quot;: {&lt;br /&gt;
              &amp;quot;shoppingMallId&amp;quot;: &amp;quot;minttestrefreshSeedData_shoppingMallId&amp;quot;&lt;br /&gt;
            }&lt;br /&gt;
          },&lt;br /&gt;
          &amp;quot;relationships&amp;quot;: [&lt;br /&gt;
            {&lt;br /&gt;
              &amp;quot;relTypeConcat&amp;quot;: &amp;quot;SellOfferPlan_hasCCCCCCC&amp;quot;,&lt;br /&gt;
              &amp;quot;relId&amp;quot;: &amp;quot;uuid-4s56df74s9df79w-w6de4f5w689ef&amp;quot;&lt;br /&gt;
            }&lt;br /&gt;
          ]&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;fromObject&amp;quot;: {&lt;br /&gt;
            &amp;quot;nodeLabel&amp;quot;: &amp;quot;servcieMintTest_shoppingMall&amp;quot;,&lt;br /&gt;
            &amp;quot;identifiers&amp;quot;: {&lt;br /&gt;
              &amp;quot;shoppingMallId&amp;quot;: &amp;quot;minttestrefreshSeedData_shoppingMallId&amp;quot;&lt;br /&gt;
            }&lt;br /&gt;
          },&lt;br /&gt;
          &amp;quot;toObject&amp;quot;: {&lt;br /&gt;
            &amp;quot;nodeLabel&amp;quot;: &amp;quot;servcieMintTest_shoppingMallCalculateSetting&amp;quot;,&lt;br /&gt;
            &amp;quot;identifiers&amp;quot;: {&lt;br /&gt;
              &amp;quot;versionedDataId&amp;quot;: &amp;quot;minttestrefreshSeedData_versionedDataId&amp;quot;&lt;br /&gt;
            }&lt;br /&gt;
          },&lt;br /&gt;
          &amp;quot;relationships&amp;quot;: [&lt;br /&gt;
            {&lt;br /&gt;
              &amp;quot;relTypeConcat&amp;quot;: &amp;quot;servcieMintTest_shoppingMall_currentShoppingMallCalculateSetting&amp;quot;,&lt;br /&gt;
              &amp;quot;relId&amp;quot;: &amp;quot;uuid-s122df5-s21df&amp;quot;,&lt;br /&gt;
              &amp;quot;relationshipProperty&amp;quot;: {&lt;br /&gt;
                &amp;quot;timeStamp&amp;quot;: 1234567879,&lt;br /&gt;
                &amp;quot;statusName&amp;quot;: true&lt;br /&gt;
              }&lt;br /&gt;
            },&lt;br /&gt;
            {&lt;br /&gt;
              &amp;quot;relTypeConcat&amp;quot;: &amp;quot;servcieMintTest_shoppingMall_hasShoppingMallCalculateSetting&amp;quot;,&lt;br /&gt;
              &amp;quot;relId&amp;quot;: &amp;quot;uuid-77777-99999&amp;quot;,&lt;br /&gt;
              &amp;quot;relationshipProperties&amp;quot;: {&lt;br /&gt;
                &amp;quot;statusName&amp;quot;: {&lt;br /&gt;
                  &amp;quot;value&amp;quot;: true&lt;br /&gt;
                },&lt;br /&gt;
                exampleTimestamp:{&lt;br /&gt;
                  calcType: &amp;quot;currentTimestampAdjustment&amp;quot;, // can add other types of calculated data in future&lt;br /&gt;
                  action: &amp;quot;subtract&amp;quot;, // add|subtract&lt;br /&gt;
                  adjustment: &amp;quot;2 days&amp;quot;, // Human-Readable Relative Format&lt;br /&gt;
                }                &lt;br /&gt;
              }&lt;br /&gt;
            }&lt;br /&gt;
          ]&lt;br /&gt;
        }&lt;br /&gt;
      ]&lt;br /&gt;
    }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;seedData_testTag_ABC&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;objType&amp;quot;: {&lt;br /&gt;
        &amp;quot;objectType&amp;quot;: &amp;quot;productAttributeLink&amp;quot;,&lt;br /&gt;
        &amp;quot;serviceTag&amp;quot;: &amp;quot;ProductAttribute&amp;quot;&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;objInstanceFull&amp;quot;: {&lt;br /&gt;
        &amp;quot;identifiers&amp;quot;: {&lt;br /&gt;
          &amp;quot;productAttributeLinkId&amp;quot;: &amp;quot;f90b57ca8b2fe1a83459d57da038cf50fb6d40e6&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;fields&amp;quot;: {}&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;relationships&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;relType&amp;quot;: {&lt;br /&gt;
            &amp;quot;serviceTag&amp;quot;: &amp;quot;ProductAttribute&amp;quot;,&lt;br /&gt;
            &amp;quot;relationshipTag&amp;quot;: &amp;quot;hasProductAttributeLink&amp;quot;&lt;br /&gt;
          },&lt;br /&gt;
          &amp;quot;relationshipDirection&amp;quot;: &amp;quot;to&amp;quot;,&lt;br /&gt;
          &amp;quot;targetObjType&amp;quot;: {&lt;br /&gt;
            &amp;quot;serviceTag&amp;quot;: &amp;quot;ProductStandard&amp;quot;,&lt;br /&gt;
            &amp;quot;objectType&amp;quot;: &amp;quot;productStandard&amp;quot;&lt;br /&gt;
          },&lt;br /&gt;
          &amp;quot;targetIdentifiers&amp;quot;: {&lt;br /&gt;
            &amp;quot;productId&amp;quot;: &amp;quot;f526a367a2b66cb0f37ca61b6c43f419929f521d&amp;quot;&lt;br /&gt;
          },&lt;br /&gt;
          &amp;quot;relationshipProperties&amp;quot;: {}&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;relType&amp;quot;: {&lt;br /&gt;
            &amp;quot;serviceTag&amp;quot;: &amp;quot;ProductAttribute&amp;quot;,&lt;br /&gt;
            &amp;quot;relationshipTag&amp;quot;: &amp;quot;isProductAttribute&amp;quot;&lt;br /&gt;
          },&lt;br /&gt;
          &amp;quot;relationshipDirection&amp;quot;: &amp;quot;from&amp;quot;,&lt;br /&gt;
          &amp;quot;targetObjType&amp;quot;: {&lt;br /&gt;
            &amp;quot;serviceTag&amp;quot;: &amp;quot;ProductAttribute&amp;quot;,&lt;br /&gt;
            &amp;quot;objectType&amp;quot;: &amp;quot;productAttribute&amp;quot;&lt;br /&gt;
          },&lt;br /&gt;
          &amp;quot;targetIdentifiers&amp;quot;: {&lt;br /&gt;
            &amp;quot;productAttributeId&amp;quot;: &amp;quot;f4bf7a078071d54036656df544197ba638bc3a68&amp;quot;&lt;br /&gt;
          },&lt;br /&gt;
          &amp;quot;relationshipProperties&amp;quot;: {}&lt;br /&gt;
        }&lt;br /&gt;
      ]&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;objType&amp;quot;: {&lt;br /&gt;
        &amp;quot;objectType&amp;quot;: &amp;quot;productAttributeLink&amp;quot;,&lt;br /&gt;
        &amp;quot;serviceTag&amp;quot;: &amp;quot;ProductAttribute&amp;quot;&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;objInstanceFull&amp;quot;: {&lt;br /&gt;
        &amp;quot;identifiers&amp;quot;: {&lt;br /&gt;
          &amp;quot;productAttributeLinkId&amp;quot;: &amp;quot;f90b57ca8b2fe1a83459d57da038cf50fb6d40e6&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;fields&amp;quot;: {}&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;relationships&amp;quot;: []&lt;br /&gt;
    }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;seedData_testTag_LL&amp;quot;: []&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Cleaning Seed Data ===&lt;br /&gt;
:Delete seed data for set environment of &#039;&#039;&#039;test&#039;&#039;&#039;.&lt;br /&gt;
*cleaningeDynamoOneRecordsTags.json&lt;br /&gt;
*cleaningeDynamoManyRecordsTags.json&lt;br /&gt;
&lt;br /&gt;
====cleaningeDynamoOneRecordsTags====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;cleaningSeed_TestFindData_and_Education_case_invalid01&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;tableName&amp;quot;: &amp;quot;MLocationsTestFindDataMain&amp;quot;,&lt;br /&gt;
      &amp;quot;primaryKeys&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;findDataId&amp;quot;: &amp;quot;cleaning-1&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;findDataId&amp;quot;: &amp;quot;cleaning-2&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
      ]&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;tableName&amp;quot;: &amp;quot;MLocationsTestEducation&amp;quot;,&lt;br /&gt;
      &amp;quot;primaryKeys&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;studentId&amp;quot;: &amp;quot;cleaning-AA&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;studentId&amp;quot;: &amp;quot;cleaning-BB&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;studentId&amp;quot;: &amp;quot;cleaning-CC&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
      ]&lt;br /&gt;
    }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;cleaningSeed_TestMemberPersonnel_case_invalid01&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;tableName&amp;quot;: &amp;quot;MLocationsTestMemberPersonnel&amp;quot;,&lt;br /&gt;
      &amp;quot;primaryKeys&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;userId&amp;quot;: &amp;quot;namtan&amp;quot;,&lt;br /&gt;
          &amp;quot;passwordId&amp;quot;: &amp;quot;qqqww&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;userId&amp;quot;: &amp;quot;jack&amp;quot;,&lt;br /&gt;
          &amp;quot;passwordId&amp;quot;: &amp;quot;q1&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;userId&amp;quot;: &amp;quot;Momay&amp;quot;,&lt;br /&gt;
          &amp;quot;passwordId&amp;quot;: &amp;quot;ttr&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
      ]&lt;br /&gt;
    }&lt;br /&gt;
  ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== cleaningeDynamoManyRecordsTags ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;cleaningSeed_manyData_partitionKey_only_miss_sort&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;tableName&amp;quot;: &amp;quot;MLocationsTestMemberPersonnel&amp;quot;,&lt;br /&gt;
      &amp;quot;primaryKeys&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;userId&amp;quot;: &amp;quot;many-data&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
      ]&lt;br /&gt;
    }&lt;br /&gt;
  ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*logic query table MLocationsTestMemberPersonnel use primary Keys &amp;quot;userId&amp;quot; and then delete all data from primary Keys.&lt;br /&gt;
&lt;br /&gt;
=resources=&lt;br /&gt;
syntax is object&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{ &lt;br /&gt;
	&amp;quot;Lambda&amp;quot;:{&lt;br /&gt;
		&amp;quot;{FunctionNameHdrSqs}&amp;quot;:{ // FunctionNameHdrSqs is match resourceName in file tests&lt;br /&gt;
			&amp;quot;localLacation&amp;quot;:&amp;quot;/src/FunctionNameHdrSqs.js&amp;quot;,&lt;br /&gt;
			&amp;quot;localHandler&amp;quot;:&amp;quot;main&amp;quot;, &lt;br /&gt;
			&amp;quot;functionName&amp;quot;:&amp;quot;FunctionNameHdrSqs&amp;quot;	// FunctionName is function name match key of function.yml of servcie.&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;ProcessComplexFilterHdrSqs&amp;quot;:{ &lt;br /&gt;
			&amp;quot;localLacation&amp;quot;:&amp;quot;/src/ProcessComplexFilterHdrSqs.js&amp;quot;, &lt;br /&gt;
			&amp;quot;localHandler&amp;quot;:&amp;quot;main&amp;quot;, &lt;br /&gt;
			&amp;quot;functionName&amp;quot;:&amp;quot;ProcessComplexFilterHdrSqs&amp;quot; &lt;br /&gt;
		},&lt;br /&gt;
		... &lt;br /&gt;
	},&lt;br /&gt;
	&amp;quot;Dynamodb&amp;quot;: {&lt;br /&gt;
		&amp;quot;filterMain&amp;quot;:{ // match resourceName in file tests(dynamodbOutputEventIdentifiers)&lt;br /&gt;
			&amp;quot;tableName&amp;quot;:&amp;quot;filterMain&amp;quot; &lt;br /&gt;
		}, &lt;br /&gt;
		&amp;quot;tableNameBB&amp;quot;:{ &lt;br /&gt;
			&amp;quot;tableName&amp;quot;:&amp;quot;tableNameBB&amp;quot; &lt;br /&gt;
		},&lt;br /&gt;
		... &lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=events=&lt;br /&gt;
Syntax is object&lt;br /&gt;
==Syntax Name==&lt;br /&gt;
===FileName===&lt;br /&gt;
::Event_{inputEventTag}&lt;br /&gt;
&lt;br /&gt;
===eventTag===&lt;br /&gt;
#inputEventTag&lt;br /&gt;
#outputEventTag&lt;br /&gt;
#dynamodbTag&lt;br /&gt;
&lt;br /&gt;
*file events.js is have eventTag  (inputEventTag,outputEventTag,dynamodbTag)&lt;br /&gt;
**How to create name eventTag&lt;br /&gt;
***Example case : &amp;quot;test in service complexFilter functionname ProcessComplexFilter case element type is logical basic&amp;quot;.&lt;br /&gt;
::*&#039;&#039;&#039;inputEventTag&#039;&#039;&#039;&lt;br /&gt;
::::{serviceName}_{functionName}_{caseTest}&lt;br /&gt;
&#039;&#039;Conplexfilter_ProcessComplexFilter_Typelogical_basic&#039;&#039;&lt;br /&gt;
::*&#039;&#039;&#039;outputEventTag&#039;&#039;&#039;&lt;br /&gt;
::::output_{inputEventTag}&lt;br /&gt;
&#039;&#039;output_Conplexfilter_ProcessComplexFilter_Typelogical_basic&#039;&#039;&lt;br /&gt;
::*&#039;&#039;&#039;dynamodbTag&#039;&#039;&#039;&lt;br /&gt;
::::{inputEventTag}__Dynamodb__{&#039;&#039;&#039;action*&#039;&#039;&#039;}_{tableName} &lt;br /&gt;
&#039;&#039;Conplexfilter_ProcessComplexFilter_Typelogical_basic___Dynamodb__putItem_filterMain&#039;&#039;&lt;br /&gt;
: &amp;lt;u&amp;gt;&#039;&#039;&#039;{action}&#039;&#039;&#039; is only &#039;&#039;put&#039;&#039; or &#039;&#039;update&#039;&#039;, and in case of &#039;&#039;update&#039;&#039; must only test the last step of update &amp;lt;/u&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Syntax event===&lt;br /&gt;
====initiate by handlerServcie====&lt;br /&gt;
=====Sqs=====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
// An example input and output event of Sns&lt;br /&gt;
{&lt;br /&gt;
   &amp;quot;LambdaFunctionHdrSqs_input__pass&amp;quot;:{&lt;br /&gt;
      &amp;quot;properties&amp;quot;:{&lt;br /&gt;
         &amp;quot;propertyA&amp;quot;:{&lt;br /&gt;
            &amp;quot;value&amp;quot;:&amp;quot;valueProperty1&amp;quot;&lt;br /&gt;
         },&lt;br /&gt;
         &amp;quot;propertyB&amp;quot;:{&lt;br /&gt;
            &amp;quot;properties&amp;quot;:{&lt;br /&gt;
               &amp;quot;propertyB1&amp;quot;:{&lt;br /&gt;
                  &amp;quot;value&amp;quot;:&amp;quot;valuePropertyB1&amp;quot;&lt;br /&gt;
               }&lt;br /&gt;
            }&lt;br /&gt;
         },&lt;br /&gt;
         &amp;quot;propertyC&amp;quot;:{&lt;br /&gt;
            &amp;quot;eventValue&amp;quot;:[&lt;br /&gt;
               &amp;quot;valuePropertyC1&amp;quot;,&lt;br /&gt;
               &amp;quot;valuePropertyC2&amp;quot;,&lt;br /&gt;
               &amp;quot;valuePropertyC3&amp;quot;&lt;br /&gt;
            ]&lt;br /&gt;
         }&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;snsSqsTrigger&amp;quot;:true,&lt;br /&gt;
      &amp;quot;messageAttributes&amp;quot;:{&lt;br /&gt;
            &amp;quot;msgTag&amp;quot;:{&lt;br /&gt;
               &amp;quot;value&amp;quot;:&amp;quot;msgTag&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;propertyD&amp;quot;:{&lt;br /&gt;
               &amp;quot;value&amp;quot;:&amp;quot;valuePropertyD&amp;quot;&lt;br /&gt;
            }&lt;br /&gt;
      }&lt;br /&gt;
   },&lt;br /&gt;
   {&lt;br /&gt;
      &amp;quot;output_LambdaFunctionHdrSqs_pass&amp;quot;:{&lt;br /&gt;
         &amp;quot;properties&amp;quot;:{&lt;br /&gt;
            &amp;quot;propertyA&amp;quot;:{&lt;br /&gt;
               &amp;quot;value&amp;quot;:&amp;quot;valueProperty1&amp;quot;&lt;br /&gt;
            }&lt;br /&gt;
         }&lt;br /&gt;
      }&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot; linein&amp;gt;&lt;br /&gt;
&amp;quot;snsSqsTrigger&amp;quot;:true&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Dsq=====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
// An example input and output event of Direct Sqs&lt;br /&gt;
{&lt;br /&gt;
   &amp;quot;LambdaFunctionHdrDsq_input__pass&amp;quot;:{&lt;br /&gt;
      &amp;quot;forStageMatching&amp;quot;:true,&lt;br /&gt;
      &amp;quot;properties&amp;quot;:{&lt;br /&gt;
         &amp;quot;propertyA&amp;quot;:{&lt;br /&gt;
            &amp;quot;forStageMatching&amp;quot;:true,&lt;br /&gt;
            &amp;quot;value&amp;quot;:&amp;quot;valueProperty1&amp;quot;&lt;br /&gt;
         },&lt;br /&gt;
         &amp;quot;propertyB&amp;quot;:{&lt;br /&gt;
            &amp;quot;forStageMatching&amp;quot;:true,&lt;br /&gt;
            &amp;quot;properties&amp;quot;:{&lt;br /&gt;
               &amp;quot;propertyB1&amp;quot;:{&lt;br /&gt;
                  &amp;quot;forStageMatching&amp;quot;:true,&lt;br /&gt;
                  &amp;quot;value&amp;quot;:&amp;quot;valuePropertyB1&amp;quot;&lt;br /&gt;
               }&lt;br /&gt;
            }&lt;br /&gt;
         },&lt;br /&gt;
         &amp;quot;propertyC&amp;quot;:{&lt;br /&gt;
            &amp;quot;eventValue&amp;quot;:[&lt;br /&gt;
               &amp;quot;valuePropertyC1&amp;quot;,&lt;br /&gt;
               &amp;quot;valuePropertyC2&amp;quot;,&lt;br /&gt;
               &amp;quot;valuePropertyC3&amp;quot;&lt;br /&gt;
            ]&lt;br /&gt;
         }&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;DirectSqs&amp;quot;:true,&lt;br /&gt;
      &amp;quot;messageAttributes&amp;quot;:{&lt;br /&gt;
         &amp;quot;msgTag&amp;quot;:{&lt;br /&gt;
           &amp;quot;forStageMatching&amp;quot;:true,&lt;br /&gt;
           &amp;quot;value&amp;quot;:&amp;quot;msgTag&amp;quot;&lt;br /&gt;
          },&lt;br /&gt;
          &amp;quot;propertyD&amp;quot;:{&lt;br /&gt;
           &amp;quot;forStageMatching&amp;quot;:true,&lt;br /&gt;
           &amp;quot;value&amp;quot;:&amp;quot;valuePropertyD&amp;quot;&lt;br /&gt;
          }&lt;br /&gt;
      }&lt;br /&gt;
   },&lt;br /&gt;
   {&lt;br /&gt;
      &amp;quot;output_LambdaFunctionHdrDsq_pass&amp;quot;:{&lt;br /&gt;
         &amp;quot;forStageMatching&amp;quot;:true,&lt;br /&gt;
         &amp;quot;properties&amp;quot;:{&lt;br /&gt;
            &amp;quot;propertyA&amp;quot;:{&lt;br /&gt;
               &amp;quot;forStageMatching&amp;quot;:true,&lt;br /&gt;
               &amp;quot;value&amp;quot;:&amp;quot;valueProperty1&amp;quot;&lt;br /&gt;
            }&lt;br /&gt;
         }&lt;br /&gt;
      }&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* DirectSqs = true &lt;br /&gt;
:: for initialStage of Dsq&lt;br /&gt;
* messageAttributes is optional&lt;br /&gt;
&lt;br /&gt;
=====Inv=====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;LambdaFunctionHdrInv_input__pass&amp;quot;:{&lt;br /&gt;
     &amp;quot;forStageMatching&amp;quot;:true,&lt;br /&gt;
     &amp;quot;properties&amp;quot;:{&lt;br /&gt;
        &amp;quot;propertyA&amp;quot;:{&lt;br /&gt;
           &amp;quot;forStageMatching&amp;quot;:true,&lt;br /&gt;
           &amp;quot;value&amp;quot;:&amp;quot;valueProperty1&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;propertyB&amp;quot;:{&lt;br /&gt;
           &amp;quot;forStageMatching&amp;quot;:true,&lt;br /&gt;
           &amp;quot;properties&amp;quot;:{&lt;br /&gt;
              &amp;quot;propertyB1&amp;quot;:{&lt;br /&gt;
                 &amp;quot;forStageMatching&amp;quot;:true,&lt;br /&gt;
                 &amp;quot;value&amp;quot;:&amp;quot;valuePropertyB1&amp;quot;&lt;br /&gt;
              }&lt;br /&gt;
           }&lt;br /&gt;
        }&lt;br /&gt;
     }&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
        &amp;quot;output_LambdaFunctionHdrInv_pass&amp;quot;:{&lt;br /&gt;
           &amp;quot;forStageMatching&amp;quot;:true,&lt;br /&gt;
           &amp;quot;properties&amp;quot;:{&lt;br /&gt;
              &amp;quot;propertyA&amp;quot;:{&lt;br /&gt;
                 &amp;quot;forStageMatching&amp;quot;:true,&lt;br /&gt;
                 &amp;quot;value&amp;quot;:&amp;quot;valueProperty1&amp;quot;&lt;br /&gt;
              }&lt;br /&gt;
           }&lt;br /&gt;
        }&lt;br /&gt;
     }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Api=====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
// An example input and output event of API&lt;br /&gt;
{&lt;br /&gt;
	&amp;quot;LambdaFunctionHdrApi_input__pass_notTestAuthorizer&amp;quot;: { &lt;br /&gt;
		&amp;quot;forstageMatvhing&amp;quot;: true, &lt;br /&gt;
		&amp;quot;properties&amp;quot;: { &lt;br /&gt;
			&amp;quot;body&amp;quot;: { &lt;br /&gt;
				&amp;quot;properties&amp;quot;: { &lt;br /&gt;
					&amp;quot;propertyA&amp;quot;: { &lt;br /&gt;
						&amp;quot;testValueMatches&amp;quot;: false, &lt;br /&gt;
						&amp;quot;value&amp;quot;: &amp;quot;valueProperty1&amp;quot;, &lt;br /&gt;
					}, &lt;br /&gt;
					&amp;quot;propertyB&amp;quot;: { &lt;br /&gt;
						&amp;quot;properties&amp;quot;: { &lt;br /&gt;
							&amp;quot;propertyB1&amp;quot;: { &lt;br /&gt;
								&amp;quot;value&amp;quot;: &amp;quot;valuePropertyB1&amp;quot;, &lt;br /&gt;
							} &lt;br /&gt;
						} &lt;br /&gt;
					}, &lt;br /&gt;
					&amp;quot;propertyC&amp;quot;: { &lt;br /&gt;
						&amp;quot;eventValue&amp;quot;: [ &lt;br /&gt;
							&amp;quot;valuePropertyC1&amp;quot;, &lt;br /&gt;
							&amp;quot;valuePropertyC2&amp;quot;, &lt;br /&gt;
							&amp;quot;valuePropertyC3&amp;quot;, &lt;br /&gt;
						] &lt;br /&gt;
					},&lt;br /&gt;
					... &lt;br /&gt;
				} &lt;br /&gt;
			} &lt;br /&gt;
		}&lt;br /&gt;
	}, &lt;br /&gt;
	&amp;quot;Output_LambdaFunctionHdrApi_input__pass_notTestAuthorizer&amp;quot;: { &lt;br /&gt;
		&amp;quot;properties&amp;quot;: { &lt;br /&gt;
			&amp;quot;body&amp;quot;: { &lt;br /&gt;
				&amp;quot;properties&amp;quot;: { &lt;br /&gt;
					&amp;quot;propertyA&amp;quot;: { &lt;br /&gt;
						&amp;quot;testValueMatches&amp;quot;: false, &lt;br /&gt;
						&amp;quot;value&amp;quot;: &amp;quot;valueProperty1&amp;quot;&lt;br /&gt;
					}, &lt;br /&gt;
					...&lt;br /&gt;
				} &lt;br /&gt;
			} &lt;br /&gt;
		}  &lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====S3=====&lt;br /&gt;
&lt;br /&gt;
====dynamodb====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
// An example event of Dynamodb //optional &lt;br /&gt;
{&lt;br /&gt;
	{inputEventTag}__dynamodb_{action}_{tablename}: { // eg. &amp;quot;Complexfilter_ProcessComplexfilter_logical_basic__dynamodb_update_FilterMain&amp;quot;&lt;br /&gt;
	&amp;quot;forStageMatching&amp;quot;: true,&lt;br /&gt;
     &amp;quot;properties&amp;quot;: {&lt;br /&gt;
        &amp;quot;filterMainUniqueRequestId&amp;quot;: {&lt;br /&gt;
          &amp;quot;testValueMatches&amp;quot;: fase,&lt;br /&gt;
          &amp;quot;value&amp;quot;: &amp;quot;bbc4f4a9-2032-4dec-9129-8c7d169fecc5&amp;quot;&lt;br /&gt;
         },&lt;br /&gt;
        &amp;quot;filterObject&amp;quot;: {&lt;br /&gt;
        &amp;quot;forStageMatching&amp;quot;: true,&lt;br /&gt;
        &amp;quot;properties&amp;quot;: {&lt;br /&gt;
          &amp;quot;logicalType&amp;quot;: {&lt;br /&gt;
            &amp;quot;value&amp;quot;: &amp;quot;partitionKey&amp;quot;&lt;br /&gt;
          },&lt;br /&gt;
          &amp;quot;comparison&amp;quot;: {&lt;br /&gt;
            &amp;quot;value&amp;quot;: &amp;quot;equals&amp;quot;&lt;br /&gt;
          },&lt;br /&gt;
          &amp;quot;type&amp;quot;: {&lt;br /&gt;
            &amp;quot;value&amp;quot;: &amp;quot;logical&amp;quot;&lt;br /&gt;
          },&lt;br /&gt;
          &amp;quot;partitionKey&amp;quot;: {&lt;br /&gt;
            &amp;quot;forStageMatching&amp;quot;: true,&lt;br /&gt;
            &amp;quot;value&amp;quot;: &amp;quot;mockIntegratioTestCPF&amp;quot;&lt;br /&gt;
          }&lt;br /&gt;
        }&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;filterMainExpiryTime&amp;quot;: {&lt;br /&gt;
        &amp;quot;testValueMatches&amp;quot;: fase,&lt;br /&gt;
        &amp;quot;value&amp;quot;: 1731980802858&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;filterMainStatus&amp;quot;: {&lt;br /&gt;
       &amp;quot;forStageMatching&amp;quot;: true,&lt;br /&gt;
        &amp;quot;value&amp;quot;: &amp;quot;processing&amp;quot;&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;createTime&amp;quot;: {&lt;br /&gt;
        &amp;quot;testValueMatches&amp;quot;: fase,&lt;br /&gt;
        &amp;quot;value&amp;quot;: 1731894402678&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;objType&amp;quot;: {&lt;br /&gt;
        &amp;quot;forStageMatching&amp;quot;: true,&lt;br /&gt;
        &amp;quot;properties&amp;quot;: {&lt;br /&gt;
          &amp;quot;serviceTag&amp;quot;: {&lt;br /&gt;
            &amp;quot;forStageMatching&amp;quot;: true,&lt;br /&gt;
            &amp;quot;value&amp;quot;: &amp;quot;IntTesting&amp;quot;&lt;br /&gt;
          },&lt;br /&gt;
          &amp;quot;objectType&amp;quot;: {&lt;br /&gt;
            &amp;quot;forStageMatching&amp;quot;: true,&lt;br /&gt;
            &amp;quot;value&amp;quot;: &amp;quot;TestRecord&amp;quot;&lt;br /&gt;
          }&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;keyValues&amp;quot;: {&lt;br /&gt;
      &amp;quot;filterMainId&amp;quot;: &amp;quot;4865d2451a621cb7f71225cfabf2df4f98e20801&amp;quot;,&lt;br /&gt;
      &amp;quot;objTypeId&amp;quot;: &amp;quot;cdb170690571df7522b3850920fce02507c077ee&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
	} &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* partition key: filterMainId&lt;br /&gt;
* sort key: objTypeId&lt;br /&gt;
&lt;br /&gt;
[[2021-01-15 - Integration Testing - Adding DynamoDB result tests]]&lt;br /&gt;
&lt;br /&gt;
===Type paramiter===&lt;br /&gt;
use for evnet and dyanmodb event&lt;br /&gt;
====Normal====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 object: {&lt;br /&gt;
  forStageMatching: true,&lt;br /&gt;
  properties: {&lt;br /&gt;
    name:{&lt;br /&gt;
     forStageMatching: true,&lt;br /&gt;
     value:&amp;quot;Tom&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
   }&lt;br /&gt;
 },&lt;br /&gt;
 array: {&lt;br /&gt;
  forStageMatching: true,&lt;br /&gt;
  useIsEqual: true,&lt;br /&gt;
  eventValue: [&lt;br /&gt;
   {&lt;br /&gt;
     &amp;quot;relTypeAndDirection&amp;quot;: {&lt;br /&gt;
       &amp;quot;relType&amp;quot;: {&lt;br /&gt;
         &amp;quot;serviceTag&amp;quot;: &amp;quot;maxxCart2&amp;quot;,&lt;br /&gt;
         &amp;quot;relationshipTag&amp;quot;: &amp;quot;hasCartOrder&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;relationshipDirection&amp;quot;: &amp;quot;from&amp;quot;&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;targetObjects&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;objType&amp;quot;: {&lt;br /&gt;
           &amp;quot;serviceTag&amp;quot;: &amp;quot;maxxCart2&amp;quot;,&lt;br /&gt;
           &amp;quot;objectType&amp;quot;: &amp;quot;cartOrder&amp;quot;&lt;br /&gt;
          }&lt;br /&gt;
        }&lt;br /&gt;
      ]&lt;br /&gt;
    }&lt;br /&gt;
  ]&lt;br /&gt;
 },&lt;br /&gt;
 number: {&lt;br /&gt;
  forStageMatching: true,&lt;br /&gt;
  value: 1111&lt;br /&gt;
 },&lt;br /&gt;
 string: {&lt;br /&gt;
  forStageMatching: true,&lt;br /&gt;
  value: &amp;quot;hi&amp;quot;&lt;br /&gt;
 },&lt;br /&gt;
 boolean: {&lt;br /&gt;
  forStageMatching: true,&lt;br /&gt;
  value: true&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
 forStageMatching: true&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
::set true for check match value,It is not necessary to set every value&lt;br /&gt;
:::use in test importent paramiter&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
testValueMatches:false&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
::setting paramiter require on create but can not test random value eg: identifier or timeStamp or uuid&lt;br /&gt;
&lt;br /&gt;
====Empty====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
 EmptyString:{&lt;br /&gt;
forStageMatching: true,&lt;br /&gt;
  value:&amp;quot;&amp;quot;&lt;br /&gt;
 },&lt;br /&gt;
 EmptyArray:{&lt;br /&gt;
   forStageMatching: true,&lt;br /&gt;
   useIsEqual: true,&lt;br /&gt;
   eventValue: []&lt;br /&gt;
 },&lt;br /&gt;
 EmptyObject:{&lt;br /&gt;
  forStageMatching: true,&lt;br /&gt;
  value:{}&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Error====&lt;br /&gt;
can test noRetryError&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;quot;errorMessage&amp;quot;: {&lt;br /&gt;
    forStageMatching: true,&lt;br /&gt;
    &amp;quot;value&amp;quot;: &amp;quot;Not found schema of {serviceTag:TestGraphHandler, objectType:notFoundObjType}&amp;quot;&lt;br /&gt;
   }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Paramiter random====&lt;br /&gt;
Can not test case random numbber or uuid.&lt;br /&gt;
But requriOnCreate mush be set &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
testValueMatches:false&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
or set&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
forStageMatching:false&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=tests=&lt;br /&gt;
Syntax is array of object&lt;br /&gt;
==Syntax name== &lt;br /&gt;
===Testtag name ===&lt;br /&gt;
*{integrationTestTag}&lt;br /&gt;
#Test Own servcie or not a lot stage&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
Test_{inputEventTag}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
#Mix multiple servcie and multiple stage&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt; &lt;br /&gt;
IntegrationTest_{inputEventTag}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===File name ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt; &lt;br /&gt;
{integrationTestTag}.json&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Setting of test==&lt;br /&gt;
[[Service - Integration Test Config#tests.js Syntax|syntax test]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
            integrationTestTag: {integrationTestTag},&lt;br /&gt;
            productionSafe: true|false, //default false&lt;br /&gt;
            noInitialStage: true, // default false, if set to true, no error when no foundInitialStages found&lt;br /&gt;
            errorIfStageUndefined: true|false, //default false&lt;br /&gt;
            errorIfInvokeUndefined: true|false, //default false,&lt;br /&gt;
            dynamoDBSeedDataTags:[&amp;quot;seedDataDB_test_case_xx&amp;quot;], //[seedDataTag] optional if have seed data for test&lt;br /&gt;
            graphSeedDataTags:[&amp;quot;seedDataGraph_test_case_xx&amp;quot;], //[seedDataTag] optional if have seed data for test&lt;br /&gt;
            cleaningeDynamoOneRecordsTags: [&amp;quot;cleaningSeed_partitionKey_sortKey_normol&amp;quot;], //optional&lt;br /&gt;
            cleaningeDynamoManyRecordsTags: [], // optional&lt;br /&gt;
            stages:[&lt;br /&gt;
               ...&lt;br /&gt;
            ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
*[[2025-11-20 IntegrationTest#dynamoDBSeedDataTags|dynamoDBSeedDataTags]]&lt;br /&gt;
*[[2025-11-20 IntegrationTest#graphSeedDataTags|graphSeedDataTags]]&lt;br /&gt;
*[[2025-11-20 IntegrationTest#cleaningeDynamoOneRecordsTags|cleaningeDynamoOneRecordsTags]]&lt;br /&gt;
*[[2025-11-20 IntegrationTest#cleaningeDynamoManyRecordsTags|cleaningeDynamoManyRecordsTags]]&lt;br /&gt;
&lt;br /&gt;
==Stages==&lt;br /&gt;
====Initiate stage====&lt;br /&gt;
:&#039;&#039;&#039;&amp;quot;initialStage&amp;quot;:true&#039;&#039;&#039;&lt;br /&gt;
[[Service_-_Integration_Test_Config#tests.js Syntax|detail property of test]]&lt;br /&gt;
=====HandlerService=====&lt;br /&gt;
======Sqs======&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;quot;stages&amp;quot;:[&lt;br /&gt;
         {&lt;br /&gt;
            &amp;quot;initialStage&amp;quot;:true,&lt;br /&gt;
            &amp;quot;inputEventTag&amp;quot;:&amp;quot;Locations_ProcessLocationNodeSomting_casenotHaveData&amp;quot;,&lt;br /&gt;
            &amp;quot;serviceName&amp;quot;:&amp;quot;Locations&amp;quot;,&lt;br /&gt;
            &amp;quot;resourceType&amp;quot;:&amp;quot;Lambda&amp;quot;,&lt;br /&gt;
            &amp;quot;resourceName&amp;quot;:&amp;quot;ProcessLocationNodeSomtingHdrDsq&amp;quot;,&lt;br /&gt;
            &amp;quot;outputEventTag&amp;quot;:&amp;quot;Output_Locations_ProcessLocationNodeSomting_casenotHaveData&amp;quot;&lt;br /&gt;
         }&lt;br /&gt;
      ]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
======Dsq======&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
stages: [&lt;br /&gt;
        {&lt;br /&gt;
          initialStage: true,&lt;br /&gt;
          inputEventTag: &#039;LambdaFunctionHdrDsq_input_singleStage_directSqs__pass&#039;,&lt;br /&gt;
          serviceName: &#039;ServiceTemplate&#039;,&lt;br /&gt;
          resourceType: &#039;Lambda&#039;,&lt;br /&gt;
          resourceName: &#039;LambdaFunctionHdrDsq&#039;,&lt;br /&gt;
          outputEventTag: &#039;LambdaFunctionHdrDsq_output__returnvalue_pass&#039;,&lt;br /&gt;
          // **** not set snsServiceName and snsTopic&lt;br /&gt;
          // can be test dynamodbOutput&lt;br /&gt;
        }&lt;br /&gt;
      ]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
======Api======&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;quot;stages&amp;quot;:[&lt;br /&gt;
    {&lt;br /&gt;
       &amp;quot;initialStage&amp;quot;:true,&lt;br /&gt;
       &amp;quot;inputEventTag&amp;quot;:&amp;quot;LambdaFunctionHdrApi_input__pass&amp;quot;,&lt;br /&gt;
       &amp;quot;serviceName&amp;quot;:&amp;quot;ServiceTemplate&amp;quot;,&lt;br /&gt;
       &amp;quot;resourceType&amp;quot;:&amp;quot;Lambda&amp;quot;,&lt;br /&gt;
       &amp;quot;resourceName&amp;quot;:&amp;quot;LambdaFunctionHdrApi&amp;quot;,&lt;br /&gt;
       &amp;quot;outputEventTag&amp;quot;:&amp;quot;LambdaFunctionHdrApi_output__pass&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
======Inv======&lt;br /&gt;
*&#039;&#039;&#039;single stage&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
[{&lt;br /&gt;
   &amp;quot;integrationTestTag&amp;quot;:&amp;quot;LambdaFunctionHdrInv__pass&amp;quot;,&lt;br /&gt;
   &amp;quot;productionSafe&amp;quot;:false,&lt;br /&gt;
   &amp;quot;errorIfStageUndefined&amp;quot;:false,&lt;br /&gt;
   &amp;quot;errorIfInvokeUndefined&amp;quot;:false,&lt;br /&gt;
   &amp;quot;dynamoDBSeedDataTags&amp;quot;:[&amp;quot;seedDataDB_test_case_xx&amp;quot;], //[seedDataTag] optional if have seed data for test&lt;br /&gt;
   &amp;quot;graphSeedDataTags&amp;quot;:[&amp;quot;seedDataGraph_test_case_xx&amp;quot;], //[seedDataTag] optional if have seed data for test&lt;br /&gt;
   &amp;quot;cleaningeDynamoOneRecordsTags&amp;quot;: [&amp;quot;cleaningSeed_partitionKey_sortKey_normol&amp;quot;], //optional&lt;br /&gt;
   &amp;quot;cleaningeDynamoManyRecordsTags&amp;quot;: []&lt;br /&gt;
   &amp;quot;stages&amp;quot;:[&lt;br /&gt;
      {&lt;br /&gt;
         &amp;quot;initialStage&amp;quot;:true,&lt;br /&gt;
         &amp;quot;inputEventTag&amp;quot;:&amp;quot;LambdaFunctionHdrInv_input__pass&amp;quot;,&lt;br /&gt;
         &amp;quot;serviceName&amp;quot;:&amp;quot;ServiceTemplate&amp;quot;,&lt;br /&gt;
         &amp;quot;resourceType&amp;quot;:&amp;quot;Lambda&amp;quot;,&lt;br /&gt;
         &amp;quot;resourceName&amp;quot;:&amp;quot;LambdaFunctionHdrInv&amp;quot;,&lt;br /&gt;
         &amp;quot;outputEventTag&amp;quot;:&amp;quot;LambdaFunctionHdrInv_output__pass&amp;quot;&lt;br /&gt;
      }&lt;br /&gt;
   ]&lt;br /&gt;
}]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;invoke multiple stage&#039;&#039;&#039; &lt;br /&gt;
:*Each stage test can invoke multiple lambda by use &amp;quot;eventStage Tag&amp;quot; point to stage for test integration test.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
[{&lt;br /&gt;
   &amp;quot;integrationTestTag&amp;quot;:&amp;quot;LambdaFunctionHdrInv_invokes__pass&amp;quot;,&lt;br /&gt;
   &amp;quot;productionSafe&amp;quot;:false,&lt;br /&gt;
   &amp;quot;errorIfStageUndefined&amp;quot;:false,&lt;br /&gt;
   &amp;quot;errorIfInvokeUndefined&amp;quot;:false,&lt;br /&gt;
   &amp;quot;dynamoDBSeedDataTags&amp;quot;:[], //[seedDataTag] optional if have seed data for test&lt;br /&gt;
   &amp;quot;graphSeedDataTags&amp;quot;:[], //[seedDataTag] optional if have seed data for test&lt;br /&gt;
   &amp;quot;cleaningeDynamoOneRecordsTags&amp;quot;: [], //optional&lt;br /&gt;
   &amp;quot;cleaningeDynamoManyRecordsTags&amp;quot;: [], // optional&lt;br /&gt;
   &amp;quot;stages&amp;quot;:[&lt;br /&gt;
      {&lt;br /&gt;
         &amp;quot;initialStage&amp;quot;:true,&lt;br /&gt;
         &amp;quot;inputEventTag&amp;quot;:&amp;quot;LambdaFunctionHdrInv_input__pass&amp;quot;,&lt;br /&gt;
         &amp;quot;serviceName&amp;quot;:&amp;quot;ServiceTemplate&amp;quot;,&lt;br /&gt;
         &amp;quot;resourceType&amp;quot;:&amp;quot;Lambda&amp;quot;,&lt;br /&gt;
         &amp;quot;resourceName&amp;quot;:&amp;quot;LambdaFunctionHdrInv&amp;quot;,&lt;br /&gt;
         &amp;quot;outputEventTag&amp;quot;:&amp;quot;LambdaFunctionHdrInv_output__pass&amp;quot;,&lt;br /&gt;
         &amp;quot;invokes&amp;quot;:[&lt;br /&gt;
            {&lt;br /&gt;
               &amp;quot;eventStageTag&amp;quot;:&amp;quot;service_invokesB__pass&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            {&lt;br /&gt;
               &amp;quot;eventStageTag&amp;quot;:&amp;quot;service_invokesD__pass&amp;quot;&lt;br /&gt;
            }&lt;br /&gt;
         ]&lt;br /&gt;
      },&lt;br /&gt;
      {&lt;br /&gt;
         &amp;quot;eventStageTag&amp;quot;:&amp;quot;service_invokesB__pass&amp;quot;,&lt;br /&gt;
         &amp;quot;inputEventTag&amp;quot;:&amp;quot;input_service_invokes__pass&amp;quot;,&lt;br /&gt;
         &amp;quot;serviceName&amp;quot;:&amp;quot;ServiceTemplate_B&amp;quot;,&lt;br /&gt;
         &amp;quot;resourceType&amp;quot;:&amp;quot;Lambda&amp;quot;,&lt;br /&gt;
         &amp;quot;resourceName&amp;quot;:&amp;quot;LambdaFunction_B_HdrInv&amp;quot;,&lt;br /&gt;
         &amp;quot;outputEventTag&amp;quot;:&amp;quot;output_service_invokes__pass&amp;quot;&lt;br /&gt;
      },&lt;br /&gt;
      {&lt;br /&gt;
         &amp;quot;eventStageTag&amp;quot;:&amp;quot;service_invokesD__pass&amp;quot;,&lt;br /&gt;
         &amp;quot;inputEventTag&amp;quot;:&amp;quot;input_service_invokesD__pass&amp;quot;,&lt;br /&gt;
         &amp;quot;serviceName&amp;quot;:&amp;quot;ServiceTemplate_D&amp;quot;,&lt;br /&gt;
         &amp;quot;resourceType&amp;quot;:&amp;quot;Lambda&amp;quot;,&lt;br /&gt;
         &amp;quot;resourceName&amp;quot;:&amp;quot;LambdaFunction_D_HdrInv&amp;quot;,&lt;br /&gt;
         &amp;quot;outputEventTag&amp;quot;:&amp;quot;output_service_invokesD__pass&amp;quot;&lt;br /&gt;
      }&lt;br /&gt;
   ]&lt;br /&gt;
}]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
======S3======&lt;br /&gt;
======Batch======&lt;br /&gt;
&lt;br /&gt;
====GeneratedSeedData====&lt;br /&gt;
*Integrationtest must be delete identifier every time before test.&lt;br /&gt;
*Set &#039;generatedSeedData&#039; in file tests.json case by case of stage eg: stages[0] create identifier is randomOnCreate will set &#039;generatedSeedData&#039; and stages[1] create relationship is randomOnCreate(It is usually random, except in the case of relationship version) set generatedSeedData this stages[1].&lt;br /&gt;
*How to delete case identifier rendomOnCreate?: set in stage use setting generateSeedData &amp;quot;randomOnCreateIdentifier&amp;quot;&lt;br /&gt;
#randomOnCreateIdentifier&lt;br /&gt;
#notRandomOnIdentifier&lt;br /&gt;
#relationships&lt;br /&gt;
=====randomOnCreateIdentifier=====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;quot;stages&amp;quot;: [&lt;br /&gt;
      {&lt;br /&gt;
        &amp;quot;initialStage&amp;quot;: true,&lt;br /&gt;
        &amp;quot;inputEventTag&amp;quot;: &amp;quot;MLocation_CreateHdrSqs__case_NodeVersionData_Jaya&amp;quot;,&lt;br /&gt;
        &amp;quot;serviceTag&amp;quot;: &amp;quot;MLocations&amp;quot;,&lt;br /&gt;
        &amp;quot;resourceType&amp;quot;: &amp;quot;Lambda&amp;quot;,&lt;br /&gt;
        &amp;quot;resourceName&amp;quot;: &amp;quot;CreateHdrSqs&amp;quot;,&lt;br /&gt;
        &amp;quot;snsServiceName&amp;quot;: &amp;quot;MLocations&amp;quot;,&lt;br /&gt;
        &amp;quot;snsTopic&amp;quot;: &amp;quot;Create_In&amp;quot;,&lt;br /&gt;
        &amp;quot;generatedSeedData&amp;quot;: {&lt;br /&gt;
          &amp;quot;randomOnCreateIdentifier&amp;quot;: [&lt;br /&gt;
            {&lt;br /&gt;
              &amp;quot;objType&amp;quot;: {&lt;br /&gt;
                &amp;quot;serviceTag&amp;quot;: &amp;quot;MLocations&amp;quot;,&lt;br /&gt;
                &amp;quot;objectType&amp;quot;: &amp;quot;Member&amp;quot;&lt;br /&gt;
              },&lt;br /&gt;
              &amp;quot;identifierValue&amp;quot;: &amp;quot;Jaya-member-001&amp;quot;&lt;br /&gt;
            }&lt;br /&gt;
          ]&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
=====notRandomOnIdentifier=====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;quot;stages&amp;quot;: [&lt;br /&gt;
      {&lt;br /&gt;
        &amp;quot;initialStage&amp;quot;: true,&lt;br /&gt;
        &amp;quot;inputEventTag&amp;quot;: &amp;quot;MLocation_CreateHdrSqs__case_NodeVersionData_Jaya&amp;quot;,&lt;br /&gt;
        &amp;quot;serviceTag&amp;quot;: &amp;quot;MLocations&amp;quot;,&lt;br /&gt;
        &amp;quot;resourceType&amp;quot;: &amp;quot;Lambda&amp;quot;,&lt;br /&gt;
        &amp;quot;resourceName&amp;quot;: &amp;quot;CreateHdrSqs&amp;quot;,&lt;br /&gt;
        &amp;quot;snsServiceName&amp;quot;: &amp;quot;MLocations&amp;quot;,&lt;br /&gt;
        &amp;quot;snsTopic&amp;quot;: &amp;quot;Create_In&amp;quot;,&lt;br /&gt;
        &amp;quot;generatedSeedData&amp;quot;: {&lt;br /&gt;
          &amp;quot;notRandomOnIdentifier&amp;quot;: [&lt;br /&gt;
            {&lt;br /&gt;
              &amp;quot;objType&amp;quot;: {&lt;br /&gt;
                &amp;quot;serviceTag&amp;quot;: &amp;quot;gggg&amp;quot;,&lt;br /&gt;
                &amp;quot;objectType&amp;quot;: &amp;quot;ssssss&amp;quot;&lt;br /&gt;
              },&lt;br /&gt;
              &amp;quot;identifiers&amp;quot;: {&lt;br /&gt;
                &amp;quot;topId&amp;quot;: &amp;quot;123456&amp;quot;&lt;br /&gt;
              }&lt;br /&gt;
            }&lt;br /&gt;
          ]&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    ]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
=====relationships=====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;quot;stages&amp;quot;: [&lt;br /&gt;
      {&lt;br /&gt;
        &amp;quot;initialStage&amp;quot;: true,&lt;br /&gt;
        &amp;quot;inputEventTag&amp;quot;: &amp;quot;MLocation_CreateHdrSqs__case_NodeVersionData_Jaya&amp;quot;,&lt;br /&gt;
        &amp;quot;serviceTag&amp;quot;: &amp;quot;MLocations&amp;quot;,&lt;br /&gt;
        &amp;quot;resourceType&amp;quot;: &amp;quot;Lambda&amp;quot;,&lt;br /&gt;
        &amp;quot;resourceName&amp;quot;: &amp;quot;CreateHdrSqs&amp;quot;,&lt;br /&gt;
        &amp;quot;snsServiceName&amp;quot;: &amp;quot;MLocations&amp;quot;,&lt;br /&gt;
        &amp;quot;snsTopic&amp;quot;: &amp;quot;Create_In&amp;quot;,&lt;br /&gt;
        &amp;quot;generatedSeedData&amp;quot;: {&lt;br /&gt;
         &amp;quot;relationships&amp;quot;: [&lt;br /&gt;
            {&lt;br /&gt;
              &amp;quot;relType&amp;quot;: {&lt;br /&gt;
                &amp;quot;serviceTag&amp;quot;: &amp;quot;PaymentMethodGeneric&amp;quot;,&lt;br /&gt;
                &amp;quot;relationshipTag&amp;quot;: &amp;quot;disabledPaymentMethodGenericPropertyValue&amp;quot;&lt;br /&gt;
              },&lt;br /&gt;
              &amp;quot;relId&amp;quot;: &amp;quot;f4f73de7-647c-4b3b-8043-87cc002f361a&amp;quot;&lt;br /&gt;
            }&lt;br /&gt;
          ]&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    ]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Dynamodb==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
stages: [&lt;br /&gt;
        {&lt;br /&gt;
          initialStage: true,&lt;br /&gt;
          inputEventTag: &#039;Locations_LambdaFunctionHdrDsq_singleStage_directSqs__pass&#039;,&lt;br /&gt;
          serviceName: &#039;ServiceTemplate&#039;,&lt;br /&gt;
          resourceType: &#039;Lambda&#039;,&lt;br /&gt;
          resourceName: &#039;LambdaFunctionHdrDsq&#039;,&lt;br /&gt;
          outputEventTag: &#039;output_Locations_LambdaFunctionHdrDsq_singleStage_directSqs__pass&#039;,&lt;br /&gt;
          dynamodbOutputEventIdentifiers: [&lt;br /&gt;
			{&lt;br /&gt;
              serviceName: {tableName}, //service that deployed the DynamoDB table, so can build table&#039;s full resource name&lt;br /&gt;
              resourceName: {resourceName}, //DynamoDB resourceName&lt;br /&gt;
              eventTag: {eventTagDynamoDB}&lt;br /&gt;
		    }&lt;br /&gt;
          ],&lt;br /&gt;
        }&lt;br /&gt;
      ]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Result of integrationtest =&lt;br /&gt;
Data have 2 table &amp;quot;TestRecord&amp;quot; and &amp;quot;TestUnit&amp;quot;.&lt;br /&gt;
:- TestRecord is table all unti of stage inside eg input output invokes and dynamodb&lt;br /&gt;
:- TestUnit is store status each unit &lt;br /&gt;
each unit save in table TestUnit&lt;br /&gt;
testRecordId is  name of test concat with testTime.&lt;br /&gt;
testUnitId is point to position of unti instage.&lt;br /&gt;
resultStatus is status of unit.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
eg:&lt;br /&gt;
input_0 = stages index 0 result &#039;&#039;&#039;input&#039;&#039;&#039;&lt;br /&gt;
output_1 = stages index 1 result &#039;&#039;&#039;output&#039;&#039;&#039;&lt;br /&gt;
invokeInput_0_1 = stages index 0 result &#039;&#039;&#039;invokes&#039;&#039;&#039; index 1 position input &lt;br /&gt;
invokeOutput_0_1 = stages index 0 result &#039;&#039;&#039;invokes&#039;&#039;&#039; index 1 position output&lt;br /&gt;
dynamodb_0_1 =  stages index 0 result &#039;&#039;&#039;dynamodb&#039;&#039;&#039; index 1.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
after all TestUnit finish (check  by awaitingMultiplestep penditnStep is integrationtestTag awaitingStepId is each TestUnit )&lt;br /&gt;
check all awaitingStep finish send message to ultimateIntegrationtest for sumla all test is status&lt;br /&gt;
&lt;br /&gt;
== Summary of test status == &lt;br /&gt;
:1.testStatus is &amp;quot;passed&amp;quot; all unit passed.&lt;br /&gt;
:2.testStatus is &amp;quot;failed&amp;quot;  have some is failed.&lt;br /&gt;
:3.testStatus is &amp;quot;processing&amp;quot; have some is have status processing after check all awaiting step is finish.&lt;br /&gt;
:4.testStatus is &amp;quot;failed&amp;quot; have record &amp;quot;errorsTest&amp;quot; in case &amp;quot;not match stage invoke&amp;quot;, &#039;found multiple matchingInvokes&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*[[2025-02-20 - Integration Test examples#tests.js Syntax|Syntax Dynamodb]]&lt;br /&gt;
&lt;br /&gt;
=How to test integrationtest s3=&lt;br /&gt;
[[Developer guide for making Integration Tests]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Working documents| 2025-11-20]]&lt;br /&gt;
[[Category:Working documents - Integration Testing| 2025-11-20]]&lt;/div&gt;</summary>
		<author><name>Mint</name></author>
	</entry>
	<entry>
		<id>https://izara.io/wiki/index.php?title=2025-11-20_IntegrationTest&amp;diff=4573</id>
		<title>2025-11-20 IntegrationTest</title>
		<link rel="alternate" type="text/html" href="https://izara.io/wiki/index.php?title=2025-11-20_IntegrationTest&amp;diff=4573"/>
		<updated>2026-08-11T07:12:33Z</updated>

		<summary type="html">&lt;p&gt;Mint: /* dynamoDBSeedDataTags */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Reference:&lt;br /&gt;
&lt;br /&gt;
*[[2020-10-01 - Integration Test Config - Functions|IntegrationtestConfig]]&lt;br /&gt;
*[[2020-10-01 - Integration Testing - Lambda Functions|Integrationtesting]]&lt;br /&gt;
*[[2025-02-20 - Integration Test examples|Example]]&lt;br /&gt;
&lt;br /&gt;
= File extension =&lt;br /&gt;
&lt;br /&gt;
uploadS3: &amp;quot;.json&amp;quot;&lt;br /&gt;
integrationtestConfig: &amp;quot;.js&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=TestRecord=&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JSON&amp;quot;&amp;gt;&lt;br /&gt;
[&lt;br /&gt;
  {&lt;br /&gt;
    integrationTestTag: &amp;quot;Integrationtest_xx&amp;quot;,&lt;br /&gt;
    testStartedTimestamp: 111111111, // start time&lt;br /&gt;
    bucketName: &amp;quot;integrationtest-config-us-east-2&amp;quot;,&lt;br /&gt;
    lastUpdateUniqueRequestId: &amp;quot;sssss&amp;quot;, //_izContext.uniqueRequestId protacts race coditionn dynamodb&lt;br /&gt;
    testStatus: &amp;quot;passed&amp;quot;,//failed,processing,passed&lt;br /&gt;
    testCompleteTimestamp: 1111113, // all test finish&lt;br /&gt;
    stages: [&lt;br /&gt;
      {&lt;br /&gt;
        stageConfig: {&lt;br /&gt;
          //straight copy of this stage from integration test config&lt;br /&gt;
          inputEventTag: &amp;quot;xx&amp;quot;,&lt;br /&gt;
          inputEventConfig: {//event input&lt;br /&gt;
          },&lt;br /&gt;
          outputEventTag: &amp;quot;output_xx&amp;quot;,&lt;br /&gt;
          outputEventConfig: {//event out put&lt;br /&gt;
          },&lt;br /&gt;
          resourceName: &amp;quot;ComplexfilterTestProcessComplexfilter&amp;quot;,// function name&lt;br /&gt;
          resourceType: &amp;quot;Lambda&amp;quot;, // function name&lt;br /&gt;
          serviceTag: &amp;quot;Complexfilter&amp;quot;,// (initeate sqs)&lt;br /&gt;
          snsServiceName: &amp;quot;Complexfilter&amp;quot;,// (initeate sqs)&lt;br /&gt;
          snsTopic: &amp;quot;PorcessComplexfilter_In&amp;quot;// (initeate sqs)&lt;br /&gt;
&lt;br /&gt;
        },&lt;br /&gt;
        stageStatus: &amp;quot;waiting&amp;quot;, //waiting|passed|failed,&lt;br /&gt;
        stageFinishedTimestamp: 111111111,// time that all tests finished and testRecord.stages.{stageKey}.stageStatus updated&lt;br /&gt;
        stageResults: {&lt;br /&gt;
          //results at the point of entering the resource (eg a Lambda function is invoked)&lt;br /&gt;
          inputResult: {&lt;br /&gt;
            resultTimestamp: 111111111,//{time result saved},&lt;br /&gt;
            resultStatus: &amp;quot;passed&amp;quot;,//passed|failed,&lt;br /&gt;
            requestParams: {//event input&lt;br /&gt;
            }&lt;br /&gt;
          },&lt;br /&gt;
          //results at the point of returning from the resource (eg a Lambda function returns)&lt;br /&gt;
          outputResult: {&lt;br /&gt;
            resultTimestamp: 111111111,//{time result saved},&lt;br /&gt;
            resultStatus: &amp;quot;passed&amp;quot;,//passed|failed,&lt;br /&gt;
            requestParams: {//event input&lt;br /&gt;
            }&lt;br /&gt;
          },&lt;br /&gt;
          //results at the point of invoking an external resource (eg the tested Lambda function is invoking another Lambda function)&lt;br /&gt;
          invokes: {&lt;br /&gt;
            &amp;quot;serviceName_resourceType_resourceName_inputEventTag &amp;quot;: {&lt;br /&gt;
              invokeTimestamp: 111111111,//{ time result saved },&lt;br /&gt;
              resultTimestamp: 111111112,//{ time result saved },&lt;br /&gt;
              resultStatus: &amp;quot;passed&amp;quot;,//passed | failed,&lt;br /&gt;
              invokeParams: {},//{event invoke input config }&lt;br /&gt;
              requestParams: {}// event invoke input request&lt;br /&gt;
            },&lt;br /&gt;
          },&lt;br /&gt;
          dynamodbResults: [&lt;br /&gt;
            {&lt;br /&gt;
              indexOfDynamodbOutput: 0,&lt;br /&gt;
              requestParams,&lt;br /&gt;
              resultStatus: &amp;quot;passed&amp;quot;,//&lt;br /&gt;
              resultTimestamp: 22222&lt;br /&gt;
            }]&lt;br /&gt;
&lt;br /&gt;
        },&lt;br /&gt;
        stageErrors: [&lt;br /&gt;
          //misc errors encountered&lt;br /&gt;
        ]&lt;br /&gt;
      }]&lt;br /&gt;
&lt;br /&gt;
  }&lt;br /&gt;
]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Seed Data=&lt;br /&gt;
integrationtest manager seed date 2 process&lt;br /&gt;
&lt;br /&gt;
=== Main Seed Data===&lt;br /&gt;
:Save file in s3 (in &#039;&#039;&#039;buckname&#039;&#039;&#039; :integrationtest-config-us-east-2, &#039;&#039;&#039;folder&#039;&#039;&#039;:seedData_integrationTest).For other dev use service,If a developer wants to add more for other important testing purposes.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;How to use:&#039;&#039;&#039;&lt;br /&gt;
#Add it from the s3 bucket at this point&lt;br /&gt;
#Run batch refreshSeedData [[Developer guide for making Integration Tests#Bash script|batch RefreshSeedData]]&lt;br /&gt;
&#039;&#039;&#039;Logic&#039;&#039;&#039;:Process by storage resouse (graph or dynamodb)&lt;br /&gt;
:To clean up the seed data in the table after it creates seed data form service deploy and pulls seed data from s3.&lt;br /&gt;
&lt;br /&gt;
=== Refresh Seed Data ===&lt;br /&gt;
:ProcessRefreshSeedData use seedDataTag for create data environment of &#039;&#039;&#039;test&#039;&#039;&#039; and can be refresh seeddata re-test agian.&lt;br /&gt;
:&#039;&#039;&#039;canbe share&#039;&#039;&#039; seed data for other test by seed data tag.&lt;br /&gt;
&#039;&#039;&#039;How to use:&#039;&#039;&#039;&lt;br /&gt;
:Save file in s3 (for other dav keep in floder dev name) or testConfig/seedData_config(for admin)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Folder&#039;&#039;&#039;&lt;br /&gt;
*dynamoDBSeedDataTags.json&lt;br /&gt;
*graphSeedDataTags.json&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Example&#039;&#039;&#039;&lt;br /&gt;
==== dynamoDBSeedDataTags ====&lt;br /&gt;
:If set tag in this setting integrationtest is generate seed data. in storage resource dynammodb.&lt;br /&gt;
Example&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;seedDynamodb_abc_ver2&amp;quot;: [ // seedDataTag&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;tableName&amp;quot;: &amp;quot;DelivMethodSTDTestLogicalResultsData&amp;quot;,  // servcieTag+stage+tablename&lt;br /&gt;
      &amp;quot;partitionKey&amp;quot;: &amp;quot;logicalResultId&amp;quot;,&lt;br /&gt;
      &amp;quot;sortKey&amp;quot;: &amp;quot;identifiersId&amp;quot;,&lt;br /&gt;
      &amp;quot;datas&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
          logicalResultId: {&lt;br /&gt;
	    		  value: &amp;quot;eeeeeeeeee4&amp;quot;&lt;br /&gt;
          },&lt;br /&gt;
          &amp;quot;identifiersId&amp;quot;: {&lt;br /&gt;
			      &amp;quot;value: &amp;quot;lllll123456&amp;quot;&lt;br /&gt;
          },&lt;br /&gt;
          &amp;quot;processLogicalResultExpiryTimestamp&amp;quot; {&lt;br /&gt;
            calcType: &amp;quot;currentTimestampAdjustment&amp;quot;, // can add other types of calculated data in future&lt;br /&gt;
            action: &amp;quot;subtract&amp;quot;, // add|subtract&lt;br /&gt;
            adjustment: &amp;quot;2 days&amp;quot;, // Human-Readable Relative Format&lt;br /&gt;
          }&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
          logicalResultId: {&lt;br /&gt;
	    		  value: &amp;quot;eeeeeeeeee4&amp;quot;&lt;br /&gt;
          },&lt;br /&gt;
          &amp;quot;identifiersId&amp;quot;: {&lt;br /&gt;
			      &amp;quot;value: &amp;quot;lllll777777&amp;quot;&lt;br /&gt;
          },&lt;br /&gt;
          &amp;quot;processLogicalResultExpiryTimestamp&amp;quot; {&lt;br /&gt;
            calcType: &amp;quot;currentTimestampAdjustment&amp;quot;, // can add other types of calculated data in future&lt;br /&gt;
            action: &amp;quot;add&amp;quot;, // add|subtract&lt;br /&gt;
            adjustment: &amp;quot;2 days&amp;quot;, // Human-Readable Relative Format&lt;br /&gt;
          }&lt;br /&gt;
        }&lt;br /&gt;
      ],&lt;br /&gt;
		},&lt;br /&gt;
	},&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;tableName&amp;quot;: &amp;quot;MLocationsTestFloatingRelationships&amp;quot;,// servcieTag+stage+tablename&lt;br /&gt;
      &amp;quot;partitionKey&amp;quot;: &amp;quot;importBatchId&amp;quot;,&lt;br /&gt;
      &amp;quot;sortKey&amp;quot;: &amp;quot;identifierRelationshipsId&amp;quot;,&lt;br /&gt;
      &amp;quot;datas&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;importBatchId&amp;quot;: &amp;quot;2-uuuuuuuuuuuuuu&amp;quot;,&lt;br /&gt;
          &amp;quot;identifierRelationshipsId&amp;quot;: &amp;quot;lllll123456&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;importBatchId&amp;quot;: &amp;quot;2-uuuuuuuuuuuuuu&amp;quot;,&lt;br /&gt;
          &amp;quot;identifierRelationshipsId&amp;quot;: &amp;quot;lllll777777&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;importBatchId&amp;quot;: &amp;quot;2-uuuuuuuuuuuuuu&amp;quot;,&lt;br /&gt;
          &amp;quot;identifierRelationshipsId&amp;quot;: &amp;quot;lllll99999999&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
      ]&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;tableName&amp;quot;: &amp;quot;MLocationsTestFindDataMain&amp;quot;,&lt;br /&gt;
      &amp;quot;partitionKey&amp;quot;: &amp;quot;findDataId&amp;quot;,&lt;br /&gt;
      &amp;quot;datas&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;findDataId&amp;quot;: &amp;quot;111111&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;findDataId&amp;quot;: &amp;quot;22222&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;findDataId&amp;quot;: &amp;quot;333333&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
      ]&lt;br /&gt;
    }&lt;br /&gt;
  ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== graphSeedDataTags ====&lt;br /&gt;
:If set tag in this setting integrationtest is generate seed data. in storage resource graphHanler.&lt;br /&gt;
Example&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;seedData_testTag_GG&amp;quot;: [ // seedDataTag&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;nodes&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;nodeLabels&amp;quot;: [&lt;br /&gt;
            &amp;quot;SellOfferPlan_sellOfferPlanDeliveryMethodLink&amp;quot;&lt;br /&gt;
          ],&lt;br /&gt;
          &amp;quot;objectDetail&amp;quot;: {&lt;br /&gt;
            &amp;quot;identifiers&amp;quot;: {&lt;br /&gt;
              &amp;quot;sellOfferPlanDeliveryMethodLinkId&amp;quot;: &amp;quot;minttestrefreshSeedData_01&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;fields&amp;quot;: {&lt;br /&gt;
              &amp;quot;productId&amp;quot;: &amp;quot;ddddd&amp;quot;,&lt;br /&gt;
              &amp;quot;price&amp;quot;: 9999&lt;br /&gt;
            }&lt;br /&gt;
			&amp;quot;calculatedFields&amp;quot;: {&lt;br /&gt;
				&amp;quot;exampleTimestamp&amp;quot;: {&lt;br /&gt;
					calcType: &amp;quot;currentTimestampAdjustment&amp;quot;, // can add other types of calculated data in future&lt;br /&gt;
					action: &amp;quot;add&amp;quot;, // add|subtract&lt;br /&gt;
					adjustment: &amp;quot;2 days&amp;quot;, // Human-Readable Relative Format&lt;br /&gt;
				},&lt;br /&gt;
				// ...&lt;br /&gt;
			},            &lt;br /&gt;
          }&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;nodeLabels&amp;quot;: [&lt;br /&gt;
            &amp;quot;servcieMintTest_shoppingMall&amp;quot;&lt;br /&gt;
          ],&lt;br /&gt;
          &amp;quot;objectDetail&amp;quot;: {&lt;br /&gt;
            &amp;quot;identifiers&amp;quot;: {&lt;br /&gt;
              &amp;quot;shoppingMallId&amp;quot;: &amp;quot;minttestrefreshSeedData_shoppingMallId&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;fields&amp;quot;: {&lt;br /&gt;
              &amp;quot;name&amp;quot;: &amp;quot;hotpot-man&amp;quot;,&lt;br /&gt;
              &amp;quot;totalPrice&amp;quot;: 500&lt;br /&gt;
            }&lt;br /&gt;
          }&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;nodeLabels&amp;quot;: [&lt;br /&gt;
            &amp;quot;servcieMintTest_shoppingMallCalculateSetting&amp;quot;&lt;br /&gt;
          ],&lt;br /&gt;
          &amp;quot;objectDetail&amp;quot;: {&lt;br /&gt;
            &amp;quot;identifiers&amp;quot;: {&lt;br /&gt;
              &amp;quot;versionedDataId&amp;quot;: &amp;quot;minttestrefreshSeedData_versionedDataId&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;fields&amp;quot;: {&lt;br /&gt;
              &amp;quot;addToCalculatedValuePerOrder&amp;quot;: 10,&lt;br /&gt;
              &amp;quot;addToRateTableValuePerOrder&amp;quot;: 77&lt;br /&gt;
            }&lt;br /&gt;
          }&lt;br /&gt;
        }&lt;br /&gt;
      ],&lt;br /&gt;
      &amp;quot;relationships&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;fromObject&amp;quot;: {&lt;br /&gt;
            &amp;quot;nodeLabel&amp;quot;: &amp;quot;SellOfferPlan_sellOfferPlanDeliveryMethodLink&amp;quot;,&lt;br /&gt;
            &amp;quot;identifiers&amp;quot;: {&lt;br /&gt;
              &amp;quot;sellOfferPlanDeliveryMethodLinkId&amp;quot;: &amp;quot;minttestrefreshSeedData_01&amp;quot;&lt;br /&gt;
            }&lt;br /&gt;
          },&lt;br /&gt;
          &amp;quot;toObject&amp;quot;: {&lt;br /&gt;
            &amp;quot;nodeLabel&amp;quot;: &amp;quot;servcieMintTest_shoppingMall&amp;quot;,&lt;br /&gt;
            &amp;quot;identifiers&amp;quot;: {&lt;br /&gt;
              &amp;quot;shoppingMallId&amp;quot;: &amp;quot;minttestrefreshSeedData_shoppingMallId&amp;quot;&lt;br /&gt;
            }&lt;br /&gt;
          },&lt;br /&gt;
          &amp;quot;relationships&amp;quot;: [&lt;br /&gt;
            {&lt;br /&gt;
              &amp;quot;relTypeConcat&amp;quot;: &amp;quot;SellOfferPlan_hasCCCCCCC&amp;quot;,&lt;br /&gt;
              &amp;quot;relId&amp;quot;: &amp;quot;uuid-4s56df74s9df79w-w6de4f5w689ef&amp;quot;&lt;br /&gt;
            }&lt;br /&gt;
          ]&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;fromObject&amp;quot;: {&lt;br /&gt;
            &amp;quot;nodeLabel&amp;quot;: &amp;quot;servcieMintTest_shoppingMall&amp;quot;,&lt;br /&gt;
            &amp;quot;identifiers&amp;quot;: {&lt;br /&gt;
              &amp;quot;shoppingMallId&amp;quot;: &amp;quot;minttestrefreshSeedData_shoppingMallId&amp;quot;&lt;br /&gt;
            }&lt;br /&gt;
          },&lt;br /&gt;
          &amp;quot;toObject&amp;quot;: {&lt;br /&gt;
            &amp;quot;nodeLabel&amp;quot;: &amp;quot;servcieMintTest_shoppingMallCalculateSetting&amp;quot;,&lt;br /&gt;
            &amp;quot;identifiers&amp;quot;: {&lt;br /&gt;
              &amp;quot;versionedDataId&amp;quot;: &amp;quot;minttestrefreshSeedData_versionedDataId&amp;quot;&lt;br /&gt;
            }&lt;br /&gt;
          },&lt;br /&gt;
          &amp;quot;relationships&amp;quot;: [&lt;br /&gt;
            {&lt;br /&gt;
              &amp;quot;relTypeConcat&amp;quot;: &amp;quot;servcieMintTest_shoppingMall_currentShoppingMallCalculateSetting&amp;quot;,&lt;br /&gt;
              &amp;quot;relId&amp;quot;: &amp;quot;uuid-s122df5-s21df&amp;quot;,&lt;br /&gt;
              &amp;quot;relationshipProperty&amp;quot;: {&lt;br /&gt;
                &amp;quot;timeStamp&amp;quot;: 1234567879,&lt;br /&gt;
                &amp;quot;statusName&amp;quot;: true&lt;br /&gt;
              }&lt;br /&gt;
            },&lt;br /&gt;
            {&lt;br /&gt;
              &amp;quot;relTypeConcat&amp;quot;: &amp;quot;servcieMintTest_shoppingMall_hasShoppingMallCalculateSetting&amp;quot;,&lt;br /&gt;
              &amp;quot;relId&amp;quot;: &amp;quot;uuid-77777-99999&amp;quot;,&lt;br /&gt;
              &amp;quot;relationshipProperty&amp;quot;: {&lt;br /&gt;
                &amp;quot;statusName&amp;quot;: true&lt;br /&gt;
              }&lt;br /&gt;
				&amp;quot;calculatedRelationshipProperties&amp;quot;: {&lt;br /&gt;
					&amp;quot;exampleTimestamp&amp;quot;: {&lt;br /&gt;
						calcType: &amp;quot;currentTimestampAdjustment&amp;quot;, // can add other types of calculated data in future&lt;br /&gt;
						action: &amp;quot;add&amp;quot;, // add|subtract&lt;br /&gt;
						adjustment: &amp;quot;2 days&amp;quot;, // Human-Readable Relative Format&lt;br /&gt;
					},&lt;br /&gt;
					// ...&lt;br /&gt;
				},   &lt;br /&gt;
            }&lt;br /&gt;
          ]&lt;br /&gt;
        }&lt;br /&gt;
      ]&lt;br /&gt;
    }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;seedData_testTag_ABC&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;objType&amp;quot;: {&lt;br /&gt;
        &amp;quot;objectType&amp;quot;: &amp;quot;productAttributeLink&amp;quot;,&lt;br /&gt;
        &amp;quot;serviceTag&amp;quot;: &amp;quot;ProductAttribute&amp;quot;&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;objInstanceFull&amp;quot;: {&lt;br /&gt;
        &amp;quot;identifiers&amp;quot;: {&lt;br /&gt;
          &amp;quot;productAttributeLinkId&amp;quot;: &amp;quot;f90b57ca8b2fe1a83459d57da038cf50fb6d40e6&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;fields&amp;quot;: {}&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;relationships&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;relType&amp;quot;: {&lt;br /&gt;
            &amp;quot;serviceTag&amp;quot;: &amp;quot;ProductAttribute&amp;quot;,&lt;br /&gt;
            &amp;quot;relationshipTag&amp;quot;: &amp;quot;hasProductAttributeLink&amp;quot;&lt;br /&gt;
          },&lt;br /&gt;
          &amp;quot;relationshipDirection&amp;quot;: &amp;quot;to&amp;quot;,&lt;br /&gt;
          &amp;quot;targetObjType&amp;quot;: {&lt;br /&gt;
            &amp;quot;serviceTag&amp;quot;: &amp;quot;ProductStandard&amp;quot;,&lt;br /&gt;
            &amp;quot;objectType&amp;quot;: &amp;quot;productStandard&amp;quot;&lt;br /&gt;
          },&lt;br /&gt;
          &amp;quot;targetIdentifiers&amp;quot;: {&lt;br /&gt;
            &amp;quot;productId&amp;quot;: &amp;quot;f526a367a2b66cb0f37ca61b6c43f419929f521d&amp;quot;&lt;br /&gt;
          },&lt;br /&gt;
          &amp;quot;relationshipProperties&amp;quot;: {}&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;relType&amp;quot;: {&lt;br /&gt;
            &amp;quot;serviceTag&amp;quot;: &amp;quot;ProductAttribute&amp;quot;,&lt;br /&gt;
            &amp;quot;relationshipTag&amp;quot;: &amp;quot;isProductAttribute&amp;quot;&lt;br /&gt;
          },&lt;br /&gt;
          &amp;quot;relationshipDirection&amp;quot;: &amp;quot;from&amp;quot;,&lt;br /&gt;
          &amp;quot;targetObjType&amp;quot;: {&lt;br /&gt;
            &amp;quot;serviceTag&amp;quot;: &amp;quot;ProductAttribute&amp;quot;,&lt;br /&gt;
            &amp;quot;objectType&amp;quot;: &amp;quot;productAttribute&amp;quot;&lt;br /&gt;
          },&lt;br /&gt;
          &amp;quot;targetIdentifiers&amp;quot;: {&lt;br /&gt;
            &amp;quot;productAttributeId&amp;quot;: &amp;quot;f4bf7a078071d54036656df544197ba638bc3a68&amp;quot;&lt;br /&gt;
          },&lt;br /&gt;
          &amp;quot;relationshipProperties&amp;quot;: {}&lt;br /&gt;
        }&lt;br /&gt;
      ]&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;objType&amp;quot;: {&lt;br /&gt;
        &amp;quot;objectType&amp;quot;: &amp;quot;productAttributeLink&amp;quot;,&lt;br /&gt;
        &amp;quot;serviceTag&amp;quot;: &amp;quot;ProductAttribute&amp;quot;&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;objInstanceFull&amp;quot;: {&lt;br /&gt;
        &amp;quot;identifiers&amp;quot;: {&lt;br /&gt;
          &amp;quot;productAttributeLinkId&amp;quot;: &amp;quot;f90b57ca8b2fe1a83459d57da038cf50fb6d40e6&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;fields&amp;quot;: {}&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;relationships&amp;quot;: []&lt;br /&gt;
    }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;seedData_testTag_LL&amp;quot;: []&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Cleaning Seed Data ===&lt;br /&gt;
:Delete seed data for set environment of &#039;&#039;&#039;test&#039;&#039;&#039;.&lt;br /&gt;
*cleaningeDynamoOneRecordsTags.json&lt;br /&gt;
*cleaningeDynamoManyRecordsTags.json&lt;br /&gt;
&lt;br /&gt;
====cleaningeDynamoOneRecordsTags====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;cleaningSeed_TestFindData_and_Education_case_invalid01&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;tableName&amp;quot;: &amp;quot;MLocationsTestFindDataMain&amp;quot;,&lt;br /&gt;
      &amp;quot;primaryKeys&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;findDataId&amp;quot;: &amp;quot;cleaning-1&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;findDataId&amp;quot;: &amp;quot;cleaning-2&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
      ]&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;tableName&amp;quot;: &amp;quot;MLocationsTestEducation&amp;quot;,&lt;br /&gt;
      &amp;quot;primaryKeys&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;studentId&amp;quot;: &amp;quot;cleaning-AA&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;studentId&amp;quot;: &amp;quot;cleaning-BB&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;studentId&amp;quot;: &amp;quot;cleaning-CC&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
      ]&lt;br /&gt;
    }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;cleaningSeed_TestMemberPersonnel_case_invalid01&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;tableName&amp;quot;: &amp;quot;MLocationsTestMemberPersonnel&amp;quot;,&lt;br /&gt;
      &amp;quot;primaryKeys&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;userId&amp;quot;: &amp;quot;namtan&amp;quot;,&lt;br /&gt;
          &amp;quot;passwordId&amp;quot;: &amp;quot;qqqww&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;userId&amp;quot;: &amp;quot;jack&amp;quot;,&lt;br /&gt;
          &amp;quot;passwordId&amp;quot;: &amp;quot;q1&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;userId&amp;quot;: &amp;quot;Momay&amp;quot;,&lt;br /&gt;
          &amp;quot;passwordId&amp;quot;: &amp;quot;ttr&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
      ]&lt;br /&gt;
    }&lt;br /&gt;
  ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== cleaningeDynamoManyRecordsTags ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;cleaningSeed_manyData_partitionKey_only_miss_sort&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;tableName&amp;quot;: &amp;quot;MLocationsTestMemberPersonnel&amp;quot;,&lt;br /&gt;
      &amp;quot;primaryKeys&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;userId&amp;quot;: &amp;quot;many-data&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
      ]&lt;br /&gt;
    }&lt;br /&gt;
  ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*logic query table MLocationsTestMemberPersonnel use primary Keys &amp;quot;userId&amp;quot; and then delete all data from primary Keys.&lt;br /&gt;
&lt;br /&gt;
=resources=&lt;br /&gt;
syntax is object&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{ &lt;br /&gt;
	&amp;quot;Lambda&amp;quot;:{&lt;br /&gt;
		&amp;quot;{FunctionNameHdrSqs}&amp;quot;:{ // FunctionNameHdrSqs is match resourceName in file tests&lt;br /&gt;
			&amp;quot;localLacation&amp;quot;:&amp;quot;/src/FunctionNameHdrSqs.js&amp;quot;,&lt;br /&gt;
			&amp;quot;localHandler&amp;quot;:&amp;quot;main&amp;quot;, &lt;br /&gt;
			&amp;quot;functionName&amp;quot;:&amp;quot;FunctionNameHdrSqs&amp;quot;	// FunctionName is function name match key of function.yml of servcie.&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;ProcessComplexFilterHdrSqs&amp;quot;:{ &lt;br /&gt;
			&amp;quot;localLacation&amp;quot;:&amp;quot;/src/ProcessComplexFilterHdrSqs.js&amp;quot;, &lt;br /&gt;
			&amp;quot;localHandler&amp;quot;:&amp;quot;main&amp;quot;, &lt;br /&gt;
			&amp;quot;functionName&amp;quot;:&amp;quot;ProcessComplexFilterHdrSqs&amp;quot; &lt;br /&gt;
		},&lt;br /&gt;
		... &lt;br /&gt;
	},&lt;br /&gt;
	&amp;quot;Dynamodb&amp;quot;: {&lt;br /&gt;
		&amp;quot;filterMain&amp;quot;:{ // match resourceName in file tests(dynamodbOutputEventIdentifiers)&lt;br /&gt;
			&amp;quot;tableName&amp;quot;:&amp;quot;filterMain&amp;quot; &lt;br /&gt;
		}, &lt;br /&gt;
		&amp;quot;tableNameBB&amp;quot;:{ &lt;br /&gt;
			&amp;quot;tableName&amp;quot;:&amp;quot;tableNameBB&amp;quot; &lt;br /&gt;
		},&lt;br /&gt;
		... &lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=events=&lt;br /&gt;
Syntax is object&lt;br /&gt;
==Syntax Name==&lt;br /&gt;
===FileName===&lt;br /&gt;
::Event_{inputEventTag}&lt;br /&gt;
&lt;br /&gt;
===eventTag===&lt;br /&gt;
#inputEventTag&lt;br /&gt;
#outputEventTag&lt;br /&gt;
#dynamodbTag&lt;br /&gt;
&lt;br /&gt;
*file events.js is have eventTag  (inputEventTag,outputEventTag,dynamodbTag)&lt;br /&gt;
**How to create name eventTag&lt;br /&gt;
***Example case : &amp;quot;test in service complexFilter functionname ProcessComplexFilter case element type is logical basic&amp;quot;.&lt;br /&gt;
::*&#039;&#039;&#039;inputEventTag&#039;&#039;&#039;&lt;br /&gt;
::::{serviceName}_{functionName}_{caseTest}&lt;br /&gt;
&#039;&#039;Conplexfilter_ProcessComplexFilter_Typelogical_basic&#039;&#039;&lt;br /&gt;
::*&#039;&#039;&#039;outputEventTag&#039;&#039;&#039;&lt;br /&gt;
::::output_{inputEventTag}&lt;br /&gt;
&#039;&#039;output_Conplexfilter_ProcessComplexFilter_Typelogical_basic&#039;&#039;&lt;br /&gt;
::*&#039;&#039;&#039;dynamodbTag&#039;&#039;&#039;&lt;br /&gt;
::::{inputEventTag}__Dynamodb__{&#039;&#039;&#039;action*&#039;&#039;&#039;}_{tableName} &lt;br /&gt;
&#039;&#039;Conplexfilter_ProcessComplexFilter_Typelogical_basic___Dynamodb__putItem_filterMain&#039;&#039;&lt;br /&gt;
: &amp;lt;u&amp;gt;&#039;&#039;&#039;{action}&#039;&#039;&#039; is only &#039;&#039;put&#039;&#039; or &#039;&#039;update&#039;&#039;, and in case of &#039;&#039;update&#039;&#039; must only test the last step of update &amp;lt;/u&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Syntax event===&lt;br /&gt;
====initiate by handlerServcie====&lt;br /&gt;
=====Sqs=====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
// An example input and output event of Sns&lt;br /&gt;
{&lt;br /&gt;
   &amp;quot;LambdaFunctionHdrSqs_input__pass&amp;quot;:{&lt;br /&gt;
      &amp;quot;properties&amp;quot;:{&lt;br /&gt;
         &amp;quot;propertyA&amp;quot;:{&lt;br /&gt;
            &amp;quot;value&amp;quot;:&amp;quot;valueProperty1&amp;quot;&lt;br /&gt;
         },&lt;br /&gt;
         &amp;quot;propertyB&amp;quot;:{&lt;br /&gt;
            &amp;quot;properties&amp;quot;:{&lt;br /&gt;
               &amp;quot;propertyB1&amp;quot;:{&lt;br /&gt;
                  &amp;quot;value&amp;quot;:&amp;quot;valuePropertyB1&amp;quot;&lt;br /&gt;
               }&lt;br /&gt;
            }&lt;br /&gt;
         },&lt;br /&gt;
         &amp;quot;propertyC&amp;quot;:{&lt;br /&gt;
            &amp;quot;eventValue&amp;quot;:[&lt;br /&gt;
               &amp;quot;valuePropertyC1&amp;quot;,&lt;br /&gt;
               &amp;quot;valuePropertyC2&amp;quot;,&lt;br /&gt;
               &amp;quot;valuePropertyC3&amp;quot;&lt;br /&gt;
            ]&lt;br /&gt;
         }&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;snsSqsTrigger&amp;quot;:true,&lt;br /&gt;
      &amp;quot;messageAttributes&amp;quot;:{&lt;br /&gt;
            &amp;quot;msgTag&amp;quot;:{&lt;br /&gt;
               &amp;quot;value&amp;quot;:&amp;quot;msgTag&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;propertyD&amp;quot;:{&lt;br /&gt;
               &amp;quot;value&amp;quot;:&amp;quot;valuePropertyD&amp;quot;&lt;br /&gt;
            }&lt;br /&gt;
      }&lt;br /&gt;
   },&lt;br /&gt;
   {&lt;br /&gt;
      &amp;quot;output_LambdaFunctionHdrSqs_pass&amp;quot;:{&lt;br /&gt;
         &amp;quot;properties&amp;quot;:{&lt;br /&gt;
            &amp;quot;propertyA&amp;quot;:{&lt;br /&gt;
               &amp;quot;value&amp;quot;:&amp;quot;valueProperty1&amp;quot;&lt;br /&gt;
            }&lt;br /&gt;
         }&lt;br /&gt;
      }&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot; linein&amp;gt;&lt;br /&gt;
&amp;quot;snsSqsTrigger&amp;quot;:true&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Dsq=====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
// An example input and output event of Direct Sqs&lt;br /&gt;
{&lt;br /&gt;
   &amp;quot;LambdaFunctionHdrDsq_input__pass&amp;quot;:{&lt;br /&gt;
      &amp;quot;forStageMatching&amp;quot;:true,&lt;br /&gt;
      &amp;quot;properties&amp;quot;:{&lt;br /&gt;
         &amp;quot;propertyA&amp;quot;:{&lt;br /&gt;
            &amp;quot;forStageMatching&amp;quot;:true,&lt;br /&gt;
            &amp;quot;value&amp;quot;:&amp;quot;valueProperty1&amp;quot;&lt;br /&gt;
         },&lt;br /&gt;
         &amp;quot;propertyB&amp;quot;:{&lt;br /&gt;
            &amp;quot;forStageMatching&amp;quot;:true,&lt;br /&gt;
            &amp;quot;properties&amp;quot;:{&lt;br /&gt;
               &amp;quot;propertyB1&amp;quot;:{&lt;br /&gt;
                  &amp;quot;forStageMatching&amp;quot;:true,&lt;br /&gt;
                  &amp;quot;value&amp;quot;:&amp;quot;valuePropertyB1&amp;quot;&lt;br /&gt;
               }&lt;br /&gt;
            }&lt;br /&gt;
         },&lt;br /&gt;
         &amp;quot;propertyC&amp;quot;:{&lt;br /&gt;
            &amp;quot;eventValue&amp;quot;:[&lt;br /&gt;
               &amp;quot;valuePropertyC1&amp;quot;,&lt;br /&gt;
               &amp;quot;valuePropertyC2&amp;quot;,&lt;br /&gt;
               &amp;quot;valuePropertyC3&amp;quot;&lt;br /&gt;
            ]&lt;br /&gt;
         }&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;DirectSqs&amp;quot;:true,&lt;br /&gt;
      &amp;quot;messageAttributes&amp;quot;:{&lt;br /&gt;
         &amp;quot;msgTag&amp;quot;:{&lt;br /&gt;
           &amp;quot;forStageMatching&amp;quot;:true,&lt;br /&gt;
           &amp;quot;value&amp;quot;:&amp;quot;msgTag&amp;quot;&lt;br /&gt;
          },&lt;br /&gt;
          &amp;quot;propertyD&amp;quot;:{&lt;br /&gt;
           &amp;quot;forStageMatching&amp;quot;:true,&lt;br /&gt;
           &amp;quot;value&amp;quot;:&amp;quot;valuePropertyD&amp;quot;&lt;br /&gt;
          }&lt;br /&gt;
      }&lt;br /&gt;
   },&lt;br /&gt;
   {&lt;br /&gt;
      &amp;quot;output_LambdaFunctionHdrDsq_pass&amp;quot;:{&lt;br /&gt;
         &amp;quot;forStageMatching&amp;quot;:true,&lt;br /&gt;
         &amp;quot;properties&amp;quot;:{&lt;br /&gt;
            &amp;quot;propertyA&amp;quot;:{&lt;br /&gt;
               &amp;quot;forStageMatching&amp;quot;:true,&lt;br /&gt;
               &amp;quot;value&amp;quot;:&amp;quot;valueProperty1&amp;quot;&lt;br /&gt;
            }&lt;br /&gt;
         }&lt;br /&gt;
      }&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* DirectSqs = true &lt;br /&gt;
:: for initialStage of Dsq&lt;br /&gt;
* messageAttributes is optional&lt;br /&gt;
&lt;br /&gt;
=====Inv=====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;LambdaFunctionHdrInv_input__pass&amp;quot;:{&lt;br /&gt;
     &amp;quot;forStageMatching&amp;quot;:true,&lt;br /&gt;
     &amp;quot;properties&amp;quot;:{&lt;br /&gt;
        &amp;quot;propertyA&amp;quot;:{&lt;br /&gt;
           &amp;quot;forStageMatching&amp;quot;:true,&lt;br /&gt;
           &amp;quot;value&amp;quot;:&amp;quot;valueProperty1&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;propertyB&amp;quot;:{&lt;br /&gt;
           &amp;quot;forStageMatching&amp;quot;:true,&lt;br /&gt;
           &amp;quot;properties&amp;quot;:{&lt;br /&gt;
              &amp;quot;propertyB1&amp;quot;:{&lt;br /&gt;
                 &amp;quot;forStageMatching&amp;quot;:true,&lt;br /&gt;
                 &amp;quot;value&amp;quot;:&amp;quot;valuePropertyB1&amp;quot;&lt;br /&gt;
              }&lt;br /&gt;
           }&lt;br /&gt;
        }&lt;br /&gt;
     }&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
        &amp;quot;output_LambdaFunctionHdrInv_pass&amp;quot;:{&lt;br /&gt;
           &amp;quot;forStageMatching&amp;quot;:true,&lt;br /&gt;
           &amp;quot;properties&amp;quot;:{&lt;br /&gt;
              &amp;quot;propertyA&amp;quot;:{&lt;br /&gt;
                 &amp;quot;forStageMatching&amp;quot;:true,&lt;br /&gt;
                 &amp;quot;value&amp;quot;:&amp;quot;valueProperty1&amp;quot;&lt;br /&gt;
              }&lt;br /&gt;
           }&lt;br /&gt;
        }&lt;br /&gt;
     }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Api=====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
// An example input and output event of API&lt;br /&gt;
{&lt;br /&gt;
	&amp;quot;LambdaFunctionHdrApi_input__pass_notTestAuthorizer&amp;quot;: { &lt;br /&gt;
		&amp;quot;forstageMatvhing&amp;quot;: true, &lt;br /&gt;
		&amp;quot;properties&amp;quot;: { &lt;br /&gt;
			&amp;quot;body&amp;quot;: { &lt;br /&gt;
				&amp;quot;properties&amp;quot;: { &lt;br /&gt;
					&amp;quot;propertyA&amp;quot;: { &lt;br /&gt;
						&amp;quot;testValueMatches&amp;quot;: false, &lt;br /&gt;
						&amp;quot;value&amp;quot;: &amp;quot;valueProperty1&amp;quot;, &lt;br /&gt;
					}, &lt;br /&gt;
					&amp;quot;propertyB&amp;quot;: { &lt;br /&gt;
						&amp;quot;properties&amp;quot;: { &lt;br /&gt;
							&amp;quot;propertyB1&amp;quot;: { &lt;br /&gt;
								&amp;quot;value&amp;quot;: &amp;quot;valuePropertyB1&amp;quot;, &lt;br /&gt;
							} &lt;br /&gt;
						} &lt;br /&gt;
					}, &lt;br /&gt;
					&amp;quot;propertyC&amp;quot;: { &lt;br /&gt;
						&amp;quot;eventValue&amp;quot;: [ &lt;br /&gt;
							&amp;quot;valuePropertyC1&amp;quot;, &lt;br /&gt;
							&amp;quot;valuePropertyC2&amp;quot;, &lt;br /&gt;
							&amp;quot;valuePropertyC3&amp;quot;, &lt;br /&gt;
						] &lt;br /&gt;
					},&lt;br /&gt;
					... &lt;br /&gt;
				} &lt;br /&gt;
			} &lt;br /&gt;
		}&lt;br /&gt;
	}, &lt;br /&gt;
	&amp;quot;Output_LambdaFunctionHdrApi_input__pass_notTestAuthorizer&amp;quot;: { &lt;br /&gt;
		&amp;quot;properties&amp;quot;: { &lt;br /&gt;
			&amp;quot;body&amp;quot;: { &lt;br /&gt;
				&amp;quot;properties&amp;quot;: { &lt;br /&gt;
					&amp;quot;propertyA&amp;quot;: { &lt;br /&gt;
						&amp;quot;testValueMatches&amp;quot;: false, &lt;br /&gt;
						&amp;quot;value&amp;quot;: &amp;quot;valueProperty1&amp;quot;&lt;br /&gt;
					}, &lt;br /&gt;
					...&lt;br /&gt;
				} &lt;br /&gt;
			} &lt;br /&gt;
		}  &lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====S3=====&lt;br /&gt;
&lt;br /&gt;
====dynamodb====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
// An example event of Dynamodb //optional &lt;br /&gt;
{&lt;br /&gt;
	{inputEventTag}__dynamodb_{action}_{tablename}: { // eg. &amp;quot;Complexfilter_ProcessComplexfilter_logical_basic__dynamodb_update_FilterMain&amp;quot;&lt;br /&gt;
	&amp;quot;forStageMatching&amp;quot;: true,&lt;br /&gt;
     &amp;quot;properties&amp;quot;: {&lt;br /&gt;
        &amp;quot;filterMainUniqueRequestId&amp;quot;: {&lt;br /&gt;
          &amp;quot;testValueMatches&amp;quot;: fase,&lt;br /&gt;
          &amp;quot;value&amp;quot;: &amp;quot;bbc4f4a9-2032-4dec-9129-8c7d169fecc5&amp;quot;&lt;br /&gt;
         },&lt;br /&gt;
        &amp;quot;filterObject&amp;quot;: {&lt;br /&gt;
        &amp;quot;forStageMatching&amp;quot;: true,&lt;br /&gt;
        &amp;quot;properties&amp;quot;: {&lt;br /&gt;
          &amp;quot;logicalType&amp;quot;: {&lt;br /&gt;
            &amp;quot;value&amp;quot;: &amp;quot;partitionKey&amp;quot;&lt;br /&gt;
          },&lt;br /&gt;
          &amp;quot;comparison&amp;quot;: {&lt;br /&gt;
            &amp;quot;value&amp;quot;: &amp;quot;equals&amp;quot;&lt;br /&gt;
          },&lt;br /&gt;
          &amp;quot;type&amp;quot;: {&lt;br /&gt;
            &amp;quot;value&amp;quot;: &amp;quot;logical&amp;quot;&lt;br /&gt;
          },&lt;br /&gt;
          &amp;quot;partitionKey&amp;quot;: {&lt;br /&gt;
            &amp;quot;forStageMatching&amp;quot;: true,&lt;br /&gt;
            &amp;quot;value&amp;quot;: &amp;quot;mockIntegratioTestCPF&amp;quot;&lt;br /&gt;
          }&lt;br /&gt;
        }&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;filterMainExpiryTime&amp;quot;: {&lt;br /&gt;
        &amp;quot;testValueMatches&amp;quot;: fase,&lt;br /&gt;
        &amp;quot;value&amp;quot;: 1731980802858&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;filterMainStatus&amp;quot;: {&lt;br /&gt;
       &amp;quot;forStageMatching&amp;quot;: true,&lt;br /&gt;
        &amp;quot;value&amp;quot;: &amp;quot;processing&amp;quot;&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;createTime&amp;quot;: {&lt;br /&gt;
        &amp;quot;testValueMatches&amp;quot;: fase,&lt;br /&gt;
        &amp;quot;value&amp;quot;: 1731894402678&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;objType&amp;quot;: {&lt;br /&gt;
        &amp;quot;forStageMatching&amp;quot;: true,&lt;br /&gt;
        &amp;quot;properties&amp;quot;: {&lt;br /&gt;
          &amp;quot;serviceTag&amp;quot;: {&lt;br /&gt;
            &amp;quot;forStageMatching&amp;quot;: true,&lt;br /&gt;
            &amp;quot;value&amp;quot;: &amp;quot;IntTesting&amp;quot;&lt;br /&gt;
          },&lt;br /&gt;
          &amp;quot;objectType&amp;quot;: {&lt;br /&gt;
            &amp;quot;forStageMatching&amp;quot;: true,&lt;br /&gt;
            &amp;quot;value&amp;quot;: &amp;quot;TestRecord&amp;quot;&lt;br /&gt;
          }&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;keyValues&amp;quot;: {&lt;br /&gt;
      &amp;quot;filterMainId&amp;quot;: &amp;quot;4865d2451a621cb7f71225cfabf2df4f98e20801&amp;quot;,&lt;br /&gt;
      &amp;quot;objTypeId&amp;quot;: &amp;quot;cdb170690571df7522b3850920fce02507c077ee&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
	} &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* partition key: filterMainId&lt;br /&gt;
* sort key: objTypeId&lt;br /&gt;
&lt;br /&gt;
[[2021-01-15 - Integration Testing - Adding DynamoDB result tests]]&lt;br /&gt;
&lt;br /&gt;
===Type paramiter===&lt;br /&gt;
use for evnet and dyanmodb event&lt;br /&gt;
====Normal====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 object: {&lt;br /&gt;
  forStageMatching: true,&lt;br /&gt;
  properties: {&lt;br /&gt;
    name:{&lt;br /&gt;
     forStageMatching: true,&lt;br /&gt;
     value:&amp;quot;Tom&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
   }&lt;br /&gt;
 },&lt;br /&gt;
 array: {&lt;br /&gt;
  forStageMatching: true,&lt;br /&gt;
  useIsEqual: true,&lt;br /&gt;
  eventValue: [&lt;br /&gt;
   {&lt;br /&gt;
     &amp;quot;relTypeAndDirection&amp;quot;: {&lt;br /&gt;
       &amp;quot;relType&amp;quot;: {&lt;br /&gt;
         &amp;quot;serviceTag&amp;quot;: &amp;quot;maxxCart2&amp;quot;,&lt;br /&gt;
         &amp;quot;relationshipTag&amp;quot;: &amp;quot;hasCartOrder&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;relationshipDirection&amp;quot;: &amp;quot;from&amp;quot;&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;targetObjects&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;objType&amp;quot;: {&lt;br /&gt;
           &amp;quot;serviceTag&amp;quot;: &amp;quot;maxxCart2&amp;quot;,&lt;br /&gt;
           &amp;quot;objectType&amp;quot;: &amp;quot;cartOrder&amp;quot;&lt;br /&gt;
          }&lt;br /&gt;
        }&lt;br /&gt;
      ]&lt;br /&gt;
    }&lt;br /&gt;
  ]&lt;br /&gt;
 },&lt;br /&gt;
 number: {&lt;br /&gt;
  forStageMatching: true,&lt;br /&gt;
  value: 1111&lt;br /&gt;
 },&lt;br /&gt;
 string: {&lt;br /&gt;
  forStageMatching: true,&lt;br /&gt;
  value: &amp;quot;hi&amp;quot;&lt;br /&gt;
 },&lt;br /&gt;
 boolean: {&lt;br /&gt;
  forStageMatching: true,&lt;br /&gt;
  value: true&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
 forStageMatching: true&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
::set true for check match value,It is not necessary to set every value&lt;br /&gt;
:::use in test importent paramiter&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
testValueMatches:false&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
::setting paramiter require on create but can not test random value eg: identifier or timeStamp or uuid&lt;br /&gt;
&lt;br /&gt;
====Empty====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
 EmptyString:{&lt;br /&gt;
forStageMatching: true,&lt;br /&gt;
  value:&amp;quot;&amp;quot;&lt;br /&gt;
 },&lt;br /&gt;
 EmptyArray:{&lt;br /&gt;
   forStageMatching: true,&lt;br /&gt;
   useIsEqual: true,&lt;br /&gt;
   eventValue: []&lt;br /&gt;
 },&lt;br /&gt;
 EmptyObject:{&lt;br /&gt;
  forStageMatching: true,&lt;br /&gt;
  value:{}&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Error====&lt;br /&gt;
can test noRetryError&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;quot;errorMessage&amp;quot;: {&lt;br /&gt;
    forStageMatching: true,&lt;br /&gt;
    &amp;quot;value&amp;quot;: &amp;quot;Not found schema of {serviceTag:TestGraphHandler, objectType:notFoundObjType}&amp;quot;&lt;br /&gt;
   }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Paramiter random====&lt;br /&gt;
Can not test case random numbber or uuid.&lt;br /&gt;
But requriOnCreate mush be set &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
testValueMatches:false&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
or set&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
forStageMatching:false&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=tests=&lt;br /&gt;
Syntax is array of object&lt;br /&gt;
==Syntax name== &lt;br /&gt;
===Testtag name ===&lt;br /&gt;
*{integrationTestTag}&lt;br /&gt;
#Test Own servcie or not a lot stage&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
Test_{inputEventTag}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
#Mix multiple servcie and multiple stage&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt; &lt;br /&gt;
IntegrationTest_{inputEventTag}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===File name ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt; &lt;br /&gt;
{integrationTestTag}.json&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Setting of test==&lt;br /&gt;
[[Service - Integration Test Config#tests.js Syntax|syntax test]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
            integrationTestTag: {integrationTestTag},&lt;br /&gt;
            productionSafe: true|false, //default false&lt;br /&gt;
            noInitialStage: true, // default false, if set to true, no error when no foundInitialStages found&lt;br /&gt;
            errorIfStageUndefined: true|false, //default false&lt;br /&gt;
            errorIfInvokeUndefined: true|false, //default false,&lt;br /&gt;
            dynamoDBSeedDataTags:[&amp;quot;seedDataDB_test_case_xx&amp;quot;], //[seedDataTag] optional if have seed data for test&lt;br /&gt;
            graphSeedDataTags:[&amp;quot;seedDataGraph_test_case_xx&amp;quot;], //[seedDataTag] optional if have seed data for test&lt;br /&gt;
            cleaningeDynamoOneRecordsTags: [&amp;quot;cleaningSeed_partitionKey_sortKey_normol&amp;quot;], //optional&lt;br /&gt;
            cleaningeDynamoManyRecordsTags: [], // optional&lt;br /&gt;
            stages:[&lt;br /&gt;
               ...&lt;br /&gt;
            ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
*[[2025-11-20 IntegrationTest#dynamoDBSeedDataTags|dynamoDBSeedDataTags]]&lt;br /&gt;
*[[2025-11-20 IntegrationTest#graphSeedDataTags|graphSeedDataTags]]&lt;br /&gt;
*[[2025-11-20 IntegrationTest#cleaningeDynamoOneRecordsTags|cleaningeDynamoOneRecordsTags]]&lt;br /&gt;
*[[2025-11-20 IntegrationTest#cleaningeDynamoManyRecordsTags|cleaningeDynamoManyRecordsTags]]&lt;br /&gt;
&lt;br /&gt;
==Stages==&lt;br /&gt;
====Initiate stage====&lt;br /&gt;
:&#039;&#039;&#039;&amp;quot;initialStage&amp;quot;:true&#039;&#039;&#039;&lt;br /&gt;
[[Service_-_Integration_Test_Config#tests.js Syntax|detail property of test]]&lt;br /&gt;
=====HandlerService=====&lt;br /&gt;
======Sqs======&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;quot;stages&amp;quot;:[&lt;br /&gt;
         {&lt;br /&gt;
            &amp;quot;initialStage&amp;quot;:true,&lt;br /&gt;
            &amp;quot;inputEventTag&amp;quot;:&amp;quot;Locations_ProcessLocationNodeSomting_casenotHaveData&amp;quot;,&lt;br /&gt;
            &amp;quot;serviceName&amp;quot;:&amp;quot;Locations&amp;quot;,&lt;br /&gt;
            &amp;quot;resourceType&amp;quot;:&amp;quot;Lambda&amp;quot;,&lt;br /&gt;
            &amp;quot;resourceName&amp;quot;:&amp;quot;ProcessLocationNodeSomtingHdrDsq&amp;quot;,&lt;br /&gt;
            &amp;quot;outputEventTag&amp;quot;:&amp;quot;Output_Locations_ProcessLocationNodeSomting_casenotHaveData&amp;quot;&lt;br /&gt;
         }&lt;br /&gt;
      ]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
======Dsq======&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
stages: [&lt;br /&gt;
        {&lt;br /&gt;
          initialStage: true,&lt;br /&gt;
          inputEventTag: &#039;LambdaFunctionHdrDsq_input_singleStage_directSqs__pass&#039;,&lt;br /&gt;
          serviceName: &#039;ServiceTemplate&#039;,&lt;br /&gt;
          resourceType: &#039;Lambda&#039;,&lt;br /&gt;
          resourceName: &#039;LambdaFunctionHdrDsq&#039;,&lt;br /&gt;
          outputEventTag: &#039;LambdaFunctionHdrDsq_output__returnvalue_pass&#039;,&lt;br /&gt;
          // **** not set snsServiceName and snsTopic&lt;br /&gt;
          // can be test dynamodbOutput&lt;br /&gt;
        }&lt;br /&gt;
      ]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
======Api======&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;quot;stages&amp;quot;:[&lt;br /&gt;
    {&lt;br /&gt;
       &amp;quot;initialStage&amp;quot;:true,&lt;br /&gt;
       &amp;quot;inputEventTag&amp;quot;:&amp;quot;LambdaFunctionHdrApi_input__pass&amp;quot;,&lt;br /&gt;
       &amp;quot;serviceName&amp;quot;:&amp;quot;ServiceTemplate&amp;quot;,&lt;br /&gt;
       &amp;quot;resourceType&amp;quot;:&amp;quot;Lambda&amp;quot;,&lt;br /&gt;
       &amp;quot;resourceName&amp;quot;:&amp;quot;LambdaFunctionHdrApi&amp;quot;,&lt;br /&gt;
       &amp;quot;outputEventTag&amp;quot;:&amp;quot;LambdaFunctionHdrApi_output__pass&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
======Inv======&lt;br /&gt;
*&#039;&#039;&#039;single stage&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
[{&lt;br /&gt;
   &amp;quot;integrationTestTag&amp;quot;:&amp;quot;LambdaFunctionHdrInv__pass&amp;quot;,&lt;br /&gt;
   &amp;quot;productionSafe&amp;quot;:false,&lt;br /&gt;
   &amp;quot;errorIfStageUndefined&amp;quot;:false,&lt;br /&gt;
   &amp;quot;errorIfInvokeUndefined&amp;quot;:false,&lt;br /&gt;
   &amp;quot;dynamoDBSeedDataTags&amp;quot;:[&amp;quot;seedDataDB_test_case_xx&amp;quot;], //[seedDataTag] optional if have seed data for test&lt;br /&gt;
   &amp;quot;graphSeedDataTags&amp;quot;:[&amp;quot;seedDataGraph_test_case_xx&amp;quot;], //[seedDataTag] optional if have seed data for test&lt;br /&gt;
   &amp;quot;cleaningeDynamoOneRecordsTags&amp;quot;: [&amp;quot;cleaningSeed_partitionKey_sortKey_normol&amp;quot;], //optional&lt;br /&gt;
   &amp;quot;cleaningeDynamoManyRecordsTags&amp;quot;: []&lt;br /&gt;
   &amp;quot;stages&amp;quot;:[&lt;br /&gt;
      {&lt;br /&gt;
         &amp;quot;initialStage&amp;quot;:true,&lt;br /&gt;
         &amp;quot;inputEventTag&amp;quot;:&amp;quot;LambdaFunctionHdrInv_input__pass&amp;quot;,&lt;br /&gt;
         &amp;quot;serviceName&amp;quot;:&amp;quot;ServiceTemplate&amp;quot;,&lt;br /&gt;
         &amp;quot;resourceType&amp;quot;:&amp;quot;Lambda&amp;quot;,&lt;br /&gt;
         &amp;quot;resourceName&amp;quot;:&amp;quot;LambdaFunctionHdrInv&amp;quot;,&lt;br /&gt;
         &amp;quot;outputEventTag&amp;quot;:&amp;quot;LambdaFunctionHdrInv_output__pass&amp;quot;&lt;br /&gt;
      }&lt;br /&gt;
   ]&lt;br /&gt;
}]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;invoke multiple stage&#039;&#039;&#039; &lt;br /&gt;
:*Each stage test can invoke multiple lambda by use &amp;quot;eventStage Tag&amp;quot; point to stage for test integration test.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
[{&lt;br /&gt;
   &amp;quot;integrationTestTag&amp;quot;:&amp;quot;LambdaFunctionHdrInv_invokes__pass&amp;quot;,&lt;br /&gt;
   &amp;quot;productionSafe&amp;quot;:false,&lt;br /&gt;
   &amp;quot;errorIfStageUndefined&amp;quot;:false,&lt;br /&gt;
   &amp;quot;errorIfInvokeUndefined&amp;quot;:false,&lt;br /&gt;
   &amp;quot;dynamoDBSeedDataTags&amp;quot;:[], //[seedDataTag] optional if have seed data for test&lt;br /&gt;
   &amp;quot;graphSeedDataTags&amp;quot;:[], //[seedDataTag] optional if have seed data for test&lt;br /&gt;
   &amp;quot;cleaningeDynamoOneRecordsTags&amp;quot;: [], //optional&lt;br /&gt;
   &amp;quot;cleaningeDynamoManyRecordsTags&amp;quot;: [], // optional&lt;br /&gt;
   &amp;quot;stages&amp;quot;:[&lt;br /&gt;
      {&lt;br /&gt;
         &amp;quot;initialStage&amp;quot;:true,&lt;br /&gt;
         &amp;quot;inputEventTag&amp;quot;:&amp;quot;LambdaFunctionHdrInv_input__pass&amp;quot;,&lt;br /&gt;
         &amp;quot;serviceName&amp;quot;:&amp;quot;ServiceTemplate&amp;quot;,&lt;br /&gt;
         &amp;quot;resourceType&amp;quot;:&amp;quot;Lambda&amp;quot;,&lt;br /&gt;
         &amp;quot;resourceName&amp;quot;:&amp;quot;LambdaFunctionHdrInv&amp;quot;,&lt;br /&gt;
         &amp;quot;outputEventTag&amp;quot;:&amp;quot;LambdaFunctionHdrInv_output__pass&amp;quot;,&lt;br /&gt;
         &amp;quot;invokes&amp;quot;:[&lt;br /&gt;
            {&lt;br /&gt;
               &amp;quot;eventStageTag&amp;quot;:&amp;quot;service_invokesB__pass&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            {&lt;br /&gt;
               &amp;quot;eventStageTag&amp;quot;:&amp;quot;service_invokesD__pass&amp;quot;&lt;br /&gt;
            }&lt;br /&gt;
         ]&lt;br /&gt;
      },&lt;br /&gt;
      {&lt;br /&gt;
         &amp;quot;eventStageTag&amp;quot;:&amp;quot;service_invokesB__pass&amp;quot;,&lt;br /&gt;
         &amp;quot;inputEventTag&amp;quot;:&amp;quot;input_service_invokes__pass&amp;quot;,&lt;br /&gt;
         &amp;quot;serviceName&amp;quot;:&amp;quot;ServiceTemplate_B&amp;quot;,&lt;br /&gt;
         &amp;quot;resourceType&amp;quot;:&amp;quot;Lambda&amp;quot;,&lt;br /&gt;
         &amp;quot;resourceName&amp;quot;:&amp;quot;LambdaFunction_B_HdrInv&amp;quot;,&lt;br /&gt;
         &amp;quot;outputEventTag&amp;quot;:&amp;quot;output_service_invokes__pass&amp;quot;&lt;br /&gt;
      },&lt;br /&gt;
      {&lt;br /&gt;
         &amp;quot;eventStageTag&amp;quot;:&amp;quot;service_invokesD__pass&amp;quot;,&lt;br /&gt;
         &amp;quot;inputEventTag&amp;quot;:&amp;quot;input_service_invokesD__pass&amp;quot;,&lt;br /&gt;
         &amp;quot;serviceName&amp;quot;:&amp;quot;ServiceTemplate_D&amp;quot;,&lt;br /&gt;
         &amp;quot;resourceType&amp;quot;:&amp;quot;Lambda&amp;quot;,&lt;br /&gt;
         &amp;quot;resourceName&amp;quot;:&amp;quot;LambdaFunction_D_HdrInv&amp;quot;,&lt;br /&gt;
         &amp;quot;outputEventTag&amp;quot;:&amp;quot;output_service_invokesD__pass&amp;quot;&lt;br /&gt;
      }&lt;br /&gt;
   ]&lt;br /&gt;
}]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
======S3======&lt;br /&gt;
======Batch======&lt;br /&gt;
&lt;br /&gt;
====GeneratedSeedData====&lt;br /&gt;
*Integrationtest must be delete identifier every time before test.&lt;br /&gt;
*Set &#039;generatedSeedData&#039; in file tests.json case by case of stage eg: stages[0] create identifier is randomOnCreate will set &#039;generatedSeedData&#039; and stages[1] create relationship is randomOnCreate(It is usually random, except in the case of relationship version) set generatedSeedData this stages[1].&lt;br /&gt;
*How to delete case identifier rendomOnCreate?: set in stage use setting generateSeedData &amp;quot;randomOnCreateIdentifier&amp;quot;&lt;br /&gt;
#randomOnCreateIdentifier&lt;br /&gt;
#notRandomOnIdentifier&lt;br /&gt;
#relationships&lt;br /&gt;
=====randomOnCreateIdentifier=====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;quot;stages&amp;quot;: [&lt;br /&gt;
      {&lt;br /&gt;
        &amp;quot;initialStage&amp;quot;: true,&lt;br /&gt;
        &amp;quot;inputEventTag&amp;quot;: &amp;quot;MLocation_CreateHdrSqs__case_NodeVersionData_Jaya&amp;quot;,&lt;br /&gt;
        &amp;quot;serviceTag&amp;quot;: &amp;quot;MLocations&amp;quot;,&lt;br /&gt;
        &amp;quot;resourceType&amp;quot;: &amp;quot;Lambda&amp;quot;,&lt;br /&gt;
        &amp;quot;resourceName&amp;quot;: &amp;quot;CreateHdrSqs&amp;quot;,&lt;br /&gt;
        &amp;quot;snsServiceName&amp;quot;: &amp;quot;MLocations&amp;quot;,&lt;br /&gt;
        &amp;quot;snsTopic&amp;quot;: &amp;quot;Create_In&amp;quot;,&lt;br /&gt;
        &amp;quot;generatedSeedData&amp;quot;: {&lt;br /&gt;
          &amp;quot;randomOnCreateIdentifier&amp;quot;: [&lt;br /&gt;
            {&lt;br /&gt;
              &amp;quot;objType&amp;quot;: {&lt;br /&gt;
                &amp;quot;serviceTag&amp;quot;: &amp;quot;MLocations&amp;quot;,&lt;br /&gt;
                &amp;quot;objectType&amp;quot;: &amp;quot;Member&amp;quot;&lt;br /&gt;
              },&lt;br /&gt;
              &amp;quot;identifierValue&amp;quot;: &amp;quot;Jaya-member-001&amp;quot;&lt;br /&gt;
            }&lt;br /&gt;
          ]&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
=====notRandomOnIdentifier=====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;quot;stages&amp;quot;: [&lt;br /&gt;
      {&lt;br /&gt;
        &amp;quot;initialStage&amp;quot;: true,&lt;br /&gt;
        &amp;quot;inputEventTag&amp;quot;: &amp;quot;MLocation_CreateHdrSqs__case_NodeVersionData_Jaya&amp;quot;,&lt;br /&gt;
        &amp;quot;serviceTag&amp;quot;: &amp;quot;MLocations&amp;quot;,&lt;br /&gt;
        &amp;quot;resourceType&amp;quot;: &amp;quot;Lambda&amp;quot;,&lt;br /&gt;
        &amp;quot;resourceName&amp;quot;: &amp;quot;CreateHdrSqs&amp;quot;,&lt;br /&gt;
        &amp;quot;snsServiceName&amp;quot;: &amp;quot;MLocations&amp;quot;,&lt;br /&gt;
        &amp;quot;snsTopic&amp;quot;: &amp;quot;Create_In&amp;quot;,&lt;br /&gt;
        &amp;quot;generatedSeedData&amp;quot;: {&lt;br /&gt;
          &amp;quot;notRandomOnIdentifier&amp;quot;: [&lt;br /&gt;
            {&lt;br /&gt;
              &amp;quot;objType&amp;quot;: {&lt;br /&gt;
                &amp;quot;serviceTag&amp;quot;: &amp;quot;gggg&amp;quot;,&lt;br /&gt;
                &amp;quot;objectType&amp;quot;: &amp;quot;ssssss&amp;quot;&lt;br /&gt;
              },&lt;br /&gt;
              &amp;quot;identifiers&amp;quot;: {&lt;br /&gt;
                &amp;quot;topId&amp;quot;: &amp;quot;123456&amp;quot;&lt;br /&gt;
              }&lt;br /&gt;
            }&lt;br /&gt;
          ]&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    ]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
=====relationships=====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;quot;stages&amp;quot;: [&lt;br /&gt;
      {&lt;br /&gt;
        &amp;quot;initialStage&amp;quot;: true,&lt;br /&gt;
        &amp;quot;inputEventTag&amp;quot;: &amp;quot;MLocation_CreateHdrSqs__case_NodeVersionData_Jaya&amp;quot;,&lt;br /&gt;
        &amp;quot;serviceTag&amp;quot;: &amp;quot;MLocations&amp;quot;,&lt;br /&gt;
        &amp;quot;resourceType&amp;quot;: &amp;quot;Lambda&amp;quot;,&lt;br /&gt;
        &amp;quot;resourceName&amp;quot;: &amp;quot;CreateHdrSqs&amp;quot;,&lt;br /&gt;
        &amp;quot;snsServiceName&amp;quot;: &amp;quot;MLocations&amp;quot;,&lt;br /&gt;
        &amp;quot;snsTopic&amp;quot;: &amp;quot;Create_In&amp;quot;,&lt;br /&gt;
        &amp;quot;generatedSeedData&amp;quot;: {&lt;br /&gt;
         &amp;quot;relationships&amp;quot;: [&lt;br /&gt;
            {&lt;br /&gt;
              &amp;quot;relType&amp;quot;: {&lt;br /&gt;
                &amp;quot;serviceTag&amp;quot;: &amp;quot;PaymentMethodGeneric&amp;quot;,&lt;br /&gt;
                &amp;quot;relationshipTag&amp;quot;: &amp;quot;disabledPaymentMethodGenericPropertyValue&amp;quot;&lt;br /&gt;
              },&lt;br /&gt;
              &amp;quot;relId&amp;quot;: &amp;quot;f4f73de7-647c-4b3b-8043-87cc002f361a&amp;quot;&lt;br /&gt;
            }&lt;br /&gt;
          ]&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    ]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Dynamodb==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
stages: [&lt;br /&gt;
        {&lt;br /&gt;
          initialStage: true,&lt;br /&gt;
          inputEventTag: &#039;Locations_LambdaFunctionHdrDsq_singleStage_directSqs__pass&#039;,&lt;br /&gt;
          serviceName: &#039;ServiceTemplate&#039;,&lt;br /&gt;
          resourceType: &#039;Lambda&#039;,&lt;br /&gt;
          resourceName: &#039;LambdaFunctionHdrDsq&#039;,&lt;br /&gt;
          outputEventTag: &#039;output_Locations_LambdaFunctionHdrDsq_singleStage_directSqs__pass&#039;,&lt;br /&gt;
          dynamodbOutputEventIdentifiers: [&lt;br /&gt;
			{&lt;br /&gt;
              serviceName: {tableName}, //service that deployed the DynamoDB table, so can build table&#039;s full resource name&lt;br /&gt;
              resourceName: {resourceName}, //DynamoDB resourceName&lt;br /&gt;
              eventTag: {eventTagDynamoDB}&lt;br /&gt;
		    }&lt;br /&gt;
          ],&lt;br /&gt;
        }&lt;br /&gt;
      ]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Result of integrationtest =&lt;br /&gt;
Data have 2 table &amp;quot;TestRecord&amp;quot; and &amp;quot;TestUnit&amp;quot;.&lt;br /&gt;
:- TestRecord is table all unti of stage inside eg input output invokes and dynamodb&lt;br /&gt;
:- TestUnit is store status each unit &lt;br /&gt;
each unit save in table TestUnit&lt;br /&gt;
testRecordId is  name of test concat with testTime.&lt;br /&gt;
testUnitId is point to position of unti instage.&lt;br /&gt;
resultStatus is status of unit.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
eg:&lt;br /&gt;
input_0 = stages index 0 result &#039;&#039;&#039;input&#039;&#039;&#039;&lt;br /&gt;
output_1 = stages index 1 result &#039;&#039;&#039;output&#039;&#039;&#039;&lt;br /&gt;
invokeInput_0_1 = stages index 0 result &#039;&#039;&#039;invokes&#039;&#039;&#039; index 1 position input &lt;br /&gt;
invokeOutput_0_1 = stages index 0 result &#039;&#039;&#039;invokes&#039;&#039;&#039; index 1 position output&lt;br /&gt;
dynamodb_0_1 =  stages index 0 result &#039;&#039;&#039;dynamodb&#039;&#039;&#039; index 1.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
after all TestUnit finish (check  by awaitingMultiplestep penditnStep is integrationtestTag awaitingStepId is each TestUnit )&lt;br /&gt;
check all awaitingStep finish send message to ultimateIntegrationtest for sumla all test is status&lt;br /&gt;
&lt;br /&gt;
== Summary of test status == &lt;br /&gt;
:1.testStatus is &amp;quot;passed&amp;quot; all unit passed.&lt;br /&gt;
:2.testStatus is &amp;quot;failed&amp;quot;  have some is failed.&lt;br /&gt;
:3.testStatus is &amp;quot;processing&amp;quot; have some is have status processing after check all awaiting step is finish.&lt;br /&gt;
:4.testStatus is &amp;quot;failed&amp;quot; have record &amp;quot;errorsTest&amp;quot; in case &amp;quot;not match stage invoke&amp;quot;, &#039;found multiple matchingInvokes&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*[[2025-02-20 - Integration Test examples#tests.js Syntax|Syntax Dynamodb]]&lt;br /&gt;
&lt;br /&gt;
=How to test integrationtest s3=&lt;br /&gt;
[[Developer guide for making Integration Tests]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Working documents| 2025-11-20]]&lt;br /&gt;
[[Category:Working documents - Integration Testing| 2025-11-20]]&lt;/div&gt;</summary>
		<author><name>Mint</name></author>
	</entry>
	<entry>
		<id>https://izara.io/wiki/index.php?title=2025-11-20_IntegrationTest&amp;diff=4572</id>
		<title>2025-11-20 IntegrationTest</title>
		<link rel="alternate" type="text/html" href="https://izara.io/wiki/index.php?title=2025-11-20_IntegrationTest&amp;diff=4572"/>
		<updated>2026-08-11T06:34:21Z</updated>

		<summary type="html">&lt;p&gt;Mint: /* graphSeedDataTags */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Reference:&lt;br /&gt;
&lt;br /&gt;
*[[2020-10-01 - Integration Test Config - Functions|IntegrationtestConfig]]&lt;br /&gt;
*[[2020-10-01 - Integration Testing - Lambda Functions|Integrationtesting]]&lt;br /&gt;
*[[2025-02-20 - Integration Test examples|Example]]&lt;br /&gt;
&lt;br /&gt;
= File extension =&lt;br /&gt;
&lt;br /&gt;
uploadS3: &amp;quot;.json&amp;quot;&lt;br /&gt;
integrationtestConfig: &amp;quot;.js&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=TestRecord=&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JSON&amp;quot;&amp;gt;&lt;br /&gt;
[&lt;br /&gt;
  {&lt;br /&gt;
    integrationTestTag: &amp;quot;Integrationtest_xx&amp;quot;,&lt;br /&gt;
    testStartedTimestamp: 111111111, // start time&lt;br /&gt;
    bucketName: &amp;quot;integrationtest-config-us-east-2&amp;quot;,&lt;br /&gt;
    lastUpdateUniqueRequestId: &amp;quot;sssss&amp;quot;, //_izContext.uniqueRequestId protacts race coditionn dynamodb&lt;br /&gt;
    testStatus: &amp;quot;passed&amp;quot;,//failed,processing,passed&lt;br /&gt;
    testCompleteTimestamp: 1111113, // all test finish&lt;br /&gt;
    stages: [&lt;br /&gt;
      {&lt;br /&gt;
        stageConfig: {&lt;br /&gt;
          //straight copy of this stage from integration test config&lt;br /&gt;
          inputEventTag: &amp;quot;xx&amp;quot;,&lt;br /&gt;
          inputEventConfig: {//event input&lt;br /&gt;
          },&lt;br /&gt;
          outputEventTag: &amp;quot;output_xx&amp;quot;,&lt;br /&gt;
          outputEventConfig: {//event out put&lt;br /&gt;
          },&lt;br /&gt;
          resourceName: &amp;quot;ComplexfilterTestProcessComplexfilter&amp;quot;,// function name&lt;br /&gt;
          resourceType: &amp;quot;Lambda&amp;quot;, // function name&lt;br /&gt;
          serviceTag: &amp;quot;Complexfilter&amp;quot;,// (initeate sqs)&lt;br /&gt;
          snsServiceName: &amp;quot;Complexfilter&amp;quot;,// (initeate sqs)&lt;br /&gt;
          snsTopic: &amp;quot;PorcessComplexfilter_In&amp;quot;// (initeate sqs)&lt;br /&gt;
&lt;br /&gt;
        },&lt;br /&gt;
        stageStatus: &amp;quot;waiting&amp;quot;, //waiting|passed|failed,&lt;br /&gt;
        stageFinishedTimestamp: 111111111,// time that all tests finished and testRecord.stages.{stageKey}.stageStatus updated&lt;br /&gt;
        stageResults: {&lt;br /&gt;
          //results at the point of entering the resource (eg a Lambda function is invoked)&lt;br /&gt;
          inputResult: {&lt;br /&gt;
            resultTimestamp: 111111111,//{time result saved},&lt;br /&gt;
            resultStatus: &amp;quot;passed&amp;quot;,//passed|failed,&lt;br /&gt;
            requestParams: {//event input&lt;br /&gt;
            }&lt;br /&gt;
          },&lt;br /&gt;
          //results at the point of returning from the resource (eg a Lambda function returns)&lt;br /&gt;
          outputResult: {&lt;br /&gt;
            resultTimestamp: 111111111,//{time result saved},&lt;br /&gt;
            resultStatus: &amp;quot;passed&amp;quot;,//passed|failed,&lt;br /&gt;
            requestParams: {//event input&lt;br /&gt;
            }&lt;br /&gt;
          },&lt;br /&gt;
          //results at the point of invoking an external resource (eg the tested Lambda function is invoking another Lambda function)&lt;br /&gt;
          invokes: {&lt;br /&gt;
            &amp;quot;serviceName_resourceType_resourceName_inputEventTag &amp;quot;: {&lt;br /&gt;
              invokeTimestamp: 111111111,//{ time result saved },&lt;br /&gt;
              resultTimestamp: 111111112,//{ time result saved },&lt;br /&gt;
              resultStatus: &amp;quot;passed&amp;quot;,//passed | failed,&lt;br /&gt;
              invokeParams: {},//{event invoke input config }&lt;br /&gt;
              requestParams: {}// event invoke input request&lt;br /&gt;
            },&lt;br /&gt;
          },&lt;br /&gt;
          dynamodbResults: [&lt;br /&gt;
            {&lt;br /&gt;
              indexOfDynamodbOutput: 0,&lt;br /&gt;
              requestParams,&lt;br /&gt;
              resultStatus: &amp;quot;passed&amp;quot;,//&lt;br /&gt;
              resultTimestamp: 22222&lt;br /&gt;
            }]&lt;br /&gt;
&lt;br /&gt;
        },&lt;br /&gt;
        stageErrors: [&lt;br /&gt;
          //misc errors encountered&lt;br /&gt;
        ]&lt;br /&gt;
      }]&lt;br /&gt;
&lt;br /&gt;
  }&lt;br /&gt;
]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Seed Data=&lt;br /&gt;
integrationtest manager seed date 2 process&lt;br /&gt;
&lt;br /&gt;
=== Main Seed Data===&lt;br /&gt;
:Save file in s3 (in &#039;&#039;&#039;buckname&#039;&#039;&#039; :integrationtest-config-us-east-2, &#039;&#039;&#039;folder&#039;&#039;&#039;:seedData_integrationTest).For other dev use service,If a developer wants to add more for other important testing purposes.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;How to use:&#039;&#039;&#039;&lt;br /&gt;
#Add it from the s3 bucket at this point&lt;br /&gt;
#Run batch refreshSeedData [[Developer guide for making Integration Tests#Bash script|batch RefreshSeedData]]&lt;br /&gt;
&#039;&#039;&#039;Logic&#039;&#039;&#039;:Process by storage resouse (graph or dynamodb)&lt;br /&gt;
:To clean up the seed data in the table after it creates seed data form service deploy and pulls seed data from s3.&lt;br /&gt;
&lt;br /&gt;
=== Refresh Seed Data ===&lt;br /&gt;
:ProcessRefreshSeedData use seedDataTag for create data environment of &#039;&#039;&#039;test&#039;&#039;&#039; and can be refresh seeddata re-test agian.&lt;br /&gt;
:&#039;&#039;&#039;canbe share&#039;&#039;&#039; seed data for other test by seed data tag.&lt;br /&gt;
&#039;&#039;&#039;How to use:&#039;&#039;&#039;&lt;br /&gt;
:Save file in s3 (for other dav keep in floder dev name) or testConfig/seedData_config(for admin)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Folder&#039;&#039;&#039;&lt;br /&gt;
*dynamoDBSeedDataTags.json&lt;br /&gt;
*graphSeedDataTags.json&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Example&#039;&#039;&#039;&lt;br /&gt;
==== dynamoDBSeedDataTags ====&lt;br /&gt;
:If set tag in this setting integrationtest is generate seed data. in storage resource dynammodb.&lt;br /&gt;
Example&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;seedDynamodb_abc_ver2&amp;quot;: [ // seedDataTag&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;tableName&amp;quot;: &amp;quot;DelivMethodSTDTestLogicalResultsData&amp;quot;,  // servcieTag+stage+tablename&lt;br /&gt;
      &amp;quot;partitionKey&amp;quot;: &amp;quot;logicalResultId&amp;quot;,&lt;br /&gt;
      &amp;quot;sortKey&amp;quot;: &amp;quot;identifiersId&amp;quot;,&lt;br /&gt;
      &amp;quot;datas&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;logicalResultId&amp;quot;: &amp;quot;eeeeeeeeee4&amp;quot;,&lt;br /&gt;
          &amp;quot;identifiersId&amp;quot;: &amp;quot;lllll123456&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;logicalResultId&amp;quot;: &amp;quot;eeeeeeeeee4&amp;quot;,&lt;br /&gt;
          &amp;quot;identifiersId&amp;quot;: &amp;quot;lllll777777&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
      ],&lt;br /&gt;
		&amp;quot;calculatedDatas&amp;quot;: {&lt;br /&gt;
			&amp;quot;exampleTimestamp&amp;quot;: {&lt;br /&gt;
				calcType: &amp;quot;currentTimestampAdjustment&amp;quot;, // can add other types of calculated data in future&lt;br /&gt;
				action: &amp;quot;add&amp;quot;, // add|subtract&lt;br /&gt;
				adjustment: &amp;quot;2 days&amp;quot;, // Human-Readable Relative Format&lt;br /&gt;
			},&lt;br /&gt;
			// ...&lt;br /&gt;
		},&lt;br /&gt;
	},&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;tableName&amp;quot;: &amp;quot;MLocationsTestFloatingRelationships&amp;quot;,// servcieTag+stage+tablename&lt;br /&gt;
      &amp;quot;partitionKey&amp;quot;: &amp;quot;importBatchId&amp;quot;,&lt;br /&gt;
      &amp;quot;sortKey&amp;quot;: &amp;quot;identifierRelationshipsId&amp;quot;,&lt;br /&gt;
      &amp;quot;datas&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;importBatchId&amp;quot;: &amp;quot;2-uuuuuuuuuuuuuu&amp;quot;,&lt;br /&gt;
          &amp;quot;identifierRelationshipsId&amp;quot;: &amp;quot;lllll123456&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;importBatchId&amp;quot;: &amp;quot;2-uuuuuuuuuuuuuu&amp;quot;,&lt;br /&gt;
          &amp;quot;identifierRelationshipsId&amp;quot;: &amp;quot;lllll777777&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;importBatchId&amp;quot;: &amp;quot;2-uuuuuuuuuuuuuu&amp;quot;,&lt;br /&gt;
          &amp;quot;identifierRelationshipsId&amp;quot;: &amp;quot;lllll99999999&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
      ]&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;tableName&amp;quot;: &amp;quot;MLocationsTestFindDataMain&amp;quot;,&lt;br /&gt;
      &amp;quot;partitionKey&amp;quot;: &amp;quot;findDataId&amp;quot;,&lt;br /&gt;
      &amp;quot;datas&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;findDataId&amp;quot;: &amp;quot;111111&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;findDataId&amp;quot;: &amp;quot;22222&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;findDataId&amp;quot;: &amp;quot;333333&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
      ]&lt;br /&gt;
    }&lt;br /&gt;
  ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== graphSeedDataTags ====&lt;br /&gt;
:If set tag in this setting integrationtest is generate seed data. in storage resource graphHanler.&lt;br /&gt;
Example&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;seedData_testTag_GG&amp;quot;: [ // seedDataTag&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;nodes&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;nodeLabels&amp;quot;: [&lt;br /&gt;
            &amp;quot;SellOfferPlan_sellOfferPlanDeliveryMethodLink&amp;quot;&lt;br /&gt;
          ],&lt;br /&gt;
          &amp;quot;objectDetail&amp;quot;: {&lt;br /&gt;
            &amp;quot;identifiers&amp;quot;: {&lt;br /&gt;
              &amp;quot;sellOfferPlanDeliveryMethodLinkId&amp;quot;: &amp;quot;minttestrefreshSeedData_01&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;fields&amp;quot;: {&lt;br /&gt;
              &amp;quot;productId&amp;quot;: &amp;quot;ddddd&amp;quot;,&lt;br /&gt;
              &amp;quot;price&amp;quot;: 9999&lt;br /&gt;
            }&lt;br /&gt;
			&amp;quot;calculatedFields&amp;quot;: {&lt;br /&gt;
				&amp;quot;exampleTimestamp&amp;quot;: {&lt;br /&gt;
					calcType: &amp;quot;currentTimestampAdjustment&amp;quot;, // can add other types of calculated data in future&lt;br /&gt;
					action: &amp;quot;add&amp;quot;, // add|subtract&lt;br /&gt;
					adjustment: &amp;quot;2 days&amp;quot;, // Human-Readable Relative Format&lt;br /&gt;
				},&lt;br /&gt;
				// ...&lt;br /&gt;
			},            &lt;br /&gt;
          }&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;nodeLabels&amp;quot;: [&lt;br /&gt;
            &amp;quot;servcieMintTest_shoppingMall&amp;quot;&lt;br /&gt;
          ],&lt;br /&gt;
          &amp;quot;objectDetail&amp;quot;: {&lt;br /&gt;
            &amp;quot;identifiers&amp;quot;: {&lt;br /&gt;
              &amp;quot;shoppingMallId&amp;quot;: &amp;quot;minttestrefreshSeedData_shoppingMallId&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;fields&amp;quot;: {&lt;br /&gt;
              &amp;quot;name&amp;quot;: &amp;quot;hotpot-man&amp;quot;,&lt;br /&gt;
              &amp;quot;totalPrice&amp;quot;: 500&lt;br /&gt;
            }&lt;br /&gt;
          }&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;nodeLabels&amp;quot;: [&lt;br /&gt;
            &amp;quot;servcieMintTest_shoppingMallCalculateSetting&amp;quot;&lt;br /&gt;
          ],&lt;br /&gt;
          &amp;quot;objectDetail&amp;quot;: {&lt;br /&gt;
            &amp;quot;identifiers&amp;quot;: {&lt;br /&gt;
              &amp;quot;versionedDataId&amp;quot;: &amp;quot;minttestrefreshSeedData_versionedDataId&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;fields&amp;quot;: {&lt;br /&gt;
              &amp;quot;addToCalculatedValuePerOrder&amp;quot;: 10,&lt;br /&gt;
              &amp;quot;addToRateTableValuePerOrder&amp;quot;: 77&lt;br /&gt;
            }&lt;br /&gt;
          }&lt;br /&gt;
        }&lt;br /&gt;
      ],&lt;br /&gt;
      &amp;quot;relationships&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;fromObject&amp;quot;: {&lt;br /&gt;
            &amp;quot;nodeLabel&amp;quot;: &amp;quot;SellOfferPlan_sellOfferPlanDeliveryMethodLink&amp;quot;,&lt;br /&gt;
            &amp;quot;identifiers&amp;quot;: {&lt;br /&gt;
              &amp;quot;sellOfferPlanDeliveryMethodLinkId&amp;quot;: &amp;quot;minttestrefreshSeedData_01&amp;quot;&lt;br /&gt;
            }&lt;br /&gt;
          },&lt;br /&gt;
          &amp;quot;toObject&amp;quot;: {&lt;br /&gt;
            &amp;quot;nodeLabel&amp;quot;: &amp;quot;servcieMintTest_shoppingMall&amp;quot;,&lt;br /&gt;
            &amp;quot;identifiers&amp;quot;: {&lt;br /&gt;
              &amp;quot;shoppingMallId&amp;quot;: &amp;quot;minttestrefreshSeedData_shoppingMallId&amp;quot;&lt;br /&gt;
            }&lt;br /&gt;
          },&lt;br /&gt;
          &amp;quot;relationships&amp;quot;: [&lt;br /&gt;
            {&lt;br /&gt;
              &amp;quot;relTypeConcat&amp;quot;: &amp;quot;SellOfferPlan_hasCCCCCCC&amp;quot;,&lt;br /&gt;
              &amp;quot;relId&amp;quot;: &amp;quot;uuid-4s56df74s9df79w-w6de4f5w689ef&amp;quot;&lt;br /&gt;
            }&lt;br /&gt;
          ]&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;fromObject&amp;quot;: {&lt;br /&gt;
            &amp;quot;nodeLabel&amp;quot;: &amp;quot;servcieMintTest_shoppingMall&amp;quot;,&lt;br /&gt;
            &amp;quot;identifiers&amp;quot;: {&lt;br /&gt;
              &amp;quot;shoppingMallId&amp;quot;: &amp;quot;minttestrefreshSeedData_shoppingMallId&amp;quot;&lt;br /&gt;
            }&lt;br /&gt;
          },&lt;br /&gt;
          &amp;quot;toObject&amp;quot;: {&lt;br /&gt;
            &amp;quot;nodeLabel&amp;quot;: &amp;quot;servcieMintTest_shoppingMallCalculateSetting&amp;quot;,&lt;br /&gt;
            &amp;quot;identifiers&amp;quot;: {&lt;br /&gt;
              &amp;quot;versionedDataId&amp;quot;: &amp;quot;minttestrefreshSeedData_versionedDataId&amp;quot;&lt;br /&gt;
            }&lt;br /&gt;
          },&lt;br /&gt;
          &amp;quot;relationships&amp;quot;: [&lt;br /&gt;
            {&lt;br /&gt;
              &amp;quot;relTypeConcat&amp;quot;: &amp;quot;servcieMintTest_shoppingMall_currentShoppingMallCalculateSetting&amp;quot;,&lt;br /&gt;
              &amp;quot;relId&amp;quot;: &amp;quot;uuid-s122df5-s21df&amp;quot;,&lt;br /&gt;
              &amp;quot;relationshipProperty&amp;quot;: {&lt;br /&gt;
                &amp;quot;timeStamp&amp;quot;: 1234567879,&lt;br /&gt;
                &amp;quot;statusName&amp;quot;: true&lt;br /&gt;
              }&lt;br /&gt;
            },&lt;br /&gt;
            {&lt;br /&gt;
              &amp;quot;relTypeConcat&amp;quot;: &amp;quot;servcieMintTest_shoppingMall_hasShoppingMallCalculateSetting&amp;quot;,&lt;br /&gt;
              &amp;quot;relId&amp;quot;: &amp;quot;uuid-77777-99999&amp;quot;,&lt;br /&gt;
              &amp;quot;relationshipProperty&amp;quot;: {&lt;br /&gt;
                &amp;quot;statusName&amp;quot;: true&lt;br /&gt;
              }&lt;br /&gt;
				&amp;quot;calculatedRelationshipProperties&amp;quot;: {&lt;br /&gt;
					&amp;quot;exampleTimestamp&amp;quot;: {&lt;br /&gt;
						calcType: &amp;quot;currentTimestampAdjustment&amp;quot;, // can add other types of calculated data in future&lt;br /&gt;
						action: &amp;quot;add&amp;quot;, // add|subtract&lt;br /&gt;
						adjustment: &amp;quot;2 days&amp;quot;, // Human-Readable Relative Format&lt;br /&gt;
					},&lt;br /&gt;
					// ...&lt;br /&gt;
				},   &lt;br /&gt;
            }&lt;br /&gt;
          ]&lt;br /&gt;
        }&lt;br /&gt;
      ]&lt;br /&gt;
    }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;seedData_testTag_ABC&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;objType&amp;quot;: {&lt;br /&gt;
        &amp;quot;objectType&amp;quot;: &amp;quot;productAttributeLink&amp;quot;,&lt;br /&gt;
        &amp;quot;serviceTag&amp;quot;: &amp;quot;ProductAttribute&amp;quot;&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;objInstanceFull&amp;quot;: {&lt;br /&gt;
        &amp;quot;identifiers&amp;quot;: {&lt;br /&gt;
          &amp;quot;productAttributeLinkId&amp;quot;: &amp;quot;f90b57ca8b2fe1a83459d57da038cf50fb6d40e6&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;fields&amp;quot;: {}&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;relationships&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;relType&amp;quot;: {&lt;br /&gt;
            &amp;quot;serviceTag&amp;quot;: &amp;quot;ProductAttribute&amp;quot;,&lt;br /&gt;
            &amp;quot;relationshipTag&amp;quot;: &amp;quot;hasProductAttributeLink&amp;quot;&lt;br /&gt;
          },&lt;br /&gt;
          &amp;quot;relationshipDirection&amp;quot;: &amp;quot;to&amp;quot;,&lt;br /&gt;
          &amp;quot;targetObjType&amp;quot;: {&lt;br /&gt;
            &amp;quot;serviceTag&amp;quot;: &amp;quot;ProductStandard&amp;quot;,&lt;br /&gt;
            &amp;quot;objectType&amp;quot;: &amp;quot;productStandard&amp;quot;&lt;br /&gt;
          },&lt;br /&gt;
          &amp;quot;targetIdentifiers&amp;quot;: {&lt;br /&gt;
            &amp;quot;productId&amp;quot;: &amp;quot;f526a367a2b66cb0f37ca61b6c43f419929f521d&amp;quot;&lt;br /&gt;
          },&lt;br /&gt;
          &amp;quot;relationshipProperties&amp;quot;: {}&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;relType&amp;quot;: {&lt;br /&gt;
            &amp;quot;serviceTag&amp;quot;: &amp;quot;ProductAttribute&amp;quot;,&lt;br /&gt;
            &amp;quot;relationshipTag&amp;quot;: &amp;quot;isProductAttribute&amp;quot;&lt;br /&gt;
          },&lt;br /&gt;
          &amp;quot;relationshipDirection&amp;quot;: &amp;quot;from&amp;quot;,&lt;br /&gt;
          &amp;quot;targetObjType&amp;quot;: {&lt;br /&gt;
            &amp;quot;serviceTag&amp;quot;: &amp;quot;ProductAttribute&amp;quot;,&lt;br /&gt;
            &amp;quot;objectType&amp;quot;: &amp;quot;productAttribute&amp;quot;&lt;br /&gt;
          },&lt;br /&gt;
          &amp;quot;targetIdentifiers&amp;quot;: {&lt;br /&gt;
            &amp;quot;productAttributeId&amp;quot;: &amp;quot;f4bf7a078071d54036656df544197ba638bc3a68&amp;quot;&lt;br /&gt;
          },&lt;br /&gt;
          &amp;quot;relationshipProperties&amp;quot;: {}&lt;br /&gt;
        }&lt;br /&gt;
      ]&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;objType&amp;quot;: {&lt;br /&gt;
        &amp;quot;objectType&amp;quot;: &amp;quot;productAttributeLink&amp;quot;,&lt;br /&gt;
        &amp;quot;serviceTag&amp;quot;: &amp;quot;ProductAttribute&amp;quot;&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;objInstanceFull&amp;quot;: {&lt;br /&gt;
        &amp;quot;identifiers&amp;quot;: {&lt;br /&gt;
          &amp;quot;productAttributeLinkId&amp;quot;: &amp;quot;f90b57ca8b2fe1a83459d57da038cf50fb6d40e6&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;fields&amp;quot;: {}&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;relationships&amp;quot;: []&lt;br /&gt;
    }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;seedData_testTag_LL&amp;quot;: []&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Cleaning Seed Data ===&lt;br /&gt;
:Delete seed data for set environment of &#039;&#039;&#039;test&#039;&#039;&#039;.&lt;br /&gt;
*cleaningeDynamoOneRecordsTags.json&lt;br /&gt;
*cleaningeDynamoManyRecordsTags.json&lt;br /&gt;
&lt;br /&gt;
====cleaningeDynamoOneRecordsTags====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;cleaningSeed_TestFindData_and_Education_case_invalid01&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;tableName&amp;quot;: &amp;quot;MLocationsTestFindDataMain&amp;quot;,&lt;br /&gt;
      &amp;quot;primaryKeys&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;findDataId&amp;quot;: &amp;quot;cleaning-1&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;findDataId&amp;quot;: &amp;quot;cleaning-2&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
      ]&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;tableName&amp;quot;: &amp;quot;MLocationsTestEducation&amp;quot;,&lt;br /&gt;
      &amp;quot;primaryKeys&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;studentId&amp;quot;: &amp;quot;cleaning-AA&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;studentId&amp;quot;: &amp;quot;cleaning-BB&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;studentId&amp;quot;: &amp;quot;cleaning-CC&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
      ]&lt;br /&gt;
    }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;cleaningSeed_TestMemberPersonnel_case_invalid01&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;tableName&amp;quot;: &amp;quot;MLocationsTestMemberPersonnel&amp;quot;,&lt;br /&gt;
      &amp;quot;primaryKeys&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;userId&amp;quot;: &amp;quot;namtan&amp;quot;,&lt;br /&gt;
          &amp;quot;passwordId&amp;quot;: &amp;quot;qqqww&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;userId&amp;quot;: &amp;quot;jack&amp;quot;,&lt;br /&gt;
          &amp;quot;passwordId&amp;quot;: &amp;quot;q1&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;userId&amp;quot;: &amp;quot;Momay&amp;quot;,&lt;br /&gt;
          &amp;quot;passwordId&amp;quot;: &amp;quot;ttr&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
      ]&lt;br /&gt;
    }&lt;br /&gt;
  ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== cleaningeDynamoManyRecordsTags ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;cleaningSeed_manyData_partitionKey_only_miss_sort&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;tableName&amp;quot;: &amp;quot;MLocationsTestMemberPersonnel&amp;quot;,&lt;br /&gt;
      &amp;quot;primaryKeys&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;userId&amp;quot;: &amp;quot;many-data&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
      ]&lt;br /&gt;
    }&lt;br /&gt;
  ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*logic query table MLocationsTestMemberPersonnel use primary Keys &amp;quot;userId&amp;quot; and then delete all data from primary Keys.&lt;br /&gt;
&lt;br /&gt;
=resources=&lt;br /&gt;
syntax is object&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{ &lt;br /&gt;
	&amp;quot;Lambda&amp;quot;:{&lt;br /&gt;
		&amp;quot;{FunctionNameHdrSqs}&amp;quot;:{ // FunctionNameHdrSqs is match resourceName in file tests&lt;br /&gt;
			&amp;quot;localLacation&amp;quot;:&amp;quot;/src/FunctionNameHdrSqs.js&amp;quot;,&lt;br /&gt;
			&amp;quot;localHandler&amp;quot;:&amp;quot;main&amp;quot;, &lt;br /&gt;
			&amp;quot;functionName&amp;quot;:&amp;quot;FunctionNameHdrSqs&amp;quot;	// FunctionName is function name match key of function.yml of servcie.&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;ProcessComplexFilterHdrSqs&amp;quot;:{ &lt;br /&gt;
			&amp;quot;localLacation&amp;quot;:&amp;quot;/src/ProcessComplexFilterHdrSqs.js&amp;quot;, &lt;br /&gt;
			&amp;quot;localHandler&amp;quot;:&amp;quot;main&amp;quot;, &lt;br /&gt;
			&amp;quot;functionName&amp;quot;:&amp;quot;ProcessComplexFilterHdrSqs&amp;quot; &lt;br /&gt;
		},&lt;br /&gt;
		... &lt;br /&gt;
	},&lt;br /&gt;
	&amp;quot;Dynamodb&amp;quot;: {&lt;br /&gt;
		&amp;quot;filterMain&amp;quot;:{ // match resourceName in file tests(dynamodbOutputEventIdentifiers)&lt;br /&gt;
			&amp;quot;tableName&amp;quot;:&amp;quot;filterMain&amp;quot; &lt;br /&gt;
		}, &lt;br /&gt;
		&amp;quot;tableNameBB&amp;quot;:{ &lt;br /&gt;
			&amp;quot;tableName&amp;quot;:&amp;quot;tableNameBB&amp;quot; &lt;br /&gt;
		},&lt;br /&gt;
		... &lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=events=&lt;br /&gt;
Syntax is object&lt;br /&gt;
==Syntax Name==&lt;br /&gt;
===FileName===&lt;br /&gt;
::Event_{inputEventTag}&lt;br /&gt;
&lt;br /&gt;
===eventTag===&lt;br /&gt;
#inputEventTag&lt;br /&gt;
#outputEventTag&lt;br /&gt;
#dynamodbTag&lt;br /&gt;
&lt;br /&gt;
*file events.js is have eventTag  (inputEventTag,outputEventTag,dynamodbTag)&lt;br /&gt;
**How to create name eventTag&lt;br /&gt;
***Example case : &amp;quot;test in service complexFilter functionname ProcessComplexFilter case element type is logical basic&amp;quot;.&lt;br /&gt;
::*&#039;&#039;&#039;inputEventTag&#039;&#039;&#039;&lt;br /&gt;
::::{serviceName}_{functionName}_{caseTest}&lt;br /&gt;
&#039;&#039;Conplexfilter_ProcessComplexFilter_Typelogical_basic&#039;&#039;&lt;br /&gt;
::*&#039;&#039;&#039;outputEventTag&#039;&#039;&#039;&lt;br /&gt;
::::output_{inputEventTag}&lt;br /&gt;
&#039;&#039;output_Conplexfilter_ProcessComplexFilter_Typelogical_basic&#039;&#039;&lt;br /&gt;
::*&#039;&#039;&#039;dynamodbTag&#039;&#039;&#039;&lt;br /&gt;
::::{inputEventTag}__Dynamodb__{&#039;&#039;&#039;action*&#039;&#039;&#039;}_{tableName} &lt;br /&gt;
&#039;&#039;Conplexfilter_ProcessComplexFilter_Typelogical_basic___Dynamodb__putItem_filterMain&#039;&#039;&lt;br /&gt;
: &amp;lt;u&amp;gt;&#039;&#039;&#039;{action}&#039;&#039;&#039; is only &#039;&#039;put&#039;&#039; or &#039;&#039;update&#039;&#039;, and in case of &#039;&#039;update&#039;&#039; must only test the last step of update &amp;lt;/u&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Syntax event===&lt;br /&gt;
====initiate by handlerServcie====&lt;br /&gt;
=====Sqs=====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
// An example input and output event of Sns&lt;br /&gt;
{&lt;br /&gt;
   &amp;quot;LambdaFunctionHdrSqs_input__pass&amp;quot;:{&lt;br /&gt;
      &amp;quot;properties&amp;quot;:{&lt;br /&gt;
         &amp;quot;propertyA&amp;quot;:{&lt;br /&gt;
            &amp;quot;value&amp;quot;:&amp;quot;valueProperty1&amp;quot;&lt;br /&gt;
         },&lt;br /&gt;
         &amp;quot;propertyB&amp;quot;:{&lt;br /&gt;
            &amp;quot;properties&amp;quot;:{&lt;br /&gt;
               &amp;quot;propertyB1&amp;quot;:{&lt;br /&gt;
                  &amp;quot;value&amp;quot;:&amp;quot;valuePropertyB1&amp;quot;&lt;br /&gt;
               }&lt;br /&gt;
            }&lt;br /&gt;
         },&lt;br /&gt;
         &amp;quot;propertyC&amp;quot;:{&lt;br /&gt;
            &amp;quot;eventValue&amp;quot;:[&lt;br /&gt;
               &amp;quot;valuePropertyC1&amp;quot;,&lt;br /&gt;
               &amp;quot;valuePropertyC2&amp;quot;,&lt;br /&gt;
               &amp;quot;valuePropertyC3&amp;quot;&lt;br /&gt;
            ]&lt;br /&gt;
         }&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;snsSqsTrigger&amp;quot;:true,&lt;br /&gt;
      &amp;quot;messageAttributes&amp;quot;:{&lt;br /&gt;
            &amp;quot;msgTag&amp;quot;:{&lt;br /&gt;
               &amp;quot;value&amp;quot;:&amp;quot;msgTag&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;propertyD&amp;quot;:{&lt;br /&gt;
               &amp;quot;value&amp;quot;:&amp;quot;valuePropertyD&amp;quot;&lt;br /&gt;
            }&lt;br /&gt;
      }&lt;br /&gt;
   },&lt;br /&gt;
   {&lt;br /&gt;
      &amp;quot;output_LambdaFunctionHdrSqs_pass&amp;quot;:{&lt;br /&gt;
         &amp;quot;properties&amp;quot;:{&lt;br /&gt;
            &amp;quot;propertyA&amp;quot;:{&lt;br /&gt;
               &amp;quot;value&amp;quot;:&amp;quot;valueProperty1&amp;quot;&lt;br /&gt;
            }&lt;br /&gt;
         }&lt;br /&gt;
      }&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot; linein&amp;gt;&lt;br /&gt;
&amp;quot;snsSqsTrigger&amp;quot;:true&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Dsq=====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
// An example input and output event of Direct Sqs&lt;br /&gt;
{&lt;br /&gt;
   &amp;quot;LambdaFunctionHdrDsq_input__pass&amp;quot;:{&lt;br /&gt;
      &amp;quot;forStageMatching&amp;quot;:true,&lt;br /&gt;
      &amp;quot;properties&amp;quot;:{&lt;br /&gt;
         &amp;quot;propertyA&amp;quot;:{&lt;br /&gt;
            &amp;quot;forStageMatching&amp;quot;:true,&lt;br /&gt;
            &amp;quot;value&amp;quot;:&amp;quot;valueProperty1&amp;quot;&lt;br /&gt;
         },&lt;br /&gt;
         &amp;quot;propertyB&amp;quot;:{&lt;br /&gt;
            &amp;quot;forStageMatching&amp;quot;:true,&lt;br /&gt;
            &amp;quot;properties&amp;quot;:{&lt;br /&gt;
               &amp;quot;propertyB1&amp;quot;:{&lt;br /&gt;
                  &amp;quot;forStageMatching&amp;quot;:true,&lt;br /&gt;
                  &amp;quot;value&amp;quot;:&amp;quot;valuePropertyB1&amp;quot;&lt;br /&gt;
               }&lt;br /&gt;
            }&lt;br /&gt;
         },&lt;br /&gt;
         &amp;quot;propertyC&amp;quot;:{&lt;br /&gt;
            &amp;quot;eventValue&amp;quot;:[&lt;br /&gt;
               &amp;quot;valuePropertyC1&amp;quot;,&lt;br /&gt;
               &amp;quot;valuePropertyC2&amp;quot;,&lt;br /&gt;
               &amp;quot;valuePropertyC3&amp;quot;&lt;br /&gt;
            ]&lt;br /&gt;
         }&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;DirectSqs&amp;quot;:true,&lt;br /&gt;
      &amp;quot;messageAttributes&amp;quot;:{&lt;br /&gt;
         &amp;quot;msgTag&amp;quot;:{&lt;br /&gt;
           &amp;quot;forStageMatching&amp;quot;:true,&lt;br /&gt;
           &amp;quot;value&amp;quot;:&amp;quot;msgTag&amp;quot;&lt;br /&gt;
          },&lt;br /&gt;
          &amp;quot;propertyD&amp;quot;:{&lt;br /&gt;
           &amp;quot;forStageMatching&amp;quot;:true,&lt;br /&gt;
           &amp;quot;value&amp;quot;:&amp;quot;valuePropertyD&amp;quot;&lt;br /&gt;
          }&lt;br /&gt;
      }&lt;br /&gt;
   },&lt;br /&gt;
   {&lt;br /&gt;
      &amp;quot;output_LambdaFunctionHdrDsq_pass&amp;quot;:{&lt;br /&gt;
         &amp;quot;forStageMatching&amp;quot;:true,&lt;br /&gt;
         &amp;quot;properties&amp;quot;:{&lt;br /&gt;
            &amp;quot;propertyA&amp;quot;:{&lt;br /&gt;
               &amp;quot;forStageMatching&amp;quot;:true,&lt;br /&gt;
               &amp;quot;value&amp;quot;:&amp;quot;valueProperty1&amp;quot;&lt;br /&gt;
            }&lt;br /&gt;
         }&lt;br /&gt;
      }&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* DirectSqs = true &lt;br /&gt;
:: for initialStage of Dsq&lt;br /&gt;
* messageAttributes is optional&lt;br /&gt;
&lt;br /&gt;
=====Inv=====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;LambdaFunctionHdrInv_input__pass&amp;quot;:{&lt;br /&gt;
     &amp;quot;forStageMatching&amp;quot;:true,&lt;br /&gt;
     &amp;quot;properties&amp;quot;:{&lt;br /&gt;
        &amp;quot;propertyA&amp;quot;:{&lt;br /&gt;
           &amp;quot;forStageMatching&amp;quot;:true,&lt;br /&gt;
           &amp;quot;value&amp;quot;:&amp;quot;valueProperty1&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;propertyB&amp;quot;:{&lt;br /&gt;
           &amp;quot;forStageMatching&amp;quot;:true,&lt;br /&gt;
           &amp;quot;properties&amp;quot;:{&lt;br /&gt;
              &amp;quot;propertyB1&amp;quot;:{&lt;br /&gt;
                 &amp;quot;forStageMatching&amp;quot;:true,&lt;br /&gt;
                 &amp;quot;value&amp;quot;:&amp;quot;valuePropertyB1&amp;quot;&lt;br /&gt;
              }&lt;br /&gt;
           }&lt;br /&gt;
        }&lt;br /&gt;
     }&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
        &amp;quot;output_LambdaFunctionHdrInv_pass&amp;quot;:{&lt;br /&gt;
           &amp;quot;forStageMatching&amp;quot;:true,&lt;br /&gt;
           &amp;quot;properties&amp;quot;:{&lt;br /&gt;
              &amp;quot;propertyA&amp;quot;:{&lt;br /&gt;
                 &amp;quot;forStageMatching&amp;quot;:true,&lt;br /&gt;
                 &amp;quot;value&amp;quot;:&amp;quot;valueProperty1&amp;quot;&lt;br /&gt;
              }&lt;br /&gt;
           }&lt;br /&gt;
        }&lt;br /&gt;
     }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Api=====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
// An example input and output event of API&lt;br /&gt;
{&lt;br /&gt;
	&amp;quot;LambdaFunctionHdrApi_input__pass_notTestAuthorizer&amp;quot;: { &lt;br /&gt;
		&amp;quot;forstageMatvhing&amp;quot;: true, &lt;br /&gt;
		&amp;quot;properties&amp;quot;: { &lt;br /&gt;
			&amp;quot;body&amp;quot;: { &lt;br /&gt;
				&amp;quot;properties&amp;quot;: { &lt;br /&gt;
					&amp;quot;propertyA&amp;quot;: { &lt;br /&gt;
						&amp;quot;testValueMatches&amp;quot;: false, &lt;br /&gt;
						&amp;quot;value&amp;quot;: &amp;quot;valueProperty1&amp;quot;, &lt;br /&gt;
					}, &lt;br /&gt;
					&amp;quot;propertyB&amp;quot;: { &lt;br /&gt;
						&amp;quot;properties&amp;quot;: { &lt;br /&gt;
							&amp;quot;propertyB1&amp;quot;: { &lt;br /&gt;
								&amp;quot;value&amp;quot;: &amp;quot;valuePropertyB1&amp;quot;, &lt;br /&gt;
							} &lt;br /&gt;
						} &lt;br /&gt;
					}, &lt;br /&gt;
					&amp;quot;propertyC&amp;quot;: { &lt;br /&gt;
						&amp;quot;eventValue&amp;quot;: [ &lt;br /&gt;
							&amp;quot;valuePropertyC1&amp;quot;, &lt;br /&gt;
							&amp;quot;valuePropertyC2&amp;quot;, &lt;br /&gt;
							&amp;quot;valuePropertyC3&amp;quot;, &lt;br /&gt;
						] &lt;br /&gt;
					},&lt;br /&gt;
					... &lt;br /&gt;
				} &lt;br /&gt;
			} &lt;br /&gt;
		}&lt;br /&gt;
	}, &lt;br /&gt;
	&amp;quot;Output_LambdaFunctionHdrApi_input__pass_notTestAuthorizer&amp;quot;: { &lt;br /&gt;
		&amp;quot;properties&amp;quot;: { &lt;br /&gt;
			&amp;quot;body&amp;quot;: { &lt;br /&gt;
				&amp;quot;properties&amp;quot;: { &lt;br /&gt;
					&amp;quot;propertyA&amp;quot;: { &lt;br /&gt;
						&amp;quot;testValueMatches&amp;quot;: false, &lt;br /&gt;
						&amp;quot;value&amp;quot;: &amp;quot;valueProperty1&amp;quot;&lt;br /&gt;
					}, &lt;br /&gt;
					...&lt;br /&gt;
				} &lt;br /&gt;
			} &lt;br /&gt;
		}  &lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====S3=====&lt;br /&gt;
&lt;br /&gt;
====dynamodb====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
// An example event of Dynamodb //optional &lt;br /&gt;
{&lt;br /&gt;
	{inputEventTag}__dynamodb_{action}_{tablename}: { // eg. &amp;quot;Complexfilter_ProcessComplexfilter_logical_basic__dynamodb_update_FilterMain&amp;quot;&lt;br /&gt;
	&amp;quot;forStageMatching&amp;quot;: true,&lt;br /&gt;
     &amp;quot;properties&amp;quot;: {&lt;br /&gt;
        &amp;quot;filterMainUniqueRequestId&amp;quot;: {&lt;br /&gt;
          &amp;quot;testValueMatches&amp;quot;: fase,&lt;br /&gt;
          &amp;quot;value&amp;quot;: &amp;quot;bbc4f4a9-2032-4dec-9129-8c7d169fecc5&amp;quot;&lt;br /&gt;
         },&lt;br /&gt;
        &amp;quot;filterObject&amp;quot;: {&lt;br /&gt;
        &amp;quot;forStageMatching&amp;quot;: true,&lt;br /&gt;
        &amp;quot;properties&amp;quot;: {&lt;br /&gt;
          &amp;quot;logicalType&amp;quot;: {&lt;br /&gt;
            &amp;quot;value&amp;quot;: &amp;quot;partitionKey&amp;quot;&lt;br /&gt;
          },&lt;br /&gt;
          &amp;quot;comparison&amp;quot;: {&lt;br /&gt;
            &amp;quot;value&amp;quot;: &amp;quot;equals&amp;quot;&lt;br /&gt;
          },&lt;br /&gt;
          &amp;quot;type&amp;quot;: {&lt;br /&gt;
            &amp;quot;value&amp;quot;: &amp;quot;logical&amp;quot;&lt;br /&gt;
          },&lt;br /&gt;
          &amp;quot;partitionKey&amp;quot;: {&lt;br /&gt;
            &amp;quot;forStageMatching&amp;quot;: true,&lt;br /&gt;
            &amp;quot;value&amp;quot;: &amp;quot;mockIntegratioTestCPF&amp;quot;&lt;br /&gt;
          }&lt;br /&gt;
        }&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;filterMainExpiryTime&amp;quot;: {&lt;br /&gt;
        &amp;quot;testValueMatches&amp;quot;: fase,&lt;br /&gt;
        &amp;quot;value&amp;quot;: 1731980802858&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;filterMainStatus&amp;quot;: {&lt;br /&gt;
       &amp;quot;forStageMatching&amp;quot;: true,&lt;br /&gt;
        &amp;quot;value&amp;quot;: &amp;quot;processing&amp;quot;&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;createTime&amp;quot;: {&lt;br /&gt;
        &amp;quot;testValueMatches&amp;quot;: fase,&lt;br /&gt;
        &amp;quot;value&amp;quot;: 1731894402678&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;objType&amp;quot;: {&lt;br /&gt;
        &amp;quot;forStageMatching&amp;quot;: true,&lt;br /&gt;
        &amp;quot;properties&amp;quot;: {&lt;br /&gt;
          &amp;quot;serviceTag&amp;quot;: {&lt;br /&gt;
            &amp;quot;forStageMatching&amp;quot;: true,&lt;br /&gt;
            &amp;quot;value&amp;quot;: &amp;quot;IntTesting&amp;quot;&lt;br /&gt;
          },&lt;br /&gt;
          &amp;quot;objectType&amp;quot;: {&lt;br /&gt;
            &amp;quot;forStageMatching&amp;quot;: true,&lt;br /&gt;
            &amp;quot;value&amp;quot;: &amp;quot;TestRecord&amp;quot;&lt;br /&gt;
          }&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;keyValues&amp;quot;: {&lt;br /&gt;
      &amp;quot;filterMainId&amp;quot;: &amp;quot;4865d2451a621cb7f71225cfabf2df4f98e20801&amp;quot;,&lt;br /&gt;
      &amp;quot;objTypeId&amp;quot;: &amp;quot;cdb170690571df7522b3850920fce02507c077ee&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
	} &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* partition key: filterMainId&lt;br /&gt;
* sort key: objTypeId&lt;br /&gt;
&lt;br /&gt;
[[2021-01-15 - Integration Testing - Adding DynamoDB result tests]]&lt;br /&gt;
&lt;br /&gt;
===Type paramiter===&lt;br /&gt;
use for evnet and dyanmodb event&lt;br /&gt;
====Normal====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 object: {&lt;br /&gt;
  forStageMatching: true,&lt;br /&gt;
  properties: {&lt;br /&gt;
    name:{&lt;br /&gt;
     forStageMatching: true,&lt;br /&gt;
     value:&amp;quot;Tom&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
   }&lt;br /&gt;
 },&lt;br /&gt;
 array: {&lt;br /&gt;
  forStageMatching: true,&lt;br /&gt;
  useIsEqual: true,&lt;br /&gt;
  eventValue: [&lt;br /&gt;
   {&lt;br /&gt;
     &amp;quot;relTypeAndDirection&amp;quot;: {&lt;br /&gt;
       &amp;quot;relType&amp;quot;: {&lt;br /&gt;
         &amp;quot;serviceTag&amp;quot;: &amp;quot;maxxCart2&amp;quot;,&lt;br /&gt;
         &amp;quot;relationshipTag&amp;quot;: &amp;quot;hasCartOrder&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;relationshipDirection&amp;quot;: &amp;quot;from&amp;quot;&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;targetObjects&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;objType&amp;quot;: {&lt;br /&gt;
           &amp;quot;serviceTag&amp;quot;: &amp;quot;maxxCart2&amp;quot;,&lt;br /&gt;
           &amp;quot;objectType&amp;quot;: &amp;quot;cartOrder&amp;quot;&lt;br /&gt;
          }&lt;br /&gt;
        }&lt;br /&gt;
      ]&lt;br /&gt;
    }&lt;br /&gt;
  ]&lt;br /&gt;
 },&lt;br /&gt;
 number: {&lt;br /&gt;
  forStageMatching: true,&lt;br /&gt;
  value: 1111&lt;br /&gt;
 },&lt;br /&gt;
 string: {&lt;br /&gt;
  forStageMatching: true,&lt;br /&gt;
  value: &amp;quot;hi&amp;quot;&lt;br /&gt;
 },&lt;br /&gt;
 boolean: {&lt;br /&gt;
  forStageMatching: true,&lt;br /&gt;
  value: true&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
 forStageMatching: true&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
::set true for check match value,It is not necessary to set every value&lt;br /&gt;
:::use in test importent paramiter&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
testValueMatches:false&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
::setting paramiter require on create but can not test random value eg: identifier or timeStamp or uuid&lt;br /&gt;
&lt;br /&gt;
====Empty====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
 EmptyString:{&lt;br /&gt;
forStageMatching: true,&lt;br /&gt;
  value:&amp;quot;&amp;quot;&lt;br /&gt;
 },&lt;br /&gt;
 EmptyArray:{&lt;br /&gt;
   forStageMatching: true,&lt;br /&gt;
   useIsEqual: true,&lt;br /&gt;
   eventValue: []&lt;br /&gt;
 },&lt;br /&gt;
 EmptyObject:{&lt;br /&gt;
  forStageMatching: true,&lt;br /&gt;
  value:{}&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Error====&lt;br /&gt;
can test noRetryError&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;quot;errorMessage&amp;quot;: {&lt;br /&gt;
    forStageMatching: true,&lt;br /&gt;
    &amp;quot;value&amp;quot;: &amp;quot;Not found schema of {serviceTag:TestGraphHandler, objectType:notFoundObjType}&amp;quot;&lt;br /&gt;
   }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Paramiter random====&lt;br /&gt;
Can not test case random numbber or uuid.&lt;br /&gt;
But requriOnCreate mush be set &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
testValueMatches:false&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
or set&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
forStageMatching:false&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=tests=&lt;br /&gt;
Syntax is array of object&lt;br /&gt;
==Syntax name== &lt;br /&gt;
===Testtag name ===&lt;br /&gt;
*{integrationTestTag}&lt;br /&gt;
#Test Own servcie or not a lot stage&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
Test_{inputEventTag}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
#Mix multiple servcie and multiple stage&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt; &lt;br /&gt;
IntegrationTest_{inputEventTag}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===File name ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt; &lt;br /&gt;
{integrationTestTag}.json&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Setting of test==&lt;br /&gt;
[[Service - Integration Test Config#tests.js Syntax|syntax test]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
            integrationTestTag: {integrationTestTag},&lt;br /&gt;
            productionSafe: true|false, //default false&lt;br /&gt;
            noInitialStage: true, // default false, if set to true, no error when no foundInitialStages found&lt;br /&gt;
            errorIfStageUndefined: true|false, //default false&lt;br /&gt;
            errorIfInvokeUndefined: true|false, //default false,&lt;br /&gt;
            dynamoDBSeedDataTags:[&amp;quot;seedDataDB_test_case_xx&amp;quot;], //[seedDataTag] optional if have seed data for test&lt;br /&gt;
            graphSeedDataTags:[&amp;quot;seedDataGraph_test_case_xx&amp;quot;], //[seedDataTag] optional if have seed data for test&lt;br /&gt;
            cleaningeDynamoOneRecordsTags: [&amp;quot;cleaningSeed_partitionKey_sortKey_normol&amp;quot;], //optional&lt;br /&gt;
            cleaningeDynamoManyRecordsTags: [], // optional&lt;br /&gt;
            stages:[&lt;br /&gt;
               ...&lt;br /&gt;
            ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
*[[2025-11-20 IntegrationTest#dynamoDBSeedDataTags|dynamoDBSeedDataTags]]&lt;br /&gt;
*[[2025-11-20 IntegrationTest#graphSeedDataTags|graphSeedDataTags]]&lt;br /&gt;
*[[2025-11-20 IntegrationTest#cleaningeDynamoOneRecordsTags|cleaningeDynamoOneRecordsTags]]&lt;br /&gt;
*[[2025-11-20 IntegrationTest#cleaningeDynamoManyRecordsTags|cleaningeDynamoManyRecordsTags]]&lt;br /&gt;
&lt;br /&gt;
==Stages==&lt;br /&gt;
====Initiate stage====&lt;br /&gt;
:&#039;&#039;&#039;&amp;quot;initialStage&amp;quot;:true&#039;&#039;&#039;&lt;br /&gt;
[[Service_-_Integration_Test_Config#tests.js Syntax|detail property of test]]&lt;br /&gt;
=====HandlerService=====&lt;br /&gt;
======Sqs======&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;quot;stages&amp;quot;:[&lt;br /&gt;
         {&lt;br /&gt;
            &amp;quot;initialStage&amp;quot;:true,&lt;br /&gt;
            &amp;quot;inputEventTag&amp;quot;:&amp;quot;Locations_ProcessLocationNodeSomting_casenotHaveData&amp;quot;,&lt;br /&gt;
            &amp;quot;serviceName&amp;quot;:&amp;quot;Locations&amp;quot;,&lt;br /&gt;
            &amp;quot;resourceType&amp;quot;:&amp;quot;Lambda&amp;quot;,&lt;br /&gt;
            &amp;quot;resourceName&amp;quot;:&amp;quot;ProcessLocationNodeSomtingHdrDsq&amp;quot;,&lt;br /&gt;
            &amp;quot;outputEventTag&amp;quot;:&amp;quot;Output_Locations_ProcessLocationNodeSomting_casenotHaveData&amp;quot;&lt;br /&gt;
         }&lt;br /&gt;
      ]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
======Dsq======&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
stages: [&lt;br /&gt;
        {&lt;br /&gt;
          initialStage: true,&lt;br /&gt;
          inputEventTag: &#039;LambdaFunctionHdrDsq_input_singleStage_directSqs__pass&#039;,&lt;br /&gt;
          serviceName: &#039;ServiceTemplate&#039;,&lt;br /&gt;
          resourceType: &#039;Lambda&#039;,&lt;br /&gt;
          resourceName: &#039;LambdaFunctionHdrDsq&#039;,&lt;br /&gt;
          outputEventTag: &#039;LambdaFunctionHdrDsq_output__returnvalue_pass&#039;,&lt;br /&gt;
          // **** not set snsServiceName and snsTopic&lt;br /&gt;
          // can be test dynamodbOutput&lt;br /&gt;
        }&lt;br /&gt;
      ]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
======Api======&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;quot;stages&amp;quot;:[&lt;br /&gt;
    {&lt;br /&gt;
       &amp;quot;initialStage&amp;quot;:true,&lt;br /&gt;
       &amp;quot;inputEventTag&amp;quot;:&amp;quot;LambdaFunctionHdrApi_input__pass&amp;quot;,&lt;br /&gt;
       &amp;quot;serviceName&amp;quot;:&amp;quot;ServiceTemplate&amp;quot;,&lt;br /&gt;
       &amp;quot;resourceType&amp;quot;:&amp;quot;Lambda&amp;quot;,&lt;br /&gt;
       &amp;quot;resourceName&amp;quot;:&amp;quot;LambdaFunctionHdrApi&amp;quot;,&lt;br /&gt;
       &amp;quot;outputEventTag&amp;quot;:&amp;quot;LambdaFunctionHdrApi_output__pass&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
======Inv======&lt;br /&gt;
*&#039;&#039;&#039;single stage&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
[{&lt;br /&gt;
   &amp;quot;integrationTestTag&amp;quot;:&amp;quot;LambdaFunctionHdrInv__pass&amp;quot;,&lt;br /&gt;
   &amp;quot;productionSafe&amp;quot;:false,&lt;br /&gt;
   &amp;quot;errorIfStageUndefined&amp;quot;:false,&lt;br /&gt;
   &amp;quot;errorIfInvokeUndefined&amp;quot;:false,&lt;br /&gt;
   &amp;quot;dynamoDBSeedDataTags&amp;quot;:[&amp;quot;seedDataDB_test_case_xx&amp;quot;], //[seedDataTag] optional if have seed data for test&lt;br /&gt;
   &amp;quot;graphSeedDataTags&amp;quot;:[&amp;quot;seedDataGraph_test_case_xx&amp;quot;], //[seedDataTag] optional if have seed data for test&lt;br /&gt;
   &amp;quot;cleaningeDynamoOneRecordsTags&amp;quot;: [&amp;quot;cleaningSeed_partitionKey_sortKey_normol&amp;quot;], //optional&lt;br /&gt;
   &amp;quot;cleaningeDynamoManyRecordsTags&amp;quot;: []&lt;br /&gt;
   &amp;quot;stages&amp;quot;:[&lt;br /&gt;
      {&lt;br /&gt;
         &amp;quot;initialStage&amp;quot;:true,&lt;br /&gt;
         &amp;quot;inputEventTag&amp;quot;:&amp;quot;LambdaFunctionHdrInv_input__pass&amp;quot;,&lt;br /&gt;
         &amp;quot;serviceName&amp;quot;:&amp;quot;ServiceTemplate&amp;quot;,&lt;br /&gt;
         &amp;quot;resourceType&amp;quot;:&amp;quot;Lambda&amp;quot;,&lt;br /&gt;
         &amp;quot;resourceName&amp;quot;:&amp;quot;LambdaFunctionHdrInv&amp;quot;,&lt;br /&gt;
         &amp;quot;outputEventTag&amp;quot;:&amp;quot;LambdaFunctionHdrInv_output__pass&amp;quot;&lt;br /&gt;
      }&lt;br /&gt;
   ]&lt;br /&gt;
}]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;invoke multiple stage&#039;&#039;&#039; &lt;br /&gt;
:*Each stage test can invoke multiple lambda by use &amp;quot;eventStage Tag&amp;quot; point to stage for test integration test.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
[{&lt;br /&gt;
   &amp;quot;integrationTestTag&amp;quot;:&amp;quot;LambdaFunctionHdrInv_invokes__pass&amp;quot;,&lt;br /&gt;
   &amp;quot;productionSafe&amp;quot;:false,&lt;br /&gt;
   &amp;quot;errorIfStageUndefined&amp;quot;:false,&lt;br /&gt;
   &amp;quot;errorIfInvokeUndefined&amp;quot;:false,&lt;br /&gt;
   &amp;quot;dynamoDBSeedDataTags&amp;quot;:[], //[seedDataTag] optional if have seed data for test&lt;br /&gt;
   &amp;quot;graphSeedDataTags&amp;quot;:[], //[seedDataTag] optional if have seed data for test&lt;br /&gt;
   &amp;quot;cleaningeDynamoOneRecordsTags&amp;quot;: [], //optional&lt;br /&gt;
   &amp;quot;cleaningeDynamoManyRecordsTags&amp;quot;: [], // optional&lt;br /&gt;
   &amp;quot;stages&amp;quot;:[&lt;br /&gt;
      {&lt;br /&gt;
         &amp;quot;initialStage&amp;quot;:true,&lt;br /&gt;
         &amp;quot;inputEventTag&amp;quot;:&amp;quot;LambdaFunctionHdrInv_input__pass&amp;quot;,&lt;br /&gt;
         &amp;quot;serviceName&amp;quot;:&amp;quot;ServiceTemplate&amp;quot;,&lt;br /&gt;
         &amp;quot;resourceType&amp;quot;:&amp;quot;Lambda&amp;quot;,&lt;br /&gt;
         &amp;quot;resourceName&amp;quot;:&amp;quot;LambdaFunctionHdrInv&amp;quot;,&lt;br /&gt;
         &amp;quot;outputEventTag&amp;quot;:&amp;quot;LambdaFunctionHdrInv_output__pass&amp;quot;,&lt;br /&gt;
         &amp;quot;invokes&amp;quot;:[&lt;br /&gt;
            {&lt;br /&gt;
               &amp;quot;eventStageTag&amp;quot;:&amp;quot;service_invokesB__pass&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            {&lt;br /&gt;
               &amp;quot;eventStageTag&amp;quot;:&amp;quot;service_invokesD__pass&amp;quot;&lt;br /&gt;
            }&lt;br /&gt;
         ]&lt;br /&gt;
      },&lt;br /&gt;
      {&lt;br /&gt;
         &amp;quot;eventStageTag&amp;quot;:&amp;quot;service_invokesB__pass&amp;quot;,&lt;br /&gt;
         &amp;quot;inputEventTag&amp;quot;:&amp;quot;input_service_invokes__pass&amp;quot;,&lt;br /&gt;
         &amp;quot;serviceName&amp;quot;:&amp;quot;ServiceTemplate_B&amp;quot;,&lt;br /&gt;
         &amp;quot;resourceType&amp;quot;:&amp;quot;Lambda&amp;quot;,&lt;br /&gt;
         &amp;quot;resourceName&amp;quot;:&amp;quot;LambdaFunction_B_HdrInv&amp;quot;,&lt;br /&gt;
         &amp;quot;outputEventTag&amp;quot;:&amp;quot;output_service_invokes__pass&amp;quot;&lt;br /&gt;
      },&lt;br /&gt;
      {&lt;br /&gt;
         &amp;quot;eventStageTag&amp;quot;:&amp;quot;service_invokesD__pass&amp;quot;,&lt;br /&gt;
         &amp;quot;inputEventTag&amp;quot;:&amp;quot;input_service_invokesD__pass&amp;quot;,&lt;br /&gt;
         &amp;quot;serviceName&amp;quot;:&amp;quot;ServiceTemplate_D&amp;quot;,&lt;br /&gt;
         &amp;quot;resourceType&amp;quot;:&amp;quot;Lambda&amp;quot;,&lt;br /&gt;
         &amp;quot;resourceName&amp;quot;:&amp;quot;LambdaFunction_D_HdrInv&amp;quot;,&lt;br /&gt;
         &amp;quot;outputEventTag&amp;quot;:&amp;quot;output_service_invokesD__pass&amp;quot;&lt;br /&gt;
      }&lt;br /&gt;
   ]&lt;br /&gt;
}]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
======S3======&lt;br /&gt;
======Batch======&lt;br /&gt;
&lt;br /&gt;
====GeneratedSeedData====&lt;br /&gt;
*Integrationtest must be delete identifier every time before test.&lt;br /&gt;
*Set &#039;generatedSeedData&#039; in file tests.json case by case of stage eg: stages[0] create identifier is randomOnCreate will set &#039;generatedSeedData&#039; and stages[1] create relationship is randomOnCreate(It is usually random, except in the case of relationship version) set generatedSeedData this stages[1].&lt;br /&gt;
*How to delete case identifier rendomOnCreate?: set in stage use setting generateSeedData &amp;quot;randomOnCreateIdentifier&amp;quot;&lt;br /&gt;
#randomOnCreateIdentifier&lt;br /&gt;
#notRandomOnIdentifier&lt;br /&gt;
#relationships&lt;br /&gt;
=====randomOnCreateIdentifier=====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;quot;stages&amp;quot;: [&lt;br /&gt;
      {&lt;br /&gt;
        &amp;quot;initialStage&amp;quot;: true,&lt;br /&gt;
        &amp;quot;inputEventTag&amp;quot;: &amp;quot;MLocation_CreateHdrSqs__case_NodeVersionData_Jaya&amp;quot;,&lt;br /&gt;
        &amp;quot;serviceTag&amp;quot;: &amp;quot;MLocations&amp;quot;,&lt;br /&gt;
        &amp;quot;resourceType&amp;quot;: &amp;quot;Lambda&amp;quot;,&lt;br /&gt;
        &amp;quot;resourceName&amp;quot;: &amp;quot;CreateHdrSqs&amp;quot;,&lt;br /&gt;
        &amp;quot;snsServiceName&amp;quot;: &amp;quot;MLocations&amp;quot;,&lt;br /&gt;
        &amp;quot;snsTopic&amp;quot;: &amp;quot;Create_In&amp;quot;,&lt;br /&gt;
        &amp;quot;generatedSeedData&amp;quot;: {&lt;br /&gt;
          &amp;quot;randomOnCreateIdentifier&amp;quot;: [&lt;br /&gt;
            {&lt;br /&gt;
              &amp;quot;objType&amp;quot;: {&lt;br /&gt;
                &amp;quot;serviceTag&amp;quot;: &amp;quot;MLocations&amp;quot;,&lt;br /&gt;
                &amp;quot;objectType&amp;quot;: &amp;quot;Member&amp;quot;&lt;br /&gt;
              },&lt;br /&gt;
              &amp;quot;identifierValue&amp;quot;: &amp;quot;Jaya-member-001&amp;quot;&lt;br /&gt;
            }&lt;br /&gt;
          ]&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
=====notRandomOnIdentifier=====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;quot;stages&amp;quot;: [&lt;br /&gt;
      {&lt;br /&gt;
        &amp;quot;initialStage&amp;quot;: true,&lt;br /&gt;
        &amp;quot;inputEventTag&amp;quot;: &amp;quot;MLocation_CreateHdrSqs__case_NodeVersionData_Jaya&amp;quot;,&lt;br /&gt;
        &amp;quot;serviceTag&amp;quot;: &amp;quot;MLocations&amp;quot;,&lt;br /&gt;
        &amp;quot;resourceType&amp;quot;: &amp;quot;Lambda&amp;quot;,&lt;br /&gt;
        &amp;quot;resourceName&amp;quot;: &amp;quot;CreateHdrSqs&amp;quot;,&lt;br /&gt;
        &amp;quot;snsServiceName&amp;quot;: &amp;quot;MLocations&amp;quot;,&lt;br /&gt;
        &amp;quot;snsTopic&amp;quot;: &amp;quot;Create_In&amp;quot;,&lt;br /&gt;
        &amp;quot;generatedSeedData&amp;quot;: {&lt;br /&gt;
          &amp;quot;notRandomOnIdentifier&amp;quot;: [&lt;br /&gt;
            {&lt;br /&gt;
              &amp;quot;objType&amp;quot;: {&lt;br /&gt;
                &amp;quot;serviceTag&amp;quot;: &amp;quot;gggg&amp;quot;,&lt;br /&gt;
                &amp;quot;objectType&amp;quot;: &amp;quot;ssssss&amp;quot;&lt;br /&gt;
              },&lt;br /&gt;
              &amp;quot;identifiers&amp;quot;: {&lt;br /&gt;
                &amp;quot;topId&amp;quot;: &amp;quot;123456&amp;quot;&lt;br /&gt;
              }&lt;br /&gt;
            }&lt;br /&gt;
          ]&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    ]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
=====relationships=====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;quot;stages&amp;quot;: [&lt;br /&gt;
      {&lt;br /&gt;
        &amp;quot;initialStage&amp;quot;: true,&lt;br /&gt;
        &amp;quot;inputEventTag&amp;quot;: &amp;quot;MLocation_CreateHdrSqs__case_NodeVersionData_Jaya&amp;quot;,&lt;br /&gt;
        &amp;quot;serviceTag&amp;quot;: &amp;quot;MLocations&amp;quot;,&lt;br /&gt;
        &amp;quot;resourceType&amp;quot;: &amp;quot;Lambda&amp;quot;,&lt;br /&gt;
        &amp;quot;resourceName&amp;quot;: &amp;quot;CreateHdrSqs&amp;quot;,&lt;br /&gt;
        &amp;quot;snsServiceName&amp;quot;: &amp;quot;MLocations&amp;quot;,&lt;br /&gt;
        &amp;quot;snsTopic&amp;quot;: &amp;quot;Create_In&amp;quot;,&lt;br /&gt;
        &amp;quot;generatedSeedData&amp;quot;: {&lt;br /&gt;
         &amp;quot;relationships&amp;quot;: [&lt;br /&gt;
            {&lt;br /&gt;
              &amp;quot;relType&amp;quot;: {&lt;br /&gt;
                &amp;quot;serviceTag&amp;quot;: &amp;quot;PaymentMethodGeneric&amp;quot;,&lt;br /&gt;
                &amp;quot;relationshipTag&amp;quot;: &amp;quot;disabledPaymentMethodGenericPropertyValue&amp;quot;&lt;br /&gt;
              },&lt;br /&gt;
              &amp;quot;relId&amp;quot;: &amp;quot;f4f73de7-647c-4b3b-8043-87cc002f361a&amp;quot;&lt;br /&gt;
            }&lt;br /&gt;
          ]&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    ]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Dynamodb==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
stages: [&lt;br /&gt;
        {&lt;br /&gt;
          initialStage: true,&lt;br /&gt;
          inputEventTag: &#039;Locations_LambdaFunctionHdrDsq_singleStage_directSqs__pass&#039;,&lt;br /&gt;
          serviceName: &#039;ServiceTemplate&#039;,&lt;br /&gt;
          resourceType: &#039;Lambda&#039;,&lt;br /&gt;
          resourceName: &#039;LambdaFunctionHdrDsq&#039;,&lt;br /&gt;
          outputEventTag: &#039;output_Locations_LambdaFunctionHdrDsq_singleStage_directSqs__pass&#039;,&lt;br /&gt;
          dynamodbOutputEventIdentifiers: [&lt;br /&gt;
			{&lt;br /&gt;
              serviceName: {tableName}, //service that deployed the DynamoDB table, so can build table&#039;s full resource name&lt;br /&gt;
              resourceName: {resourceName}, //DynamoDB resourceName&lt;br /&gt;
              eventTag: {eventTagDynamoDB}&lt;br /&gt;
		    }&lt;br /&gt;
          ],&lt;br /&gt;
        }&lt;br /&gt;
      ]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Result of integrationtest =&lt;br /&gt;
Data have 2 table &amp;quot;TestRecord&amp;quot; and &amp;quot;TestUnit&amp;quot;.&lt;br /&gt;
:- TestRecord is table all unti of stage inside eg input output invokes and dynamodb&lt;br /&gt;
:- TestUnit is store status each unit &lt;br /&gt;
each unit save in table TestUnit&lt;br /&gt;
testRecordId is  name of test concat with testTime.&lt;br /&gt;
testUnitId is point to position of unti instage.&lt;br /&gt;
resultStatus is status of unit.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
eg:&lt;br /&gt;
input_0 = stages index 0 result &#039;&#039;&#039;input&#039;&#039;&#039;&lt;br /&gt;
output_1 = stages index 1 result &#039;&#039;&#039;output&#039;&#039;&#039;&lt;br /&gt;
invokeInput_0_1 = stages index 0 result &#039;&#039;&#039;invokes&#039;&#039;&#039; index 1 position input &lt;br /&gt;
invokeOutput_0_1 = stages index 0 result &#039;&#039;&#039;invokes&#039;&#039;&#039; index 1 position output&lt;br /&gt;
dynamodb_0_1 =  stages index 0 result &#039;&#039;&#039;dynamodb&#039;&#039;&#039; index 1.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
after all TestUnit finish (check  by awaitingMultiplestep penditnStep is integrationtestTag awaitingStepId is each TestUnit )&lt;br /&gt;
check all awaitingStep finish send message to ultimateIntegrationtest for sumla all test is status&lt;br /&gt;
&lt;br /&gt;
== Summary of test status == &lt;br /&gt;
:1.testStatus is &amp;quot;passed&amp;quot; all unit passed.&lt;br /&gt;
:2.testStatus is &amp;quot;failed&amp;quot;  have some is failed.&lt;br /&gt;
:3.testStatus is &amp;quot;processing&amp;quot; have some is have status processing after check all awaiting step is finish.&lt;br /&gt;
:4.testStatus is &amp;quot;failed&amp;quot; have record &amp;quot;errorsTest&amp;quot; in case &amp;quot;not match stage invoke&amp;quot;, &#039;found multiple matchingInvokes&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*[[2025-02-20 - Integration Test examples#tests.js Syntax|Syntax Dynamodb]]&lt;br /&gt;
&lt;br /&gt;
=How to test integrationtest s3=&lt;br /&gt;
[[Developer guide for making Integration Tests]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Working documents| 2025-11-20]]&lt;br /&gt;
[[Category:Working documents - Integration Testing| 2025-11-20]]&lt;/div&gt;</summary>
		<author><name>Mint</name></author>
	</entry>
	<entry>
		<id>https://izara.io/wiki/index.php?title=2025-11-20_IntegrationTest&amp;diff=4571</id>
		<title>2025-11-20 IntegrationTest</title>
		<link rel="alternate" type="text/html" href="https://izara.io/wiki/index.php?title=2025-11-20_IntegrationTest&amp;diff=4571"/>
		<updated>2026-08-11T06:29:23Z</updated>

		<summary type="html">&lt;p&gt;Mint: /* graphSeedDataTags */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Reference:&lt;br /&gt;
&lt;br /&gt;
*[[2020-10-01 - Integration Test Config - Functions|IntegrationtestConfig]]&lt;br /&gt;
*[[2020-10-01 - Integration Testing - Lambda Functions|Integrationtesting]]&lt;br /&gt;
*[[2025-02-20 - Integration Test examples|Example]]&lt;br /&gt;
&lt;br /&gt;
= File extension =&lt;br /&gt;
&lt;br /&gt;
uploadS3: &amp;quot;.json&amp;quot;&lt;br /&gt;
integrationtestConfig: &amp;quot;.js&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=TestRecord=&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JSON&amp;quot;&amp;gt;&lt;br /&gt;
[&lt;br /&gt;
  {&lt;br /&gt;
    integrationTestTag: &amp;quot;Integrationtest_xx&amp;quot;,&lt;br /&gt;
    testStartedTimestamp: 111111111, // start time&lt;br /&gt;
    bucketName: &amp;quot;integrationtest-config-us-east-2&amp;quot;,&lt;br /&gt;
    lastUpdateUniqueRequestId: &amp;quot;sssss&amp;quot;, //_izContext.uniqueRequestId protacts race coditionn dynamodb&lt;br /&gt;
    testStatus: &amp;quot;passed&amp;quot;,//failed,processing,passed&lt;br /&gt;
    testCompleteTimestamp: 1111113, // all test finish&lt;br /&gt;
    stages: [&lt;br /&gt;
      {&lt;br /&gt;
        stageConfig: {&lt;br /&gt;
          //straight copy of this stage from integration test config&lt;br /&gt;
          inputEventTag: &amp;quot;xx&amp;quot;,&lt;br /&gt;
          inputEventConfig: {//event input&lt;br /&gt;
          },&lt;br /&gt;
          outputEventTag: &amp;quot;output_xx&amp;quot;,&lt;br /&gt;
          outputEventConfig: {//event out put&lt;br /&gt;
          },&lt;br /&gt;
          resourceName: &amp;quot;ComplexfilterTestProcessComplexfilter&amp;quot;,// function name&lt;br /&gt;
          resourceType: &amp;quot;Lambda&amp;quot;, // function name&lt;br /&gt;
          serviceTag: &amp;quot;Complexfilter&amp;quot;,// (initeate sqs)&lt;br /&gt;
          snsServiceName: &amp;quot;Complexfilter&amp;quot;,// (initeate sqs)&lt;br /&gt;
          snsTopic: &amp;quot;PorcessComplexfilter_In&amp;quot;// (initeate sqs)&lt;br /&gt;
&lt;br /&gt;
        },&lt;br /&gt;
        stageStatus: &amp;quot;waiting&amp;quot;, //waiting|passed|failed,&lt;br /&gt;
        stageFinishedTimestamp: 111111111,// time that all tests finished and testRecord.stages.{stageKey}.stageStatus updated&lt;br /&gt;
        stageResults: {&lt;br /&gt;
          //results at the point of entering the resource (eg a Lambda function is invoked)&lt;br /&gt;
          inputResult: {&lt;br /&gt;
            resultTimestamp: 111111111,//{time result saved},&lt;br /&gt;
            resultStatus: &amp;quot;passed&amp;quot;,//passed|failed,&lt;br /&gt;
            requestParams: {//event input&lt;br /&gt;
            }&lt;br /&gt;
          },&lt;br /&gt;
          //results at the point of returning from the resource (eg a Lambda function returns)&lt;br /&gt;
          outputResult: {&lt;br /&gt;
            resultTimestamp: 111111111,//{time result saved},&lt;br /&gt;
            resultStatus: &amp;quot;passed&amp;quot;,//passed|failed,&lt;br /&gt;
            requestParams: {//event input&lt;br /&gt;
            }&lt;br /&gt;
          },&lt;br /&gt;
          //results at the point of invoking an external resource (eg the tested Lambda function is invoking another Lambda function)&lt;br /&gt;
          invokes: {&lt;br /&gt;
            &amp;quot;serviceName_resourceType_resourceName_inputEventTag &amp;quot;: {&lt;br /&gt;
              invokeTimestamp: 111111111,//{ time result saved },&lt;br /&gt;
              resultTimestamp: 111111112,//{ time result saved },&lt;br /&gt;
              resultStatus: &amp;quot;passed&amp;quot;,//passed | failed,&lt;br /&gt;
              invokeParams: {},//{event invoke input config }&lt;br /&gt;
              requestParams: {}// event invoke input request&lt;br /&gt;
            },&lt;br /&gt;
          },&lt;br /&gt;
          dynamodbResults: [&lt;br /&gt;
            {&lt;br /&gt;
              indexOfDynamodbOutput: 0,&lt;br /&gt;
              requestParams,&lt;br /&gt;
              resultStatus: &amp;quot;passed&amp;quot;,//&lt;br /&gt;
              resultTimestamp: 22222&lt;br /&gt;
            }]&lt;br /&gt;
&lt;br /&gt;
        },&lt;br /&gt;
        stageErrors: [&lt;br /&gt;
          //misc errors encountered&lt;br /&gt;
        ]&lt;br /&gt;
      }]&lt;br /&gt;
&lt;br /&gt;
  }&lt;br /&gt;
]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Seed Data=&lt;br /&gt;
integrationtest manager seed date 2 process&lt;br /&gt;
&lt;br /&gt;
=== Main Seed Data===&lt;br /&gt;
:Save file in s3 (in &#039;&#039;&#039;buckname&#039;&#039;&#039; :integrationtest-config-us-east-2, &#039;&#039;&#039;folder&#039;&#039;&#039;:seedData_integrationTest).For other dev use service,If a developer wants to add more for other important testing purposes.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;How to use:&#039;&#039;&#039;&lt;br /&gt;
#Add it from the s3 bucket at this point&lt;br /&gt;
#Run batch refreshSeedData [[Developer guide for making Integration Tests#Bash script|batch RefreshSeedData]]&lt;br /&gt;
&#039;&#039;&#039;Logic&#039;&#039;&#039;:Process by storage resouse (graph or dynamodb)&lt;br /&gt;
:To clean up the seed data in the table after it creates seed data form service deploy and pulls seed data from s3.&lt;br /&gt;
&lt;br /&gt;
=== Refresh Seed Data ===&lt;br /&gt;
:ProcessRefreshSeedData use seedDataTag for create data environment of &#039;&#039;&#039;test&#039;&#039;&#039; and can be refresh seeddata re-test agian.&lt;br /&gt;
:&#039;&#039;&#039;canbe share&#039;&#039;&#039; seed data for other test by seed data tag.&lt;br /&gt;
&#039;&#039;&#039;How to use:&#039;&#039;&#039;&lt;br /&gt;
:Save file in s3 (for other dav keep in floder dev name) or testConfig/seedData_config(for admin)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Folder&#039;&#039;&#039;&lt;br /&gt;
*dynamoDBSeedDataTags.json&lt;br /&gt;
*graphSeedDataTags.json&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Example&#039;&#039;&#039;&lt;br /&gt;
==== dynamoDBSeedDataTags ====&lt;br /&gt;
:If set tag in this setting integrationtest is generate seed data. in storage resource dynammodb.&lt;br /&gt;
Example&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;seedDynamodb_abc_ver2&amp;quot;: [ // seedDataTag&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;tableName&amp;quot;: &amp;quot;DelivMethodSTDTestLogicalResultsData&amp;quot;,  // servcieTag+stage+tablename&lt;br /&gt;
      &amp;quot;partitionKey&amp;quot;: &amp;quot;logicalResultId&amp;quot;,&lt;br /&gt;
      &amp;quot;sortKey&amp;quot;: &amp;quot;identifiersId&amp;quot;,&lt;br /&gt;
      &amp;quot;datas&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;logicalResultId&amp;quot;: &amp;quot;eeeeeeeeee4&amp;quot;,&lt;br /&gt;
          &amp;quot;identifiersId&amp;quot;: &amp;quot;lllll123456&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;logicalResultId&amp;quot;: &amp;quot;eeeeeeeeee4&amp;quot;,&lt;br /&gt;
          &amp;quot;identifiersId&amp;quot;: &amp;quot;lllll777777&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
      ],&lt;br /&gt;
		&amp;quot;calculatedDatas&amp;quot;: {&lt;br /&gt;
			&amp;quot;exampleTimestamp&amp;quot;: {&lt;br /&gt;
				calcType: &amp;quot;currentTimestampAdjustment&amp;quot;, // can add other types of calculated data in future&lt;br /&gt;
				action: &amp;quot;add&amp;quot;, // add|subtract&lt;br /&gt;
				adjustment: &amp;quot;2 days&amp;quot;, // Human-Readable Relative Format&lt;br /&gt;
			},&lt;br /&gt;
			// ...&lt;br /&gt;
		},&lt;br /&gt;
	},&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;tableName&amp;quot;: &amp;quot;MLocationsTestFloatingRelationships&amp;quot;,// servcieTag+stage+tablename&lt;br /&gt;
      &amp;quot;partitionKey&amp;quot;: &amp;quot;importBatchId&amp;quot;,&lt;br /&gt;
      &amp;quot;sortKey&amp;quot;: &amp;quot;identifierRelationshipsId&amp;quot;,&lt;br /&gt;
      &amp;quot;datas&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;importBatchId&amp;quot;: &amp;quot;2-uuuuuuuuuuuuuu&amp;quot;,&lt;br /&gt;
          &amp;quot;identifierRelationshipsId&amp;quot;: &amp;quot;lllll123456&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;importBatchId&amp;quot;: &amp;quot;2-uuuuuuuuuuuuuu&amp;quot;,&lt;br /&gt;
          &amp;quot;identifierRelationshipsId&amp;quot;: &amp;quot;lllll777777&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;importBatchId&amp;quot;: &amp;quot;2-uuuuuuuuuuuuuu&amp;quot;,&lt;br /&gt;
          &amp;quot;identifierRelationshipsId&amp;quot;: &amp;quot;lllll99999999&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
      ]&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;tableName&amp;quot;: &amp;quot;MLocationsTestFindDataMain&amp;quot;,&lt;br /&gt;
      &amp;quot;partitionKey&amp;quot;: &amp;quot;findDataId&amp;quot;,&lt;br /&gt;
      &amp;quot;datas&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;findDataId&amp;quot;: &amp;quot;111111&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;findDataId&amp;quot;: &amp;quot;22222&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;findDataId&amp;quot;: &amp;quot;333333&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
      ]&lt;br /&gt;
    }&lt;br /&gt;
  ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== graphSeedDataTags ====&lt;br /&gt;
:If set tag in this setting integrationtest is generate seed data. in storage resource graphHanler.&lt;br /&gt;
Example&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;seedData_testTag_GG&amp;quot;: [ // seedDataTag&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;nodes&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;nodeLabels&amp;quot;: [&lt;br /&gt;
            &amp;quot;SellOfferPlan_sellOfferPlanDeliveryMethodLink&amp;quot;&lt;br /&gt;
          ],&lt;br /&gt;
          &amp;quot;objectDetail&amp;quot;: {&lt;br /&gt;
            &amp;quot;identifiers&amp;quot;: {&lt;br /&gt;
              &amp;quot;sellOfferPlanDeliveryMethodLinkId&amp;quot;: &amp;quot;minttestrefreshSeedData_01&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;fields&amp;quot;: {&lt;br /&gt;
              &amp;quot;productId&amp;quot;: &amp;quot;ddddd&amp;quot;,&lt;br /&gt;
              &amp;quot;price&amp;quot;: 9999&lt;br /&gt;
            }&lt;br /&gt;
			&amp;quot;calculatedFields&amp;quot;: {&lt;br /&gt;
				&amp;quot;exampleTimestamp&amp;quot;: {&lt;br /&gt;
					calcType: &amp;quot;currentTimestampAdjustment&amp;quot;, // can add other types of calculated data in future&lt;br /&gt;
					action: &amp;quot;add&amp;quot;, // add|subtract&lt;br /&gt;
					adjustment: &amp;quot;2 days&amp;quot;, // Human-Readable Relative Format&lt;br /&gt;
				},&lt;br /&gt;
				// ...&lt;br /&gt;
			},            &lt;br /&gt;
          }&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;nodeLabels&amp;quot;: [&lt;br /&gt;
            &amp;quot;servcieMintTest_shoppingMall&amp;quot;&lt;br /&gt;
          ],&lt;br /&gt;
          &amp;quot;objectDetail&amp;quot;: {&lt;br /&gt;
            &amp;quot;identifiers&amp;quot;: {&lt;br /&gt;
              &amp;quot;shoppingMallId&amp;quot;: &amp;quot;minttestrefreshSeedData_shoppingMallId&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;fields&amp;quot;: {&lt;br /&gt;
              &amp;quot;name&amp;quot;: &amp;quot;hotpot-man&amp;quot;,&lt;br /&gt;
              &amp;quot;totalPrice&amp;quot;: 500&lt;br /&gt;
            }&lt;br /&gt;
          }&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;nodeLabels&amp;quot;: [&lt;br /&gt;
            &amp;quot;servcieMintTest_shoppingMallCalculateSetting&amp;quot;&lt;br /&gt;
          ],&lt;br /&gt;
          &amp;quot;objectDetail&amp;quot;: {&lt;br /&gt;
            &amp;quot;identifiers&amp;quot;: {&lt;br /&gt;
              &amp;quot;versionedDataId&amp;quot;: &amp;quot;minttestrefreshSeedData_versionedDataId&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;fields&amp;quot;: {&lt;br /&gt;
              &amp;quot;addToCalculatedValuePerOrder&amp;quot;: 10,&lt;br /&gt;
              &amp;quot;addToRateTableValuePerOrder&amp;quot;: 77&lt;br /&gt;
            }&lt;br /&gt;
          }&lt;br /&gt;
        }&lt;br /&gt;
      ],&lt;br /&gt;
      &amp;quot;relationships&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;fromObject&amp;quot;: {&lt;br /&gt;
            &amp;quot;nodeLabel&amp;quot;: &amp;quot;SellOfferPlan_sellOfferPlanDeliveryMethodLink&amp;quot;,&lt;br /&gt;
            &amp;quot;identifiers&amp;quot;: {&lt;br /&gt;
              &amp;quot;sellOfferPlanDeliveryMethodLinkId&amp;quot;: &amp;quot;minttestrefreshSeedData_01&amp;quot;&lt;br /&gt;
            }&lt;br /&gt;
          },&lt;br /&gt;
          &amp;quot;toObject&amp;quot;: {&lt;br /&gt;
            &amp;quot;nodeLabel&amp;quot;: &amp;quot;servcieMintTest_shoppingMall&amp;quot;,&lt;br /&gt;
            &amp;quot;identifiers&amp;quot;: {&lt;br /&gt;
              &amp;quot;shoppingMallId&amp;quot;: &amp;quot;minttestrefreshSeedData_shoppingMallId&amp;quot;&lt;br /&gt;
            }&lt;br /&gt;
          },&lt;br /&gt;
          &amp;quot;relationships&amp;quot;: [&lt;br /&gt;
            {&lt;br /&gt;
              &amp;quot;relTypeConcat&amp;quot;: &amp;quot;SellOfferPlan_hasCCCCCCC&amp;quot;,&lt;br /&gt;
              &amp;quot;relId&amp;quot;: &amp;quot;uuid-4s56df74s9df79w-w6de4f5w689ef&amp;quot;&lt;br /&gt;
            }&lt;br /&gt;
          ]&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;fromObject&amp;quot;: {&lt;br /&gt;
            &amp;quot;nodeLabel&amp;quot;: &amp;quot;servcieMintTest_shoppingMall&amp;quot;,&lt;br /&gt;
            &amp;quot;identifiers&amp;quot;: {&lt;br /&gt;
              &amp;quot;shoppingMallId&amp;quot;: &amp;quot;minttestrefreshSeedData_shoppingMallId&amp;quot;&lt;br /&gt;
            }&lt;br /&gt;
          },&lt;br /&gt;
          &amp;quot;toObject&amp;quot;: {&lt;br /&gt;
            &amp;quot;nodeLabel&amp;quot;: &amp;quot;servcieMintTest_shoppingMallCalculateSetting&amp;quot;,&lt;br /&gt;
            &amp;quot;identifiers&amp;quot;: {&lt;br /&gt;
              &amp;quot;versionedDataId&amp;quot;: &amp;quot;minttestrefreshSeedData_versionedDataId&amp;quot;&lt;br /&gt;
            }&lt;br /&gt;
          },&lt;br /&gt;
          &amp;quot;relationships&amp;quot;: [&lt;br /&gt;
            {&lt;br /&gt;
              &amp;quot;relTypeConcat&amp;quot;: &amp;quot;servcieMintTest_shoppingMall_currentShoppingMallCalculateSetting&amp;quot;,&lt;br /&gt;
              &amp;quot;relId&amp;quot;: &amp;quot;uuid-s122df5-s21df&amp;quot;,&lt;br /&gt;
              &amp;quot;relationshipProperty&amp;quot;: {&lt;br /&gt;
                &amp;quot;timeStamp&amp;quot;: 1234567879,&lt;br /&gt;
                &amp;quot;statusName&amp;quot;: true&lt;br /&gt;
              }&lt;br /&gt;
            },&lt;br /&gt;
            {&lt;br /&gt;
              &amp;quot;relTypeConcat&amp;quot;: &amp;quot;servcieMintTest_shoppingMall_hasShoppingMallCalculateSetting&amp;quot;,&lt;br /&gt;
              &amp;quot;relId&amp;quot;: &amp;quot;uuid-77777-99999&amp;quot;,&lt;br /&gt;
              &amp;quot;relationshipProperty&amp;quot;: {&lt;br /&gt;
                &amp;quot;statusName&amp;quot;: true&lt;br /&gt;
              }&lt;br /&gt;
            }&lt;br /&gt;
          ]&lt;br /&gt;
        }&lt;br /&gt;
      ]&lt;br /&gt;
    }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;seedData_testTag_ABC&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;objType&amp;quot;: {&lt;br /&gt;
        &amp;quot;objectType&amp;quot;: &amp;quot;productAttributeLink&amp;quot;,&lt;br /&gt;
        &amp;quot;serviceTag&amp;quot;: &amp;quot;ProductAttribute&amp;quot;&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;objInstanceFull&amp;quot;: {&lt;br /&gt;
        &amp;quot;identifiers&amp;quot;: {&lt;br /&gt;
          &amp;quot;productAttributeLinkId&amp;quot;: &amp;quot;f90b57ca8b2fe1a83459d57da038cf50fb6d40e6&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;fields&amp;quot;: {}&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;relationships&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;relType&amp;quot;: {&lt;br /&gt;
            &amp;quot;serviceTag&amp;quot;: &amp;quot;ProductAttribute&amp;quot;,&lt;br /&gt;
            &amp;quot;relationshipTag&amp;quot;: &amp;quot;hasProductAttributeLink&amp;quot;&lt;br /&gt;
          },&lt;br /&gt;
          &amp;quot;relationshipDirection&amp;quot;: &amp;quot;to&amp;quot;,&lt;br /&gt;
          &amp;quot;targetObjType&amp;quot;: {&lt;br /&gt;
            &amp;quot;serviceTag&amp;quot;: &amp;quot;ProductStandard&amp;quot;,&lt;br /&gt;
            &amp;quot;objectType&amp;quot;: &amp;quot;productStandard&amp;quot;&lt;br /&gt;
          },&lt;br /&gt;
          &amp;quot;targetIdentifiers&amp;quot;: {&lt;br /&gt;
            &amp;quot;productId&amp;quot;: &amp;quot;f526a367a2b66cb0f37ca61b6c43f419929f521d&amp;quot;&lt;br /&gt;
          },&lt;br /&gt;
          &amp;quot;relationshipProperties&amp;quot;: {}&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;relType&amp;quot;: {&lt;br /&gt;
            &amp;quot;serviceTag&amp;quot;: &amp;quot;ProductAttribute&amp;quot;,&lt;br /&gt;
            &amp;quot;relationshipTag&amp;quot;: &amp;quot;isProductAttribute&amp;quot;&lt;br /&gt;
          },&lt;br /&gt;
          &amp;quot;relationshipDirection&amp;quot;: &amp;quot;from&amp;quot;,&lt;br /&gt;
          &amp;quot;targetObjType&amp;quot;: {&lt;br /&gt;
            &amp;quot;serviceTag&amp;quot;: &amp;quot;ProductAttribute&amp;quot;,&lt;br /&gt;
            &amp;quot;objectType&amp;quot;: &amp;quot;productAttribute&amp;quot;&lt;br /&gt;
          },&lt;br /&gt;
          &amp;quot;targetIdentifiers&amp;quot;: {&lt;br /&gt;
            &amp;quot;productAttributeId&amp;quot;: &amp;quot;f4bf7a078071d54036656df544197ba638bc3a68&amp;quot;&lt;br /&gt;
          },&lt;br /&gt;
          &amp;quot;relationshipProperties&amp;quot;: {}&lt;br /&gt;
        }&lt;br /&gt;
      ]&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;objType&amp;quot;: {&lt;br /&gt;
        &amp;quot;objectType&amp;quot;: &amp;quot;productAttributeLink&amp;quot;,&lt;br /&gt;
        &amp;quot;serviceTag&amp;quot;: &amp;quot;ProductAttribute&amp;quot;&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;objInstanceFull&amp;quot;: {&lt;br /&gt;
        &amp;quot;identifiers&amp;quot;: {&lt;br /&gt;
          &amp;quot;productAttributeLinkId&amp;quot;: &amp;quot;f90b57ca8b2fe1a83459d57da038cf50fb6d40e6&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;fields&amp;quot;: {}&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;relationships&amp;quot;: []&lt;br /&gt;
    }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;seedData_testTag_LL&amp;quot;: []&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Cleaning Seed Data ===&lt;br /&gt;
:Delete seed data for set environment of &#039;&#039;&#039;test&#039;&#039;&#039;.&lt;br /&gt;
*cleaningeDynamoOneRecordsTags.json&lt;br /&gt;
*cleaningeDynamoManyRecordsTags.json&lt;br /&gt;
&lt;br /&gt;
====cleaningeDynamoOneRecordsTags====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;cleaningSeed_TestFindData_and_Education_case_invalid01&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;tableName&amp;quot;: &amp;quot;MLocationsTestFindDataMain&amp;quot;,&lt;br /&gt;
      &amp;quot;primaryKeys&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;findDataId&amp;quot;: &amp;quot;cleaning-1&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;findDataId&amp;quot;: &amp;quot;cleaning-2&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
      ]&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;tableName&amp;quot;: &amp;quot;MLocationsTestEducation&amp;quot;,&lt;br /&gt;
      &amp;quot;primaryKeys&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;studentId&amp;quot;: &amp;quot;cleaning-AA&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;studentId&amp;quot;: &amp;quot;cleaning-BB&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;studentId&amp;quot;: &amp;quot;cleaning-CC&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
      ]&lt;br /&gt;
    }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;cleaningSeed_TestMemberPersonnel_case_invalid01&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;tableName&amp;quot;: &amp;quot;MLocationsTestMemberPersonnel&amp;quot;,&lt;br /&gt;
      &amp;quot;primaryKeys&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;userId&amp;quot;: &amp;quot;namtan&amp;quot;,&lt;br /&gt;
          &amp;quot;passwordId&amp;quot;: &amp;quot;qqqww&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;userId&amp;quot;: &amp;quot;jack&amp;quot;,&lt;br /&gt;
          &amp;quot;passwordId&amp;quot;: &amp;quot;q1&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;userId&amp;quot;: &amp;quot;Momay&amp;quot;,&lt;br /&gt;
          &amp;quot;passwordId&amp;quot;: &amp;quot;ttr&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
      ]&lt;br /&gt;
    }&lt;br /&gt;
  ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== cleaningeDynamoManyRecordsTags ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;cleaningSeed_manyData_partitionKey_only_miss_sort&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;tableName&amp;quot;: &amp;quot;MLocationsTestMemberPersonnel&amp;quot;,&lt;br /&gt;
      &amp;quot;primaryKeys&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;userId&amp;quot;: &amp;quot;many-data&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
      ]&lt;br /&gt;
    }&lt;br /&gt;
  ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*logic query table MLocationsTestMemberPersonnel use primary Keys &amp;quot;userId&amp;quot; and then delete all data from primary Keys.&lt;br /&gt;
&lt;br /&gt;
=resources=&lt;br /&gt;
syntax is object&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{ &lt;br /&gt;
	&amp;quot;Lambda&amp;quot;:{&lt;br /&gt;
		&amp;quot;{FunctionNameHdrSqs}&amp;quot;:{ // FunctionNameHdrSqs is match resourceName in file tests&lt;br /&gt;
			&amp;quot;localLacation&amp;quot;:&amp;quot;/src/FunctionNameHdrSqs.js&amp;quot;,&lt;br /&gt;
			&amp;quot;localHandler&amp;quot;:&amp;quot;main&amp;quot;, &lt;br /&gt;
			&amp;quot;functionName&amp;quot;:&amp;quot;FunctionNameHdrSqs&amp;quot;	// FunctionName is function name match key of function.yml of servcie.&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;ProcessComplexFilterHdrSqs&amp;quot;:{ &lt;br /&gt;
			&amp;quot;localLacation&amp;quot;:&amp;quot;/src/ProcessComplexFilterHdrSqs.js&amp;quot;, &lt;br /&gt;
			&amp;quot;localHandler&amp;quot;:&amp;quot;main&amp;quot;, &lt;br /&gt;
			&amp;quot;functionName&amp;quot;:&amp;quot;ProcessComplexFilterHdrSqs&amp;quot; &lt;br /&gt;
		},&lt;br /&gt;
		... &lt;br /&gt;
	},&lt;br /&gt;
	&amp;quot;Dynamodb&amp;quot;: {&lt;br /&gt;
		&amp;quot;filterMain&amp;quot;:{ // match resourceName in file tests(dynamodbOutputEventIdentifiers)&lt;br /&gt;
			&amp;quot;tableName&amp;quot;:&amp;quot;filterMain&amp;quot; &lt;br /&gt;
		}, &lt;br /&gt;
		&amp;quot;tableNameBB&amp;quot;:{ &lt;br /&gt;
			&amp;quot;tableName&amp;quot;:&amp;quot;tableNameBB&amp;quot; &lt;br /&gt;
		},&lt;br /&gt;
		... &lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=events=&lt;br /&gt;
Syntax is object&lt;br /&gt;
==Syntax Name==&lt;br /&gt;
===FileName===&lt;br /&gt;
::Event_{inputEventTag}&lt;br /&gt;
&lt;br /&gt;
===eventTag===&lt;br /&gt;
#inputEventTag&lt;br /&gt;
#outputEventTag&lt;br /&gt;
#dynamodbTag&lt;br /&gt;
&lt;br /&gt;
*file events.js is have eventTag  (inputEventTag,outputEventTag,dynamodbTag)&lt;br /&gt;
**How to create name eventTag&lt;br /&gt;
***Example case : &amp;quot;test in service complexFilter functionname ProcessComplexFilter case element type is logical basic&amp;quot;.&lt;br /&gt;
::*&#039;&#039;&#039;inputEventTag&#039;&#039;&#039;&lt;br /&gt;
::::{serviceName}_{functionName}_{caseTest}&lt;br /&gt;
&#039;&#039;Conplexfilter_ProcessComplexFilter_Typelogical_basic&#039;&#039;&lt;br /&gt;
::*&#039;&#039;&#039;outputEventTag&#039;&#039;&#039;&lt;br /&gt;
::::output_{inputEventTag}&lt;br /&gt;
&#039;&#039;output_Conplexfilter_ProcessComplexFilter_Typelogical_basic&#039;&#039;&lt;br /&gt;
::*&#039;&#039;&#039;dynamodbTag&#039;&#039;&#039;&lt;br /&gt;
::::{inputEventTag}__Dynamodb__{&#039;&#039;&#039;action*&#039;&#039;&#039;}_{tableName} &lt;br /&gt;
&#039;&#039;Conplexfilter_ProcessComplexFilter_Typelogical_basic___Dynamodb__putItem_filterMain&#039;&#039;&lt;br /&gt;
: &amp;lt;u&amp;gt;&#039;&#039;&#039;{action}&#039;&#039;&#039; is only &#039;&#039;put&#039;&#039; or &#039;&#039;update&#039;&#039;, and in case of &#039;&#039;update&#039;&#039; must only test the last step of update &amp;lt;/u&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Syntax event===&lt;br /&gt;
====initiate by handlerServcie====&lt;br /&gt;
=====Sqs=====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
// An example input and output event of Sns&lt;br /&gt;
{&lt;br /&gt;
   &amp;quot;LambdaFunctionHdrSqs_input__pass&amp;quot;:{&lt;br /&gt;
      &amp;quot;properties&amp;quot;:{&lt;br /&gt;
         &amp;quot;propertyA&amp;quot;:{&lt;br /&gt;
            &amp;quot;value&amp;quot;:&amp;quot;valueProperty1&amp;quot;&lt;br /&gt;
         },&lt;br /&gt;
         &amp;quot;propertyB&amp;quot;:{&lt;br /&gt;
            &amp;quot;properties&amp;quot;:{&lt;br /&gt;
               &amp;quot;propertyB1&amp;quot;:{&lt;br /&gt;
                  &amp;quot;value&amp;quot;:&amp;quot;valuePropertyB1&amp;quot;&lt;br /&gt;
               }&lt;br /&gt;
            }&lt;br /&gt;
         },&lt;br /&gt;
         &amp;quot;propertyC&amp;quot;:{&lt;br /&gt;
            &amp;quot;eventValue&amp;quot;:[&lt;br /&gt;
               &amp;quot;valuePropertyC1&amp;quot;,&lt;br /&gt;
               &amp;quot;valuePropertyC2&amp;quot;,&lt;br /&gt;
               &amp;quot;valuePropertyC3&amp;quot;&lt;br /&gt;
            ]&lt;br /&gt;
         }&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;snsSqsTrigger&amp;quot;:true,&lt;br /&gt;
      &amp;quot;messageAttributes&amp;quot;:{&lt;br /&gt;
            &amp;quot;msgTag&amp;quot;:{&lt;br /&gt;
               &amp;quot;value&amp;quot;:&amp;quot;msgTag&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;propertyD&amp;quot;:{&lt;br /&gt;
               &amp;quot;value&amp;quot;:&amp;quot;valuePropertyD&amp;quot;&lt;br /&gt;
            }&lt;br /&gt;
      }&lt;br /&gt;
   },&lt;br /&gt;
   {&lt;br /&gt;
      &amp;quot;output_LambdaFunctionHdrSqs_pass&amp;quot;:{&lt;br /&gt;
         &amp;quot;properties&amp;quot;:{&lt;br /&gt;
            &amp;quot;propertyA&amp;quot;:{&lt;br /&gt;
               &amp;quot;value&amp;quot;:&amp;quot;valueProperty1&amp;quot;&lt;br /&gt;
            }&lt;br /&gt;
         }&lt;br /&gt;
      }&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot; linein&amp;gt;&lt;br /&gt;
&amp;quot;snsSqsTrigger&amp;quot;:true&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Dsq=====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
// An example input and output event of Direct Sqs&lt;br /&gt;
{&lt;br /&gt;
   &amp;quot;LambdaFunctionHdrDsq_input__pass&amp;quot;:{&lt;br /&gt;
      &amp;quot;forStageMatching&amp;quot;:true,&lt;br /&gt;
      &amp;quot;properties&amp;quot;:{&lt;br /&gt;
         &amp;quot;propertyA&amp;quot;:{&lt;br /&gt;
            &amp;quot;forStageMatching&amp;quot;:true,&lt;br /&gt;
            &amp;quot;value&amp;quot;:&amp;quot;valueProperty1&amp;quot;&lt;br /&gt;
         },&lt;br /&gt;
         &amp;quot;propertyB&amp;quot;:{&lt;br /&gt;
            &amp;quot;forStageMatching&amp;quot;:true,&lt;br /&gt;
            &amp;quot;properties&amp;quot;:{&lt;br /&gt;
               &amp;quot;propertyB1&amp;quot;:{&lt;br /&gt;
                  &amp;quot;forStageMatching&amp;quot;:true,&lt;br /&gt;
                  &amp;quot;value&amp;quot;:&amp;quot;valuePropertyB1&amp;quot;&lt;br /&gt;
               }&lt;br /&gt;
            }&lt;br /&gt;
         },&lt;br /&gt;
         &amp;quot;propertyC&amp;quot;:{&lt;br /&gt;
            &amp;quot;eventValue&amp;quot;:[&lt;br /&gt;
               &amp;quot;valuePropertyC1&amp;quot;,&lt;br /&gt;
               &amp;quot;valuePropertyC2&amp;quot;,&lt;br /&gt;
               &amp;quot;valuePropertyC3&amp;quot;&lt;br /&gt;
            ]&lt;br /&gt;
         }&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;DirectSqs&amp;quot;:true,&lt;br /&gt;
      &amp;quot;messageAttributes&amp;quot;:{&lt;br /&gt;
         &amp;quot;msgTag&amp;quot;:{&lt;br /&gt;
           &amp;quot;forStageMatching&amp;quot;:true,&lt;br /&gt;
           &amp;quot;value&amp;quot;:&amp;quot;msgTag&amp;quot;&lt;br /&gt;
          },&lt;br /&gt;
          &amp;quot;propertyD&amp;quot;:{&lt;br /&gt;
           &amp;quot;forStageMatching&amp;quot;:true,&lt;br /&gt;
           &amp;quot;value&amp;quot;:&amp;quot;valuePropertyD&amp;quot;&lt;br /&gt;
          }&lt;br /&gt;
      }&lt;br /&gt;
   },&lt;br /&gt;
   {&lt;br /&gt;
      &amp;quot;output_LambdaFunctionHdrDsq_pass&amp;quot;:{&lt;br /&gt;
         &amp;quot;forStageMatching&amp;quot;:true,&lt;br /&gt;
         &amp;quot;properties&amp;quot;:{&lt;br /&gt;
            &amp;quot;propertyA&amp;quot;:{&lt;br /&gt;
               &amp;quot;forStageMatching&amp;quot;:true,&lt;br /&gt;
               &amp;quot;value&amp;quot;:&amp;quot;valueProperty1&amp;quot;&lt;br /&gt;
            }&lt;br /&gt;
         }&lt;br /&gt;
      }&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* DirectSqs = true &lt;br /&gt;
:: for initialStage of Dsq&lt;br /&gt;
* messageAttributes is optional&lt;br /&gt;
&lt;br /&gt;
=====Inv=====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;LambdaFunctionHdrInv_input__pass&amp;quot;:{&lt;br /&gt;
     &amp;quot;forStageMatching&amp;quot;:true,&lt;br /&gt;
     &amp;quot;properties&amp;quot;:{&lt;br /&gt;
        &amp;quot;propertyA&amp;quot;:{&lt;br /&gt;
           &amp;quot;forStageMatching&amp;quot;:true,&lt;br /&gt;
           &amp;quot;value&amp;quot;:&amp;quot;valueProperty1&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;propertyB&amp;quot;:{&lt;br /&gt;
           &amp;quot;forStageMatching&amp;quot;:true,&lt;br /&gt;
           &amp;quot;properties&amp;quot;:{&lt;br /&gt;
              &amp;quot;propertyB1&amp;quot;:{&lt;br /&gt;
                 &amp;quot;forStageMatching&amp;quot;:true,&lt;br /&gt;
                 &amp;quot;value&amp;quot;:&amp;quot;valuePropertyB1&amp;quot;&lt;br /&gt;
              }&lt;br /&gt;
           }&lt;br /&gt;
        }&lt;br /&gt;
     }&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
        &amp;quot;output_LambdaFunctionHdrInv_pass&amp;quot;:{&lt;br /&gt;
           &amp;quot;forStageMatching&amp;quot;:true,&lt;br /&gt;
           &amp;quot;properties&amp;quot;:{&lt;br /&gt;
              &amp;quot;propertyA&amp;quot;:{&lt;br /&gt;
                 &amp;quot;forStageMatching&amp;quot;:true,&lt;br /&gt;
                 &amp;quot;value&amp;quot;:&amp;quot;valueProperty1&amp;quot;&lt;br /&gt;
              }&lt;br /&gt;
           }&lt;br /&gt;
        }&lt;br /&gt;
     }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Api=====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
// An example input and output event of API&lt;br /&gt;
{&lt;br /&gt;
	&amp;quot;LambdaFunctionHdrApi_input__pass_notTestAuthorizer&amp;quot;: { &lt;br /&gt;
		&amp;quot;forstageMatvhing&amp;quot;: true, &lt;br /&gt;
		&amp;quot;properties&amp;quot;: { &lt;br /&gt;
			&amp;quot;body&amp;quot;: { &lt;br /&gt;
				&amp;quot;properties&amp;quot;: { &lt;br /&gt;
					&amp;quot;propertyA&amp;quot;: { &lt;br /&gt;
						&amp;quot;testValueMatches&amp;quot;: false, &lt;br /&gt;
						&amp;quot;value&amp;quot;: &amp;quot;valueProperty1&amp;quot;, &lt;br /&gt;
					}, &lt;br /&gt;
					&amp;quot;propertyB&amp;quot;: { &lt;br /&gt;
						&amp;quot;properties&amp;quot;: { &lt;br /&gt;
							&amp;quot;propertyB1&amp;quot;: { &lt;br /&gt;
								&amp;quot;value&amp;quot;: &amp;quot;valuePropertyB1&amp;quot;, &lt;br /&gt;
							} &lt;br /&gt;
						} &lt;br /&gt;
					}, &lt;br /&gt;
					&amp;quot;propertyC&amp;quot;: { &lt;br /&gt;
						&amp;quot;eventValue&amp;quot;: [ &lt;br /&gt;
							&amp;quot;valuePropertyC1&amp;quot;, &lt;br /&gt;
							&amp;quot;valuePropertyC2&amp;quot;, &lt;br /&gt;
							&amp;quot;valuePropertyC3&amp;quot;, &lt;br /&gt;
						] &lt;br /&gt;
					},&lt;br /&gt;
					... &lt;br /&gt;
				} &lt;br /&gt;
			} &lt;br /&gt;
		}&lt;br /&gt;
	}, &lt;br /&gt;
	&amp;quot;Output_LambdaFunctionHdrApi_input__pass_notTestAuthorizer&amp;quot;: { &lt;br /&gt;
		&amp;quot;properties&amp;quot;: { &lt;br /&gt;
			&amp;quot;body&amp;quot;: { &lt;br /&gt;
				&amp;quot;properties&amp;quot;: { &lt;br /&gt;
					&amp;quot;propertyA&amp;quot;: { &lt;br /&gt;
						&amp;quot;testValueMatches&amp;quot;: false, &lt;br /&gt;
						&amp;quot;value&amp;quot;: &amp;quot;valueProperty1&amp;quot;&lt;br /&gt;
					}, &lt;br /&gt;
					...&lt;br /&gt;
				} &lt;br /&gt;
			} &lt;br /&gt;
		}  &lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====S3=====&lt;br /&gt;
&lt;br /&gt;
====dynamodb====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
// An example event of Dynamodb //optional &lt;br /&gt;
{&lt;br /&gt;
	{inputEventTag}__dynamodb_{action}_{tablename}: { // eg. &amp;quot;Complexfilter_ProcessComplexfilter_logical_basic__dynamodb_update_FilterMain&amp;quot;&lt;br /&gt;
	&amp;quot;forStageMatching&amp;quot;: true,&lt;br /&gt;
     &amp;quot;properties&amp;quot;: {&lt;br /&gt;
        &amp;quot;filterMainUniqueRequestId&amp;quot;: {&lt;br /&gt;
          &amp;quot;testValueMatches&amp;quot;: fase,&lt;br /&gt;
          &amp;quot;value&amp;quot;: &amp;quot;bbc4f4a9-2032-4dec-9129-8c7d169fecc5&amp;quot;&lt;br /&gt;
         },&lt;br /&gt;
        &amp;quot;filterObject&amp;quot;: {&lt;br /&gt;
        &amp;quot;forStageMatching&amp;quot;: true,&lt;br /&gt;
        &amp;quot;properties&amp;quot;: {&lt;br /&gt;
          &amp;quot;logicalType&amp;quot;: {&lt;br /&gt;
            &amp;quot;value&amp;quot;: &amp;quot;partitionKey&amp;quot;&lt;br /&gt;
          },&lt;br /&gt;
          &amp;quot;comparison&amp;quot;: {&lt;br /&gt;
            &amp;quot;value&amp;quot;: &amp;quot;equals&amp;quot;&lt;br /&gt;
          },&lt;br /&gt;
          &amp;quot;type&amp;quot;: {&lt;br /&gt;
            &amp;quot;value&amp;quot;: &amp;quot;logical&amp;quot;&lt;br /&gt;
          },&lt;br /&gt;
          &amp;quot;partitionKey&amp;quot;: {&lt;br /&gt;
            &amp;quot;forStageMatching&amp;quot;: true,&lt;br /&gt;
            &amp;quot;value&amp;quot;: &amp;quot;mockIntegratioTestCPF&amp;quot;&lt;br /&gt;
          }&lt;br /&gt;
        }&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;filterMainExpiryTime&amp;quot;: {&lt;br /&gt;
        &amp;quot;testValueMatches&amp;quot;: fase,&lt;br /&gt;
        &amp;quot;value&amp;quot;: 1731980802858&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;filterMainStatus&amp;quot;: {&lt;br /&gt;
       &amp;quot;forStageMatching&amp;quot;: true,&lt;br /&gt;
        &amp;quot;value&amp;quot;: &amp;quot;processing&amp;quot;&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;createTime&amp;quot;: {&lt;br /&gt;
        &amp;quot;testValueMatches&amp;quot;: fase,&lt;br /&gt;
        &amp;quot;value&amp;quot;: 1731894402678&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;objType&amp;quot;: {&lt;br /&gt;
        &amp;quot;forStageMatching&amp;quot;: true,&lt;br /&gt;
        &amp;quot;properties&amp;quot;: {&lt;br /&gt;
          &amp;quot;serviceTag&amp;quot;: {&lt;br /&gt;
            &amp;quot;forStageMatching&amp;quot;: true,&lt;br /&gt;
            &amp;quot;value&amp;quot;: &amp;quot;IntTesting&amp;quot;&lt;br /&gt;
          },&lt;br /&gt;
          &amp;quot;objectType&amp;quot;: {&lt;br /&gt;
            &amp;quot;forStageMatching&amp;quot;: true,&lt;br /&gt;
            &amp;quot;value&amp;quot;: &amp;quot;TestRecord&amp;quot;&lt;br /&gt;
          }&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;keyValues&amp;quot;: {&lt;br /&gt;
      &amp;quot;filterMainId&amp;quot;: &amp;quot;4865d2451a621cb7f71225cfabf2df4f98e20801&amp;quot;,&lt;br /&gt;
      &amp;quot;objTypeId&amp;quot;: &amp;quot;cdb170690571df7522b3850920fce02507c077ee&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
	} &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* partition key: filterMainId&lt;br /&gt;
* sort key: objTypeId&lt;br /&gt;
&lt;br /&gt;
[[2021-01-15 - Integration Testing - Adding DynamoDB result tests]]&lt;br /&gt;
&lt;br /&gt;
===Type paramiter===&lt;br /&gt;
use for evnet and dyanmodb event&lt;br /&gt;
====Normal====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 object: {&lt;br /&gt;
  forStageMatching: true,&lt;br /&gt;
  properties: {&lt;br /&gt;
    name:{&lt;br /&gt;
     forStageMatching: true,&lt;br /&gt;
     value:&amp;quot;Tom&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
   }&lt;br /&gt;
 },&lt;br /&gt;
 array: {&lt;br /&gt;
  forStageMatching: true,&lt;br /&gt;
  useIsEqual: true,&lt;br /&gt;
  eventValue: [&lt;br /&gt;
   {&lt;br /&gt;
     &amp;quot;relTypeAndDirection&amp;quot;: {&lt;br /&gt;
       &amp;quot;relType&amp;quot;: {&lt;br /&gt;
         &amp;quot;serviceTag&amp;quot;: &amp;quot;maxxCart2&amp;quot;,&lt;br /&gt;
         &amp;quot;relationshipTag&amp;quot;: &amp;quot;hasCartOrder&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;relationshipDirection&amp;quot;: &amp;quot;from&amp;quot;&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;targetObjects&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;objType&amp;quot;: {&lt;br /&gt;
           &amp;quot;serviceTag&amp;quot;: &amp;quot;maxxCart2&amp;quot;,&lt;br /&gt;
           &amp;quot;objectType&amp;quot;: &amp;quot;cartOrder&amp;quot;&lt;br /&gt;
          }&lt;br /&gt;
        }&lt;br /&gt;
      ]&lt;br /&gt;
    }&lt;br /&gt;
  ]&lt;br /&gt;
 },&lt;br /&gt;
 number: {&lt;br /&gt;
  forStageMatching: true,&lt;br /&gt;
  value: 1111&lt;br /&gt;
 },&lt;br /&gt;
 string: {&lt;br /&gt;
  forStageMatching: true,&lt;br /&gt;
  value: &amp;quot;hi&amp;quot;&lt;br /&gt;
 },&lt;br /&gt;
 boolean: {&lt;br /&gt;
  forStageMatching: true,&lt;br /&gt;
  value: true&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
 forStageMatching: true&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
::set true for check match value,It is not necessary to set every value&lt;br /&gt;
:::use in test importent paramiter&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
testValueMatches:false&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
::setting paramiter require on create but can not test random value eg: identifier or timeStamp or uuid&lt;br /&gt;
&lt;br /&gt;
====Empty====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
 EmptyString:{&lt;br /&gt;
forStageMatching: true,&lt;br /&gt;
  value:&amp;quot;&amp;quot;&lt;br /&gt;
 },&lt;br /&gt;
 EmptyArray:{&lt;br /&gt;
   forStageMatching: true,&lt;br /&gt;
   useIsEqual: true,&lt;br /&gt;
   eventValue: []&lt;br /&gt;
 },&lt;br /&gt;
 EmptyObject:{&lt;br /&gt;
  forStageMatching: true,&lt;br /&gt;
  value:{}&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Error====&lt;br /&gt;
can test noRetryError&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;quot;errorMessage&amp;quot;: {&lt;br /&gt;
    forStageMatching: true,&lt;br /&gt;
    &amp;quot;value&amp;quot;: &amp;quot;Not found schema of {serviceTag:TestGraphHandler, objectType:notFoundObjType}&amp;quot;&lt;br /&gt;
   }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Paramiter random====&lt;br /&gt;
Can not test case random numbber or uuid.&lt;br /&gt;
But requriOnCreate mush be set &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
testValueMatches:false&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
or set&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
forStageMatching:false&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=tests=&lt;br /&gt;
Syntax is array of object&lt;br /&gt;
==Syntax name== &lt;br /&gt;
===Testtag name ===&lt;br /&gt;
*{integrationTestTag}&lt;br /&gt;
#Test Own servcie or not a lot stage&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
Test_{inputEventTag}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
#Mix multiple servcie and multiple stage&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt; &lt;br /&gt;
IntegrationTest_{inputEventTag}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===File name ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt; &lt;br /&gt;
{integrationTestTag}.json&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Setting of test==&lt;br /&gt;
[[Service - Integration Test Config#tests.js Syntax|syntax test]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
            integrationTestTag: {integrationTestTag},&lt;br /&gt;
            productionSafe: true|false, //default false&lt;br /&gt;
            noInitialStage: true, // default false, if set to true, no error when no foundInitialStages found&lt;br /&gt;
            errorIfStageUndefined: true|false, //default false&lt;br /&gt;
            errorIfInvokeUndefined: true|false, //default false,&lt;br /&gt;
            dynamoDBSeedDataTags:[&amp;quot;seedDataDB_test_case_xx&amp;quot;], //[seedDataTag] optional if have seed data for test&lt;br /&gt;
            graphSeedDataTags:[&amp;quot;seedDataGraph_test_case_xx&amp;quot;], //[seedDataTag] optional if have seed data for test&lt;br /&gt;
            cleaningeDynamoOneRecordsTags: [&amp;quot;cleaningSeed_partitionKey_sortKey_normol&amp;quot;], //optional&lt;br /&gt;
            cleaningeDynamoManyRecordsTags: [], // optional&lt;br /&gt;
            stages:[&lt;br /&gt;
               ...&lt;br /&gt;
            ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
*[[2025-11-20 IntegrationTest#dynamoDBSeedDataTags|dynamoDBSeedDataTags]]&lt;br /&gt;
*[[2025-11-20 IntegrationTest#graphSeedDataTags|graphSeedDataTags]]&lt;br /&gt;
*[[2025-11-20 IntegrationTest#cleaningeDynamoOneRecordsTags|cleaningeDynamoOneRecordsTags]]&lt;br /&gt;
*[[2025-11-20 IntegrationTest#cleaningeDynamoManyRecordsTags|cleaningeDynamoManyRecordsTags]]&lt;br /&gt;
&lt;br /&gt;
==Stages==&lt;br /&gt;
====Initiate stage====&lt;br /&gt;
:&#039;&#039;&#039;&amp;quot;initialStage&amp;quot;:true&#039;&#039;&#039;&lt;br /&gt;
[[Service_-_Integration_Test_Config#tests.js Syntax|detail property of test]]&lt;br /&gt;
=====HandlerService=====&lt;br /&gt;
======Sqs======&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;quot;stages&amp;quot;:[&lt;br /&gt;
         {&lt;br /&gt;
            &amp;quot;initialStage&amp;quot;:true,&lt;br /&gt;
            &amp;quot;inputEventTag&amp;quot;:&amp;quot;Locations_ProcessLocationNodeSomting_casenotHaveData&amp;quot;,&lt;br /&gt;
            &amp;quot;serviceName&amp;quot;:&amp;quot;Locations&amp;quot;,&lt;br /&gt;
            &amp;quot;resourceType&amp;quot;:&amp;quot;Lambda&amp;quot;,&lt;br /&gt;
            &amp;quot;resourceName&amp;quot;:&amp;quot;ProcessLocationNodeSomtingHdrDsq&amp;quot;,&lt;br /&gt;
            &amp;quot;outputEventTag&amp;quot;:&amp;quot;Output_Locations_ProcessLocationNodeSomting_casenotHaveData&amp;quot;&lt;br /&gt;
         }&lt;br /&gt;
      ]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
======Dsq======&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
stages: [&lt;br /&gt;
        {&lt;br /&gt;
          initialStage: true,&lt;br /&gt;
          inputEventTag: &#039;LambdaFunctionHdrDsq_input_singleStage_directSqs__pass&#039;,&lt;br /&gt;
          serviceName: &#039;ServiceTemplate&#039;,&lt;br /&gt;
          resourceType: &#039;Lambda&#039;,&lt;br /&gt;
          resourceName: &#039;LambdaFunctionHdrDsq&#039;,&lt;br /&gt;
          outputEventTag: &#039;LambdaFunctionHdrDsq_output__returnvalue_pass&#039;,&lt;br /&gt;
          // **** not set snsServiceName and snsTopic&lt;br /&gt;
          // can be test dynamodbOutput&lt;br /&gt;
        }&lt;br /&gt;
      ]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
======Api======&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;quot;stages&amp;quot;:[&lt;br /&gt;
    {&lt;br /&gt;
       &amp;quot;initialStage&amp;quot;:true,&lt;br /&gt;
       &amp;quot;inputEventTag&amp;quot;:&amp;quot;LambdaFunctionHdrApi_input__pass&amp;quot;,&lt;br /&gt;
       &amp;quot;serviceName&amp;quot;:&amp;quot;ServiceTemplate&amp;quot;,&lt;br /&gt;
       &amp;quot;resourceType&amp;quot;:&amp;quot;Lambda&amp;quot;,&lt;br /&gt;
       &amp;quot;resourceName&amp;quot;:&amp;quot;LambdaFunctionHdrApi&amp;quot;,&lt;br /&gt;
       &amp;quot;outputEventTag&amp;quot;:&amp;quot;LambdaFunctionHdrApi_output__pass&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
======Inv======&lt;br /&gt;
*&#039;&#039;&#039;single stage&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
[{&lt;br /&gt;
   &amp;quot;integrationTestTag&amp;quot;:&amp;quot;LambdaFunctionHdrInv__pass&amp;quot;,&lt;br /&gt;
   &amp;quot;productionSafe&amp;quot;:false,&lt;br /&gt;
   &amp;quot;errorIfStageUndefined&amp;quot;:false,&lt;br /&gt;
   &amp;quot;errorIfInvokeUndefined&amp;quot;:false,&lt;br /&gt;
   &amp;quot;dynamoDBSeedDataTags&amp;quot;:[&amp;quot;seedDataDB_test_case_xx&amp;quot;], //[seedDataTag] optional if have seed data for test&lt;br /&gt;
   &amp;quot;graphSeedDataTags&amp;quot;:[&amp;quot;seedDataGraph_test_case_xx&amp;quot;], //[seedDataTag] optional if have seed data for test&lt;br /&gt;
   &amp;quot;cleaningeDynamoOneRecordsTags&amp;quot;: [&amp;quot;cleaningSeed_partitionKey_sortKey_normol&amp;quot;], //optional&lt;br /&gt;
   &amp;quot;cleaningeDynamoManyRecordsTags&amp;quot;: []&lt;br /&gt;
   &amp;quot;stages&amp;quot;:[&lt;br /&gt;
      {&lt;br /&gt;
         &amp;quot;initialStage&amp;quot;:true,&lt;br /&gt;
         &amp;quot;inputEventTag&amp;quot;:&amp;quot;LambdaFunctionHdrInv_input__pass&amp;quot;,&lt;br /&gt;
         &amp;quot;serviceName&amp;quot;:&amp;quot;ServiceTemplate&amp;quot;,&lt;br /&gt;
         &amp;quot;resourceType&amp;quot;:&amp;quot;Lambda&amp;quot;,&lt;br /&gt;
         &amp;quot;resourceName&amp;quot;:&amp;quot;LambdaFunctionHdrInv&amp;quot;,&lt;br /&gt;
         &amp;quot;outputEventTag&amp;quot;:&amp;quot;LambdaFunctionHdrInv_output__pass&amp;quot;&lt;br /&gt;
      }&lt;br /&gt;
   ]&lt;br /&gt;
}]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;invoke multiple stage&#039;&#039;&#039; &lt;br /&gt;
:*Each stage test can invoke multiple lambda by use &amp;quot;eventStage Tag&amp;quot; point to stage for test integration test.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
[{&lt;br /&gt;
   &amp;quot;integrationTestTag&amp;quot;:&amp;quot;LambdaFunctionHdrInv_invokes__pass&amp;quot;,&lt;br /&gt;
   &amp;quot;productionSafe&amp;quot;:false,&lt;br /&gt;
   &amp;quot;errorIfStageUndefined&amp;quot;:false,&lt;br /&gt;
   &amp;quot;errorIfInvokeUndefined&amp;quot;:false,&lt;br /&gt;
   &amp;quot;dynamoDBSeedDataTags&amp;quot;:[], //[seedDataTag] optional if have seed data for test&lt;br /&gt;
   &amp;quot;graphSeedDataTags&amp;quot;:[], //[seedDataTag] optional if have seed data for test&lt;br /&gt;
   &amp;quot;cleaningeDynamoOneRecordsTags&amp;quot;: [], //optional&lt;br /&gt;
   &amp;quot;cleaningeDynamoManyRecordsTags&amp;quot;: [], // optional&lt;br /&gt;
   &amp;quot;stages&amp;quot;:[&lt;br /&gt;
      {&lt;br /&gt;
         &amp;quot;initialStage&amp;quot;:true,&lt;br /&gt;
         &amp;quot;inputEventTag&amp;quot;:&amp;quot;LambdaFunctionHdrInv_input__pass&amp;quot;,&lt;br /&gt;
         &amp;quot;serviceName&amp;quot;:&amp;quot;ServiceTemplate&amp;quot;,&lt;br /&gt;
         &amp;quot;resourceType&amp;quot;:&amp;quot;Lambda&amp;quot;,&lt;br /&gt;
         &amp;quot;resourceName&amp;quot;:&amp;quot;LambdaFunctionHdrInv&amp;quot;,&lt;br /&gt;
         &amp;quot;outputEventTag&amp;quot;:&amp;quot;LambdaFunctionHdrInv_output__pass&amp;quot;,&lt;br /&gt;
         &amp;quot;invokes&amp;quot;:[&lt;br /&gt;
            {&lt;br /&gt;
               &amp;quot;eventStageTag&amp;quot;:&amp;quot;service_invokesB__pass&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            {&lt;br /&gt;
               &amp;quot;eventStageTag&amp;quot;:&amp;quot;service_invokesD__pass&amp;quot;&lt;br /&gt;
            }&lt;br /&gt;
         ]&lt;br /&gt;
      },&lt;br /&gt;
      {&lt;br /&gt;
         &amp;quot;eventStageTag&amp;quot;:&amp;quot;service_invokesB__pass&amp;quot;,&lt;br /&gt;
         &amp;quot;inputEventTag&amp;quot;:&amp;quot;input_service_invokes__pass&amp;quot;,&lt;br /&gt;
         &amp;quot;serviceName&amp;quot;:&amp;quot;ServiceTemplate_B&amp;quot;,&lt;br /&gt;
         &amp;quot;resourceType&amp;quot;:&amp;quot;Lambda&amp;quot;,&lt;br /&gt;
         &amp;quot;resourceName&amp;quot;:&amp;quot;LambdaFunction_B_HdrInv&amp;quot;,&lt;br /&gt;
         &amp;quot;outputEventTag&amp;quot;:&amp;quot;output_service_invokes__pass&amp;quot;&lt;br /&gt;
      },&lt;br /&gt;
      {&lt;br /&gt;
         &amp;quot;eventStageTag&amp;quot;:&amp;quot;service_invokesD__pass&amp;quot;,&lt;br /&gt;
         &amp;quot;inputEventTag&amp;quot;:&amp;quot;input_service_invokesD__pass&amp;quot;,&lt;br /&gt;
         &amp;quot;serviceName&amp;quot;:&amp;quot;ServiceTemplate_D&amp;quot;,&lt;br /&gt;
         &amp;quot;resourceType&amp;quot;:&amp;quot;Lambda&amp;quot;,&lt;br /&gt;
         &amp;quot;resourceName&amp;quot;:&amp;quot;LambdaFunction_D_HdrInv&amp;quot;,&lt;br /&gt;
         &amp;quot;outputEventTag&amp;quot;:&amp;quot;output_service_invokesD__pass&amp;quot;&lt;br /&gt;
      }&lt;br /&gt;
   ]&lt;br /&gt;
}]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
======S3======&lt;br /&gt;
======Batch======&lt;br /&gt;
&lt;br /&gt;
====GeneratedSeedData====&lt;br /&gt;
*Integrationtest must be delete identifier every time before test.&lt;br /&gt;
*Set &#039;generatedSeedData&#039; in file tests.json case by case of stage eg: stages[0] create identifier is randomOnCreate will set &#039;generatedSeedData&#039; and stages[1] create relationship is randomOnCreate(It is usually random, except in the case of relationship version) set generatedSeedData this stages[1].&lt;br /&gt;
*How to delete case identifier rendomOnCreate?: set in stage use setting generateSeedData &amp;quot;randomOnCreateIdentifier&amp;quot;&lt;br /&gt;
#randomOnCreateIdentifier&lt;br /&gt;
#notRandomOnIdentifier&lt;br /&gt;
#relationships&lt;br /&gt;
=====randomOnCreateIdentifier=====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;quot;stages&amp;quot;: [&lt;br /&gt;
      {&lt;br /&gt;
        &amp;quot;initialStage&amp;quot;: true,&lt;br /&gt;
        &amp;quot;inputEventTag&amp;quot;: &amp;quot;MLocation_CreateHdrSqs__case_NodeVersionData_Jaya&amp;quot;,&lt;br /&gt;
        &amp;quot;serviceTag&amp;quot;: &amp;quot;MLocations&amp;quot;,&lt;br /&gt;
        &amp;quot;resourceType&amp;quot;: &amp;quot;Lambda&amp;quot;,&lt;br /&gt;
        &amp;quot;resourceName&amp;quot;: &amp;quot;CreateHdrSqs&amp;quot;,&lt;br /&gt;
        &amp;quot;snsServiceName&amp;quot;: &amp;quot;MLocations&amp;quot;,&lt;br /&gt;
        &amp;quot;snsTopic&amp;quot;: &amp;quot;Create_In&amp;quot;,&lt;br /&gt;
        &amp;quot;generatedSeedData&amp;quot;: {&lt;br /&gt;
          &amp;quot;randomOnCreateIdentifier&amp;quot;: [&lt;br /&gt;
            {&lt;br /&gt;
              &amp;quot;objType&amp;quot;: {&lt;br /&gt;
                &amp;quot;serviceTag&amp;quot;: &amp;quot;MLocations&amp;quot;,&lt;br /&gt;
                &amp;quot;objectType&amp;quot;: &amp;quot;Member&amp;quot;&lt;br /&gt;
              },&lt;br /&gt;
              &amp;quot;identifierValue&amp;quot;: &amp;quot;Jaya-member-001&amp;quot;&lt;br /&gt;
            }&lt;br /&gt;
          ]&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
=====notRandomOnIdentifier=====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;quot;stages&amp;quot;: [&lt;br /&gt;
      {&lt;br /&gt;
        &amp;quot;initialStage&amp;quot;: true,&lt;br /&gt;
        &amp;quot;inputEventTag&amp;quot;: &amp;quot;MLocation_CreateHdrSqs__case_NodeVersionData_Jaya&amp;quot;,&lt;br /&gt;
        &amp;quot;serviceTag&amp;quot;: &amp;quot;MLocations&amp;quot;,&lt;br /&gt;
        &amp;quot;resourceType&amp;quot;: &amp;quot;Lambda&amp;quot;,&lt;br /&gt;
        &amp;quot;resourceName&amp;quot;: &amp;quot;CreateHdrSqs&amp;quot;,&lt;br /&gt;
        &amp;quot;snsServiceName&amp;quot;: &amp;quot;MLocations&amp;quot;,&lt;br /&gt;
        &amp;quot;snsTopic&amp;quot;: &amp;quot;Create_In&amp;quot;,&lt;br /&gt;
        &amp;quot;generatedSeedData&amp;quot;: {&lt;br /&gt;
          &amp;quot;notRandomOnIdentifier&amp;quot;: [&lt;br /&gt;
            {&lt;br /&gt;
              &amp;quot;objType&amp;quot;: {&lt;br /&gt;
                &amp;quot;serviceTag&amp;quot;: &amp;quot;gggg&amp;quot;,&lt;br /&gt;
                &amp;quot;objectType&amp;quot;: &amp;quot;ssssss&amp;quot;&lt;br /&gt;
              },&lt;br /&gt;
              &amp;quot;identifiers&amp;quot;: {&lt;br /&gt;
                &amp;quot;topId&amp;quot;: &amp;quot;123456&amp;quot;&lt;br /&gt;
              }&lt;br /&gt;
            }&lt;br /&gt;
          ]&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    ]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
=====relationships=====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;quot;stages&amp;quot;: [&lt;br /&gt;
      {&lt;br /&gt;
        &amp;quot;initialStage&amp;quot;: true,&lt;br /&gt;
        &amp;quot;inputEventTag&amp;quot;: &amp;quot;MLocation_CreateHdrSqs__case_NodeVersionData_Jaya&amp;quot;,&lt;br /&gt;
        &amp;quot;serviceTag&amp;quot;: &amp;quot;MLocations&amp;quot;,&lt;br /&gt;
        &amp;quot;resourceType&amp;quot;: &amp;quot;Lambda&amp;quot;,&lt;br /&gt;
        &amp;quot;resourceName&amp;quot;: &amp;quot;CreateHdrSqs&amp;quot;,&lt;br /&gt;
        &amp;quot;snsServiceName&amp;quot;: &amp;quot;MLocations&amp;quot;,&lt;br /&gt;
        &amp;quot;snsTopic&amp;quot;: &amp;quot;Create_In&amp;quot;,&lt;br /&gt;
        &amp;quot;generatedSeedData&amp;quot;: {&lt;br /&gt;
         &amp;quot;relationships&amp;quot;: [&lt;br /&gt;
            {&lt;br /&gt;
              &amp;quot;relType&amp;quot;: {&lt;br /&gt;
                &amp;quot;serviceTag&amp;quot;: &amp;quot;PaymentMethodGeneric&amp;quot;,&lt;br /&gt;
                &amp;quot;relationshipTag&amp;quot;: &amp;quot;disabledPaymentMethodGenericPropertyValue&amp;quot;&lt;br /&gt;
              },&lt;br /&gt;
              &amp;quot;relId&amp;quot;: &amp;quot;f4f73de7-647c-4b3b-8043-87cc002f361a&amp;quot;&lt;br /&gt;
            }&lt;br /&gt;
          ]&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    ]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Dynamodb==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
stages: [&lt;br /&gt;
        {&lt;br /&gt;
          initialStage: true,&lt;br /&gt;
          inputEventTag: &#039;Locations_LambdaFunctionHdrDsq_singleStage_directSqs__pass&#039;,&lt;br /&gt;
          serviceName: &#039;ServiceTemplate&#039;,&lt;br /&gt;
          resourceType: &#039;Lambda&#039;,&lt;br /&gt;
          resourceName: &#039;LambdaFunctionHdrDsq&#039;,&lt;br /&gt;
          outputEventTag: &#039;output_Locations_LambdaFunctionHdrDsq_singleStage_directSqs__pass&#039;,&lt;br /&gt;
          dynamodbOutputEventIdentifiers: [&lt;br /&gt;
			{&lt;br /&gt;
              serviceName: {tableName}, //service that deployed the DynamoDB table, so can build table&#039;s full resource name&lt;br /&gt;
              resourceName: {resourceName}, //DynamoDB resourceName&lt;br /&gt;
              eventTag: {eventTagDynamoDB}&lt;br /&gt;
		    }&lt;br /&gt;
          ],&lt;br /&gt;
        }&lt;br /&gt;
      ]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Result of integrationtest =&lt;br /&gt;
Data have 2 table &amp;quot;TestRecord&amp;quot; and &amp;quot;TestUnit&amp;quot;.&lt;br /&gt;
:- TestRecord is table all unti of stage inside eg input output invokes and dynamodb&lt;br /&gt;
:- TestUnit is store status each unit &lt;br /&gt;
each unit save in table TestUnit&lt;br /&gt;
testRecordId is  name of test concat with testTime.&lt;br /&gt;
testUnitId is point to position of unti instage.&lt;br /&gt;
resultStatus is status of unit.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
eg:&lt;br /&gt;
input_0 = stages index 0 result &#039;&#039;&#039;input&#039;&#039;&#039;&lt;br /&gt;
output_1 = stages index 1 result &#039;&#039;&#039;output&#039;&#039;&#039;&lt;br /&gt;
invokeInput_0_1 = stages index 0 result &#039;&#039;&#039;invokes&#039;&#039;&#039; index 1 position input &lt;br /&gt;
invokeOutput_0_1 = stages index 0 result &#039;&#039;&#039;invokes&#039;&#039;&#039; index 1 position output&lt;br /&gt;
dynamodb_0_1 =  stages index 0 result &#039;&#039;&#039;dynamodb&#039;&#039;&#039; index 1.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
after all TestUnit finish (check  by awaitingMultiplestep penditnStep is integrationtestTag awaitingStepId is each TestUnit )&lt;br /&gt;
check all awaitingStep finish send message to ultimateIntegrationtest for sumla all test is status&lt;br /&gt;
&lt;br /&gt;
== Summary of test status == &lt;br /&gt;
:1.testStatus is &amp;quot;passed&amp;quot; all unit passed.&lt;br /&gt;
:2.testStatus is &amp;quot;failed&amp;quot;  have some is failed.&lt;br /&gt;
:3.testStatus is &amp;quot;processing&amp;quot; have some is have status processing after check all awaiting step is finish.&lt;br /&gt;
:4.testStatus is &amp;quot;failed&amp;quot; have record &amp;quot;errorsTest&amp;quot; in case &amp;quot;not match stage invoke&amp;quot;, &#039;found multiple matchingInvokes&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*[[2025-02-20 - Integration Test examples#tests.js Syntax|Syntax Dynamodb]]&lt;br /&gt;
&lt;br /&gt;
=How to test integrationtest s3=&lt;br /&gt;
[[Developer guide for making Integration Tests]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Working documents| 2025-11-20]]&lt;br /&gt;
[[Category:Working documents - Integration Testing| 2025-11-20]]&lt;/div&gt;</summary>
		<author><name>Mint</name></author>
	</entry>
	<entry>
		<id>https://izara.io/wiki/index.php?title=2025-11-20_IntegrationTest&amp;diff=4570</id>
		<title>2025-11-20 IntegrationTest</title>
		<link rel="alternate" type="text/html" href="https://izara.io/wiki/index.php?title=2025-11-20_IntegrationTest&amp;diff=4570"/>
		<updated>2026-08-11T06:26:52Z</updated>

		<summary type="html">&lt;p&gt;Mint: /* dynamoDBSeedDataTags */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Reference:&lt;br /&gt;
&lt;br /&gt;
*[[2020-10-01 - Integration Test Config - Functions|IntegrationtestConfig]]&lt;br /&gt;
*[[2020-10-01 - Integration Testing - Lambda Functions|Integrationtesting]]&lt;br /&gt;
*[[2025-02-20 - Integration Test examples|Example]]&lt;br /&gt;
&lt;br /&gt;
= File extension =&lt;br /&gt;
&lt;br /&gt;
uploadS3: &amp;quot;.json&amp;quot;&lt;br /&gt;
integrationtestConfig: &amp;quot;.js&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=TestRecord=&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JSON&amp;quot;&amp;gt;&lt;br /&gt;
[&lt;br /&gt;
  {&lt;br /&gt;
    integrationTestTag: &amp;quot;Integrationtest_xx&amp;quot;,&lt;br /&gt;
    testStartedTimestamp: 111111111, // start time&lt;br /&gt;
    bucketName: &amp;quot;integrationtest-config-us-east-2&amp;quot;,&lt;br /&gt;
    lastUpdateUniqueRequestId: &amp;quot;sssss&amp;quot;, //_izContext.uniqueRequestId protacts race coditionn dynamodb&lt;br /&gt;
    testStatus: &amp;quot;passed&amp;quot;,//failed,processing,passed&lt;br /&gt;
    testCompleteTimestamp: 1111113, // all test finish&lt;br /&gt;
    stages: [&lt;br /&gt;
      {&lt;br /&gt;
        stageConfig: {&lt;br /&gt;
          //straight copy of this stage from integration test config&lt;br /&gt;
          inputEventTag: &amp;quot;xx&amp;quot;,&lt;br /&gt;
          inputEventConfig: {//event input&lt;br /&gt;
          },&lt;br /&gt;
          outputEventTag: &amp;quot;output_xx&amp;quot;,&lt;br /&gt;
          outputEventConfig: {//event out put&lt;br /&gt;
          },&lt;br /&gt;
          resourceName: &amp;quot;ComplexfilterTestProcessComplexfilter&amp;quot;,// function name&lt;br /&gt;
          resourceType: &amp;quot;Lambda&amp;quot;, // function name&lt;br /&gt;
          serviceTag: &amp;quot;Complexfilter&amp;quot;,// (initeate sqs)&lt;br /&gt;
          snsServiceName: &amp;quot;Complexfilter&amp;quot;,// (initeate sqs)&lt;br /&gt;
          snsTopic: &amp;quot;PorcessComplexfilter_In&amp;quot;// (initeate sqs)&lt;br /&gt;
&lt;br /&gt;
        },&lt;br /&gt;
        stageStatus: &amp;quot;waiting&amp;quot;, //waiting|passed|failed,&lt;br /&gt;
        stageFinishedTimestamp: 111111111,// time that all tests finished and testRecord.stages.{stageKey}.stageStatus updated&lt;br /&gt;
        stageResults: {&lt;br /&gt;
          //results at the point of entering the resource (eg a Lambda function is invoked)&lt;br /&gt;
          inputResult: {&lt;br /&gt;
            resultTimestamp: 111111111,//{time result saved},&lt;br /&gt;
            resultStatus: &amp;quot;passed&amp;quot;,//passed|failed,&lt;br /&gt;
            requestParams: {//event input&lt;br /&gt;
            }&lt;br /&gt;
          },&lt;br /&gt;
          //results at the point of returning from the resource (eg a Lambda function returns)&lt;br /&gt;
          outputResult: {&lt;br /&gt;
            resultTimestamp: 111111111,//{time result saved},&lt;br /&gt;
            resultStatus: &amp;quot;passed&amp;quot;,//passed|failed,&lt;br /&gt;
            requestParams: {//event input&lt;br /&gt;
            }&lt;br /&gt;
          },&lt;br /&gt;
          //results at the point of invoking an external resource (eg the tested Lambda function is invoking another Lambda function)&lt;br /&gt;
          invokes: {&lt;br /&gt;
            &amp;quot;serviceName_resourceType_resourceName_inputEventTag &amp;quot;: {&lt;br /&gt;
              invokeTimestamp: 111111111,//{ time result saved },&lt;br /&gt;
              resultTimestamp: 111111112,//{ time result saved },&lt;br /&gt;
              resultStatus: &amp;quot;passed&amp;quot;,//passed | failed,&lt;br /&gt;
              invokeParams: {},//{event invoke input config }&lt;br /&gt;
              requestParams: {}// event invoke input request&lt;br /&gt;
            },&lt;br /&gt;
          },&lt;br /&gt;
          dynamodbResults: [&lt;br /&gt;
            {&lt;br /&gt;
              indexOfDynamodbOutput: 0,&lt;br /&gt;
              requestParams,&lt;br /&gt;
              resultStatus: &amp;quot;passed&amp;quot;,//&lt;br /&gt;
              resultTimestamp: 22222&lt;br /&gt;
            }]&lt;br /&gt;
&lt;br /&gt;
        },&lt;br /&gt;
        stageErrors: [&lt;br /&gt;
          //misc errors encountered&lt;br /&gt;
        ]&lt;br /&gt;
      }]&lt;br /&gt;
&lt;br /&gt;
  }&lt;br /&gt;
]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Seed Data=&lt;br /&gt;
integrationtest manager seed date 2 process&lt;br /&gt;
&lt;br /&gt;
=== Main Seed Data===&lt;br /&gt;
:Save file in s3 (in &#039;&#039;&#039;buckname&#039;&#039;&#039; :integrationtest-config-us-east-2, &#039;&#039;&#039;folder&#039;&#039;&#039;:seedData_integrationTest).For other dev use service,If a developer wants to add more for other important testing purposes.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;How to use:&#039;&#039;&#039;&lt;br /&gt;
#Add it from the s3 bucket at this point&lt;br /&gt;
#Run batch refreshSeedData [[Developer guide for making Integration Tests#Bash script|batch RefreshSeedData]]&lt;br /&gt;
&#039;&#039;&#039;Logic&#039;&#039;&#039;:Process by storage resouse (graph or dynamodb)&lt;br /&gt;
:To clean up the seed data in the table after it creates seed data form service deploy and pulls seed data from s3.&lt;br /&gt;
&lt;br /&gt;
=== Refresh Seed Data ===&lt;br /&gt;
:ProcessRefreshSeedData use seedDataTag for create data environment of &#039;&#039;&#039;test&#039;&#039;&#039; and can be refresh seeddata re-test agian.&lt;br /&gt;
:&#039;&#039;&#039;canbe share&#039;&#039;&#039; seed data for other test by seed data tag.&lt;br /&gt;
&#039;&#039;&#039;How to use:&#039;&#039;&#039;&lt;br /&gt;
:Save file in s3 (for other dav keep in floder dev name) or testConfig/seedData_config(for admin)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Folder&#039;&#039;&#039;&lt;br /&gt;
*dynamoDBSeedDataTags.json&lt;br /&gt;
*graphSeedDataTags.json&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Example&#039;&#039;&#039;&lt;br /&gt;
==== dynamoDBSeedDataTags ====&lt;br /&gt;
:If set tag in this setting integrationtest is generate seed data. in storage resource dynammodb.&lt;br /&gt;
Example&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;seedDynamodb_abc_ver2&amp;quot;: [ // seedDataTag&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;tableName&amp;quot;: &amp;quot;DelivMethodSTDTestLogicalResultsData&amp;quot;,  // servcieTag+stage+tablename&lt;br /&gt;
      &amp;quot;partitionKey&amp;quot;: &amp;quot;logicalResultId&amp;quot;,&lt;br /&gt;
      &amp;quot;sortKey&amp;quot;: &amp;quot;identifiersId&amp;quot;,&lt;br /&gt;
      &amp;quot;datas&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;logicalResultId&amp;quot;: &amp;quot;eeeeeeeeee4&amp;quot;,&lt;br /&gt;
          &amp;quot;identifiersId&amp;quot;: &amp;quot;lllll123456&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;logicalResultId&amp;quot;: &amp;quot;eeeeeeeeee4&amp;quot;,&lt;br /&gt;
          &amp;quot;identifiersId&amp;quot;: &amp;quot;lllll777777&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
      ],&lt;br /&gt;
		&amp;quot;calculatedDatas&amp;quot;: {&lt;br /&gt;
			&amp;quot;exampleTimestamp&amp;quot;: {&lt;br /&gt;
				calcType: &amp;quot;currentTimestampAdjustment&amp;quot;, // can add other types of calculated data in future&lt;br /&gt;
				action: &amp;quot;add&amp;quot;, // add|subtract&lt;br /&gt;
				adjustment: &amp;quot;2 days&amp;quot;, // Human-Readable Relative Format&lt;br /&gt;
			},&lt;br /&gt;
			// ...&lt;br /&gt;
		},&lt;br /&gt;
	},&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;tableName&amp;quot;: &amp;quot;MLocationsTestFloatingRelationships&amp;quot;,// servcieTag+stage+tablename&lt;br /&gt;
      &amp;quot;partitionKey&amp;quot;: &amp;quot;importBatchId&amp;quot;,&lt;br /&gt;
      &amp;quot;sortKey&amp;quot;: &amp;quot;identifierRelationshipsId&amp;quot;,&lt;br /&gt;
      &amp;quot;datas&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;importBatchId&amp;quot;: &amp;quot;2-uuuuuuuuuuuuuu&amp;quot;,&lt;br /&gt;
          &amp;quot;identifierRelationshipsId&amp;quot;: &amp;quot;lllll123456&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;importBatchId&amp;quot;: &amp;quot;2-uuuuuuuuuuuuuu&amp;quot;,&lt;br /&gt;
          &amp;quot;identifierRelationshipsId&amp;quot;: &amp;quot;lllll777777&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;importBatchId&amp;quot;: &amp;quot;2-uuuuuuuuuuuuuu&amp;quot;,&lt;br /&gt;
          &amp;quot;identifierRelationshipsId&amp;quot;: &amp;quot;lllll99999999&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
      ]&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;tableName&amp;quot;: &amp;quot;MLocationsTestFindDataMain&amp;quot;,&lt;br /&gt;
      &amp;quot;partitionKey&amp;quot;: &amp;quot;findDataId&amp;quot;,&lt;br /&gt;
      &amp;quot;datas&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;findDataId&amp;quot;: &amp;quot;111111&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;findDataId&amp;quot;: &amp;quot;22222&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;findDataId&amp;quot;: &amp;quot;333333&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
      ]&lt;br /&gt;
    }&lt;br /&gt;
  ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== graphSeedDataTags ====&lt;br /&gt;
:If set tag in this setting integrationtest is generate seed data. in storage resource graphHanler.&lt;br /&gt;
Example&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;seedData_testTag_GG&amp;quot;: [ // seedDataTag&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;nodes&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;nodeLabels&amp;quot;: [&lt;br /&gt;
            &amp;quot;SellOfferPlan_sellOfferPlanDeliveryMethodLink&amp;quot;&lt;br /&gt;
          ],&lt;br /&gt;
          &amp;quot;objectDetail&amp;quot;: {&lt;br /&gt;
            &amp;quot;identifiers&amp;quot;: {&lt;br /&gt;
              &amp;quot;sellOfferPlanDeliveryMethodLinkId&amp;quot;: &amp;quot;minttestrefreshSeedData_01&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;fields&amp;quot;: {&lt;br /&gt;
              &amp;quot;productId&amp;quot;: &amp;quot;ddddd&amp;quot;,&lt;br /&gt;
              &amp;quot;price&amp;quot;: 9999&lt;br /&gt;
            }&lt;br /&gt;
          }&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;nodeLabels&amp;quot;: [&lt;br /&gt;
            &amp;quot;servcieMintTest_shoppingMall&amp;quot;&lt;br /&gt;
          ],&lt;br /&gt;
          &amp;quot;objectDetail&amp;quot;: {&lt;br /&gt;
            &amp;quot;identifiers&amp;quot;: {&lt;br /&gt;
              &amp;quot;shoppingMallId&amp;quot;: &amp;quot;minttestrefreshSeedData_shoppingMallId&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;fields&amp;quot;: {&lt;br /&gt;
              &amp;quot;name&amp;quot;: &amp;quot;hotpot-man&amp;quot;,&lt;br /&gt;
              &amp;quot;totalPrice&amp;quot;: 500&lt;br /&gt;
            }&lt;br /&gt;
          }&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;nodeLabels&amp;quot;: [&lt;br /&gt;
            &amp;quot;servcieMintTest_shoppingMallCalculateSetting&amp;quot;&lt;br /&gt;
          ],&lt;br /&gt;
          &amp;quot;objectDetail&amp;quot;: {&lt;br /&gt;
            &amp;quot;identifiers&amp;quot;: {&lt;br /&gt;
              &amp;quot;versionedDataId&amp;quot;: &amp;quot;minttestrefreshSeedData_versionedDataId&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;fields&amp;quot;: {&lt;br /&gt;
              &amp;quot;addToCalculatedValuePerOrder&amp;quot;: 10,&lt;br /&gt;
              &amp;quot;addToRateTableValuePerOrder&amp;quot;: 77&lt;br /&gt;
            }&lt;br /&gt;
          }&lt;br /&gt;
        }&lt;br /&gt;
      ],&lt;br /&gt;
      &amp;quot;relationships&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;fromObject&amp;quot;: {&lt;br /&gt;
            &amp;quot;nodeLabel&amp;quot;: &amp;quot;SellOfferPlan_sellOfferPlanDeliveryMethodLink&amp;quot;,&lt;br /&gt;
            &amp;quot;identifiers&amp;quot;: {&lt;br /&gt;
              &amp;quot;sellOfferPlanDeliveryMethodLinkId&amp;quot;: &amp;quot;minttestrefreshSeedData_01&amp;quot;&lt;br /&gt;
            }&lt;br /&gt;
          },&lt;br /&gt;
          &amp;quot;toObject&amp;quot;: {&lt;br /&gt;
            &amp;quot;nodeLabel&amp;quot;: &amp;quot;servcieMintTest_shoppingMall&amp;quot;,&lt;br /&gt;
            &amp;quot;identifiers&amp;quot;: {&lt;br /&gt;
              &amp;quot;shoppingMallId&amp;quot;: &amp;quot;minttestrefreshSeedData_shoppingMallId&amp;quot;&lt;br /&gt;
            }&lt;br /&gt;
          },&lt;br /&gt;
          &amp;quot;relationships&amp;quot;: [&lt;br /&gt;
            {&lt;br /&gt;
              &amp;quot;relTypeConcat&amp;quot;: &amp;quot;SellOfferPlan_hasCCCCCCC&amp;quot;,&lt;br /&gt;
              &amp;quot;relId&amp;quot;: &amp;quot;uuid-4s56df74s9df79w-w6de4f5w689ef&amp;quot;&lt;br /&gt;
            }&lt;br /&gt;
          ]&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;fromObject&amp;quot;: {&lt;br /&gt;
            &amp;quot;nodeLabel&amp;quot;: &amp;quot;servcieMintTest_shoppingMall&amp;quot;,&lt;br /&gt;
            &amp;quot;identifiers&amp;quot;: {&lt;br /&gt;
              &amp;quot;shoppingMallId&amp;quot;: &amp;quot;minttestrefreshSeedData_shoppingMallId&amp;quot;&lt;br /&gt;
            }&lt;br /&gt;
          },&lt;br /&gt;
          &amp;quot;toObject&amp;quot;: {&lt;br /&gt;
            &amp;quot;nodeLabel&amp;quot;: &amp;quot;servcieMintTest_shoppingMallCalculateSetting&amp;quot;,&lt;br /&gt;
            &amp;quot;identifiers&amp;quot;: {&lt;br /&gt;
              &amp;quot;versionedDataId&amp;quot;: &amp;quot;minttestrefreshSeedData_versionedDataId&amp;quot;&lt;br /&gt;
            }&lt;br /&gt;
          },&lt;br /&gt;
          &amp;quot;relationships&amp;quot;: [&lt;br /&gt;
            {&lt;br /&gt;
              &amp;quot;relTypeConcat&amp;quot;: &amp;quot;servcieMintTest_shoppingMall_currentShoppingMallCalculateSetting&amp;quot;,&lt;br /&gt;
              &amp;quot;relId&amp;quot;: &amp;quot;uuid-s122df5-s21df&amp;quot;,&lt;br /&gt;
              &amp;quot;relationshipProperty&amp;quot;: {&lt;br /&gt;
                &amp;quot;timeStamp&amp;quot;: 1234567879,&lt;br /&gt;
                &amp;quot;statusName&amp;quot;: true&lt;br /&gt;
              }&lt;br /&gt;
            },&lt;br /&gt;
            {&lt;br /&gt;
              &amp;quot;relTypeConcat&amp;quot;: &amp;quot;servcieMintTest_shoppingMall_hasShoppingMallCalculateSetting&amp;quot;,&lt;br /&gt;
              &amp;quot;relId&amp;quot;: &amp;quot;uuid-77777-99999&amp;quot;,&lt;br /&gt;
              &amp;quot;relationshipProperty&amp;quot;: {&lt;br /&gt;
                &amp;quot;statusName&amp;quot;: true&lt;br /&gt;
              }&lt;br /&gt;
            }&lt;br /&gt;
          ]&lt;br /&gt;
        }&lt;br /&gt;
      ]&lt;br /&gt;
    }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;seedData_testTag_ABC&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;objType&amp;quot;: {&lt;br /&gt;
        &amp;quot;objectType&amp;quot;: &amp;quot;productAttributeLink&amp;quot;,&lt;br /&gt;
        &amp;quot;serviceTag&amp;quot;: &amp;quot;ProductAttribute&amp;quot;&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;objInstanceFull&amp;quot;: {&lt;br /&gt;
        &amp;quot;identifiers&amp;quot;: {&lt;br /&gt;
          &amp;quot;productAttributeLinkId&amp;quot;: &amp;quot;f90b57ca8b2fe1a83459d57da038cf50fb6d40e6&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;fields&amp;quot;: {}&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;relationships&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;relType&amp;quot;: {&lt;br /&gt;
            &amp;quot;serviceTag&amp;quot;: &amp;quot;ProductAttribute&amp;quot;,&lt;br /&gt;
            &amp;quot;relationshipTag&amp;quot;: &amp;quot;hasProductAttributeLink&amp;quot;&lt;br /&gt;
          },&lt;br /&gt;
          &amp;quot;relationshipDirection&amp;quot;: &amp;quot;to&amp;quot;,&lt;br /&gt;
          &amp;quot;targetObjType&amp;quot;: {&lt;br /&gt;
            &amp;quot;serviceTag&amp;quot;: &amp;quot;ProductStandard&amp;quot;,&lt;br /&gt;
            &amp;quot;objectType&amp;quot;: &amp;quot;productStandard&amp;quot;&lt;br /&gt;
          },&lt;br /&gt;
          &amp;quot;targetIdentifiers&amp;quot;: {&lt;br /&gt;
            &amp;quot;productId&amp;quot;: &amp;quot;f526a367a2b66cb0f37ca61b6c43f419929f521d&amp;quot;&lt;br /&gt;
          },&lt;br /&gt;
          &amp;quot;relationshipProperties&amp;quot;: {}&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;relType&amp;quot;: {&lt;br /&gt;
            &amp;quot;serviceTag&amp;quot;: &amp;quot;ProductAttribute&amp;quot;,&lt;br /&gt;
            &amp;quot;relationshipTag&amp;quot;: &amp;quot;isProductAttribute&amp;quot;&lt;br /&gt;
          },&lt;br /&gt;
          &amp;quot;relationshipDirection&amp;quot;: &amp;quot;from&amp;quot;,&lt;br /&gt;
          &amp;quot;targetObjType&amp;quot;: {&lt;br /&gt;
            &amp;quot;serviceTag&amp;quot;: &amp;quot;ProductAttribute&amp;quot;,&lt;br /&gt;
            &amp;quot;objectType&amp;quot;: &amp;quot;productAttribute&amp;quot;&lt;br /&gt;
          },&lt;br /&gt;
          &amp;quot;targetIdentifiers&amp;quot;: {&lt;br /&gt;
            &amp;quot;productAttributeId&amp;quot;: &amp;quot;f4bf7a078071d54036656df544197ba638bc3a68&amp;quot;&lt;br /&gt;
          },&lt;br /&gt;
          &amp;quot;relationshipProperties&amp;quot;: {}&lt;br /&gt;
        }&lt;br /&gt;
      ]&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;objType&amp;quot;: {&lt;br /&gt;
        &amp;quot;objectType&amp;quot;: &amp;quot;productAttributeLink&amp;quot;,&lt;br /&gt;
        &amp;quot;serviceTag&amp;quot;: &amp;quot;ProductAttribute&amp;quot;&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;objInstanceFull&amp;quot;: {&lt;br /&gt;
        &amp;quot;identifiers&amp;quot;: {&lt;br /&gt;
          &amp;quot;productAttributeLinkId&amp;quot;: &amp;quot;f90b57ca8b2fe1a83459d57da038cf50fb6d40e6&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;fields&amp;quot;: {}&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;relationships&amp;quot;: []&lt;br /&gt;
    }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;seedData_testTag_LL&amp;quot;: []&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Cleaning Seed Data ===&lt;br /&gt;
:Delete seed data for set environment of &#039;&#039;&#039;test&#039;&#039;&#039;.&lt;br /&gt;
*cleaningeDynamoOneRecordsTags.json&lt;br /&gt;
*cleaningeDynamoManyRecordsTags.json&lt;br /&gt;
&lt;br /&gt;
====cleaningeDynamoOneRecordsTags====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;cleaningSeed_TestFindData_and_Education_case_invalid01&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;tableName&amp;quot;: &amp;quot;MLocationsTestFindDataMain&amp;quot;,&lt;br /&gt;
      &amp;quot;primaryKeys&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;findDataId&amp;quot;: &amp;quot;cleaning-1&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;findDataId&amp;quot;: &amp;quot;cleaning-2&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
      ]&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;tableName&amp;quot;: &amp;quot;MLocationsTestEducation&amp;quot;,&lt;br /&gt;
      &amp;quot;primaryKeys&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;studentId&amp;quot;: &amp;quot;cleaning-AA&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;studentId&amp;quot;: &amp;quot;cleaning-BB&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;studentId&amp;quot;: &amp;quot;cleaning-CC&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
      ]&lt;br /&gt;
    }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;cleaningSeed_TestMemberPersonnel_case_invalid01&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;tableName&amp;quot;: &amp;quot;MLocationsTestMemberPersonnel&amp;quot;,&lt;br /&gt;
      &amp;quot;primaryKeys&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;userId&amp;quot;: &amp;quot;namtan&amp;quot;,&lt;br /&gt;
          &amp;quot;passwordId&amp;quot;: &amp;quot;qqqww&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;userId&amp;quot;: &amp;quot;jack&amp;quot;,&lt;br /&gt;
          &amp;quot;passwordId&amp;quot;: &amp;quot;q1&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;userId&amp;quot;: &amp;quot;Momay&amp;quot;,&lt;br /&gt;
          &amp;quot;passwordId&amp;quot;: &amp;quot;ttr&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
      ]&lt;br /&gt;
    }&lt;br /&gt;
  ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== cleaningeDynamoManyRecordsTags ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;cleaningSeed_manyData_partitionKey_only_miss_sort&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;tableName&amp;quot;: &amp;quot;MLocationsTestMemberPersonnel&amp;quot;,&lt;br /&gt;
      &amp;quot;primaryKeys&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;userId&amp;quot;: &amp;quot;many-data&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
      ]&lt;br /&gt;
    }&lt;br /&gt;
  ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*logic query table MLocationsTestMemberPersonnel use primary Keys &amp;quot;userId&amp;quot; and then delete all data from primary Keys.&lt;br /&gt;
&lt;br /&gt;
=resources=&lt;br /&gt;
syntax is object&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{ &lt;br /&gt;
	&amp;quot;Lambda&amp;quot;:{&lt;br /&gt;
		&amp;quot;{FunctionNameHdrSqs}&amp;quot;:{ // FunctionNameHdrSqs is match resourceName in file tests&lt;br /&gt;
			&amp;quot;localLacation&amp;quot;:&amp;quot;/src/FunctionNameHdrSqs.js&amp;quot;,&lt;br /&gt;
			&amp;quot;localHandler&amp;quot;:&amp;quot;main&amp;quot;, &lt;br /&gt;
			&amp;quot;functionName&amp;quot;:&amp;quot;FunctionNameHdrSqs&amp;quot;	// FunctionName is function name match key of function.yml of servcie.&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;ProcessComplexFilterHdrSqs&amp;quot;:{ &lt;br /&gt;
			&amp;quot;localLacation&amp;quot;:&amp;quot;/src/ProcessComplexFilterHdrSqs.js&amp;quot;, &lt;br /&gt;
			&amp;quot;localHandler&amp;quot;:&amp;quot;main&amp;quot;, &lt;br /&gt;
			&amp;quot;functionName&amp;quot;:&amp;quot;ProcessComplexFilterHdrSqs&amp;quot; &lt;br /&gt;
		},&lt;br /&gt;
		... &lt;br /&gt;
	},&lt;br /&gt;
	&amp;quot;Dynamodb&amp;quot;: {&lt;br /&gt;
		&amp;quot;filterMain&amp;quot;:{ // match resourceName in file tests(dynamodbOutputEventIdentifiers)&lt;br /&gt;
			&amp;quot;tableName&amp;quot;:&amp;quot;filterMain&amp;quot; &lt;br /&gt;
		}, &lt;br /&gt;
		&amp;quot;tableNameBB&amp;quot;:{ &lt;br /&gt;
			&amp;quot;tableName&amp;quot;:&amp;quot;tableNameBB&amp;quot; &lt;br /&gt;
		},&lt;br /&gt;
		... &lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=events=&lt;br /&gt;
Syntax is object&lt;br /&gt;
==Syntax Name==&lt;br /&gt;
===FileName===&lt;br /&gt;
::Event_{inputEventTag}&lt;br /&gt;
&lt;br /&gt;
===eventTag===&lt;br /&gt;
#inputEventTag&lt;br /&gt;
#outputEventTag&lt;br /&gt;
#dynamodbTag&lt;br /&gt;
&lt;br /&gt;
*file events.js is have eventTag  (inputEventTag,outputEventTag,dynamodbTag)&lt;br /&gt;
**How to create name eventTag&lt;br /&gt;
***Example case : &amp;quot;test in service complexFilter functionname ProcessComplexFilter case element type is logical basic&amp;quot;.&lt;br /&gt;
::*&#039;&#039;&#039;inputEventTag&#039;&#039;&#039;&lt;br /&gt;
::::{serviceName}_{functionName}_{caseTest}&lt;br /&gt;
&#039;&#039;Conplexfilter_ProcessComplexFilter_Typelogical_basic&#039;&#039;&lt;br /&gt;
::*&#039;&#039;&#039;outputEventTag&#039;&#039;&#039;&lt;br /&gt;
::::output_{inputEventTag}&lt;br /&gt;
&#039;&#039;output_Conplexfilter_ProcessComplexFilter_Typelogical_basic&#039;&#039;&lt;br /&gt;
::*&#039;&#039;&#039;dynamodbTag&#039;&#039;&#039;&lt;br /&gt;
::::{inputEventTag}__Dynamodb__{&#039;&#039;&#039;action*&#039;&#039;&#039;}_{tableName} &lt;br /&gt;
&#039;&#039;Conplexfilter_ProcessComplexFilter_Typelogical_basic___Dynamodb__putItem_filterMain&#039;&#039;&lt;br /&gt;
: &amp;lt;u&amp;gt;&#039;&#039;&#039;{action}&#039;&#039;&#039; is only &#039;&#039;put&#039;&#039; or &#039;&#039;update&#039;&#039;, and in case of &#039;&#039;update&#039;&#039; must only test the last step of update &amp;lt;/u&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Syntax event===&lt;br /&gt;
====initiate by handlerServcie====&lt;br /&gt;
=====Sqs=====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
// An example input and output event of Sns&lt;br /&gt;
{&lt;br /&gt;
   &amp;quot;LambdaFunctionHdrSqs_input__pass&amp;quot;:{&lt;br /&gt;
      &amp;quot;properties&amp;quot;:{&lt;br /&gt;
         &amp;quot;propertyA&amp;quot;:{&lt;br /&gt;
            &amp;quot;value&amp;quot;:&amp;quot;valueProperty1&amp;quot;&lt;br /&gt;
         },&lt;br /&gt;
         &amp;quot;propertyB&amp;quot;:{&lt;br /&gt;
            &amp;quot;properties&amp;quot;:{&lt;br /&gt;
               &amp;quot;propertyB1&amp;quot;:{&lt;br /&gt;
                  &amp;quot;value&amp;quot;:&amp;quot;valuePropertyB1&amp;quot;&lt;br /&gt;
               }&lt;br /&gt;
            }&lt;br /&gt;
         },&lt;br /&gt;
         &amp;quot;propertyC&amp;quot;:{&lt;br /&gt;
            &amp;quot;eventValue&amp;quot;:[&lt;br /&gt;
               &amp;quot;valuePropertyC1&amp;quot;,&lt;br /&gt;
               &amp;quot;valuePropertyC2&amp;quot;,&lt;br /&gt;
               &amp;quot;valuePropertyC3&amp;quot;&lt;br /&gt;
            ]&lt;br /&gt;
         }&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;snsSqsTrigger&amp;quot;:true,&lt;br /&gt;
      &amp;quot;messageAttributes&amp;quot;:{&lt;br /&gt;
            &amp;quot;msgTag&amp;quot;:{&lt;br /&gt;
               &amp;quot;value&amp;quot;:&amp;quot;msgTag&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;propertyD&amp;quot;:{&lt;br /&gt;
               &amp;quot;value&amp;quot;:&amp;quot;valuePropertyD&amp;quot;&lt;br /&gt;
            }&lt;br /&gt;
      }&lt;br /&gt;
   },&lt;br /&gt;
   {&lt;br /&gt;
      &amp;quot;output_LambdaFunctionHdrSqs_pass&amp;quot;:{&lt;br /&gt;
         &amp;quot;properties&amp;quot;:{&lt;br /&gt;
            &amp;quot;propertyA&amp;quot;:{&lt;br /&gt;
               &amp;quot;value&amp;quot;:&amp;quot;valueProperty1&amp;quot;&lt;br /&gt;
            }&lt;br /&gt;
         }&lt;br /&gt;
      }&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot; linein&amp;gt;&lt;br /&gt;
&amp;quot;snsSqsTrigger&amp;quot;:true&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Dsq=====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
// An example input and output event of Direct Sqs&lt;br /&gt;
{&lt;br /&gt;
   &amp;quot;LambdaFunctionHdrDsq_input__pass&amp;quot;:{&lt;br /&gt;
      &amp;quot;forStageMatching&amp;quot;:true,&lt;br /&gt;
      &amp;quot;properties&amp;quot;:{&lt;br /&gt;
         &amp;quot;propertyA&amp;quot;:{&lt;br /&gt;
            &amp;quot;forStageMatching&amp;quot;:true,&lt;br /&gt;
            &amp;quot;value&amp;quot;:&amp;quot;valueProperty1&amp;quot;&lt;br /&gt;
         },&lt;br /&gt;
         &amp;quot;propertyB&amp;quot;:{&lt;br /&gt;
            &amp;quot;forStageMatching&amp;quot;:true,&lt;br /&gt;
            &amp;quot;properties&amp;quot;:{&lt;br /&gt;
               &amp;quot;propertyB1&amp;quot;:{&lt;br /&gt;
                  &amp;quot;forStageMatching&amp;quot;:true,&lt;br /&gt;
                  &amp;quot;value&amp;quot;:&amp;quot;valuePropertyB1&amp;quot;&lt;br /&gt;
               }&lt;br /&gt;
            }&lt;br /&gt;
         },&lt;br /&gt;
         &amp;quot;propertyC&amp;quot;:{&lt;br /&gt;
            &amp;quot;eventValue&amp;quot;:[&lt;br /&gt;
               &amp;quot;valuePropertyC1&amp;quot;,&lt;br /&gt;
               &amp;quot;valuePropertyC2&amp;quot;,&lt;br /&gt;
               &amp;quot;valuePropertyC3&amp;quot;&lt;br /&gt;
            ]&lt;br /&gt;
         }&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;DirectSqs&amp;quot;:true,&lt;br /&gt;
      &amp;quot;messageAttributes&amp;quot;:{&lt;br /&gt;
         &amp;quot;msgTag&amp;quot;:{&lt;br /&gt;
           &amp;quot;forStageMatching&amp;quot;:true,&lt;br /&gt;
           &amp;quot;value&amp;quot;:&amp;quot;msgTag&amp;quot;&lt;br /&gt;
          },&lt;br /&gt;
          &amp;quot;propertyD&amp;quot;:{&lt;br /&gt;
           &amp;quot;forStageMatching&amp;quot;:true,&lt;br /&gt;
           &amp;quot;value&amp;quot;:&amp;quot;valuePropertyD&amp;quot;&lt;br /&gt;
          }&lt;br /&gt;
      }&lt;br /&gt;
   },&lt;br /&gt;
   {&lt;br /&gt;
      &amp;quot;output_LambdaFunctionHdrDsq_pass&amp;quot;:{&lt;br /&gt;
         &amp;quot;forStageMatching&amp;quot;:true,&lt;br /&gt;
         &amp;quot;properties&amp;quot;:{&lt;br /&gt;
            &amp;quot;propertyA&amp;quot;:{&lt;br /&gt;
               &amp;quot;forStageMatching&amp;quot;:true,&lt;br /&gt;
               &amp;quot;value&amp;quot;:&amp;quot;valueProperty1&amp;quot;&lt;br /&gt;
            }&lt;br /&gt;
         }&lt;br /&gt;
      }&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* DirectSqs = true &lt;br /&gt;
:: for initialStage of Dsq&lt;br /&gt;
* messageAttributes is optional&lt;br /&gt;
&lt;br /&gt;
=====Inv=====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;LambdaFunctionHdrInv_input__pass&amp;quot;:{&lt;br /&gt;
     &amp;quot;forStageMatching&amp;quot;:true,&lt;br /&gt;
     &amp;quot;properties&amp;quot;:{&lt;br /&gt;
        &amp;quot;propertyA&amp;quot;:{&lt;br /&gt;
           &amp;quot;forStageMatching&amp;quot;:true,&lt;br /&gt;
           &amp;quot;value&amp;quot;:&amp;quot;valueProperty1&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;propertyB&amp;quot;:{&lt;br /&gt;
           &amp;quot;forStageMatching&amp;quot;:true,&lt;br /&gt;
           &amp;quot;properties&amp;quot;:{&lt;br /&gt;
              &amp;quot;propertyB1&amp;quot;:{&lt;br /&gt;
                 &amp;quot;forStageMatching&amp;quot;:true,&lt;br /&gt;
                 &amp;quot;value&amp;quot;:&amp;quot;valuePropertyB1&amp;quot;&lt;br /&gt;
              }&lt;br /&gt;
           }&lt;br /&gt;
        }&lt;br /&gt;
     }&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
        &amp;quot;output_LambdaFunctionHdrInv_pass&amp;quot;:{&lt;br /&gt;
           &amp;quot;forStageMatching&amp;quot;:true,&lt;br /&gt;
           &amp;quot;properties&amp;quot;:{&lt;br /&gt;
              &amp;quot;propertyA&amp;quot;:{&lt;br /&gt;
                 &amp;quot;forStageMatching&amp;quot;:true,&lt;br /&gt;
                 &amp;quot;value&amp;quot;:&amp;quot;valueProperty1&amp;quot;&lt;br /&gt;
              }&lt;br /&gt;
           }&lt;br /&gt;
        }&lt;br /&gt;
     }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Api=====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
// An example input and output event of API&lt;br /&gt;
{&lt;br /&gt;
	&amp;quot;LambdaFunctionHdrApi_input__pass_notTestAuthorizer&amp;quot;: { &lt;br /&gt;
		&amp;quot;forstageMatvhing&amp;quot;: true, &lt;br /&gt;
		&amp;quot;properties&amp;quot;: { &lt;br /&gt;
			&amp;quot;body&amp;quot;: { &lt;br /&gt;
				&amp;quot;properties&amp;quot;: { &lt;br /&gt;
					&amp;quot;propertyA&amp;quot;: { &lt;br /&gt;
						&amp;quot;testValueMatches&amp;quot;: false, &lt;br /&gt;
						&amp;quot;value&amp;quot;: &amp;quot;valueProperty1&amp;quot;, &lt;br /&gt;
					}, &lt;br /&gt;
					&amp;quot;propertyB&amp;quot;: { &lt;br /&gt;
						&amp;quot;properties&amp;quot;: { &lt;br /&gt;
							&amp;quot;propertyB1&amp;quot;: { &lt;br /&gt;
								&amp;quot;value&amp;quot;: &amp;quot;valuePropertyB1&amp;quot;, &lt;br /&gt;
							} &lt;br /&gt;
						} &lt;br /&gt;
					}, &lt;br /&gt;
					&amp;quot;propertyC&amp;quot;: { &lt;br /&gt;
						&amp;quot;eventValue&amp;quot;: [ &lt;br /&gt;
							&amp;quot;valuePropertyC1&amp;quot;, &lt;br /&gt;
							&amp;quot;valuePropertyC2&amp;quot;, &lt;br /&gt;
							&amp;quot;valuePropertyC3&amp;quot;, &lt;br /&gt;
						] &lt;br /&gt;
					},&lt;br /&gt;
					... &lt;br /&gt;
				} &lt;br /&gt;
			} &lt;br /&gt;
		}&lt;br /&gt;
	}, &lt;br /&gt;
	&amp;quot;Output_LambdaFunctionHdrApi_input__pass_notTestAuthorizer&amp;quot;: { &lt;br /&gt;
		&amp;quot;properties&amp;quot;: { &lt;br /&gt;
			&amp;quot;body&amp;quot;: { &lt;br /&gt;
				&amp;quot;properties&amp;quot;: { &lt;br /&gt;
					&amp;quot;propertyA&amp;quot;: { &lt;br /&gt;
						&amp;quot;testValueMatches&amp;quot;: false, &lt;br /&gt;
						&amp;quot;value&amp;quot;: &amp;quot;valueProperty1&amp;quot;&lt;br /&gt;
					}, &lt;br /&gt;
					...&lt;br /&gt;
				} &lt;br /&gt;
			} &lt;br /&gt;
		}  &lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====S3=====&lt;br /&gt;
&lt;br /&gt;
====dynamodb====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
// An example event of Dynamodb //optional &lt;br /&gt;
{&lt;br /&gt;
	{inputEventTag}__dynamodb_{action}_{tablename}: { // eg. &amp;quot;Complexfilter_ProcessComplexfilter_logical_basic__dynamodb_update_FilterMain&amp;quot;&lt;br /&gt;
	&amp;quot;forStageMatching&amp;quot;: true,&lt;br /&gt;
     &amp;quot;properties&amp;quot;: {&lt;br /&gt;
        &amp;quot;filterMainUniqueRequestId&amp;quot;: {&lt;br /&gt;
          &amp;quot;testValueMatches&amp;quot;: fase,&lt;br /&gt;
          &amp;quot;value&amp;quot;: &amp;quot;bbc4f4a9-2032-4dec-9129-8c7d169fecc5&amp;quot;&lt;br /&gt;
         },&lt;br /&gt;
        &amp;quot;filterObject&amp;quot;: {&lt;br /&gt;
        &amp;quot;forStageMatching&amp;quot;: true,&lt;br /&gt;
        &amp;quot;properties&amp;quot;: {&lt;br /&gt;
          &amp;quot;logicalType&amp;quot;: {&lt;br /&gt;
            &amp;quot;value&amp;quot;: &amp;quot;partitionKey&amp;quot;&lt;br /&gt;
          },&lt;br /&gt;
          &amp;quot;comparison&amp;quot;: {&lt;br /&gt;
            &amp;quot;value&amp;quot;: &amp;quot;equals&amp;quot;&lt;br /&gt;
          },&lt;br /&gt;
          &amp;quot;type&amp;quot;: {&lt;br /&gt;
            &amp;quot;value&amp;quot;: &amp;quot;logical&amp;quot;&lt;br /&gt;
          },&lt;br /&gt;
          &amp;quot;partitionKey&amp;quot;: {&lt;br /&gt;
            &amp;quot;forStageMatching&amp;quot;: true,&lt;br /&gt;
            &amp;quot;value&amp;quot;: &amp;quot;mockIntegratioTestCPF&amp;quot;&lt;br /&gt;
          }&lt;br /&gt;
        }&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;filterMainExpiryTime&amp;quot;: {&lt;br /&gt;
        &amp;quot;testValueMatches&amp;quot;: fase,&lt;br /&gt;
        &amp;quot;value&amp;quot;: 1731980802858&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;filterMainStatus&amp;quot;: {&lt;br /&gt;
       &amp;quot;forStageMatching&amp;quot;: true,&lt;br /&gt;
        &amp;quot;value&amp;quot;: &amp;quot;processing&amp;quot;&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;createTime&amp;quot;: {&lt;br /&gt;
        &amp;quot;testValueMatches&amp;quot;: fase,&lt;br /&gt;
        &amp;quot;value&amp;quot;: 1731894402678&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;objType&amp;quot;: {&lt;br /&gt;
        &amp;quot;forStageMatching&amp;quot;: true,&lt;br /&gt;
        &amp;quot;properties&amp;quot;: {&lt;br /&gt;
          &amp;quot;serviceTag&amp;quot;: {&lt;br /&gt;
            &amp;quot;forStageMatching&amp;quot;: true,&lt;br /&gt;
            &amp;quot;value&amp;quot;: &amp;quot;IntTesting&amp;quot;&lt;br /&gt;
          },&lt;br /&gt;
          &amp;quot;objectType&amp;quot;: {&lt;br /&gt;
            &amp;quot;forStageMatching&amp;quot;: true,&lt;br /&gt;
            &amp;quot;value&amp;quot;: &amp;quot;TestRecord&amp;quot;&lt;br /&gt;
          }&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;keyValues&amp;quot;: {&lt;br /&gt;
      &amp;quot;filterMainId&amp;quot;: &amp;quot;4865d2451a621cb7f71225cfabf2df4f98e20801&amp;quot;,&lt;br /&gt;
      &amp;quot;objTypeId&amp;quot;: &amp;quot;cdb170690571df7522b3850920fce02507c077ee&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
	} &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* partition key: filterMainId&lt;br /&gt;
* sort key: objTypeId&lt;br /&gt;
&lt;br /&gt;
[[2021-01-15 - Integration Testing - Adding DynamoDB result tests]]&lt;br /&gt;
&lt;br /&gt;
===Type paramiter===&lt;br /&gt;
use for evnet and dyanmodb event&lt;br /&gt;
====Normal====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 object: {&lt;br /&gt;
  forStageMatching: true,&lt;br /&gt;
  properties: {&lt;br /&gt;
    name:{&lt;br /&gt;
     forStageMatching: true,&lt;br /&gt;
     value:&amp;quot;Tom&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
   }&lt;br /&gt;
 },&lt;br /&gt;
 array: {&lt;br /&gt;
  forStageMatching: true,&lt;br /&gt;
  useIsEqual: true,&lt;br /&gt;
  eventValue: [&lt;br /&gt;
   {&lt;br /&gt;
     &amp;quot;relTypeAndDirection&amp;quot;: {&lt;br /&gt;
       &amp;quot;relType&amp;quot;: {&lt;br /&gt;
         &amp;quot;serviceTag&amp;quot;: &amp;quot;maxxCart2&amp;quot;,&lt;br /&gt;
         &amp;quot;relationshipTag&amp;quot;: &amp;quot;hasCartOrder&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;relationshipDirection&amp;quot;: &amp;quot;from&amp;quot;&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;targetObjects&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;objType&amp;quot;: {&lt;br /&gt;
           &amp;quot;serviceTag&amp;quot;: &amp;quot;maxxCart2&amp;quot;,&lt;br /&gt;
           &amp;quot;objectType&amp;quot;: &amp;quot;cartOrder&amp;quot;&lt;br /&gt;
          }&lt;br /&gt;
        }&lt;br /&gt;
      ]&lt;br /&gt;
    }&lt;br /&gt;
  ]&lt;br /&gt;
 },&lt;br /&gt;
 number: {&lt;br /&gt;
  forStageMatching: true,&lt;br /&gt;
  value: 1111&lt;br /&gt;
 },&lt;br /&gt;
 string: {&lt;br /&gt;
  forStageMatching: true,&lt;br /&gt;
  value: &amp;quot;hi&amp;quot;&lt;br /&gt;
 },&lt;br /&gt;
 boolean: {&lt;br /&gt;
  forStageMatching: true,&lt;br /&gt;
  value: true&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
 forStageMatching: true&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
::set true for check match value,It is not necessary to set every value&lt;br /&gt;
:::use in test importent paramiter&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
testValueMatches:false&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
::setting paramiter require on create but can not test random value eg: identifier or timeStamp or uuid&lt;br /&gt;
&lt;br /&gt;
====Empty====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
 EmptyString:{&lt;br /&gt;
forStageMatching: true,&lt;br /&gt;
  value:&amp;quot;&amp;quot;&lt;br /&gt;
 },&lt;br /&gt;
 EmptyArray:{&lt;br /&gt;
   forStageMatching: true,&lt;br /&gt;
   useIsEqual: true,&lt;br /&gt;
   eventValue: []&lt;br /&gt;
 },&lt;br /&gt;
 EmptyObject:{&lt;br /&gt;
  forStageMatching: true,&lt;br /&gt;
  value:{}&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Error====&lt;br /&gt;
can test noRetryError&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;quot;errorMessage&amp;quot;: {&lt;br /&gt;
    forStageMatching: true,&lt;br /&gt;
    &amp;quot;value&amp;quot;: &amp;quot;Not found schema of {serviceTag:TestGraphHandler, objectType:notFoundObjType}&amp;quot;&lt;br /&gt;
   }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Paramiter random====&lt;br /&gt;
Can not test case random numbber or uuid.&lt;br /&gt;
But requriOnCreate mush be set &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
testValueMatches:false&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
or set&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
forStageMatching:false&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=tests=&lt;br /&gt;
Syntax is array of object&lt;br /&gt;
==Syntax name== &lt;br /&gt;
===Testtag name ===&lt;br /&gt;
*{integrationTestTag}&lt;br /&gt;
#Test Own servcie or not a lot stage&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
Test_{inputEventTag}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
#Mix multiple servcie and multiple stage&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt; &lt;br /&gt;
IntegrationTest_{inputEventTag}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===File name ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt; &lt;br /&gt;
{integrationTestTag}.json&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Setting of test==&lt;br /&gt;
[[Service - Integration Test Config#tests.js Syntax|syntax test]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
            integrationTestTag: {integrationTestTag},&lt;br /&gt;
            productionSafe: true|false, //default false&lt;br /&gt;
            noInitialStage: true, // default false, if set to true, no error when no foundInitialStages found&lt;br /&gt;
            errorIfStageUndefined: true|false, //default false&lt;br /&gt;
            errorIfInvokeUndefined: true|false, //default false,&lt;br /&gt;
            dynamoDBSeedDataTags:[&amp;quot;seedDataDB_test_case_xx&amp;quot;], //[seedDataTag] optional if have seed data for test&lt;br /&gt;
            graphSeedDataTags:[&amp;quot;seedDataGraph_test_case_xx&amp;quot;], //[seedDataTag] optional if have seed data for test&lt;br /&gt;
            cleaningeDynamoOneRecordsTags: [&amp;quot;cleaningSeed_partitionKey_sortKey_normol&amp;quot;], //optional&lt;br /&gt;
            cleaningeDynamoManyRecordsTags: [], // optional&lt;br /&gt;
            stages:[&lt;br /&gt;
               ...&lt;br /&gt;
            ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
*[[2025-11-20 IntegrationTest#dynamoDBSeedDataTags|dynamoDBSeedDataTags]]&lt;br /&gt;
*[[2025-11-20 IntegrationTest#graphSeedDataTags|graphSeedDataTags]]&lt;br /&gt;
*[[2025-11-20 IntegrationTest#cleaningeDynamoOneRecordsTags|cleaningeDynamoOneRecordsTags]]&lt;br /&gt;
*[[2025-11-20 IntegrationTest#cleaningeDynamoManyRecordsTags|cleaningeDynamoManyRecordsTags]]&lt;br /&gt;
&lt;br /&gt;
==Stages==&lt;br /&gt;
====Initiate stage====&lt;br /&gt;
:&#039;&#039;&#039;&amp;quot;initialStage&amp;quot;:true&#039;&#039;&#039;&lt;br /&gt;
[[Service_-_Integration_Test_Config#tests.js Syntax|detail property of test]]&lt;br /&gt;
=====HandlerService=====&lt;br /&gt;
======Sqs======&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;quot;stages&amp;quot;:[&lt;br /&gt;
         {&lt;br /&gt;
            &amp;quot;initialStage&amp;quot;:true,&lt;br /&gt;
            &amp;quot;inputEventTag&amp;quot;:&amp;quot;Locations_ProcessLocationNodeSomting_casenotHaveData&amp;quot;,&lt;br /&gt;
            &amp;quot;serviceName&amp;quot;:&amp;quot;Locations&amp;quot;,&lt;br /&gt;
            &amp;quot;resourceType&amp;quot;:&amp;quot;Lambda&amp;quot;,&lt;br /&gt;
            &amp;quot;resourceName&amp;quot;:&amp;quot;ProcessLocationNodeSomtingHdrDsq&amp;quot;,&lt;br /&gt;
            &amp;quot;outputEventTag&amp;quot;:&amp;quot;Output_Locations_ProcessLocationNodeSomting_casenotHaveData&amp;quot;&lt;br /&gt;
         }&lt;br /&gt;
      ]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
======Dsq======&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
stages: [&lt;br /&gt;
        {&lt;br /&gt;
          initialStage: true,&lt;br /&gt;
          inputEventTag: &#039;LambdaFunctionHdrDsq_input_singleStage_directSqs__pass&#039;,&lt;br /&gt;
          serviceName: &#039;ServiceTemplate&#039;,&lt;br /&gt;
          resourceType: &#039;Lambda&#039;,&lt;br /&gt;
          resourceName: &#039;LambdaFunctionHdrDsq&#039;,&lt;br /&gt;
          outputEventTag: &#039;LambdaFunctionHdrDsq_output__returnvalue_pass&#039;,&lt;br /&gt;
          // **** not set snsServiceName and snsTopic&lt;br /&gt;
          // can be test dynamodbOutput&lt;br /&gt;
        }&lt;br /&gt;
      ]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
======Api======&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;quot;stages&amp;quot;:[&lt;br /&gt;
    {&lt;br /&gt;
       &amp;quot;initialStage&amp;quot;:true,&lt;br /&gt;
       &amp;quot;inputEventTag&amp;quot;:&amp;quot;LambdaFunctionHdrApi_input__pass&amp;quot;,&lt;br /&gt;
       &amp;quot;serviceName&amp;quot;:&amp;quot;ServiceTemplate&amp;quot;,&lt;br /&gt;
       &amp;quot;resourceType&amp;quot;:&amp;quot;Lambda&amp;quot;,&lt;br /&gt;
       &amp;quot;resourceName&amp;quot;:&amp;quot;LambdaFunctionHdrApi&amp;quot;,&lt;br /&gt;
       &amp;quot;outputEventTag&amp;quot;:&amp;quot;LambdaFunctionHdrApi_output__pass&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
======Inv======&lt;br /&gt;
*&#039;&#039;&#039;single stage&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
[{&lt;br /&gt;
   &amp;quot;integrationTestTag&amp;quot;:&amp;quot;LambdaFunctionHdrInv__pass&amp;quot;,&lt;br /&gt;
   &amp;quot;productionSafe&amp;quot;:false,&lt;br /&gt;
   &amp;quot;errorIfStageUndefined&amp;quot;:false,&lt;br /&gt;
   &amp;quot;errorIfInvokeUndefined&amp;quot;:false,&lt;br /&gt;
   &amp;quot;dynamoDBSeedDataTags&amp;quot;:[&amp;quot;seedDataDB_test_case_xx&amp;quot;], //[seedDataTag] optional if have seed data for test&lt;br /&gt;
   &amp;quot;graphSeedDataTags&amp;quot;:[&amp;quot;seedDataGraph_test_case_xx&amp;quot;], //[seedDataTag] optional if have seed data for test&lt;br /&gt;
   &amp;quot;cleaningeDynamoOneRecordsTags&amp;quot;: [&amp;quot;cleaningSeed_partitionKey_sortKey_normol&amp;quot;], //optional&lt;br /&gt;
   &amp;quot;cleaningeDynamoManyRecordsTags&amp;quot;: []&lt;br /&gt;
   &amp;quot;stages&amp;quot;:[&lt;br /&gt;
      {&lt;br /&gt;
         &amp;quot;initialStage&amp;quot;:true,&lt;br /&gt;
         &amp;quot;inputEventTag&amp;quot;:&amp;quot;LambdaFunctionHdrInv_input__pass&amp;quot;,&lt;br /&gt;
         &amp;quot;serviceName&amp;quot;:&amp;quot;ServiceTemplate&amp;quot;,&lt;br /&gt;
         &amp;quot;resourceType&amp;quot;:&amp;quot;Lambda&amp;quot;,&lt;br /&gt;
         &amp;quot;resourceName&amp;quot;:&amp;quot;LambdaFunctionHdrInv&amp;quot;,&lt;br /&gt;
         &amp;quot;outputEventTag&amp;quot;:&amp;quot;LambdaFunctionHdrInv_output__pass&amp;quot;&lt;br /&gt;
      }&lt;br /&gt;
   ]&lt;br /&gt;
}]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;invoke multiple stage&#039;&#039;&#039; &lt;br /&gt;
:*Each stage test can invoke multiple lambda by use &amp;quot;eventStage Tag&amp;quot; point to stage for test integration test.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
[{&lt;br /&gt;
   &amp;quot;integrationTestTag&amp;quot;:&amp;quot;LambdaFunctionHdrInv_invokes__pass&amp;quot;,&lt;br /&gt;
   &amp;quot;productionSafe&amp;quot;:false,&lt;br /&gt;
   &amp;quot;errorIfStageUndefined&amp;quot;:false,&lt;br /&gt;
   &amp;quot;errorIfInvokeUndefined&amp;quot;:false,&lt;br /&gt;
   &amp;quot;dynamoDBSeedDataTags&amp;quot;:[], //[seedDataTag] optional if have seed data for test&lt;br /&gt;
   &amp;quot;graphSeedDataTags&amp;quot;:[], //[seedDataTag] optional if have seed data for test&lt;br /&gt;
   &amp;quot;cleaningeDynamoOneRecordsTags&amp;quot;: [], //optional&lt;br /&gt;
   &amp;quot;cleaningeDynamoManyRecordsTags&amp;quot;: [], // optional&lt;br /&gt;
   &amp;quot;stages&amp;quot;:[&lt;br /&gt;
      {&lt;br /&gt;
         &amp;quot;initialStage&amp;quot;:true,&lt;br /&gt;
         &amp;quot;inputEventTag&amp;quot;:&amp;quot;LambdaFunctionHdrInv_input__pass&amp;quot;,&lt;br /&gt;
         &amp;quot;serviceName&amp;quot;:&amp;quot;ServiceTemplate&amp;quot;,&lt;br /&gt;
         &amp;quot;resourceType&amp;quot;:&amp;quot;Lambda&amp;quot;,&lt;br /&gt;
         &amp;quot;resourceName&amp;quot;:&amp;quot;LambdaFunctionHdrInv&amp;quot;,&lt;br /&gt;
         &amp;quot;outputEventTag&amp;quot;:&amp;quot;LambdaFunctionHdrInv_output__pass&amp;quot;,&lt;br /&gt;
         &amp;quot;invokes&amp;quot;:[&lt;br /&gt;
            {&lt;br /&gt;
               &amp;quot;eventStageTag&amp;quot;:&amp;quot;service_invokesB__pass&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            {&lt;br /&gt;
               &amp;quot;eventStageTag&amp;quot;:&amp;quot;service_invokesD__pass&amp;quot;&lt;br /&gt;
            }&lt;br /&gt;
         ]&lt;br /&gt;
      },&lt;br /&gt;
      {&lt;br /&gt;
         &amp;quot;eventStageTag&amp;quot;:&amp;quot;service_invokesB__pass&amp;quot;,&lt;br /&gt;
         &amp;quot;inputEventTag&amp;quot;:&amp;quot;input_service_invokes__pass&amp;quot;,&lt;br /&gt;
         &amp;quot;serviceName&amp;quot;:&amp;quot;ServiceTemplate_B&amp;quot;,&lt;br /&gt;
         &amp;quot;resourceType&amp;quot;:&amp;quot;Lambda&amp;quot;,&lt;br /&gt;
         &amp;quot;resourceName&amp;quot;:&amp;quot;LambdaFunction_B_HdrInv&amp;quot;,&lt;br /&gt;
         &amp;quot;outputEventTag&amp;quot;:&amp;quot;output_service_invokes__pass&amp;quot;&lt;br /&gt;
      },&lt;br /&gt;
      {&lt;br /&gt;
         &amp;quot;eventStageTag&amp;quot;:&amp;quot;service_invokesD__pass&amp;quot;,&lt;br /&gt;
         &amp;quot;inputEventTag&amp;quot;:&amp;quot;input_service_invokesD__pass&amp;quot;,&lt;br /&gt;
         &amp;quot;serviceName&amp;quot;:&amp;quot;ServiceTemplate_D&amp;quot;,&lt;br /&gt;
         &amp;quot;resourceType&amp;quot;:&amp;quot;Lambda&amp;quot;,&lt;br /&gt;
         &amp;quot;resourceName&amp;quot;:&amp;quot;LambdaFunction_D_HdrInv&amp;quot;,&lt;br /&gt;
         &amp;quot;outputEventTag&amp;quot;:&amp;quot;output_service_invokesD__pass&amp;quot;&lt;br /&gt;
      }&lt;br /&gt;
   ]&lt;br /&gt;
}]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
======S3======&lt;br /&gt;
======Batch======&lt;br /&gt;
&lt;br /&gt;
====GeneratedSeedData====&lt;br /&gt;
*Integrationtest must be delete identifier every time before test.&lt;br /&gt;
*Set &#039;generatedSeedData&#039; in file tests.json case by case of stage eg: stages[0] create identifier is randomOnCreate will set &#039;generatedSeedData&#039; and stages[1] create relationship is randomOnCreate(It is usually random, except in the case of relationship version) set generatedSeedData this stages[1].&lt;br /&gt;
*How to delete case identifier rendomOnCreate?: set in stage use setting generateSeedData &amp;quot;randomOnCreateIdentifier&amp;quot;&lt;br /&gt;
#randomOnCreateIdentifier&lt;br /&gt;
#notRandomOnIdentifier&lt;br /&gt;
#relationships&lt;br /&gt;
=====randomOnCreateIdentifier=====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;quot;stages&amp;quot;: [&lt;br /&gt;
      {&lt;br /&gt;
        &amp;quot;initialStage&amp;quot;: true,&lt;br /&gt;
        &amp;quot;inputEventTag&amp;quot;: &amp;quot;MLocation_CreateHdrSqs__case_NodeVersionData_Jaya&amp;quot;,&lt;br /&gt;
        &amp;quot;serviceTag&amp;quot;: &amp;quot;MLocations&amp;quot;,&lt;br /&gt;
        &amp;quot;resourceType&amp;quot;: &amp;quot;Lambda&amp;quot;,&lt;br /&gt;
        &amp;quot;resourceName&amp;quot;: &amp;quot;CreateHdrSqs&amp;quot;,&lt;br /&gt;
        &amp;quot;snsServiceName&amp;quot;: &amp;quot;MLocations&amp;quot;,&lt;br /&gt;
        &amp;quot;snsTopic&amp;quot;: &amp;quot;Create_In&amp;quot;,&lt;br /&gt;
        &amp;quot;generatedSeedData&amp;quot;: {&lt;br /&gt;
          &amp;quot;randomOnCreateIdentifier&amp;quot;: [&lt;br /&gt;
            {&lt;br /&gt;
              &amp;quot;objType&amp;quot;: {&lt;br /&gt;
                &amp;quot;serviceTag&amp;quot;: &amp;quot;MLocations&amp;quot;,&lt;br /&gt;
                &amp;quot;objectType&amp;quot;: &amp;quot;Member&amp;quot;&lt;br /&gt;
              },&lt;br /&gt;
              &amp;quot;identifierValue&amp;quot;: &amp;quot;Jaya-member-001&amp;quot;&lt;br /&gt;
            }&lt;br /&gt;
          ]&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
=====notRandomOnIdentifier=====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;quot;stages&amp;quot;: [&lt;br /&gt;
      {&lt;br /&gt;
        &amp;quot;initialStage&amp;quot;: true,&lt;br /&gt;
        &amp;quot;inputEventTag&amp;quot;: &amp;quot;MLocation_CreateHdrSqs__case_NodeVersionData_Jaya&amp;quot;,&lt;br /&gt;
        &amp;quot;serviceTag&amp;quot;: &amp;quot;MLocations&amp;quot;,&lt;br /&gt;
        &amp;quot;resourceType&amp;quot;: &amp;quot;Lambda&amp;quot;,&lt;br /&gt;
        &amp;quot;resourceName&amp;quot;: &amp;quot;CreateHdrSqs&amp;quot;,&lt;br /&gt;
        &amp;quot;snsServiceName&amp;quot;: &amp;quot;MLocations&amp;quot;,&lt;br /&gt;
        &amp;quot;snsTopic&amp;quot;: &amp;quot;Create_In&amp;quot;,&lt;br /&gt;
        &amp;quot;generatedSeedData&amp;quot;: {&lt;br /&gt;
          &amp;quot;notRandomOnIdentifier&amp;quot;: [&lt;br /&gt;
            {&lt;br /&gt;
              &amp;quot;objType&amp;quot;: {&lt;br /&gt;
                &amp;quot;serviceTag&amp;quot;: &amp;quot;gggg&amp;quot;,&lt;br /&gt;
                &amp;quot;objectType&amp;quot;: &amp;quot;ssssss&amp;quot;&lt;br /&gt;
              },&lt;br /&gt;
              &amp;quot;identifiers&amp;quot;: {&lt;br /&gt;
                &amp;quot;topId&amp;quot;: &amp;quot;123456&amp;quot;&lt;br /&gt;
              }&lt;br /&gt;
            }&lt;br /&gt;
          ]&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    ]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
=====relationships=====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;quot;stages&amp;quot;: [&lt;br /&gt;
      {&lt;br /&gt;
        &amp;quot;initialStage&amp;quot;: true,&lt;br /&gt;
        &amp;quot;inputEventTag&amp;quot;: &amp;quot;MLocation_CreateHdrSqs__case_NodeVersionData_Jaya&amp;quot;,&lt;br /&gt;
        &amp;quot;serviceTag&amp;quot;: &amp;quot;MLocations&amp;quot;,&lt;br /&gt;
        &amp;quot;resourceType&amp;quot;: &amp;quot;Lambda&amp;quot;,&lt;br /&gt;
        &amp;quot;resourceName&amp;quot;: &amp;quot;CreateHdrSqs&amp;quot;,&lt;br /&gt;
        &amp;quot;snsServiceName&amp;quot;: &amp;quot;MLocations&amp;quot;,&lt;br /&gt;
        &amp;quot;snsTopic&amp;quot;: &amp;quot;Create_In&amp;quot;,&lt;br /&gt;
        &amp;quot;generatedSeedData&amp;quot;: {&lt;br /&gt;
         &amp;quot;relationships&amp;quot;: [&lt;br /&gt;
            {&lt;br /&gt;
              &amp;quot;relType&amp;quot;: {&lt;br /&gt;
                &amp;quot;serviceTag&amp;quot;: &amp;quot;PaymentMethodGeneric&amp;quot;,&lt;br /&gt;
                &amp;quot;relationshipTag&amp;quot;: &amp;quot;disabledPaymentMethodGenericPropertyValue&amp;quot;&lt;br /&gt;
              },&lt;br /&gt;
              &amp;quot;relId&amp;quot;: &amp;quot;f4f73de7-647c-4b3b-8043-87cc002f361a&amp;quot;&lt;br /&gt;
            }&lt;br /&gt;
          ]&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    ]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Dynamodb==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
stages: [&lt;br /&gt;
        {&lt;br /&gt;
          initialStage: true,&lt;br /&gt;
          inputEventTag: &#039;Locations_LambdaFunctionHdrDsq_singleStage_directSqs__pass&#039;,&lt;br /&gt;
          serviceName: &#039;ServiceTemplate&#039;,&lt;br /&gt;
          resourceType: &#039;Lambda&#039;,&lt;br /&gt;
          resourceName: &#039;LambdaFunctionHdrDsq&#039;,&lt;br /&gt;
          outputEventTag: &#039;output_Locations_LambdaFunctionHdrDsq_singleStage_directSqs__pass&#039;,&lt;br /&gt;
          dynamodbOutputEventIdentifiers: [&lt;br /&gt;
			{&lt;br /&gt;
              serviceName: {tableName}, //service that deployed the DynamoDB table, so can build table&#039;s full resource name&lt;br /&gt;
              resourceName: {resourceName}, //DynamoDB resourceName&lt;br /&gt;
              eventTag: {eventTagDynamoDB}&lt;br /&gt;
		    }&lt;br /&gt;
          ],&lt;br /&gt;
        }&lt;br /&gt;
      ]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Result of integrationtest =&lt;br /&gt;
Data have 2 table &amp;quot;TestRecord&amp;quot; and &amp;quot;TestUnit&amp;quot;.&lt;br /&gt;
:- TestRecord is table all unti of stage inside eg input output invokes and dynamodb&lt;br /&gt;
:- TestUnit is store status each unit &lt;br /&gt;
each unit save in table TestUnit&lt;br /&gt;
testRecordId is  name of test concat with testTime.&lt;br /&gt;
testUnitId is point to position of unti instage.&lt;br /&gt;
resultStatus is status of unit.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
eg:&lt;br /&gt;
input_0 = stages index 0 result &#039;&#039;&#039;input&#039;&#039;&#039;&lt;br /&gt;
output_1 = stages index 1 result &#039;&#039;&#039;output&#039;&#039;&#039;&lt;br /&gt;
invokeInput_0_1 = stages index 0 result &#039;&#039;&#039;invokes&#039;&#039;&#039; index 1 position input &lt;br /&gt;
invokeOutput_0_1 = stages index 0 result &#039;&#039;&#039;invokes&#039;&#039;&#039; index 1 position output&lt;br /&gt;
dynamodb_0_1 =  stages index 0 result &#039;&#039;&#039;dynamodb&#039;&#039;&#039; index 1.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
after all TestUnit finish (check  by awaitingMultiplestep penditnStep is integrationtestTag awaitingStepId is each TestUnit )&lt;br /&gt;
check all awaitingStep finish send message to ultimateIntegrationtest for sumla all test is status&lt;br /&gt;
&lt;br /&gt;
== Summary of test status == &lt;br /&gt;
:1.testStatus is &amp;quot;passed&amp;quot; all unit passed.&lt;br /&gt;
:2.testStatus is &amp;quot;failed&amp;quot;  have some is failed.&lt;br /&gt;
:3.testStatus is &amp;quot;processing&amp;quot; have some is have status processing after check all awaiting step is finish.&lt;br /&gt;
:4.testStatus is &amp;quot;failed&amp;quot; have record &amp;quot;errorsTest&amp;quot; in case &amp;quot;not match stage invoke&amp;quot;, &#039;found multiple matchingInvokes&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*[[2025-02-20 - Integration Test examples#tests.js Syntax|Syntax Dynamodb]]&lt;br /&gt;
&lt;br /&gt;
=How to test integrationtest s3=&lt;br /&gt;
[[Developer guide for making Integration Tests]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Working documents| 2025-11-20]]&lt;br /&gt;
[[Category:Working documents - Integration Testing| 2025-11-20]]&lt;/div&gt;</summary>
		<author><name>Mint</name></author>
	</entry>
	<entry>
		<id>https://izara.io/wiki/index.php?title=Service_-_CommerceAccounting_Services&amp;diff=4564</id>
		<title>Service - CommerceAccounting Services</title>
		<link rel="alternate" type="text/html" href="https://izara.io/wiki/index.php?title=Service_-_CommerceAccounting_Services&amp;diff=4564"/>
		<updated>2026-08-10T03:52:29Z</updated>

		<summary type="html">&lt;p&gt;Mint: /* comAccServicesTypeLink */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Overview =&lt;br /&gt;
&lt;br /&gt;
Links Services objects to Accounting structures.&lt;br /&gt;
&lt;br /&gt;
= Repository =&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
= Object Schemas =&lt;br /&gt;
; Additional Information: [[Per Service Schemas]]&lt;br /&gt;
&lt;br /&gt;
== comAccServicesLink ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
	objectType: &amp;quot;comAccServicesLink&amp;quot;,&lt;br /&gt;
    generatedBy: &amp;quot;userGenerated&amp;quot;,&lt;br /&gt;
	canDelete: false,&lt;br /&gt;
	belongTo: {&lt;br /&gt;
		serviceTag: &amp;quot;CommerceAccountingLink&amp;quot;,&lt;br /&gt;
		objectType: &amp;quot;comAccLinkByBusiness&amp;quot;&lt;br /&gt;
	},&lt;br /&gt;
	addOnDataStructure: [],&lt;br /&gt;
	storageResources: {&lt;br /&gt;
		&amp;quot;dynamo&amp;quot;: {&lt;br /&gt;
			&amp;quot;storageType&amp;quot;: &amp;quot;dynamoDB&amp;quot;,&lt;br /&gt;
			&amp;quot;tableName&amp;quot;: &amp;quot;comAccServicesLink&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
        &amp;quot;myGraph&amp;quot;: {&lt;br /&gt;
            &amp;quot;storageType&amp;quot;: &amp;quot;graph&amp;quot;,&lt;br /&gt;
            &amp;quot;graphServerTag&amp;quot;: &amp;quot;GraphHandler&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
    },&lt;br /&gt;
    fieldNames: {&lt;br /&gt;
		// businessId&lt;br /&gt;
		// organizationId&lt;br /&gt;
		// servicesId&lt;br /&gt;
		// accountLinkTag // type of link: purchaseLineItem|..&lt;br /&gt;
		// accountId&lt;br /&gt;
    },&lt;br /&gt;
    identifiers: [&lt;br /&gt;
		{&lt;br /&gt;
			type: &amp;quot;partitionKey&amp;quot;,&lt;br /&gt;
			fieldNames: [&amp;quot;businessId&amp;quot;, &amp;quot;organizationId&amp;quot;, &amp;quot;servicesId&amp;quot;],&lt;br /&gt;
			name: &amp;quot;comAccLinkSerId&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
		{&lt;br /&gt;
			type: &amp;quot;sortKey&amp;quot;,&lt;br /&gt;
			fieldName: &amp;quot;accountLinkTag&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
    ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== comAccServicesTemplateLink ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
	objectType: &amp;quot;comAccServicesTemplateLink&amp;quot;,&lt;br /&gt;
    generatedBy: &amp;quot;userGenerated&amp;quot;,&lt;br /&gt;
	canDelete: false,&lt;br /&gt;
	belongTo: {&lt;br /&gt;
		serviceTag: &amp;quot;CommerceAccountingLink&amp;quot;,&lt;br /&gt;
		objectType: &amp;quot;comAccLinkByBusiness&amp;quot;&lt;br /&gt;
	},&lt;br /&gt;
	addOnDataStructure: [],&lt;br /&gt;
	storageResources: {&lt;br /&gt;
		&amp;quot;dynamo&amp;quot;: {&lt;br /&gt;
			&amp;quot;storageType&amp;quot;: &amp;quot;dynamoDB&amp;quot;,&lt;br /&gt;
			&amp;quot;tableName&amp;quot;: &amp;quot;comAccServicesTemplateLink&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
       &amp;quot;myGraph&amp;quot;: {&lt;br /&gt;
            &amp;quot;storageType&amp;quot;: &amp;quot;graph&amp;quot;,&lt;br /&gt;
            &amp;quot;graphServerTag&amp;quot;: &amp;quot;GraphHandler&amp;quot;&lt;br /&gt;
       }&lt;br /&gt;
    },&lt;br /&gt;
    fieldNames: {&lt;br /&gt;
		// businessId&lt;br /&gt;
		// organizationId&lt;br /&gt;
		// servicesTemplateId&lt;br /&gt;
		// accountLinkTag // type of link: purchaseLineItem|..&lt;br /&gt;
		// accountId&lt;br /&gt;
    },&lt;br /&gt;
    identifiers: [&lt;br /&gt;
		{&lt;br /&gt;
			type: &amp;quot;partitionKey&amp;quot;,&lt;br /&gt;
			fieldNames: [&amp;quot;businessId&amp;quot;, &amp;quot;organizationId&amp;quot;, &amp;quot;servicesTemplateId&amp;quot;],&lt;br /&gt;
			name: &amp;quot;comAccLinkSerTemId&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
		{&lt;br /&gt;
			type: &amp;quot;sortKey&amp;quot;,&lt;br /&gt;
			fieldName: &amp;quot;accountLinkTag&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
    ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== comAccServicesTypeLink ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
	objectType: &amp;quot;comAccServicesTypeLink&amp;quot;,&lt;br /&gt;
    generatedBy: &amp;quot;userGenerated&amp;quot;,&lt;br /&gt;
	canDelete: false,&lt;br /&gt;
	belongTo: {&lt;br /&gt;
		serviceTag: &amp;quot;CommerceAccountingLink&amp;quot;,&lt;br /&gt;
		objectType: &amp;quot;comAccLinkByBusiness&amp;quot;&lt;br /&gt;
	},&lt;br /&gt;
	addOnDataStructure: [],&lt;br /&gt;
	storageResources: {&lt;br /&gt;
		&amp;quot;dynamo&amp;quot;: {&lt;br /&gt;
			&amp;quot;storageType&amp;quot;: &amp;quot;dynamoDB&amp;quot;,&lt;br /&gt;
			&amp;quot;tableName&amp;quot;: &amp;quot;comAccServicesTypeLink&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
       &amp;quot;myGraph&amp;quot;: {&lt;br /&gt;
            &amp;quot;storageType&amp;quot;: &amp;quot;graph&amp;quot;,&lt;br /&gt;
            &amp;quot;graphServerTag&amp;quot;: &amp;quot;GraphHandler&amp;quot;&lt;br /&gt;
       }&lt;br /&gt;
    },&lt;br /&gt;
    fieldNames: {&lt;br /&gt;
		// businessId&lt;br /&gt;
		// organizationId&lt;br /&gt;
		// servicesType // pointInTime|overTime&lt;br /&gt;
		// accountLinkTag // type of link: purchaseLineItem|..&lt;br /&gt;
		// accountId&lt;br /&gt;
    },&lt;br /&gt;
    identifiers: [&lt;br /&gt;
		{&lt;br /&gt;
			type: &amp;quot;partitionKey&amp;quot;,&lt;br /&gt;
			fieldNames: [&amp;quot;businessId&amp;quot;, &amp;quot;organizationId&amp;quot;, &amp;quot;servicesType&amp;quot;],&lt;br /&gt;
			name: &amp;quot;comAccLinkSerTypId&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
		{&lt;br /&gt;
			type: &amp;quot;sortKey&amp;quot;,&lt;br /&gt;
			fieldName: &amp;quot;accountLinkTag&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
    ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Relationships ==&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
= flowSchemas =&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
= Working documents =&lt;br /&gt;
&lt;br /&gt;
[[:Category:Working_documents - CommerceAccounting Services| CommerceAccounting Services]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Backend services| CommerceAccounting Services]]&lt;/div&gt;</summary>
		<author><name>Mint</name></author>
	</entry>
	<entry>
		<id>https://izara.io/wiki/index.php?title=Service_-_CommerceAccounting_Services&amp;diff=4563</id>
		<title>Service - CommerceAccounting Services</title>
		<link rel="alternate" type="text/html" href="https://izara.io/wiki/index.php?title=Service_-_CommerceAccounting_Services&amp;diff=4563"/>
		<updated>2026-08-10T03:52:21Z</updated>

		<summary type="html">&lt;p&gt;Mint: /* comAccServicesTemplateLink */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Overview =&lt;br /&gt;
&lt;br /&gt;
Links Services objects to Accounting structures.&lt;br /&gt;
&lt;br /&gt;
= Repository =&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
= Object Schemas =&lt;br /&gt;
; Additional Information: [[Per Service Schemas]]&lt;br /&gt;
&lt;br /&gt;
== comAccServicesLink ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
	objectType: &amp;quot;comAccServicesLink&amp;quot;,&lt;br /&gt;
    generatedBy: &amp;quot;userGenerated&amp;quot;,&lt;br /&gt;
	canDelete: false,&lt;br /&gt;
	belongTo: {&lt;br /&gt;
		serviceTag: &amp;quot;CommerceAccountingLink&amp;quot;,&lt;br /&gt;
		objectType: &amp;quot;comAccLinkByBusiness&amp;quot;&lt;br /&gt;
	},&lt;br /&gt;
	addOnDataStructure: [],&lt;br /&gt;
	storageResources: {&lt;br /&gt;
		&amp;quot;dynamo&amp;quot;: {&lt;br /&gt;
			&amp;quot;storageType&amp;quot;: &amp;quot;dynamoDB&amp;quot;,&lt;br /&gt;
			&amp;quot;tableName&amp;quot;: &amp;quot;comAccServicesLink&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
        &amp;quot;myGraph&amp;quot;: {&lt;br /&gt;
            &amp;quot;storageType&amp;quot;: &amp;quot;graph&amp;quot;,&lt;br /&gt;
            &amp;quot;graphServerTag&amp;quot;: &amp;quot;GraphHandler&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
    },&lt;br /&gt;
    fieldNames: {&lt;br /&gt;
		// businessId&lt;br /&gt;
		// organizationId&lt;br /&gt;
		// servicesId&lt;br /&gt;
		// accountLinkTag // type of link: purchaseLineItem|..&lt;br /&gt;
		// accountId&lt;br /&gt;
    },&lt;br /&gt;
    identifiers: [&lt;br /&gt;
		{&lt;br /&gt;
			type: &amp;quot;partitionKey&amp;quot;,&lt;br /&gt;
			fieldNames: [&amp;quot;businessId&amp;quot;, &amp;quot;organizationId&amp;quot;, &amp;quot;servicesId&amp;quot;],&lt;br /&gt;
			name: &amp;quot;comAccLinkSerId&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
		{&lt;br /&gt;
			type: &amp;quot;sortKey&amp;quot;,&lt;br /&gt;
			fieldName: &amp;quot;accountLinkTag&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
    ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== comAccServicesTemplateLink ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
	objectType: &amp;quot;comAccServicesTemplateLink&amp;quot;,&lt;br /&gt;
    generatedBy: &amp;quot;userGenerated&amp;quot;,&lt;br /&gt;
	canDelete: false,&lt;br /&gt;
	belongTo: {&lt;br /&gt;
		serviceTag: &amp;quot;CommerceAccountingLink&amp;quot;,&lt;br /&gt;
		objectType: &amp;quot;comAccLinkByBusiness&amp;quot;&lt;br /&gt;
	},&lt;br /&gt;
	addOnDataStructure: [],&lt;br /&gt;
	storageResources: {&lt;br /&gt;
		&amp;quot;dynamo&amp;quot;: {&lt;br /&gt;
			&amp;quot;storageType&amp;quot;: &amp;quot;dynamoDB&amp;quot;,&lt;br /&gt;
			&amp;quot;tableName&amp;quot;: &amp;quot;comAccServicesTemplateLink&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
       &amp;quot;myGraph&amp;quot;: {&lt;br /&gt;
            &amp;quot;storageType&amp;quot;: &amp;quot;graph&amp;quot;,&lt;br /&gt;
            &amp;quot;graphServerTag&amp;quot;: &amp;quot;GraphHandler&amp;quot;&lt;br /&gt;
       }&lt;br /&gt;
    },&lt;br /&gt;
    fieldNames: {&lt;br /&gt;
		// businessId&lt;br /&gt;
		// organizationId&lt;br /&gt;
		// servicesTemplateId&lt;br /&gt;
		// accountLinkTag // type of link: purchaseLineItem|..&lt;br /&gt;
		// accountId&lt;br /&gt;
    },&lt;br /&gt;
    identifiers: [&lt;br /&gt;
		{&lt;br /&gt;
			type: &amp;quot;partitionKey&amp;quot;,&lt;br /&gt;
			fieldNames: [&amp;quot;businessId&amp;quot;, &amp;quot;organizationId&amp;quot;, &amp;quot;servicesTemplateId&amp;quot;],&lt;br /&gt;
			name: &amp;quot;comAccLinkSerTemId&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
		{&lt;br /&gt;
			type: &amp;quot;sortKey&amp;quot;,&lt;br /&gt;
			fieldName: &amp;quot;accountLinkTag&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
    ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== comAccServicesTypeLink ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
	objectType: &amp;quot;comAccServicesTypeLink&amp;quot;,&lt;br /&gt;
    generatedBy: &amp;quot;userGenerated&amp;quot;,&lt;br /&gt;
	canDelete: false,&lt;br /&gt;
	belongTo: {&lt;br /&gt;
		serviceTag: &amp;quot;CommerceAccountingLink&amp;quot;,&lt;br /&gt;
		objectType: &amp;quot;comAccLinkByBusiness&amp;quot;&lt;br /&gt;
	},&lt;br /&gt;
	addOnDataStructure: [],&lt;br /&gt;
	storageResources: {&lt;br /&gt;
		&amp;quot;dynamo&amp;quot;: {&lt;br /&gt;
			&amp;quot;storageType&amp;quot;: &amp;quot;dynamoDB&amp;quot;,&lt;br /&gt;
			&amp;quot;tableName&amp;quot;: &amp;quot;comAccServicesTypeLink&amp;quot;,&lt;br /&gt;
		}&lt;br /&gt;
    },&lt;br /&gt;
    fieldNames: {&lt;br /&gt;
		// businessId&lt;br /&gt;
		// organizationId&lt;br /&gt;
		// servicesType // pointInTime|overTime&lt;br /&gt;
		// accountLinkTag // type of link: purchaseLineItem|..&lt;br /&gt;
		// accountId&lt;br /&gt;
    },&lt;br /&gt;
    identifiers: [&lt;br /&gt;
		{&lt;br /&gt;
			type: &amp;quot;partitionKey&amp;quot;,&lt;br /&gt;
			fieldNames: [&amp;quot;businessId&amp;quot;, &amp;quot;organizationId&amp;quot;, &amp;quot;servicesType&amp;quot;],&lt;br /&gt;
			name: &amp;quot;comAccLinkSerTypId&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
		{&lt;br /&gt;
			type: &amp;quot;sortKey&amp;quot;,&lt;br /&gt;
			fieldName: &amp;quot;accountLinkTag&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
    ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Relationships ==&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
= flowSchemas =&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
= Working documents =&lt;br /&gt;
&lt;br /&gt;
[[:Category:Working_documents - CommerceAccounting Services| CommerceAccounting Services]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Backend services| CommerceAccounting Services]]&lt;/div&gt;</summary>
		<author><name>Mint</name></author>
	</entry>
	<entry>
		<id>https://izara.io/wiki/index.php?title=Service_-_CommerceAccounting_Customer&amp;diff=4562</id>
		<title>Service - CommerceAccounting Customer</title>
		<link rel="alternate" type="text/html" href="https://izara.io/wiki/index.php?title=Service_-_CommerceAccounting_Customer&amp;diff=4562"/>
		<updated>2026-08-10T03:52:12Z</updated>

		<summary type="html">&lt;p&gt;Mint: /* Object Schemas */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Overview =&lt;br /&gt;
&lt;br /&gt;
Connects each customer to their Accounting accounts, such as accountsReceivable&lt;br /&gt;
&lt;br /&gt;
= Repository =&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
= Object Schemas =&lt;br /&gt;
; Additional Information: [[Per Service Schemas]]&lt;br /&gt;
&lt;br /&gt;
== comAccCustomerLink ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
	objectType: &amp;quot;comAccCustomerLink&amp;quot;,&lt;br /&gt;
    generatedBy: &amp;quot;userGenerated&amp;quot;,&lt;br /&gt;
	canDelete: false,&lt;br /&gt;
	belongTo: {&lt;br /&gt;
		serviceTag: &amp;quot;CommerceAccountingLink&amp;quot;,&lt;br /&gt;
		objectType: &amp;quot;comAccLinkByBusiness&amp;quot;&lt;br /&gt;
	},&lt;br /&gt;
	addOnDataStructure: [],&lt;br /&gt;
	storageResources: {&lt;br /&gt;
		&amp;quot;dynamo&amp;quot;: {&lt;br /&gt;
			&amp;quot;storageType&amp;quot;: &amp;quot;dynamoDB&amp;quot;,&lt;br /&gt;
			&amp;quot;tableName&amp;quot;: &amp;quot;comAccCustomerLink&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
       &amp;quot;myGraph&amp;quot;: {&lt;br /&gt;
            &amp;quot;storageType&amp;quot;: &amp;quot;graph&amp;quot;,&lt;br /&gt;
            &amp;quot;graphServerTag&amp;quot;: &amp;quot;GraphHandler&amp;quot;&lt;br /&gt;
       }&lt;br /&gt;
    },&lt;br /&gt;
    fieldNames: {&lt;br /&gt;
		// businessId&lt;br /&gt;
		// organizationId&lt;br /&gt;
		// customerId&lt;br /&gt;
		// accountLinkTag // type of link: accountsReceivable|..&lt;br /&gt;
		// accountId&lt;br /&gt;
    },&lt;br /&gt;
    identifiers: [&lt;br /&gt;
		{&lt;br /&gt;
			type: &amp;quot;partitionKey&amp;quot;,&lt;br /&gt;
			fieldNames: [&amp;quot;businessId&amp;quot;, &amp;quot;organizationId&amp;quot;, &amp;quot;customerId&amp;quot;],&lt;br /&gt;
			name: &amp;quot;comAccLinkCusId&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
		{&lt;br /&gt;
			type: &amp;quot;sortKey&amp;quot;,&lt;br /&gt;
			fieldName: &amp;quot;accountLinkTag&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
    ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== comAccCustomerDefaultLink ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
	objectType: &amp;quot;comAccCustomerDefaultLink&amp;quot;,&lt;br /&gt;
    generatedBy: &amp;quot;userGenerated&amp;quot;,&lt;br /&gt;
	canDelete: false,&lt;br /&gt;
	belongTo: {&lt;br /&gt;
		serviceTag: &amp;quot;CommerceAccountingLink&amp;quot;,&lt;br /&gt;
		objectType: &amp;quot;comAccLinkByBusiness&amp;quot;&lt;br /&gt;
	},&lt;br /&gt;
	addOnDataStructure: [],&lt;br /&gt;
	storageResources: {&lt;br /&gt;
		&amp;quot;dynamo&amp;quot;: {&lt;br /&gt;
			&amp;quot;storageType&amp;quot;: &amp;quot;dynamoDB&amp;quot;,&lt;br /&gt;
			&amp;quot;tableName&amp;quot;: &amp;quot;comAccCustomerDefaultLink&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
       &amp;quot;myGraph&amp;quot;: {&lt;br /&gt;
            &amp;quot;storageType&amp;quot;: &amp;quot;graph&amp;quot;,&lt;br /&gt;
            &amp;quot;graphServerTag&amp;quot;: &amp;quot;GraphHandler&amp;quot;&lt;br /&gt;
       }&lt;br /&gt;
    },&lt;br /&gt;
    fieldNames: {&lt;br /&gt;
		// businessId&lt;br /&gt;
		// organizationId&lt;br /&gt;
		// accountLinkTag // type of link: accountsReceivable|..&lt;br /&gt;
		// accountId&lt;br /&gt;
    },&lt;br /&gt;
    identifiers: [&lt;br /&gt;
		{&lt;br /&gt;
			type: &amp;quot;partitionKey&amp;quot;,&lt;br /&gt;
			fieldNames: [&amp;quot;businessId&amp;quot;, &amp;quot;organizationId&amp;quot;],&lt;br /&gt;
			name: &amp;quot;comAccLinkId&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
		{&lt;br /&gt;
			type: &amp;quot;sortKey&amp;quot;,&lt;br /&gt;
			fieldName: &amp;quot;accountLinkTag&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
    ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Relationships ==&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
= flowSchemas =&lt;br /&gt;
&lt;br /&gt;
== createSale ==&lt;br /&gt;
&lt;br /&gt;
* sends request to Accounting to create entries in comAccCustomerLink.accountlinkTag = accountsReceivable account&lt;br /&gt;
* or maybe returns accountId to Sales createSale flow which sends to Accounting&lt;br /&gt;
&lt;br /&gt;
= accountLinkTag =&lt;br /&gt;
&lt;br /&gt;
== accountsReceivable ==&lt;br /&gt;
&lt;br /&gt;
= Working documents =&lt;br /&gt;
&lt;br /&gt;
[[:Category:Working_documents - CommerceAccounting Customer| CommerceAccounting Customer]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Backend services| CommerceAccounting Customer]]&lt;/div&gt;</summary>
		<author><name>Mint</name></author>
	</entry>
	<entry>
		<id>https://izara.io/wiki/index.php?title=Service_-_CommerceAccounting_Expense&amp;diff=4561</id>
		<title>Service - CommerceAccounting Expense</title>
		<link rel="alternate" type="text/html" href="https://izara.io/wiki/index.php?title=Service_-_CommerceAccounting_Expense&amp;diff=4561"/>
		<updated>2026-08-10T03:51:42Z</updated>

		<summary type="html">&lt;p&gt;Mint: /* Object Schemas */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Overview =&lt;br /&gt;
&lt;br /&gt;
Links Expense objects to Accounting structures.&lt;br /&gt;
&lt;br /&gt;
= Repository =&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
= Object Schemas =&lt;br /&gt;
; Additional Information: [[Per Service Schemas]]&lt;br /&gt;
&lt;br /&gt;
== comAccExpenseLink ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
	objectType: &amp;quot;comAccExpenseLink&amp;quot;,&lt;br /&gt;
    generatedBy: &amp;quot;userGenerated&amp;quot;,&lt;br /&gt;
	canDelete: false,&lt;br /&gt;
	belongTo: {&lt;br /&gt;
		serviceTag: &amp;quot;CommerceAccountingLink&amp;quot;,&lt;br /&gt;
		objectType: &amp;quot;comAccLinkByBusiness&amp;quot;&lt;br /&gt;
	},&lt;br /&gt;
	addOnDataStructure: [],&lt;br /&gt;
	storageResources: {&lt;br /&gt;
		&amp;quot;dynamo&amp;quot;: {&lt;br /&gt;
			&amp;quot;storageType&amp;quot;: &amp;quot;dynamoDB&amp;quot;,&lt;br /&gt;
			&amp;quot;tableName&amp;quot;: &amp;quot;comAccExpenseLink&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
       &amp;quot;myGraph&amp;quot;: {&lt;br /&gt;
            &amp;quot;storageType&amp;quot;: &amp;quot;graph&amp;quot;,&lt;br /&gt;
            &amp;quot;graphServerTag&amp;quot;: &amp;quot;GraphHandler&amp;quot;&lt;br /&gt;
       }&lt;br /&gt;
    },&lt;br /&gt;
    fieldNames: {&lt;br /&gt;
		// businessId&lt;br /&gt;
		// organizationId&lt;br /&gt;
		// expenseId&lt;br /&gt;
		// accountLinkTag // type of link: ..&lt;br /&gt;
		// accountId&lt;br /&gt;
    },&lt;br /&gt;
    identifiers: [&lt;br /&gt;
		{&lt;br /&gt;
			type: &amp;quot;partitionKey&amp;quot;,&lt;br /&gt;
			fieldNames: [&amp;quot;businessId&amp;quot;, &amp;quot;organizationId&amp;quot;, &amp;quot;expenseId&amp;quot;],&lt;br /&gt;
			name: &amp;quot;comAccLinkExpId&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
		{&lt;br /&gt;
			type: &amp;quot;sortKey&amp;quot;,&lt;br /&gt;
			fieldName: &amp;quot;accountLinkTag&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
    ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== comAccExpenseTypeLink ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
	objectType: &amp;quot;comAccExpenseTypeLink&amp;quot;,&lt;br /&gt;
    generatedBy: &amp;quot;userGenerated&amp;quot;,&lt;br /&gt;
	canDelete: false,&lt;br /&gt;
	belongTo: {&lt;br /&gt;
		serviceTag: &amp;quot;CommerceAccountingLink&amp;quot;,&lt;br /&gt;
		objectType: &amp;quot;comAccLinkByBusiness&amp;quot;&lt;br /&gt;
	},&lt;br /&gt;
	addOnDataStructure: [],&lt;br /&gt;
	storageResources: {&lt;br /&gt;
		&amp;quot;dynamo&amp;quot;: {&lt;br /&gt;
			&amp;quot;storageType&amp;quot;: &amp;quot;dynamoDB&amp;quot;,&lt;br /&gt;
			&amp;quot;tableName&amp;quot;: &amp;quot;comAccExpenseTypeLink&amp;quot;,&lt;br /&gt;
		}&lt;br /&gt;
    },&lt;br /&gt;
    fieldNames: {&lt;br /&gt;
		// businessId&lt;br /&gt;
		// organizationId&lt;br /&gt;
		// expenseType // pointInTime|overTime&lt;br /&gt;
		// accountLinkTag // type of link: purchaseLineItem|..&lt;br /&gt;
		// accountId&lt;br /&gt;
    },&lt;br /&gt;
    identifiers: [&lt;br /&gt;
		{&lt;br /&gt;
			type: &amp;quot;partitionKey&amp;quot;,&lt;br /&gt;
			fieldNames: [&amp;quot;businessId&amp;quot;, &amp;quot;organizationId&amp;quot;, &amp;quot;expenseType&amp;quot;],&lt;br /&gt;
			name: &amp;quot;comAccLinkExpTypId&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
		{&lt;br /&gt;
			type: &amp;quot;sortKey&amp;quot;,&lt;br /&gt;
			fieldName: &amp;quot;accountLinkTag&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
    ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== RelationshipSchemas ==&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
= Working documents =&lt;br /&gt;
&lt;br /&gt;
[[:Category:Working_documents - CommerceAccounting Expenses|CommerceAccounting Expenses]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Backend services| CommerceAccounting Expenses]]&lt;/div&gt;</summary>
		<author><name>Mint</name></author>
	</entry>
	<entry>
		<id>https://izara.io/wiki/index.php?title=Service_-_CommerceAccounting_Freight_In&amp;diff=4560</id>
		<title>Service - CommerceAccounting Freight In</title>
		<link rel="alternate" type="text/html" href="https://izara.io/wiki/index.php?title=Service_-_CommerceAccounting_Freight_In&amp;diff=4560"/>
		<updated>2026-08-10T03:51:10Z</updated>

		<summary type="html">&lt;p&gt;Mint: /* Object Schemas */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Overview =&lt;br /&gt;
&lt;br /&gt;
Links Freight In objects to Accounting structures.&lt;br /&gt;
&lt;br /&gt;
= Repository =&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
= Object Schemas =&lt;br /&gt;
; Additional Information: [[Per Service Schemas]]&lt;br /&gt;
&lt;br /&gt;
== comAccFreightInLink ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
	objectType: &amp;quot;comAccFreightInLink&amp;quot;,&lt;br /&gt;
    generatedBy: &amp;quot;userGenerated&amp;quot;,&lt;br /&gt;
	canDelete: false,&lt;br /&gt;
	belongTo: {&lt;br /&gt;
		serviceTag: &amp;quot;CommerceAccountingLink&amp;quot;,&lt;br /&gt;
		objectType: &amp;quot;comAccLinkByBusiness&amp;quot;&lt;br /&gt;
	},&lt;br /&gt;
	addOnDataStructure: [],&lt;br /&gt;
	storageResources: {&lt;br /&gt;
		&amp;quot;dynamo&amp;quot;: {&lt;br /&gt;
			&amp;quot;storageType&amp;quot;: &amp;quot;dynamoDB&amp;quot;,&lt;br /&gt;
			&amp;quot;tableName&amp;quot;: &amp;quot;comAccFreightInLink&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
       &amp;quot;myGraph&amp;quot;: {&lt;br /&gt;
            &amp;quot;storageType&amp;quot;: &amp;quot;graph&amp;quot;,&lt;br /&gt;
            &amp;quot;graphServerTag&amp;quot;: &amp;quot;GraphHandler&amp;quot;&lt;br /&gt;
       }&lt;br /&gt;
    },&lt;br /&gt;
    fieldNames: {&lt;br /&gt;
		// businessId&lt;br /&gt;
		// organizationId&lt;br /&gt;
		// freightInId&lt;br /&gt;
		// accountLinkTag // type of link: purchaseLineItem&lt;br /&gt;
		// accountId&lt;br /&gt;
    },&lt;br /&gt;
    identifiers: [&lt;br /&gt;
		{&lt;br /&gt;
			type: &amp;quot;partitionKey&amp;quot;,&lt;br /&gt;
			fieldNames: [&amp;quot;businessId&amp;quot;, &amp;quot;organizationId&amp;quot;, &amp;quot;freightInId&amp;quot;],&lt;br /&gt;
			name: &amp;quot;comAccLinkFreInId&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
		{&lt;br /&gt;
			type: &amp;quot;sortKey&amp;quot;,&lt;br /&gt;
			fieldName: &amp;quot;accountLinkTag&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
    ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== comAccFreightInTypeLink ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
	objectType: &amp;quot;comAccFreightInTypeLink&amp;quot;,&lt;br /&gt;
    generatedBy: &amp;quot;userGenerated&amp;quot;,&lt;br /&gt;
	canDelete: false,&lt;br /&gt;
	belongTo: {&lt;br /&gt;
		serviceTag: &amp;quot;CommerceAccountingLink&amp;quot;,&lt;br /&gt;
		objectType: &amp;quot;comAccLinkByBusiness&amp;quot;&lt;br /&gt;
	},&lt;br /&gt;
	addOnDataStructure: [],&lt;br /&gt;
	storageResources: {&lt;br /&gt;
		&amp;quot;dynamo&amp;quot;: {&lt;br /&gt;
			&amp;quot;storageType&amp;quot;: &amp;quot;dynamoDB&amp;quot;,&lt;br /&gt;
			&amp;quot;tableName&amp;quot;: &amp;quot;comAccFreightInTypeLink&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
       &amp;quot;myGraph&amp;quot;: {&lt;br /&gt;
            &amp;quot;storageType&amp;quot;: &amp;quot;graph&amp;quot;,&lt;br /&gt;
            &amp;quot;graphServerTag&amp;quot;: &amp;quot;GraphHandler&amp;quot;&lt;br /&gt;
       }&lt;br /&gt;
    },&lt;br /&gt;
    fieldNames: {&lt;br /&gt;
		// businessId&lt;br /&gt;
		// organizationId&lt;br /&gt;
		// freightInType // standard|..&lt;br /&gt;
		// accountLinkTag // type of link: purchaseLineItem|..&lt;br /&gt;
		// accountId&lt;br /&gt;
    },&lt;br /&gt;
    identifiers: [&lt;br /&gt;
		{&lt;br /&gt;
			type: &amp;quot;partitionKey&amp;quot;,&lt;br /&gt;
			fieldNames: [&amp;quot;businessId&amp;quot;, &amp;quot;organizationId&amp;quot;, &amp;quot;freightInType&amp;quot;],&lt;br /&gt;
			name: &amp;quot;comAccLinkFreInTypId&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
		{&lt;br /&gt;
			type: &amp;quot;sortKey&amp;quot;,&lt;br /&gt;
			fieldName: &amp;quot;accountLinkTag&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
    ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Relationships ==&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
= flowSchemas =&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
= Working documents =&lt;br /&gt;
&lt;br /&gt;
[[:Category:Working_documents - CommerceAccounting Freight In| CommerceAccounting Freight In]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Backend services| CommerceAccounting Freight In]]&lt;/div&gt;</summary>
		<author><name>Mint</name></author>
	</entry>
	<entry>
		<id>https://izara.io/wiki/index.php?title=Service_-_CommerceAccounting_Other_Purchase_Item&amp;diff=4559</id>
		<title>Service - CommerceAccounting Other Purchase Item</title>
		<link rel="alternate" type="text/html" href="https://izara.io/wiki/index.php?title=Service_-_CommerceAccounting_Other_Purchase_Item&amp;diff=4559"/>
		<updated>2026-08-10T03:50:57Z</updated>

		<summary type="html">&lt;p&gt;Mint: /* Object Schemas */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Overview =&lt;br /&gt;
&lt;br /&gt;
Links Other Purchase Item objects to Accounting structures.&lt;br /&gt;
&lt;br /&gt;
= Repository =&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
= Object Schemas =&lt;br /&gt;
; Additional Information: [[Per Service Schemas]]&lt;br /&gt;
&lt;br /&gt;
== comAccOtherPurchaseItemLink ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
	objectType: &amp;quot;comAccOtherPurchaseItemLink&amp;quot;,&lt;br /&gt;
    generatedBy: &amp;quot;userGenerated&amp;quot;,&lt;br /&gt;
	canDelete: false,&lt;br /&gt;
	belongTo: {&lt;br /&gt;
		serviceTag: &amp;quot;CommerceAccountingLink&amp;quot;,&lt;br /&gt;
		objectType: &amp;quot;comAccLinkByBusiness&amp;quot;&lt;br /&gt;
	},&lt;br /&gt;
	addOnDataStructure: [],&lt;br /&gt;
	storageResources: {&lt;br /&gt;
		&amp;quot;dynamo&amp;quot;: {&lt;br /&gt;
			&amp;quot;storageType&amp;quot;: &amp;quot;dynamoDB&amp;quot;,&lt;br /&gt;
			&amp;quot;tableName&amp;quot;: &amp;quot;comAccOtherPurchaseItemLink&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
       &amp;quot;myGraph&amp;quot;: {&lt;br /&gt;
            &amp;quot;storageType&amp;quot;: &amp;quot;graph&amp;quot;,&lt;br /&gt;
            &amp;quot;graphServerTag&amp;quot;: &amp;quot;GraphHandler&amp;quot;&lt;br /&gt;
       }&lt;br /&gt;
    },&lt;br /&gt;
    fieldNames: {&lt;br /&gt;
		// businessId&lt;br /&gt;
		// organizationId&lt;br /&gt;
		// otherPurchaseItemId&lt;br /&gt;
		// accountLinkTag // type of link: purchaseLineItem|..&lt;br /&gt;
		// accountId&lt;br /&gt;
    },&lt;br /&gt;
    identifiers: [&lt;br /&gt;
		{&lt;br /&gt;
			type: &amp;quot;partitionKey&amp;quot;,&lt;br /&gt;
			fieldNames: [&amp;quot;businessId&amp;quot;, &amp;quot;organizationId&amp;quot;, &amp;quot;otherPurchaseItemId&amp;quot;],&lt;br /&gt;
			name: &amp;quot;comAccLinkOthPurId&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
		{&lt;br /&gt;
			type: &amp;quot;sortKey&amp;quot;,&lt;br /&gt;
			fieldName: &amp;quot;accountLinkTag&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
    ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== comAccOtherPurchaseItemTypeLink ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
	objectType: &amp;quot;comAccOtherPurchaseItemTypeLink&amp;quot;,&lt;br /&gt;
    generatedBy: &amp;quot;userGenerated&amp;quot;,&lt;br /&gt;
	canDelete: false,&lt;br /&gt;
	belongTo: {&lt;br /&gt;
		serviceTag: &amp;quot;CommerceAccountingLink&amp;quot;,&lt;br /&gt;
		objectType: &amp;quot;comAccLinkByBusiness&amp;quot;&lt;br /&gt;
	},&lt;br /&gt;
	addOnDataStructure: [],&lt;br /&gt;
	storageResources: {&lt;br /&gt;
		&amp;quot;dynamo&amp;quot;: {&lt;br /&gt;
			&amp;quot;storageType&amp;quot;: &amp;quot;dynamoDB&amp;quot;,&lt;br /&gt;
			&amp;quot;tableName&amp;quot;: &amp;quot;comAccOtherPurchaseItemTypeLink&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
       &amp;quot;myGraph&amp;quot;: {&lt;br /&gt;
            &amp;quot;storageType&amp;quot;: &amp;quot;graph&amp;quot;,&lt;br /&gt;
            &amp;quot;graphServerTag&amp;quot;: &amp;quot;GraphHandler&amp;quot;&lt;br /&gt;
       }&lt;br /&gt;
    },&lt;br /&gt;
    fieldNames: {&lt;br /&gt;
		// businessId&lt;br /&gt;
		// organizationId&lt;br /&gt;
		// otherPurchaseItemType // standard&lt;br /&gt;
		// accountLinkTag // type of link: purchaseLineItem|..&lt;br /&gt;
		// accountId&lt;br /&gt;
    },&lt;br /&gt;
    identifiers: [&lt;br /&gt;
		{&lt;br /&gt;
			type: &amp;quot;partitionKey&amp;quot;,&lt;br /&gt;
			fieldNames: [&amp;quot;businessId&amp;quot;, &amp;quot;organizationId&amp;quot;, &amp;quot;otherPurchaseItemType&amp;quot;],&lt;br /&gt;
			name: &amp;quot;comAccLinkOthPurTypId&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
		{&lt;br /&gt;
			type: &amp;quot;sortKey&amp;quot;,&lt;br /&gt;
			fieldName: &amp;quot;accountLinkTag&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
    ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Relationships ==&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
= flowSchemas =&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
= Working documents =&lt;br /&gt;
&lt;br /&gt;
[[:Category:Working_documents - CommerceAccounting Other Purchase Item| CommerceAccounting Other Purchase Item]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Backend services| CommerceAccounting Other Purchase Item]]&lt;/div&gt;</summary>
		<author><name>Mint</name></author>
	</entry>
	<entry>
		<id>https://izara.io/wiki/index.php?title=Service_-_CommerceAccounting_Other_Purchase_Item&amp;diff=4558</id>
		<title>Service - CommerceAccounting Other Purchase Item</title>
		<link rel="alternate" type="text/html" href="https://izara.io/wiki/index.php?title=Service_-_CommerceAccounting_Other_Purchase_Item&amp;diff=4558"/>
		<updated>2026-08-10T03:50:45Z</updated>

		<summary type="html">&lt;p&gt;Mint: /* comAccOtherPurchaseItemLink */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Overview =&lt;br /&gt;
&lt;br /&gt;
Links Other Purchase Item objects to Accounting structures.&lt;br /&gt;
&lt;br /&gt;
= Repository =&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
= Object Schemas =&lt;br /&gt;
; Additional Information: [[Per Service Schemas]]&lt;br /&gt;
&lt;br /&gt;
== comAccOtherPurchaseItemLink ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
	objectType: &amp;quot;comAccOtherPurchaseItemLink&amp;quot;,&lt;br /&gt;
    generatedBy: &amp;quot;userGenerated&amp;quot;,&lt;br /&gt;
	canDelete: false,&lt;br /&gt;
	belongTo: {&lt;br /&gt;
		serviceTag: &amp;quot;CommerceAccountingLink&amp;quot;,&lt;br /&gt;
		objectType: &amp;quot;comAccLinkByBusiness&amp;quot;&lt;br /&gt;
	},&lt;br /&gt;
	addOnDataStructure: [],&lt;br /&gt;
	storageResources: {&lt;br /&gt;
		&amp;quot;dynamo&amp;quot;: {&lt;br /&gt;
			&amp;quot;storageType&amp;quot;: &amp;quot;dynamoDB&amp;quot;,&lt;br /&gt;
			&amp;quot;tableName&amp;quot;: &amp;quot;comAccOtherPurchaseItemLink&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
       &amp;quot;myGraph&amp;quot;: {&lt;br /&gt;
            &amp;quot;storageType&amp;quot;: &amp;quot;graph&amp;quot;,&lt;br /&gt;
            &amp;quot;graphServerTag&amp;quot;: &amp;quot;GraphHandler&amp;quot;&lt;br /&gt;
       }&lt;br /&gt;
    },&lt;br /&gt;
    fieldNames: {&lt;br /&gt;
		// businessId&lt;br /&gt;
		// organizationId&lt;br /&gt;
		// otherPurchaseItemId&lt;br /&gt;
		// accountLinkTag // type of link: purchaseLineItem|..&lt;br /&gt;
		// accountId&lt;br /&gt;
    },&lt;br /&gt;
    identifiers: [&lt;br /&gt;
		{&lt;br /&gt;
			type: &amp;quot;partitionKey&amp;quot;,&lt;br /&gt;
			fieldNames: [&amp;quot;businessId&amp;quot;, &amp;quot;organizationId&amp;quot;, &amp;quot;otherPurchaseItemId&amp;quot;],&lt;br /&gt;
			name: &amp;quot;comAccLinkOthPurId&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
		{&lt;br /&gt;
			type: &amp;quot;sortKey&amp;quot;,&lt;br /&gt;
			fieldName: &amp;quot;accountLinkTag&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
    ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== comAccOtherPurchaseItemTypeLink ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
	objectType: &amp;quot;comAccOtherPurchaseItemTypeLink&amp;quot;,&lt;br /&gt;
    generatedBy: &amp;quot;userGenerated&amp;quot;,&lt;br /&gt;
	canDelete: false,&lt;br /&gt;
	belongTo: {&lt;br /&gt;
		serviceTag: &amp;quot;CommerceAccountingLink&amp;quot;,&lt;br /&gt;
		objectType: &amp;quot;comAccLinkByBusiness&amp;quot;&lt;br /&gt;
	},&lt;br /&gt;
	addOnDataStructure: [],&lt;br /&gt;
	storageResources: {&lt;br /&gt;
		&amp;quot;dynamo&amp;quot;: {&lt;br /&gt;
			&amp;quot;storageType&amp;quot;: &amp;quot;dynamoDB&amp;quot;,&lt;br /&gt;
			&amp;quot;tableName&amp;quot;: &amp;quot;comAccOtherPurchaseItemTypeLink&amp;quot;,&lt;br /&gt;
		}&lt;br /&gt;
    },&lt;br /&gt;
    fieldNames: {&lt;br /&gt;
		// businessId&lt;br /&gt;
		// organizationId&lt;br /&gt;
		// otherPurchaseItemType // standard&lt;br /&gt;
		// accountLinkTag // type of link: purchaseLineItem|..&lt;br /&gt;
		// accountId&lt;br /&gt;
    },&lt;br /&gt;
    identifiers: [&lt;br /&gt;
		{&lt;br /&gt;
			type: &amp;quot;partitionKey&amp;quot;,&lt;br /&gt;
			fieldNames: [&amp;quot;businessId&amp;quot;, &amp;quot;organizationId&amp;quot;, &amp;quot;otherPurchaseItemType&amp;quot;],&lt;br /&gt;
			name: &amp;quot;comAccLinkOthPurTypId&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
		{&lt;br /&gt;
			type: &amp;quot;sortKey&amp;quot;,&lt;br /&gt;
			fieldName: &amp;quot;accountLinkTag&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
    ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Relationships ==&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
= flowSchemas =&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
= Working documents =&lt;br /&gt;
&lt;br /&gt;
[[:Category:Working_documents - CommerceAccounting Other Purchase Item| CommerceAccounting Other Purchase Item]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Backend services| CommerceAccounting Other Purchase Item]]&lt;/div&gt;</summary>
		<author><name>Mint</name></author>
	</entry>
	<entry>
		<id>https://izara.io/wiki/index.php?title=Service_-_CommerceAccounting_Vendor&amp;diff=4557</id>
		<title>Service - CommerceAccounting Vendor</title>
		<link rel="alternate" type="text/html" href="https://izara.io/wiki/index.php?title=Service_-_CommerceAccounting_Vendor&amp;diff=4557"/>
		<updated>2026-08-10T03:50:12Z</updated>

		<summary type="html">&lt;p&gt;Mint: /* comAccVendorDefaultLink */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Overview =&lt;br /&gt;
&lt;br /&gt;
Connects each vendor to their Accounting accounts, such as accountsPayable&lt;br /&gt;
&lt;br /&gt;
= Repository =&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
= Object Schemas =&lt;br /&gt;
; Additional Information: [[Per Service Schemas]]&lt;br /&gt;
&lt;br /&gt;
== comAccVendorLink ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
	objectType: &amp;quot;comAccVendorLink&amp;quot;,&lt;br /&gt;
    generatedBy: &amp;quot;userGenerated&amp;quot;,&lt;br /&gt;
	canDelete: false,&lt;br /&gt;
	belongTo: {&lt;br /&gt;
		serviceTag: &amp;quot;CommerceAccountingLink&amp;quot;,&lt;br /&gt;
		objectType: &amp;quot;comAccLinkByBusiness&amp;quot;&lt;br /&gt;
	},&lt;br /&gt;
	addOnDataStructure: [],&lt;br /&gt;
	storageResources: {&lt;br /&gt;
		&amp;quot;dynamo&amp;quot;: {&lt;br /&gt;
			&amp;quot;storageType&amp;quot;: &amp;quot;dynamoDB&amp;quot;,&lt;br /&gt;
			&amp;quot;tableName&amp;quot;: &amp;quot;comAccVendorLink&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
       &amp;quot;myGraph&amp;quot;: {&lt;br /&gt;
            &amp;quot;storageType&amp;quot;: &amp;quot;graph&amp;quot;,&lt;br /&gt;
            &amp;quot;graphServerTag&amp;quot;: &amp;quot;GraphHandler&amp;quot;&lt;br /&gt;
       }&lt;br /&gt;
    },&lt;br /&gt;
    fieldNames: {&lt;br /&gt;
		// businessId&lt;br /&gt;
		// organizationId&lt;br /&gt;
		// vendorId&lt;br /&gt;
		// accountLinkTag // type of link: accountsPayable|..&lt;br /&gt;
		// accountId&lt;br /&gt;
    },&lt;br /&gt;
    identifiers: [&lt;br /&gt;
		{&lt;br /&gt;
			type: &amp;quot;partitionKey&amp;quot;,&lt;br /&gt;
			fieldNames: [&amp;quot;businessId&amp;quot;, &amp;quot;organizationId&amp;quot;, &amp;quot;vendorId&amp;quot;],&lt;br /&gt;
			name: &amp;quot;comAccLinkVenId&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
		{&lt;br /&gt;
			type: &amp;quot;sortKey&amp;quot;,&lt;br /&gt;
			fieldName: &amp;quot;accountLinkTag&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
    ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== comAccVendorDefaultLink ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
	objectType: &amp;quot;comAccVendorDefaultLink&amp;quot;,&lt;br /&gt;
    generatedBy: &amp;quot;userGenerated&amp;quot;,&lt;br /&gt;
	canDelete: false,&lt;br /&gt;
	belongTo: {&lt;br /&gt;
		serviceTag: &amp;quot;CommerceAccountingLink&amp;quot;,&lt;br /&gt;
		objectType: &amp;quot;comAccLinkByBusiness&amp;quot;&lt;br /&gt;
	},&lt;br /&gt;
	addOnDataStructure: [],&lt;br /&gt;
	storageResources: {&lt;br /&gt;
		&amp;quot;dynamo&amp;quot;: {&lt;br /&gt;
			&amp;quot;storageType&amp;quot;: &amp;quot;dynamoDB&amp;quot;,&lt;br /&gt;
			&amp;quot;tableName&amp;quot;: &amp;quot;comAccVendorDefaultLink&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
       &amp;quot;myGraph&amp;quot;: {&lt;br /&gt;
            &amp;quot;storageType&amp;quot;: &amp;quot;graph&amp;quot;,&lt;br /&gt;
            &amp;quot;graphServerTag&amp;quot;: &amp;quot;GraphHandler&amp;quot;&lt;br /&gt;
       }&lt;br /&gt;
    },&lt;br /&gt;
    fieldNames: {&lt;br /&gt;
		// businessId&lt;br /&gt;
		// organizationId&lt;br /&gt;
		// accountLinkTag // type of link: accountsPayable|..&lt;br /&gt;
		// accountId&lt;br /&gt;
    },&lt;br /&gt;
    identifiers: [&lt;br /&gt;
		{&lt;br /&gt;
			type: &amp;quot;partitionKey&amp;quot;,&lt;br /&gt;
			fieldNames: [&amp;quot;businessId&amp;quot;, &amp;quot;organizationId&amp;quot;],&lt;br /&gt;
			name: &amp;quot;comAccLinkId&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
		{&lt;br /&gt;
			type: &amp;quot;sortKey&amp;quot;,&lt;br /&gt;
			fieldName: &amp;quot;accountLinkTag&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
    ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Relationships ==&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
= flowSchemas =&lt;br /&gt;
&lt;br /&gt;
== createSale ==&lt;br /&gt;
&lt;br /&gt;
* creates a Accounting AccountsPayable account and a link in comAccVendorAccountsPayableLink&lt;br /&gt;
&lt;br /&gt;
= accountLinkTag =&lt;br /&gt;
&lt;br /&gt;
== accountsPayable ==&lt;br /&gt;
&lt;br /&gt;
* when receive bill from vendor and before payment made&lt;br /&gt;
&lt;br /&gt;
== goodsReceivedNotInvoiced ==&lt;br /&gt;
&lt;br /&gt;
* clearing account used when receive goods from vendor before recieving invoice&lt;br /&gt;
&lt;br /&gt;
== purchasesInTransit ==&lt;br /&gt;
&lt;br /&gt;
* clearing account used when receive invoice from vendor before recieving goods&lt;br /&gt;
&lt;br /&gt;
= Working documents =&lt;br /&gt;
&lt;br /&gt;
[[:Category:Working_documents - CommerceAccounting Vendor| CommerceAccounting Vendor]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Backend services| CommerceAccounting Vendor]]&lt;/div&gt;</summary>
		<author><name>Mint</name></author>
	</entry>
	<entry>
		<id>https://izara.io/wiki/index.php?title=Service_-_CommerceAccounting_Vendor&amp;diff=4556</id>
		<title>Service - CommerceAccounting Vendor</title>
		<link rel="alternate" type="text/html" href="https://izara.io/wiki/index.php?title=Service_-_CommerceAccounting_Vendor&amp;diff=4556"/>
		<updated>2026-08-10T03:50:06Z</updated>

		<summary type="html">&lt;p&gt;Mint: /* comAccVendorLink */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Overview =&lt;br /&gt;
&lt;br /&gt;
Connects each vendor to their Accounting accounts, such as accountsPayable&lt;br /&gt;
&lt;br /&gt;
= Repository =&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
= Object Schemas =&lt;br /&gt;
; Additional Information: [[Per Service Schemas]]&lt;br /&gt;
&lt;br /&gt;
== comAccVendorLink ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
	objectType: &amp;quot;comAccVendorLink&amp;quot;,&lt;br /&gt;
    generatedBy: &amp;quot;userGenerated&amp;quot;,&lt;br /&gt;
	canDelete: false,&lt;br /&gt;
	belongTo: {&lt;br /&gt;
		serviceTag: &amp;quot;CommerceAccountingLink&amp;quot;,&lt;br /&gt;
		objectType: &amp;quot;comAccLinkByBusiness&amp;quot;&lt;br /&gt;
	},&lt;br /&gt;
	addOnDataStructure: [],&lt;br /&gt;
	storageResources: {&lt;br /&gt;
		&amp;quot;dynamo&amp;quot;: {&lt;br /&gt;
			&amp;quot;storageType&amp;quot;: &amp;quot;dynamoDB&amp;quot;,&lt;br /&gt;
			&amp;quot;tableName&amp;quot;: &amp;quot;comAccVendorLink&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
       &amp;quot;myGraph&amp;quot;: {&lt;br /&gt;
            &amp;quot;storageType&amp;quot;: &amp;quot;graph&amp;quot;,&lt;br /&gt;
            &amp;quot;graphServerTag&amp;quot;: &amp;quot;GraphHandler&amp;quot;&lt;br /&gt;
       }&lt;br /&gt;
    },&lt;br /&gt;
    fieldNames: {&lt;br /&gt;
		// businessId&lt;br /&gt;
		// organizationId&lt;br /&gt;
		// vendorId&lt;br /&gt;
		// accountLinkTag // type of link: accountsPayable|..&lt;br /&gt;
		// accountId&lt;br /&gt;
    },&lt;br /&gt;
    identifiers: [&lt;br /&gt;
		{&lt;br /&gt;
			type: &amp;quot;partitionKey&amp;quot;,&lt;br /&gt;
			fieldNames: [&amp;quot;businessId&amp;quot;, &amp;quot;organizationId&amp;quot;, &amp;quot;vendorId&amp;quot;],&lt;br /&gt;
			name: &amp;quot;comAccLinkVenId&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
		{&lt;br /&gt;
			type: &amp;quot;sortKey&amp;quot;,&lt;br /&gt;
			fieldName: &amp;quot;accountLinkTag&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
    ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== comAccVendorDefaultLink ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
	objectType: &amp;quot;comAccVendorDefaultLink&amp;quot;,&lt;br /&gt;
    generatedBy: &amp;quot;userGenerated&amp;quot;,&lt;br /&gt;
	canDelete: false,&lt;br /&gt;
	belongTo: {&lt;br /&gt;
		serviceTag: &amp;quot;CommerceAccountingLink&amp;quot;,&lt;br /&gt;
		objectType: &amp;quot;comAccLinkByBusiness&amp;quot;&lt;br /&gt;
	},&lt;br /&gt;
	addOnDataStructure: [],&lt;br /&gt;
	storageResources: {&lt;br /&gt;
		&amp;quot;dynamo&amp;quot;: {&lt;br /&gt;
			&amp;quot;storageType&amp;quot;: &amp;quot;dynamoDB&amp;quot;,&lt;br /&gt;
			&amp;quot;tableName&amp;quot;: &amp;quot;comAccVendorDefaultLink&amp;quot;,&lt;br /&gt;
		}&lt;br /&gt;
    },&lt;br /&gt;
    fieldNames: {&lt;br /&gt;
		// businessId&lt;br /&gt;
		// organizationId&lt;br /&gt;
		// accountLinkTag // type of link: accountsPayable|..&lt;br /&gt;
		// accountId&lt;br /&gt;
    },&lt;br /&gt;
    identifiers: [&lt;br /&gt;
		{&lt;br /&gt;
			type: &amp;quot;partitionKey&amp;quot;,&lt;br /&gt;
			fieldNames: [&amp;quot;businessId&amp;quot;, &amp;quot;organizationId&amp;quot;],&lt;br /&gt;
			name: &amp;quot;comAccLinkId&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
		{&lt;br /&gt;
			type: &amp;quot;sortKey&amp;quot;,&lt;br /&gt;
			fieldName: &amp;quot;accountLinkTag&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
    ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Relationships ==&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
= flowSchemas =&lt;br /&gt;
&lt;br /&gt;
== createSale ==&lt;br /&gt;
&lt;br /&gt;
* creates a Accounting AccountsPayable account and a link in comAccVendorAccountsPayableLink&lt;br /&gt;
&lt;br /&gt;
= accountLinkTag =&lt;br /&gt;
&lt;br /&gt;
== accountsPayable ==&lt;br /&gt;
&lt;br /&gt;
* when receive bill from vendor and before payment made&lt;br /&gt;
&lt;br /&gt;
== goodsReceivedNotInvoiced ==&lt;br /&gt;
&lt;br /&gt;
* clearing account used when receive goods from vendor before recieving invoice&lt;br /&gt;
&lt;br /&gt;
== purchasesInTransit ==&lt;br /&gt;
&lt;br /&gt;
* clearing account used when receive invoice from vendor before recieving goods&lt;br /&gt;
&lt;br /&gt;
= Working documents =&lt;br /&gt;
&lt;br /&gt;
[[:Category:Working_documents - CommerceAccounting Vendor| CommerceAccounting Vendor]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Backend services| CommerceAccounting Vendor]]&lt;/div&gt;</summary>
		<author><name>Mint</name></author>
	</entry>
	<entry>
		<id>https://izara.io/wiki/index.php?title=Service_-_CommerceAccounting_Inventory&amp;diff=4555</id>
		<title>Service - CommerceAccounting Inventory</title>
		<link rel="alternate" type="text/html" href="https://izara.io/wiki/index.php?title=Service_-_CommerceAccounting_Inventory&amp;diff=4555"/>
		<updated>2026-08-10T03:49:04Z</updated>

		<summary type="html">&lt;p&gt;Mint: /* comAccInventoryTypeLink */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Overview =&lt;br /&gt;
&lt;br /&gt;
Links Inventory objects to Accounting structures.&lt;br /&gt;
&lt;br /&gt;
= Repository =&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
= Object Schemas =&lt;br /&gt;
; Additional Information: [[Per Service Schemas]]&lt;br /&gt;
&lt;br /&gt;
== comAccInventoryLink ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
	objectType: &amp;quot;comAccInventoryLink&amp;quot;,&lt;br /&gt;
	canDelete: false,&lt;br /&gt;
	belongTo: {&lt;br /&gt;
		serviceTag: &amp;quot;CommerceAccountingLink&amp;quot;,&lt;br /&gt;
		objectType: &amp;quot;comAccLinkByBusiness&amp;quot;&lt;br /&gt;
	},&lt;br /&gt;
	addOnDataStructure: [],&lt;br /&gt;
	storageResources: {&lt;br /&gt;
		&amp;quot;dynamo&amp;quot;: {&lt;br /&gt;
			&amp;quot;storageType&amp;quot;: &amp;quot;dynamoDB&amp;quot;,&lt;br /&gt;
			&amp;quot;tableName&amp;quot;: &amp;quot;comAccInventoryLink&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
       &amp;quot;myGraph&amp;quot;: {&lt;br /&gt;
            &amp;quot;storageType&amp;quot;: &amp;quot;graph&amp;quot;,&lt;br /&gt;
            &amp;quot;graphServerTag&amp;quot;: &amp;quot;GraphHandler&amp;quot;&lt;br /&gt;
      }&lt;br /&gt;
    },&lt;br /&gt;
    fieldNames: {&lt;br /&gt;
		// businessId&lt;br /&gt;
		// organizationId&lt;br /&gt;
		// inventoryId&lt;br /&gt;
		// accountLinkTag // type of link: purchaseLineItem|..&lt;br /&gt;
		// accountId&lt;br /&gt;
    },&lt;br /&gt;
    identifiers: [&lt;br /&gt;
		{&lt;br /&gt;
			type: &amp;quot;partitionKey&amp;quot;,&lt;br /&gt;
			fieldNames: [&amp;quot;businessId&amp;quot;, &amp;quot;organizationId&amp;quot;, &amp;quot;inventoryId&amp;quot;],&lt;br /&gt;
			name: &amp;quot;comAccLinkInvId&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
		{&lt;br /&gt;
			type: &amp;quot;sortKey&amp;quot;,&lt;br /&gt;
			fieldName: &amp;quot;accountLinkTag&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
    ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== comAccInventoryLocationLink ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
	objectType: &amp;quot;comAccInventoryLocationLink&amp;quot;,&lt;br /&gt;
	canDelete: false,&lt;br /&gt;
	belongTo: {&lt;br /&gt;
		serviceTag: &amp;quot;CommerceAccountingLink&amp;quot;,&lt;br /&gt;
		objectType: &amp;quot;comAccLinkByBusiness&amp;quot;&lt;br /&gt;
	},&lt;br /&gt;
	addOnDataStructure: [],&lt;br /&gt;
	storageResources: {&lt;br /&gt;
		&amp;quot;dynamo&amp;quot;: {&lt;br /&gt;
			&amp;quot;storageType&amp;quot;: &amp;quot;dynamoDB&amp;quot;,&lt;br /&gt;
			&amp;quot;tableName&amp;quot;: &amp;quot;comAccInventoryLocationLink&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
        &amp;quot;myGraph&amp;quot;: {&lt;br /&gt;
            &amp;quot;storageType&amp;quot;: &amp;quot;graph&amp;quot;,&lt;br /&gt;
            &amp;quot;graphServerTag&amp;quot;: &amp;quot;GraphHandler&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
    },&lt;br /&gt;
    fieldNames: {&lt;br /&gt;
		// businessId&lt;br /&gt;
		// organizationId&lt;br /&gt;
		// inventoryLocationId&lt;br /&gt;
		// accountLinkTag // type of link: purchaseLineItem|..&lt;br /&gt;
		// accountId&lt;br /&gt;
    },&lt;br /&gt;
    identifiers: [&lt;br /&gt;
		{&lt;br /&gt;
			type: &amp;quot;partitionKey&amp;quot;,&lt;br /&gt;
			fieldNames: [&amp;quot;businessId&amp;quot;, &amp;quot;organizationId&amp;quot;, &amp;quot;inventoryLocationId&amp;quot;],&lt;br /&gt;
			name: &amp;quot;comAccLinkInvLocId&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
		{&lt;br /&gt;
			type: &amp;quot;sortKey&amp;quot;,&lt;br /&gt;
			fieldName: &amp;quot;accountLinkTag&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
    ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== comAccInventoryTemplateLink ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
	objectType: &amp;quot;comAccInventoryTemplateLink&amp;quot;,&lt;br /&gt;
	canDelete: false,&lt;br /&gt;
	belongTo: {&lt;br /&gt;
		serviceTag: &amp;quot;CommerceAccountingLink&amp;quot;,&lt;br /&gt;
		objectType: &amp;quot;comAccLinkByBusiness&amp;quot;&lt;br /&gt;
	},&lt;br /&gt;
	addOnDataStructure: [],&lt;br /&gt;
	storageResources: {&lt;br /&gt;
		&amp;quot;dynamo&amp;quot;: {&lt;br /&gt;
			&amp;quot;storageType&amp;quot;: &amp;quot;dynamoDB&amp;quot;,&lt;br /&gt;
			&amp;quot;tableName&amp;quot;: &amp;quot;comAccInventoryTemplateLink&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
       &amp;quot;myGraph&amp;quot;: {&lt;br /&gt;
            &amp;quot;storageType&amp;quot;: &amp;quot;graph&amp;quot;,&lt;br /&gt;
            &amp;quot;graphServerTag&amp;quot;: &amp;quot;GraphHandler&amp;quot;&lt;br /&gt;
       }&lt;br /&gt;
    },&lt;br /&gt;
    fieldNames: {&lt;br /&gt;
		// businessId&lt;br /&gt;
		// organizationId&lt;br /&gt;
		// inventoryTemplateId&lt;br /&gt;
		// accountLinkTag // type of link: purchaseLineItem|..&lt;br /&gt;
		// accountId&lt;br /&gt;
    },&lt;br /&gt;
    identifiers: [&lt;br /&gt;
		{&lt;br /&gt;
			type: &amp;quot;partitionKey&amp;quot;,&lt;br /&gt;
			fieldNames: [&amp;quot;businessId&amp;quot;, &amp;quot;organizationId&amp;quot;, &amp;quot;inventoryTemplateId&amp;quot;],&lt;br /&gt;
			name: &amp;quot;comAccLinkInvTemId&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
		{&lt;br /&gt;
			type: &amp;quot;sortKey&amp;quot;,&lt;br /&gt;
			fieldName: &amp;quot;accountLinkTag&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
    ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== comAccInventoryTypeLink ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
	objectType: &amp;quot;comAccInventoryTypeLink&amp;quot;,&lt;br /&gt;
	canDelete: false,&lt;br /&gt;
	belongTo: {&lt;br /&gt;
		serviceTag: &amp;quot;CommerceAccountingLink&amp;quot;,&lt;br /&gt;
		objectType: &amp;quot;comAccLinkByBusiness&amp;quot;&lt;br /&gt;
	},&lt;br /&gt;
	addOnDataStructure: [],&lt;br /&gt;
	storageResources: {&lt;br /&gt;
		&amp;quot;dynamo&amp;quot;: {&lt;br /&gt;
			&amp;quot;storageType&amp;quot;: &amp;quot;dynamoDB&amp;quot;,&lt;br /&gt;
			&amp;quot;tableName&amp;quot;: &amp;quot;comAccInventoryTypeLink&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
       &amp;quot;myGraph&amp;quot;: {&lt;br /&gt;
            &amp;quot;storageType&amp;quot;: &amp;quot;graph&amp;quot;,&lt;br /&gt;
            &amp;quot;graphServerTag&amp;quot;: &amp;quot;GraphHandler&amp;quot;&lt;br /&gt;
       }&lt;br /&gt;
    },&lt;br /&gt;
    fieldNames: {&lt;br /&gt;
		// businessId&lt;br /&gt;
		// organizationId&lt;br /&gt;
		// inventoryType // goods|intangibleGoods|rawMaterial|asset|intangibleAsset&lt;br /&gt;
		// accountLinkTag // type of link: purchaseLineItem|..&lt;br /&gt;
		// accountId&lt;br /&gt;
    },&lt;br /&gt;
    identifiers: [&lt;br /&gt;
		{&lt;br /&gt;
			type: &amp;quot;partitionKey&amp;quot;,&lt;br /&gt;
			fieldNames: [&amp;quot;businessId&amp;quot;, &amp;quot;organizationId&amp;quot;, &amp;quot;inventoryType&amp;quot;],&lt;br /&gt;
			name: &amp;quot;comAccLinkInvTypId&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
		{&lt;br /&gt;
			type: &amp;quot;sortKey&amp;quot;,&lt;br /&gt;
			fieldName: &amp;quot;accountLinkTag&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
    ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Relationships ==&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
= flowSchemas =&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
= Working documents =&lt;br /&gt;
&lt;br /&gt;
[[:Category:Working_documents - CommerceAccounting Inventory| CommerceAccounting Inventory]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Backend services| CommerceAccounting Inventory]]&lt;/div&gt;</summary>
		<author><name>Mint</name></author>
	</entry>
	<entry>
		<id>https://izara.io/wiki/index.php?title=Service_-_CommerceAccounting_Inventory&amp;diff=4554</id>
		<title>Service - CommerceAccounting Inventory</title>
		<link rel="alternate" type="text/html" href="https://izara.io/wiki/index.php?title=Service_-_CommerceAccounting_Inventory&amp;diff=4554"/>
		<updated>2026-08-10T03:48:56Z</updated>

		<summary type="html">&lt;p&gt;Mint: /* comAccInventoryTemplateLink */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Overview =&lt;br /&gt;
&lt;br /&gt;
Links Inventory objects to Accounting structures.&lt;br /&gt;
&lt;br /&gt;
= Repository =&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
= Object Schemas =&lt;br /&gt;
; Additional Information: [[Per Service Schemas]]&lt;br /&gt;
&lt;br /&gt;
== comAccInventoryLink ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
	objectType: &amp;quot;comAccInventoryLink&amp;quot;,&lt;br /&gt;
	canDelete: false,&lt;br /&gt;
	belongTo: {&lt;br /&gt;
		serviceTag: &amp;quot;CommerceAccountingLink&amp;quot;,&lt;br /&gt;
		objectType: &amp;quot;comAccLinkByBusiness&amp;quot;&lt;br /&gt;
	},&lt;br /&gt;
	addOnDataStructure: [],&lt;br /&gt;
	storageResources: {&lt;br /&gt;
		&amp;quot;dynamo&amp;quot;: {&lt;br /&gt;
			&amp;quot;storageType&amp;quot;: &amp;quot;dynamoDB&amp;quot;,&lt;br /&gt;
			&amp;quot;tableName&amp;quot;: &amp;quot;comAccInventoryLink&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
       &amp;quot;myGraph&amp;quot;: {&lt;br /&gt;
            &amp;quot;storageType&amp;quot;: &amp;quot;graph&amp;quot;,&lt;br /&gt;
            &amp;quot;graphServerTag&amp;quot;: &amp;quot;GraphHandler&amp;quot;&lt;br /&gt;
      }&lt;br /&gt;
    },&lt;br /&gt;
    fieldNames: {&lt;br /&gt;
		// businessId&lt;br /&gt;
		// organizationId&lt;br /&gt;
		// inventoryId&lt;br /&gt;
		// accountLinkTag // type of link: purchaseLineItem|..&lt;br /&gt;
		// accountId&lt;br /&gt;
    },&lt;br /&gt;
    identifiers: [&lt;br /&gt;
		{&lt;br /&gt;
			type: &amp;quot;partitionKey&amp;quot;,&lt;br /&gt;
			fieldNames: [&amp;quot;businessId&amp;quot;, &amp;quot;organizationId&amp;quot;, &amp;quot;inventoryId&amp;quot;],&lt;br /&gt;
			name: &amp;quot;comAccLinkInvId&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
		{&lt;br /&gt;
			type: &amp;quot;sortKey&amp;quot;,&lt;br /&gt;
			fieldName: &amp;quot;accountLinkTag&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
    ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== comAccInventoryLocationLink ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
	objectType: &amp;quot;comAccInventoryLocationLink&amp;quot;,&lt;br /&gt;
	canDelete: false,&lt;br /&gt;
	belongTo: {&lt;br /&gt;
		serviceTag: &amp;quot;CommerceAccountingLink&amp;quot;,&lt;br /&gt;
		objectType: &amp;quot;comAccLinkByBusiness&amp;quot;&lt;br /&gt;
	},&lt;br /&gt;
	addOnDataStructure: [],&lt;br /&gt;
	storageResources: {&lt;br /&gt;
		&amp;quot;dynamo&amp;quot;: {&lt;br /&gt;
			&amp;quot;storageType&amp;quot;: &amp;quot;dynamoDB&amp;quot;,&lt;br /&gt;
			&amp;quot;tableName&amp;quot;: &amp;quot;comAccInventoryLocationLink&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
        &amp;quot;myGraph&amp;quot;: {&lt;br /&gt;
            &amp;quot;storageType&amp;quot;: &amp;quot;graph&amp;quot;,&lt;br /&gt;
            &amp;quot;graphServerTag&amp;quot;: &amp;quot;GraphHandler&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
    },&lt;br /&gt;
    fieldNames: {&lt;br /&gt;
		// businessId&lt;br /&gt;
		// organizationId&lt;br /&gt;
		// inventoryLocationId&lt;br /&gt;
		// accountLinkTag // type of link: purchaseLineItem|..&lt;br /&gt;
		// accountId&lt;br /&gt;
    },&lt;br /&gt;
    identifiers: [&lt;br /&gt;
		{&lt;br /&gt;
			type: &amp;quot;partitionKey&amp;quot;,&lt;br /&gt;
			fieldNames: [&amp;quot;businessId&amp;quot;, &amp;quot;organizationId&amp;quot;, &amp;quot;inventoryLocationId&amp;quot;],&lt;br /&gt;
			name: &amp;quot;comAccLinkInvLocId&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
		{&lt;br /&gt;
			type: &amp;quot;sortKey&amp;quot;,&lt;br /&gt;
			fieldName: &amp;quot;accountLinkTag&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
    ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== comAccInventoryTemplateLink ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
	objectType: &amp;quot;comAccInventoryTemplateLink&amp;quot;,&lt;br /&gt;
	canDelete: false,&lt;br /&gt;
	belongTo: {&lt;br /&gt;
		serviceTag: &amp;quot;CommerceAccountingLink&amp;quot;,&lt;br /&gt;
		objectType: &amp;quot;comAccLinkByBusiness&amp;quot;&lt;br /&gt;
	},&lt;br /&gt;
	addOnDataStructure: [],&lt;br /&gt;
	storageResources: {&lt;br /&gt;
		&amp;quot;dynamo&amp;quot;: {&lt;br /&gt;
			&amp;quot;storageType&amp;quot;: &amp;quot;dynamoDB&amp;quot;,&lt;br /&gt;
			&amp;quot;tableName&amp;quot;: &amp;quot;comAccInventoryTemplateLink&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
       &amp;quot;myGraph&amp;quot;: {&lt;br /&gt;
            &amp;quot;storageType&amp;quot;: &amp;quot;graph&amp;quot;,&lt;br /&gt;
            &amp;quot;graphServerTag&amp;quot;: &amp;quot;GraphHandler&amp;quot;&lt;br /&gt;
       }&lt;br /&gt;
    },&lt;br /&gt;
    fieldNames: {&lt;br /&gt;
		// businessId&lt;br /&gt;
		// organizationId&lt;br /&gt;
		// inventoryTemplateId&lt;br /&gt;
		// accountLinkTag // type of link: purchaseLineItem|..&lt;br /&gt;
		// accountId&lt;br /&gt;
    },&lt;br /&gt;
    identifiers: [&lt;br /&gt;
		{&lt;br /&gt;
			type: &amp;quot;partitionKey&amp;quot;,&lt;br /&gt;
			fieldNames: [&amp;quot;businessId&amp;quot;, &amp;quot;organizationId&amp;quot;, &amp;quot;inventoryTemplateId&amp;quot;],&lt;br /&gt;
			name: &amp;quot;comAccLinkInvTemId&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
		{&lt;br /&gt;
			type: &amp;quot;sortKey&amp;quot;,&lt;br /&gt;
			fieldName: &amp;quot;accountLinkTag&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
    ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== comAccInventoryTypeLink ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
	objectType: &amp;quot;comAccInventoryTypeLink&amp;quot;,&lt;br /&gt;
	canDelete: false,&lt;br /&gt;
	belongTo: {&lt;br /&gt;
		serviceTag: &amp;quot;CommerceAccountingLink&amp;quot;,&lt;br /&gt;
		objectType: &amp;quot;comAccLinkByBusiness&amp;quot;&lt;br /&gt;
	},&lt;br /&gt;
	addOnDataStructure: [],&lt;br /&gt;
	storageResources: {&lt;br /&gt;
		&amp;quot;dynamo&amp;quot;: {&lt;br /&gt;
			&amp;quot;storageType&amp;quot;: &amp;quot;dynamoDB&amp;quot;,&lt;br /&gt;
			&amp;quot;tableName&amp;quot;: &amp;quot;comAccInventoryTypeLink&amp;quot;,&lt;br /&gt;
		}&lt;br /&gt;
    },&lt;br /&gt;
    fieldNames: {&lt;br /&gt;
		// businessId&lt;br /&gt;
		// organizationId&lt;br /&gt;
		// inventoryType // goods|intangibleGoods|rawMaterial|asset|intangibleAsset&lt;br /&gt;
		// accountLinkTag // type of link: purchaseLineItem|..&lt;br /&gt;
		// accountId&lt;br /&gt;
    },&lt;br /&gt;
    identifiers: [&lt;br /&gt;
		{&lt;br /&gt;
			type: &amp;quot;partitionKey&amp;quot;,&lt;br /&gt;
			fieldNames: [&amp;quot;businessId&amp;quot;, &amp;quot;organizationId&amp;quot;, &amp;quot;inventoryType&amp;quot;],&lt;br /&gt;
			name: &amp;quot;comAccLinkInvTypId&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
		{&lt;br /&gt;
			type: &amp;quot;sortKey&amp;quot;,&lt;br /&gt;
			fieldName: &amp;quot;accountLinkTag&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
    ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Relationships ==&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
= flowSchemas =&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
= Working documents =&lt;br /&gt;
&lt;br /&gt;
[[:Category:Working_documents - CommerceAccounting Inventory| CommerceAccounting Inventory]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Backend services| CommerceAccounting Inventory]]&lt;/div&gt;</summary>
		<author><name>Mint</name></author>
	</entry>
	<entry>
		<id>https://izara.io/wiki/index.php?title=Service_-_CommerceAccounting_Inventory&amp;diff=4553</id>
		<title>Service - CommerceAccounting Inventory</title>
		<link rel="alternate" type="text/html" href="https://izara.io/wiki/index.php?title=Service_-_CommerceAccounting_Inventory&amp;diff=4553"/>
		<updated>2026-08-10T03:48:45Z</updated>

		<summary type="html">&lt;p&gt;Mint: /* comAccInventoryLocationLink */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Overview =&lt;br /&gt;
&lt;br /&gt;
Links Inventory objects to Accounting structures.&lt;br /&gt;
&lt;br /&gt;
= Repository =&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
= Object Schemas =&lt;br /&gt;
; Additional Information: [[Per Service Schemas]]&lt;br /&gt;
&lt;br /&gt;
== comAccInventoryLink ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
	objectType: &amp;quot;comAccInventoryLink&amp;quot;,&lt;br /&gt;
	canDelete: false,&lt;br /&gt;
	belongTo: {&lt;br /&gt;
		serviceTag: &amp;quot;CommerceAccountingLink&amp;quot;,&lt;br /&gt;
		objectType: &amp;quot;comAccLinkByBusiness&amp;quot;&lt;br /&gt;
	},&lt;br /&gt;
	addOnDataStructure: [],&lt;br /&gt;
	storageResources: {&lt;br /&gt;
		&amp;quot;dynamo&amp;quot;: {&lt;br /&gt;
			&amp;quot;storageType&amp;quot;: &amp;quot;dynamoDB&amp;quot;,&lt;br /&gt;
			&amp;quot;tableName&amp;quot;: &amp;quot;comAccInventoryLink&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
       &amp;quot;myGraph&amp;quot;: {&lt;br /&gt;
            &amp;quot;storageType&amp;quot;: &amp;quot;graph&amp;quot;,&lt;br /&gt;
            &amp;quot;graphServerTag&amp;quot;: &amp;quot;GraphHandler&amp;quot;&lt;br /&gt;
      }&lt;br /&gt;
    },&lt;br /&gt;
    fieldNames: {&lt;br /&gt;
		// businessId&lt;br /&gt;
		// organizationId&lt;br /&gt;
		// inventoryId&lt;br /&gt;
		// accountLinkTag // type of link: purchaseLineItem|..&lt;br /&gt;
		// accountId&lt;br /&gt;
    },&lt;br /&gt;
    identifiers: [&lt;br /&gt;
		{&lt;br /&gt;
			type: &amp;quot;partitionKey&amp;quot;,&lt;br /&gt;
			fieldNames: [&amp;quot;businessId&amp;quot;, &amp;quot;organizationId&amp;quot;, &amp;quot;inventoryId&amp;quot;],&lt;br /&gt;
			name: &amp;quot;comAccLinkInvId&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
		{&lt;br /&gt;
			type: &amp;quot;sortKey&amp;quot;,&lt;br /&gt;
			fieldName: &amp;quot;accountLinkTag&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
    ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== comAccInventoryLocationLink ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
	objectType: &amp;quot;comAccInventoryLocationLink&amp;quot;,&lt;br /&gt;
	canDelete: false,&lt;br /&gt;
	belongTo: {&lt;br /&gt;
		serviceTag: &amp;quot;CommerceAccountingLink&amp;quot;,&lt;br /&gt;
		objectType: &amp;quot;comAccLinkByBusiness&amp;quot;&lt;br /&gt;
	},&lt;br /&gt;
	addOnDataStructure: [],&lt;br /&gt;
	storageResources: {&lt;br /&gt;
		&amp;quot;dynamo&amp;quot;: {&lt;br /&gt;
			&amp;quot;storageType&amp;quot;: &amp;quot;dynamoDB&amp;quot;,&lt;br /&gt;
			&amp;quot;tableName&amp;quot;: &amp;quot;comAccInventoryLocationLink&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
        &amp;quot;myGraph&amp;quot;: {&lt;br /&gt;
            &amp;quot;storageType&amp;quot;: &amp;quot;graph&amp;quot;,&lt;br /&gt;
            &amp;quot;graphServerTag&amp;quot;: &amp;quot;GraphHandler&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
    },&lt;br /&gt;
    fieldNames: {&lt;br /&gt;
		// businessId&lt;br /&gt;
		// organizationId&lt;br /&gt;
		// inventoryLocationId&lt;br /&gt;
		// accountLinkTag // type of link: purchaseLineItem|..&lt;br /&gt;
		// accountId&lt;br /&gt;
    },&lt;br /&gt;
    identifiers: [&lt;br /&gt;
		{&lt;br /&gt;
			type: &amp;quot;partitionKey&amp;quot;,&lt;br /&gt;
			fieldNames: [&amp;quot;businessId&amp;quot;, &amp;quot;organizationId&amp;quot;, &amp;quot;inventoryLocationId&amp;quot;],&lt;br /&gt;
			name: &amp;quot;comAccLinkInvLocId&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
		{&lt;br /&gt;
			type: &amp;quot;sortKey&amp;quot;,&lt;br /&gt;
			fieldName: &amp;quot;accountLinkTag&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
    ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== comAccInventoryTemplateLink ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
	objectType: &amp;quot;comAccInventoryTemplateLink&amp;quot;,&lt;br /&gt;
	canDelete: false,&lt;br /&gt;
	belongTo: {&lt;br /&gt;
		serviceTag: &amp;quot;CommerceAccountingLink&amp;quot;,&lt;br /&gt;
		objectType: &amp;quot;comAccLinkByBusiness&amp;quot;&lt;br /&gt;
	},&lt;br /&gt;
	addOnDataStructure: [],&lt;br /&gt;
	storageResources: {&lt;br /&gt;
		&amp;quot;dynamo&amp;quot;: {&lt;br /&gt;
			&amp;quot;storageType&amp;quot;: &amp;quot;dynamoDB&amp;quot;,&lt;br /&gt;
			&amp;quot;tableName&amp;quot;: &amp;quot;comAccInventoryTemplateLink&amp;quot;,&lt;br /&gt;
		}&lt;br /&gt;
    },&lt;br /&gt;
    fieldNames: {&lt;br /&gt;
		// businessId&lt;br /&gt;
		// organizationId&lt;br /&gt;
		// inventoryTemplateId&lt;br /&gt;
		// accountLinkTag // type of link: purchaseLineItem|..&lt;br /&gt;
		// accountId&lt;br /&gt;
    },&lt;br /&gt;
    identifiers: [&lt;br /&gt;
		{&lt;br /&gt;
			type: &amp;quot;partitionKey&amp;quot;,&lt;br /&gt;
			fieldNames: [&amp;quot;businessId&amp;quot;, &amp;quot;organizationId&amp;quot;, &amp;quot;inventoryTemplateId&amp;quot;],&lt;br /&gt;
			name: &amp;quot;comAccLinkInvTemId&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
		{&lt;br /&gt;
			type: &amp;quot;sortKey&amp;quot;,&lt;br /&gt;
			fieldName: &amp;quot;accountLinkTag&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
    ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== comAccInventoryTypeLink ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
	objectType: &amp;quot;comAccInventoryTypeLink&amp;quot;,&lt;br /&gt;
	canDelete: false,&lt;br /&gt;
	belongTo: {&lt;br /&gt;
		serviceTag: &amp;quot;CommerceAccountingLink&amp;quot;,&lt;br /&gt;
		objectType: &amp;quot;comAccLinkByBusiness&amp;quot;&lt;br /&gt;
	},&lt;br /&gt;
	addOnDataStructure: [],&lt;br /&gt;
	storageResources: {&lt;br /&gt;
		&amp;quot;dynamo&amp;quot;: {&lt;br /&gt;
			&amp;quot;storageType&amp;quot;: &amp;quot;dynamoDB&amp;quot;,&lt;br /&gt;
			&amp;quot;tableName&amp;quot;: &amp;quot;comAccInventoryTypeLink&amp;quot;,&lt;br /&gt;
		}&lt;br /&gt;
    },&lt;br /&gt;
    fieldNames: {&lt;br /&gt;
		// businessId&lt;br /&gt;
		// organizationId&lt;br /&gt;
		// inventoryType // goods|intangibleGoods|rawMaterial|asset|intangibleAsset&lt;br /&gt;
		// accountLinkTag // type of link: purchaseLineItem|..&lt;br /&gt;
		// accountId&lt;br /&gt;
    },&lt;br /&gt;
    identifiers: [&lt;br /&gt;
		{&lt;br /&gt;
			type: &amp;quot;partitionKey&amp;quot;,&lt;br /&gt;
			fieldNames: [&amp;quot;businessId&amp;quot;, &amp;quot;organizationId&amp;quot;, &amp;quot;inventoryType&amp;quot;],&lt;br /&gt;
			name: &amp;quot;comAccLinkInvTypId&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
		{&lt;br /&gt;
			type: &amp;quot;sortKey&amp;quot;,&lt;br /&gt;
			fieldName: &amp;quot;accountLinkTag&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
    ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Relationships ==&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
= flowSchemas =&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
= Working documents =&lt;br /&gt;
&lt;br /&gt;
[[:Category:Working_documents - CommerceAccounting Inventory| CommerceAccounting Inventory]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Backend services| CommerceAccounting Inventory]]&lt;/div&gt;</summary>
		<author><name>Mint</name></author>
	</entry>
	<entry>
		<id>https://izara.io/wiki/index.php?title=Service_-_CommerceAccounting_Inventory&amp;diff=4552</id>
		<title>Service - CommerceAccounting Inventory</title>
		<link rel="alternate" type="text/html" href="https://izara.io/wiki/index.php?title=Service_-_CommerceAccounting_Inventory&amp;diff=4552"/>
		<updated>2026-08-10T03:40:21Z</updated>

		<summary type="html">&lt;p&gt;Mint: /* comAccInventoryLink */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Overview =&lt;br /&gt;
&lt;br /&gt;
Links Inventory objects to Accounting structures.&lt;br /&gt;
&lt;br /&gt;
= Repository =&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
= Object Schemas =&lt;br /&gt;
; Additional Information: [[Per Service Schemas]]&lt;br /&gt;
&lt;br /&gt;
== comAccInventoryLink ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
	objectType: &amp;quot;comAccInventoryLink&amp;quot;,&lt;br /&gt;
	canDelete: false,&lt;br /&gt;
	belongTo: {&lt;br /&gt;
		serviceTag: &amp;quot;CommerceAccountingLink&amp;quot;,&lt;br /&gt;
		objectType: &amp;quot;comAccLinkByBusiness&amp;quot;&lt;br /&gt;
	},&lt;br /&gt;
	addOnDataStructure: [],&lt;br /&gt;
	storageResources: {&lt;br /&gt;
		&amp;quot;dynamo&amp;quot;: {&lt;br /&gt;
			&amp;quot;storageType&amp;quot;: &amp;quot;dynamoDB&amp;quot;,&lt;br /&gt;
			&amp;quot;tableName&amp;quot;: &amp;quot;comAccInventoryLink&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
       &amp;quot;myGraph&amp;quot;: {&lt;br /&gt;
            &amp;quot;storageType&amp;quot;: &amp;quot;graph&amp;quot;,&lt;br /&gt;
            &amp;quot;graphServerTag&amp;quot;: &amp;quot;GraphHandler&amp;quot;&lt;br /&gt;
      }&lt;br /&gt;
    },&lt;br /&gt;
    fieldNames: {&lt;br /&gt;
		// businessId&lt;br /&gt;
		// organizationId&lt;br /&gt;
		// inventoryId&lt;br /&gt;
		// accountLinkTag // type of link: purchaseLineItem|..&lt;br /&gt;
		// accountId&lt;br /&gt;
    },&lt;br /&gt;
    identifiers: [&lt;br /&gt;
		{&lt;br /&gt;
			type: &amp;quot;partitionKey&amp;quot;,&lt;br /&gt;
			fieldNames: [&amp;quot;businessId&amp;quot;, &amp;quot;organizationId&amp;quot;, &amp;quot;inventoryId&amp;quot;],&lt;br /&gt;
			name: &amp;quot;comAccLinkInvId&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
		{&lt;br /&gt;
			type: &amp;quot;sortKey&amp;quot;,&lt;br /&gt;
			fieldName: &amp;quot;accountLinkTag&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
    ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== comAccInventoryLocationLink ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
	objectType: &amp;quot;comAccInventoryLocationLink&amp;quot;,&lt;br /&gt;
	canDelete: false,&lt;br /&gt;
	belongTo: {&lt;br /&gt;
		serviceTag: &amp;quot;CommerceAccountingLink&amp;quot;,&lt;br /&gt;
		objectType: &amp;quot;comAccLinkByBusiness&amp;quot;&lt;br /&gt;
	},&lt;br /&gt;
	addOnDataStructure: [],&lt;br /&gt;
	storageResources: {&lt;br /&gt;
		&amp;quot;dynamo&amp;quot;: {&lt;br /&gt;
			&amp;quot;storageType&amp;quot;: &amp;quot;dynamoDB&amp;quot;,&lt;br /&gt;
			&amp;quot;tableName&amp;quot;: &amp;quot;comAccInventoryLocationLink&amp;quot;,&lt;br /&gt;
		}&lt;br /&gt;
    },&lt;br /&gt;
    fieldNames: {&lt;br /&gt;
		// businessId&lt;br /&gt;
		// organizationId&lt;br /&gt;
		// inventoryLocationId&lt;br /&gt;
		// accountLinkTag // type of link: purchaseLineItem|..&lt;br /&gt;
		// accountId&lt;br /&gt;
    },&lt;br /&gt;
    identifiers: [&lt;br /&gt;
		{&lt;br /&gt;
			type: &amp;quot;partitionKey&amp;quot;,&lt;br /&gt;
			fieldNames: [&amp;quot;businessId&amp;quot;, &amp;quot;organizationId&amp;quot;, &amp;quot;inventoryLocationId&amp;quot;],&lt;br /&gt;
			name: &amp;quot;comAccLinkInvLocId&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
		{&lt;br /&gt;
			type: &amp;quot;sortKey&amp;quot;,&lt;br /&gt;
			fieldName: &amp;quot;accountLinkTag&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
    ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== comAccInventoryTemplateLink ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
	objectType: &amp;quot;comAccInventoryTemplateLink&amp;quot;,&lt;br /&gt;
	canDelete: false,&lt;br /&gt;
	belongTo: {&lt;br /&gt;
		serviceTag: &amp;quot;CommerceAccountingLink&amp;quot;,&lt;br /&gt;
		objectType: &amp;quot;comAccLinkByBusiness&amp;quot;&lt;br /&gt;
	},&lt;br /&gt;
	addOnDataStructure: [],&lt;br /&gt;
	storageResources: {&lt;br /&gt;
		&amp;quot;dynamo&amp;quot;: {&lt;br /&gt;
			&amp;quot;storageType&amp;quot;: &amp;quot;dynamoDB&amp;quot;,&lt;br /&gt;
			&amp;quot;tableName&amp;quot;: &amp;quot;comAccInventoryTemplateLink&amp;quot;,&lt;br /&gt;
		}&lt;br /&gt;
    },&lt;br /&gt;
    fieldNames: {&lt;br /&gt;
		// businessId&lt;br /&gt;
		// organizationId&lt;br /&gt;
		// inventoryTemplateId&lt;br /&gt;
		// accountLinkTag // type of link: purchaseLineItem|..&lt;br /&gt;
		// accountId&lt;br /&gt;
    },&lt;br /&gt;
    identifiers: [&lt;br /&gt;
		{&lt;br /&gt;
			type: &amp;quot;partitionKey&amp;quot;,&lt;br /&gt;
			fieldNames: [&amp;quot;businessId&amp;quot;, &amp;quot;organizationId&amp;quot;, &amp;quot;inventoryTemplateId&amp;quot;],&lt;br /&gt;
			name: &amp;quot;comAccLinkInvTemId&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
		{&lt;br /&gt;
			type: &amp;quot;sortKey&amp;quot;,&lt;br /&gt;
			fieldName: &amp;quot;accountLinkTag&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
    ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== comAccInventoryTypeLink ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
	objectType: &amp;quot;comAccInventoryTypeLink&amp;quot;,&lt;br /&gt;
	canDelete: false,&lt;br /&gt;
	belongTo: {&lt;br /&gt;
		serviceTag: &amp;quot;CommerceAccountingLink&amp;quot;,&lt;br /&gt;
		objectType: &amp;quot;comAccLinkByBusiness&amp;quot;&lt;br /&gt;
	},&lt;br /&gt;
	addOnDataStructure: [],&lt;br /&gt;
	storageResources: {&lt;br /&gt;
		&amp;quot;dynamo&amp;quot;: {&lt;br /&gt;
			&amp;quot;storageType&amp;quot;: &amp;quot;dynamoDB&amp;quot;,&lt;br /&gt;
			&amp;quot;tableName&amp;quot;: &amp;quot;comAccInventoryTypeLink&amp;quot;,&lt;br /&gt;
		}&lt;br /&gt;
    },&lt;br /&gt;
    fieldNames: {&lt;br /&gt;
		// businessId&lt;br /&gt;
		// organizationId&lt;br /&gt;
		// inventoryType // goods|intangibleGoods|rawMaterial|asset|intangibleAsset&lt;br /&gt;
		// accountLinkTag // type of link: purchaseLineItem|..&lt;br /&gt;
		// accountId&lt;br /&gt;
    },&lt;br /&gt;
    identifiers: [&lt;br /&gt;
		{&lt;br /&gt;
			type: &amp;quot;partitionKey&amp;quot;,&lt;br /&gt;
			fieldNames: [&amp;quot;businessId&amp;quot;, &amp;quot;organizationId&amp;quot;, &amp;quot;inventoryType&amp;quot;],&lt;br /&gt;
			name: &amp;quot;comAccLinkInvTypId&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
		{&lt;br /&gt;
			type: &amp;quot;sortKey&amp;quot;,&lt;br /&gt;
			fieldName: &amp;quot;accountLinkTag&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
    ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Relationships ==&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
= flowSchemas =&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
= Working documents =&lt;br /&gt;
&lt;br /&gt;
[[:Category:Working_documents - CommerceAccounting Inventory| CommerceAccounting Inventory]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Backend services| CommerceAccounting Inventory]]&lt;/div&gt;</summary>
		<author><name>Mint</name></author>
	</entry>
	<entry>
		<id>https://izara.io/wiki/index.php?title=Service_-_CommerceAccounting_Inventory&amp;diff=4551</id>
		<title>Service - CommerceAccounting Inventory</title>
		<link rel="alternate" type="text/html" href="https://izara.io/wiki/index.php?title=Service_-_CommerceAccounting_Inventory&amp;diff=4551"/>
		<updated>2026-08-10T03:40:04Z</updated>

		<summary type="html">&lt;p&gt;Mint: /* comAccInventoryLink */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Overview =&lt;br /&gt;
&lt;br /&gt;
Links Inventory objects to Accounting structures.&lt;br /&gt;
&lt;br /&gt;
= Repository =&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
= Object Schemas =&lt;br /&gt;
; Additional Information: [[Per Service Schemas]]&lt;br /&gt;
&lt;br /&gt;
== comAccInventoryLink ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
	objectType: &amp;quot;comAccInventoryLink&amp;quot;,&lt;br /&gt;
	canDelete: false,&lt;br /&gt;
	belongTo: {&lt;br /&gt;
		serviceTag: &amp;quot;CommerceAccountingLink&amp;quot;,&lt;br /&gt;
		objectType: &amp;quot;comAccLinkByBusiness&amp;quot;&lt;br /&gt;
	},&lt;br /&gt;
	addOnDataStructure: [],&lt;br /&gt;
	storageResources: {&lt;br /&gt;
		&amp;quot;dynamo&amp;quot;: {&lt;br /&gt;
			&amp;quot;storageType&amp;quot;: &amp;quot;dynamoDB&amp;quot;,&lt;br /&gt;
			&amp;quot;tableName&amp;quot;: &amp;quot;comAccInventoryLink&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
      &amp;quot;myGraph&amp;quot;: {&lt;br /&gt;
        &amp;quot;storageType&amp;quot;: &amp;quot;graph&amp;quot;,&lt;br /&gt;
        &amp;quot;graphServerTag&amp;quot;: &amp;quot;GraphHandler&amp;quot;&lt;br /&gt;
      }&lt;br /&gt;
    },&lt;br /&gt;
    fieldNames: {&lt;br /&gt;
		// businessId&lt;br /&gt;
		// organizationId&lt;br /&gt;
		// inventoryId&lt;br /&gt;
		// accountLinkTag // type of link: purchaseLineItem|..&lt;br /&gt;
		// accountId&lt;br /&gt;
    },&lt;br /&gt;
    identifiers: [&lt;br /&gt;
		{&lt;br /&gt;
			type: &amp;quot;partitionKey&amp;quot;,&lt;br /&gt;
			fieldNames: [&amp;quot;businessId&amp;quot;, &amp;quot;organizationId&amp;quot;, &amp;quot;inventoryId&amp;quot;],&lt;br /&gt;
			name: &amp;quot;comAccLinkInvId&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
		{&lt;br /&gt;
			type: &amp;quot;sortKey&amp;quot;,&lt;br /&gt;
			fieldName: &amp;quot;accountLinkTag&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
    ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== comAccInventoryLocationLink ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
	objectType: &amp;quot;comAccInventoryLocationLink&amp;quot;,&lt;br /&gt;
	canDelete: false,&lt;br /&gt;
	belongTo: {&lt;br /&gt;
		serviceTag: &amp;quot;CommerceAccountingLink&amp;quot;,&lt;br /&gt;
		objectType: &amp;quot;comAccLinkByBusiness&amp;quot;&lt;br /&gt;
	},&lt;br /&gt;
	addOnDataStructure: [],&lt;br /&gt;
	storageResources: {&lt;br /&gt;
		&amp;quot;dynamo&amp;quot;: {&lt;br /&gt;
			&amp;quot;storageType&amp;quot;: &amp;quot;dynamoDB&amp;quot;,&lt;br /&gt;
			&amp;quot;tableName&amp;quot;: &amp;quot;comAccInventoryLocationLink&amp;quot;,&lt;br /&gt;
		}&lt;br /&gt;
    },&lt;br /&gt;
    fieldNames: {&lt;br /&gt;
		// businessId&lt;br /&gt;
		// organizationId&lt;br /&gt;
		// inventoryLocationId&lt;br /&gt;
		// accountLinkTag // type of link: purchaseLineItem|..&lt;br /&gt;
		// accountId&lt;br /&gt;
    },&lt;br /&gt;
    identifiers: [&lt;br /&gt;
		{&lt;br /&gt;
			type: &amp;quot;partitionKey&amp;quot;,&lt;br /&gt;
			fieldNames: [&amp;quot;businessId&amp;quot;, &amp;quot;organizationId&amp;quot;, &amp;quot;inventoryLocationId&amp;quot;],&lt;br /&gt;
			name: &amp;quot;comAccLinkInvLocId&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
		{&lt;br /&gt;
			type: &amp;quot;sortKey&amp;quot;,&lt;br /&gt;
			fieldName: &amp;quot;accountLinkTag&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
    ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== comAccInventoryTemplateLink ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
	objectType: &amp;quot;comAccInventoryTemplateLink&amp;quot;,&lt;br /&gt;
	canDelete: false,&lt;br /&gt;
	belongTo: {&lt;br /&gt;
		serviceTag: &amp;quot;CommerceAccountingLink&amp;quot;,&lt;br /&gt;
		objectType: &amp;quot;comAccLinkByBusiness&amp;quot;&lt;br /&gt;
	},&lt;br /&gt;
	addOnDataStructure: [],&lt;br /&gt;
	storageResources: {&lt;br /&gt;
		&amp;quot;dynamo&amp;quot;: {&lt;br /&gt;
			&amp;quot;storageType&amp;quot;: &amp;quot;dynamoDB&amp;quot;,&lt;br /&gt;
			&amp;quot;tableName&amp;quot;: &amp;quot;comAccInventoryTemplateLink&amp;quot;,&lt;br /&gt;
		}&lt;br /&gt;
    },&lt;br /&gt;
    fieldNames: {&lt;br /&gt;
		// businessId&lt;br /&gt;
		// organizationId&lt;br /&gt;
		// inventoryTemplateId&lt;br /&gt;
		// accountLinkTag // type of link: purchaseLineItem|..&lt;br /&gt;
		// accountId&lt;br /&gt;
    },&lt;br /&gt;
    identifiers: [&lt;br /&gt;
		{&lt;br /&gt;
			type: &amp;quot;partitionKey&amp;quot;,&lt;br /&gt;
			fieldNames: [&amp;quot;businessId&amp;quot;, &amp;quot;organizationId&amp;quot;, &amp;quot;inventoryTemplateId&amp;quot;],&lt;br /&gt;
			name: &amp;quot;comAccLinkInvTemId&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
		{&lt;br /&gt;
			type: &amp;quot;sortKey&amp;quot;,&lt;br /&gt;
			fieldName: &amp;quot;accountLinkTag&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
    ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== comAccInventoryTypeLink ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
	objectType: &amp;quot;comAccInventoryTypeLink&amp;quot;,&lt;br /&gt;
	canDelete: false,&lt;br /&gt;
	belongTo: {&lt;br /&gt;
		serviceTag: &amp;quot;CommerceAccountingLink&amp;quot;,&lt;br /&gt;
		objectType: &amp;quot;comAccLinkByBusiness&amp;quot;&lt;br /&gt;
	},&lt;br /&gt;
	addOnDataStructure: [],&lt;br /&gt;
	storageResources: {&lt;br /&gt;
		&amp;quot;dynamo&amp;quot;: {&lt;br /&gt;
			&amp;quot;storageType&amp;quot;: &amp;quot;dynamoDB&amp;quot;,&lt;br /&gt;
			&amp;quot;tableName&amp;quot;: &amp;quot;comAccInventoryTypeLink&amp;quot;,&lt;br /&gt;
		}&lt;br /&gt;
    },&lt;br /&gt;
    fieldNames: {&lt;br /&gt;
		// businessId&lt;br /&gt;
		// organizationId&lt;br /&gt;
		// inventoryType // goods|intangibleGoods|rawMaterial|asset|intangibleAsset&lt;br /&gt;
		// accountLinkTag // type of link: purchaseLineItem|..&lt;br /&gt;
		// accountId&lt;br /&gt;
    },&lt;br /&gt;
    identifiers: [&lt;br /&gt;
		{&lt;br /&gt;
			type: &amp;quot;partitionKey&amp;quot;,&lt;br /&gt;
			fieldNames: [&amp;quot;businessId&amp;quot;, &amp;quot;organizationId&amp;quot;, &amp;quot;inventoryType&amp;quot;],&lt;br /&gt;
			name: &amp;quot;comAccLinkInvTypId&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
		{&lt;br /&gt;
			type: &amp;quot;sortKey&amp;quot;,&lt;br /&gt;
			fieldName: &amp;quot;accountLinkTag&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
    ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Relationships ==&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
= flowSchemas =&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
= Working documents =&lt;br /&gt;
&lt;br /&gt;
[[:Category:Working_documents - CommerceAccounting Inventory| CommerceAccounting Inventory]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Backend services| CommerceAccounting Inventory]]&lt;/div&gt;</summary>
		<author><name>Mint</name></author>
	</entry>
	<entry>
		<id>https://izara.io/wiki/index.php?title=Service_-_CommerceAccounting_Services&amp;diff=4550</id>
		<title>Service - CommerceAccounting Services</title>
		<link rel="alternate" type="text/html" href="https://izara.io/wiki/index.php?title=Service_-_CommerceAccounting_Services&amp;diff=4550"/>
		<updated>2026-08-10T03:36:11Z</updated>

		<summary type="html">&lt;p&gt;Mint: /* comAccServicesLink */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Overview =&lt;br /&gt;
&lt;br /&gt;
Links Services objects to Accounting structures.&lt;br /&gt;
&lt;br /&gt;
= Repository =&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
= Object Schemas =&lt;br /&gt;
; Additional Information: [[Per Service Schemas]]&lt;br /&gt;
&lt;br /&gt;
== comAccServicesLink ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
	objectType: &amp;quot;comAccServicesLink&amp;quot;,&lt;br /&gt;
    generatedBy: &amp;quot;userGenerated&amp;quot;,&lt;br /&gt;
	canDelete: false,&lt;br /&gt;
	belongTo: {&lt;br /&gt;
		serviceTag: &amp;quot;CommerceAccountingLink&amp;quot;,&lt;br /&gt;
		objectType: &amp;quot;comAccLinkByBusiness&amp;quot;&lt;br /&gt;
	},&lt;br /&gt;
	addOnDataStructure: [],&lt;br /&gt;
	storageResources: {&lt;br /&gt;
		&amp;quot;dynamo&amp;quot;: {&lt;br /&gt;
			&amp;quot;storageType&amp;quot;: &amp;quot;dynamoDB&amp;quot;,&lt;br /&gt;
			&amp;quot;tableName&amp;quot;: &amp;quot;comAccServicesLink&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
        &amp;quot;myGraph&amp;quot;: {&lt;br /&gt;
            &amp;quot;storageType&amp;quot;: &amp;quot;graph&amp;quot;,&lt;br /&gt;
            &amp;quot;graphServerTag&amp;quot;: &amp;quot;GraphHandler&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
    },&lt;br /&gt;
    fieldNames: {&lt;br /&gt;
		// businessId&lt;br /&gt;
		// organizationId&lt;br /&gt;
		// servicesId&lt;br /&gt;
		// accountLinkTag // type of link: purchaseLineItem|..&lt;br /&gt;
		// accountId&lt;br /&gt;
    },&lt;br /&gt;
    identifiers: [&lt;br /&gt;
		{&lt;br /&gt;
			type: &amp;quot;partitionKey&amp;quot;,&lt;br /&gt;
			fieldNames: [&amp;quot;businessId&amp;quot;, &amp;quot;organizationId&amp;quot;, &amp;quot;servicesId&amp;quot;],&lt;br /&gt;
			name: &amp;quot;comAccLinkSerId&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
		{&lt;br /&gt;
			type: &amp;quot;sortKey&amp;quot;,&lt;br /&gt;
			fieldName: &amp;quot;accountLinkTag&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
    ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== comAccServicesTemplateLink ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
	objectType: &amp;quot;comAccServicesTemplateLink&amp;quot;,&lt;br /&gt;
    generatedBy: &amp;quot;userGenerated&amp;quot;,&lt;br /&gt;
	canDelete: false,&lt;br /&gt;
	belongTo: {&lt;br /&gt;
		serviceTag: &amp;quot;CommerceAccountingLink&amp;quot;,&lt;br /&gt;
		objectType: &amp;quot;comAccLinkByBusiness&amp;quot;&lt;br /&gt;
	},&lt;br /&gt;
	addOnDataStructure: [],&lt;br /&gt;
	storageResources: {&lt;br /&gt;
		&amp;quot;dynamo&amp;quot;: {&lt;br /&gt;
			&amp;quot;storageType&amp;quot;: &amp;quot;dynamoDB&amp;quot;,&lt;br /&gt;
			&amp;quot;tableName&amp;quot;: &amp;quot;comAccServicesTemplateLink&amp;quot;,&lt;br /&gt;
		}&lt;br /&gt;
    },&lt;br /&gt;
    fieldNames: {&lt;br /&gt;
		// businessId&lt;br /&gt;
		// organizationId&lt;br /&gt;
		// servicesTemplateId&lt;br /&gt;
		// accountLinkTag // type of link: purchaseLineItem|..&lt;br /&gt;
		// accountId&lt;br /&gt;
    },&lt;br /&gt;
    identifiers: [&lt;br /&gt;
		{&lt;br /&gt;
			type: &amp;quot;partitionKey&amp;quot;,&lt;br /&gt;
			fieldNames: [&amp;quot;businessId&amp;quot;, &amp;quot;organizationId&amp;quot;, &amp;quot;servicesTemplateId&amp;quot;],&lt;br /&gt;
			name: &amp;quot;comAccLinkSerTemId&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
		{&lt;br /&gt;
			type: &amp;quot;sortKey&amp;quot;,&lt;br /&gt;
			fieldName: &amp;quot;accountLinkTag&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
    ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== comAccServicesTypeLink ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
	objectType: &amp;quot;comAccServicesTypeLink&amp;quot;,&lt;br /&gt;
    generatedBy: &amp;quot;userGenerated&amp;quot;,&lt;br /&gt;
	canDelete: false,&lt;br /&gt;
	belongTo: {&lt;br /&gt;
		serviceTag: &amp;quot;CommerceAccountingLink&amp;quot;,&lt;br /&gt;
		objectType: &amp;quot;comAccLinkByBusiness&amp;quot;&lt;br /&gt;
	},&lt;br /&gt;
	addOnDataStructure: [],&lt;br /&gt;
	storageResources: {&lt;br /&gt;
		&amp;quot;dynamo&amp;quot;: {&lt;br /&gt;
			&amp;quot;storageType&amp;quot;: &amp;quot;dynamoDB&amp;quot;,&lt;br /&gt;
			&amp;quot;tableName&amp;quot;: &amp;quot;comAccServicesTypeLink&amp;quot;,&lt;br /&gt;
		}&lt;br /&gt;
    },&lt;br /&gt;
    fieldNames: {&lt;br /&gt;
		// businessId&lt;br /&gt;
		// organizationId&lt;br /&gt;
		// servicesType // pointInTime|overTime&lt;br /&gt;
		// accountLinkTag // type of link: purchaseLineItem|..&lt;br /&gt;
		// accountId&lt;br /&gt;
    },&lt;br /&gt;
    identifiers: [&lt;br /&gt;
		{&lt;br /&gt;
			type: &amp;quot;partitionKey&amp;quot;,&lt;br /&gt;
			fieldNames: [&amp;quot;businessId&amp;quot;, &amp;quot;organizationId&amp;quot;, &amp;quot;servicesType&amp;quot;],&lt;br /&gt;
			name: &amp;quot;comAccLinkSerTypId&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
		{&lt;br /&gt;
			type: &amp;quot;sortKey&amp;quot;,&lt;br /&gt;
			fieldName: &amp;quot;accountLinkTag&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
    ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Relationships ==&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
= flowSchemas =&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
= Working documents =&lt;br /&gt;
&lt;br /&gt;
[[:Category:Working_documents - CommerceAccounting Services| CommerceAccounting Services]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Backend services| CommerceAccounting Services]]&lt;/div&gt;</summary>
		<author><name>Mint</name></author>
	</entry>
	<entry>
		<id>https://izara.io/wiki/index.php?title=Service_-_CommerceAccounting_Sale&amp;diff=4549</id>
		<title>Service - CommerceAccounting Sale</title>
		<link rel="alternate" type="text/html" href="https://izara.io/wiki/index.php?title=Service_-_CommerceAccounting_Sale&amp;diff=4549"/>
		<updated>2026-08-10T03:36:03Z</updated>

		<summary type="html">&lt;p&gt;Mint: /* comAccSaleLink */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Overview =&lt;br /&gt;
&lt;br /&gt;
Handle sales in one service because some Accounting entries include the full amount, some break up according to saleLineItems.&lt;br /&gt;
&lt;br /&gt;
= Repository =&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
= Object Schemas =&lt;br /&gt;
; Additional Information: [[Per Service Schemas]]&lt;br /&gt;
&lt;br /&gt;
== comAccSaleLink ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
	objectType: &amp;quot;comAccSaleLink&amp;quot;,&lt;br /&gt;
    generatedBy: &amp;quot;userGenerated&amp;quot;,&lt;br /&gt;
	canDelete: false,&lt;br /&gt;
	belongTo: {&lt;br /&gt;
		serviceTag: &amp;quot;CommerceAccountingLink&amp;quot;,&lt;br /&gt;
		objectType: &amp;quot;comAccLinkByBusiness&amp;quot;&lt;br /&gt;
	},&lt;br /&gt;
	addOnDataStructure: [],&lt;br /&gt;
	storageResources: {&lt;br /&gt;
        &amp;quot;myGraph&amp;quot;:{&lt;br /&gt;
          &amp;quot;storageType&amp;quot;: &amp;quot;graph&amp;quot;,&lt;br /&gt;
          &amp;quot;graphServerTag&amp;quot;: &amp;quot;GraphHandler&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
		&amp;quot;dynamo&amp;quot;: {&lt;br /&gt;
			&amp;quot;storageType&amp;quot;: &amp;quot;dynamoDB&amp;quot;,&lt;br /&gt;
			&amp;quot;tableName&amp;quot;: &amp;quot;comAccSaleLink&amp;quot;,&lt;br /&gt;
		}&lt;br /&gt;
    },&lt;br /&gt;
    fieldNames: {&lt;br /&gt;
		businessId:{&lt;br /&gt;
			fromObjType:{&lt;br /&gt;
			  serviceTag: &amp;quot;CommerceAccountingLink&amp;quot;,&lt;br /&gt;
			  objectType: &amp;quot;comAccLinkByBusiness&amp;quot; &lt;br /&gt;
			},&lt;br /&gt;
        },&lt;br /&gt;
		organizationId: {&lt;br /&gt;
			fromObjType:{&lt;br /&gt;
			  serviceTag: &amp;quot;CommerceAccountingLink&amp;quot;,&lt;br /&gt;
			  objectType: &amp;quot;comAccLinkByOrganization&amp;quot; &lt;br /&gt;
			},&lt;br /&gt;
		},&lt;br /&gt;
        accountLinkTag:{   // type of link: ..&lt;br /&gt;
            type: &amp;quot;string&amp;quot;,&lt;br /&gt;
			requriedOnCreate: true,&lt;br /&gt;
			storageResourceTags: [&#039;myGraph&#039;, &#039;dynamo&#039;]&lt;br /&gt;
        }		&lt;br /&gt;
        accountId:{&lt;br /&gt;
            type: &amp;quot;string&amp;quot;,&lt;br /&gt;
			requriedOnCreate: true,&lt;br /&gt;
			storageResourceTags: [&#039;myGraph&#039;, &#039;dynamo&#039;]&lt;br /&gt;
        }&lt;br /&gt;
    },&lt;br /&gt;
    identifiers: [&lt;br /&gt;
		{&lt;br /&gt;
			type: &amp;quot;partitionKey&amp;quot;,&lt;br /&gt;
			fieldNames: [&amp;quot;businessId&amp;quot;, &amp;quot;organizationId&amp;quot;],&lt;br /&gt;
			name: &amp;quot;comAccLinkId&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
		{&lt;br /&gt;
			type: &amp;quot;sortKey&amp;quot;,&lt;br /&gt;
			fieldName: &amp;quot;accountLinkTag&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
    ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* sets which Accounting accountId journal entries are added to&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
	objectType: &amp;quot;comAccSale&amp;quot;,&lt;br /&gt;
    generatedBy: &amp;quot;systemGenerated&amp;quot;,&lt;br /&gt;
	canDelete: false,&lt;br /&gt;
	belongTo: {&lt;br /&gt;
		serviceTag: &amp;quot;CommerceAccountingLink&amp;quot;,&lt;br /&gt;
		objectType: &amp;quot;comAccLinkByBusiness&amp;quot;&lt;br /&gt;
	},&lt;br /&gt;
	addOnDataStructure: [],&lt;br /&gt;
	storageResources: {&lt;br /&gt;
		&amp;quot;dynamo&amp;quot;: {&lt;br /&gt;
			&amp;quot;storageType&amp;quot;: &amp;quot;dynamoDB&amp;quot;,&lt;br /&gt;
			&amp;quot;tableName&amp;quot;: &amp;quot;comAccSaleLink&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
        &amp;quot;myGraph&amp;quot;: {&lt;br /&gt;
            &amp;quot;storageType&amp;quot;: &amp;quot;graph&amp;quot;,&lt;br /&gt;
            &amp;quot;graphServerTag&amp;quot;: &amp;quot;GraphHandler&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
    },&lt;br /&gt;
    fieldNames: {&lt;br /&gt;
		// businessId,&lt;br /&gt;
		// organizationId,&lt;br /&gt;
		// saleId,&lt;br /&gt;
&lt;br /&gt;
		// record lock eg: prefix: &amp;quot;updateSale&amp;quot;&lt;br /&gt;
		// updateSale_status: {requiredOnCreate: true}, // open|lock, &lt;br /&gt;
		// updateSale_uniqueRequestId: {requiredOnCreate: true},&lt;br /&gt;
		// updateSale_timestamp: {requiredOnCreate: true},&lt;br /&gt;
&lt;br /&gt;
		saleValueJournalId: {&lt;br /&gt;
			type: &amp;quot;string&amp;quot;,&lt;br /&gt;
			optionalOnCreate: true,&lt;br /&gt;
			canUpdate: true,&lt;br /&gt;
			storageResourceTags: [&amp;quot;dynamo&amp;quot;],&lt;br /&gt;
		},&lt;br /&gt;
		inventoryAdjustJournalId: {&lt;br /&gt;
			type: &amp;quot;string&amp;quot;,&lt;br /&gt;
			optionalOnCreate: true,&lt;br /&gt;
			canUpdate: true,&lt;br /&gt;
			storageResourceTags: [&amp;quot;dynamo&amp;quot;],&lt;br /&gt;
		},&lt;br /&gt;
    },&lt;br /&gt;
    identifiers: [&lt;br /&gt;
		{&lt;br /&gt;
			type: &amp;quot;partitionKey&amp;quot;,&lt;br /&gt;
			fieldNames: [&amp;quot;businessId&amp;quot;, &amp;quot;organizationId&amp;quot;],&lt;br /&gt;
			name: &amp;quot;comAccLinkId&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
		{&lt;br /&gt;
			type: &amp;quot;sortKey&amp;quot;,&lt;br /&gt;
			fieldName: &amp;quot;saleId&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
    ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* one saleId links to two journalIds, sale value and inventory adjustment entries&lt;br /&gt;
* maintains a link between saleId and journalIds, so can adjust if changes made to sale&lt;br /&gt;
&lt;br /&gt;
== Relationships ==&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
= flowSchemas =&lt;br /&gt;
&lt;br /&gt;
== saleCommitted ==&lt;br /&gt;
&lt;br /&gt;
* when creating a sale, iterate saleLineItems to decide which journal entries are created&lt;br /&gt;
* accountsReceivable accountId will need to come from [[Service - CommerceAccounting Customer]]&lt;br /&gt;
&lt;br /&gt;
=== Sale Value ===&lt;br /&gt;
&lt;br /&gt;
* the total sale value has journal entry for all the below:&lt;br /&gt;
*# (debit)accountsReceivable(Asset)&lt;br /&gt;
&lt;br /&gt;
* The other side (credit) is broken up depending on goods/service or assets&lt;br /&gt;
&lt;br /&gt;
* For goods value an entry is entered into the below&lt;br /&gt;
*# (credit)goodsSale/serviceSale(Revenue)&lt;br /&gt;
&lt;br /&gt;
* Assets have:&lt;br /&gt;
*# (credit)inventoryAsset(Asset)&lt;br /&gt;
*# (debit)accumulatedDepreciation(Asset)&lt;br /&gt;
*# (debit or credit)creditGainOnSale(Renenue)/debitLossOnSale(Expense)&lt;br /&gt;
&lt;br /&gt;
* Intangible Assets have:&lt;br /&gt;
*# (credit)inventoryIntangibleAsset(Asset)&lt;br /&gt;
*# (debit)accumulatedAmortization(Asset)&lt;br /&gt;
*# (debit or credit)creditGainOnSale(Renenue)/debitLossOnSale(Expense)&lt;br /&gt;
&lt;br /&gt;
* all credit side may have:&lt;br /&gt;
*# (credit)salesTaxPayable(Liability)&lt;br /&gt;
*# (credit)vatPayable(liability)&lt;br /&gt;
&lt;br /&gt;
=== Goods Sold ===&lt;br /&gt;
&lt;br /&gt;
* the total saleLineItem value for Inventory Goods has a journal entry for:&lt;br /&gt;
*# (debit)cogsGoods(Expense)&lt;br /&gt;
*# (credit)inventoryGoods(Asset)&lt;br /&gt;
&lt;br /&gt;
=== Raw Material Sold ===&lt;br /&gt;
&lt;br /&gt;
* the total saleLineItem value for Inventory Raw Materials has a journal entry for:&lt;br /&gt;
*# (debit)cogsRawMaterial(Expense)&lt;br /&gt;
*# (credit)inventoryRawMaterial(Asset)&lt;br /&gt;
&lt;br /&gt;
=== Assets Sold ===&lt;br /&gt;
&lt;br /&gt;
* might not have accumulatedDepreciation applied yet&lt;br /&gt;
* if sold for same amount as original value then not have creditGainOnSale/debitLossOnSale&lt;br /&gt;
* will need to query Accounting Assets service for depreciation amount&lt;br /&gt;
* may need to query ComAcc Inventory service to find link between Commerce Asset and Accounting Asset, so can find depreciation&lt;br /&gt;
&lt;br /&gt;
=== Services Sold ===&lt;br /&gt;
&lt;br /&gt;
* no additional entries required&lt;br /&gt;
&lt;br /&gt;
=== Intangible Goods Sold ===&lt;br /&gt;
&lt;br /&gt;
* no additional entries required&lt;br /&gt;
* entries same as physical Goods&lt;br /&gt;
&lt;br /&gt;
=== Intangible Assets ===&lt;br /&gt;
&lt;br /&gt;
* same as an Asset, except use the term Amortization instead of Depreciation, which are functionally the same&lt;br /&gt;
&lt;br /&gt;
== saleChange ==&lt;br /&gt;
&lt;br /&gt;
* make adjustment to journal entries when saleLineItemId changes&lt;br /&gt;
* perhaps handling removal of sale/journal entries, or creation of new entries&lt;br /&gt;
* basically re-calculate all entries and check against existing&lt;br /&gt;
&lt;br /&gt;
= Working documents =&lt;br /&gt;
&lt;br /&gt;
[[:Category:Working_documents - CommerceAccounting Sale| CommerceAccounting Sale]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Backend services| CommerceAccounting Sale]]&lt;/div&gt;</summary>
		<author><name>Mint</name></author>
	</entry>
	<entry>
		<id>https://izara.io/wiki/index.php?title=Service_-_CommerceAccounting_Link&amp;diff=4524</id>
		<title>Service - CommerceAccounting Link</title>
		<link rel="alternate" type="text/html" href="https://izara.io/wiki/index.php?title=Service_-_CommerceAccounting_Link&amp;diff=4524"/>
		<updated>2026-08-07T06:48:10Z</updated>

		<summary type="html">&lt;p&gt;Mint: /* comAccAccountLink */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Overview =&lt;br /&gt;
&lt;br /&gt;
Configures the link between a Business in Izara Commerce and an organization in Izara Accounting.&lt;br /&gt;
&lt;br /&gt;
= Repository =&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
= Object Schemas =&lt;br /&gt;
; Additional Information: [[Per Service Schemas]]&lt;br /&gt;
&lt;br /&gt;
== comAccLinkByBusiness ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
	objectType: &amp;quot;comAccLinkByBusiness&amp;quot;,&lt;br /&gt;
	canDelete: false,&lt;br /&gt;
	belongTo: {&lt;br /&gt;
		serviceTag: &amp;quot;User&amp;quot;,&lt;br /&gt;
		objectType: &amp;quot;user&amp;quot;&lt;br /&gt;
	},&lt;br /&gt;
	addOnDataStructure: [&lt;br /&gt;
       {&lt;br /&gt;
          type:&amp;quot;rbac&amp;quot;&lt;br /&gt;
      }&lt;br /&gt;
&lt;br /&gt;
    ],&lt;br /&gt;
	storageResources: {&lt;br /&gt;
        &amp;quot;myGraph&amp;quot;:{&lt;br /&gt;
            &amp;quot;storageType&amp;quot;: &amp;quot;graph&amp;quot;,&lt;br /&gt;
            &amp;quot;graphServerTag&amp;quot;: &amp;quot;GraphHandler&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
		&amp;quot;dynamo&amp;quot;: {&lt;br /&gt;
			&amp;quot;storageType&amp;quot;: &amp;quot;dynamoDB&amp;quot;,&lt;br /&gt;
			&amp;quot;tableName&amp;quot;: &amp;quot;comAccLinkByBusiness&amp;quot;,&lt;br /&gt;
		}&lt;br /&gt;
    },&lt;br /&gt;
    fieldNames: {&lt;br /&gt;
		 businessId:{&lt;br /&gt;
            type: &amp;quot;string&amp;quot;,&lt;br /&gt;
			requriedOnCreate: true,&lt;br /&gt;
			storageResourceTags: [&#039;myGraph&#039;,&#039;dynamo&#039;]&lt;br /&gt;
         },		&lt;br /&gt;
		 organizationId:{&lt;br /&gt;
            type: &amp;quot;string&amp;quot;,&lt;br /&gt;
			requriedOnCreate: true,&lt;br /&gt;
			storageResourceTags: [&#039;myGraph&#039;,&#039;dynamo&#039;]&lt;br /&gt;
         }		&lt;br /&gt;
    },&lt;br /&gt;
    identifiers: [&lt;br /&gt;
		{&lt;br /&gt;
			// businessId&lt;br /&gt;
		}&lt;br /&gt;
    ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== comAccLinkByOrganization ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
	objectType: &amp;quot;comAccLinkByOrganization&amp;quot;,&lt;br /&gt;
	canDelete: false,&lt;br /&gt;
	belongTo: {&lt;br /&gt;
		serviceTag: &amp;quot;User&amp;quot;,&lt;br /&gt;
		objectType: &amp;quot;user&amp;quot;&lt;br /&gt;
	},&lt;br /&gt;
	addOnDataStructure: [],&lt;br /&gt;
	storageResources: {&lt;br /&gt;
		&amp;quot;dynamo&amp;quot;: {&lt;br /&gt;
			&amp;quot;storageType&amp;quot;: &amp;quot;dynamoDB&amp;quot;,&lt;br /&gt;
			&amp;quot;tableName&amp;quot;: &amp;quot;comAccLinkByOrganization&amp;quot;,&lt;br /&gt;
		}&lt;br /&gt;
    },&lt;br /&gt;
    fieldNames: {&lt;br /&gt;
		// organizationId&lt;br /&gt;
		// businessId		&lt;br /&gt;
    },&lt;br /&gt;
    identifiers: [&lt;br /&gt;
		{&lt;br /&gt;
			// organizationId&lt;br /&gt;
		}&lt;br /&gt;
    ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== comAccAccountLink ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
	objectType: &amp;quot;comAccAccountLink&amp;quot;,&lt;br /&gt;
	canDelete: true,&lt;br /&gt;
	addOnDataStructure: [],&lt;br /&gt;
	storageResources: {&lt;br /&gt;
		&amp;quot;dynamo&amp;quot;: {&lt;br /&gt;
			&amp;quot;storageType&amp;quot;: &amp;quot;dynamoDB&amp;quot;,&lt;br /&gt;
			&amp;quot;tableName&amp;quot;: &amp;quot;comAccAccountLink&amp;quot;,&lt;br /&gt;
		}&lt;br /&gt;
    },&lt;br /&gt;
    fieldNames: {&lt;br /&gt;
		businessId: {&lt;br /&gt;
			fromObjType:{&lt;br /&gt;
			  serviceTag: &amp;quot;CommerceAccountingLink&amp;quot;,&lt;br /&gt;
			  objectType: &amp;quot;comAccLink&amp;quot; &lt;br /&gt;
			},&lt;br /&gt;
		},&lt;br /&gt;
		organizationId: {&lt;br /&gt;
			fromObjType:{&lt;br /&gt;
			  serviceTag: &amp;quot;CommerceAccountingLink&amp;quot;,&lt;br /&gt;
			  objectType: &amp;quot;comAccLink&amp;quot; &lt;br /&gt;
			},&lt;br /&gt;
		},&lt;br /&gt;
		accountTag: { // this is the granular accounting classification that actions need to add entries to&lt;br /&gt;
			type: &amp;quot;string&amp;quot;,&lt;br /&gt;
			requiredOnCreate: true,&lt;br /&gt;
			canUpdate: false,&lt;br /&gt;
			userCanUpdate: false,&lt;br /&gt;
			storageResourceTags: [&amp;quot;dynamo&amp;quot;],&lt;br /&gt;
		},&lt;br /&gt;
		accountId: { // accountId from Izara Accounting&lt;br /&gt;
			type: &amp;quot;string&amp;quot;,&lt;br /&gt;
			requiredOnCreate: true,&lt;br /&gt;
			canUpdate: true,&lt;br /&gt;
			userCanUpdate: true,&lt;br /&gt;
			storageResourceTags: [&amp;quot;dynamo&amp;quot;],&lt;br /&gt;
		},&lt;br /&gt;
    },&lt;br /&gt;
    identifiers: [&lt;br /&gt;
		{&lt;br /&gt;
			type: &amp;quot;partitionKey&amp;quot;,&lt;br /&gt;
			fieldNames: [&amp;quot;businessId&amp;quot;,&amp;quot;organizationId&amp;quot;],&lt;br /&gt;
			name: &amp;quot;comAccLinkId&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
		{&lt;br /&gt;
			type: &amp;quot;sortKey&amp;quot;,&lt;br /&gt;
			fieldName: &amp;quot;accountTag&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
    ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* sets up which Accounting Accounts are used for different connection tasks&lt;br /&gt;
* example: which Accounting Account is adjusted when stock increases/decreases&lt;br /&gt;
* will need to have a plugIn level shared const lib of all accountTags&lt;br /&gt;
&lt;br /&gt;
== Relationships ==&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
= Working documents =&lt;br /&gt;
&lt;br /&gt;
[[:Category:Working_documents - CommerceAccounting Link| CommerceAccounting Link]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Backend services| CommerceAccounting Link]]&lt;/div&gt;</summary>
		<author><name>Mint</name></author>
	</entry>
	<entry>
		<id>https://izara.io/wiki/index.php?title=Service_-_CommerceAccounting_Purchase&amp;diff=4523</id>
		<title>Service - CommerceAccounting Purchase</title>
		<link rel="alternate" type="text/html" href="https://izara.io/wiki/index.php?title=Service_-_CommerceAccounting_Purchase&amp;diff=4523"/>
		<updated>2026-08-07T06:47:03Z</updated>

		<summary type="html">&lt;p&gt;Mint: /* comAccPurchaseLink */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Overview =&lt;br /&gt;
&lt;br /&gt;
Handle links between purchases and Accounting records.&lt;br /&gt;
&lt;br /&gt;
= Repository =&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
= Object Schemas =&lt;br /&gt;
; Additional Information: [[Per Service Schemas]]&lt;br /&gt;
&lt;br /&gt;
== comAccPurchaseLink ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
	objectType: &amp;quot;comAccPurchaseLink&amp;quot;,&lt;br /&gt;
    generatedBy: &amp;quot;userGenerated&amp;quot;,&lt;br /&gt;
	canDelete: false,&lt;br /&gt;
	addOnDataStructure: [],&lt;br /&gt;
    belongTo: {&lt;br /&gt;
		serviceTag: &amp;quot;ComAccLink&amp;quot;,&lt;br /&gt;
		objectType: &amp;quot;comAccLinkByBusiness&amp;quot;&lt;br /&gt;
	},&lt;br /&gt;
	storageResources: {&lt;br /&gt;
        &amp;quot;myGraph&amp;quot;:{&lt;br /&gt;
          &amp;quot;storageType&amp;quot;: &amp;quot;graph&amp;quot;,&lt;br /&gt;
          &amp;quot;graphServerTag&amp;quot;: &amp;quot;GraphHandler&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
		&amp;quot;dynamo&amp;quot;: {&lt;br /&gt;
			&amp;quot;storageType&amp;quot;: &amp;quot;dynamoDB&amp;quot;,&lt;br /&gt;
			&amp;quot;tableName&amp;quot;: &amp;quot;comAccPurchaseLink&amp;quot;,&lt;br /&gt;
		}&lt;br /&gt;
    },&lt;br /&gt;
    fieldNames: {&lt;br /&gt;
		businessId:{&lt;br /&gt;
            type: &amp;quot;string&amp;quot;,&lt;br /&gt;
			requriedOnCreate: true,&lt;br /&gt;
			storageResourceTags: [&#039;myGraph&#039;,&#039;dynamo&#039;]&lt;br /&gt;
        },&lt;br /&gt;
        accountLinkTag:{   // type of link: inputVAT|salesTax|vatTax..&lt;br /&gt;
            type: &amp;quot;string&amp;quot;,&lt;br /&gt;
			requriedOnCreate: true,&lt;br /&gt;
			storageResourceTags: [&#039;myGraph&#039;,&#039;dynamo&#039;]&lt;br /&gt;
        }		&lt;br /&gt;
       accountId:{&lt;br /&gt;
            type: &amp;quot;string&amp;quot;,&lt;br /&gt;
			requriedOnCreate: true,&lt;br /&gt;
			storageResourceTags: [&#039;myGraph&#039;,&#039;dynamo&#039;]&lt;br /&gt;
        }&lt;br /&gt;
    },&lt;br /&gt;
    identifiers: [&lt;br /&gt;
		{&lt;br /&gt;
			type: &amp;quot;partitionKey&amp;quot;,&lt;br /&gt;
			fieldName: &amp;quot;businessId&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
		{&lt;br /&gt;
			type: &amp;quot;sortKey&amp;quot;,&lt;br /&gt;
			fieldName: &amp;quot;accountLinkTag&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
    ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* sets which Accounting accountId journal entries are added to&lt;br /&gt;
&lt;br /&gt;
== comAccPurchase ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
	objectType: &amp;quot;comAccPurchase&amp;quot;,&lt;br /&gt;
    generatedBy: &amp;quot;systemGenerated&amp;quot;,&lt;br /&gt;
	canDelete: false,	&lt;br /&gt;
    addOnDataStructure: [],&lt;br /&gt;
	storageResources: {&lt;br /&gt;
		&amp;quot;dynamo&amp;quot;: {&lt;br /&gt;
			&amp;quot;storageType&amp;quot;: &amp;quot;dynamoDB&amp;quot;,&lt;br /&gt;
			&amp;quot;tableName&amp;quot;: &amp;quot;comAccPurchase&amp;quot;,&lt;br /&gt;
		}&lt;br /&gt;
    },&lt;br /&gt;
    fieldNames: {&lt;br /&gt;
		// businessId,&lt;br /&gt;
		// purchaseId,&lt;br /&gt;
&lt;br /&gt;
		// record lock eg: prefix: &amp;quot;updatePurchase&amp;quot;&lt;br /&gt;
		// updatePurchase_status:{requiredOnCreate: true}, // open|lock, &lt;br /&gt;
		// updatePurchase_uniqueRequestId :{requiredOnCreate: true},&lt;br /&gt;
		// updatePurchase_timestamp :{requiredOnCreate: true},&lt;br /&gt;
&lt;br /&gt;
		journalId: {&lt;br /&gt;
			type: &amp;quot;string&amp;quot;,&lt;br /&gt;
			optionalOnCreate: true,&lt;br /&gt;
			canUpdate: true,&lt;br /&gt;
			storageResourceTags: [&amp;quot;dynamo&amp;quot;],&lt;br /&gt;
		},&lt;br /&gt;
        &lt;br /&gt;
&lt;br /&gt;
    },&lt;br /&gt;
    identifiers: [&lt;br /&gt;
		{&lt;br /&gt;
			type: &amp;quot;partitionKey&amp;quot;,&lt;br /&gt;
			fieldName: &amp;quot;businessId&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
		{&lt;br /&gt;
			type: &amp;quot;sortKey&amp;quot;,&lt;br /&gt;
			fieldName: &amp;quot;purchaseId&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
    ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== comAccPurchaseLineItem ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
	objectType: &amp;quot;comAccPurchaseLineItem&amp;quot;,&lt;br /&gt;
	generatedBy: &amp;quot;systemGenerated&amp;quot;,&lt;br /&gt;
    canDelete: false,&lt;br /&gt;
	addOnDataStructure: [],&lt;br /&gt;
	storageResources: {&lt;br /&gt;
		&amp;quot;dynamo&amp;quot;: {&lt;br /&gt;
			&amp;quot;storageType&amp;quot;: &amp;quot;dynamoDB&amp;quot;,&lt;br /&gt;
			&amp;quot;tableName&amp;quot;: &amp;quot;comAccPurchaseLineItem&amp;quot;,&lt;br /&gt;
		}&lt;br /&gt;
    },&lt;br /&gt;
    fieldNames: {&lt;br /&gt;
		// purchaseId,&lt;br /&gt;
		// purchaseLineItemId,&lt;br /&gt;
		// accountId&lt;br /&gt;
		// lineItemQuantity&lt;br /&gt;
		// lineItemUnitPricelineItemUnitPrice&lt;br /&gt;
		// entryId // not sure want to record because multiple lineItems might be in the same entryId&lt;br /&gt;
    },&lt;br /&gt;
    identifiers: [&lt;br /&gt;
		{&lt;br /&gt;
			type: &amp;quot;partitionKey&amp;quot;,&lt;br /&gt;
			fieldName: &amp;quot;purchaseId&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		{&lt;br /&gt;
			type: &amp;quot;sortKey&amp;quot;,&lt;br /&gt;
			fieldName: &amp;quot;purchaseLineItemId&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
    ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* This table might not be needed becasue we do not create a journal entry per line item, we make a compound journal entry per purchase&lt;br /&gt;
* Keep it for now so we can reconcile Commerce data matches ComAcc data&lt;br /&gt;
&lt;br /&gt;
== Relationships ==&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
= flowSchemas =&lt;br /&gt;
&lt;br /&gt;
== createPurchase ==&lt;br /&gt;
&lt;br /&gt;
* when creating a purchase, iterate purchaseLineItems to decide which journal entries are created&lt;br /&gt;
* accountsPayable accountId comes from [[Service - CommerceAccounting Vendor]]&lt;br /&gt;
* each purchaseLineItem checks it&#039;s type then finds accountId from coresponding comAcc service&lt;br /&gt;
&lt;br /&gt;
=== Example request param from Commerce ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
	belongToIdentifiers: {&lt;br /&gt;
	  businessId: &amp;quot;xxx&amp;quot;&lt;br /&gt;
	},&lt;br /&gt;
	purchaseId: &amp;quot;&amp;quot;,&lt;br /&gt;
	vendorId: &amp;quot;&amp;quot;,&lt;br /&gt;
    timestamp: 1111111,&lt;br /&gt;
	purchaseCurrencyId: &amp;quot;&amp;quot;,&lt;br /&gt;
	inventoryLocationId: &amp;quot;&amp;quot;, // required if have any inventory/?assets&lt;br /&gt;
	purchaseLineItems: {&lt;br /&gt;
		{purchaseLineItemId}: {&lt;br /&gt;
&lt;br /&gt;
            inventoryId: &amp;quot;&amp;quot;,&lt;br /&gt;
            inventoryTemplateId: &amp;quot;&amp;quot;,&lt;br /&gt;
            // or&lt;br /&gt;
            expenseId: &amp;quot;&amp;quot;,&lt;br /&gt;
            // or&lt;br /&gt;
            servicesId: &amp;quot;&amp;quot;,&lt;br /&gt;
            servicesTemplateId: &amp;quot;&amp;quot;,&lt;br /&gt;
            // or&lt;br /&gt;
            freightInId: &amp;quot;&amp;quot;,&lt;br /&gt;
            // or&lt;br /&gt;
&lt;br /&gt;
            otherPurchaseItemId: &amp;quot;&amp;quot;,&lt;br /&gt;
            &lt;br /&gt;
&lt;br /&gt;
			type: &amp;quot;&amp;quot;, // inventory|expense|services|freight|salesTax|vatTax|other&lt;br /&gt;
			subType: &amp;quot;&amp;quot;, // inventory: goods|intangibleGoods|rawMaterial|asset|intangibleAsset, expense: pointInTime|overTime, services: pointInTime|overTime, freight: standard, other: standard&lt;br /&gt;
&lt;br /&gt;
			lineItemQuantity: 1,&lt;br /&gt;
			lineItemUnitPrice: &amp;quot;2.00&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		//...&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== updatePurchase ==&lt;br /&gt;
&lt;br /&gt;
* make adjustment to journal entries when purchaseLineItemId changes&lt;br /&gt;
* handle removal of purchase/journal entries, or creation of new entries&lt;br /&gt;
* basically re-calculate all entries and check against existing&lt;br /&gt;
* each journalId must check Accounting that it&#039;s period/s are not locked, if locked return error, cannot make update&lt;br /&gt;
&lt;br /&gt;
= Working documents =&lt;br /&gt;
&lt;br /&gt;
[[:Category:Working_documents - CommerceAccounting Purchase| CommerceAccounting Purchase]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Backend services| CommerceAccounting Purchase]]&lt;/div&gt;</summary>
		<author><name>Mint</name></author>
	</entry>
	<entry>
		<id>https://izara.io/wiki/index.php?title=Service_-_CommerceAccounting_Purchase&amp;diff=4522</id>
		<title>Service - CommerceAccounting Purchase</title>
		<link rel="alternate" type="text/html" href="https://izara.io/wiki/index.php?title=Service_-_CommerceAccounting_Purchase&amp;diff=4522"/>
		<updated>2026-08-07T06:46:21Z</updated>

		<summary type="html">&lt;p&gt;Mint: /* comAccPurchaseLink */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Overview =&lt;br /&gt;
&lt;br /&gt;
Handle links between purchases and Accounting records.&lt;br /&gt;
&lt;br /&gt;
= Repository =&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
= Object Schemas =&lt;br /&gt;
; Additional Information: [[Per Service Schemas]]&lt;br /&gt;
&lt;br /&gt;
== comAccPurchaseLink ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
	objectType: &amp;quot;comAccPurchaseLink&amp;quot;,&lt;br /&gt;
    generatedBy: &amp;quot;userGenerated&amp;quot;,&lt;br /&gt;
	canDelete: false,&lt;br /&gt;
	addOnDataStructure: [],&lt;br /&gt;
    belongTo: {&lt;br /&gt;
		serviceTag: &amp;quot;ComAccLink&amp;quot;,&lt;br /&gt;
		objectType: &amp;quot;comAccLinkByBusiness&amp;quot;&lt;br /&gt;
	},&lt;br /&gt;
	storageResources: {&lt;br /&gt;
        &amp;quot;myGraph&amp;quot;:{&lt;br /&gt;
         storageType: &amp;quot;graph&amp;quot;,&lt;br /&gt;
         graphServerTag: &amp;quot;GraphHandler&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
		&amp;quot;dynamo&amp;quot;: {&lt;br /&gt;
			&amp;quot;storageType&amp;quot;: &amp;quot;dynamoDB&amp;quot;,&lt;br /&gt;
			&amp;quot;tableName&amp;quot;: &amp;quot;comAccPurchaseLink&amp;quot;,&lt;br /&gt;
		}&lt;br /&gt;
    },&lt;br /&gt;
    fieldNames: {&lt;br /&gt;
		businessId:{&lt;br /&gt;
            type: &amp;quot;string&amp;quot;,&lt;br /&gt;
			requriedOnCreate: true,&lt;br /&gt;
			storageResourceTags: [&#039;myGraph&#039;,&#039;dynamo&#039;]&lt;br /&gt;
        },&lt;br /&gt;
        accountLinkTag:{   // type of link: inputVAT|salesTax|vatTax..&lt;br /&gt;
            type: &amp;quot;string&amp;quot;,&lt;br /&gt;
			requriedOnCreate: true,&lt;br /&gt;
			storageResourceTags: [&#039;myGraph&#039;,&#039;dynamo&#039;]&lt;br /&gt;
        }		&lt;br /&gt;
       accountId:{&lt;br /&gt;
            type: &amp;quot;string&amp;quot;,&lt;br /&gt;
			requriedOnCreate: true,&lt;br /&gt;
			storageResourceTags: [&#039;myGraph&#039;,&#039;dynamo&#039;]&lt;br /&gt;
        }&lt;br /&gt;
    },&lt;br /&gt;
    identifiers: [&lt;br /&gt;
		{&lt;br /&gt;
			type: &amp;quot;partitionKey&amp;quot;,&lt;br /&gt;
			fieldName: &amp;quot;businessId&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
		{&lt;br /&gt;
			type: &amp;quot;sortKey&amp;quot;,&lt;br /&gt;
			fieldName: &amp;quot;accountLinkTag&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
    ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* sets which Accounting accountId journal entries are added to&lt;br /&gt;
&lt;br /&gt;
== comAccPurchase ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
	objectType: &amp;quot;comAccPurchase&amp;quot;,&lt;br /&gt;
    generatedBy: &amp;quot;systemGenerated&amp;quot;,&lt;br /&gt;
	canDelete: false,	&lt;br /&gt;
    addOnDataStructure: [],&lt;br /&gt;
	storageResources: {&lt;br /&gt;
		&amp;quot;dynamo&amp;quot;: {&lt;br /&gt;
			&amp;quot;storageType&amp;quot;: &amp;quot;dynamoDB&amp;quot;,&lt;br /&gt;
			&amp;quot;tableName&amp;quot;: &amp;quot;comAccPurchase&amp;quot;,&lt;br /&gt;
		}&lt;br /&gt;
    },&lt;br /&gt;
    fieldNames: {&lt;br /&gt;
		// businessId,&lt;br /&gt;
		// purchaseId,&lt;br /&gt;
&lt;br /&gt;
		// record lock eg: prefix: &amp;quot;updatePurchase&amp;quot;&lt;br /&gt;
		// updatePurchase_status:{requiredOnCreate: true}, // open|lock, &lt;br /&gt;
		// updatePurchase_uniqueRequestId :{requiredOnCreate: true},&lt;br /&gt;
		// updatePurchase_timestamp :{requiredOnCreate: true},&lt;br /&gt;
&lt;br /&gt;
		journalId: {&lt;br /&gt;
			type: &amp;quot;string&amp;quot;,&lt;br /&gt;
			optionalOnCreate: true,&lt;br /&gt;
			canUpdate: true,&lt;br /&gt;
			storageResourceTags: [&amp;quot;dynamo&amp;quot;],&lt;br /&gt;
		},&lt;br /&gt;
        &lt;br /&gt;
&lt;br /&gt;
    },&lt;br /&gt;
    identifiers: [&lt;br /&gt;
		{&lt;br /&gt;
			type: &amp;quot;partitionKey&amp;quot;,&lt;br /&gt;
			fieldName: &amp;quot;businessId&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
		{&lt;br /&gt;
			type: &amp;quot;sortKey&amp;quot;,&lt;br /&gt;
			fieldName: &amp;quot;purchaseId&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
    ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== comAccPurchaseLineItem ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
	objectType: &amp;quot;comAccPurchaseLineItem&amp;quot;,&lt;br /&gt;
	generatedBy: &amp;quot;systemGenerated&amp;quot;,&lt;br /&gt;
    canDelete: false,&lt;br /&gt;
	addOnDataStructure: [],&lt;br /&gt;
	storageResources: {&lt;br /&gt;
		&amp;quot;dynamo&amp;quot;: {&lt;br /&gt;
			&amp;quot;storageType&amp;quot;: &amp;quot;dynamoDB&amp;quot;,&lt;br /&gt;
			&amp;quot;tableName&amp;quot;: &amp;quot;comAccPurchaseLineItem&amp;quot;,&lt;br /&gt;
		}&lt;br /&gt;
    },&lt;br /&gt;
    fieldNames: {&lt;br /&gt;
		// purchaseId,&lt;br /&gt;
		// purchaseLineItemId,&lt;br /&gt;
		// accountId&lt;br /&gt;
		// lineItemQuantity&lt;br /&gt;
		// lineItemUnitPricelineItemUnitPrice&lt;br /&gt;
		// entryId // not sure want to record because multiple lineItems might be in the same entryId&lt;br /&gt;
    },&lt;br /&gt;
    identifiers: [&lt;br /&gt;
		{&lt;br /&gt;
			type: &amp;quot;partitionKey&amp;quot;,&lt;br /&gt;
			fieldName: &amp;quot;purchaseId&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		{&lt;br /&gt;
			type: &amp;quot;sortKey&amp;quot;,&lt;br /&gt;
			fieldName: &amp;quot;purchaseLineItemId&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
    ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* This table might not be needed becasue we do not create a journal entry per line item, we make a compound journal entry per purchase&lt;br /&gt;
* Keep it for now so we can reconcile Commerce data matches ComAcc data&lt;br /&gt;
&lt;br /&gt;
== Relationships ==&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
= flowSchemas =&lt;br /&gt;
&lt;br /&gt;
== createPurchase ==&lt;br /&gt;
&lt;br /&gt;
* when creating a purchase, iterate purchaseLineItems to decide which journal entries are created&lt;br /&gt;
* accountsPayable accountId comes from [[Service - CommerceAccounting Vendor]]&lt;br /&gt;
* each purchaseLineItem checks it&#039;s type then finds accountId from coresponding comAcc service&lt;br /&gt;
&lt;br /&gt;
=== Example request param from Commerce ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
	belongToIdentifiers: {&lt;br /&gt;
	  businessId: &amp;quot;xxx&amp;quot;&lt;br /&gt;
	},&lt;br /&gt;
	purchaseId: &amp;quot;&amp;quot;,&lt;br /&gt;
	vendorId: &amp;quot;&amp;quot;,&lt;br /&gt;
    timestamp: 1111111,&lt;br /&gt;
	purchaseCurrencyId: &amp;quot;&amp;quot;,&lt;br /&gt;
	inventoryLocationId: &amp;quot;&amp;quot;, // required if have any inventory/?assets&lt;br /&gt;
	purchaseLineItems: {&lt;br /&gt;
		{purchaseLineItemId}: {&lt;br /&gt;
&lt;br /&gt;
            inventoryId: &amp;quot;&amp;quot;,&lt;br /&gt;
            inventoryTemplateId: &amp;quot;&amp;quot;,&lt;br /&gt;
            // or&lt;br /&gt;
            expenseId: &amp;quot;&amp;quot;,&lt;br /&gt;
            // or&lt;br /&gt;
            servicesId: &amp;quot;&amp;quot;,&lt;br /&gt;
            servicesTemplateId: &amp;quot;&amp;quot;,&lt;br /&gt;
            // or&lt;br /&gt;
            freightInId: &amp;quot;&amp;quot;,&lt;br /&gt;
            // or&lt;br /&gt;
&lt;br /&gt;
            otherPurchaseItemId: &amp;quot;&amp;quot;,&lt;br /&gt;
            &lt;br /&gt;
&lt;br /&gt;
			type: &amp;quot;&amp;quot;, // inventory|expense|services|freight|salesTax|vatTax|other&lt;br /&gt;
			subType: &amp;quot;&amp;quot;, // inventory: goods|intangibleGoods|rawMaterial|asset|intangibleAsset, expense: pointInTime|overTime, services: pointInTime|overTime, freight: standard, other: standard&lt;br /&gt;
&lt;br /&gt;
			lineItemQuantity: 1,&lt;br /&gt;
			lineItemUnitPrice: &amp;quot;2.00&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		//...&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== updatePurchase ==&lt;br /&gt;
&lt;br /&gt;
* make adjustment to journal entries when purchaseLineItemId changes&lt;br /&gt;
* handle removal of purchase/journal entries, or creation of new entries&lt;br /&gt;
* basically re-calculate all entries and check against existing&lt;br /&gt;
* each journalId must check Accounting that it&#039;s period/s are not locked, if locked return error, cannot make update&lt;br /&gt;
&lt;br /&gt;
= Working documents =&lt;br /&gt;
&lt;br /&gt;
[[:Category:Working_documents - CommerceAccounting Purchase| CommerceAccounting Purchase]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Backend services| CommerceAccounting Purchase]]&lt;/div&gt;</summary>
		<author><name>Mint</name></author>
	</entry>
	<entry>
		<id>https://izara.io/wiki/index.php?title=Service_-_CommerceAccounting_Purchase&amp;diff=4521</id>
		<title>Service - CommerceAccounting Purchase</title>
		<link rel="alternate" type="text/html" href="https://izara.io/wiki/index.php?title=Service_-_CommerceAccounting_Purchase&amp;diff=4521"/>
		<updated>2026-08-07T06:45:29Z</updated>

		<summary type="html">&lt;p&gt;Mint: /* comAccPurchaseLineItem */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Overview =&lt;br /&gt;
&lt;br /&gt;
Handle links between purchases and Accounting records.&lt;br /&gt;
&lt;br /&gt;
= Repository =&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
= Object Schemas =&lt;br /&gt;
; Additional Information: [[Per Service Schemas]]&lt;br /&gt;
&lt;br /&gt;
== comAccPurchaseLink ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
	objectType: &amp;quot;comAccPurchaseLink&amp;quot;,&lt;br /&gt;
	canDelete: false,&lt;br /&gt;
	addOnDataStructure: [],&lt;br /&gt;
    belongTo: {&lt;br /&gt;
		serviceTag: &amp;quot;ComAccLink&amp;quot;,&lt;br /&gt;
		objectType: &amp;quot;comAccLinkByBusiness&amp;quot;&lt;br /&gt;
	},&lt;br /&gt;
	storageResources: {&lt;br /&gt;
        &amp;quot;myGraph&amp;quot;:{&lt;br /&gt;
         storageType: &amp;quot;graph&amp;quot;,&lt;br /&gt;
         graphServerTag: &amp;quot;GraphHandler&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
		&amp;quot;dynamo&amp;quot;: {&lt;br /&gt;
			&amp;quot;storageType&amp;quot;: &amp;quot;dynamoDB&amp;quot;,&lt;br /&gt;
			&amp;quot;tableName&amp;quot;: &amp;quot;comAccPurchaseLink&amp;quot;,&lt;br /&gt;
		}&lt;br /&gt;
    },&lt;br /&gt;
    fieldNames: {&lt;br /&gt;
		businessId:{&lt;br /&gt;
            type: &amp;quot;string&amp;quot;,&lt;br /&gt;
			requriedOnCreate: true,&lt;br /&gt;
			storageResourceTags: [&#039;myGraph&#039;,&#039;dynamo&#039;]&lt;br /&gt;
        },&lt;br /&gt;
        accountLinkTag:{   // type of link: inputVAT|salesTax|vatTax..&lt;br /&gt;
            type: &amp;quot;string&amp;quot;,&lt;br /&gt;
			requriedOnCreate: true,&lt;br /&gt;
			storageResourceTags: [&#039;myGraph&#039;,&#039;dynamo&#039;]&lt;br /&gt;
        }		&lt;br /&gt;
       accountId:{&lt;br /&gt;
            type: &amp;quot;string&amp;quot;,&lt;br /&gt;
			requriedOnCreate: true,&lt;br /&gt;
			storageResourceTags: [&#039;myGraph&#039;,&#039;dynamo&#039;]&lt;br /&gt;
        }&lt;br /&gt;
    },&lt;br /&gt;
    identifiers: [&lt;br /&gt;
		{&lt;br /&gt;
			type: &amp;quot;partitionKey&amp;quot;,&lt;br /&gt;
			fieldName: &amp;quot;businessId&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
		{&lt;br /&gt;
			type: &amp;quot;sortKey&amp;quot;,&lt;br /&gt;
			fieldName: &amp;quot;accountLinkTag&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
    ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* sets which Accounting accountId journal entries are added to&lt;br /&gt;
&lt;br /&gt;
== comAccPurchase ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
	objectType: &amp;quot;comAccPurchase&amp;quot;,&lt;br /&gt;
    generatedBy: &amp;quot;systemGenerated&amp;quot;,&lt;br /&gt;
	canDelete: false,	&lt;br /&gt;
    addOnDataStructure: [],&lt;br /&gt;
	storageResources: {&lt;br /&gt;
		&amp;quot;dynamo&amp;quot;: {&lt;br /&gt;
			&amp;quot;storageType&amp;quot;: &amp;quot;dynamoDB&amp;quot;,&lt;br /&gt;
			&amp;quot;tableName&amp;quot;: &amp;quot;comAccPurchase&amp;quot;,&lt;br /&gt;
		}&lt;br /&gt;
    },&lt;br /&gt;
    fieldNames: {&lt;br /&gt;
		// businessId,&lt;br /&gt;
		// purchaseId,&lt;br /&gt;
&lt;br /&gt;
		// record lock eg: prefix: &amp;quot;updatePurchase&amp;quot;&lt;br /&gt;
		// updatePurchase_status:{requiredOnCreate: true}, // open|lock, &lt;br /&gt;
		// updatePurchase_uniqueRequestId :{requiredOnCreate: true},&lt;br /&gt;
		// updatePurchase_timestamp :{requiredOnCreate: true},&lt;br /&gt;
&lt;br /&gt;
		journalId: {&lt;br /&gt;
			type: &amp;quot;string&amp;quot;,&lt;br /&gt;
			optionalOnCreate: true,&lt;br /&gt;
			canUpdate: true,&lt;br /&gt;
			storageResourceTags: [&amp;quot;dynamo&amp;quot;],&lt;br /&gt;
		},&lt;br /&gt;
        &lt;br /&gt;
&lt;br /&gt;
    },&lt;br /&gt;
    identifiers: [&lt;br /&gt;
		{&lt;br /&gt;
			type: &amp;quot;partitionKey&amp;quot;,&lt;br /&gt;
			fieldName: &amp;quot;businessId&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
		{&lt;br /&gt;
			type: &amp;quot;sortKey&amp;quot;,&lt;br /&gt;
			fieldName: &amp;quot;purchaseId&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
    ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== comAccPurchaseLineItem ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
	objectType: &amp;quot;comAccPurchaseLineItem&amp;quot;,&lt;br /&gt;
	generatedBy: &amp;quot;systemGenerated&amp;quot;,&lt;br /&gt;
    canDelete: false,&lt;br /&gt;
	addOnDataStructure: [],&lt;br /&gt;
	storageResources: {&lt;br /&gt;
		&amp;quot;dynamo&amp;quot;: {&lt;br /&gt;
			&amp;quot;storageType&amp;quot;: &amp;quot;dynamoDB&amp;quot;,&lt;br /&gt;
			&amp;quot;tableName&amp;quot;: &amp;quot;comAccPurchaseLineItem&amp;quot;,&lt;br /&gt;
		}&lt;br /&gt;
    },&lt;br /&gt;
    fieldNames: {&lt;br /&gt;
		// purchaseId,&lt;br /&gt;
		// purchaseLineItemId,&lt;br /&gt;
		// accountId&lt;br /&gt;
		// lineItemQuantity&lt;br /&gt;
		// lineItemUnitPricelineItemUnitPrice&lt;br /&gt;
		// entryId // not sure want to record because multiple lineItems might be in the same entryId&lt;br /&gt;
    },&lt;br /&gt;
    identifiers: [&lt;br /&gt;
		{&lt;br /&gt;
			type: &amp;quot;partitionKey&amp;quot;,&lt;br /&gt;
			fieldName: &amp;quot;purchaseId&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		{&lt;br /&gt;
			type: &amp;quot;sortKey&amp;quot;,&lt;br /&gt;
			fieldName: &amp;quot;purchaseLineItemId&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
    ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* This table might not be needed becasue we do not create a journal entry per line item, we make a compound journal entry per purchase&lt;br /&gt;
* Keep it for now so we can reconcile Commerce data matches ComAcc data&lt;br /&gt;
&lt;br /&gt;
== Relationships ==&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
= flowSchemas =&lt;br /&gt;
&lt;br /&gt;
== createPurchase ==&lt;br /&gt;
&lt;br /&gt;
* when creating a purchase, iterate purchaseLineItems to decide which journal entries are created&lt;br /&gt;
* accountsPayable accountId comes from [[Service - CommerceAccounting Vendor]]&lt;br /&gt;
* each purchaseLineItem checks it&#039;s type then finds accountId from coresponding comAcc service&lt;br /&gt;
&lt;br /&gt;
=== Example request param from Commerce ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
	belongToIdentifiers: {&lt;br /&gt;
	  businessId: &amp;quot;xxx&amp;quot;&lt;br /&gt;
	},&lt;br /&gt;
	purchaseId: &amp;quot;&amp;quot;,&lt;br /&gt;
	vendorId: &amp;quot;&amp;quot;,&lt;br /&gt;
    timestamp: 1111111,&lt;br /&gt;
	purchaseCurrencyId: &amp;quot;&amp;quot;,&lt;br /&gt;
	inventoryLocationId: &amp;quot;&amp;quot;, // required if have any inventory/?assets&lt;br /&gt;
	purchaseLineItems: {&lt;br /&gt;
		{purchaseLineItemId}: {&lt;br /&gt;
&lt;br /&gt;
            inventoryId: &amp;quot;&amp;quot;,&lt;br /&gt;
            inventoryTemplateId: &amp;quot;&amp;quot;,&lt;br /&gt;
            // or&lt;br /&gt;
            expenseId: &amp;quot;&amp;quot;,&lt;br /&gt;
            // or&lt;br /&gt;
            servicesId: &amp;quot;&amp;quot;,&lt;br /&gt;
            servicesTemplateId: &amp;quot;&amp;quot;,&lt;br /&gt;
            // or&lt;br /&gt;
            freightInId: &amp;quot;&amp;quot;,&lt;br /&gt;
            // or&lt;br /&gt;
&lt;br /&gt;
            otherPurchaseItemId: &amp;quot;&amp;quot;,&lt;br /&gt;
            &lt;br /&gt;
&lt;br /&gt;
			type: &amp;quot;&amp;quot;, // inventory|expense|services|freight|salesTax|vatTax|other&lt;br /&gt;
			subType: &amp;quot;&amp;quot;, // inventory: goods|intangibleGoods|rawMaterial|asset|intangibleAsset, expense: pointInTime|overTime, services: pointInTime|overTime, freight: standard, other: standard&lt;br /&gt;
&lt;br /&gt;
			lineItemQuantity: 1,&lt;br /&gt;
			lineItemUnitPrice: &amp;quot;2.00&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		//...&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== updatePurchase ==&lt;br /&gt;
&lt;br /&gt;
* make adjustment to journal entries when purchaseLineItemId changes&lt;br /&gt;
* handle removal of purchase/journal entries, or creation of new entries&lt;br /&gt;
* basically re-calculate all entries and check against existing&lt;br /&gt;
* each journalId must check Accounting that it&#039;s period/s are not locked, if locked return error, cannot make update&lt;br /&gt;
&lt;br /&gt;
= Working documents =&lt;br /&gt;
&lt;br /&gt;
[[:Category:Working_documents - CommerceAccounting Purchase| CommerceAccounting Purchase]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Backend services| CommerceAccounting Purchase]]&lt;/div&gt;</summary>
		<author><name>Mint</name></author>
	</entry>
	<entry>
		<id>https://izara.io/wiki/index.php?title=Service_-_CommerceAccounting_Purchase&amp;diff=4520</id>
		<title>Service - CommerceAccounting Purchase</title>
		<link rel="alternate" type="text/html" href="https://izara.io/wiki/index.php?title=Service_-_CommerceAccounting_Purchase&amp;diff=4520"/>
		<updated>2026-08-07T06:45:08Z</updated>

		<summary type="html">&lt;p&gt;Mint: /* comAccPurchase */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Overview =&lt;br /&gt;
&lt;br /&gt;
Handle links between purchases and Accounting records.&lt;br /&gt;
&lt;br /&gt;
= Repository =&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
= Object Schemas =&lt;br /&gt;
; Additional Information: [[Per Service Schemas]]&lt;br /&gt;
&lt;br /&gt;
== comAccPurchaseLink ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
	objectType: &amp;quot;comAccPurchaseLink&amp;quot;,&lt;br /&gt;
	canDelete: false,&lt;br /&gt;
	addOnDataStructure: [],&lt;br /&gt;
    belongTo: {&lt;br /&gt;
		serviceTag: &amp;quot;ComAccLink&amp;quot;,&lt;br /&gt;
		objectType: &amp;quot;comAccLinkByBusiness&amp;quot;&lt;br /&gt;
	},&lt;br /&gt;
	storageResources: {&lt;br /&gt;
        &amp;quot;myGraph&amp;quot;:{&lt;br /&gt;
         storageType: &amp;quot;graph&amp;quot;,&lt;br /&gt;
         graphServerTag: &amp;quot;GraphHandler&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
		&amp;quot;dynamo&amp;quot;: {&lt;br /&gt;
			&amp;quot;storageType&amp;quot;: &amp;quot;dynamoDB&amp;quot;,&lt;br /&gt;
			&amp;quot;tableName&amp;quot;: &amp;quot;comAccPurchaseLink&amp;quot;,&lt;br /&gt;
		}&lt;br /&gt;
    },&lt;br /&gt;
    fieldNames: {&lt;br /&gt;
		businessId:{&lt;br /&gt;
            type: &amp;quot;string&amp;quot;,&lt;br /&gt;
			requriedOnCreate: true,&lt;br /&gt;
			storageResourceTags: [&#039;myGraph&#039;,&#039;dynamo&#039;]&lt;br /&gt;
        },&lt;br /&gt;
        accountLinkTag:{   // type of link: inputVAT|salesTax|vatTax..&lt;br /&gt;
            type: &amp;quot;string&amp;quot;,&lt;br /&gt;
			requriedOnCreate: true,&lt;br /&gt;
			storageResourceTags: [&#039;myGraph&#039;,&#039;dynamo&#039;]&lt;br /&gt;
        }		&lt;br /&gt;
       accountId:{&lt;br /&gt;
            type: &amp;quot;string&amp;quot;,&lt;br /&gt;
			requriedOnCreate: true,&lt;br /&gt;
			storageResourceTags: [&#039;myGraph&#039;,&#039;dynamo&#039;]&lt;br /&gt;
        }&lt;br /&gt;
    },&lt;br /&gt;
    identifiers: [&lt;br /&gt;
		{&lt;br /&gt;
			type: &amp;quot;partitionKey&amp;quot;,&lt;br /&gt;
			fieldName: &amp;quot;businessId&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
		{&lt;br /&gt;
			type: &amp;quot;sortKey&amp;quot;,&lt;br /&gt;
			fieldName: &amp;quot;accountLinkTag&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
    ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* sets which Accounting accountId journal entries are added to&lt;br /&gt;
&lt;br /&gt;
== comAccPurchase ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
	objectType: &amp;quot;comAccPurchase&amp;quot;,&lt;br /&gt;
    generatedBy: &amp;quot;systemGenerated&amp;quot;,&lt;br /&gt;
	canDelete: false,	&lt;br /&gt;
    addOnDataStructure: [],&lt;br /&gt;
	storageResources: {&lt;br /&gt;
		&amp;quot;dynamo&amp;quot;: {&lt;br /&gt;
			&amp;quot;storageType&amp;quot;: &amp;quot;dynamoDB&amp;quot;,&lt;br /&gt;
			&amp;quot;tableName&amp;quot;: &amp;quot;comAccPurchase&amp;quot;,&lt;br /&gt;
		}&lt;br /&gt;
    },&lt;br /&gt;
    fieldNames: {&lt;br /&gt;
		// businessId,&lt;br /&gt;
		// purchaseId,&lt;br /&gt;
&lt;br /&gt;
		// record lock eg: prefix: &amp;quot;updatePurchase&amp;quot;&lt;br /&gt;
		// updatePurchase_status:{requiredOnCreate: true}, // open|lock, &lt;br /&gt;
		// updatePurchase_uniqueRequestId :{requiredOnCreate: true},&lt;br /&gt;
		// updatePurchase_timestamp :{requiredOnCreate: true},&lt;br /&gt;
&lt;br /&gt;
		journalId: {&lt;br /&gt;
			type: &amp;quot;string&amp;quot;,&lt;br /&gt;
			optionalOnCreate: true,&lt;br /&gt;
			canUpdate: true,&lt;br /&gt;
			storageResourceTags: [&amp;quot;dynamo&amp;quot;],&lt;br /&gt;
		},&lt;br /&gt;
        &lt;br /&gt;
&lt;br /&gt;
    },&lt;br /&gt;
    identifiers: [&lt;br /&gt;
		{&lt;br /&gt;
			type: &amp;quot;partitionKey&amp;quot;,&lt;br /&gt;
			fieldName: &amp;quot;businessId&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
		{&lt;br /&gt;
			type: &amp;quot;sortKey&amp;quot;,&lt;br /&gt;
			fieldName: &amp;quot;purchaseId&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
    ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== comAccPurchaseLineItem ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
	objectType: &amp;quot;comAccPurchaseLineItem&amp;quot;,&lt;br /&gt;
	canDelete: false,&lt;br /&gt;
	addOnDataStructure: [],&lt;br /&gt;
	storageResources: {&lt;br /&gt;
		&amp;quot;dynamo&amp;quot;: {&lt;br /&gt;
			&amp;quot;storageType&amp;quot;: &amp;quot;dynamoDB&amp;quot;,&lt;br /&gt;
			&amp;quot;tableName&amp;quot;: &amp;quot;comAccPurchaseLineItem&amp;quot;,&lt;br /&gt;
		}&lt;br /&gt;
    },&lt;br /&gt;
    fieldNames: {&lt;br /&gt;
		// purchaseId,&lt;br /&gt;
		// purchaseLineItemId,&lt;br /&gt;
		// accountId&lt;br /&gt;
		// lineItemQuantity&lt;br /&gt;
		// lineItemUnitPricelineItemUnitPrice&lt;br /&gt;
		// entryId // not sure want to record because multiple lineItems might be in the same entryId&lt;br /&gt;
    },&lt;br /&gt;
    identifiers: [&lt;br /&gt;
		{&lt;br /&gt;
			type: &amp;quot;partitionKey&amp;quot;,&lt;br /&gt;
			fieldName: &amp;quot;purchaseId&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		{&lt;br /&gt;
			type: &amp;quot;sortKey&amp;quot;,&lt;br /&gt;
			fieldName: &amp;quot;purchaseLineItemId&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
    ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* This table might not be needed becasue we do not create a journal entry per line item, we make a compound journal entry per purchase&lt;br /&gt;
* Keep it for now so we can reconcile Commerce data matches ComAcc data&lt;br /&gt;
&lt;br /&gt;
== Relationships ==&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
= flowSchemas =&lt;br /&gt;
&lt;br /&gt;
== createPurchase ==&lt;br /&gt;
&lt;br /&gt;
* when creating a purchase, iterate purchaseLineItems to decide which journal entries are created&lt;br /&gt;
* accountsPayable accountId comes from [[Service - CommerceAccounting Vendor]]&lt;br /&gt;
* each purchaseLineItem checks it&#039;s type then finds accountId from coresponding comAcc service&lt;br /&gt;
&lt;br /&gt;
=== Example request param from Commerce ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
	belongToIdentifiers: {&lt;br /&gt;
	  businessId: &amp;quot;xxx&amp;quot;&lt;br /&gt;
	},&lt;br /&gt;
	purchaseId: &amp;quot;&amp;quot;,&lt;br /&gt;
	vendorId: &amp;quot;&amp;quot;,&lt;br /&gt;
    timestamp: 1111111,&lt;br /&gt;
	purchaseCurrencyId: &amp;quot;&amp;quot;,&lt;br /&gt;
	inventoryLocationId: &amp;quot;&amp;quot;, // required if have any inventory/?assets&lt;br /&gt;
	purchaseLineItems: {&lt;br /&gt;
		{purchaseLineItemId}: {&lt;br /&gt;
&lt;br /&gt;
            inventoryId: &amp;quot;&amp;quot;,&lt;br /&gt;
            inventoryTemplateId: &amp;quot;&amp;quot;,&lt;br /&gt;
            // or&lt;br /&gt;
            expenseId: &amp;quot;&amp;quot;,&lt;br /&gt;
            // or&lt;br /&gt;
            servicesId: &amp;quot;&amp;quot;,&lt;br /&gt;
            servicesTemplateId: &amp;quot;&amp;quot;,&lt;br /&gt;
            // or&lt;br /&gt;
            freightInId: &amp;quot;&amp;quot;,&lt;br /&gt;
            // or&lt;br /&gt;
&lt;br /&gt;
            otherPurchaseItemId: &amp;quot;&amp;quot;,&lt;br /&gt;
            &lt;br /&gt;
&lt;br /&gt;
			type: &amp;quot;&amp;quot;, // inventory|expense|services|freight|salesTax|vatTax|other&lt;br /&gt;
			subType: &amp;quot;&amp;quot;, // inventory: goods|intangibleGoods|rawMaterial|asset|intangibleAsset, expense: pointInTime|overTime, services: pointInTime|overTime, freight: standard, other: standard&lt;br /&gt;
&lt;br /&gt;
			lineItemQuantity: 1,&lt;br /&gt;
			lineItemUnitPrice: &amp;quot;2.00&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		//...&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== updatePurchase ==&lt;br /&gt;
&lt;br /&gt;
* make adjustment to journal entries when purchaseLineItemId changes&lt;br /&gt;
* handle removal of purchase/journal entries, or creation of new entries&lt;br /&gt;
* basically re-calculate all entries and check against existing&lt;br /&gt;
* each journalId must check Accounting that it&#039;s period/s are not locked, if locked return error, cannot make update&lt;br /&gt;
&lt;br /&gt;
= Working documents =&lt;br /&gt;
&lt;br /&gt;
[[:Category:Working_documents - CommerceAccounting Purchase| CommerceAccounting Purchase]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Backend services| CommerceAccounting Purchase]]&lt;/div&gt;</summary>
		<author><name>Mint</name></author>
	</entry>
	<entry>
		<id>https://izara.io/wiki/index.php?title=Service_-_CommerceAccounting_Purchase&amp;diff=4519</id>
		<title>Service - CommerceAccounting Purchase</title>
		<link rel="alternate" type="text/html" href="https://izara.io/wiki/index.php?title=Service_-_CommerceAccounting_Purchase&amp;diff=4519"/>
		<updated>2026-08-07T06:44:15Z</updated>

		<summary type="html">&lt;p&gt;Mint: /* comAccPurchaseLink */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Overview =&lt;br /&gt;
&lt;br /&gt;
Handle links between purchases and Accounting records.&lt;br /&gt;
&lt;br /&gt;
= Repository =&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
= Object Schemas =&lt;br /&gt;
; Additional Information: [[Per Service Schemas]]&lt;br /&gt;
&lt;br /&gt;
== comAccPurchaseLink ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
	objectType: &amp;quot;comAccPurchaseLink&amp;quot;,&lt;br /&gt;
	canDelete: false,&lt;br /&gt;
	addOnDataStructure: [],&lt;br /&gt;
    belongTo: {&lt;br /&gt;
		serviceTag: &amp;quot;ComAccLink&amp;quot;,&lt;br /&gt;
		objectType: &amp;quot;comAccLinkByBusiness&amp;quot;&lt;br /&gt;
	},&lt;br /&gt;
	storageResources: {&lt;br /&gt;
        &amp;quot;myGraph&amp;quot;:{&lt;br /&gt;
         storageType: &amp;quot;graph&amp;quot;,&lt;br /&gt;
         graphServerTag: &amp;quot;GraphHandler&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
		&amp;quot;dynamo&amp;quot;: {&lt;br /&gt;
			&amp;quot;storageType&amp;quot;: &amp;quot;dynamoDB&amp;quot;,&lt;br /&gt;
			&amp;quot;tableName&amp;quot;: &amp;quot;comAccPurchaseLink&amp;quot;,&lt;br /&gt;
		}&lt;br /&gt;
    },&lt;br /&gt;
    fieldNames: {&lt;br /&gt;
		businessId:{&lt;br /&gt;
            type: &amp;quot;string&amp;quot;,&lt;br /&gt;
			requriedOnCreate: true,&lt;br /&gt;
			storageResourceTags: [&#039;myGraph&#039;,&#039;dynamo&#039;]&lt;br /&gt;
        },&lt;br /&gt;
        accountLinkTag:{   // type of link: inputVAT|salesTax|vatTax..&lt;br /&gt;
            type: &amp;quot;string&amp;quot;,&lt;br /&gt;
			requriedOnCreate: true,&lt;br /&gt;
			storageResourceTags: [&#039;myGraph&#039;,&#039;dynamo&#039;]&lt;br /&gt;
        }		&lt;br /&gt;
       accountId:{&lt;br /&gt;
            type: &amp;quot;string&amp;quot;,&lt;br /&gt;
			requriedOnCreate: true,&lt;br /&gt;
			storageResourceTags: [&#039;myGraph&#039;,&#039;dynamo&#039;]&lt;br /&gt;
        }&lt;br /&gt;
    },&lt;br /&gt;
    identifiers: [&lt;br /&gt;
		{&lt;br /&gt;
			type: &amp;quot;partitionKey&amp;quot;,&lt;br /&gt;
			fieldName: &amp;quot;businessId&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
		{&lt;br /&gt;
			type: &amp;quot;sortKey&amp;quot;,&lt;br /&gt;
			fieldName: &amp;quot;accountLinkTag&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
    ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* sets which Accounting accountId journal entries are added to&lt;br /&gt;
&lt;br /&gt;
== comAccPurchase ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
	objectType: &amp;quot;comAccPurchase&amp;quot;,&lt;br /&gt;
	canDelete: false,	&lt;br /&gt;
    addOnDataStructure: [],&lt;br /&gt;
	storageResources: {&lt;br /&gt;
		&amp;quot;dynamo&amp;quot;: {&lt;br /&gt;
			&amp;quot;storageType&amp;quot;: &amp;quot;dynamoDB&amp;quot;,&lt;br /&gt;
			&amp;quot;tableName&amp;quot;: &amp;quot;comAccPurchase&amp;quot;,&lt;br /&gt;
		}&lt;br /&gt;
    },&lt;br /&gt;
    fieldNames: {&lt;br /&gt;
		// businessId,&lt;br /&gt;
		// purchaseId,&lt;br /&gt;
&lt;br /&gt;
		// record lock eg: prefix: &amp;quot;updatePurchase&amp;quot;&lt;br /&gt;
		// updatePurchase_status:{requiredOnCreate: true}, // open|lock, &lt;br /&gt;
		// updatePurchase_uniqueRequestId :{requiredOnCreate: true},&lt;br /&gt;
		// updatePurchase_timestamp :{requiredOnCreate: true},&lt;br /&gt;
&lt;br /&gt;
		journalId: {&lt;br /&gt;
			type: &amp;quot;string&amp;quot;,&lt;br /&gt;
			optionalOnCreate: true,&lt;br /&gt;
			canUpdate: true,&lt;br /&gt;
			storageResourceTags: [&amp;quot;dynamo&amp;quot;],&lt;br /&gt;
		},&lt;br /&gt;
        &lt;br /&gt;
&lt;br /&gt;
    },&lt;br /&gt;
    identifiers: [&lt;br /&gt;
		{&lt;br /&gt;
			type: &amp;quot;partitionKey&amp;quot;,&lt;br /&gt;
			fieldName: &amp;quot;businessId&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
		{&lt;br /&gt;
			type: &amp;quot;sortKey&amp;quot;,&lt;br /&gt;
			fieldName: &amp;quot;purchaseId&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
    ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== comAccPurchaseLineItem ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
	objectType: &amp;quot;comAccPurchaseLineItem&amp;quot;,&lt;br /&gt;
	canDelete: false,&lt;br /&gt;
	addOnDataStructure: [],&lt;br /&gt;
	storageResources: {&lt;br /&gt;
		&amp;quot;dynamo&amp;quot;: {&lt;br /&gt;
			&amp;quot;storageType&amp;quot;: &amp;quot;dynamoDB&amp;quot;,&lt;br /&gt;
			&amp;quot;tableName&amp;quot;: &amp;quot;comAccPurchaseLineItem&amp;quot;,&lt;br /&gt;
		}&lt;br /&gt;
    },&lt;br /&gt;
    fieldNames: {&lt;br /&gt;
		// purchaseId,&lt;br /&gt;
		// purchaseLineItemId,&lt;br /&gt;
		// accountId&lt;br /&gt;
		// lineItemQuantity&lt;br /&gt;
		// lineItemUnitPricelineItemUnitPrice&lt;br /&gt;
		// entryId // not sure want to record because multiple lineItems might be in the same entryId&lt;br /&gt;
    },&lt;br /&gt;
    identifiers: [&lt;br /&gt;
		{&lt;br /&gt;
			type: &amp;quot;partitionKey&amp;quot;,&lt;br /&gt;
			fieldName: &amp;quot;purchaseId&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		{&lt;br /&gt;
			type: &amp;quot;sortKey&amp;quot;,&lt;br /&gt;
			fieldName: &amp;quot;purchaseLineItemId&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
    ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* This table might not be needed becasue we do not create a journal entry per line item, we make a compound journal entry per purchase&lt;br /&gt;
* Keep it for now so we can reconcile Commerce data matches ComAcc data&lt;br /&gt;
&lt;br /&gt;
== Relationships ==&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
= flowSchemas =&lt;br /&gt;
&lt;br /&gt;
== createPurchase ==&lt;br /&gt;
&lt;br /&gt;
* when creating a purchase, iterate purchaseLineItems to decide which journal entries are created&lt;br /&gt;
* accountsPayable accountId comes from [[Service - CommerceAccounting Vendor]]&lt;br /&gt;
* each purchaseLineItem checks it&#039;s type then finds accountId from coresponding comAcc service&lt;br /&gt;
&lt;br /&gt;
=== Example request param from Commerce ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
	belongToIdentifiers: {&lt;br /&gt;
	  businessId: &amp;quot;xxx&amp;quot;&lt;br /&gt;
	},&lt;br /&gt;
	purchaseId: &amp;quot;&amp;quot;,&lt;br /&gt;
	vendorId: &amp;quot;&amp;quot;,&lt;br /&gt;
    timestamp: 1111111,&lt;br /&gt;
	purchaseCurrencyId: &amp;quot;&amp;quot;,&lt;br /&gt;
	inventoryLocationId: &amp;quot;&amp;quot;, // required if have any inventory/?assets&lt;br /&gt;
	purchaseLineItems: {&lt;br /&gt;
		{purchaseLineItemId}: {&lt;br /&gt;
&lt;br /&gt;
            inventoryId: &amp;quot;&amp;quot;,&lt;br /&gt;
            inventoryTemplateId: &amp;quot;&amp;quot;,&lt;br /&gt;
            // or&lt;br /&gt;
            expenseId: &amp;quot;&amp;quot;,&lt;br /&gt;
            // or&lt;br /&gt;
            servicesId: &amp;quot;&amp;quot;,&lt;br /&gt;
            servicesTemplateId: &amp;quot;&amp;quot;,&lt;br /&gt;
            // or&lt;br /&gt;
            freightInId: &amp;quot;&amp;quot;,&lt;br /&gt;
            // or&lt;br /&gt;
&lt;br /&gt;
            otherPurchaseItemId: &amp;quot;&amp;quot;,&lt;br /&gt;
            &lt;br /&gt;
&lt;br /&gt;
			type: &amp;quot;&amp;quot;, // inventory|expense|services|freight|salesTax|vatTax|other&lt;br /&gt;
			subType: &amp;quot;&amp;quot;, // inventory: goods|intangibleGoods|rawMaterial|asset|intangibleAsset, expense: pointInTime|overTime, services: pointInTime|overTime, freight: standard, other: standard&lt;br /&gt;
&lt;br /&gt;
			lineItemQuantity: 1,&lt;br /&gt;
			lineItemUnitPrice: &amp;quot;2.00&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		//...&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== updatePurchase ==&lt;br /&gt;
&lt;br /&gt;
* make adjustment to journal entries when purchaseLineItemId changes&lt;br /&gt;
* handle removal of purchase/journal entries, or creation of new entries&lt;br /&gt;
* basically re-calculate all entries and check against existing&lt;br /&gt;
* each journalId must check Accounting that it&#039;s period/s are not locked, if locked return error, cannot make update&lt;br /&gt;
&lt;br /&gt;
= Working documents =&lt;br /&gt;
&lt;br /&gt;
[[:Category:Working_documents - CommerceAccounting Purchase| CommerceAccounting Purchase]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Backend services| CommerceAccounting Purchase]]&lt;/div&gt;</summary>
		<author><name>Mint</name></author>
	</entry>
	<entry>
		<id>https://izara.io/wiki/index.php?title=Service_-_CommerceAccounting_Link&amp;diff=4518</id>
		<title>Service - CommerceAccounting Link</title>
		<link rel="alternate" type="text/html" href="https://izara.io/wiki/index.php?title=Service_-_CommerceAccounting_Link&amp;diff=4518"/>
		<updated>2026-08-07T06:43:43Z</updated>

		<summary type="html">&lt;p&gt;Mint: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Overview =&lt;br /&gt;
&lt;br /&gt;
Configures the link between a Business in Izara Commerce and an organization in Izara Accounting.&lt;br /&gt;
&lt;br /&gt;
= Repository =&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
= Object Schemas =&lt;br /&gt;
; Additional Information: [[Per Service Schemas]]&lt;br /&gt;
&lt;br /&gt;
== comAccLinkByBusiness ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
	objectType: &amp;quot;comAccLinkByBusiness&amp;quot;,&lt;br /&gt;
	canDelete: false,&lt;br /&gt;
	belongTo: {&lt;br /&gt;
		serviceTag: &amp;quot;User&amp;quot;,&lt;br /&gt;
		objectType: &amp;quot;user&amp;quot;&lt;br /&gt;
	},&lt;br /&gt;
	addOnDataStructure: [&lt;br /&gt;
       {&lt;br /&gt;
          type:&amp;quot;rbac&amp;quot;&lt;br /&gt;
      }&lt;br /&gt;
&lt;br /&gt;
    ],&lt;br /&gt;
	storageResources: {&lt;br /&gt;
        &amp;quot;myGraph&amp;quot;:{&lt;br /&gt;
            &amp;quot;storageType&amp;quot;: &amp;quot;graph&amp;quot;,&lt;br /&gt;
            &amp;quot;graphServerTag&amp;quot;: &amp;quot;GraphHandler&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
		&amp;quot;dynamo&amp;quot;: {&lt;br /&gt;
			&amp;quot;storageType&amp;quot;: &amp;quot;dynamoDB&amp;quot;,&lt;br /&gt;
			&amp;quot;tableName&amp;quot;: &amp;quot;comAccLinkByBusiness&amp;quot;,&lt;br /&gt;
		}&lt;br /&gt;
    },&lt;br /&gt;
    fieldNames: {&lt;br /&gt;
		 businessId:{&lt;br /&gt;
            type: &amp;quot;string&amp;quot;,&lt;br /&gt;
			requriedOnCreate: true,&lt;br /&gt;
			storageResourceTags: [&#039;myGraph&#039;,&#039;dynamo&#039;]&lt;br /&gt;
         },		&lt;br /&gt;
		 organizationId:{&lt;br /&gt;
            type: &amp;quot;string&amp;quot;,&lt;br /&gt;
			requriedOnCreate: true,&lt;br /&gt;
			storageResourceTags: [&#039;myGraph&#039;,&#039;dynamo&#039;]&lt;br /&gt;
         }		&lt;br /&gt;
    },&lt;br /&gt;
    identifiers: [&lt;br /&gt;
		{&lt;br /&gt;
			// businessId&lt;br /&gt;
		}&lt;br /&gt;
    ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== comAccLinkByOrganization ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
	objectType: &amp;quot;comAccLinkByOrganization&amp;quot;,&lt;br /&gt;
	canDelete: false,&lt;br /&gt;
	belongTo: {&lt;br /&gt;
		serviceTag: &amp;quot;User&amp;quot;,&lt;br /&gt;
		objectType: &amp;quot;user&amp;quot;&lt;br /&gt;
	},&lt;br /&gt;
	addOnDataStructure: [],&lt;br /&gt;
	storageResources: {&lt;br /&gt;
		&amp;quot;dynamo&amp;quot;: {&lt;br /&gt;
			&amp;quot;storageType&amp;quot;: &amp;quot;dynamoDB&amp;quot;,&lt;br /&gt;
			&amp;quot;tableName&amp;quot;: &amp;quot;comAccLinkByOrganization&amp;quot;,&lt;br /&gt;
		}&lt;br /&gt;
    },&lt;br /&gt;
    fieldNames: {&lt;br /&gt;
		// organizationId&lt;br /&gt;
		// businessId		&lt;br /&gt;
    },&lt;br /&gt;
    identifiers: [&lt;br /&gt;
		{&lt;br /&gt;
			// organizationId&lt;br /&gt;
		}&lt;br /&gt;
    ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== comAccAccountLink ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
	objectType: &amp;quot;comAccAccountLink&amp;quot;,&lt;br /&gt;
	canDelete: true,&lt;br /&gt;
	belongTo: {&lt;br /&gt;
		serviceTag: &amp;quot;User&amp;quot;,&lt;br /&gt;
		objectType: &amp;quot;user&amp;quot;&lt;br /&gt;
	},&lt;br /&gt;
	addOnDataStructure: [],&lt;br /&gt;
	storageResources: {&lt;br /&gt;
		&amp;quot;dynamo&amp;quot;: {&lt;br /&gt;
			&amp;quot;storageType&amp;quot;: &amp;quot;dynamoDB&amp;quot;,&lt;br /&gt;
			&amp;quot;tableName&amp;quot;: &amp;quot;comAccAccountLink&amp;quot;,&lt;br /&gt;
		}&lt;br /&gt;
    },&lt;br /&gt;
    fieldNames: {&lt;br /&gt;
		businessId: {&lt;br /&gt;
			fromObjType:{&lt;br /&gt;
			  serviceTag: &amp;quot;CommerceAccountingLink&amp;quot;,&lt;br /&gt;
			  objectType: &amp;quot;comAccLink&amp;quot; &lt;br /&gt;
			},&lt;br /&gt;
		},&lt;br /&gt;
		organizationId: {&lt;br /&gt;
			fromObjType:{&lt;br /&gt;
			  serviceTag: &amp;quot;CommerceAccountingLink&amp;quot;,&lt;br /&gt;
			  objectType: &amp;quot;comAccLink&amp;quot; &lt;br /&gt;
			},&lt;br /&gt;
		},&lt;br /&gt;
		accountTag: { // this is the granular accounting classification that actions need to add entries to&lt;br /&gt;
			type: &amp;quot;string&amp;quot;,&lt;br /&gt;
			requiredOnCreate: true,&lt;br /&gt;
			canUpdate: false,&lt;br /&gt;
			userCanUpdate: false,&lt;br /&gt;
			storageResourceTags: [&amp;quot;dynamo&amp;quot;],&lt;br /&gt;
		},&lt;br /&gt;
		accountId: { // accountId from Izara Accounting&lt;br /&gt;
			type: &amp;quot;string&amp;quot;,&lt;br /&gt;
			requiredOnCreate: true,&lt;br /&gt;
			canUpdate: true,&lt;br /&gt;
			userCanUpdate: true,&lt;br /&gt;
			storageResourceTags: [&amp;quot;dynamo&amp;quot;],&lt;br /&gt;
		},&lt;br /&gt;
    },&lt;br /&gt;
    identifiers: [&lt;br /&gt;
		{&lt;br /&gt;
			type: &amp;quot;partitionKey&amp;quot;,&lt;br /&gt;
			fieldNames: [&amp;quot;businessId&amp;quot;,&amp;quot;organizationId&amp;quot;],&lt;br /&gt;
			name: &amp;quot;comAccLinkId&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
		{&lt;br /&gt;
			type: &amp;quot;sortKey&amp;quot;,&lt;br /&gt;
			fieldName: &amp;quot;accountTag&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
    ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* sets up which Accounting Accounts are used for different connection tasks&lt;br /&gt;
* example: which Accounting Account is adjusted when stock increases/decreases&lt;br /&gt;
* will need to have a plugIn level shared const lib of all accountTags&lt;br /&gt;
&lt;br /&gt;
== Relationships ==&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
= Working documents =&lt;br /&gt;
&lt;br /&gt;
[[:Category:Working_documents - CommerceAccounting Link| CommerceAccounting Link]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Backend services| CommerceAccounting Link]]&lt;/div&gt;</summary>
		<author><name>Mint</name></author>
	</entry>
	<entry>
		<id>https://izara.io/wiki/index.php?title=Service_-_CommerceAccounting_Purchase&amp;diff=4517</id>
		<title>Service - CommerceAccounting Purchase</title>
		<link rel="alternate" type="text/html" href="https://izara.io/wiki/index.php?title=Service_-_CommerceAccounting_Purchase&amp;diff=4517"/>
		<updated>2026-08-07T06:41:24Z</updated>

		<summary type="html">&lt;p&gt;Mint: /* comAccPurchaseLink */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Overview =&lt;br /&gt;
&lt;br /&gt;
Handle links between purchases and Accounting records.&lt;br /&gt;
&lt;br /&gt;
= Repository =&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
= Object Schemas =&lt;br /&gt;
; Additional Information: [[Per Service Schemas]]&lt;br /&gt;
&lt;br /&gt;
== comAccPurchaseLink ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
	objectType: &amp;quot;comAccPurchaseLink&amp;quot;,&lt;br /&gt;
	canDelete: false,&lt;br /&gt;
	addOnDataStructure: [&lt;br /&gt;
      {&lt;br /&gt;
          type:&amp;quot;rbac&amp;quot;&lt;br /&gt;
      }&lt;br /&gt;
&lt;br /&gt;
    ],&lt;br /&gt;
    belongTo: {&lt;br /&gt;
		serviceTag: &amp;quot;ComAccLink&amp;quot;,&lt;br /&gt;
		objectType: &amp;quot;comAccLinkByBusiness&amp;quot;&lt;br /&gt;
	},&lt;br /&gt;
	storageResources: {&lt;br /&gt;
        &amp;quot;myGraph&amp;quot;:{&lt;br /&gt;
         storageType: &amp;quot;graph&amp;quot;,&lt;br /&gt;
         graphServerTag: &amp;quot;GraphHandler&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
		&amp;quot;dynamo&amp;quot;: {&lt;br /&gt;
			&amp;quot;storageType&amp;quot;: &amp;quot;dynamoDB&amp;quot;,&lt;br /&gt;
			&amp;quot;tableName&amp;quot;: &amp;quot;comAccPurchaseLink&amp;quot;,&lt;br /&gt;
		}&lt;br /&gt;
    },&lt;br /&gt;
    fieldNames: {&lt;br /&gt;
		businessId:{&lt;br /&gt;
            type: &amp;quot;string&amp;quot;,&lt;br /&gt;
			requriedOnCreate: true,&lt;br /&gt;
			storageResourceTags: [&#039;myGraph&#039;,&#039;dynamo&#039;]&lt;br /&gt;
        },&lt;br /&gt;
        accountLinkTag:{   // type of link: inputVAT|salesTax|vatTax..&lt;br /&gt;
            type: &amp;quot;string&amp;quot;,&lt;br /&gt;
			requriedOnCreate: true,&lt;br /&gt;
			storageResourceTags: [&#039;myGraph&#039;,&#039;dynamo&#039;]&lt;br /&gt;
        }		&lt;br /&gt;
       accountId:{&lt;br /&gt;
            type: &amp;quot;string&amp;quot;,&lt;br /&gt;
			requriedOnCreate: true,&lt;br /&gt;
			storageResourceTags: [&#039;myGraph&#039;,&#039;dynamo&#039;]&lt;br /&gt;
        }&lt;br /&gt;
    },&lt;br /&gt;
    identifiers: [&lt;br /&gt;
		{&lt;br /&gt;
			type: &amp;quot;partitionKey&amp;quot;,&lt;br /&gt;
			fieldName: &amp;quot;businessId&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
		{&lt;br /&gt;
			type: &amp;quot;sortKey&amp;quot;,&lt;br /&gt;
			fieldName: &amp;quot;accountLinkTag&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
    ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* sets which Accounting accountId journal entries are added to&lt;br /&gt;
&lt;br /&gt;
== comAccPurchase ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
	objectType: &amp;quot;comAccPurchase&amp;quot;,&lt;br /&gt;
	canDelete: false,	&lt;br /&gt;
    addOnDataStructure: [],&lt;br /&gt;
	storageResources: {&lt;br /&gt;
		&amp;quot;dynamo&amp;quot;: {&lt;br /&gt;
			&amp;quot;storageType&amp;quot;: &amp;quot;dynamoDB&amp;quot;,&lt;br /&gt;
			&amp;quot;tableName&amp;quot;: &amp;quot;comAccPurchase&amp;quot;,&lt;br /&gt;
		}&lt;br /&gt;
    },&lt;br /&gt;
    fieldNames: {&lt;br /&gt;
		// businessId,&lt;br /&gt;
		// purchaseId,&lt;br /&gt;
&lt;br /&gt;
		// record lock eg: prefix: &amp;quot;updatePurchase&amp;quot;&lt;br /&gt;
		// updatePurchase_status:{requiredOnCreate: true}, // open|lock, &lt;br /&gt;
		// updatePurchase_uniqueRequestId :{requiredOnCreate: true},&lt;br /&gt;
		// updatePurchase_timestamp :{requiredOnCreate: true},&lt;br /&gt;
&lt;br /&gt;
		journalId: {&lt;br /&gt;
			type: &amp;quot;string&amp;quot;,&lt;br /&gt;
			optionalOnCreate: true,&lt;br /&gt;
			canUpdate: true,&lt;br /&gt;
			storageResourceTags: [&amp;quot;dynamo&amp;quot;],&lt;br /&gt;
		},&lt;br /&gt;
        &lt;br /&gt;
&lt;br /&gt;
    },&lt;br /&gt;
    identifiers: [&lt;br /&gt;
		{&lt;br /&gt;
			type: &amp;quot;partitionKey&amp;quot;,&lt;br /&gt;
			fieldName: &amp;quot;businessId&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
		{&lt;br /&gt;
			type: &amp;quot;sortKey&amp;quot;,&lt;br /&gt;
			fieldName: &amp;quot;purchaseId&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
    ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== comAccPurchaseLineItem ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
	objectType: &amp;quot;comAccPurchaseLineItem&amp;quot;,&lt;br /&gt;
	canDelete: false,&lt;br /&gt;
	addOnDataStructure: [],&lt;br /&gt;
	storageResources: {&lt;br /&gt;
		&amp;quot;dynamo&amp;quot;: {&lt;br /&gt;
			&amp;quot;storageType&amp;quot;: &amp;quot;dynamoDB&amp;quot;,&lt;br /&gt;
			&amp;quot;tableName&amp;quot;: &amp;quot;comAccPurchaseLineItem&amp;quot;,&lt;br /&gt;
		}&lt;br /&gt;
    },&lt;br /&gt;
    fieldNames: {&lt;br /&gt;
		// purchaseId,&lt;br /&gt;
		// purchaseLineItemId,&lt;br /&gt;
		// accountId&lt;br /&gt;
		// lineItemQuantity&lt;br /&gt;
		// lineItemUnitPricelineItemUnitPrice&lt;br /&gt;
		// entryId // not sure want to record because multiple lineItems might be in the same entryId&lt;br /&gt;
    },&lt;br /&gt;
    identifiers: [&lt;br /&gt;
		{&lt;br /&gt;
			type: &amp;quot;partitionKey&amp;quot;,&lt;br /&gt;
			fieldName: &amp;quot;purchaseId&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		{&lt;br /&gt;
			type: &amp;quot;sortKey&amp;quot;,&lt;br /&gt;
			fieldName: &amp;quot;purchaseLineItemId&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
    ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* This table might not be needed becasue we do not create a journal entry per line item, we make a compound journal entry per purchase&lt;br /&gt;
* Keep it for now so we can reconcile Commerce data matches ComAcc data&lt;br /&gt;
&lt;br /&gt;
== Relationships ==&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
= flowSchemas =&lt;br /&gt;
&lt;br /&gt;
== createPurchase ==&lt;br /&gt;
&lt;br /&gt;
* when creating a purchase, iterate purchaseLineItems to decide which journal entries are created&lt;br /&gt;
* accountsPayable accountId comes from [[Service - CommerceAccounting Vendor]]&lt;br /&gt;
* each purchaseLineItem checks it&#039;s type then finds accountId from coresponding comAcc service&lt;br /&gt;
&lt;br /&gt;
=== Example request param from Commerce ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
	belongToIdentifiers: {&lt;br /&gt;
	  businessId: &amp;quot;xxx&amp;quot;&lt;br /&gt;
	},&lt;br /&gt;
	purchaseId: &amp;quot;&amp;quot;,&lt;br /&gt;
	vendorId: &amp;quot;&amp;quot;,&lt;br /&gt;
    timestamp: 1111111,&lt;br /&gt;
	purchaseCurrencyId: &amp;quot;&amp;quot;,&lt;br /&gt;
	inventoryLocationId: &amp;quot;&amp;quot;, // required if have any inventory/?assets&lt;br /&gt;
	purchaseLineItems: {&lt;br /&gt;
		{purchaseLineItemId}: {&lt;br /&gt;
&lt;br /&gt;
            inventoryId: &amp;quot;&amp;quot;,&lt;br /&gt;
            inventoryTemplateId: &amp;quot;&amp;quot;,&lt;br /&gt;
            // or&lt;br /&gt;
            expenseId: &amp;quot;&amp;quot;,&lt;br /&gt;
            // or&lt;br /&gt;
            servicesId: &amp;quot;&amp;quot;,&lt;br /&gt;
            servicesTemplateId: &amp;quot;&amp;quot;,&lt;br /&gt;
            // or&lt;br /&gt;
            freightInId: &amp;quot;&amp;quot;,&lt;br /&gt;
            // or&lt;br /&gt;
&lt;br /&gt;
            otherPurchaseItemId: &amp;quot;&amp;quot;,&lt;br /&gt;
            &lt;br /&gt;
&lt;br /&gt;
			type: &amp;quot;&amp;quot;, // inventory|expense|services|freight|salesTax|vatTax|other&lt;br /&gt;
			subType: &amp;quot;&amp;quot;, // inventory: goods|intangibleGoods|rawMaterial|asset|intangibleAsset, expense: pointInTime|overTime, services: pointInTime|overTime, freight: standard, other: standard&lt;br /&gt;
&lt;br /&gt;
			lineItemQuantity: 1,&lt;br /&gt;
			lineItemUnitPrice: &amp;quot;2.00&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		//...&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== updatePurchase ==&lt;br /&gt;
&lt;br /&gt;
* make adjustment to journal entries when purchaseLineItemId changes&lt;br /&gt;
* handle removal of purchase/journal entries, or creation of new entries&lt;br /&gt;
* basically re-calculate all entries and check against existing&lt;br /&gt;
* each journalId must check Accounting that it&#039;s period/s are not locked, if locked return error, cannot make update&lt;br /&gt;
&lt;br /&gt;
= Working documents =&lt;br /&gt;
&lt;br /&gt;
[[:Category:Working_documents - CommerceAccounting Purchase| CommerceAccounting Purchase]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Backend services| CommerceAccounting Purchase]]&lt;/div&gt;</summary>
		<author><name>Mint</name></author>
	</entry>
	<entry>
		<id>https://izara.io/wiki/index.php?title=Service_-_CommerceAccounting_Purchase&amp;diff=4507</id>
		<title>Service - CommerceAccounting Purchase</title>
		<link rel="alternate" type="text/html" href="https://izara.io/wiki/index.php?title=Service_-_CommerceAccounting_Purchase&amp;diff=4507"/>
		<updated>2026-08-05T03:43:52Z</updated>

		<summary type="html">&lt;p&gt;Mint: /* comAccPurchase */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Overview =&lt;br /&gt;
&lt;br /&gt;
Handle links between purchases and Accounting records.&lt;br /&gt;
&lt;br /&gt;
= Repository =&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
= Object Schemas =&lt;br /&gt;
; Additional Information: [[Per Service Schemas]]&lt;br /&gt;
&lt;br /&gt;
== comAccPurchaseLink ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
	objectType: &amp;quot;comAccPurchaseLink&amp;quot;,&lt;br /&gt;
	canDelete: false,&lt;br /&gt;
	addOnDataStructure: [],&lt;br /&gt;
	storageResources: {&lt;br /&gt;
		&amp;quot;dynamo&amp;quot;: {&lt;br /&gt;
			&amp;quot;storageType&amp;quot;: &amp;quot;dynamoDB&amp;quot;,&lt;br /&gt;
			&amp;quot;tableName&amp;quot;: &amp;quot;comAccPurchaseLink&amp;quot;,&lt;br /&gt;
		}&lt;br /&gt;
    },&lt;br /&gt;
    fieldNames: {&lt;br /&gt;
		// businessId,&lt;br /&gt;
		// accountLinkTag // type of link: inputVAT|salesTax|vatTax..&lt;br /&gt;
		// accountId&lt;br /&gt;
    },&lt;br /&gt;
    identifiers: [&lt;br /&gt;
		{&lt;br /&gt;
			type: &amp;quot;partitionKey&amp;quot;,&lt;br /&gt;
			fieldName: &amp;quot;businessId&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
		{&lt;br /&gt;
			type: &amp;quot;sortKey&amp;quot;,&lt;br /&gt;
			fieldName: &amp;quot;accountLinkTag&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
    ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* sets which Accounting accountId journal entries are added to&lt;br /&gt;
&lt;br /&gt;
== comAccPurchase ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
	objectType: &amp;quot;comAccPurchase&amp;quot;,&lt;br /&gt;
	canDelete: false,	&lt;br /&gt;
    addOnDataStructure: [],&lt;br /&gt;
	storageResources: {&lt;br /&gt;
		&amp;quot;dynamo&amp;quot;: {&lt;br /&gt;
			&amp;quot;storageType&amp;quot;: &amp;quot;dynamoDB&amp;quot;,&lt;br /&gt;
			&amp;quot;tableName&amp;quot;: &amp;quot;comAccPurchase&amp;quot;,&lt;br /&gt;
		}&lt;br /&gt;
    },&lt;br /&gt;
    fieldNames: {&lt;br /&gt;
		// businessId,&lt;br /&gt;
		// purchaseId,&lt;br /&gt;
&lt;br /&gt;
		// record lock eg: prefix: &amp;quot;updatePurchase&amp;quot;&lt;br /&gt;
		// updatePurchase_status:{requiredOnCreate: true}, // open|lock, &lt;br /&gt;
		// updatePurchase_uniqueRequestId :{requiredOnCreate: true},&lt;br /&gt;
		// updatePurchase_timestamp :{requiredOnCreate: true},&lt;br /&gt;
&lt;br /&gt;
		journalId: {&lt;br /&gt;
			type: &amp;quot;string&amp;quot;,&lt;br /&gt;
			optionalOnCreate: true,&lt;br /&gt;
			canUpdate: true,&lt;br /&gt;
			storageResourceTags: [&amp;quot;dynamo&amp;quot;],&lt;br /&gt;
		},&lt;br /&gt;
        &lt;br /&gt;
&lt;br /&gt;
    },&lt;br /&gt;
    identifiers: [&lt;br /&gt;
		{&lt;br /&gt;
			type: &amp;quot;partitionKey&amp;quot;,&lt;br /&gt;
			fieldName: &amp;quot;businessId&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
		{&lt;br /&gt;
			type: &amp;quot;sortKey&amp;quot;,&lt;br /&gt;
			fieldName: &amp;quot;purchaseId&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
    ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== comAccPurchaseLineItem ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
	objectType: &amp;quot;comAccPurchaseLineItem&amp;quot;,&lt;br /&gt;
	canDelete: false,&lt;br /&gt;
	addOnDataStructure: [],&lt;br /&gt;
	storageResources: {&lt;br /&gt;
		&amp;quot;dynamo&amp;quot;: {&lt;br /&gt;
			&amp;quot;storageType&amp;quot;: &amp;quot;dynamoDB&amp;quot;,&lt;br /&gt;
			&amp;quot;tableName&amp;quot;: &amp;quot;comAccPurchaseLineItem&amp;quot;,&lt;br /&gt;
		}&lt;br /&gt;
    },&lt;br /&gt;
    fieldNames: {&lt;br /&gt;
		// purchaseId,&lt;br /&gt;
		// purchaseLineItemId,&lt;br /&gt;
		// accountId&lt;br /&gt;
		// lineItemQuantity&lt;br /&gt;
		// lineItemUnitPricelineItemUnitPrice&lt;br /&gt;
		// entryId // not sure want to record because multiple lineItems might be in the same entryId&lt;br /&gt;
    },&lt;br /&gt;
    identifiers: [&lt;br /&gt;
		{&lt;br /&gt;
			type: &amp;quot;partitionKey&amp;quot;,&lt;br /&gt;
			fieldName: &amp;quot;purchaseId&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		{&lt;br /&gt;
			type: &amp;quot;sortKey&amp;quot;,&lt;br /&gt;
			fieldName: &amp;quot;purchaseLineItemId&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
    ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* This table might not be needed becasue we do not create a journal entry per line item, we make a compound journal entry per purchase&lt;br /&gt;
* Keep it for now so we can reconcile Commerce data matches ComAcc data&lt;br /&gt;
&lt;br /&gt;
== Relationships ==&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
= flowSchemas =&lt;br /&gt;
&lt;br /&gt;
== createPurchase ==&lt;br /&gt;
&lt;br /&gt;
* when creating a purchase, iterate purchaseLineItems to decide which journal entries are created&lt;br /&gt;
* accountsPayable accountId comes from [[Service - CommerceAccounting Vendor]]&lt;br /&gt;
* each purchaseLineItem checks it&#039;s type then finds accountId from coresponding comAcc service&lt;br /&gt;
&lt;br /&gt;
=== Example request param from Commerce ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
	belongToIdentifiers: {&lt;br /&gt;
	  businessId: &amp;quot;xxx&amp;quot;&lt;br /&gt;
	},&lt;br /&gt;
	purchaseId: &amp;quot;&amp;quot;,&lt;br /&gt;
	vendorId: &amp;quot;&amp;quot;,&lt;br /&gt;
    timestamp: 1111111,&lt;br /&gt;
	purchaseCurrencyId: &amp;quot;&amp;quot;,&lt;br /&gt;
	inventoryLocationId: &amp;quot;&amp;quot;, // required if have any inventory/?assets&lt;br /&gt;
	purchaseLineItems: {&lt;br /&gt;
		{purchaseLineItemId}: {&lt;br /&gt;
&lt;br /&gt;
            inventoryId: &amp;quot;&amp;quot;,&lt;br /&gt;
            inventoryTemplateId: &amp;quot;&amp;quot;,&lt;br /&gt;
            // or&lt;br /&gt;
            expenseId: &amp;quot;&amp;quot;,&lt;br /&gt;
            // or&lt;br /&gt;
            servicesId: &amp;quot;&amp;quot;,&lt;br /&gt;
            servicesTemplateId: &amp;quot;&amp;quot;,&lt;br /&gt;
            // or&lt;br /&gt;
            freightInId: &amp;quot;&amp;quot;,&lt;br /&gt;
            // or&lt;br /&gt;
&lt;br /&gt;
            otherPurchaseItemId: &amp;quot;&amp;quot;,&lt;br /&gt;
            &lt;br /&gt;
&lt;br /&gt;
			type: &amp;quot;&amp;quot;, // inventory|expense|services|freight|salesTax|vatTax|other&lt;br /&gt;
			subType: &amp;quot;&amp;quot;, // inventory: goods|intangibleGoods|rawMaterial|asset|intangibleAsset, expense: pointInTime|overTime, services: pointInTime|overTime, freight: standard, other: standard&lt;br /&gt;
&lt;br /&gt;
			lineItemQuantity: 1,&lt;br /&gt;
			lineItemUnitPrice: &amp;quot;2.00&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		//...&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== updatePurchase ==&lt;br /&gt;
&lt;br /&gt;
* make adjustment to journal entries when purchaseLineItemId changes&lt;br /&gt;
* handle removal of purchase/journal entries, or creation of new entries&lt;br /&gt;
* basically re-calculate all entries and check against existing&lt;br /&gt;
* each journalId must check Accounting that it&#039;s period/s are not locked, if locked return error, cannot make update&lt;br /&gt;
&lt;br /&gt;
= Working documents =&lt;br /&gt;
&lt;br /&gt;
[[:Category:Working_documents - CommerceAccounting Purchase| CommerceAccounting Purchase]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Backend services| CommerceAccounting Purchase]]&lt;/div&gt;</summary>
		<author><name>Mint</name></author>
	</entry>
	<entry>
		<id>https://izara.io/wiki/index.php?title=Service_-_CommerceAccounting_Purchase&amp;diff=4497</id>
		<title>Service - CommerceAccounting Purchase</title>
		<link rel="alternate" type="text/html" href="https://izara.io/wiki/index.php?title=Service_-_CommerceAccounting_Purchase&amp;diff=4497"/>
		<updated>2026-07-31T06:04:19Z</updated>

		<summary type="html">&lt;p&gt;Mint: /* comAccPurchase */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Overview =&lt;br /&gt;
&lt;br /&gt;
Handle links between purchases and Accounting records.&lt;br /&gt;
&lt;br /&gt;
= Repository =&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
= Object Schemas =&lt;br /&gt;
; Additional Information: [[Per Service Schemas]]&lt;br /&gt;
&lt;br /&gt;
== comAccPurchaseLink ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
	objectType: &amp;quot;comAccPurchaseLink&amp;quot;,&lt;br /&gt;
	canDelete: false,&lt;br /&gt;
	addOnDataStructure: [],&lt;br /&gt;
	storageResources: {&lt;br /&gt;
		&amp;quot;dynamo&amp;quot;: {&lt;br /&gt;
			&amp;quot;storageType&amp;quot;: &amp;quot;dynamoDB&amp;quot;,&lt;br /&gt;
			&amp;quot;tableName&amp;quot;: &amp;quot;comAccPurchaseLink&amp;quot;,&lt;br /&gt;
		}&lt;br /&gt;
    },&lt;br /&gt;
    fieldNames: {&lt;br /&gt;
		// businessId,&lt;br /&gt;
		// accountLinkTag // type of link: inputVAT|salesTax|vatTax..&lt;br /&gt;
		// accountId&lt;br /&gt;
    },&lt;br /&gt;
    identifiers: [&lt;br /&gt;
		{&lt;br /&gt;
			type: &amp;quot;partitionKey&amp;quot;,&lt;br /&gt;
			fieldName: &amp;quot;businessId&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
		{&lt;br /&gt;
			type: &amp;quot;sortKey&amp;quot;,&lt;br /&gt;
			fieldName: &amp;quot;accountLinkTag&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
    ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* sets which Accounting accountId journal entries are added to&lt;br /&gt;
&lt;br /&gt;
== comAccPurchase ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
	objectType: &amp;quot;comAccPurchase&amp;quot;,&lt;br /&gt;
	canDelete: false,	&lt;br /&gt;
    addOnDataStructure: [],&lt;br /&gt;
	storageResources: {&lt;br /&gt;
		&amp;quot;dynamo&amp;quot;: {&lt;br /&gt;
			&amp;quot;storageType&amp;quot;: &amp;quot;dynamoDB&amp;quot;,&lt;br /&gt;
			&amp;quot;tableName&amp;quot;: &amp;quot;comAccPurchase&amp;quot;,&lt;br /&gt;
		}&lt;br /&gt;
    },&lt;br /&gt;
    fieldNames: {&lt;br /&gt;
		// businessId,&lt;br /&gt;
		// purchaseId,&lt;br /&gt;
&lt;br /&gt;
		// record lock&lt;br /&gt;
		// updatePurchase_status:{requiredOnCreate: true}, // open|lock, &lt;br /&gt;
        // prefix :{requiredOnCreate: true},// updatePurchase&lt;br /&gt;
		// updatePurchase_uniqueRequestId :{requiredOnCreate: true},&lt;br /&gt;
		// updatePurchase_timestamp :{requiredOnCreate: true},&lt;br /&gt;
&lt;br /&gt;
		journalId: {&lt;br /&gt;
			type: &amp;quot;string&amp;quot;,&lt;br /&gt;
			optionalOnCreate: true,&lt;br /&gt;
			canUpdate: true,&lt;br /&gt;
			storageResourceTags: [&amp;quot;dynamo&amp;quot;],&lt;br /&gt;
		},&lt;br /&gt;
        &lt;br /&gt;
&lt;br /&gt;
    },&lt;br /&gt;
    identifiers: [&lt;br /&gt;
		{&lt;br /&gt;
			type: &amp;quot;partitionKey&amp;quot;,&lt;br /&gt;
			fieldName: &amp;quot;businessId&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
		{&lt;br /&gt;
			type: &amp;quot;sortKey&amp;quot;,&lt;br /&gt;
			fieldName: &amp;quot;purchaseId&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
    ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== comAccPurchaseLineItem ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
	objectType: &amp;quot;comAccPurchaseLineItem&amp;quot;,&lt;br /&gt;
	canDelete: false,&lt;br /&gt;
	addOnDataStructure: [],&lt;br /&gt;
	storageResources: {&lt;br /&gt;
		&amp;quot;dynamo&amp;quot;: {&lt;br /&gt;
			&amp;quot;storageType&amp;quot;: &amp;quot;dynamoDB&amp;quot;,&lt;br /&gt;
			&amp;quot;tableName&amp;quot;: &amp;quot;comAccPurchaseLineItem&amp;quot;,&lt;br /&gt;
		}&lt;br /&gt;
    },&lt;br /&gt;
    fieldNames: {&lt;br /&gt;
		// purchaseId,&lt;br /&gt;
		// purchaseLineItemId,&lt;br /&gt;
		// accountId&lt;br /&gt;
		// lineItemQuantity&lt;br /&gt;
		// lineItemUnitPricelineItemUnitPrice&lt;br /&gt;
		// entryId // not sure want to record because multiple lineItems might be in the same entryId&lt;br /&gt;
    },&lt;br /&gt;
    identifiers: [&lt;br /&gt;
		{&lt;br /&gt;
			type: &amp;quot;partitionKey&amp;quot;,&lt;br /&gt;
			fieldName: &amp;quot;purchaseId&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		{&lt;br /&gt;
			type: &amp;quot;sortKey&amp;quot;,&lt;br /&gt;
			fieldName: &amp;quot;purchaseLineItemId&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
    ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* This table might not be needed becasue we do not create a journal entry per line item, we make a compound journal entry per purchase&lt;br /&gt;
* Keep it for now so we can reconcile Commerce data matches ComAcc data&lt;br /&gt;
&lt;br /&gt;
== Relationships ==&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
= flowSchemas =&lt;br /&gt;
&lt;br /&gt;
== createPurchase ==&lt;br /&gt;
&lt;br /&gt;
* when creating a purchase, iterate purchaseLineItems to decide which journal entries are created&lt;br /&gt;
* accountsPayable accountId comes from [[Service - CommerceAccounting Vendor]]&lt;br /&gt;
* each purchaseLineItem checks it&#039;s type then finds accountId from coresponding comAcc service&lt;br /&gt;
&lt;br /&gt;
=== Example request param from Commerce ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
	belongToIdentifiers: {&lt;br /&gt;
	  businessId: &amp;quot;xxx&amp;quot;&lt;br /&gt;
	},&lt;br /&gt;
	purchaseId: &amp;quot;&amp;quot;,&lt;br /&gt;
	vendorId: &amp;quot;&amp;quot;,&lt;br /&gt;
    timestamp: 1111111,&lt;br /&gt;
	purchaseCurrencyId: &amp;quot;&amp;quot;,&lt;br /&gt;
	inventoryLocationId: &amp;quot;&amp;quot;, // required if have any inventory/?assets&lt;br /&gt;
	purchaseLineItems: {&lt;br /&gt;
		{purchaseLineItemId}: {&lt;br /&gt;
&lt;br /&gt;
            inventoryId: &amp;quot;&amp;quot;,&lt;br /&gt;
            inventoryTemplateId: &amp;quot;&amp;quot;,&lt;br /&gt;
            // or&lt;br /&gt;
            expenseId: &amp;quot;&amp;quot;,&lt;br /&gt;
            // or&lt;br /&gt;
            servicesId: &amp;quot;&amp;quot;,&lt;br /&gt;
            servicesTemplateId: &amp;quot;&amp;quot;,&lt;br /&gt;
            // or&lt;br /&gt;
            freightInId: &amp;quot;&amp;quot;,&lt;br /&gt;
            // or&lt;br /&gt;
&lt;br /&gt;
            otherPurchaseItemId: &amp;quot;&amp;quot;,&lt;br /&gt;
            &lt;br /&gt;
&lt;br /&gt;
			type: &amp;quot;&amp;quot;, // inventory|expense|services|freight|salesTax|vatTax|other&lt;br /&gt;
			subType: &amp;quot;&amp;quot;, // inventory: goods|intangibleGoods|rawMaterial|asset|intangibleAsset, expense: pointInTime|overTime, services: pointInTime|overTime, freight: standard, other: standard&lt;br /&gt;
&lt;br /&gt;
			lineItemQuantity: 1,&lt;br /&gt;
			lineItemUnitPrice: &amp;quot;2.00&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		//...&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== updatePurchase ==&lt;br /&gt;
&lt;br /&gt;
* make adjustment to journal entries when purchaseLineItemId changes&lt;br /&gt;
* handle removal of purchase/journal entries, or creation of new entries&lt;br /&gt;
* basically re-calculate all entries and check against existing&lt;br /&gt;
* each journalId must check Accounting that it&#039;s period/s are not locked, if locked return error, cannot make update&lt;br /&gt;
&lt;br /&gt;
= Working documents =&lt;br /&gt;
&lt;br /&gt;
[[:Category:Working_documents - CommerceAccounting Purchase| CommerceAccounting Purchase]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Backend services| CommerceAccounting Purchase]]&lt;/div&gt;</summary>
		<author><name>Mint</name></author>
	</entry>
	<entry>
		<id>https://izara.io/wiki/index.php?title=Service_-_CommerceAccounting_Purchase&amp;diff=4496</id>
		<title>Service - CommerceAccounting Purchase</title>
		<link rel="alternate" type="text/html" href="https://izara.io/wiki/index.php?title=Service_-_CommerceAccounting_Purchase&amp;diff=4496"/>
		<updated>2026-07-31T06:04:09Z</updated>

		<summary type="html">&lt;p&gt;Mint: /* comAccPurchase */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Overview =&lt;br /&gt;
&lt;br /&gt;
Handle links between purchases and Accounting records.&lt;br /&gt;
&lt;br /&gt;
= Repository =&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
= Object Schemas =&lt;br /&gt;
; Additional Information: [[Per Service Schemas]]&lt;br /&gt;
&lt;br /&gt;
== comAccPurchaseLink ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
	objectType: &amp;quot;comAccPurchaseLink&amp;quot;,&lt;br /&gt;
	canDelete: false,&lt;br /&gt;
	addOnDataStructure: [],&lt;br /&gt;
	storageResources: {&lt;br /&gt;
		&amp;quot;dynamo&amp;quot;: {&lt;br /&gt;
			&amp;quot;storageType&amp;quot;: &amp;quot;dynamoDB&amp;quot;,&lt;br /&gt;
			&amp;quot;tableName&amp;quot;: &amp;quot;comAccPurchaseLink&amp;quot;,&lt;br /&gt;
		}&lt;br /&gt;
    },&lt;br /&gt;
    fieldNames: {&lt;br /&gt;
		// businessId,&lt;br /&gt;
		// accountLinkTag // type of link: inputVAT|salesTax|vatTax..&lt;br /&gt;
		// accountId&lt;br /&gt;
    },&lt;br /&gt;
    identifiers: [&lt;br /&gt;
		{&lt;br /&gt;
			type: &amp;quot;partitionKey&amp;quot;,&lt;br /&gt;
			fieldName: &amp;quot;businessId&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
		{&lt;br /&gt;
			type: &amp;quot;sortKey&amp;quot;,&lt;br /&gt;
			fieldName: &amp;quot;accountLinkTag&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
    ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* sets which Accounting accountId journal entries are added to&lt;br /&gt;
&lt;br /&gt;
== comAccPurchase ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
	objectType: &amp;quot;comAccPurchase&amp;quot;,&lt;br /&gt;
	canDelete: false,	&lt;br /&gt;
    addOnDataStructure: [],&lt;br /&gt;
	storageResources: {&lt;br /&gt;
		&amp;quot;dynamo&amp;quot;: {&lt;br /&gt;
			&amp;quot;storageType&amp;quot;: &amp;quot;dynamoDB&amp;quot;,&lt;br /&gt;
			&amp;quot;tableName&amp;quot;: &amp;quot;comAccPurchase&amp;quot;,&lt;br /&gt;
		}&lt;br /&gt;
    },&lt;br /&gt;
    fieldNames: {&lt;br /&gt;
		// businessId,&lt;br /&gt;
		// purchaseId,&lt;br /&gt;
&lt;br /&gt;
		// record lock&lt;br /&gt;
		// updatePurchase_status:{requiredOnCreate: true}, // open|lock, &lt;br /&gt;
        // prefix {requiredOnCreate: true},// updatePurchase&lt;br /&gt;
		// updatePurchase_uniqueRequestId :{requiredOnCreate: true},&lt;br /&gt;
		// updatePurchase_timestamp :{requiredOnCreate: true},&lt;br /&gt;
&lt;br /&gt;
		journalId: {&lt;br /&gt;
			type: &amp;quot;string&amp;quot;,&lt;br /&gt;
			optionalOnCreate: true,&lt;br /&gt;
			canUpdate: true,&lt;br /&gt;
			storageResourceTags: [&amp;quot;dynamo&amp;quot;],&lt;br /&gt;
		},&lt;br /&gt;
        &lt;br /&gt;
&lt;br /&gt;
    },&lt;br /&gt;
    identifiers: [&lt;br /&gt;
		{&lt;br /&gt;
			type: &amp;quot;partitionKey&amp;quot;,&lt;br /&gt;
			fieldName: &amp;quot;businessId&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
		{&lt;br /&gt;
			type: &amp;quot;sortKey&amp;quot;,&lt;br /&gt;
			fieldName: &amp;quot;purchaseId&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
    ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== comAccPurchaseLineItem ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
	objectType: &amp;quot;comAccPurchaseLineItem&amp;quot;,&lt;br /&gt;
	canDelete: false,&lt;br /&gt;
	addOnDataStructure: [],&lt;br /&gt;
	storageResources: {&lt;br /&gt;
		&amp;quot;dynamo&amp;quot;: {&lt;br /&gt;
			&amp;quot;storageType&amp;quot;: &amp;quot;dynamoDB&amp;quot;,&lt;br /&gt;
			&amp;quot;tableName&amp;quot;: &amp;quot;comAccPurchaseLineItem&amp;quot;,&lt;br /&gt;
		}&lt;br /&gt;
    },&lt;br /&gt;
    fieldNames: {&lt;br /&gt;
		// purchaseId,&lt;br /&gt;
		// purchaseLineItemId,&lt;br /&gt;
		// accountId&lt;br /&gt;
		// lineItemQuantity&lt;br /&gt;
		// lineItemUnitPricelineItemUnitPrice&lt;br /&gt;
		// entryId // not sure want to record because multiple lineItems might be in the same entryId&lt;br /&gt;
    },&lt;br /&gt;
    identifiers: [&lt;br /&gt;
		{&lt;br /&gt;
			type: &amp;quot;partitionKey&amp;quot;,&lt;br /&gt;
			fieldName: &amp;quot;purchaseId&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		{&lt;br /&gt;
			type: &amp;quot;sortKey&amp;quot;,&lt;br /&gt;
			fieldName: &amp;quot;purchaseLineItemId&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
    ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* This table might not be needed becasue we do not create a journal entry per line item, we make a compound journal entry per purchase&lt;br /&gt;
* Keep it for now so we can reconcile Commerce data matches ComAcc data&lt;br /&gt;
&lt;br /&gt;
== Relationships ==&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
= flowSchemas =&lt;br /&gt;
&lt;br /&gt;
== createPurchase ==&lt;br /&gt;
&lt;br /&gt;
* when creating a purchase, iterate purchaseLineItems to decide which journal entries are created&lt;br /&gt;
* accountsPayable accountId comes from [[Service - CommerceAccounting Vendor]]&lt;br /&gt;
* each purchaseLineItem checks it&#039;s type then finds accountId from coresponding comAcc service&lt;br /&gt;
&lt;br /&gt;
=== Example request param from Commerce ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
	belongToIdentifiers: {&lt;br /&gt;
	  businessId: &amp;quot;xxx&amp;quot;&lt;br /&gt;
	},&lt;br /&gt;
	purchaseId: &amp;quot;&amp;quot;,&lt;br /&gt;
	vendorId: &amp;quot;&amp;quot;,&lt;br /&gt;
    timestamp: 1111111,&lt;br /&gt;
	purchaseCurrencyId: &amp;quot;&amp;quot;,&lt;br /&gt;
	inventoryLocationId: &amp;quot;&amp;quot;, // required if have any inventory/?assets&lt;br /&gt;
	purchaseLineItems: {&lt;br /&gt;
		{purchaseLineItemId}: {&lt;br /&gt;
&lt;br /&gt;
            inventoryId: &amp;quot;&amp;quot;,&lt;br /&gt;
            inventoryTemplateId: &amp;quot;&amp;quot;,&lt;br /&gt;
            // or&lt;br /&gt;
            expenseId: &amp;quot;&amp;quot;,&lt;br /&gt;
            // or&lt;br /&gt;
            servicesId: &amp;quot;&amp;quot;,&lt;br /&gt;
            servicesTemplateId: &amp;quot;&amp;quot;,&lt;br /&gt;
            // or&lt;br /&gt;
            freightInId: &amp;quot;&amp;quot;,&lt;br /&gt;
            // or&lt;br /&gt;
&lt;br /&gt;
            otherPurchaseItemId: &amp;quot;&amp;quot;,&lt;br /&gt;
            &lt;br /&gt;
&lt;br /&gt;
			type: &amp;quot;&amp;quot;, // inventory|expense|services|freight|salesTax|vatTax|other&lt;br /&gt;
			subType: &amp;quot;&amp;quot;, // inventory: goods|intangibleGoods|rawMaterial|asset|intangibleAsset, expense: pointInTime|overTime, services: pointInTime|overTime, freight: standard, other: standard&lt;br /&gt;
&lt;br /&gt;
			lineItemQuantity: 1,&lt;br /&gt;
			lineItemUnitPrice: &amp;quot;2.00&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		//...&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== updatePurchase ==&lt;br /&gt;
&lt;br /&gt;
* make adjustment to journal entries when purchaseLineItemId changes&lt;br /&gt;
* handle removal of purchase/journal entries, or creation of new entries&lt;br /&gt;
* basically re-calculate all entries and check against existing&lt;br /&gt;
* each journalId must check Accounting that it&#039;s period/s are not locked, if locked return error, cannot make update&lt;br /&gt;
&lt;br /&gt;
= Working documents =&lt;br /&gt;
&lt;br /&gt;
[[:Category:Working_documents - CommerceAccounting Purchase| CommerceAccounting Purchase]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Backend services| CommerceAccounting Purchase]]&lt;/div&gt;</summary>
		<author><name>Mint</name></author>
	</entry>
	<entry>
		<id>https://izara.io/wiki/index.php?title=Service_-_CommerceAccounting_Purchase&amp;diff=4495</id>
		<title>Service - CommerceAccounting Purchase</title>
		<link rel="alternate" type="text/html" href="https://izara.io/wiki/index.php?title=Service_-_CommerceAccounting_Purchase&amp;diff=4495"/>
		<updated>2026-07-31T06:03:29Z</updated>

		<summary type="html">&lt;p&gt;Mint: /* comAccPurchase */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Overview =&lt;br /&gt;
&lt;br /&gt;
Handle links between purchases and Accounting records.&lt;br /&gt;
&lt;br /&gt;
= Repository =&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
= Object Schemas =&lt;br /&gt;
; Additional Information: [[Per Service Schemas]]&lt;br /&gt;
&lt;br /&gt;
== comAccPurchaseLink ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
	objectType: &amp;quot;comAccPurchaseLink&amp;quot;,&lt;br /&gt;
	canDelete: false,&lt;br /&gt;
	addOnDataStructure: [],&lt;br /&gt;
	storageResources: {&lt;br /&gt;
		&amp;quot;dynamo&amp;quot;: {&lt;br /&gt;
			&amp;quot;storageType&amp;quot;: &amp;quot;dynamoDB&amp;quot;,&lt;br /&gt;
			&amp;quot;tableName&amp;quot;: &amp;quot;comAccPurchaseLink&amp;quot;,&lt;br /&gt;
		}&lt;br /&gt;
    },&lt;br /&gt;
    fieldNames: {&lt;br /&gt;
		// businessId,&lt;br /&gt;
		// accountLinkTag // type of link: inputVAT|salesTax|vatTax..&lt;br /&gt;
		// accountId&lt;br /&gt;
    },&lt;br /&gt;
    identifiers: [&lt;br /&gt;
		{&lt;br /&gt;
			type: &amp;quot;partitionKey&amp;quot;,&lt;br /&gt;
			fieldName: &amp;quot;businessId&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
		{&lt;br /&gt;
			type: &amp;quot;sortKey&amp;quot;,&lt;br /&gt;
			fieldName: &amp;quot;accountLinkTag&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
    ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* sets which Accounting accountId journal entries are added to&lt;br /&gt;
&lt;br /&gt;
== comAccPurchase ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
	objectType: &amp;quot;comAccPurchase&amp;quot;,&lt;br /&gt;
	canDelete: false,	&lt;br /&gt;
    addOnDataStructure: [],&lt;br /&gt;
	storageResources: {&lt;br /&gt;
		&amp;quot;dynamo&amp;quot;: {&lt;br /&gt;
			&amp;quot;storageType&amp;quot;: &amp;quot;dynamoDB&amp;quot;,&lt;br /&gt;
			&amp;quot;tableName&amp;quot;: &amp;quot;comAccPurchase&amp;quot;,&lt;br /&gt;
		}&lt;br /&gt;
    },&lt;br /&gt;
    fieldNames: {&lt;br /&gt;
		// businessId,&lt;br /&gt;
		// purchaseId,&lt;br /&gt;
&lt;br /&gt;
		// record lock&lt;br /&gt;
		// updatePurchase_status:{requiredOnCreate: true}, // open|lock, prefix updatePurchase&lt;br /&gt;
		// updatePurchase_uniqueRequestId :{requiredOnCreate: true},&lt;br /&gt;
		// updatePurchase_timestamp :{requiredOnCreate: true},&lt;br /&gt;
&lt;br /&gt;
		journalId: {&lt;br /&gt;
			type: &amp;quot;string&amp;quot;,&lt;br /&gt;
			optionalOnCreate: true,&lt;br /&gt;
			canUpdate: true,&lt;br /&gt;
			storageResourceTags: [&amp;quot;dynamo&amp;quot;],&lt;br /&gt;
		},&lt;br /&gt;
        &lt;br /&gt;
&lt;br /&gt;
    },&lt;br /&gt;
    identifiers: [&lt;br /&gt;
		{&lt;br /&gt;
			type: &amp;quot;partitionKey&amp;quot;,&lt;br /&gt;
			fieldName: &amp;quot;businessId&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
		{&lt;br /&gt;
			type: &amp;quot;sortKey&amp;quot;,&lt;br /&gt;
			fieldName: &amp;quot;purchaseId&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
    ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== comAccPurchaseLineItem ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
	objectType: &amp;quot;comAccPurchaseLineItem&amp;quot;,&lt;br /&gt;
	canDelete: false,&lt;br /&gt;
	addOnDataStructure: [],&lt;br /&gt;
	storageResources: {&lt;br /&gt;
		&amp;quot;dynamo&amp;quot;: {&lt;br /&gt;
			&amp;quot;storageType&amp;quot;: &amp;quot;dynamoDB&amp;quot;,&lt;br /&gt;
			&amp;quot;tableName&amp;quot;: &amp;quot;comAccPurchaseLineItem&amp;quot;,&lt;br /&gt;
		}&lt;br /&gt;
    },&lt;br /&gt;
    fieldNames: {&lt;br /&gt;
		// purchaseId,&lt;br /&gt;
		// purchaseLineItemId,&lt;br /&gt;
		// accountId&lt;br /&gt;
		// lineItemQuantity&lt;br /&gt;
		// lineItemUnitPricelineItemUnitPrice&lt;br /&gt;
		// entryId // not sure want to record because multiple lineItems might be in the same entryId&lt;br /&gt;
    },&lt;br /&gt;
    identifiers: [&lt;br /&gt;
		{&lt;br /&gt;
			type: &amp;quot;partitionKey&amp;quot;,&lt;br /&gt;
			fieldName: &amp;quot;purchaseId&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		{&lt;br /&gt;
			type: &amp;quot;sortKey&amp;quot;,&lt;br /&gt;
			fieldName: &amp;quot;purchaseLineItemId&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
    ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* This table might not be needed becasue we do not create a journal entry per line item, we make a compound journal entry per purchase&lt;br /&gt;
* Keep it for now so we can reconcile Commerce data matches ComAcc data&lt;br /&gt;
&lt;br /&gt;
== Relationships ==&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
= flowSchemas =&lt;br /&gt;
&lt;br /&gt;
== createPurchase ==&lt;br /&gt;
&lt;br /&gt;
* when creating a purchase, iterate purchaseLineItems to decide which journal entries are created&lt;br /&gt;
* accountsPayable accountId comes from [[Service - CommerceAccounting Vendor]]&lt;br /&gt;
* each purchaseLineItem checks it&#039;s type then finds accountId from coresponding comAcc service&lt;br /&gt;
&lt;br /&gt;
=== Example request param from Commerce ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
	belongToIdentifiers: {&lt;br /&gt;
	  businessId: &amp;quot;xxx&amp;quot;&lt;br /&gt;
	},&lt;br /&gt;
	purchaseId: &amp;quot;&amp;quot;,&lt;br /&gt;
	vendorId: &amp;quot;&amp;quot;,&lt;br /&gt;
    timestamp: 1111111,&lt;br /&gt;
	purchaseCurrencyId: &amp;quot;&amp;quot;,&lt;br /&gt;
	inventoryLocationId: &amp;quot;&amp;quot;, // required if have any inventory/?assets&lt;br /&gt;
	purchaseLineItems: {&lt;br /&gt;
		{purchaseLineItemId}: {&lt;br /&gt;
&lt;br /&gt;
            inventoryId: &amp;quot;&amp;quot;,&lt;br /&gt;
            inventoryTemplateId: &amp;quot;&amp;quot;,&lt;br /&gt;
            // or&lt;br /&gt;
            expenseId: &amp;quot;&amp;quot;,&lt;br /&gt;
            // or&lt;br /&gt;
            servicesId: &amp;quot;&amp;quot;,&lt;br /&gt;
            servicesTemplateId: &amp;quot;&amp;quot;,&lt;br /&gt;
            // or&lt;br /&gt;
            freightInId: &amp;quot;&amp;quot;,&lt;br /&gt;
            // or&lt;br /&gt;
&lt;br /&gt;
            otherPurchaseItemId: &amp;quot;&amp;quot;,&lt;br /&gt;
            &lt;br /&gt;
&lt;br /&gt;
			type: &amp;quot;&amp;quot;, // inventory|expense|services|freight|salesTax|vatTax|other&lt;br /&gt;
			subType: &amp;quot;&amp;quot;, // inventory: goods|intangibleGoods|rawMaterial|asset|intangibleAsset, expense: pointInTime|overTime, services: pointInTime|overTime, freight: standard, other: standard&lt;br /&gt;
&lt;br /&gt;
			lineItemQuantity: 1,&lt;br /&gt;
			lineItemUnitPrice: &amp;quot;2.00&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		//...&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== updatePurchase ==&lt;br /&gt;
&lt;br /&gt;
* make adjustment to journal entries when purchaseLineItemId changes&lt;br /&gt;
* handle removal of purchase/journal entries, or creation of new entries&lt;br /&gt;
* basically re-calculate all entries and check against existing&lt;br /&gt;
* each journalId must check Accounting that it&#039;s period/s are not locked, if locked return error, cannot make update&lt;br /&gt;
&lt;br /&gt;
= Working documents =&lt;br /&gt;
&lt;br /&gt;
[[:Category:Working_documents - CommerceAccounting Purchase| CommerceAccounting Purchase]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Backend services| CommerceAccounting Purchase]]&lt;/div&gt;</summary>
		<author><name>Mint</name></author>
	</entry>
	<entry>
		<id>https://izara.io/wiki/index.php?title=Service_-_CommerceAccounting_Purchase&amp;diff=4491</id>
		<title>Service - CommerceAccounting Purchase</title>
		<link rel="alternate" type="text/html" href="https://izara.io/wiki/index.php?title=Service_-_CommerceAccounting_Purchase&amp;diff=4491"/>
		<updated>2026-07-25T08:44:43Z</updated>

		<summary type="html">&lt;p&gt;Mint: /* comAccPurchase */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Overview =&lt;br /&gt;
&lt;br /&gt;
Handle links between purchases and Accounting records.&lt;br /&gt;
&lt;br /&gt;
= Repository =&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
= Object Schemas =&lt;br /&gt;
; Additional Information: [[Per Service Schemas]]&lt;br /&gt;
&lt;br /&gt;
== comAccPurchaseLink ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
	objectType: &amp;quot;comAccPurchaseLink&amp;quot;,&lt;br /&gt;
	canDelete: false,&lt;br /&gt;
	addOnDataStructure: [],&lt;br /&gt;
	storageResources: {&lt;br /&gt;
		&amp;quot;dynamo&amp;quot;: {&lt;br /&gt;
			&amp;quot;storageType&amp;quot;: &amp;quot;dynamoDB&amp;quot;,&lt;br /&gt;
			&amp;quot;tableName&amp;quot;: &amp;quot;comAccPurchaseLink&amp;quot;,&lt;br /&gt;
		}&lt;br /&gt;
    },&lt;br /&gt;
    fieldNames: {&lt;br /&gt;
		// businessId,&lt;br /&gt;
		// accountLinkTag // type of link: inputVAT|salesTax|vatTax..&lt;br /&gt;
		// accountId&lt;br /&gt;
    },&lt;br /&gt;
    identifiers: [&lt;br /&gt;
		{&lt;br /&gt;
			type: &amp;quot;partitionKey&amp;quot;,&lt;br /&gt;
			fieldName: &amp;quot;businessId&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
		{&lt;br /&gt;
			type: &amp;quot;sortKey&amp;quot;,&lt;br /&gt;
			fieldName: &amp;quot;accountLinkTag&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
    ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* sets which Accounting accountId journal entries are added to&lt;br /&gt;
&lt;br /&gt;
== comAccPurchase ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
	objectType: &amp;quot;comAccPurchase&amp;quot;,&lt;br /&gt;
	canDelete: false,	&lt;br /&gt;
    addOnDataStructure: [],&lt;br /&gt;
	storageResources: {&lt;br /&gt;
		&amp;quot;dynamo&amp;quot;: {&lt;br /&gt;
			&amp;quot;storageType&amp;quot;: &amp;quot;dynamoDB&amp;quot;,&lt;br /&gt;
			&amp;quot;tableName&amp;quot;: &amp;quot;comAccPurchase&amp;quot;,&lt;br /&gt;
		}&lt;br /&gt;
    },&lt;br /&gt;
    fieldNames: {&lt;br /&gt;
		// businessId,&lt;br /&gt;
		// purchaseId,&lt;br /&gt;
&lt;br /&gt;
		// record lock&lt;br /&gt;
		// updatePurchase_status, // open|lock, prefix updatePurchase&lt;br /&gt;
		// updatePurchase_uniqueRequestId,&lt;br /&gt;
		// updatePurchase_timestamp,&lt;br /&gt;
&lt;br /&gt;
		journalId: {&lt;br /&gt;
			type: &amp;quot;string&amp;quot;,&lt;br /&gt;
			optionalOnCreate: true,&lt;br /&gt;
			canUpdate: true,&lt;br /&gt;
			storageResourceTags: [&amp;quot;dynamo&amp;quot;],&lt;br /&gt;
		},&lt;br /&gt;
        &lt;br /&gt;
&lt;br /&gt;
    },&lt;br /&gt;
    identifiers: [&lt;br /&gt;
		{&lt;br /&gt;
			type: &amp;quot;partitionKey&amp;quot;,&lt;br /&gt;
			fieldName: &amp;quot;businessId&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
		{&lt;br /&gt;
			type: &amp;quot;sortKey&amp;quot;,&lt;br /&gt;
			fieldName: &amp;quot;purchaseId&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
    ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== comAccPurchaseLineItem ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
	objectType: &amp;quot;comAccPurchaseLineItem&amp;quot;,&lt;br /&gt;
	canDelete: false,&lt;br /&gt;
	addOnDataStructure: [],&lt;br /&gt;
	storageResources: {&lt;br /&gt;
		&amp;quot;dynamo&amp;quot;: {&lt;br /&gt;
			&amp;quot;storageType&amp;quot;: &amp;quot;dynamoDB&amp;quot;,&lt;br /&gt;
			&amp;quot;tableName&amp;quot;: &amp;quot;comAccPurchaseLineItem&amp;quot;,&lt;br /&gt;
		}&lt;br /&gt;
    },&lt;br /&gt;
    fieldNames: {&lt;br /&gt;
		// purchaseId,&lt;br /&gt;
		// purchaseLineItemId,&lt;br /&gt;
		// accountId&lt;br /&gt;
		// lineItemQuantity&lt;br /&gt;
		// lineItemUnitPricelineItemUnitPrice&lt;br /&gt;
		// entryId // not sure want to record because multiple lineItems might be in the same entryId&lt;br /&gt;
    },&lt;br /&gt;
    identifiers: [&lt;br /&gt;
		{&lt;br /&gt;
			type: &amp;quot;partitionKey&amp;quot;,&lt;br /&gt;
			fieldName: &amp;quot;purchaseId&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		{&lt;br /&gt;
			type: &amp;quot;sortKey&amp;quot;,&lt;br /&gt;
			fieldName: &amp;quot;purchaseLineItemId&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
    ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* This table might not be needed becasue we do not create a journal entry per line item, we make a compound journal entry per purchase&lt;br /&gt;
* Keep it for now so we can reconcile Commerce data matches ComAcc data&lt;br /&gt;
&lt;br /&gt;
== Relationships ==&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
= flowSchemas =&lt;br /&gt;
&lt;br /&gt;
== createPurchase ==&lt;br /&gt;
&lt;br /&gt;
* when creating a purchase, iterate purchaseLineItems to decide which journal entries are created&lt;br /&gt;
* accountsPayable accountId comes from [[Service - CommerceAccounting Vendor]]&lt;br /&gt;
* each purchaseLineItem checks it&#039;s type then finds accountId from coresponding comAcc service&lt;br /&gt;
&lt;br /&gt;
=== Example request param from Commerce ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
	belongToIdentifiers: {&lt;br /&gt;
	  businessId: &amp;quot;xxx&amp;quot;&lt;br /&gt;
	},&lt;br /&gt;
	purchaseId: &amp;quot;&amp;quot;,&lt;br /&gt;
	vendorId: &amp;quot;&amp;quot;,&lt;br /&gt;
    timestamp: 1111111,&lt;br /&gt;
	purchaseCurrencyId: &amp;quot;&amp;quot;,&lt;br /&gt;
	inventoryLocationId: &amp;quot;&amp;quot;, // required if have any inventory/?assets&lt;br /&gt;
	purchaseLineItems: {&lt;br /&gt;
		{purchaseLineItemId}: {&lt;br /&gt;
&lt;br /&gt;
            inventoryId: &amp;quot;&amp;quot;,&lt;br /&gt;
            inventoryTemplateId: &amp;quot;&amp;quot;,&lt;br /&gt;
            // or&lt;br /&gt;
            expenseId: &amp;quot;&amp;quot;,&lt;br /&gt;
            // or&lt;br /&gt;
            servicesId: &amp;quot;&amp;quot;,&lt;br /&gt;
            servicesTemplateId: &amp;quot;&amp;quot;,&lt;br /&gt;
            // or&lt;br /&gt;
            freightInId: &amp;quot;&amp;quot;,&lt;br /&gt;
            // or&lt;br /&gt;
&lt;br /&gt;
            otherPurchaseItemId: &amp;quot;&amp;quot;,&lt;br /&gt;
            &lt;br /&gt;
&lt;br /&gt;
			type: &amp;quot;&amp;quot;, // inventory|expense|services|freight|salesTax|vatTax|other&lt;br /&gt;
			subType: &amp;quot;&amp;quot;, // inventory: goods|intangibleGoods|rawMaterial|asset|intangibleAsset, expense: pointInTime|overTime, services: pointInTime|overTime, freight: standard, other: standard&lt;br /&gt;
&lt;br /&gt;
			lineItemQuantity: 1,&lt;br /&gt;
			lineItemUnitPrice: &amp;quot;2.00&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		//...&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== updatePurchase ==&lt;br /&gt;
&lt;br /&gt;
* make adjustment to journal entries when purchaseLineItemId changes&lt;br /&gt;
* handle removal of purchase/journal entries, or creation of new entries&lt;br /&gt;
* basically re-calculate all entries and check against existing&lt;br /&gt;
* each journalId must check Accounting that it&#039;s period/s are not locked, if locked return error, cannot make update&lt;br /&gt;
&lt;br /&gt;
= Working documents =&lt;br /&gt;
&lt;br /&gt;
[[:Category:Working_documents - CommerceAccounting Purchase| CommerceAccounting Purchase]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Backend services| CommerceAccounting Purchase]]&lt;/div&gt;</summary>
		<author><name>Mint</name></author>
	</entry>
	<entry>
		<id>https://izara.io/wiki/index.php?title=Service_-_Entry&amp;diff=4478</id>
		<title>Service - Entry</title>
		<link rel="alternate" type="text/html" href="https://izara.io/wiki/index.php?title=Service_-_Entry&amp;diff=4478"/>
		<updated>2026-06-26T08:04:31Z</updated>

		<summary type="html">&lt;p&gt;Mint: /* entry */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Overview =&lt;br /&gt;
&lt;br /&gt;
A credit or debit entry linking between a journal entry and an account.&lt;br /&gt;
&lt;br /&gt;
= Repository =&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
= Object Schemas =&lt;br /&gt;
; Additional Information: [[Per Service Schemas]]&lt;br /&gt;
&lt;br /&gt;
== entry ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
	objectType: &amp;quot;entry&amp;quot;,&lt;br /&gt;
	canDelete: false,&lt;br /&gt;
	belongTo: {&lt;br /&gt;
		serviceTag: &amp;quot;Organization&amp;quot;,&lt;br /&gt;
		objectType: &amp;quot;organization&amp;quot;&lt;br /&gt;
	},&lt;br /&gt;
	addOnDataStructure: [&lt;br /&gt;
    {&lt;br /&gt;
      type: &amp;quot;versionedData&amp;quot;,&lt;br /&gt;
      versionedDataLabel: &amp;quot;Detail&amp;quot;,&lt;br /&gt;
      storageResourceTag: &amp;quot;myGraph&amp;quot;,&lt;br /&gt;
      fieldNames: {&lt;br /&gt;
        amount: {&lt;br /&gt;
          type: &amp;quot;currencyValue&amp;quot;, // string|integer|currency|currencyValue|float|special|object|boolean|arrayMixed|arrayNumeric|arrayString&lt;br /&gt;
          requiredOnCreate: true, // default = false&lt;br /&gt;
        },&lt;br /&gt;
        functionalCurrencyAmount: {&lt;br /&gt;
          type: &amp;quot;currencyValue&amp;quot;,&lt;br /&gt;
          requiredOnCreate: true,&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    },&lt;br /&gt;
  ],&lt;br /&gt;
	storageResources: {&lt;br /&gt;
		myGraph: {&lt;br /&gt;
			storageType: &amp;quot;graph&amp;quot;,&lt;br /&gt;
			graphServerTag: &amp;quot;GraphHandler&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;dynamo&amp;quot;: {&lt;br /&gt;
		  &amp;quot;storageType&amp;quot;: &amp;quot;dynamoDB&amp;quot;,&lt;br /&gt;
		  &amp;quot;tableName&amp;quot;: &amp;quot;entry&amp;quot;,&lt;br /&gt;
		}  &lt;br /&gt;
    },&lt;br /&gt;
    fieldNames: {&lt;br /&gt;
		entryId: {&lt;br /&gt;
			type: &amp;quot;string&amp;quot;,&lt;br /&gt;
			randomOnCreate: true,&lt;br /&gt;
			storageResourceTags: [&#039;myGraph&#039;,&#039;dynamo&#039;]&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
    },&lt;br /&gt;
    identifiers: [&lt;br /&gt;
		{&lt;br /&gt;
			type: &amp;quot;identifier&amp;quot;,&lt;br /&gt;
			fieldName: &amp;quot;entryId&amp;quot;&lt;br /&gt;
		}&lt;br /&gt;
    ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* accountingStatus: when a period is being closed we set all entries to processing, then once the return is completed set to locked&lt;br /&gt;
* when beginning process of an entry, maybe trigger ComAcc plugin to check whether journalId can be locked, for example if it is connected to a sale and the sale is in saleCommitted=working/updateWorking cannot be locked&lt;br /&gt;
* when processing or locked entries cannot be changed (journals cannot be changed if either of the entries on each side are processing or locked&lt;br /&gt;
* maybe the journal also has an accountingStatus, so easy to confirm cannot make changes, or perhaps only journals because entries cannot be changed directly&lt;br /&gt;
&lt;br /&gt;
== Relationships ==&lt;br /&gt;
&lt;br /&gt;
=== hasEntry ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
	hasEntry: {&lt;br /&gt;
		storageResources: {&lt;br /&gt;
			myGraph: {&lt;br /&gt;
				storageType: &amp;quot;graph&amp;quot;,&lt;br /&gt;
				graphServerTag: &amp;quot;GraphHandler&amp;quot;			&lt;br /&gt;
			}&lt;br /&gt;
		},&lt;br /&gt;
		links: [&lt;br /&gt;
			{&lt;br /&gt;
				storageResourceTags: [&amp;quot;myGraph&amp;quot;],&lt;br /&gt;
				from: {&lt;br /&gt;
					objType: {&lt;br /&gt;
						serviceTag: &amp;quot;Journal&amp;quot;,&lt;br /&gt;
						objectType: &amp;quot;journal&amp;quot;&lt;br /&gt;
					},&lt;br /&gt;
					linkType: &amp;quot;one&amp;quot;,&lt;br /&gt;
				},&lt;br /&gt;
				to: {&lt;br /&gt;
					objType: {&lt;br /&gt;
						serviceTag: &amp;quot;Entry&amp;quot;,&lt;br /&gt;
						objectType: &amp;quot;entry&amp;quot;&lt;br /&gt;
					},&lt;br /&gt;
					requiredOnCreate: true,&lt;br /&gt;
					linkType: &amp;quot;many&amp;quot;&lt;br /&gt;
				}&lt;br /&gt;
			},&lt;br /&gt;
		]&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== hasEntry ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
	hasEntry: {&lt;br /&gt;
		storageResources: {&lt;br /&gt;
			myGraph: {&lt;br /&gt;
				storageType: &amp;quot;graph&amp;quot;,&lt;br /&gt;
				graphServerTag: &amp;quot;GraphHandler&amp;quot;			&lt;br /&gt;
			}&lt;br /&gt;
		},&lt;br /&gt;
		links: [&lt;br /&gt;
			{&lt;br /&gt;
				storageResourceTags: [&amp;quot;myGraph&amp;quot;],&lt;br /&gt;
				from: {&lt;br /&gt;
					objType: {&lt;br /&gt;
						serviceTag: &amp;quot;Journal&amp;quot;,&lt;br /&gt;
						objectType: &amp;quot;journal&amp;quot;&lt;br /&gt;
					},&lt;br /&gt;
					linkType: &amp;quot;one&amp;quot;,&lt;br /&gt;
				},&lt;br /&gt;
				to: {&lt;br /&gt;
					objType: {&lt;br /&gt;
						serviceTag: &amp;quot;Entry&amp;quot;,&lt;br /&gt;
						objectType: &amp;quot;entry&amp;quot;&lt;br /&gt;
					},&lt;br /&gt;
					requiredOnCreate: true,&lt;br /&gt;
					linkType: &amp;quot;many&amp;quot;&lt;br /&gt;
				}&lt;br /&gt;
			},&lt;br /&gt;
		]&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== oldEntry ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
	oldEntry: {&lt;br /&gt;
		storageResources: {&lt;br /&gt;
			myGraph: {&lt;br /&gt;
				storageType: &amp;quot;graph&amp;quot;,&lt;br /&gt;
				graphServerTag: &amp;quot;GraphHandler&amp;quot;			&lt;br /&gt;
			}&lt;br /&gt;
		},&lt;br /&gt;
		links: [&lt;br /&gt;
			{&lt;br /&gt;
				storageResourceTags: [&amp;quot;myGraph&amp;quot;],&lt;br /&gt;
				from: {&lt;br /&gt;
					objType: {&lt;br /&gt;
						serviceTag: &amp;quot;Journal&amp;quot;,&lt;br /&gt;
						objectType: &amp;quot;journal&amp;quot;&lt;br /&gt;
					},&lt;br /&gt;
					linkType: &amp;quot;one&amp;quot;,&lt;br /&gt;
				},&lt;br /&gt;
				to: {&lt;br /&gt;
					objType: {&lt;br /&gt;
						serviceTag: &amp;quot;Entry&amp;quot;,&lt;br /&gt;
						objectType: &amp;quot;entry&amp;quot;&lt;br /&gt;
					},&lt;br /&gt;
					requiredOnCreate: true,&lt;br /&gt;
					linkType: &amp;quot;many&amp;quot;&lt;br /&gt;
				}&lt;br /&gt;
			},&lt;br /&gt;
		]&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* has can change to old, but old cannot change to has, create new entry if make new that links to same account&lt;br /&gt;
&lt;br /&gt;
=== inAccount ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
	inAccount: {&lt;br /&gt;
		storageResources: {&lt;br /&gt;
			myGraph: {&lt;br /&gt;
				storageType: &amp;quot;graph&amp;quot;,&lt;br /&gt;
				graphServerTag: &amp;quot;GraphHandler&amp;quot;			&lt;br /&gt;
			}&lt;br /&gt;
		},&lt;br /&gt;
		links: [&lt;br /&gt;
			{&lt;br /&gt;
				storageResourceTags: [&amp;quot;myGraph&amp;quot;],&lt;br /&gt;
				from: {&lt;br /&gt;
					objType: {&lt;br /&gt;
						serviceTag: &amp;quot;Entry&amp;quot;,&lt;br /&gt;
						objectType: &amp;quot;entry&amp;quot;&lt;br /&gt;
					},&lt;br /&gt;
					requiredOnCreate: true,&lt;br /&gt;
					linkType: &amp;quot;many&amp;quot;&lt;br /&gt;
				},&lt;br /&gt;
				to: {&lt;br /&gt;
					objType: {&lt;br /&gt;
						serviceTag: &amp;quot;AccountManager&amp;quot;,&lt;br /&gt;
						objectType: &amp;quot;account&amp;quot;&lt;br /&gt;
					},&lt;br /&gt;
					linkType: &amp;quot;one&amp;quot;&lt;br /&gt;
				}&lt;br /&gt;
			},&lt;br /&gt;
		]&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Working documents =&lt;br /&gt;
&lt;br /&gt;
[[:Category:Working_documents - Entry| Entry]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Backend services| Entry]]&lt;/div&gt;</summary>
		<author><name>Mint</name></author>
	</entry>
	<entry>
		<id>https://izara.io/wiki/index.php?title=2025-11-20_IntegrationTest&amp;diff=4474</id>
		<title>2025-11-20 IntegrationTest</title>
		<link rel="alternate" type="text/html" href="https://izara.io/wiki/index.php?title=2025-11-20_IntegrationTest&amp;diff=4474"/>
		<updated>2026-06-17T04:09:26Z</updated>

		<summary type="html">&lt;p&gt;Mint: /* Empty */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Reference:&lt;br /&gt;
&lt;br /&gt;
*[[2020-10-01 - Integration Test Config - Functions|IntegrationtestConfig]]&lt;br /&gt;
*[[2020-10-01 - Integration Testing - Lambda Functions|Integrationtesting]]&lt;br /&gt;
*[[2025-02-20 - Integration Test examples|Example]]&lt;br /&gt;
&lt;br /&gt;
= File extension =&lt;br /&gt;
&lt;br /&gt;
uploadS3: &amp;quot;.json&amp;quot;&lt;br /&gt;
integrationtestConfig: &amp;quot;.js&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=TestRecord=&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JSON&amp;quot;&amp;gt;&lt;br /&gt;
[&lt;br /&gt;
  {&lt;br /&gt;
    integrationTestTag: &amp;quot;Integrationtest_xx&amp;quot;,&lt;br /&gt;
    testStartedTimestamp: 111111111, // start time&lt;br /&gt;
    bucketName: &amp;quot;integrationtest-config-us-east-2&amp;quot;,&lt;br /&gt;
    lastUpdateUniqueRequestId: &amp;quot;sssss&amp;quot;, //_izContext.uniqueRequestId protacts race coditionn dynamodb&lt;br /&gt;
    testStatus: &amp;quot;passed&amp;quot;,//failed,processing,passed&lt;br /&gt;
    testCompleteTimestamp: 1111113, // all test finish&lt;br /&gt;
    stages: [&lt;br /&gt;
      {&lt;br /&gt;
        stageConfig: {&lt;br /&gt;
          //straight copy of this stage from integration test config&lt;br /&gt;
          inputEventTag: &amp;quot;xx&amp;quot;,&lt;br /&gt;
          inputEventConfig: {//event input&lt;br /&gt;
          },&lt;br /&gt;
          outputEventTag: &amp;quot;output_xx&amp;quot;,&lt;br /&gt;
          outputEventConfig: {//event out put&lt;br /&gt;
          },&lt;br /&gt;
          resourceName: &amp;quot;ComplexfilterTestProcessComplexfilter&amp;quot;,// function name&lt;br /&gt;
          resourceType: &amp;quot;Lambda&amp;quot;, // function name&lt;br /&gt;
          serviceTag: &amp;quot;Complexfilter&amp;quot;,// (initeate sqs)&lt;br /&gt;
          snsServiceName: &amp;quot;Complexfilter&amp;quot;,// (initeate sqs)&lt;br /&gt;
          snsTopic: &amp;quot;PorcessComplexfilter_In&amp;quot;// (initeate sqs)&lt;br /&gt;
&lt;br /&gt;
        },&lt;br /&gt;
        stageStatus: &amp;quot;waiting&amp;quot;, //waiting|passed|failed,&lt;br /&gt;
        stageFinishedTimestamp: 111111111,// time that all tests finished and testRecord.stages.{stageKey}.stageStatus updated&lt;br /&gt;
        stageResults: {&lt;br /&gt;
          //results at the point of entering the resource (eg a Lambda function is invoked)&lt;br /&gt;
          inputResult: {&lt;br /&gt;
            resultTimestamp: 111111111,//{time result saved},&lt;br /&gt;
            resultStatus: &amp;quot;passed&amp;quot;,//passed|failed,&lt;br /&gt;
            requestParams: {//event input&lt;br /&gt;
            }&lt;br /&gt;
          },&lt;br /&gt;
          //results at the point of returning from the resource (eg a Lambda function returns)&lt;br /&gt;
          outputResult: {&lt;br /&gt;
            resultTimestamp: 111111111,//{time result saved},&lt;br /&gt;
            resultStatus: &amp;quot;passed&amp;quot;,//passed|failed,&lt;br /&gt;
            requestParams: {//event input&lt;br /&gt;
            }&lt;br /&gt;
          },&lt;br /&gt;
          //results at the point of invoking an external resource (eg the tested Lambda function is invoking another Lambda function)&lt;br /&gt;
          invokes: {&lt;br /&gt;
            &amp;quot;serviceName_resourceType_resourceName_inputEventTag &amp;quot;: {&lt;br /&gt;
              invokeTimestamp: 111111111,//{ time result saved },&lt;br /&gt;
              resultTimestamp: 111111112,//{ time result saved },&lt;br /&gt;
              resultStatus: &amp;quot;passed&amp;quot;,//passed | failed,&lt;br /&gt;
              invokeParams: {},//{event invoke input config }&lt;br /&gt;
              requestParams: {}// event invoke input request&lt;br /&gt;
            },&lt;br /&gt;
          },&lt;br /&gt;
          dynamodbResults: [&lt;br /&gt;
            {&lt;br /&gt;
              indexOfDynamodbOutput: 0,&lt;br /&gt;
              requestParams,&lt;br /&gt;
              resultStatus: &amp;quot;passed&amp;quot;,//&lt;br /&gt;
              resultTimestamp: 22222&lt;br /&gt;
            }]&lt;br /&gt;
&lt;br /&gt;
        },&lt;br /&gt;
        stageErrors: [&lt;br /&gt;
          //misc errors encountered&lt;br /&gt;
        ]&lt;br /&gt;
      }]&lt;br /&gt;
&lt;br /&gt;
  }&lt;br /&gt;
]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Seed Data=&lt;br /&gt;
integrationtest manager seed date 2 process&lt;br /&gt;
&lt;br /&gt;
=== Main Seed Data===&lt;br /&gt;
:Save file in s3 (in &#039;&#039;&#039;buckname&#039;&#039;&#039; :integrationtest-config-us-east-2, &#039;&#039;&#039;folder&#039;&#039;&#039;:seedData_integrationTest).For other dev use service,If a developer wants to add more for other important testing purposes.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;How to use:&#039;&#039;&#039;&lt;br /&gt;
#Add it from the s3 bucket at this point&lt;br /&gt;
#Run batch refreshSeedData [[Developer guide for making Integration Tests#Bash script|batch RefreshSeedData]]&lt;br /&gt;
&#039;&#039;&#039;Logic&#039;&#039;&#039;:Process by storage resouse (graph or dynamodb)&lt;br /&gt;
:To clean up the seed data in the table after it creates seed data form service deploy and pulls seed data from s3.&lt;br /&gt;
&lt;br /&gt;
=== Refresh Seed Data ===&lt;br /&gt;
:ProcessRefreshSeedData use seedDataTag for create data environment of &#039;&#039;&#039;test&#039;&#039;&#039; and can be refresh seeddata re-test agian.&lt;br /&gt;
:&#039;&#039;&#039;canbe share&#039;&#039;&#039; seed data for other test by seed data tag.&lt;br /&gt;
&#039;&#039;&#039;How to use:&#039;&#039;&#039;&lt;br /&gt;
:Save file in s3 (for other dav keep in floder dev name) or testConfig/seedData_config(for admin)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Folder&#039;&#039;&#039;&lt;br /&gt;
*dynamoDBSeedDataTags.json&lt;br /&gt;
*graphSeedDataTags.json&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Example&#039;&#039;&#039;&lt;br /&gt;
==== dynamoDBSeedDataTags ====&lt;br /&gt;
:If set tag in this setting integrationtest is generate seed data. in storage resource dynammodb.&lt;br /&gt;
Example&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;seedDynamodb_abc_ver2&amp;quot;: [ // seedDataTag&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;tableName&amp;quot;: &amp;quot;DelivMethodSTDTestLogicalResultsData&amp;quot;,  // servcieTag+stage+tablename&lt;br /&gt;
      &amp;quot;partitionKey&amp;quot;: &amp;quot;logicalResultId&amp;quot;,&lt;br /&gt;
      &amp;quot;sortKey&amp;quot;: &amp;quot;identifiersId&amp;quot;,&lt;br /&gt;
      &amp;quot;datas&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;logicalResultId&amp;quot;: &amp;quot;eeeeeeeeee4&amp;quot;,&lt;br /&gt;
          &amp;quot;identifiersId&amp;quot;: &amp;quot;lllll123456&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;logicalResultId&amp;quot;: &amp;quot;eeeeeeeeee4&amp;quot;,&lt;br /&gt;
          &amp;quot;identifiersId&amp;quot;: &amp;quot;lllll777777&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
      ]&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;tableName&amp;quot;: &amp;quot;MLocationsTestFloatingRelationships&amp;quot;,// servcieTag+stage+tablename&lt;br /&gt;
      &amp;quot;partitionKey&amp;quot;: &amp;quot;importBatchId&amp;quot;,&lt;br /&gt;
      &amp;quot;sortKey&amp;quot;: &amp;quot;identifierRelationshipsId&amp;quot;,&lt;br /&gt;
      &amp;quot;datas&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;importBatchId&amp;quot;: &amp;quot;2-uuuuuuuuuuuuuu&amp;quot;,&lt;br /&gt;
          &amp;quot;identifierRelationshipsId&amp;quot;: &amp;quot;lllll123456&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;importBatchId&amp;quot;: &amp;quot;2-uuuuuuuuuuuuuu&amp;quot;,&lt;br /&gt;
          &amp;quot;identifierRelationshipsId&amp;quot;: &amp;quot;lllll777777&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;importBatchId&amp;quot;: &amp;quot;2-uuuuuuuuuuuuuu&amp;quot;,&lt;br /&gt;
          &amp;quot;identifierRelationshipsId&amp;quot;: &amp;quot;lllll99999999&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
      ]&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;tableName&amp;quot;: &amp;quot;MLocationsTestFindDataMain&amp;quot;,&lt;br /&gt;
      &amp;quot;partitionKey&amp;quot;: &amp;quot;findDataId&amp;quot;,&lt;br /&gt;
      &amp;quot;datas&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;findDataId&amp;quot;: &amp;quot;111111&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;findDataId&amp;quot;: &amp;quot;22222&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;findDataId&amp;quot;: &amp;quot;333333&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
      ]&lt;br /&gt;
    }&lt;br /&gt;
  ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== graphSeedDataTags ====&lt;br /&gt;
:If set tag in this setting integrationtest is generate seed data. in storage resource graphHanler.&lt;br /&gt;
Example&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;seedData_testTag_GG&amp;quot;: [ // seedDataTag&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;nodes&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;nodeLabels&amp;quot;: [&lt;br /&gt;
            &amp;quot;SellOfferPlan_sellOfferPlanDeliveryMethodLink&amp;quot;&lt;br /&gt;
          ],&lt;br /&gt;
          &amp;quot;objectDetail&amp;quot;: {&lt;br /&gt;
            &amp;quot;identifiers&amp;quot;: {&lt;br /&gt;
              &amp;quot;sellOfferPlanDeliveryMethodLinkId&amp;quot;: &amp;quot;minttestrefreshSeedData_01&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;fields&amp;quot;: {&lt;br /&gt;
              &amp;quot;productId&amp;quot;: &amp;quot;ddddd&amp;quot;,&lt;br /&gt;
              &amp;quot;price&amp;quot;: 9999&lt;br /&gt;
            }&lt;br /&gt;
          }&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;nodeLabels&amp;quot;: [&lt;br /&gt;
            &amp;quot;servcieMintTest_shoppingMall&amp;quot;&lt;br /&gt;
          ],&lt;br /&gt;
          &amp;quot;objectDetail&amp;quot;: {&lt;br /&gt;
            &amp;quot;identifiers&amp;quot;: {&lt;br /&gt;
              &amp;quot;shoppingMallId&amp;quot;: &amp;quot;minttestrefreshSeedData_shoppingMallId&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;fields&amp;quot;: {&lt;br /&gt;
              &amp;quot;name&amp;quot;: &amp;quot;hotpot-man&amp;quot;,&lt;br /&gt;
              &amp;quot;totalPrice&amp;quot;: 500&lt;br /&gt;
            }&lt;br /&gt;
          }&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;nodeLabels&amp;quot;: [&lt;br /&gt;
            &amp;quot;servcieMintTest_shoppingMallCalculateSetting&amp;quot;&lt;br /&gt;
          ],&lt;br /&gt;
          &amp;quot;objectDetail&amp;quot;: {&lt;br /&gt;
            &amp;quot;identifiers&amp;quot;: {&lt;br /&gt;
              &amp;quot;versionedDataId&amp;quot;: &amp;quot;minttestrefreshSeedData_versionedDataId&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;fields&amp;quot;: {&lt;br /&gt;
              &amp;quot;addToCalculatedValuePerOrder&amp;quot;: 10,&lt;br /&gt;
              &amp;quot;addToRateTableValuePerOrder&amp;quot;: 77&lt;br /&gt;
            }&lt;br /&gt;
          }&lt;br /&gt;
        }&lt;br /&gt;
      ],&lt;br /&gt;
      &amp;quot;relationships&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;fromObject&amp;quot;: {&lt;br /&gt;
            &amp;quot;nodeLabel&amp;quot;: &amp;quot;SellOfferPlan_sellOfferPlanDeliveryMethodLink&amp;quot;,&lt;br /&gt;
            &amp;quot;identifiers&amp;quot;: {&lt;br /&gt;
              &amp;quot;sellOfferPlanDeliveryMethodLinkId&amp;quot;: &amp;quot;minttestrefreshSeedData_01&amp;quot;&lt;br /&gt;
            }&lt;br /&gt;
          },&lt;br /&gt;
          &amp;quot;toObject&amp;quot;: {&lt;br /&gt;
            &amp;quot;nodeLabel&amp;quot;: &amp;quot;servcieMintTest_shoppingMall&amp;quot;,&lt;br /&gt;
            &amp;quot;identifiers&amp;quot;: {&lt;br /&gt;
              &amp;quot;shoppingMallId&amp;quot;: &amp;quot;minttestrefreshSeedData_shoppingMallId&amp;quot;&lt;br /&gt;
            }&lt;br /&gt;
          },&lt;br /&gt;
          &amp;quot;relationships&amp;quot;: [&lt;br /&gt;
            {&lt;br /&gt;
              &amp;quot;relTypeConcat&amp;quot;: &amp;quot;SellOfferPlan_hasCCCCCCC&amp;quot;,&lt;br /&gt;
              &amp;quot;relId&amp;quot;: &amp;quot;uuid-4s56df74s9df79w-w6de4f5w689ef&amp;quot;&lt;br /&gt;
            }&lt;br /&gt;
          ]&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;fromObject&amp;quot;: {&lt;br /&gt;
            &amp;quot;nodeLabel&amp;quot;: &amp;quot;servcieMintTest_shoppingMall&amp;quot;,&lt;br /&gt;
            &amp;quot;identifiers&amp;quot;: {&lt;br /&gt;
              &amp;quot;shoppingMallId&amp;quot;: &amp;quot;minttestrefreshSeedData_shoppingMallId&amp;quot;&lt;br /&gt;
            }&lt;br /&gt;
          },&lt;br /&gt;
          &amp;quot;toObject&amp;quot;: {&lt;br /&gt;
            &amp;quot;nodeLabel&amp;quot;: &amp;quot;servcieMintTest_shoppingMallCalculateSetting&amp;quot;,&lt;br /&gt;
            &amp;quot;identifiers&amp;quot;: {&lt;br /&gt;
              &amp;quot;versionedDataId&amp;quot;: &amp;quot;minttestrefreshSeedData_versionedDataId&amp;quot;&lt;br /&gt;
            }&lt;br /&gt;
          },&lt;br /&gt;
          &amp;quot;relationships&amp;quot;: [&lt;br /&gt;
            {&lt;br /&gt;
              &amp;quot;relTypeConcat&amp;quot;: &amp;quot;servcieMintTest_shoppingMall_currentShoppingMallCalculateSetting&amp;quot;,&lt;br /&gt;
              &amp;quot;relId&amp;quot;: &amp;quot;uuid-s122df5-s21df&amp;quot;,&lt;br /&gt;
              &amp;quot;relationshipProperty&amp;quot;: {&lt;br /&gt;
                &amp;quot;timeStamp&amp;quot;: 1234567879,&lt;br /&gt;
                &amp;quot;statusName&amp;quot;: true&lt;br /&gt;
              }&lt;br /&gt;
            },&lt;br /&gt;
            {&lt;br /&gt;
              &amp;quot;relTypeConcat&amp;quot;: &amp;quot;servcieMintTest_shoppingMall_hasShoppingMallCalculateSetting&amp;quot;,&lt;br /&gt;
              &amp;quot;relId&amp;quot;: &amp;quot;uuid-77777-99999&amp;quot;,&lt;br /&gt;
              &amp;quot;relationshipProperty&amp;quot;: {&lt;br /&gt;
                &amp;quot;statusName&amp;quot;: true&lt;br /&gt;
              }&lt;br /&gt;
            }&lt;br /&gt;
          ]&lt;br /&gt;
        }&lt;br /&gt;
      ]&lt;br /&gt;
    }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;seedData_testTag_ABC&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;objType&amp;quot;: {&lt;br /&gt;
        &amp;quot;objectType&amp;quot;: &amp;quot;productAttributeLink&amp;quot;,&lt;br /&gt;
        &amp;quot;serviceTag&amp;quot;: &amp;quot;ProductAttribute&amp;quot;&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;objInstanceFull&amp;quot;: {&lt;br /&gt;
        &amp;quot;identifiers&amp;quot;: {&lt;br /&gt;
          &amp;quot;productAttributeLinkId&amp;quot;: &amp;quot;f90b57ca8b2fe1a83459d57da038cf50fb6d40e6&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;fields&amp;quot;: {}&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;relationships&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;relType&amp;quot;: {&lt;br /&gt;
            &amp;quot;serviceTag&amp;quot;: &amp;quot;ProductAttribute&amp;quot;,&lt;br /&gt;
            &amp;quot;relationshipTag&amp;quot;: &amp;quot;hasProductAttributeLink&amp;quot;&lt;br /&gt;
          },&lt;br /&gt;
          &amp;quot;relationshipDirection&amp;quot;: &amp;quot;to&amp;quot;,&lt;br /&gt;
          &amp;quot;targetObjType&amp;quot;: {&lt;br /&gt;
            &amp;quot;serviceTag&amp;quot;: &amp;quot;ProductStandard&amp;quot;,&lt;br /&gt;
            &amp;quot;objectType&amp;quot;: &amp;quot;productStandard&amp;quot;&lt;br /&gt;
          },&lt;br /&gt;
          &amp;quot;targetIdentifiers&amp;quot;: {&lt;br /&gt;
            &amp;quot;productId&amp;quot;: &amp;quot;f526a367a2b66cb0f37ca61b6c43f419929f521d&amp;quot;&lt;br /&gt;
          },&lt;br /&gt;
          &amp;quot;relationshipProperties&amp;quot;: {}&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;relType&amp;quot;: {&lt;br /&gt;
            &amp;quot;serviceTag&amp;quot;: &amp;quot;ProductAttribute&amp;quot;,&lt;br /&gt;
            &amp;quot;relationshipTag&amp;quot;: &amp;quot;isProductAttribute&amp;quot;&lt;br /&gt;
          },&lt;br /&gt;
          &amp;quot;relationshipDirection&amp;quot;: &amp;quot;from&amp;quot;,&lt;br /&gt;
          &amp;quot;targetObjType&amp;quot;: {&lt;br /&gt;
            &amp;quot;serviceTag&amp;quot;: &amp;quot;ProductAttribute&amp;quot;,&lt;br /&gt;
            &amp;quot;objectType&amp;quot;: &amp;quot;productAttribute&amp;quot;&lt;br /&gt;
          },&lt;br /&gt;
          &amp;quot;targetIdentifiers&amp;quot;: {&lt;br /&gt;
            &amp;quot;productAttributeId&amp;quot;: &amp;quot;f4bf7a078071d54036656df544197ba638bc3a68&amp;quot;&lt;br /&gt;
          },&lt;br /&gt;
          &amp;quot;relationshipProperties&amp;quot;: {}&lt;br /&gt;
        }&lt;br /&gt;
      ]&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;objType&amp;quot;: {&lt;br /&gt;
        &amp;quot;objectType&amp;quot;: &amp;quot;productAttributeLink&amp;quot;,&lt;br /&gt;
        &amp;quot;serviceTag&amp;quot;: &amp;quot;ProductAttribute&amp;quot;&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;objInstanceFull&amp;quot;: {&lt;br /&gt;
        &amp;quot;identifiers&amp;quot;: {&lt;br /&gt;
          &amp;quot;productAttributeLinkId&amp;quot;: &amp;quot;f90b57ca8b2fe1a83459d57da038cf50fb6d40e6&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;fields&amp;quot;: {}&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;relationships&amp;quot;: []&lt;br /&gt;
    }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;seedData_testTag_LL&amp;quot;: []&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Cleaning Seed Data ===&lt;br /&gt;
:Delete seed data for set environment of &#039;&#039;&#039;test&#039;&#039;&#039;.&lt;br /&gt;
*cleaningeDynamoOneRecordsTags.json&lt;br /&gt;
*cleaningeDynamoManyRecordsTags.json&lt;br /&gt;
&lt;br /&gt;
====cleaningeDynamoOneRecordsTags====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;cleaningSeed_TestFindData_and_Education_case_invalid01&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;tableName&amp;quot;: &amp;quot;MLocationsTestFindDataMain&amp;quot;,&lt;br /&gt;
      &amp;quot;primaryKeys&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;findDataId&amp;quot;: &amp;quot;cleaning-1&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;findDataId&amp;quot;: &amp;quot;cleaning-2&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
      ]&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;tableName&amp;quot;: &amp;quot;MLocationsTestEducation&amp;quot;,&lt;br /&gt;
      &amp;quot;primaryKeys&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;studentId&amp;quot;: &amp;quot;cleaning-AA&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;studentId&amp;quot;: &amp;quot;cleaning-BB&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;studentId&amp;quot;: &amp;quot;cleaning-CC&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
      ]&lt;br /&gt;
    }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;cleaningSeed_TestMemberPersonnel_case_invalid01&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;tableName&amp;quot;: &amp;quot;MLocationsTestMemberPersonnel&amp;quot;,&lt;br /&gt;
      &amp;quot;primaryKeys&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;userId&amp;quot;: &amp;quot;namtan&amp;quot;,&lt;br /&gt;
          &amp;quot;passwordId&amp;quot;: &amp;quot;qqqww&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;userId&amp;quot;: &amp;quot;jack&amp;quot;,&lt;br /&gt;
          &amp;quot;passwordId&amp;quot;: &amp;quot;q1&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;userId&amp;quot;: &amp;quot;Momay&amp;quot;,&lt;br /&gt;
          &amp;quot;passwordId&amp;quot;: &amp;quot;ttr&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
      ]&lt;br /&gt;
    }&lt;br /&gt;
  ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== cleaningeDynamoManyRecordsTags ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;cleaningSeed_manyData_partitionKey_only_miss_sort&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;tableName&amp;quot;: &amp;quot;MLocationsTestMemberPersonnel&amp;quot;,&lt;br /&gt;
      &amp;quot;primaryKeys&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;userId&amp;quot;: &amp;quot;many-data&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
      ]&lt;br /&gt;
    }&lt;br /&gt;
  ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*logic query table MLocationsTestMemberPersonnel use primary Keys &amp;quot;userId&amp;quot; and then delete all data from primary Keys.&lt;br /&gt;
&lt;br /&gt;
=resources=&lt;br /&gt;
syntax is object&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{ &lt;br /&gt;
	&amp;quot;Lambda&amp;quot;:{&lt;br /&gt;
		&amp;quot;{FunctionNameHdrSqs}&amp;quot;:{ // FunctionNameHdrSqs is match resourceName in file tests&lt;br /&gt;
			&amp;quot;localLacation&amp;quot;:&amp;quot;/src/FunctionNameHdrSqs.js&amp;quot;,&lt;br /&gt;
			&amp;quot;localHandler&amp;quot;:&amp;quot;main&amp;quot;, &lt;br /&gt;
			&amp;quot;functionName&amp;quot;:&amp;quot;FunctionNameHdrSqs&amp;quot;	// FunctionName is function name match key of function.yml of servcie.&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;ProcessComplexFilterHdrSqs&amp;quot;:{ &lt;br /&gt;
			&amp;quot;localLacation&amp;quot;:&amp;quot;/src/ProcessComplexFilterHdrSqs.js&amp;quot;, &lt;br /&gt;
			&amp;quot;localHandler&amp;quot;:&amp;quot;main&amp;quot;, &lt;br /&gt;
			&amp;quot;functionName&amp;quot;:&amp;quot;ProcessComplexFilterHdrSqs&amp;quot; &lt;br /&gt;
		},&lt;br /&gt;
		... &lt;br /&gt;
	},&lt;br /&gt;
	&amp;quot;Dynamodb&amp;quot;: {&lt;br /&gt;
		&amp;quot;filterMain&amp;quot;:{ // match resourceName in file tests(dynamodbOutputEventIdentifiers)&lt;br /&gt;
			&amp;quot;tableName&amp;quot;:&amp;quot;filterMain&amp;quot; &lt;br /&gt;
		}, &lt;br /&gt;
		&amp;quot;tableNameBB&amp;quot;:{ &lt;br /&gt;
			&amp;quot;tableName&amp;quot;:&amp;quot;tableNameBB&amp;quot; &lt;br /&gt;
		},&lt;br /&gt;
		... &lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=events=&lt;br /&gt;
Syntax is object&lt;br /&gt;
==Syntax Name==&lt;br /&gt;
===FileName===&lt;br /&gt;
::Event_{inputEventTag}&lt;br /&gt;
&lt;br /&gt;
===eventTag===&lt;br /&gt;
#inputEventTag&lt;br /&gt;
#outputEventTag&lt;br /&gt;
#dynamodbTag&lt;br /&gt;
&lt;br /&gt;
*file events.js is have eventTag  (inputEventTag,outputEventTag,dynamodbTag)&lt;br /&gt;
**How to create name eventTag&lt;br /&gt;
***Example case : &amp;quot;test in service complexFilter functionname ProcessComplexFilter case element type is logical basic&amp;quot;.&lt;br /&gt;
::*&#039;&#039;&#039;inputEventTag&#039;&#039;&#039;&lt;br /&gt;
::::{serviceName}_{functionName}_{caseTest}&lt;br /&gt;
&#039;&#039;Conplexfilter_ProcessComplexFilter_Typelogical_basic&#039;&#039;&lt;br /&gt;
::*&#039;&#039;&#039;outputEventTag&#039;&#039;&#039;&lt;br /&gt;
::::output_{inputEventTag}&lt;br /&gt;
&#039;&#039;output_Conplexfilter_ProcessComplexFilter_Typelogical_basic&#039;&#039;&lt;br /&gt;
::*&#039;&#039;&#039;dynamodbTag&#039;&#039;&#039;&lt;br /&gt;
::::{inputEventTag}__Dynamodb__{&#039;&#039;&#039;action*&#039;&#039;&#039;}_{tableName} &lt;br /&gt;
&#039;&#039;Conplexfilter_ProcessComplexFilter_Typelogical_basic___Dynamodb__putItem_filterMain&#039;&#039;&lt;br /&gt;
: &amp;lt;u&amp;gt;&#039;&#039;&#039;{action}&#039;&#039;&#039; is only &#039;&#039;put&#039;&#039; or &#039;&#039;update&#039;&#039;, and in case of &#039;&#039;update&#039;&#039; must only test the last step of update &amp;lt;/u&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Syntax event===&lt;br /&gt;
====initiate by handlerServcie====&lt;br /&gt;
=====Sqs=====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
// An example input and output event of Sns&lt;br /&gt;
{&lt;br /&gt;
   &amp;quot;LambdaFunctionHdrSqs_input__pass&amp;quot;:{&lt;br /&gt;
      &amp;quot;properties&amp;quot;:{&lt;br /&gt;
         &amp;quot;propertyA&amp;quot;:{&lt;br /&gt;
            &amp;quot;value&amp;quot;:&amp;quot;valueProperty1&amp;quot;&lt;br /&gt;
         },&lt;br /&gt;
         &amp;quot;propertyB&amp;quot;:{&lt;br /&gt;
            &amp;quot;properties&amp;quot;:{&lt;br /&gt;
               &amp;quot;propertyB1&amp;quot;:{&lt;br /&gt;
                  &amp;quot;value&amp;quot;:&amp;quot;valuePropertyB1&amp;quot;&lt;br /&gt;
               }&lt;br /&gt;
            }&lt;br /&gt;
         },&lt;br /&gt;
         &amp;quot;propertyC&amp;quot;:{&lt;br /&gt;
            &amp;quot;eventValue&amp;quot;:[&lt;br /&gt;
               &amp;quot;valuePropertyC1&amp;quot;,&lt;br /&gt;
               &amp;quot;valuePropertyC2&amp;quot;,&lt;br /&gt;
               &amp;quot;valuePropertyC3&amp;quot;&lt;br /&gt;
            ]&lt;br /&gt;
         }&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;snsSqsTrigger&amp;quot;:true,&lt;br /&gt;
      &amp;quot;messageAttributes&amp;quot;:{&lt;br /&gt;
            &amp;quot;msgTag&amp;quot;:{&lt;br /&gt;
               &amp;quot;value&amp;quot;:&amp;quot;msgTag&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;propertyD&amp;quot;:{&lt;br /&gt;
               &amp;quot;value&amp;quot;:&amp;quot;valuePropertyD&amp;quot;&lt;br /&gt;
            }&lt;br /&gt;
      }&lt;br /&gt;
   },&lt;br /&gt;
   {&lt;br /&gt;
      &amp;quot;output_LambdaFunctionHdrSqs_pass&amp;quot;:{&lt;br /&gt;
         &amp;quot;properties&amp;quot;:{&lt;br /&gt;
            &amp;quot;propertyA&amp;quot;:{&lt;br /&gt;
               &amp;quot;value&amp;quot;:&amp;quot;valueProperty1&amp;quot;&lt;br /&gt;
            }&lt;br /&gt;
         }&lt;br /&gt;
      }&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot; linein&amp;gt;&lt;br /&gt;
&amp;quot;snsSqsTrigger&amp;quot;:true&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Dsq=====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
// An example input and output event of Direct Sqs&lt;br /&gt;
{&lt;br /&gt;
   &amp;quot;LambdaFunctionHdrDsq_input__pass&amp;quot;:{&lt;br /&gt;
      &amp;quot;forStageMatching&amp;quot;:true,&lt;br /&gt;
      &amp;quot;properties&amp;quot;:{&lt;br /&gt;
         &amp;quot;propertyA&amp;quot;:{&lt;br /&gt;
            &amp;quot;forStageMatching&amp;quot;:true,&lt;br /&gt;
            &amp;quot;value&amp;quot;:&amp;quot;valueProperty1&amp;quot;&lt;br /&gt;
         },&lt;br /&gt;
         &amp;quot;propertyB&amp;quot;:{&lt;br /&gt;
            &amp;quot;forStageMatching&amp;quot;:true,&lt;br /&gt;
            &amp;quot;properties&amp;quot;:{&lt;br /&gt;
               &amp;quot;propertyB1&amp;quot;:{&lt;br /&gt;
                  &amp;quot;forStageMatching&amp;quot;:true,&lt;br /&gt;
                  &amp;quot;value&amp;quot;:&amp;quot;valuePropertyB1&amp;quot;&lt;br /&gt;
               }&lt;br /&gt;
            }&lt;br /&gt;
         },&lt;br /&gt;
         &amp;quot;propertyC&amp;quot;:{&lt;br /&gt;
            &amp;quot;eventValue&amp;quot;:[&lt;br /&gt;
               &amp;quot;valuePropertyC1&amp;quot;,&lt;br /&gt;
               &amp;quot;valuePropertyC2&amp;quot;,&lt;br /&gt;
               &amp;quot;valuePropertyC3&amp;quot;&lt;br /&gt;
            ]&lt;br /&gt;
         }&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;DirectSqs&amp;quot;:true,&lt;br /&gt;
      &amp;quot;messageAttributes&amp;quot;:{&lt;br /&gt;
         &amp;quot;msgTag&amp;quot;:{&lt;br /&gt;
           &amp;quot;forStageMatching&amp;quot;:true,&lt;br /&gt;
           &amp;quot;value&amp;quot;:&amp;quot;msgTag&amp;quot;&lt;br /&gt;
          },&lt;br /&gt;
          &amp;quot;propertyD&amp;quot;:{&lt;br /&gt;
           &amp;quot;forStageMatching&amp;quot;:true,&lt;br /&gt;
           &amp;quot;value&amp;quot;:&amp;quot;valuePropertyD&amp;quot;&lt;br /&gt;
          }&lt;br /&gt;
      }&lt;br /&gt;
   },&lt;br /&gt;
   {&lt;br /&gt;
      &amp;quot;output_LambdaFunctionHdrDsq_pass&amp;quot;:{&lt;br /&gt;
         &amp;quot;forStageMatching&amp;quot;:true,&lt;br /&gt;
         &amp;quot;properties&amp;quot;:{&lt;br /&gt;
            &amp;quot;propertyA&amp;quot;:{&lt;br /&gt;
               &amp;quot;forStageMatching&amp;quot;:true,&lt;br /&gt;
               &amp;quot;value&amp;quot;:&amp;quot;valueProperty1&amp;quot;&lt;br /&gt;
            }&lt;br /&gt;
         }&lt;br /&gt;
      }&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* DirectSqs = true &lt;br /&gt;
:: for initialStage of Dsq&lt;br /&gt;
* messageAttributes is optional&lt;br /&gt;
&lt;br /&gt;
=====Inv=====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;LambdaFunctionHdrInv_input__pass&amp;quot;:{&lt;br /&gt;
     &amp;quot;forStageMatching&amp;quot;:true,&lt;br /&gt;
     &amp;quot;properties&amp;quot;:{&lt;br /&gt;
        &amp;quot;propertyA&amp;quot;:{&lt;br /&gt;
           &amp;quot;forStageMatching&amp;quot;:true,&lt;br /&gt;
           &amp;quot;value&amp;quot;:&amp;quot;valueProperty1&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;propertyB&amp;quot;:{&lt;br /&gt;
           &amp;quot;forStageMatching&amp;quot;:true,&lt;br /&gt;
           &amp;quot;properties&amp;quot;:{&lt;br /&gt;
              &amp;quot;propertyB1&amp;quot;:{&lt;br /&gt;
                 &amp;quot;forStageMatching&amp;quot;:true,&lt;br /&gt;
                 &amp;quot;value&amp;quot;:&amp;quot;valuePropertyB1&amp;quot;&lt;br /&gt;
              }&lt;br /&gt;
           }&lt;br /&gt;
        }&lt;br /&gt;
     }&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
        &amp;quot;output_LambdaFunctionHdrInv_pass&amp;quot;:{&lt;br /&gt;
           &amp;quot;forStageMatching&amp;quot;:true,&lt;br /&gt;
           &amp;quot;properties&amp;quot;:{&lt;br /&gt;
              &amp;quot;propertyA&amp;quot;:{&lt;br /&gt;
                 &amp;quot;forStageMatching&amp;quot;:true,&lt;br /&gt;
                 &amp;quot;value&amp;quot;:&amp;quot;valueProperty1&amp;quot;&lt;br /&gt;
              }&lt;br /&gt;
           }&lt;br /&gt;
        }&lt;br /&gt;
     }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Api=====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
// An example input and output event of API&lt;br /&gt;
{&lt;br /&gt;
	&amp;quot;LambdaFunctionHdrApi_input__pass_notTestAuthorizer&amp;quot;: { &lt;br /&gt;
		&amp;quot;forstageMatvhing&amp;quot;: true, &lt;br /&gt;
		&amp;quot;properties&amp;quot;: { &lt;br /&gt;
			&amp;quot;body&amp;quot;: { &lt;br /&gt;
				&amp;quot;properties&amp;quot;: { &lt;br /&gt;
					&amp;quot;propertyA&amp;quot;: { &lt;br /&gt;
						&amp;quot;testValueMatches&amp;quot;: false, &lt;br /&gt;
						&amp;quot;value&amp;quot;: &amp;quot;valueProperty1&amp;quot;, &lt;br /&gt;
					}, &lt;br /&gt;
					&amp;quot;propertyB&amp;quot;: { &lt;br /&gt;
						&amp;quot;properties&amp;quot;: { &lt;br /&gt;
							&amp;quot;propertyB1&amp;quot;: { &lt;br /&gt;
								&amp;quot;value&amp;quot;: &amp;quot;valuePropertyB1&amp;quot;, &lt;br /&gt;
							} &lt;br /&gt;
						} &lt;br /&gt;
					}, &lt;br /&gt;
					&amp;quot;propertyC&amp;quot;: { &lt;br /&gt;
						&amp;quot;eventValue&amp;quot;: [ &lt;br /&gt;
							&amp;quot;valuePropertyC1&amp;quot;, &lt;br /&gt;
							&amp;quot;valuePropertyC2&amp;quot;, &lt;br /&gt;
							&amp;quot;valuePropertyC3&amp;quot;, &lt;br /&gt;
						] &lt;br /&gt;
					},&lt;br /&gt;
					... &lt;br /&gt;
				} &lt;br /&gt;
			} &lt;br /&gt;
		}&lt;br /&gt;
	}, &lt;br /&gt;
	&amp;quot;Output_LambdaFunctionHdrApi_input__pass_notTestAuthorizer&amp;quot;: { &lt;br /&gt;
		&amp;quot;properties&amp;quot;: { &lt;br /&gt;
			&amp;quot;body&amp;quot;: { &lt;br /&gt;
				&amp;quot;properties&amp;quot;: { &lt;br /&gt;
					&amp;quot;propertyA&amp;quot;: { &lt;br /&gt;
						&amp;quot;testValueMatches&amp;quot;: false, &lt;br /&gt;
						&amp;quot;value&amp;quot;: &amp;quot;valueProperty1&amp;quot;&lt;br /&gt;
					}, &lt;br /&gt;
					...&lt;br /&gt;
				} &lt;br /&gt;
			} &lt;br /&gt;
		}  &lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====S3=====&lt;br /&gt;
&lt;br /&gt;
====dynamodb====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
// An example event of Dynamodb //optional &lt;br /&gt;
{&lt;br /&gt;
	{inputEventTag}__dynamodb_{action}_{tablename}: { // eg. &amp;quot;Complexfilter_ProcessComplexfilter_logical_basic__dynamodb_update_FilterMain&amp;quot;&lt;br /&gt;
	&amp;quot;forStageMatching&amp;quot;: true,&lt;br /&gt;
     &amp;quot;properties&amp;quot;: {&lt;br /&gt;
        &amp;quot;filterMainUniqueRequestId&amp;quot;: {&lt;br /&gt;
          &amp;quot;testValueMatches&amp;quot;: fase,&lt;br /&gt;
          &amp;quot;value&amp;quot;: &amp;quot;bbc4f4a9-2032-4dec-9129-8c7d169fecc5&amp;quot;&lt;br /&gt;
         },&lt;br /&gt;
        &amp;quot;filterObject&amp;quot;: {&lt;br /&gt;
        &amp;quot;forStageMatching&amp;quot;: true,&lt;br /&gt;
        &amp;quot;properties&amp;quot;: {&lt;br /&gt;
          &amp;quot;logicalType&amp;quot;: {&lt;br /&gt;
            &amp;quot;value&amp;quot;: &amp;quot;partitionKey&amp;quot;&lt;br /&gt;
          },&lt;br /&gt;
          &amp;quot;comparison&amp;quot;: {&lt;br /&gt;
            &amp;quot;value&amp;quot;: &amp;quot;equals&amp;quot;&lt;br /&gt;
          },&lt;br /&gt;
          &amp;quot;type&amp;quot;: {&lt;br /&gt;
            &amp;quot;value&amp;quot;: &amp;quot;logical&amp;quot;&lt;br /&gt;
          },&lt;br /&gt;
          &amp;quot;partitionKey&amp;quot;: {&lt;br /&gt;
            &amp;quot;forStageMatching&amp;quot;: true,&lt;br /&gt;
            &amp;quot;value&amp;quot;: &amp;quot;mockIntegratioTestCPF&amp;quot;&lt;br /&gt;
          }&lt;br /&gt;
        }&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;filterMainExpiryTime&amp;quot;: {&lt;br /&gt;
        &amp;quot;testValueMatches&amp;quot;: fase,&lt;br /&gt;
        &amp;quot;value&amp;quot;: 1731980802858&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;filterMainStatus&amp;quot;: {&lt;br /&gt;
       &amp;quot;forStageMatching&amp;quot;: true,&lt;br /&gt;
        &amp;quot;value&amp;quot;: &amp;quot;processing&amp;quot;&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;createTime&amp;quot;: {&lt;br /&gt;
        &amp;quot;testValueMatches&amp;quot;: fase,&lt;br /&gt;
        &amp;quot;value&amp;quot;: 1731894402678&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;objType&amp;quot;: {&lt;br /&gt;
        &amp;quot;forStageMatching&amp;quot;: true,&lt;br /&gt;
        &amp;quot;properties&amp;quot;: {&lt;br /&gt;
          &amp;quot;serviceTag&amp;quot;: {&lt;br /&gt;
            &amp;quot;forStageMatching&amp;quot;: true,&lt;br /&gt;
            &amp;quot;value&amp;quot;: &amp;quot;IntTesting&amp;quot;&lt;br /&gt;
          },&lt;br /&gt;
          &amp;quot;objectType&amp;quot;: {&lt;br /&gt;
            &amp;quot;forStageMatching&amp;quot;: true,&lt;br /&gt;
            &amp;quot;value&amp;quot;: &amp;quot;TestRecord&amp;quot;&lt;br /&gt;
          }&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;keyValues&amp;quot;: {&lt;br /&gt;
      &amp;quot;filterMainId&amp;quot;: &amp;quot;4865d2451a621cb7f71225cfabf2df4f98e20801&amp;quot;,&lt;br /&gt;
      &amp;quot;objTypeId&amp;quot;: &amp;quot;cdb170690571df7522b3850920fce02507c077ee&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
	} &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* partition key: filterMainId&lt;br /&gt;
* sort key: objTypeId&lt;br /&gt;
&lt;br /&gt;
[[2021-01-15 - Integration Testing - Adding DynamoDB result tests]]&lt;br /&gt;
&lt;br /&gt;
===Type paramiter===&lt;br /&gt;
use for evnet and dyanmodb event&lt;br /&gt;
====Normal====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 object: {&lt;br /&gt;
  forStageMatching: true,&lt;br /&gt;
  properties: {&lt;br /&gt;
    name:{&lt;br /&gt;
     forStageMatching: true,&lt;br /&gt;
     value:&amp;quot;Tom&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
   }&lt;br /&gt;
 },&lt;br /&gt;
 array: {&lt;br /&gt;
  forStageMatching: true,&lt;br /&gt;
  useIsEqual: true,&lt;br /&gt;
  eventValue: [&lt;br /&gt;
   {&lt;br /&gt;
     &amp;quot;relTypeAndDirection&amp;quot;: {&lt;br /&gt;
       &amp;quot;relType&amp;quot;: {&lt;br /&gt;
         &amp;quot;serviceTag&amp;quot;: &amp;quot;maxxCart2&amp;quot;,&lt;br /&gt;
         &amp;quot;relationshipTag&amp;quot;: &amp;quot;hasCartOrder&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;relationshipDirection&amp;quot;: &amp;quot;from&amp;quot;&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;targetObjects&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;objType&amp;quot;: {&lt;br /&gt;
           &amp;quot;serviceTag&amp;quot;: &amp;quot;maxxCart2&amp;quot;,&lt;br /&gt;
           &amp;quot;objectType&amp;quot;: &amp;quot;cartOrder&amp;quot;&lt;br /&gt;
          }&lt;br /&gt;
        }&lt;br /&gt;
      ]&lt;br /&gt;
    }&lt;br /&gt;
  ]&lt;br /&gt;
 },&lt;br /&gt;
 number: {&lt;br /&gt;
  forStageMatching: true,&lt;br /&gt;
  value: 1111&lt;br /&gt;
 },&lt;br /&gt;
 string: {&lt;br /&gt;
  forStageMatching: true,&lt;br /&gt;
  value: &amp;quot;hi&amp;quot;&lt;br /&gt;
 },&lt;br /&gt;
 boolean: {&lt;br /&gt;
  forStageMatching: true,&lt;br /&gt;
  value: true&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
 forStageMatching: true&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
::set true for check match value,It is not necessary to set every value&lt;br /&gt;
:::use in test importent paramiter&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
testValueMatches:false&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
::setting paramiter require on create but can not test random value eg: identifier or timeStamp or uuid&lt;br /&gt;
&lt;br /&gt;
====Empty====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
 EmptyString:{&lt;br /&gt;
forStageMatching: true,&lt;br /&gt;
  value:&amp;quot;&amp;quot;&lt;br /&gt;
 },&lt;br /&gt;
 EmptyArray:{&lt;br /&gt;
   forStageMatching: true,&lt;br /&gt;
   useIsEqual: true,&lt;br /&gt;
   eventValue: []&lt;br /&gt;
 },&lt;br /&gt;
 EmptyObject:{&lt;br /&gt;
  forStageMatching: true,&lt;br /&gt;
  value:{}&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Error====&lt;br /&gt;
can test noRetryError&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;quot;errorMessage&amp;quot;: {&lt;br /&gt;
    forStageMatching: true,&lt;br /&gt;
    &amp;quot;value&amp;quot;: &amp;quot;Not found schema of {serviceTag:TestGraphHandler, objectType:notFoundObjType}&amp;quot;&lt;br /&gt;
   }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Paramiter random====&lt;br /&gt;
Can not test case random numbber or uuid.&lt;br /&gt;
But requriOnCreate mush be set &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
testValueMatches:false&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
or set&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
forStageMatching:false&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=tests=&lt;br /&gt;
Syntax is array of object&lt;br /&gt;
==Syntax name== &lt;br /&gt;
===Testtag name ===&lt;br /&gt;
*{integrationTestTag}&lt;br /&gt;
#Test Own servcie or not a lot stage&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
Test_{inputEventTag}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
#Mix multiple servcie and multiple stage&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt; &lt;br /&gt;
IntegrationTest_{inputEventTag}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===File name ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt; &lt;br /&gt;
{integrationTestTag}.json&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Setting of test==&lt;br /&gt;
[[Service - Integration Test Config#tests.js Syntax|syntax test]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
            integrationTestTag: {integrationTestTag},&lt;br /&gt;
            productionSafe: true|false, //default false&lt;br /&gt;
            noInitialStage: true, // default false, if set to true, no error when no foundInitialStages found&lt;br /&gt;
            errorIfStageUndefined: true|false, //default false&lt;br /&gt;
            errorIfInvokeUndefined: true|false, //default false,&lt;br /&gt;
            dynamoDBSeedDataTags:[&amp;quot;seedDataDB_test_case_xx&amp;quot;], //[seedDataTag] optional if have seed data for test&lt;br /&gt;
            graphSeedDataTags:[&amp;quot;seedDataGraph_test_case_xx&amp;quot;], //[seedDataTag] optional if have seed data for test&lt;br /&gt;
            cleaningeDynamoOneRecordsTags: [&amp;quot;cleaningSeed_partitionKey_sortKey_normol&amp;quot;], //optional&lt;br /&gt;
            cleaningeDynamoManyRecordsTags: [], // optional&lt;br /&gt;
            stages:[&lt;br /&gt;
               ...&lt;br /&gt;
            ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
*[[2025-11-20 IntegrationTest#dynamoDBSeedDataTags|dynamoDBSeedDataTags]]&lt;br /&gt;
*[[2025-11-20 IntegrationTest#graphSeedDataTags|graphSeedDataTags]]&lt;br /&gt;
*[[2025-11-20 IntegrationTest#cleaningeDynamoOneRecordsTags|cleaningeDynamoOneRecordsTags]]&lt;br /&gt;
*[[2025-11-20 IntegrationTest#cleaningeDynamoManyRecordsTags|cleaningeDynamoManyRecordsTags]]&lt;br /&gt;
&lt;br /&gt;
==Stages==&lt;br /&gt;
====Initiate stage====&lt;br /&gt;
:&#039;&#039;&#039;&amp;quot;initialStage&amp;quot;:true&#039;&#039;&#039;&lt;br /&gt;
[[Service_-_Integration_Test_Config#tests.js Syntax|detail property of test]]&lt;br /&gt;
=====HandlerService=====&lt;br /&gt;
======Sqs======&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;quot;stages&amp;quot;:[&lt;br /&gt;
         {&lt;br /&gt;
            &amp;quot;initialStage&amp;quot;:true,&lt;br /&gt;
            &amp;quot;inputEventTag&amp;quot;:&amp;quot;Locations_ProcessLocationNodeSomting_casenotHaveData&amp;quot;,&lt;br /&gt;
            &amp;quot;serviceName&amp;quot;:&amp;quot;Locations&amp;quot;,&lt;br /&gt;
            &amp;quot;resourceType&amp;quot;:&amp;quot;Lambda&amp;quot;,&lt;br /&gt;
            &amp;quot;resourceName&amp;quot;:&amp;quot;ProcessLocationNodeSomtingHdrDsq&amp;quot;,&lt;br /&gt;
            &amp;quot;outputEventTag&amp;quot;:&amp;quot;Output_Locations_ProcessLocationNodeSomting_casenotHaveData&amp;quot;&lt;br /&gt;
         }&lt;br /&gt;
      ]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
======Dsq======&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
stages: [&lt;br /&gt;
        {&lt;br /&gt;
          initialStage: true,&lt;br /&gt;
          inputEventTag: &#039;LambdaFunctionHdrDsq_input_singleStage_directSqs__pass&#039;,&lt;br /&gt;
          serviceName: &#039;ServiceTemplate&#039;,&lt;br /&gt;
          resourceType: &#039;Lambda&#039;,&lt;br /&gt;
          resourceName: &#039;LambdaFunctionHdrDsq&#039;,&lt;br /&gt;
          outputEventTag: &#039;LambdaFunctionHdrDsq_output__returnvalue_pass&#039;,&lt;br /&gt;
          // **** not set snsServiceName and snsTopic&lt;br /&gt;
          // can be test dynamodbOutput&lt;br /&gt;
        }&lt;br /&gt;
      ]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
======Api======&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;quot;stages&amp;quot;:[&lt;br /&gt;
    {&lt;br /&gt;
       &amp;quot;initialStage&amp;quot;:true,&lt;br /&gt;
       &amp;quot;inputEventTag&amp;quot;:&amp;quot;LambdaFunctionHdrApi_input__pass&amp;quot;,&lt;br /&gt;
       &amp;quot;serviceName&amp;quot;:&amp;quot;ServiceTemplate&amp;quot;,&lt;br /&gt;
       &amp;quot;resourceType&amp;quot;:&amp;quot;Lambda&amp;quot;,&lt;br /&gt;
       &amp;quot;resourceName&amp;quot;:&amp;quot;LambdaFunctionHdrApi&amp;quot;,&lt;br /&gt;
       &amp;quot;outputEventTag&amp;quot;:&amp;quot;LambdaFunctionHdrApi_output__pass&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
======Inv======&lt;br /&gt;
*&#039;&#039;&#039;single stage&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
[{&lt;br /&gt;
   &amp;quot;integrationTestTag&amp;quot;:&amp;quot;LambdaFunctionHdrInv__pass&amp;quot;,&lt;br /&gt;
   &amp;quot;productionSafe&amp;quot;:false,&lt;br /&gt;
   &amp;quot;errorIfStageUndefined&amp;quot;:false,&lt;br /&gt;
   &amp;quot;errorIfInvokeUndefined&amp;quot;:false,&lt;br /&gt;
   &amp;quot;dynamoDBSeedDataTags&amp;quot;:[&amp;quot;seedDataDB_test_case_xx&amp;quot;], //[seedDataTag] optional if have seed data for test&lt;br /&gt;
   &amp;quot;graphSeedDataTags&amp;quot;:[&amp;quot;seedDataGraph_test_case_xx&amp;quot;], //[seedDataTag] optional if have seed data for test&lt;br /&gt;
   &amp;quot;cleaningeDynamoOneRecordsTags&amp;quot;: [&amp;quot;cleaningSeed_partitionKey_sortKey_normol&amp;quot;], //optional&lt;br /&gt;
   &amp;quot;cleaningeDynamoManyRecordsTags&amp;quot;: []&lt;br /&gt;
   &amp;quot;stages&amp;quot;:[&lt;br /&gt;
      {&lt;br /&gt;
         &amp;quot;initialStage&amp;quot;:true,&lt;br /&gt;
         &amp;quot;inputEventTag&amp;quot;:&amp;quot;LambdaFunctionHdrInv_input__pass&amp;quot;,&lt;br /&gt;
         &amp;quot;serviceName&amp;quot;:&amp;quot;ServiceTemplate&amp;quot;,&lt;br /&gt;
         &amp;quot;resourceType&amp;quot;:&amp;quot;Lambda&amp;quot;,&lt;br /&gt;
         &amp;quot;resourceName&amp;quot;:&amp;quot;LambdaFunctionHdrInv&amp;quot;,&lt;br /&gt;
         &amp;quot;outputEventTag&amp;quot;:&amp;quot;LambdaFunctionHdrInv_output__pass&amp;quot;&lt;br /&gt;
      }&lt;br /&gt;
   ]&lt;br /&gt;
}]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;invoke multiple stage&#039;&#039;&#039; &lt;br /&gt;
:*Each stage test can invoke multiple lambda by use &amp;quot;eventStage Tag&amp;quot; point to stage for test integration test.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
[{&lt;br /&gt;
   &amp;quot;integrationTestTag&amp;quot;:&amp;quot;LambdaFunctionHdrInv_invokes__pass&amp;quot;,&lt;br /&gt;
   &amp;quot;productionSafe&amp;quot;:false,&lt;br /&gt;
   &amp;quot;errorIfStageUndefined&amp;quot;:false,&lt;br /&gt;
   &amp;quot;errorIfInvokeUndefined&amp;quot;:false,&lt;br /&gt;
   &amp;quot;dynamoDBSeedDataTags&amp;quot;:[], //[seedDataTag] optional if have seed data for test&lt;br /&gt;
   &amp;quot;graphSeedDataTags&amp;quot;:[], //[seedDataTag] optional if have seed data for test&lt;br /&gt;
   &amp;quot;cleaningeDynamoOneRecordsTags&amp;quot;: [], //optional&lt;br /&gt;
   &amp;quot;cleaningeDynamoManyRecordsTags&amp;quot;: [], // optional&lt;br /&gt;
   &amp;quot;stages&amp;quot;:[&lt;br /&gt;
      {&lt;br /&gt;
         &amp;quot;initialStage&amp;quot;:true,&lt;br /&gt;
         &amp;quot;inputEventTag&amp;quot;:&amp;quot;LambdaFunctionHdrInv_input__pass&amp;quot;,&lt;br /&gt;
         &amp;quot;serviceName&amp;quot;:&amp;quot;ServiceTemplate&amp;quot;,&lt;br /&gt;
         &amp;quot;resourceType&amp;quot;:&amp;quot;Lambda&amp;quot;,&lt;br /&gt;
         &amp;quot;resourceName&amp;quot;:&amp;quot;LambdaFunctionHdrInv&amp;quot;,&lt;br /&gt;
         &amp;quot;outputEventTag&amp;quot;:&amp;quot;LambdaFunctionHdrInv_output__pass&amp;quot;,&lt;br /&gt;
         &amp;quot;invokes&amp;quot;:[&lt;br /&gt;
            {&lt;br /&gt;
               &amp;quot;eventStageTag&amp;quot;:&amp;quot;service_invokesB__pass&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            {&lt;br /&gt;
               &amp;quot;eventStageTag&amp;quot;:&amp;quot;service_invokesD__pass&amp;quot;&lt;br /&gt;
            }&lt;br /&gt;
         ]&lt;br /&gt;
      },&lt;br /&gt;
      {&lt;br /&gt;
         &amp;quot;eventStageTag&amp;quot;:&amp;quot;service_invokesB__pass&amp;quot;,&lt;br /&gt;
         &amp;quot;inputEventTag&amp;quot;:&amp;quot;input_service_invokes__pass&amp;quot;,&lt;br /&gt;
         &amp;quot;serviceName&amp;quot;:&amp;quot;ServiceTemplate_B&amp;quot;,&lt;br /&gt;
         &amp;quot;resourceType&amp;quot;:&amp;quot;Lambda&amp;quot;,&lt;br /&gt;
         &amp;quot;resourceName&amp;quot;:&amp;quot;LambdaFunction_B_HdrInv&amp;quot;,&lt;br /&gt;
         &amp;quot;outputEventTag&amp;quot;:&amp;quot;output_service_invokes__pass&amp;quot;&lt;br /&gt;
      },&lt;br /&gt;
      {&lt;br /&gt;
         &amp;quot;eventStageTag&amp;quot;:&amp;quot;service_invokesD__pass&amp;quot;,&lt;br /&gt;
         &amp;quot;inputEventTag&amp;quot;:&amp;quot;input_service_invokesD__pass&amp;quot;,&lt;br /&gt;
         &amp;quot;serviceName&amp;quot;:&amp;quot;ServiceTemplate_D&amp;quot;,&lt;br /&gt;
         &amp;quot;resourceType&amp;quot;:&amp;quot;Lambda&amp;quot;,&lt;br /&gt;
         &amp;quot;resourceName&amp;quot;:&amp;quot;LambdaFunction_D_HdrInv&amp;quot;,&lt;br /&gt;
         &amp;quot;outputEventTag&amp;quot;:&amp;quot;output_service_invokesD__pass&amp;quot;&lt;br /&gt;
      }&lt;br /&gt;
   ]&lt;br /&gt;
}]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
======S3======&lt;br /&gt;
======Batch======&lt;br /&gt;
&lt;br /&gt;
====GeneratedSeedData====&lt;br /&gt;
*Integrationtest must be delete identifier every time before test.&lt;br /&gt;
*Set &#039;generatedSeedData&#039; in file tests.json case by case of stage eg: stages[0] create identifier is randomOnCreate will set &#039;generatedSeedData&#039; and stages[1] create relationship is randomOnCreate(It is usually random, except in the case of relationship version) set generatedSeedData this stages[1].&lt;br /&gt;
*How to delete case identifier rendomOnCreate?: set in stage use setting generateSeedData &amp;quot;randomOnCreateIdentifier&amp;quot;&lt;br /&gt;
#randomOnCreateIdentifier&lt;br /&gt;
#notRandomOnIdentifier&lt;br /&gt;
#relationships&lt;br /&gt;
=====randomOnCreateIdentifier=====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;quot;stages&amp;quot;: [&lt;br /&gt;
      {&lt;br /&gt;
        &amp;quot;initialStage&amp;quot;: true,&lt;br /&gt;
        &amp;quot;inputEventTag&amp;quot;: &amp;quot;MLocation_CreateHdrSqs__case_NodeVersionData_Jaya&amp;quot;,&lt;br /&gt;
        &amp;quot;serviceTag&amp;quot;: &amp;quot;MLocations&amp;quot;,&lt;br /&gt;
        &amp;quot;resourceType&amp;quot;: &amp;quot;Lambda&amp;quot;,&lt;br /&gt;
        &amp;quot;resourceName&amp;quot;: &amp;quot;CreateHdrSqs&amp;quot;,&lt;br /&gt;
        &amp;quot;snsServiceName&amp;quot;: &amp;quot;MLocations&amp;quot;,&lt;br /&gt;
        &amp;quot;snsTopic&amp;quot;: &amp;quot;Create_In&amp;quot;,&lt;br /&gt;
        &amp;quot;generatedSeedData&amp;quot;: {&lt;br /&gt;
          &amp;quot;randomOnCreateIdentifier&amp;quot;: [&lt;br /&gt;
            {&lt;br /&gt;
              &amp;quot;objType&amp;quot;: {&lt;br /&gt;
                &amp;quot;serviceTag&amp;quot;: &amp;quot;MLocations&amp;quot;,&lt;br /&gt;
                &amp;quot;objectType&amp;quot;: &amp;quot;Member&amp;quot;&lt;br /&gt;
              },&lt;br /&gt;
              &amp;quot;identifierValue&amp;quot;: &amp;quot;Jaya-member-001&amp;quot;&lt;br /&gt;
            }&lt;br /&gt;
          ]&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
=====notRandomOnIdentifier=====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;quot;stages&amp;quot;: [&lt;br /&gt;
      {&lt;br /&gt;
        &amp;quot;initialStage&amp;quot;: true,&lt;br /&gt;
        &amp;quot;inputEventTag&amp;quot;: &amp;quot;MLocation_CreateHdrSqs__case_NodeVersionData_Jaya&amp;quot;,&lt;br /&gt;
        &amp;quot;serviceTag&amp;quot;: &amp;quot;MLocations&amp;quot;,&lt;br /&gt;
        &amp;quot;resourceType&amp;quot;: &amp;quot;Lambda&amp;quot;,&lt;br /&gt;
        &amp;quot;resourceName&amp;quot;: &amp;quot;CreateHdrSqs&amp;quot;,&lt;br /&gt;
        &amp;quot;snsServiceName&amp;quot;: &amp;quot;MLocations&amp;quot;,&lt;br /&gt;
        &amp;quot;snsTopic&amp;quot;: &amp;quot;Create_In&amp;quot;,&lt;br /&gt;
        &amp;quot;generatedSeedData&amp;quot;: {&lt;br /&gt;
          &amp;quot;notRandomOnIdentifier&amp;quot;: [&lt;br /&gt;
            {&lt;br /&gt;
              &amp;quot;objType&amp;quot;: {&lt;br /&gt;
                &amp;quot;serviceTag&amp;quot;: &amp;quot;gggg&amp;quot;,&lt;br /&gt;
                &amp;quot;objectType&amp;quot;: &amp;quot;ssssss&amp;quot;&lt;br /&gt;
              },&lt;br /&gt;
              &amp;quot;identifiers&amp;quot;: {&lt;br /&gt;
                &amp;quot;topId&amp;quot;: &amp;quot;123456&amp;quot;&lt;br /&gt;
              }&lt;br /&gt;
            }&lt;br /&gt;
          ]&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    ]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
=====relationships=====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;quot;stages&amp;quot;: [&lt;br /&gt;
      {&lt;br /&gt;
        &amp;quot;initialStage&amp;quot;: true,&lt;br /&gt;
        &amp;quot;inputEventTag&amp;quot;: &amp;quot;MLocation_CreateHdrSqs__case_NodeVersionData_Jaya&amp;quot;,&lt;br /&gt;
        &amp;quot;serviceTag&amp;quot;: &amp;quot;MLocations&amp;quot;,&lt;br /&gt;
        &amp;quot;resourceType&amp;quot;: &amp;quot;Lambda&amp;quot;,&lt;br /&gt;
        &amp;quot;resourceName&amp;quot;: &amp;quot;CreateHdrSqs&amp;quot;,&lt;br /&gt;
        &amp;quot;snsServiceName&amp;quot;: &amp;quot;MLocations&amp;quot;,&lt;br /&gt;
        &amp;quot;snsTopic&amp;quot;: &amp;quot;Create_In&amp;quot;,&lt;br /&gt;
        &amp;quot;generatedSeedData&amp;quot;: {&lt;br /&gt;
         &amp;quot;relationships&amp;quot;: [&lt;br /&gt;
            {&lt;br /&gt;
              &amp;quot;relType&amp;quot;: {&lt;br /&gt;
                &amp;quot;serviceTag&amp;quot;: &amp;quot;PaymentMethodGeneric&amp;quot;,&lt;br /&gt;
                &amp;quot;relationshipTag&amp;quot;: &amp;quot;disabledPaymentMethodGenericPropertyValue&amp;quot;&lt;br /&gt;
              },&lt;br /&gt;
              &amp;quot;relId&amp;quot;: &amp;quot;f4f73de7-647c-4b3b-8043-87cc002f361a&amp;quot;&lt;br /&gt;
            }&lt;br /&gt;
          ]&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    ]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Dynamodb==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
stages: [&lt;br /&gt;
        {&lt;br /&gt;
          initialStage: true,&lt;br /&gt;
          inputEventTag: &#039;Locations_LambdaFunctionHdrDsq_singleStage_directSqs__pass&#039;,&lt;br /&gt;
          serviceName: &#039;ServiceTemplate&#039;,&lt;br /&gt;
          resourceType: &#039;Lambda&#039;,&lt;br /&gt;
          resourceName: &#039;LambdaFunctionHdrDsq&#039;,&lt;br /&gt;
          outputEventTag: &#039;output_Locations_LambdaFunctionHdrDsq_singleStage_directSqs__pass&#039;,&lt;br /&gt;
          dynamodbOutputEventIdentifiers: [&lt;br /&gt;
			{&lt;br /&gt;
              serviceName: {tableName}, //service that deployed the DynamoDB table, so can build table&#039;s full resource name&lt;br /&gt;
              resourceName: {resourceName}, //DynamoDB resourceName&lt;br /&gt;
              eventTag: {eventTagDynamoDB}&lt;br /&gt;
		    }&lt;br /&gt;
          ],&lt;br /&gt;
        }&lt;br /&gt;
      ]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Result of integrationtest =&lt;br /&gt;
Data have 2 table &amp;quot;TestRecord&amp;quot; and &amp;quot;TestUnit&amp;quot;.&lt;br /&gt;
:- TestRecord is table all unti of stage inside eg input output invokes and dynamodb&lt;br /&gt;
:- TestUnit is store status each unit &lt;br /&gt;
each unit save in table TestUnit&lt;br /&gt;
testRecordId is  name of test concat with testTime.&lt;br /&gt;
testUnitId is point to position of unti instage.&lt;br /&gt;
resultStatus is status of unit.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
eg:&lt;br /&gt;
input_0 = stages index 0 result &#039;&#039;&#039;input&#039;&#039;&#039;&lt;br /&gt;
output_1 = stages index 1 result &#039;&#039;&#039;output&#039;&#039;&#039;&lt;br /&gt;
invokeInput_0_1 = stages index 0 result &#039;&#039;&#039;invokes&#039;&#039;&#039; index 1 position input &lt;br /&gt;
invokeOutput_0_1 = stages index 0 result &#039;&#039;&#039;invokes&#039;&#039;&#039; index 1 position output&lt;br /&gt;
dynamodb_0_1 =  stages index 0 result &#039;&#039;&#039;dynamodb&#039;&#039;&#039; index 1.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
after all TestUnit finish (check  by awaitingMultiplestep penditnStep is integrationtestTag awaitingStepId is each TestUnit )&lt;br /&gt;
check all awaitingStep finish send message to ultimateIntegrationtest for sumla all test is status&lt;br /&gt;
&lt;br /&gt;
== Summary of test status == &lt;br /&gt;
:1.testStatus is &amp;quot;passed&amp;quot; all unit passed.&lt;br /&gt;
:2.testStatus is &amp;quot;failed&amp;quot;  have some is failed.&lt;br /&gt;
:3.testStatus is &amp;quot;processing&amp;quot; have some is have status processing after check all awaiting step is finish.&lt;br /&gt;
:4.testStatus is &amp;quot;failed&amp;quot; have record &amp;quot;errorsTest&amp;quot; in case &amp;quot;not match stage invoke&amp;quot;, &#039;found multiple matchingInvokes&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*[[2025-02-20 - Integration Test examples#tests.js Syntax|Syntax Dynamodb]]&lt;br /&gt;
&lt;br /&gt;
=How to test integrationtest s3=&lt;br /&gt;
[[Developer guide for making Integration Tests]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Working documents| 2025-11-20]]&lt;br /&gt;
[[Category:Working documents - Integration Testing| 2025-11-20]]&lt;/div&gt;</summary>
		<author><name>Mint</name></author>
	</entry>
	<entry>
		<id>https://izara.io/wiki/index.php?title=Service_-_Organization&amp;diff=4463</id>
		<title>Service - Organization</title>
		<link rel="alternate" type="text/html" href="https://izara.io/wiki/index.php?title=Service_-_Organization&amp;diff=4463"/>
		<updated>2026-06-11T04:25:28Z</updated>

		<summary type="html">&lt;p&gt;Mint: /* organization */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Overview =&lt;br /&gt;
&lt;br /&gt;
A user can have many organizations, each organization has it&#039;s independent accounting.&lt;br /&gt;
&lt;br /&gt;
= Repository =&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
= Object Schemas =&lt;br /&gt;
; Additional Information: [[Per Service Schemas]]&lt;br /&gt;
&lt;br /&gt;
== organization ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
	objectType: &amp;quot;organization&amp;quot;,&lt;br /&gt;
	canDelete: false,&lt;br /&gt;
	addOnDataStructure: [&lt;br /&gt;
		{&lt;br /&gt;
			type: &amp;quot;propertyValue&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		{&lt;br /&gt;
			type:&amp;quot;versionedData&amp;quot;,&lt;br /&gt;
			versionedDataLabel: &amp;quot;Detail&amp;quot;,&lt;br /&gt;
			storageResourceTag : &amp;quot;myGraph&amp;quot;,&lt;br /&gt;
			fieldNames: {&lt;br /&gt;
				&amp;quot;organizationName&amp;quot;:{&lt;br /&gt;
					type: &amp;quot;string&amp;quot;,&lt;br /&gt;
					requiredOnCreate: true,&lt;br /&gt;
					canUpdate: true,&lt;br /&gt;
					userCanUpdate: true,&lt;br /&gt;
				},&lt;br /&gt;
				&amp;quot;dailyRateCurrencyTableId&amp;quot;:{&lt;br /&gt;
					type: &amp;quot;string&amp;quot;,&lt;br /&gt;
					requiredOnCreate: true,&lt;br /&gt;
					canUpdate: true,&lt;br /&gt;
					userCanUpdate: true,&lt;br /&gt;
				},&lt;br /&gt;
			}&lt;br /&gt;
		},&lt;br /&gt;
	],&lt;br /&gt;
	storageResources: {&lt;br /&gt;
		myGraph: {&lt;br /&gt;
			storageType: &amp;quot;graph&amp;quot;,&lt;br /&gt;
			graphServerTag: &amp;quot;GraphHandler&amp;quot;&lt;br /&gt;
		}&lt;br /&gt;
    },&lt;br /&gt;
    fieldNames: {&lt;br /&gt;
		organizationId: {&lt;br /&gt;
			type: &amp;quot;string&amp;quot;,&lt;br /&gt;
			randomOnCreate: true,&lt;br /&gt;
			storageResourceTags: [&#039;myGraph&#039;]&lt;br /&gt;
		},&lt;br /&gt;
		functionalCurrency: {&lt;br /&gt;
			type: &amp;quot;currency&amp;quot;,&lt;br /&gt;
			requiredOnCreate: true,&lt;br /&gt;
			canUpdate: false,&lt;br /&gt;
			userCanUpdate: false,&lt;br /&gt;
			storageResourceTags: [&#039;myGraph&#039;]&lt;br /&gt;
		},&lt;br /&gt;
&lt;br /&gt;
      precision: {&lt;br /&gt;
        type: &amp;quot;integer&amp;quot;,&lt;br /&gt;
        randomOnCreate: false,  &lt;br /&gt;
        optionalOnCreate: true,&lt;br /&gt;
        requiredOnCreate: false, &lt;br /&gt;
        validation: {&lt;br /&gt;
          pattern: pattern&lt;br /&gt;
        },&lt;br /&gt;
        storageResourceTags: [&#039;graph&#039;],&lt;br /&gt;
      }&lt;br /&gt;
    },&lt;br /&gt;
    identifiers: [&lt;br /&gt;
		{&lt;br /&gt;
			type: &amp;quot;identifier&amp;quot;,&lt;br /&gt;
			fieldName: &amp;quot;organizationId&amp;quot;&lt;br /&gt;
		}&lt;br /&gt;
    ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Relationships ==&lt;br /&gt;
&lt;br /&gt;
=== hasOrganization ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
	hasOrganization: {&lt;br /&gt;
		storageResources: {&lt;br /&gt;
			myGraph: {&lt;br /&gt;
				storageType: &amp;quot;graph&amp;quot;,&lt;br /&gt;
				graphServerTag: &amp;quot;GraphHandler&amp;quot;			&lt;br /&gt;
			}&lt;br /&gt;
		},&lt;br /&gt;
		canChangeToRelTypes: [&lt;br /&gt;
			{&lt;br /&gt;
				serviceTag:&amp;quot;Organization&amp;quot;,&lt;br /&gt;
				relationshipTag: &amp;quot;removedOrganization&amp;quot;&lt;br /&gt;
			},&lt;br /&gt;
		],		&lt;br /&gt;
		links: [&lt;br /&gt;
			{&lt;br /&gt;
				storageResourceTags: [&amp;quot;myGraph&amp;quot;],&lt;br /&gt;
				from: {&lt;br /&gt;
					objType: {&lt;br /&gt;
						serviceTag: &amp;quot;User&amp;quot;,&lt;br /&gt;
						objectType: &amp;quot;user&amp;quot;&lt;br /&gt;
					},&lt;br /&gt;
					linkType: &amp;quot;one&amp;quot;,&lt;br /&gt;
				},&lt;br /&gt;
				to: {&lt;br /&gt;
					objType: {&lt;br /&gt;
						serviceTag: &amp;quot;Organization&amp;quot;,&lt;br /&gt;
						objectType: &amp;quot;organization&amp;quot;&lt;br /&gt;
					},&lt;br /&gt;
					linkType: &amp;quot;many&amp;quot;&lt;br /&gt;
				}&lt;br /&gt;
			},&lt;br /&gt;
		]&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== removedOrganization ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
	removedOrganization: {&lt;br /&gt;
		storageResources: {&lt;br /&gt;
			myGraph: {&lt;br /&gt;
				storageType: &amp;quot;graph&amp;quot;,&lt;br /&gt;
				graphServerTag: &amp;quot;GraphHandler&amp;quot;			&lt;br /&gt;
			}&lt;br /&gt;
		},&lt;br /&gt;
		canChangeToRelTypes: [&lt;br /&gt;
			{&lt;br /&gt;
				serviceTag:&amp;quot;Organization&amp;quot;,&lt;br /&gt;
				relationshipTag: &amp;quot;hasOrganization&amp;quot;&lt;br /&gt;
			},&lt;br /&gt;
		],		&lt;br /&gt;
		links: [&lt;br /&gt;
			{&lt;br /&gt;
				storageResourceTags: [&amp;quot;myGraph&amp;quot;],&lt;br /&gt;
				from: {&lt;br /&gt;
					objType: {&lt;br /&gt;
						serviceTag: &amp;quot;User&amp;quot;,&lt;br /&gt;
						objectType: &amp;quot;user&amp;quot;&lt;br /&gt;
					},&lt;br /&gt;
					linkType: &amp;quot;one&amp;quot;,&lt;br /&gt;
				},&lt;br /&gt;
				to: {&lt;br /&gt;
					objType: {&lt;br /&gt;
						serviceTag: &amp;quot;Organization&amp;quot;,&lt;br /&gt;
						objectType: &amp;quot;organization&amp;quot;&lt;br /&gt;
					},&lt;br /&gt;
					linkType: &amp;quot;many&amp;quot;&lt;br /&gt;
				}&lt;br /&gt;
			},&lt;br /&gt;
		]&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* links a user to the organization they manage&lt;br /&gt;
* does not convey ownership, each organization is a standalone organization that has it&#039;s own RBAC&lt;br /&gt;
* this allows for simple transfer of ownership of data&lt;br /&gt;
&lt;br /&gt;
= Addresses =&lt;br /&gt;
&lt;br /&gt;
* use same structure as users in Izara Market&lt;br /&gt;
&lt;br /&gt;
= Working documents =&lt;br /&gt;
&lt;br /&gt;
[[:Category:Working_documents - Organization| Organization]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Backend services| Organization]]&lt;/div&gt;</summary>
		<author><name>Mint</name></author>
	</entry>
	<entry>
		<id>https://izara.io/wiki/index.php?title=Service_-_Entry&amp;diff=4462</id>
		<title>Service - Entry</title>
		<link rel="alternate" type="text/html" href="https://izara.io/wiki/index.php?title=Service_-_Entry&amp;diff=4462"/>
		<updated>2026-06-11T04:24:27Z</updated>

		<summary type="html">&lt;p&gt;Mint: /* entry */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Overview =&lt;br /&gt;
&lt;br /&gt;
A credit or debit entry linking between a journal entry and an account.&lt;br /&gt;
&lt;br /&gt;
= Repository =&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
= Object Schemas =&lt;br /&gt;
; Additional Information: [[Per Service Schemas]]&lt;br /&gt;
&lt;br /&gt;
== entry ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
	objectType: &amp;quot;entry&amp;quot;,&lt;br /&gt;
	canDelete: false,&lt;br /&gt;
	belongTo: {&lt;br /&gt;
		serviceTag: &amp;quot;Organization&amp;quot;,&lt;br /&gt;
		objectType: &amp;quot;organization&amp;quot;&lt;br /&gt;
	},&lt;br /&gt;
	addOnDataStructure: [&lt;br /&gt;
    {&lt;br /&gt;
      type: &amp;quot;versionedData&amp;quot;,&lt;br /&gt;
      versionedDataLabel: &amp;quot;Detail&amp;quot;,&lt;br /&gt;
      storageResourceTag: &amp;quot;myGraph&amp;quot;,&lt;br /&gt;
      fieldNames: {&lt;br /&gt;
        amount: {&lt;br /&gt;
          type: &amp;quot;currencyValue&amp;quot;, // string|integer|currency|currencyValue|float|special|object|boolean|arrayMixed|arrayNumeric|arrayString&lt;br /&gt;
          requiredOnCreate: true, // default = false&lt;br /&gt;
        },&lt;br /&gt;
        functionalCurrencyAmount: {&lt;br /&gt;
          type: &amp;quot;currencyValue&amp;quot;,&lt;br /&gt;
          requiredOnCreate: true,&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    },&lt;br /&gt;
  ],&lt;br /&gt;
	storageResources: {&lt;br /&gt;
		myGraph: {&lt;br /&gt;
			storageType: &amp;quot;graph&amp;quot;,&lt;br /&gt;
			graphServerTag: &amp;quot;GraphHandler&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;dynamo&amp;quot;: {&lt;br /&gt;
		  &amp;quot;storageType&amp;quot;: &amp;quot;dynamoDB&amp;quot;,&lt;br /&gt;
		  &amp;quot;tableName&amp;quot;: &amp;quot;entry&amp;quot;,&lt;br /&gt;
		}  &lt;br /&gt;
    },&lt;br /&gt;
    fieldNames: {&lt;br /&gt;
		entryId: {&lt;br /&gt;
			type: &amp;quot;string&amp;quot;,&lt;br /&gt;
			randomOnCreate: true,&lt;br /&gt;
			storageResourceTags: [&#039;myGraph&#039;,&#039;dynamo&#039;]&lt;br /&gt;
		},&lt;br /&gt;
        amount: {&lt;br /&gt;
            type: &amp;quot;numeric&amp;quot;,&lt;br /&gt;
			requiredOnCreate: true,&lt;br /&gt;
			storageResourceTags: [&#039;myGraph&#039;,&#039;dynamo&#039;]&lt;br /&gt;
        },&lt;br /&gt;
		functionalCurrencyAmount: {&lt;br /&gt;
			type: &amp;quot;currencyValue&amp;quot;,&lt;br /&gt;
			storageResourceTags: [&#039;myGraph&#039;]&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
    },&lt;br /&gt;
    identifiers: [&lt;br /&gt;
		{&lt;br /&gt;
			type: &amp;quot;identifier&amp;quot;,&lt;br /&gt;
			fieldName: &amp;quot;entryId&amp;quot;&lt;br /&gt;
		}&lt;br /&gt;
    ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* accountingStatus: when a period is being closed we set all entries to processing, then once the return is completed set to locked&lt;br /&gt;
* when beginning process of an entry, maybe trigger ComAcc plugin to check whether journalId can be locked, for example if it is connected to a sale and the sale is in saleCommitted=working/updateWorking cannot be locked&lt;br /&gt;
* when processing or locked entries cannot be changed (journals cannot be changed if either of the entries on each side are processing or locked&lt;br /&gt;
* maybe the journal also has an accountingStatus, so easy to confirm cannot make changes, or perhaps only journals because entries cannot be changed directly&lt;br /&gt;
&lt;br /&gt;
== Relationships ==&lt;br /&gt;
&lt;br /&gt;
=== hasEntry ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
	hasEntry: {&lt;br /&gt;
		storageResources: {&lt;br /&gt;
			myGraph: {&lt;br /&gt;
				storageType: &amp;quot;graph&amp;quot;,&lt;br /&gt;
				graphServerTag: &amp;quot;GraphHandler&amp;quot;			&lt;br /&gt;
			}&lt;br /&gt;
		},&lt;br /&gt;
		links: [&lt;br /&gt;
			{&lt;br /&gt;
				storageResourceTags: [&amp;quot;myGraph&amp;quot;],&lt;br /&gt;
				from: {&lt;br /&gt;
					objType: {&lt;br /&gt;
						serviceTag: &amp;quot;Journal&amp;quot;,&lt;br /&gt;
						objectType: &amp;quot;journal&amp;quot;&lt;br /&gt;
					},&lt;br /&gt;
					linkType: &amp;quot;one&amp;quot;,&lt;br /&gt;
				},&lt;br /&gt;
				to: {&lt;br /&gt;
					objType: {&lt;br /&gt;
						serviceTag: &amp;quot;Entry&amp;quot;,&lt;br /&gt;
						objectType: &amp;quot;entry&amp;quot;&lt;br /&gt;
					},&lt;br /&gt;
					requiredOnCreate: true,&lt;br /&gt;
					linkType: &amp;quot;many&amp;quot;&lt;br /&gt;
				}&lt;br /&gt;
			},&lt;br /&gt;
		]&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== hasEntry ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
	hasEntry: {&lt;br /&gt;
		storageResources: {&lt;br /&gt;
			myGraph: {&lt;br /&gt;
				storageType: &amp;quot;graph&amp;quot;,&lt;br /&gt;
				graphServerTag: &amp;quot;GraphHandler&amp;quot;			&lt;br /&gt;
			}&lt;br /&gt;
		},&lt;br /&gt;
		links: [&lt;br /&gt;
			{&lt;br /&gt;
				storageResourceTags: [&amp;quot;myGraph&amp;quot;],&lt;br /&gt;
				from: {&lt;br /&gt;
					objType: {&lt;br /&gt;
						serviceTag: &amp;quot;Journal&amp;quot;,&lt;br /&gt;
						objectType: &amp;quot;journal&amp;quot;&lt;br /&gt;
					},&lt;br /&gt;
					linkType: &amp;quot;one&amp;quot;,&lt;br /&gt;
				},&lt;br /&gt;
				to: {&lt;br /&gt;
					objType: {&lt;br /&gt;
						serviceTag: &amp;quot;Entry&amp;quot;,&lt;br /&gt;
						objectType: &amp;quot;entry&amp;quot;&lt;br /&gt;
					},&lt;br /&gt;
					requiredOnCreate: true,&lt;br /&gt;
					linkType: &amp;quot;many&amp;quot;&lt;br /&gt;
				}&lt;br /&gt;
			},&lt;br /&gt;
		]&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== oldEntry ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
	oldEntry: {&lt;br /&gt;
		storageResources: {&lt;br /&gt;
			myGraph: {&lt;br /&gt;
				storageType: &amp;quot;graph&amp;quot;,&lt;br /&gt;
				graphServerTag: &amp;quot;GraphHandler&amp;quot;			&lt;br /&gt;
			}&lt;br /&gt;
		},&lt;br /&gt;
		links: [&lt;br /&gt;
			{&lt;br /&gt;
				storageResourceTags: [&amp;quot;myGraph&amp;quot;],&lt;br /&gt;
				from: {&lt;br /&gt;
					objType: {&lt;br /&gt;
						serviceTag: &amp;quot;Journal&amp;quot;,&lt;br /&gt;
						objectType: &amp;quot;journal&amp;quot;&lt;br /&gt;
					},&lt;br /&gt;
					linkType: &amp;quot;one&amp;quot;,&lt;br /&gt;
				},&lt;br /&gt;
				to: {&lt;br /&gt;
					objType: {&lt;br /&gt;
						serviceTag: &amp;quot;Entry&amp;quot;,&lt;br /&gt;
						objectType: &amp;quot;entry&amp;quot;&lt;br /&gt;
					},&lt;br /&gt;
					requiredOnCreate: true,&lt;br /&gt;
					linkType: &amp;quot;many&amp;quot;&lt;br /&gt;
				}&lt;br /&gt;
			},&lt;br /&gt;
		]&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* has can change to old, but old cannot change to has, create new entry if make new that links to same account&lt;br /&gt;
&lt;br /&gt;
=== inAccount ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
	inAccount: {&lt;br /&gt;
		storageResources: {&lt;br /&gt;
			myGraph: {&lt;br /&gt;
				storageType: &amp;quot;graph&amp;quot;,&lt;br /&gt;
				graphServerTag: &amp;quot;GraphHandler&amp;quot;			&lt;br /&gt;
			}&lt;br /&gt;
		},&lt;br /&gt;
		links: [&lt;br /&gt;
			{&lt;br /&gt;
				storageResourceTags: [&amp;quot;myGraph&amp;quot;],&lt;br /&gt;
				from: {&lt;br /&gt;
					objType: {&lt;br /&gt;
						serviceTag: &amp;quot;Entry&amp;quot;,&lt;br /&gt;
						objectType: &amp;quot;entry&amp;quot;&lt;br /&gt;
					},&lt;br /&gt;
					requiredOnCreate: true,&lt;br /&gt;
					linkType: &amp;quot;many&amp;quot;&lt;br /&gt;
				},&lt;br /&gt;
				to: {&lt;br /&gt;
					objType: {&lt;br /&gt;
						serviceTag: &amp;quot;AccountManager&amp;quot;,&lt;br /&gt;
						objectType: &amp;quot;account&amp;quot;&lt;br /&gt;
					},&lt;br /&gt;
					linkType: &amp;quot;one&amp;quot;&lt;br /&gt;
				}&lt;br /&gt;
			},&lt;br /&gt;
		]&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Working documents =&lt;br /&gt;
&lt;br /&gt;
[[:Category:Working_documents - Entry| Entry]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Backend services| Entry]]&lt;/div&gt;</summary>
		<author><name>Mint</name></author>
	</entry>
	<entry>
		<id>https://izara.io/wiki/index.php?title=Service_-_CommerceAccounting_Purchase&amp;diff=4461</id>
		<title>Service - CommerceAccounting Purchase</title>
		<link rel="alternate" type="text/html" href="https://izara.io/wiki/index.php?title=Service_-_CommerceAccounting_Purchase&amp;diff=4461"/>
		<updated>2026-06-10T08:37:04Z</updated>

		<summary type="html">&lt;p&gt;Mint: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Overview =&lt;br /&gt;
&lt;br /&gt;
Handle links between purchases and Accounting records.&lt;br /&gt;
&lt;br /&gt;
= Repository =&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
= Object Schemas =&lt;br /&gt;
; Additional Information: [[Per Service Schemas]]&lt;br /&gt;
&lt;br /&gt;
== comAccPurchaseLink ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
	objectType: &amp;quot;comAccPurchaseLink&amp;quot;,&lt;br /&gt;
	canDelete: false,&lt;br /&gt;
	addOnDataStructure: [],&lt;br /&gt;
	storageResources: {&lt;br /&gt;
		&amp;quot;dynamo&amp;quot;: {&lt;br /&gt;
			&amp;quot;storageType&amp;quot;: &amp;quot;dynamoDB&amp;quot;,&lt;br /&gt;
			&amp;quot;tableName&amp;quot;: &amp;quot;comAccPurchaseLink&amp;quot;,&lt;br /&gt;
		}&lt;br /&gt;
    },&lt;br /&gt;
    fieldNames: {&lt;br /&gt;
		// businessId,&lt;br /&gt;
		// accountLinkTag // type of link: inputVAT|salesTax|vatTax..&lt;br /&gt;
		// accountId&lt;br /&gt;
    },&lt;br /&gt;
    identifiers: [&lt;br /&gt;
		{&lt;br /&gt;
			type: &amp;quot;partitionKey&amp;quot;,&lt;br /&gt;
			fieldName: &amp;quot;businessId&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
		{&lt;br /&gt;
			type: &amp;quot;sortKey&amp;quot;,&lt;br /&gt;
			fieldName: &amp;quot;accountLinkTag&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
    ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* sets which Accounting accountId journal entries are added to&lt;br /&gt;
&lt;br /&gt;
== comAccPurchase ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
	objectType: &amp;quot;comAccPurchase&amp;quot;,&lt;br /&gt;
	canDelete: false,	&lt;br /&gt;
    addOnDataStructure: [],&lt;br /&gt;
	storageResources: {&lt;br /&gt;
		&amp;quot;dynamo&amp;quot;: {&lt;br /&gt;
			&amp;quot;storageType&amp;quot;: &amp;quot;dynamoDB&amp;quot;,&lt;br /&gt;
			&amp;quot;tableName&amp;quot;: &amp;quot;comAccPurchase&amp;quot;,&lt;br /&gt;
		}&lt;br /&gt;
    },&lt;br /&gt;
    fieldNames: {&lt;br /&gt;
		// businessId,&lt;br /&gt;
		// purchaseId,&lt;br /&gt;
		journalId: {&lt;br /&gt;
			type: &amp;quot;string&amp;quot;,&lt;br /&gt;
			optionalOnCreate: true,&lt;br /&gt;
			canUpdate: true,&lt;br /&gt;
			storageResourceTags: [&amp;quot;dynamo&amp;quot;],&lt;br /&gt;
		},&lt;br /&gt;
&lt;br /&gt;
    },&lt;br /&gt;
    identifiers: [&lt;br /&gt;
		{&lt;br /&gt;
			type: &amp;quot;partitionKey&amp;quot;,&lt;br /&gt;
			fieldName: &amp;quot;businessId&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
		{&lt;br /&gt;
			type: &amp;quot;sortKey&amp;quot;,&lt;br /&gt;
			fieldName: &amp;quot;purchaseId&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
    ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== comAccPurchaseLineItem ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
	objectType: &amp;quot;comAccPurchaseLineItem&amp;quot;,&lt;br /&gt;
	canDelete: false,&lt;br /&gt;
	addOnDataStructure: [],&lt;br /&gt;
	storageResources: {&lt;br /&gt;
		&amp;quot;dynamo&amp;quot;: {&lt;br /&gt;
			&amp;quot;storageType&amp;quot;: &amp;quot;dynamoDB&amp;quot;,&lt;br /&gt;
			&amp;quot;tableName&amp;quot;: &amp;quot;comAccPurchaseLineItem&amp;quot;,&lt;br /&gt;
		}&lt;br /&gt;
    },&lt;br /&gt;
    fieldNames: {&lt;br /&gt;
		// purchaseId,&lt;br /&gt;
		// purchaseLineItemId,&lt;br /&gt;
		// accountId&lt;br /&gt;
		// lineItemQuantity&lt;br /&gt;
		// lineItemUnitPricelineItemUnitPrice&lt;br /&gt;
		// entryId // not sure want to record because multiple lineItems might be in the same entryId&lt;br /&gt;
    },&lt;br /&gt;
    identifiers: [&lt;br /&gt;
		{&lt;br /&gt;
			type: &amp;quot;partitionKey&amp;quot;,&lt;br /&gt;
			fieldName: &amp;quot;purchaseId&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		{&lt;br /&gt;
			type: &amp;quot;sortKey&amp;quot;,&lt;br /&gt;
			fieldName: &amp;quot;purchaseLineItemId&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
    ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* This table might not be needed becasue we do not create a journal entry per line item, we make a compound journal entry per purchase&lt;br /&gt;
* Keep it for now so we can reconcile Commerce data matches ComAcc data&lt;br /&gt;
&lt;br /&gt;
== Relationships ==&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
= flowSchemas =&lt;br /&gt;
&lt;br /&gt;
== createPurchase ==&lt;br /&gt;
&lt;br /&gt;
* when creating a purchase, iterate purchaseLineItems to decide which journal entries are created&lt;br /&gt;
* accountsPayable accountId comes from [[Service - CommerceAccounting Vendor]]&lt;br /&gt;
* each purchaseLineItem checks it&#039;s type then finds accountId from coresponding comAcc service&lt;br /&gt;
&lt;br /&gt;
=== Example request param from Commerce ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
	belongToIdentifiers: {&lt;br /&gt;
	  businessId: &amp;quot;xxx&amp;quot;&lt;br /&gt;
	},&lt;br /&gt;
	purchaseId: &amp;quot;&amp;quot;,&lt;br /&gt;
	vendorId: &amp;quot;&amp;quot;,&lt;br /&gt;
    timestamp: 1111111,&lt;br /&gt;
	purchaseCurrencyId: &amp;quot;&amp;quot;,&lt;br /&gt;
	inventoryLocationId: &amp;quot;&amp;quot;, // required if have any inventory/?assets&lt;br /&gt;
	purchaseLineItems: {&lt;br /&gt;
		{purchaseLineItemId}: {&lt;br /&gt;
&lt;br /&gt;
            inventoryId: &amp;quot;&amp;quot;,&lt;br /&gt;
            inventoryTemplateId: &amp;quot;&amp;quot;,&lt;br /&gt;
            // or&lt;br /&gt;
            expenseId: &amp;quot;&amp;quot;,&lt;br /&gt;
            // or&lt;br /&gt;
            servicesId: &amp;quot;&amp;quot;,&lt;br /&gt;
            servicesTemplateId: &amp;quot;&amp;quot;,&lt;br /&gt;
            // or&lt;br /&gt;
            freightInId: &amp;quot;&amp;quot;,&lt;br /&gt;
            // or&lt;br /&gt;
&lt;br /&gt;
            otherPurchaseItemId: &amp;quot;&amp;quot;,&lt;br /&gt;
            &lt;br /&gt;
&lt;br /&gt;
			type: &amp;quot;&amp;quot;, // inventory|expense|services|freight|salesTax|vatTax|other&lt;br /&gt;
			subType: &amp;quot;&amp;quot;, // inventory: goods|intangibleGoods|rawMaterial|asset|intangibleAsset, expense: pointInTime|overTime, services: pointInTime|overTime, freight: standard, other: standard&lt;br /&gt;
&lt;br /&gt;
			lineItemQuantity: 1,&lt;br /&gt;
			lineItemUnitPrice: &amp;quot;2.00&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		//...&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== updatePurchase ==&lt;br /&gt;
&lt;br /&gt;
* make adjustment to journal entries when purchaseLineItemId changes&lt;br /&gt;
* handle removal of purchase/journal entries, or creation of new entries&lt;br /&gt;
* basically re-calculate all entries and check against existing&lt;br /&gt;
* each journalId must check Accounting that it&#039;s period/s are not locked, if locked return error, cannot make update&lt;br /&gt;
&lt;br /&gt;
= Working documents =&lt;br /&gt;
&lt;br /&gt;
[[:Category:Working_documents - CommerceAccounting Purchase| CommerceAccounting Purchase]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Backend services| CommerceAccounting Purchase]]&lt;/div&gt;</summary>
		<author><name>Mint</name></author>
	</entry>
	<entry>
		<id>https://izara.io/wiki/index.php?title=Service_-_Entry&amp;diff=4460</id>
		<title>Service - Entry</title>
		<link rel="alternate" type="text/html" href="https://izara.io/wiki/index.php?title=Service_-_Entry&amp;diff=4460"/>
		<updated>2026-06-10T04:53:47Z</updated>

		<summary type="html">&lt;p&gt;Mint: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Overview =&lt;br /&gt;
&lt;br /&gt;
A credit or debit entry linking between a journal entry and an account.&lt;br /&gt;
&lt;br /&gt;
= Repository =&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
= Object Schemas =&lt;br /&gt;
; Additional Information: [[Per Service Schemas]]&lt;br /&gt;
&lt;br /&gt;
== entry ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
	objectType: &amp;quot;entry&amp;quot;,&lt;br /&gt;
	canDelete: false,&lt;br /&gt;
	belongTo: {&lt;br /&gt;
		serviceTag: &amp;quot;Organization&amp;quot;,&lt;br /&gt;
		objectType: &amp;quot;organization&amp;quot;&lt;br /&gt;
	},&lt;br /&gt;
	addOnDataStructure: [],&lt;br /&gt;
	storageResources: {&lt;br /&gt;
		myGraph: {&lt;br /&gt;
			storageType: &amp;quot;graph&amp;quot;,&lt;br /&gt;
			graphServerTag: &amp;quot;GraphHandler&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;dynamo&amp;quot;: {&lt;br /&gt;
		  &amp;quot;storageType&amp;quot;: &amp;quot;dynamoDB&amp;quot;,&lt;br /&gt;
		  &amp;quot;tableName&amp;quot;: &amp;quot;entry&amp;quot;,&lt;br /&gt;
		}  &lt;br /&gt;
    },&lt;br /&gt;
    fieldNames: {&lt;br /&gt;
		entryId: {&lt;br /&gt;
			type: &amp;quot;string&amp;quot;,&lt;br /&gt;
			randomOnCreate: true,&lt;br /&gt;
			storageResourceTags: [&#039;myGraph&#039;,&#039;dynamo&#039;]&lt;br /&gt;
		},&lt;br /&gt;
        amount: {&lt;br /&gt;
            type: &amp;quot;numeric&amp;quot;,&lt;br /&gt;
			requiredOnCreate: true,&lt;br /&gt;
			storageResourceTags: [&#039;myGraph&#039;,&#039;dynamo&#039;]&lt;br /&gt;
        },&lt;br /&gt;
		functionalCurrencyAmount: {&lt;br /&gt;
			type: &amp;quot;currencyValue&amp;quot;,&lt;br /&gt;
			storageResourceTags: [&#039;myGraph&#039;]&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
    },&lt;br /&gt;
    identifiers: [&lt;br /&gt;
		{&lt;br /&gt;
			type: &amp;quot;identifier&amp;quot;,&lt;br /&gt;
			fieldName: &amp;quot;entryId&amp;quot;&lt;br /&gt;
		}&lt;br /&gt;
    ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* accountingStatus: when a period is being closed we set all entries to processing, then once the return is completed set to locked&lt;br /&gt;
* when beginning process of an entry, maybe trigger ComAcc plugin to check whether journalId can be locked, for example if it is connected to a sale and the sale is in saleCommitted=working/updateWorking cannot be locked&lt;br /&gt;
* when processing or locked entries cannot be changed (journals cannot be changed if either of the entries on each side are processing or locked&lt;br /&gt;
* maybe the journal also has an accountingStatus, so easy to confirm cannot make changes, or perhaps only journals because entries cannot be changed directly&lt;br /&gt;
&lt;br /&gt;
== Relationships ==&lt;br /&gt;
&lt;br /&gt;
=== hasEntry ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
	hasEntry: {&lt;br /&gt;
		storageResources: {&lt;br /&gt;
			myGraph: {&lt;br /&gt;
				storageType: &amp;quot;graph&amp;quot;,&lt;br /&gt;
				graphServerTag: &amp;quot;GraphHandler&amp;quot;			&lt;br /&gt;
			}&lt;br /&gt;
		},&lt;br /&gt;
		links: [&lt;br /&gt;
			{&lt;br /&gt;
				storageResourceTags: [&amp;quot;myGraph&amp;quot;],&lt;br /&gt;
				from: {&lt;br /&gt;
					objType: {&lt;br /&gt;
						serviceTag: &amp;quot;Journal&amp;quot;,&lt;br /&gt;
						objectType: &amp;quot;journal&amp;quot;&lt;br /&gt;
					},&lt;br /&gt;
					linkType: &amp;quot;one&amp;quot;,&lt;br /&gt;
				},&lt;br /&gt;
				to: {&lt;br /&gt;
					objType: {&lt;br /&gt;
						serviceTag: &amp;quot;Entry&amp;quot;,&lt;br /&gt;
						objectType: &amp;quot;entry&amp;quot;&lt;br /&gt;
					},&lt;br /&gt;
					requiredOnCreate: true,&lt;br /&gt;
					linkType: &amp;quot;many&amp;quot;&lt;br /&gt;
				}&lt;br /&gt;
			},&lt;br /&gt;
		]&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== hasEntry ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
	hasEntry: {&lt;br /&gt;
		storageResources: {&lt;br /&gt;
			myGraph: {&lt;br /&gt;
				storageType: &amp;quot;graph&amp;quot;,&lt;br /&gt;
				graphServerTag: &amp;quot;GraphHandler&amp;quot;			&lt;br /&gt;
			}&lt;br /&gt;
		},&lt;br /&gt;
		links: [&lt;br /&gt;
			{&lt;br /&gt;
				storageResourceTags: [&amp;quot;myGraph&amp;quot;],&lt;br /&gt;
				from: {&lt;br /&gt;
					objType: {&lt;br /&gt;
						serviceTag: &amp;quot;Journal&amp;quot;,&lt;br /&gt;
						objectType: &amp;quot;journal&amp;quot;&lt;br /&gt;
					},&lt;br /&gt;
					linkType: &amp;quot;one&amp;quot;,&lt;br /&gt;
				},&lt;br /&gt;
				to: {&lt;br /&gt;
					objType: {&lt;br /&gt;
						serviceTag: &amp;quot;Entry&amp;quot;,&lt;br /&gt;
						objectType: &amp;quot;entry&amp;quot;&lt;br /&gt;
					},&lt;br /&gt;
					requiredOnCreate: true,&lt;br /&gt;
					linkType: &amp;quot;many&amp;quot;&lt;br /&gt;
				}&lt;br /&gt;
			},&lt;br /&gt;
		]&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== oldEntry ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
	oldEntry: {&lt;br /&gt;
		storageResources: {&lt;br /&gt;
			myGraph: {&lt;br /&gt;
				storageType: &amp;quot;graph&amp;quot;,&lt;br /&gt;
				graphServerTag: &amp;quot;GraphHandler&amp;quot;			&lt;br /&gt;
			}&lt;br /&gt;
		},&lt;br /&gt;
		links: [&lt;br /&gt;
			{&lt;br /&gt;
				storageResourceTags: [&amp;quot;myGraph&amp;quot;],&lt;br /&gt;
				from: {&lt;br /&gt;
					objType: {&lt;br /&gt;
						serviceTag: &amp;quot;Journal&amp;quot;,&lt;br /&gt;
						objectType: &amp;quot;journal&amp;quot;&lt;br /&gt;
					},&lt;br /&gt;
					linkType: &amp;quot;one&amp;quot;,&lt;br /&gt;
				},&lt;br /&gt;
				to: {&lt;br /&gt;
					objType: {&lt;br /&gt;
						serviceTag: &amp;quot;Entry&amp;quot;,&lt;br /&gt;
						objectType: &amp;quot;entry&amp;quot;&lt;br /&gt;
					},&lt;br /&gt;
					requiredOnCreate: true,&lt;br /&gt;
					linkType: &amp;quot;many&amp;quot;&lt;br /&gt;
				}&lt;br /&gt;
			},&lt;br /&gt;
		]&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* has can change to old, but old cannot change to has, create new entry if make new that links to same account&lt;br /&gt;
&lt;br /&gt;
=== inAccount ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
	inAccount: {&lt;br /&gt;
		storageResources: {&lt;br /&gt;
			myGraph: {&lt;br /&gt;
				storageType: &amp;quot;graph&amp;quot;,&lt;br /&gt;
				graphServerTag: &amp;quot;GraphHandler&amp;quot;			&lt;br /&gt;
			}&lt;br /&gt;
		},&lt;br /&gt;
		links: [&lt;br /&gt;
			{&lt;br /&gt;
				storageResourceTags: [&amp;quot;myGraph&amp;quot;],&lt;br /&gt;
				from: {&lt;br /&gt;
					objType: {&lt;br /&gt;
						serviceTag: &amp;quot;Entry&amp;quot;,&lt;br /&gt;
						objectType: &amp;quot;entry&amp;quot;&lt;br /&gt;
					},&lt;br /&gt;
					requiredOnCreate: true,&lt;br /&gt;
					linkType: &amp;quot;many&amp;quot;&lt;br /&gt;
				},&lt;br /&gt;
				to: {&lt;br /&gt;
					objType: {&lt;br /&gt;
						serviceTag: &amp;quot;AccountManager&amp;quot;,&lt;br /&gt;
						objectType: &amp;quot;account&amp;quot;&lt;br /&gt;
					},&lt;br /&gt;
					linkType: &amp;quot;one&amp;quot;&lt;br /&gt;
				}&lt;br /&gt;
			},&lt;br /&gt;
		]&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Working documents =&lt;br /&gt;
&lt;br /&gt;
[[:Category:Working_documents - Entry| Entry]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Backend services| Entry]]&lt;/div&gt;</summary>
		<author><name>Mint</name></author>
	</entry>
	<entry>
		<id>https://izara.io/wiki/index.php?title=2025-11-20_IntegrationTest&amp;diff=4456</id>
		<title>2025-11-20 IntegrationTest</title>
		<link rel="alternate" type="text/html" href="https://izara.io/wiki/index.php?title=2025-11-20_IntegrationTest&amp;diff=4456"/>
		<updated>2026-06-05T03:36:51Z</updated>

		<summary type="html">&lt;p&gt;Mint: /* Table test */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Reference:&lt;br /&gt;
&lt;br /&gt;
*[[2020-10-01 - Integration Test Config - Functions|IntegrationtestConfig]]&lt;br /&gt;
*[[2020-10-01 - Integration Testing - Lambda Functions|Integrationtesting]]&lt;br /&gt;
*[[2025-02-20 - Integration Test examples|Example]]&lt;br /&gt;
&lt;br /&gt;
= File extension =&lt;br /&gt;
&lt;br /&gt;
uploadS3: &amp;quot;.json&amp;quot;&lt;br /&gt;
integrationtestConfig: &amp;quot;.js&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=TestRecord=&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JSON&amp;quot;&amp;gt;&lt;br /&gt;
[&lt;br /&gt;
  {&lt;br /&gt;
    integrationTestTag: &amp;quot;Integrationtest_xx&amp;quot;,&lt;br /&gt;
    testStartedTimestamp: 111111111, // start time&lt;br /&gt;
    bucketName: &amp;quot;integrationtest-config-us-east-2&amp;quot;,&lt;br /&gt;
    lastUpdateUniqueRequestId: &amp;quot;sssss&amp;quot;, //_izContext.uniqueRequestId protacts race coditionn dynamodb&lt;br /&gt;
    testStatus: &amp;quot;passed&amp;quot;,//failed,processing,passed&lt;br /&gt;
    testCompleteTimestamp: 1111113, // all test finish&lt;br /&gt;
    stages: [&lt;br /&gt;
      {&lt;br /&gt;
        stageConfig: {&lt;br /&gt;
          //straight copy of this stage from integration test config&lt;br /&gt;
          inputEventTag: &amp;quot;xx&amp;quot;,&lt;br /&gt;
          inputEventConfig: {//event input&lt;br /&gt;
          },&lt;br /&gt;
          outputEventTag: &amp;quot;output_xx&amp;quot;,&lt;br /&gt;
          outputEventConfig: {//event out put&lt;br /&gt;
          },&lt;br /&gt;
          resourceName: &amp;quot;ComplexfilterTestProcessComplexfilter&amp;quot;,// function name&lt;br /&gt;
          resourceType: &amp;quot;Lambda&amp;quot;, // function name&lt;br /&gt;
          serviceTag: &amp;quot;Complexfilter&amp;quot;,// (initeate sqs)&lt;br /&gt;
          snsServiceName: &amp;quot;Complexfilter&amp;quot;,// (initeate sqs)&lt;br /&gt;
          snsTopic: &amp;quot;PorcessComplexfilter_In&amp;quot;// (initeate sqs)&lt;br /&gt;
&lt;br /&gt;
        },&lt;br /&gt;
        stageStatus: &amp;quot;waiting&amp;quot;, //waiting|passed|failed,&lt;br /&gt;
        stageFinishedTimestamp: 111111111,// time that all tests finished and testRecord.stages.{stageKey}.stageStatus updated&lt;br /&gt;
        stageResults: {&lt;br /&gt;
          //results at the point of entering the resource (eg a Lambda function is invoked)&lt;br /&gt;
          inputResult: {&lt;br /&gt;
            resultTimestamp: 111111111,//{time result saved},&lt;br /&gt;
            resultStatus: &amp;quot;passed&amp;quot;,//passed|failed,&lt;br /&gt;
            requestParams: {//event input&lt;br /&gt;
            }&lt;br /&gt;
          },&lt;br /&gt;
          //results at the point of returning from the resource (eg a Lambda function returns)&lt;br /&gt;
          outputResult: {&lt;br /&gt;
            resultTimestamp: 111111111,//{time result saved},&lt;br /&gt;
            resultStatus: &amp;quot;passed&amp;quot;,//passed|failed,&lt;br /&gt;
            requestParams: {//event input&lt;br /&gt;
            }&lt;br /&gt;
          },&lt;br /&gt;
          //results at the point of invoking an external resource (eg the tested Lambda function is invoking another Lambda function)&lt;br /&gt;
          invokes: {&lt;br /&gt;
            &amp;quot;serviceName_resourceType_resourceName_inputEventTag &amp;quot;: {&lt;br /&gt;
              invokeTimestamp: 111111111,//{ time result saved },&lt;br /&gt;
              resultTimestamp: 111111112,//{ time result saved },&lt;br /&gt;
              resultStatus: &amp;quot;passed&amp;quot;,//passed | failed,&lt;br /&gt;
              invokeParams: {},//{event invoke input config }&lt;br /&gt;
              requestParams: {}// event invoke input request&lt;br /&gt;
            },&lt;br /&gt;
          },&lt;br /&gt;
          dynamodbResults: [&lt;br /&gt;
            {&lt;br /&gt;
              indexOfDynamodbOutput: 0,&lt;br /&gt;
              requestParams,&lt;br /&gt;
              resultStatus: &amp;quot;passed&amp;quot;,//&lt;br /&gt;
              resultTimestamp: 22222&lt;br /&gt;
            }]&lt;br /&gt;
&lt;br /&gt;
        },&lt;br /&gt;
        stageErrors: [&lt;br /&gt;
          //misc errors encountered&lt;br /&gt;
        ]&lt;br /&gt;
      }]&lt;br /&gt;
&lt;br /&gt;
  }&lt;br /&gt;
]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Seed Data=&lt;br /&gt;
integrationtest manager seed date 2 process&lt;br /&gt;
&lt;br /&gt;
=== Main Seed Data===&lt;br /&gt;
:Save file in s3 (in &#039;&#039;&#039;buckname&#039;&#039;&#039; :integrationtest-config-us-east-2, &#039;&#039;&#039;folder&#039;&#039;&#039;:seedData_integrationTest).For other dev use service,If a developer wants to add more for other important testing purposes.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;How to use:&#039;&#039;&#039;&lt;br /&gt;
#Add it from the s3 bucket at this point&lt;br /&gt;
#Run batch refreshSeedData [[Developer guide for making Integration Tests#Bash script|batch RefreshSeedData]]&lt;br /&gt;
&#039;&#039;&#039;Logic&#039;&#039;&#039;:Process by storage resouse (graph or dynamodb)&lt;br /&gt;
:To clean up the seed data in the table after it creates seed data form service deploy and pulls seed data from s3.&lt;br /&gt;
&lt;br /&gt;
=== Refresh Seed Data ===&lt;br /&gt;
:ProcessRefreshSeedData use seedDataTag for create data environment of &#039;&#039;&#039;test&#039;&#039;&#039; and can be refresh seeddata re-test agian.&lt;br /&gt;
:&#039;&#039;&#039;canbe share&#039;&#039;&#039; seed data for other test by seed data tag.&lt;br /&gt;
&#039;&#039;&#039;How to use:&#039;&#039;&#039;&lt;br /&gt;
:Save file in s3 (for other dav keep in floder dev name) or testConfig/seedData_config(for admin)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Folder&#039;&#039;&#039;&lt;br /&gt;
*dynamoDBSeedDataTags.json&lt;br /&gt;
*graphSeedDataTags.json&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Example&#039;&#039;&#039;&lt;br /&gt;
==== dynamoDBSeedDataTags ====&lt;br /&gt;
:If set tag in this setting integrationtest is generate seed data. in storage resource dynammodb.&lt;br /&gt;
Example&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;seedDynamodb_abc_ver2&amp;quot;: [ // seedDataTag&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;tableName&amp;quot;: &amp;quot;DelivMethodSTDTestLogicalResultsData&amp;quot;,  // servcieTag+stage+tablename&lt;br /&gt;
      &amp;quot;partitionKey&amp;quot;: &amp;quot;logicalResultId&amp;quot;,&lt;br /&gt;
      &amp;quot;sortKey&amp;quot;: &amp;quot;identifiersId&amp;quot;,&lt;br /&gt;
      &amp;quot;datas&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;logicalResultId&amp;quot;: &amp;quot;eeeeeeeeee4&amp;quot;,&lt;br /&gt;
          &amp;quot;identifiersId&amp;quot;: &amp;quot;lllll123456&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;logicalResultId&amp;quot;: &amp;quot;eeeeeeeeee4&amp;quot;,&lt;br /&gt;
          &amp;quot;identifiersId&amp;quot;: &amp;quot;lllll777777&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
      ]&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;tableName&amp;quot;: &amp;quot;MLocationsTestFloatingRelationships&amp;quot;,// servcieTag+stage+tablename&lt;br /&gt;
      &amp;quot;partitionKey&amp;quot;: &amp;quot;importBatchId&amp;quot;,&lt;br /&gt;
      &amp;quot;sortKey&amp;quot;: &amp;quot;identifierRelationshipsId&amp;quot;,&lt;br /&gt;
      &amp;quot;datas&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;importBatchId&amp;quot;: &amp;quot;2-uuuuuuuuuuuuuu&amp;quot;,&lt;br /&gt;
          &amp;quot;identifierRelationshipsId&amp;quot;: &amp;quot;lllll123456&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;importBatchId&amp;quot;: &amp;quot;2-uuuuuuuuuuuuuu&amp;quot;,&lt;br /&gt;
          &amp;quot;identifierRelationshipsId&amp;quot;: &amp;quot;lllll777777&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;importBatchId&amp;quot;: &amp;quot;2-uuuuuuuuuuuuuu&amp;quot;,&lt;br /&gt;
          &amp;quot;identifierRelationshipsId&amp;quot;: &amp;quot;lllll99999999&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
      ]&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;tableName&amp;quot;: &amp;quot;MLocationsTestFindDataMain&amp;quot;,&lt;br /&gt;
      &amp;quot;partitionKey&amp;quot;: &amp;quot;findDataId&amp;quot;,&lt;br /&gt;
      &amp;quot;datas&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;findDataId&amp;quot;: &amp;quot;111111&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;findDataId&amp;quot;: &amp;quot;22222&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;findDataId&amp;quot;: &amp;quot;333333&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
      ]&lt;br /&gt;
    }&lt;br /&gt;
  ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== graphSeedDataTags ====&lt;br /&gt;
:If set tag in this setting integrationtest is generate seed data. in storage resource graphHanler.&lt;br /&gt;
Example&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;seedData_testTag_GG&amp;quot;: [ // seedDataTag&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;nodes&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;nodeLabels&amp;quot;: [&lt;br /&gt;
            &amp;quot;SellOfferPlan_sellOfferPlanDeliveryMethodLink&amp;quot;&lt;br /&gt;
          ],&lt;br /&gt;
          &amp;quot;objectDetail&amp;quot;: {&lt;br /&gt;
            &amp;quot;identifiers&amp;quot;: {&lt;br /&gt;
              &amp;quot;sellOfferPlanDeliveryMethodLinkId&amp;quot;: &amp;quot;minttestrefreshSeedData_01&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;fields&amp;quot;: {&lt;br /&gt;
              &amp;quot;productId&amp;quot;: &amp;quot;ddddd&amp;quot;,&lt;br /&gt;
              &amp;quot;price&amp;quot;: 9999&lt;br /&gt;
            }&lt;br /&gt;
          }&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;nodeLabels&amp;quot;: [&lt;br /&gt;
            &amp;quot;servcieMintTest_shoppingMall&amp;quot;&lt;br /&gt;
          ],&lt;br /&gt;
          &amp;quot;objectDetail&amp;quot;: {&lt;br /&gt;
            &amp;quot;identifiers&amp;quot;: {&lt;br /&gt;
              &amp;quot;shoppingMallId&amp;quot;: &amp;quot;minttestrefreshSeedData_shoppingMallId&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;fields&amp;quot;: {&lt;br /&gt;
              &amp;quot;name&amp;quot;: &amp;quot;hotpot-man&amp;quot;,&lt;br /&gt;
              &amp;quot;totalPrice&amp;quot;: 500&lt;br /&gt;
            }&lt;br /&gt;
          }&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;nodeLabels&amp;quot;: [&lt;br /&gt;
            &amp;quot;servcieMintTest_shoppingMallCalculateSetting&amp;quot;&lt;br /&gt;
          ],&lt;br /&gt;
          &amp;quot;objectDetail&amp;quot;: {&lt;br /&gt;
            &amp;quot;identifiers&amp;quot;: {&lt;br /&gt;
              &amp;quot;versionedDataId&amp;quot;: &amp;quot;minttestrefreshSeedData_versionedDataId&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;fields&amp;quot;: {&lt;br /&gt;
              &amp;quot;addToCalculatedValuePerOrder&amp;quot;: 10,&lt;br /&gt;
              &amp;quot;addToRateTableValuePerOrder&amp;quot;: 77&lt;br /&gt;
            }&lt;br /&gt;
          }&lt;br /&gt;
        }&lt;br /&gt;
      ],&lt;br /&gt;
      &amp;quot;relationships&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;fromObject&amp;quot;: {&lt;br /&gt;
            &amp;quot;nodeLabel&amp;quot;: &amp;quot;SellOfferPlan_sellOfferPlanDeliveryMethodLink&amp;quot;,&lt;br /&gt;
            &amp;quot;identifiers&amp;quot;: {&lt;br /&gt;
              &amp;quot;sellOfferPlanDeliveryMethodLinkId&amp;quot;: &amp;quot;minttestrefreshSeedData_01&amp;quot;&lt;br /&gt;
            }&lt;br /&gt;
          },&lt;br /&gt;
          &amp;quot;toObject&amp;quot;: {&lt;br /&gt;
            &amp;quot;nodeLabel&amp;quot;: &amp;quot;servcieMintTest_shoppingMall&amp;quot;,&lt;br /&gt;
            &amp;quot;identifiers&amp;quot;: {&lt;br /&gt;
              &amp;quot;shoppingMallId&amp;quot;: &amp;quot;minttestrefreshSeedData_shoppingMallId&amp;quot;&lt;br /&gt;
            }&lt;br /&gt;
          },&lt;br /&gt;
          &amp;quot;relationships&amp;quot;: [&lt;br /&gt;
            {&lt;br /&gt;
              &amp;quot;relTypeConcat&amp;quot;: &amp;quot;SellOfferPlan_hasCCCCCCC&amp;quot;,&lt;br /&gt;
              &amp;quot;relId&amp;quot;: &amp;quot;uuid-4s56df74s9df79w-w6de4f5w689ef&amp;quot;&lt;br /&gt;
            }&lt;br /&gt;
          ]&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;fromObject&amp;quot;: {&lt;br /&gt;
            &amp;quot;nodeLabel&amp;quot;: &amp;quot;servcieMintTest_shoppingMall&amp;quot;,&lt;br /&gt;
            &amp;quot;identifiers&amp;quot;: {&lt;br /&gt;
              &amp;quot;shoppingMallId&amp;quot;: &amp;quot;minttestrefreshSeedData_shoppingMallId&amp;quot;&lt;br /&gt;
            }&lt;br /&gt;
          },&lt;br /&gt;
          &amp;quot;toObject&amp;quot;: {&lt;br /&gt;
            &amp;quot;nodeLabel&amp;quot;: &amp;quot;servcieMintTest_shoppingMallCalculateSetting&amp;quot;,&lt;br /&gt;
            &amp;quot;identifiers&amp;quot;: {&lt;br /&gt;
              &amp;quot;versionedDataId&amp;quot;: &amp;quot;minttestrefreshSeedData_versionedDataId&amp;quot;&lt;br /&gt;
            }&lt;br /&gt;
          },&lt;br /&gt;
          &amp;quot;relationships&amp;quot;: [&lt;br /&gt;
            {&lt;br /&gt;
              &amp;quot;relTypeConcat&amp;quot;: &amp;quot;servcieMintTest_shoppingMall_currentShoppingMallCalculateSetting&amp;quot;,&lt;br /&gt;
              &amp;quot;relId&amp;quot;: &amp;quot;uuid-s122df5-s21df&amp;quot;,&lt;br /&gt;
              &amp;quot;relationshipProperty&amp;quot;: {&lt;br /&gt;
                &amp;quot;timeStamp&amp;quot;: 1234567879,&lt;br /&gt;
                &amp;quot;statusName&amp;quot;: true&lt;br /&gt;
              }&lt;br /&gt;
            },&lt;br /&gt;
            {&lt;br /&gt;
              &amp;quot;relTypeConcat&amp;quot;: &amp;quot;servcieMintTest_shoppingMall_hasShoppingMallCalculateSetting&amp;quot;,&lt;br /&gt;
              &amp;quot;relId&amp;quot;: &amp;quot;uuid-77777-99999&amp;quot;,&lt;br /&gt;
              &amp;quot;relationshipProperty&amp;quot;: {&lt;br /&gt;
                &amp;quot;statusName&amp;quot;: true&lt;br /&gt;
              }&lt;br /&gt;
            }&lt;br /&gt;
          ]&lt;br /&gt;
        }&lt;br /&gt;
      ]&lt;br /&gt;
    }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;seedData_testTag_ABC&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;objType&amp;quot;: {&lt;br /&gt;
        &amp;quot;objectType&amp;quot;: &amp;quot;productAttributeLink&amp;quot;,&lt;br /&gt;
        &amp;quot;serviceTag&amp;quot;: &amp;quot;ProductAttribute&amp;quot;&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;objInstanceFull&amp;quot;: {&lt;br /&gt;
        &amp;quot;identifiers&amp;quot;: {&lt;br /&gt;
          &amp;quot;productAttributeLinkId&amp;quot;: &amp;quot;f90b57ca8b2fe1a83459d57da038cf50fb6d40e6&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;fields&amp;quot;: {}&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;relationships&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;relType&amp;quot;: {&lt;br /&gt;
            &amp;quot;serviceTag&amp;quot;: &amp;quot;ProductAttribute&amp;quot;,&lt;br /&gt;
            &amp;quot;relationshipTag&amp;quot;: &amp;quot;hasProductAttributeLink&amp;quot;&lt;br /&gt;
          },&lt;br /&gt;
          &amp;quot;relationshipDirection&amp;quot;: &amp;quot;to&amp;quot;,&lt;br /&gt;
          &amp;quot;targetObjType&amp;quot;: {&lt;br /&gt;
            &amp;quot;serviceTag&amp;quot;: &amp;quot;ProductStandard&amp;quot;,&lt;br /&gt;
            &amp;quot;objectType&amp;quot;: &amp;quot;productStandard&amp;quot;&lt;br /&gt;
          },&lt;br /&gt;
          &amp;quot;targetIdentifiers&amp;quot;: {&lt;br /&gt;
            &amp;quot;productId&amp;quot;: &amp;quot;f526a367a2b66cb0f37ca61b6c43f419929f521d&amp;quot;&lt;br /&gt;
          },&lt;br /&gt;
          &amp;quot;relationshipProperties&amp;quot;: {}&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;relType&amp;quot;: {&lt;br /&gt;
            &amp;quot;serviceTag&amp;quot;: &amp;quot;ProductAttribute&amp;quot;,&lt;br /&gt;
            &amp;quot;relationshipTag&amp;quot;: &amp;quot;isProductAttribute&amp;quot;&lt;br /&gt;
          },&lt;br /&gt;
          &amp;quot;relationshipDirection&amp;quot;: &amp;quot;from&amp;quot;,&lt;br /&gt;
          &amp;quot;targetObjType&amp;quot;: {&lt;br /&gt;
            &amp;quot;serviceTag&amp;quot;: &amp;quot;ProductAttribute&amp;quot;,&lt;br /&gt;
            &amp;quot;objectType&amp;quot;: &amp;quot;productAttribute&amp;quot;&lt;br /&gt;
          },&lt;br /&gt;
          &amp;quot;targetIdentifiers&amp;quot;: {&lt;br /&gt;
            &amp;quot;productAttributeId&amp;quot;: &amp;quot;f4bf7a078071d54036656df544197ba638bc3a68&amp;quot;&lt;br /&gt;
          },&lt;br /&gt;
          &amp;quot;relationshipProperties&amp;quot;: {}&lt;br /&gt;
        }&lt;br /&gt;
      ]&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;objType&amp;quot;: {&lt;br /&gt;
        &amp;quot;objectType&amp;quot;: &amp;quot;productAttributeLink&amp;quot;,&lt;br /&gt;
        &amp;quot;serviceTag&amp;quot;: &amp;quot;ProductAttribute&amp;quot;&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;objInstanceFull&amp;quot;: {&lt;br /&gt;
        &amp;quot;identifiers&amp;quot;: {&lt;br /&gt;
          &amp;quot;productAttributeLinkId&amp;quot;: &amp;quot;f90b57ca8b2fe1a83459d57da038cf50fb6d40e6&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;fields&amp;quot;: {}&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;relationships&amp;quot;: []&lt;br /&gt;
    }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;seedData_testTag_LL&amp;quot;: []&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Cleaning Seed Data ===&lt;br /&gt;
:Delete seed data for set environment of &#039;&#039;&#039;test&#039;&#039;&#039;.&lt;br /&gt;
*cleaningeDynamoOneRecordsTags.json&lt;br /&gt;
*cleaningeDynamoManyRecordsTags.json&lt;br /&gt;
&lt;br /&gt;
====cleaningeDynamoOneRecordsTags====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;cleaningSeed_TestFindData_and_Education_case_invalid01&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;tableName&amp;quot;: &amp;quot;MLocationsTestFindDataMain&amp;quot;,&lt;br /&gt;
      &amp;quot;primaryKeys&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;findDataId&amp;quot;: &amp;quot;cleaning-1&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;findDataId&amp;quot;: &amp;quot;cleaning-2&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
      ]&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;tableName&amp;quot;: &amp;quot;MLocationsTestEducation&amp;quot;,&lt;br /&gt;
      &amp;quot;primaryKeys&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;studentId&amp;quot;: &amp;quot;cleaning-AA&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;studentId&amp;quot;: &amp;quot;cleaning-BB&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;studentId&amp;quot;: &amp;quot;cleaning-CC&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
      ]&lt;br /&gt;
    }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;cleaningSeed_TestMemberPersonnel_case_invalid01&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;tableName&amp;quot;: &amp;quot;MLocationsTestMemberPersonnel&amp;quot;,&lt;br /&gt;
      &amp;quot;primaryKeys&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;userId&amp;quot;: &amp;quot;namtan&amp;quot;,&lt;br /&gt;
          &amp;quot;passwordId&amp;quot;: &amp;quot;qqqww&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;userId&amp;quot;: &amp;quot;jack&amp;quot;,&lt;br /&gt;
          &amp;quot;passwordId&amp;quot;: &amp;quot;q1&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;userId&amp;quot;: &amp;quot;Momay&amp;quot;,&lt;br /&gt;
          &amp;quot;passwordId&amp;quot;: &amp;quot;ttr&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
      ]&lt;br /&gt;
    }&lt;br /&gt;
  ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== cleaningeDynamoManyRecordsTags ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;cleaningSeed_manyData_partitionKey_only_miss_sort&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;tableName&amp;quot;: &amp;quot;MLocationsTestMemberPersonnel&amp;quot;,&lt;br /&gt;
      &amp;quot;primaryKeys&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;userId&amp;quot;: &amp;quot;many-data&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
      ]&lt;br /&gt;
    }&lt;br /&gt;
  ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*logic query table MLocationsTestMemberPersonnel use primary Keys &amp;quot;userId&amp;quot; and then delete all data from primary Keys.&lt;br /&gt;
&lt;br /&gt;
=resources=&lt;br /&gt;
syntax is object&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{ &lt;br /&gt;
	&amp;quot;Lambda&amp;quot;:{&lt;br /&gt;
		&amp;quot;{FunctionNameHdrSqs}&amp;quot;:{ // FunctionNameHdrSqs is match resourceName in file tests&lt;br /&gt;
			&amp;quot;localLacation&amp;quot;:&amp;quot;/src/FunctionNameHdrSqs.js&amp;quot;,&lt;br /&gt;
			&amp;quot;localHandler&amp;quot;:&amp;quot;main&amp;quot;, &lt;br /&gt;
			&amp;quot;functionName&amp;quot;:&amp;quot;FunctionNameHdrSqs&amp;quot;	// FunctionName is function name match key of function.yml of servcie.&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;ProcessComplexFilterHdrSqs&amp;quot;:{ &lt;br /&gt;
			&amp;quot;localLacation&amp;quot;:&amp;quot;/src/ProcessComplexFilterHdrSqs.js&amp;quot;, &lt;br /&gt;
			&amp;quot;localHandler&amp;quot;:&amp;quot;main&amp;quot;, &lt;br /&gt;
			&amp;quot;functionName&amp;quot;:&amp;quot;ProcessComplexFilterHdrSqs&amp;quot; &lt;br /&gt;
		},&lt;br /&gt;
		... &lt;br /&gt;
	},&lt;br /&gt;
	&amp;quot;Dynamodb&amp;quot;: {&lt;br /&gt;
		&amp;quot;filterMain&amp;quot;:{ // match resourceName in file tests(dynamodbOutputEventIdentifiers)&lt;br /&gt;
			&amp;quot;tableName&amp;quot;:&amp;quot;filterMain&amp;quot; &lt;br /&gt;
		}, &lt;br /&gt;
		&amp;quot;tableNameBB&amp;quot;:{ &lt;br /&gt;
			&amp;quot;tableName&amp;quot;:&amp;quot;tableNameBB&amp;quot; &lt;br /&gt;
		},&lt;br /&gt;
		... &lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=events=&lt;br /&gt;
Syntax is object&lt;br /&gt;
==Syntax Name==&lt;br /&gt;
===FileName===&lt;br /&gt;
::Event_{inputEventTag}&lt;br /&gt;
&lt;br /&gt;
===eventTag===&lt;br /&gt;
#inputEventTag&lt;br /&gt;
#outputEventTag&lt;br /&gt;
#dynamodbTag&lt;br /&gt;
&lt;br /&gt;
*file events.js is have eventTag  (inputEventTag,outputEventTag,dynamodbTag)&lt;br /&gt;
**How to create name eventTag&lt;br /&gt;
***Example case : &amp;quot;test in service complexFilter functionname ProcessComplexFilter case element type is logical basic&amp;quot;.&lt;br /&gt;
::*&#039;&#039;&#039;inputEventTag&#039;&#039;&#039;&lt;br /&gt;
::::{serviceName}_{functionName}_{caseTest}&lt;br /&gt;
&#039;&#039;Conplexfilter_ProcessComplexFilter_Typelogical_basic&#039;&#039;&lt;br /&gt;
::*&#039;&#039;&#039;outputEventTag&#039;&#039;&#039;&lt;br /&gt;
::::output_{inputEventTag}&lt;br /&gt;
&#039;&#039;output_Conplexfilter_ProcessComplexFilter_Typelogical_basic&#039;&#039;&lt;br /&gt;
::*&#039;&#039;&#039;dynamodbTag&#039;&#039;&#039;&lt;br /&gt;
::::{inputEventTag}__Dynamodb__{&#039;&#039;&#039;action*&#039;&#039;&#039;}_{tableName} &lt;br /&gt;
&#039;&#039;Conplexfilter_ProcessComplexFilter_Typelogical_basic___Dynamodb__putItem_filterMain&#039;&#039;&lt;br /&gt;
: &amp;lt;u&amp;gt;&#039;&#039;&#039;{action}&#039;&#039;&#039; is only &#039;&#039;put&#039;&#039; or &#039;&#039;update&#039;&#039;, and in case of &#039;&#039;update&#039;&#039; must only test the last step of update &amp;lt;/u&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Syntax event===&lt;br /&gt;
====initiate by handlerServcie====&lt;br /&gt;
=====Sqs=====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
// An example input and output event of Sns&lt;br /&gt;
{&lt;br /&gt;
   &amp;quot;LambdaFunctionHdrSqs_input__pass&amp;quot;:{&lt;br /&gt;
      &amp;quot;properties&amp;quot;:{&lt;br /&gt;
         &amp;quot;propertyA&amp;quot;:{&lt;br /&gt;
            &amp;quot;value&amp;quot;:&amp;quot;valueProperty1&amp;quot;&lt;br /&gt;
         },&lt;br /&gt;
         &amp;quot;propertyB&amp;quot;:{&lt;br /&gt;
            &amp;quot;properties&amp;quot;:{&lt;br /&gt;
               &amp;quot;propertyB1&amp;quot;:{&lt;br /&gt;
                  &amp;quot;value&amp;quot;:&amp;quot;valuePropertyB1&amp;quot;&lt;br /&gt;
               }&lt;br /&gt;
            }&lt;br /&gt;
         },&lt;br /&gt;
         &amp;quot;propertyC&amp;quot;:{&lt;br /&gt;
            &amp;quot;eventValue&amp;quot;:[&lt;br /&gt;
               &amp;quot;valuePropertyC1&amp;quot;,&lt;br /&gt;
               &amp;quot;valuePropertyC2&amp;quot;,&lt;br /&gt;
               &amp;quot;valuePropertyC3&amp;quot;&lt;br /&gt;
            ]&lt;br /&gt;
         }&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;snsSqsTrigger&amp;quot;:true,&lt;br /&gt;
      &amp;quot;messageAttributes&amp;quot;:{&lt;br /&gt;
            &amp;quot;msgTag&amp;quot;:{&lt;br /&gt;
               &amp;quot;value&amp;quot;:&amp;quot;msgTag&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;propertyD&amp;quot;:{&lt;br /&gt;
               &amp;quot;value&amp;quot;:&amp;quot;valuePropertyD&amp;quot;&lt;br /&gt;
            }&lt;br /&gt;
      }&lt;br /&gt;
   },&lt;br /&gt;
   {&lt;br /&gt;
      &amp;quot;output_LambdaFunctionHdrSqs_pass&amp;quot;:{&lt;br /&gt;
         &amp;quot;properties&amp;quot;:{&lt;br /&gt;
            &amp;quot;propertyA&amp;quot;:{&lt;br /&gt;
               &amp;quot;value&amp;quot;:&amp;quot;valueProperty1&amp;quot;&lt;br /&gt;
            }&lt;br /&gt;
         }&lt;br /&gt;
      }&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot; linein&amp;gt;&lt;br /&gt;
&amp;quot;snsSqsTrigger&amp;quot;:true&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Dsq=====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
// An example input and output event of Direct Sqs&lt;br /&gt;
{&lt;br /&gt;
   &amp;quot;LambdaFunctionHdrDsq_input__pass&amp;quot;:{&lt;br /&gt;
      &amp;quot;forStageMatching&amp;quot;:true,&lt;br /&gt;
      &amp;quot;properties&amp;quot;:{&lt;br /&gt;
         &amp;quot;propertyA&amp;quot;:{&lt;br /&gt;
            &amp;quot;forStageMatching&amp;quot;:true,&lt;br /&gt;
            &amp;quot;value&amp;quot;:&amp;quot;valueProperty1&amp;quot;&lt;br /&gt;
         },&lt;br /&gt;
         &amp;quot;propertyB&amp;quot;:{&lt;br /&gt;
            &amp;quot;forStageMatching&amp;quot;:true,&lt;br /&gt;
            &amp;quot;properties&amp;quot;:{&lt;br /&gt;
               &amp;quot;propertyB1&amp;quot;:{&lt;br /&gt;
                  &amp;quot;forStageMatching&amp;quot;:true,&lt;br /&gt;
                  &amp;quot;value&amp;quot;:&amp;quot;valuePropertyB1&amp;quot;&lt;br /&gt;
               }&lt;br /&gt;
            }&lt;br /&gt;
         },&lt;br /&gt;
         &amp;quot;propertyC&amp;quot;:{&lt;br /&gt;
            &amp;quot;eventValue&amp;quot;:[&lt;br /&gt;
               &amp;quot;valuePropertyC1&amp;quot;,&lt;br /&gt;
               &amp;quot;valuePropertyC2&amp;quot;,&lt;br /&gt;
               &amp;quot;valuePropertyC3&amp;quot;&lt;br /&gt;
            ]&lt;br /&gt;
         }&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;DirectSqs&amp;quot;:true,&lt;br /&gt;
      &amp;quot;messageAttributes&amp;quot;:{&lt;br /&gt;
         &amp;quot;msgTag&amp;quot;:{&lt;br /&gt;
           &amp;quot;forStageMatching&amp;quot;:true,&lt;br /&gt;
           &amp;quot;value&amp;quot;:&amp;quot;msgTag&amp;quot;&lt;br /&gt;
          },&lt;br /&gt;
          &amp;quot;propertyD&amp;quot;:{&lt;br /&gt;
           &amp;quot;forStageMatching&amp;quot;:true,&lt;br /&gt;
           &amp;quot;value&amp;quot;:&amp;quot;valuePropertyD&amp;quot;&lt;br /&gt;
          }&lt;br /&gt;
      }&lt;br /&gt;
   },&lt;br /&gt;
   {&lt;br /&gt;
      &amp;quot;output_LambdaFunctionHdrDsq_pass&amp;quot;:{&lt;br /&gt;
         &amp;quot;forStageMatching&amp;quot;:true,&lt;br /&gt;
         &amp;quot;properties&amp;quot;:{&lt;br /&gt;
            &amp;quot;propertyA&amp;quot;:{&lt;br /&gt;
               &amp;quot;forStageMatching&amp;quot;:true,&lt;br /&gt;
               &amp;quot;value&amp;quot;:&amp;quot;valueProperty1&amp;quot;&lt;br /&gt;
            }&lt;br /&gt;
         }&lt;br /&gt;
      }&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* DirectSqs = true &lt;br /&gt;
:: for initialStage of Dsq&lt;br /&gt;
* messageAttributes is optional&lt;br /&gt;
&lt;br /&gt;
=====Inv=====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;LambdaFunctionHdrInv_input__pass&amp;quot;:{&lt;br /&gt;
     &amp;quot;forStageMatching&amp;quot;:true,&lt;br /&gt;
     &amp;quot;properties&amp;quot;:{&lt;br /&gt;
        &amp;quot;propertyA&amp;quot;:{&lt;br /&gt;
           &amp;quot;forStageMatching&amp;quot;:true,&lt;br /&gt;
           &amp;quot;value&amp;quot;:&amp;quot;valueProperty1&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;propertyB&amp;quot;:{&lt;br /&gt;
           &amp;quot;forStageMatching&amp;quot;:true,&lt;br /&gt;
           &amp;quot;properties&amp;quot;:{&lt;br /&gt;
              &amp;quot;propertyB1&amp;quot;:{&lt;br /&gt;
                 &amp;quot;forStageMatching&amp;quot;:true,&lt;br /&gt;
                 &amp;quot;value&amp;quot;:&amp;quot;valuePropertyB1&amp;quot;&lt;br /&gt;
              }&lt;br /&gt;
           }&lt;br /&gt;
        }&lt;br /&gt;
     }&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
        &amp;quot;output_LambdaFunctionHdrInv_pass&amp;quot;:{&lt;br /&gt;
           &amp;quot;forStageMatching&amp;quot;:true,&lt;br /&gt;
           &amp;quot;properties&amp;quot;:{&lt;br /&gt;
              &amp;quot;propertyA&amp;quot;:{&lt;br /&gt;
                 &amp;quot;forStageMatching&amp;quot;:true,&lt;br /&gt;
                 &amp;quot;value&amp;quot;:&amp;quot;valueProperty1&amp;quot;&lt;br /&gt;
              }&lt;br /&gt;
           }&lt;br /&gt;
        }&lt;br /&gt;
     }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Api=====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
// An example input and output event of API&lt;br /&gt;
{&lt;br /&gt;
	&amp;quot;LambdaFunctionHdrApi_input__pass_notTestAuthorizer&amp;quot;: { &lt;br /&gt;
		&amp;quot;forstageMatvhing&amp;quot;: true, &lt;br /&gt;
		&amp;quot;properties&amp;quot;: { &lt;br /&gt;
			&amp;quot;body&amp;quot;: { &lt;br /&gt;
				&amp;quot;properties&amp;quot;: { &lt;br /&gt;
					&amp;quot;propertyA&amp;quot;: { &lt;br /&gt;
						&amp;quot;testValueMatches&amp;quot;: false, &lt;br /&gt;
						&amp;quot;value&amp;quot;: &amp;quot;valueProperty1&amp;quot;, &lt;br /&gt;
					}, &lt;br /&gt;
					&amp;quot;propertyB&amp;quot;: { &lt;br /&gt;
						&amp;quot;properties&amp;quot;: { &lt;br /&gt;
							&amp;quot;propertyB1&amp;quot;: { &lt;br /&gt;
								&amp;quot;value&amp;quot;: &amp;quot;valuePropertyB1&amp;quot;, &lt;br /&gt;
							} &lt;br /&gt;
						} &lt;br /&gt;
					}, &lt;br /&gt;
					&amp;quot;propertyC&amp;quot;: { &lt;br /&gt;
						&amp;quot;eventValue&amp;quot;: [ &lt;br /&gt;
							&amp;quot;valuePropertyC1&amp;quot;, &lt;br /&gt;
							&amp;quot;valuePropertyC2&amp;quot;, &lt;br /&gt;
							&amp;quot;valuePropertyC3&amp;quot;, &lt;br /&gt;
						] &lt;br /&gt;
					},&lt;br /&gt;
					... &lt;br /&gt;
				} &lt;br /&gt;
			} &lt;br /&gt;
		}&lt;br /&gt;
	}, &lt;br /&gt;
	&amp;quot;Output_LambdaFunctionHdrApi_input__pass_notTestAuthorizer&amp;quot;: { &lt;br /&gt;
		&amp;quot;properties&amp;quot;: { &lt;br /&gt;
			&amp;quot;body&amp;quot;: { &lt;br /&gt;
				&amp;quot;properties&amp;quot;: { &lt;br /&gt;
					&amp;quot;propertyA&amp;quot;: { &lt;br /&gt;
						&amp;quot;testValueMatches&amp;quot;: false, &lt;br /&gt;
						&amp;quot;value&amp;quot;: &amp;quot;valueProperty1&amp;quot;&lt;br /&gt;
					}, &lt;br /&gt;
					...&lt;br /&gt;
				} &lt;br /&gt;
			} &lt;br /&gt;
		}  &lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====S3=====&lt;br /&gt;
&lt;br /&gt;
====dynamodb====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
// An example event of Dynamodb //optional &lt;br /&gt;
{&lt;br /&gt;
	{inputEventTag}__dynamodb_{action}_{tablename}: { // eg. &amp;quot;Complexfilter_ProcessComplexfilter_logical_basic__dynamodb_update_FilterMain&amp;quot;&lt;br /&gt;
	&amp;quot;forStageMatching&amp;quot;: true,&lt;br /&gt;
     &amp;quot;properties&amp;quot;: {&lt;br /&gt;
        &amp;quot;filterMainUniqueRequestId&amp;quot;: {&lt;br /&gt;
          &amp;quot;testValueMatches&amp;quot;: fase,&lt;br /&gt;
          &amp;quot;value&amp;quot;: &amp;quot;bbc4f4a9-2032-4dec-9129-8c7d169fecc5&amp;quot;&lt;br /&gt;
         },&lt;br /&gt;
        &amp;quot;filterObject&amp;quot;: {&lt;br /&gt;
        &amp;quot;forStageMatching&amp;quot;: true,&lt;br /&gt;
        &amp;quot;properties&amp;quot;: {&lt;br /&gt;
          &amp;quot;logicalType&amp;quot;: {&lt;br /&gt;
            &amp;quot;value&amp;quot;: &amp;quot;partitionKey&amp;quot;&lt;br /&gt;
          },&lt;br /&gt;
          &amp;quot;comparison&amp;quot;: {&lt;br /&gt;
            &amp;quot;value&amp;quot;: &amp;quot;equals&amp;quot;&lt;br /&gt;
          },&lt;br /&gt;
          &amp;quot;type&amp;quot;: {&lt;br /&gt;
            &amp;quot;value&amp;quot;: &amp;quot;logical&amp;quot;&lt;br /&gt;
          },&lt;br /&gt;
          &amp;quot;partitionKey&amp;quot;: {&lt;br /&gt;
            &amp;quot;forStageMatching&amp;quot;: true,&lt;br /&gt;
            &amp;quot;value&amp;quot;: &amp;quot;mockIntegratioTestCPF&amp;quot;&lt;br /&gt;
          }&lt;br /&gt;
        }&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;filterMainExpiryTime&amp;quot;: {&lt;br /&gt;
        &amp;quot;testValueMatches&amp;quot;: fase,&lt;br /&gt;
        &amp;quot;value&amp;quot;: 1731980802858&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;filterMainStatus&amp;quot;: {&lt;br /&gt;
       &amp;quot;forStageMatching&amp;quot;: true,&lt;br /&gt;
        &amp;quot;value&amp;quot;: &amp;quot;processing&amp;quot;&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;createTime&amp;quot;: {&lt;br /&gt;
        &amp;quot;testValueMatches&amp;quot;: fase,&lt;br /&gt;
        &amp;quot;value&amp;quot;: 1731894402678&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;objType&amp;quot;: {&lt;br /&gt;
        &amp;quot;forStageMatching&amp;quot;: true,&lt;br /&gt;
        &amp;quot;properties&amp;quot;: {&lt;br /&gt;
          &amp;quot;serviceTag&amp;quot;: {&lt;br /&gt;
            &amp;quot;forStageMatching&amp;quot;: true,&lt;br /&gt;
            &amp;quot;value&amp;quot;: &amp;quot;IntTesting&amp;quot;&lt;br /&gt;
          },&lt;br /&gt;
          &amp;quot;objectType&amp;quot;: {&lt;br /&gt;
            &amp;quot;forStageMatching&amp;quot;: true,&lt;br /&gt;
            &amp;quot;value&amp;quot;: &amp;quot;TestRecord&amp;quot;&lt;br /&gt;
          }&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;keyValues&amp;quot;: {&lt;br /&gt;
      &amp;quot;filterMainId&amp;quot;: &amp;quot;4865d2451a621cb7f71225cfabf2df4f98e20801&amp;quot;,&lt;br /&gt;
      &amp;quot;objTypeId&amp;quot;: &amp;quot;cdb170690571df7522b3850920fce02507c077ee&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
	} &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* partition key: filterMainId&lt;br /&gt;
* sort key: objTypeId&lt;br /&gt;
&lt;br /&gt;
[[2021-01-15 - Integration Testing - Adding DynamoDB result tests]]&lt;br /&gt;
&lt;br /&gt;
===Type paramiter===&lt;br /&gt;
use for evnet and dyanmodb event&lt;br /&gt;
====Normal====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 object: {&lt;br /&gt;
  forStageMatching: true,&lt;br /&gt;
  properties: {&lt;br /&gt;
    name:{&lt;br /&gt;
     forStageMatching: true,&lt;br /&gt;
     value:&amp;quot;Tom&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
   }&lt;br /&gt;
 },&lt;br /&gt;
 array: {&lt;br /&gt;
  forStageMatching: true,&lt;br /&gt;
  useIsEqual: true,&lt;br /&gt;
  eventValue: [&lt;br /&gt;
   {&lt;br /&gt;
     &amp;quot;relTypeAndDirection&amp;quot;: {&lt;br /&gt;
       &amp;quot;relType&amp;quot;: {&lt;br /&gt;
         &amp;quot;serviceTag&amp;quot;: &amp;quot;maxxCart2&amp;quot;,&lt;br /&gt;
         &amp;quot;relationshipTag&amp;quot;: &amp;quot;hasCartOrder&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;relationshipDirection&amp;quot;: &amp;quot;from&amp;quot;&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;targetObjects&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;objType&amp;quot;: {&lt;br /&gt;
           &amp;quot;serviceTag&amp;quot;: &amp;quot;maxxCart2&amp;quot;,&lt;br /&gt;
           &amp;quot;objectType&amp;quot;: &amp;quot;cartOrder&amp;quot;&lt;br /&gt;
          }&lt;br /&gt;
        }&lt;br /&gt;
      ]&lt;br /&gt;
    }&lt;br /&gt;
  ]&lt;br /&gt;
 },&lt;br /&gt;
 number: {&lt;br /&gt;
  forStageMatching: true,&lt;br /&gt;
  value: 1111&lt;br /&gt;
 },&lt;br /&gt;
 string: {&lt;br /&gt;
  forStageMatching: true,&lt;br /&gt;
  value: &amp;quot;hi&amp;quot;&lt;br /&gt;
 },&lt;br /&gt;
 boolean: {&lt;br /&gt;
  forStageMatching: true,&lt;br /&gt;
  value: true&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
 forStageMatching: true&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
::set true for check match value,It is not necessary to set every value&lt;br /&gt;
:::use in test importent paramiter&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
testValueMatches:false&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
::setting paramiter require on create but can not test random value eg: identifier or timeStamp or uuid&lt;br /&gt;
&lt;br /&gt;
====Empty====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
 EmptyString:{&lt;br /&gt;
  value:&amp;quot;&amp;quot;&lt;br /&gt;
 },&lt;br /&gt;
 EmptyArray:{&lt;br /&gt;
   forStageMatching: true,&lt;br /&gt;
   useIsEqual: true,&lt;br /&gt;
   eventValue: []&lt;br /&gt;
 },&lt;br /&gt;
 EmptyObject:{&lt;br /&gt;
  forStageMatching: true,&lt;br /&gt;
  value:{}&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Error====&lt;br /&gt;
can test noRetryError&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;quot;errorMessage&amp;quot;: {&lt;br /&gt;
    forStageMatching: true,&lt;br /&gt;
    &amp;quot;value&amp;quot;: &amp;quot;Not found schema of {serviceTag:TestGraphHandler, objectType:notFoundObjType}&amp;quot;&lt;br /&gt;
   }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Paramiter random====&lt;br /&gt;
Can not test case random numbber or uuid.&lt;br /&gt;
But requriOnCreate mush be set &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
testValueMatches:false&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
or set&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
forStageMatching:false&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=tests=&lt;br /&gt;
Syntax is array of object&lt;br /&gt;
==Syntax name== &lt;br /&gt;
===Testtag name ===&lt;br /&gt;
*{integrationTestTag}&lt;br /&gt;
#Test Own servcie or not a lot stage&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
Test_{inputEventTag}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
#Mix multiple servcie and multiple stage&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt; &lt;br /&gt;
IntegrationTest_{inputEventTag}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===File name ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt; &lt;br /&gt;
{integrationTestTag}.json&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Setting of test==&lt;br /&gt;
[[Service - Integration Test Config#tests.js Syntax|syntax test]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
            integrationTestTag: {integrationTestTag},&lt;br /&gt;
            productionSafe: true|false, //default false&lt;br /&gt;
            noInitialStage: true, // default false, if set to true, no error when no foundInitialStages found&lt;br /&gt;
            errorIfStageUndefined: true|false, //default false&lt;br /&gt;
            errorIfInvokeUndefined: true|false, //default false,&lt;br /&gt;
            dynamoDBSeedDataTags:[&amp;quot;seedDataDB_test_case_xx&amp;quot;], //[seedDataTag] optional if have seed data for test&lt;br /&gt;
            graphSeedDataTags:[&amp;quot;seedDataGraph_test_case_xx&amp;quot;], //[seedDataTag] optional if have seed data for test&lt;br /&gt;
            cleaningeDynamoOneRecordsTags: [&amp;quot;cleaningSeed_partitionKey_sortKey_normol&amp;quot;], //optional&lt;br /&gt;
            cleaningeDynamoManyRecordsTags: [], // optional&lt;br /&gt;
            stages:[&lt;br /&gt;
               ...&lt;br /&gt;
            ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
*[[2025-11-20 IntegrationTest#dynamoDBSeedDataTags|dynamoDBSeedDataTags]]&lt;br /&gt;
*[[2025-11-20 IntegrationTest#graphSeedDataTags|graphSeedDataTags]]&lt;br /&gt;
*[[2025-11-20 IntegrationTest#cleaningeDynamoOneRecordsTags|cleaningeDynamoOneRecordsTags]]&lt;br /&gt;
*[[2025-11-20 IntegrationTest#cleaningeDynamoManyRecordsTags|cleaningeDynamoManyRecordsTags]]&lt;br /&gt;
&lt;br /&gt;
==Stages==&lt;br /&gt;
====Initiate stage====&lt;br /&gt;
:&#039;&#039;&#039;&amp;quot;initialStage&amp;quot;:true&#039;&#039;&#039;&lt;br /&gt;
[[Service_-_Integration_Test_Config#tests.js Syntax|detail property of test]]&lt;br /&gt;
=====HandlerService=====&lt;br /&gt;
======Sqs======&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;quot;stages&amp;quot;:[&lt;br /&gt;
         {&lt;br /&gt;
            &amp;quot;initialStage&amp;quot;:true,&lt;br /&gt;
            &amp;quot;inputEventTag&amp;quot;:&amp;quot;Locations_ProcessLocationNodeSomting_casenotHaveData&amp;quot;,&lt;br /&gt;
            &amp;quot;serviceName&amp;quot;:&amp;quot;Locations&amp;quot;,&lt;br /&gt;
            &amp;quot;resourceType&amp;quot;:&amp;quot;Lambda&amp;quot;,&lt;br /&gt;
            &amp;quot;resourceName&amp;quot;:&amp;quot;ProcessLocationNodeSomtingHdrDsq&amp;quot;,&lt;br /&gt;
            &amp;quot;outputEventTag&amp;quot;:&amp;quot;Output_Locations_ProcessLocationNodeSomting_casenotHaveData&amp;quot;&lt;br /&gt;
         }&lt;br /&gt;
      ]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
======Dsq======&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
stages: [&lt;br /&gt;
        {&lt;br /&gt;
          initialStage: true,&lt;br /&gt;
          inputEventTag: &#039;LambdaFunctionHdrDsq_input_singleStage_directSqs__pass&#039;,&lt;br /&gt;
          serviceName: &#039;ServiceTemplate&#039;,&lt;br /&gt;
          resourceType: &#039;Lambda&#039;,&lt;br /&gt;
          resourceName: &#039;LambdaFunctionHdrDsq&#039;,&lt;br /&gt;
          outputEventTag: &#039;LambdaFunctionHdrDsq_output__returnvalue_pass&#039;,&lt;br /&gt;
          // **** not set snsServiceName and snsTopic&lt;br /&gt;
          // can be test dynamodbOutput&lt;br /&gt;
        }&lt;br /&gt;
      ]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
======Api======&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;quot;stages&amp;quot;:[&lt;br /&gt;
    {&lt;br /&gt;
       &amp;quot;initialStage&amp;quot;:true,&lt;br /&gt;
       &amp;quot;inputEventTag&amp;quot;:&amp;quot;LambdaFunctionHdrApi_input__pass&amp;quot;,&lt;br /&gt;
       &amp;quot;serviceName&amp;quot;:&amp;quot;ServiceTemplate&amp;quot;,&lt;br /&gt;
       &amp;quot;resourceType&amp;quot;:&amp;quot;Lambda&amp;quot;,&lt;br /&gt;
       &amp;quot;resourceName&amp;quot;:&amp;quot;LambdaFunctionHdrApi&amp;quot;,&lt;br /&gt;
       &amp;quot;outputEventTag&amp;quot;:&amp;quot;LambdaFunctionHdrApi_output__pass&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
======Inv======&lt;br /&gt;
*&#039;&#039;&#039;single stage&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
[{&lt;br /&gt;
   &amp;quot;integrationTestTag&amp;quot;:&amp;quot;LambdaFunctionHdrInv__pass&amp;quot;,&lt;br /&gt;
   &amp;quot;productionSafe&amp;quot;:false,&lt;br /&gt;
   &amp;quot;errorIfStageUndefined&amp;quot;:false,&lt;br /&gt;
   &amp;quot;errorIfInvokeUndefined&amp;quot;:false,&lt;br /&gt;
   &amp;quot;dynamoDBSeedDataTags&amp;quot;:[&amp;quot;seedDataDB_test_case_xx&amp;quot;], //[seedDataTag] optional if have seed data for test&lt;br /&gt;
   &amp;quot;graphSeedDataTags&amp;quot;:[&amp;quot;seedDataGraph_test_case_xx&amp;quot;], //[seedDataTag] optional if have seed data for test&lt;br /&gt;
   &amp;quot;cleaningeDynamoOneRecordsTags&amp;quot;: [&amp;quot;cleaningSeed_partitionKey_sortKey_normol&amp;quot;], //optional&lt;br /&gt;
   &amp;quot;cleaningeDynamoManyRecordsTags&amp;quot;: []&lt;br /&gt;
   &amp;quot;stages&amp;quot;:[&lt;br /&gt;
      {&lt;br /&gt;
         &amp;quot;initialStage&amp;quot;:true,&lt;br /&gt;
         &amp;quot;inputEventTag&amp;quot;:&amp;quot;LambdaFunctionHdrInv_input__pass&amp;quot;,&lt;br /&gt;
         &amp;quot;serviceName&amp;quot;:&amp;quot;ServiceTemplate&amp;quot;,&lt;br /&gt;
         &amp;quot;resourceType&amp;quot;:&amp;quot;Lambda&amp;quot;,&lt;br /&gt;
         &amp;quot;resourceName&amp;quot;:&amp;quot;LambdaFunctionHdrInv&amp;quot;,&lt;br /&gt;
         &amp;quot;outputEventTag&amp;quot;:&amp;quot;LambdaFunctionHdrInv_output__pass&amp;quot;&lt;br /&gt;
      }&lt;br /&gt;
   ]&lt;br /&gt;
}]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;invoke multiple stage&#039;&#039;&#039; &lt;br /&gt;
:*Each stage test can invoke multiple lambda by use &amp;quot;eventStage Tag&amp;quot; point to stage for test integration test.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
[{&lt;br /&gt;
   &amp;quot;integrationTestTag&amp;quot;:&amp;quot;LambdaFunctionHdrInv_invokes__pass&amp;quot;,&lt;br /&gt;
   &amp;quot;productionSafe&amp;quot;:false,&lt;br /&gt;
   &amp;quot;errorIfStageUndefined&amp;quot;:false,&lt;br /&gt;
   &amp;quot;errorIfInvokeUndefined&amp;quot;:false,&lt;br /&gt;
   &amp;quot;dynamoDBSeedDataTags&amp;quot;:[], //[seedDataTag] optional if have seed data for test&lt;br /&gt;
   &amp;quot;graphSeedDataTags&amp;quot;:[], //[seedDataTag] optional if have seed data for test&lt;br /&gt;
   &amp;quot;cleaningeDynamoOneRecordsTags&amp;quot;: [], //optional&lt;br /&gt;
   &amp;quot;cleaningeDynamoManyRecordsTags&amp;quot;: [], // optional&lt;br /&gt;
   &amp;quot;stages&amp;quot;:[&lt;br /&gt;
      {&lt;br /&gt;
         &amp;quot;initialStage&amp;quot;:true,&lt;br /&gt;
         &amp;quot;inputEventTag&amp;quot;:&amp;quot;LambdaFunctionHdrInv_input__pass&amp;quot;,&lt;br /&gt;
         &amp;quot;serviceName&amp;quot;:&amp;quot;ServiceTemplate&amp;quot;,&lt;br /&gt;
         &amp;quot;resourceType&amp;quot;:&amp;quot;Lambda&amp;quot;,&lt;br /&gt;
         &amp;quot;resourceName&amp;quot;:&amp;quot;LambdaFunctionHdrInv&amp;quot;,&lt;br /&gt;
         &amp;quot;outputEventTag&amp;quot;:&amp;quot;LambdaFunctionHdrInv_output__pass&amp;quot;,&lt;br /&gt;
         &amp;quot;invokes&amp;quot;:[&lt;br /&gt;
            {&lt;br /&gt;
               &amp;quot;eventStageTag&amp;quot;:&amp;quot;service_invokesB__pass&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            {&lt;br /&gt;
               &amp;quot;eventStageTag&amp;quot;:&amp;quot;service_invokesD__pass&amp;quot;&lt;br /&gt;
            }&lt;br /&gt;
         ]&lt;br /&gt;
      },&lt;br /&gt;
      {&lt;br /&gt;
         &amp;quot;eventStageTag&amp;quot;:&amp;quot;service_invokesB__pass&amp;quot;,&lt;br /&gt;
         &amp;quot;inputEventTag&amp;quot;:&amp;quot;input_service_invokes__pass&amp;quot;,&lt;br /&gt;
         &amp;quot;serviceName&amp;quot;:&amp;quot;ServiceTemplate_B&amp;quot;,&lt;br /&gt;
         &amp;quot;resourceType&amp;quot;:&amp;quot;Lambda&amp;quot;,&lt;br /&gt;
         &amp;quot;resourceName&amp;quot;:&amp;quot;LambdaFunction_B_HdrInv&amp;quot;,&lt;br /&gt;
         &amp;quot;outputEventTag&amp;quot;:&amp;quot;output_service_invokes__pass&amp;quot;&lt;br /&gt;
      },&lt;br /&gt;
      {&lt;br /&gt;
         &amp;quot;eventStageTag&amp;quot;:&amp;quot;service_invokesD__pass&amp;quot;,&lt;br /&gt;
         &amp;quot;inputEventTag&amp;quot;:&amp;quot;input_service_invokesD__pass&amp;quot;,&lt;br /&gt;
         &amp;quot;serviceName&amp;quot;:&amp;quot;ServiceTemplate_D&amp;quot;,&lt;br /&gt;
         &amp;quot;resourceType&amp;quot;:&amp;quot;Lambda&amp;quot;,&lt;br /&gt;
         &amp;quot;resourceName&amp;quot;:&amp;quot;LambdaFunction_D_HdrInv&amp;quot;,&lt;br /&gt;
         &amp;quot;outputEventTag&amp;quot;:&amp;quot;output_service_invokesD__pass&amp;quot;&lt;br /&gt;
      }&lt;br /&gt;
   ]&lt;br /&gt;
}]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
======S3======&lt;br /&gt;
======Batch======&lt;br /&gt;
&lt;br /&gt;
====GeneratedSeedData====&lt;br /&gt;
*Integrationtest must be delete identifier every time before test.&lt;br /&gt;
*Set &#039;generatedSeedData&#039; in file tests.json case by case of stage eg: stages[0] create identifier is randomOnCreate will set &#039;generatedSeedData&#039; and stages[1] create relationship is randomOnCreate(It is usually random, except in the case of relationship version) set generatedSeedData this stages[1].&lt;br /&gt;
*How to delete case identifier rendomOnCreate?: set in stage use setting generateSeedData &amp;quot;randomOnCreateIdentifier&amp;quot;&lt;br /&gt;
#randomOnCreateIdentifier&lt;br /&gt;
#notRandomOnIdentifier&lt;br /&gt;
#relationships&lt;br /&gt;
=====randomOnCreateIdentifier=====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;quot;stages&amp;quot;: [&lt;br /&gt;
      {&lt;br /&gt;
        &amp;quot;initialStage&amp;quot;: true,&lt;br /&gt;
        &amp;quot;inputEventTag&amp;quot;: &amp;quot;MLocation_CreateHdrSqs__case_NodeVersionData_Jaya&amp;quot;,&lt;br /&gt;
        &amp;quot;serviceTag&amp;quot;: &amp;quot;MLocations&amp;quot;,&lt;br /&gt;
        &amp;quot;resourceType&amp;quot;: &amp;quot;Lambda&amp;quot;,&lt;br /&gt;
        &amp;quot;resourceName&amp;quot;: &amp;quot;CreateHdrSqs&amp;quot;,&lt;br /&gt;
        &amp;quot;snsServiceName&amp;quot;: &amp;quot;MLocations&amp;quot;,&lt;br /&gt;
        &amp;quot;snsTopic&amp;quot;: &amp;quot;Create_In&amp;quot;,&lt;br /&gt;
        &amp;quot;generatedSeedData&amp;quot;: {&lt;br /&gt;
          &amp;quot;randomOnCreateIdentifier&amp;quot;: [&lt;br /&gt;
            {&lt;br /&gt;
              &amp;quot;objType&amp;quot;: {&lt;br /&gt;
                &amp;quot;serviceTag&amp;quot;: &amp;quot;MLocations&amp;quot;,&lt;br /&gt;
                &amp;quot;objectType&amp;quot;: &amp;quot;Member&amp;quot;&lt;br /&gt;
              },&lt;br /&gt;
              &amp;quot;identifierValue&amp;quot;: &amp;quot;Jaya-member-001&amp;quot;&lt;br /&gt;
            }&lt;br /&gt;
          ]&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
=====notRandomOnIdentifier=====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;quot;stages&amp;quot;: [&lt;br /&gt;
      {&lt;br /&gt;
        &amp;quot;initialStage&amp;quot;: true,&lt;br /&gt;
        &amp;quot;inputEventTag&amp;quot;: &amp;quot;MLocation_CreateHdrSqs__case_NodeVersionData_Jaya&amp;quot;,&lt;br /&gt;
        &amp;quot;serviceTag&amp;quot;: &amp;quot;MLocations&amp;quot;,&lt;br /&gt;
        &amp;quot;resourceType&amp;quot;: &amp;quot;Lambda&amp;quot;,&lt;br /&gt;
        &amp;quot;resourceName&amp;quot;: &amp;quot;CreateHdrSqs&amp;quot;,&lt;br /&gt;
        &amp;quot;snsServiceName&amp;quot;: &amp;quot;MLocations&amp;quot;,&lt;br /&gt;
        &amp;quot;snsTopic&amp;quot;: &amp;quot;Create_In&amp;quot;,&lt;br /&gt;
        &amp;quot;generatedSeedData&amp;quot;: {&lt;br /&gt;
          &amp;quot;notRandomOnIdentifier&amp;quot;: [&lt;br /&gt;
            {&lt;br /&gt;
              &amp;quot;objType&amp;quot;: {&lt;br /&gt;
                &amp;quot;serviceTag&amp;quot;: &amp;quot;gggg&amp;quot;,&lt;br /&gt;
                &amp;quot;objectType&amp;quot;: &amp;quot;ssssss&amp;quot;&lt;br /&gt;
              },&lt;br /&gt;
              &amp;quot;identifiers&amp;quot;: {&lt;br /&gt;
                &amp;quot;topId&amp;quot;: &amp;quot;123456&amp;quot;&lt;br /&gt;
              }&lt;br /&gt;
            }&lt;br /&gt;
          ]&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    ]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
=====relationships=====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;quot;stages&amp;quot;: [&lt;br /&gt;
      {&lt;br /&gt;
        &amp;quot;initialStage&amp;quot;: true,&lt;br /&gt;
        &amp;quot;inputEventTag&amp;quot;: &amp;quot;MLocation_CreateHdrSqs__case_NodeVersionData_Jaya&amp;quot;,&lt;br /&gt;
        &amp;quot;serviceTag&amp;quot;: &amp;quot;MLocations&amp;quot;,&lt;br /&gt;
        &amp;quot;resourceType&amp;quot;: &amp;quot;Lambda&amp;quot;,&lt;br /&gt;
        &amp;quot;resourceName&amp;quot;: &amp;quot;CreateHdrSqs&amp;quot;,&lt;br /&gt;
        &amp;quot;snsServiceName&amp;quot;: &amp;quot;MLocations&amp;quot;,&lt;br /&gt;
        &amp;quot;snsTopic&amp;quot;: &amp;quot;Create_In&amp;quot;,&lt;br /&gt;
        &amp;quot;generatedSeedData&amp;quot;: {&lt;br /&gt;
         &amp;quot;relationships&amp;quot;: [&lt;br /&gt;
            {&lt;br /&gt;
              &amp;quot;relType&amp;quot;: {&lt;br /&gt;
                &amp;quot;serviceTag&amp;quot;: &amp;quot;PaymentMethodGeneric&amp;quot;,&lt;br /&gt;
                &amp;quot;relationshipTag&amp;quot;: &amp;quot;disabledPaymentMethodGenericPropertyValue&amp;quot;&lt;br /&gt;
              },&lt;br /&gt;
              &amp;quot;relId&amp;quot;: &amp;quot;f4f73de7-647c-4b3b-8043-87cc002f361a&amp;quot;&lt;br /&gt;
            }&lt;br /&gt;
          ]&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    ]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Dynamodb==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
stages: [&lt;br /&gt;
        {&lt;br /&gt;
          initialStage: true,&lt;br /&gt;
          inputEventTag: &#039;Locations_LambdaFunctionHdrDsq_singleStage_directSqs__pass&#039;,&lt;br /&gt;
          serviceName: &#039;ServiceTemplate&#039;,&lt;br /&gt;
          resourceType: &#039;Lambda&#039;,&lt;br /&gt;
          resourceName: &#039;LambdaFunctionHdrDsq&#039;,&lt;br /&gt;
          outputEventTag: &#039;output_Locations_LambdaFunctionHdrDsq_singleStage_directSqs__pass&#039;,&lt;br /&gt;
          dynamodbOutputEventIdentifiers: [&lt;br /&gt;
			{&lt;br /&gt;
              serviceName: {tableName}, //service that deployed the DynamoDB table, so can build table&#039;s full resource name&lt;br /&gt;
              resourceName: {resourceName}, //DynamoDB resourceName&lt;br /&gt;
              eventTag: {eventTagDynamoDB}&lt;br /&gt;
		    }&lt;br /&gt;
          ],&lt;br /&gt;
        }&lt;br /&gt;
      ]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Result of integrationtest =&lt;br /&gt;
Data have 2 table &amp;quot;TestRecord&amp;quot; and &amp;quot;TestUnit&amp;quot;.&lt;br /&gt;
:- TestRecord is table all unti of stage inside eg input output invokes and dynamodb&lt;br /&gt;
:- TestUnit is store status each unit &lt;br /&gt;
each unit save in table TestUnit&lt;br /&gt;
testRecordId is  name of test concat with testTime.&lt;br /&gt;
testUnitId is point to position of unti instage.&lt;br /&gt;
resultStatus is status of unit.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
eg:&lt;br /&gt;
input_0 = stages index 0 result &#039;&#039;&#039;input&#039;&#039;&#039;&lt;br /&gt;
output_1 = stages index 1 result &#039;&#039;&#039;output&#039;&#039;&#039;&lt;br /&gt;
invokeInput_0_1 = stages index 0 result &#039;&#039;&#039;invokes&#039;&#039;&#039; index 1 position input &lt;br /&gt;
invokeOutput_0_1 = stages index 0 result &#039;&#039;&#039;invokes&#039;&#039;&#039; index 1 position output&lt;br /&gt;
dynamodb_0_1 =  stages index 0 result &#039;&#039;&#039;dynamodb&#039;&#039;&#039; index 1.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
after all TestUnit finish (check  by awaitingMultiplestep penditnStep is integrationtestTag awaitingStepId is each TestUnit )&lt;br /&gt;
check all awaitingStep finish send message to ultimateIntegrationtest for sumla all test is status&lt;br /&gt;
&lt;br /&gt;
== Summary of test status == &lt;br /&gt;
:1.testStatus is &amp;quot;passed&amp;quot; all unit passed.&lt;br /&gt;
:2.testStatus is &amp;quot;failed&amp;quot;  have some is failed.&lt;br /&gt;
:3.testStatus is &amp;quot;processing&amp;quot; have some is have status processing after check all awaiting step is finish.&lt;br /&gt;
:4.testStatus is &amp;quot;failed&amp;quot; have record &amp;quot;errorsTest&amp;quot; in case &amp;quot;not match stage invoke&amp;quot;, &#039;found multiple matchingInvokes&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*[[2025-02-20 - Integration Test examples#tests.js Syntax|Syntax Dynamodb]]&lt;br /&gt;
&lt;br /&gt;
=How to test integrationtest s3=&lt;br /&gt;
[[Developer guide for making Integration Tests]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Working documents| 2025-11-20]]&lt;br /&gt;
[[Category:Working documents - Integration Testing| 2025-11-20]]&lt;/div&gt;</summary>
		<author><name>Mint</name></author>
	</entry>
	<entry>
		<id>https://izara.io/wiki/index.php?title=Service_-_Purchase&amp;diff=4438</id>
		<title>Service - Purchase</title>
		<link rel="alternate" type="text/html" href="https://izara.io/wiki/index.php?title=Service_-_Purchase&amp;diff=4438"/>
		<updated>2026-06-01T03:10:56Z</updated>

		<summary type="html">&lt;p&gt;Mint: /* sale */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Overview =&lt;br /&gt;
&lt;br /&gt;
Purchases from vendors including inventory, services, and expenses.&lt;br /&gt;
&lt;br /&gt;
= Repository =&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
= Object Schemas =&lt;br /&gt;
; Additional Information: [[Per Service Schemas]]&lt;br /&gt;
&lt;br /&gt;
== sale ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
	objectType: &amp;quot;purchase&amp;quot;,&lt;br /&gt;
	canDelete: false,&lt;br /&gt;
	belongTo: {&lt;br /&gt;
		serviceTag: &amp;quot;Business&amp;quot;,&lt;br /&gt;
		objectType: &amp;quot;business&amp;quot;&lt;br /&gt;
	},&lt;br /&gt;
	addOnDataStructure: [&lt;br /&gt;
		{&lt;br /&gt;
			type:&amp;quot;versionedData&amp;quot;,&lt;br /&gt;
			versionedDataLabel: &amp;quot;Detail&amp;quot;,&lt;br /&gt;
			storageResourceTag : &amp;quot;myGraph&amp;quot;,&lt;br /&gt;
			fieldNames: {&lt;br /&gt;
				purchaseCurrencyId: {&lt;br /&gt;
					type: &amp;quot;string&amp;quot;,&lt;br /&gt;
					storageResourceTags: [&#039;myGraph&#039;]&lt;br /&gt;
				},&lt;br /&gt;
			}&lt;br /&gt;
        },	&lt;br /&gt;
	],&lt;br /&gt;
	storageResources: {&lt;br /&gt;
		myGraph: {&lt;br /&gt;
			storageType: &amp;quot;graph&amp;quot;,&lt;br /&gt;
			graphServerTag: &amp;quot;GraphHandler&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;dynamo&amp;quot;: {&lt;br /&gt;
			&amp;quot;storageType&amp;quot;: &amp;quot;dynamoDB&amp;quot;,&lt;br /&gt;
			&amp;quot;tableName&amp;quot;: &amp;quot;purchase&amp;quot;,&lt;br /&gt;
		}  &lt;br /&gt;
	},&lt;br /&gt;
	fieldNames: {&lt;br /&gt;
		purchaseId: {&lt;br /&gt;
			type: &amp;quot;string&amp;quot;,&lt;br /&gt;
			randomOnCreate: true,&lt;br /&gt;
			storageResourceTags: [&#039;myGraph&#039;]&lt;br /&gt;
		},&lt;br /&gt;
		purchaseTotal:  {&lt;br /&gt;
			type: &amp;quot;numeric&amp;quot;,&lt;br /&gt;
			storageResourceTags: [&#039;myGraph&#039;]&lt;br /&gt;
		},&lt;br /&gt;
		purchaseCommitted: { // &amp;quot;working&amp;quot;|&amp;quot;updateWorking&amp;quot;|&amp;quot;processing&amp;quot;|&amp;quot;committed&amp;quot;&lt;br /&gt;
			type: &amp;quot;string&amp;quot;,&lt;br /&gt;
			storageResourceTags: [&#039;dynamo&#039;]&lt;br /&gt;
		},&lt;br /&gt;
	},&lt;br /&gt;
	identifiers: [&lt;br /&gt;
		{&lt;br /&gt;
			type: &amp;quot;identifier&amp;quot;,&lt;br /&gt;
			fieldName: &amp;quot;purchaseId&amp;quot;&lt;br /&gt;
		}&lt;br /&gt;
	]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* when building a purchase it is in working stage, must click complete to become an actual purchase&lt;br /&gt;
* purchaseCompleted sets to processing once compeltePurchase begins, probably needs uniqueRequestId also&lt;br /&gt;
* when a change is made to a purchase (that affects accounting data) purchaseCompleted resets to updateWorking&lt;br /&gt;
&lt;br /&gt;
== purchaseGroup ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
	objectType: &amp;quot;purchaseGroup&amp;quot;,&lt;br /&gt;
	canDelete: false,&lt;br /&gt;
	belongTo: {&lt;br /&gt;
		serviceTag: &amp;quot;Business&amp;quot;,&lt;br /&gt;
		objectType: &amp;quot;business&amp;quot;&lt;br /&gt;
	},&lt;br /&gt;
	addOnDataStructure: [],&lt;br /&gt;
	storageResources: {&lt;br /&gt;
		myGraph: {&lt;br /&gt;
			storageType: &amp;quot;graph&amp;quot;,&lt;br /&gt;
			graphServerTag: &amp;quot;GraphHandler&amp;quot;&lt;br /&gt;
		}&lt;br /&gt;
	},&lt;br /&gt;
	fieldNames: {&lt;br /&gt;
		purchaseGroupId: {&lt;br /&gt;
			type: &amp;quot;string&amp;quot;,&lt;br /&gt;
			randomOnCreate: true,&lt;br /&gt;
			storageResourceTags: [&#039;myGraph&#039;]&lt;br /&gt;
		},&lt;br /&gt;
		numberingSettings: {&lt;br /&gt;
			type: &amp;quot;object&amp;quot;,&lt;br /&gt;
			storageResourceTags: [&#039;myGraph&#039;]&lt;br /&gt;
		},&lt;br /&gt;
	},&lt;br /&gt;
	identifiers: [&lt;br /&gt;
		{&lt;br /&gt;
			type: &amp;quot;identifier&amp;quot;,&lt;br /&gt;
			fieldName: &amp;quot;purchaseGroupId&amp;quot;&lt;br /&gt;
		}&lt;br /&gt;
	]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* groups purchases into classifications&lt;br /&gt;
* purchase numbers can be separated by groups, eg separate sequencial numbering&lt;br /&gt;
* numberingSettings saves details such as prefix, suffix, method of sequencial ordering, period when numbering resets&lt;br /&gt;
&lt;br /&gt;
== Relationships ==&lt;br /&gt;
&lt;br /&gt;
=== hasPurchase ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
	hasPurchase: {&lt;br /&gt;
		storageResources: {&lt;br /&gt;
			myGraph: {&lt;br /&gt;
				storageType: &amp;quot;graph&amp;quot;,&lt;br /&gt;
				graphServerTag: &amp;quot;GraphHandler&amp;quot;			&lt;br /&gt;
			}&lt;br /&gt;
		},&lt;br /&gt;
		links: [&lt;br /&gt;
			{&lt;br /&gt;
				storageResourceTags: [&amp;quot;myGraph&amp;quot;],&lt;br /&gt;
				from: {&lt;br /&gt;
					objType: {&lt;br /&gt;
						serviceTag: &amp;quot;Vendor&amp;quot;,&lt;br /&gt;
						objectType: &amp;quot;vendor&amp;quot;&lt;br /&gt;
					},&lt;br /&gt;
					linkType: &amp;quot;one&amp;quot;,&lt;br /&gt;
				},&lt;br /&gt;
				to: {&lt;br /&gt;
					objType: {&lt;br /&gt;
						serviceTag: &amp;quot;Purchase&amp;quot;,&lt;br /&gt;
						objectType: &amp;quot;purchase&amp;quot;&lt;br /&gt;
					},&lt;br /&gt;
					linkType: &amp;quot;many&amp;quot;&lt;br /&gt;
				}&lt;br /&gt;
			},&lt;br /&gt;
		]&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== hasPurchaseLineItem ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
	hasPurchaseLineItem: {&lt;br /&gt;
		canChangeToRelTypes: [&lt;br /&gt;
			{&lt;br /&gt;
				serviceTag:&amp;quot;PurchaseLineItemManager&amp;quot;,&lt;br /&gt;
				relationshipTag: &amp;quot;oldPurchaseLineItem&amp;quot;&lt;br /&gt;
			},&lt;br /&gt;
		],&lt;br /&gt;
		storageResources: {&lt;br /&gt;
			myGraph: {&lt;br /&gt;
				storageType: &amp;quot;graph&amp;quot;,&lt;br /&gt;
				graphServerTag: &amp;quot;GraphHandler&amp;quot;			&lt;br /&gt;
			}&lt;br /&gt;
		},&lt;br /&gt;
		links: [&lt;br /&gt;
			{&lt;br /&gt;
				storageResourceTags: [&amp;quot;myGraph&amp;quot;],&lt;br /&gt;
				from: {&lt;br /&gt;
					objType: {&lt;br /&gt;
						serviceTag: &amp;quot;Purchase&amp;quot;,&lt;br /&gt;
						objectType: &amp;quot;purchase&amp;quot;&lt;br /&gt;
					},&lt;br /&gt;
					linkType: &amp;quot;one&amp;quot;,&lt;br /&gt;
				},&lt;br /&gt;
				to: {&lt;br /&gt;
					objType: {&lt;br /&gt;
						serviceTag: &amp;quot;PurchaseLineItemManager&amp;quot;,&lt;br /&gt;
						objectType: &amp;quot;purchaseLineItem&amp;quot;&lt;br /&gt;
					},&lt;br /&gt;
					linkType: &amp;quot;many&amp;quot;&lt;br /&gt;
				}&lt;br /&gt;
			},&lt;br /&gt;
		]&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== oldPurchaseLineItem ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
	oldPurchaseLineItem: {&lt;br /&gt;
		canChangeToRelTypes: [&lt;br /&gt;
			{&lt;br /&gt;
				serviceTag:&amp;quot;PurchaseLineItemManager&amp;quot;,&lt;br /&gt;
				relationshipTag: &amp;quot;hasPurchaseLineItem&amp;quot;&lt;br /&gt;
			},&lt;br /&gt;
		],&lt;br /&gt;
		storageResources: {&lt;br /&gt;
			myGraph: {&lt;br /&gt;
				storageType: &amp;quot;graph&amp;quot;,&lt;br /&gt;
				graphServerTag: &amp;quot;GraphHandler&amp;quot;			&lt;br /&gt;
			}&lt;br /&gt;
		},&lt;br /&gt;
		links: [&lt;br /&gt;
			{&lt;br /&gt;
				storageResourceTags: [&amp;quot;myGraph&amp;quot;],&lt;br /&gt;
				from: {&lt;br /&gt;
					objType: {&lt;br /&gt;
						serviceTag: &amp;quot;Purchase&amp;quot;,&lt;br /&gt;
						objectType: &amp;quot;purchase&amp;quot;&lt;br /&gt;
					},&lt;br /&gt;
					linkType: &amp;quot;one&amp;quot;,&lt;br /&gt;
				},&lt;br /&gt;
				to: {&lt;br /&gt;
					objType: {&lt;br /&gt;
						serviceTag: &amp;quot;PurchaseLineItemManager&amp;quot;,&lt;br /&gt;
						objectType: &amp;quot;purchaseLineItem&amp;quot;&lt;br /&gt;
					},&lt;br /&gt;
					linkType: &amp;quot;many&amp;quot;&lt;br /&gt;
				}&lt;br /&gt;
			},&lt;br /&gt;
		]&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= flowSchemas =&lt;br /&gt;
&lt;br /&gt;
== commitNewPurchase ==&lt;br /&gt;
&lt;br /&gt;
* uses purchaseCommitted setting to complete purchase, which sends purchaseLineItems and details to ComAcc plugin to create account entries&lt;br /&gt;
&lt;br /&gt;
== commitUpdatePurchase ==&lt;br /&gt;
&lt;br /&gt;
* after changes made uses purchaseCommitted setting to complete the purchase update, sending purchaseLineItems and details to ComAcc plugin to update account entries&lt;br /&gt;
&lt;br /&gt;
== updatePurchase ==&lt;br /&gt;
&lt;br /&gt;
* if have ComAcc plugin enabled, send request to plugin to check if purchase has been locked on Accounting&lt;br /&gt;
&lt;br /&gt;
= Addresses =&lt;br /&gt;
&lt;br /&gt;
* use same structure as orders in Izara Market&lt;br /&gt;
&lt;br /&gt;
= Working documents =&lt;br /&gt;
&lt;br /&gt;
[[:Category:Working_documents - Purchase|Purchase]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Backend services| Purchase]]&lt;/div&gt;</summary>
		<author><name>Mint</name></author>
	</entry>
</feed>