@@ -1067,15 +1067,7 @@ describe('templateRepository', () => {
10671067 Item,
10681068 } ) ;
10691069
1070- mocks . ddbDocClient
1071- . on ( QueryCommand )
1072- . resolves ( {
1073- Items : [
1074- { id : 'abc-def-ghi-jkl-123' , owner : ownerWithClientPrefix } ,
1075- ] ,
1076- } )
1077- . on ( UpdateCommand )
1078- . rejects ( error ) ;
1070+ mocks . ddbDocClient . on ( UpdateCommand ) . rejects ( error ) ;
10791071
10801072 const response = await templateRepository . updateStatus (
10811073 'abc-def-ghi-jkl-123' ,
@@ -1100,13 +1092,7 @@ describe('templateRepository', () => {
11001092
11011093 const error = new Error ( 'mocked' ) ;
11021094
1103- mocks . ddbDocClient
1104- . on ( QueryCommand )
1105- . resolves ( {
1106- Items : [ { id : 'abc-def-ghi-jkl-123' , owner : ownerWithClientPrefix } ] ,
1107- } )
1108- . on ( UpdateCommand )
1109- . rejects ( error ) ;
1095+ mocks . ddbDocClient . on ( UpdateCommand ) . rejects ( error ) ;
11101096
11111097 const response = await templateRepository . updateStatus (
11121098 'abc-def-ghi-jkl-123' ,
@@ -1142,10 +1128,6 @@ describe('templateRepository', () => {
11421128 } ;
11431129
11441130 mocks . ddbDocClient
1145- . on ( QueryCommand )
1146- . resolves ( {
1147- Items : [ { id : 'abc-def-ghi-jkl-123' , owner : ownerWithClientPrefix } ] ,
1148- } )
11491131 . on ( UpdateCommand , {
11501132 TableName : templatesTableName ,
11511133 Key : { id : 'abc-def-ghi-jkl-123' , owner : ownerWithClientPrefix } ,
@@ -1165,6 +1147,31 @@ describe('templateRepository', () => {
11651147 expect ( response ) . toEqual ( {
11661148 data : databaseTemplate ,
11671149 } ) ;
1150+
1151+ expect ( mocks . ddbDocClient ) . toHaveReceivedCommandWith ( UpdateCommand , {
1152+ TableName : 'templates' ,
1153+ Key : { id : 'abc-def-ghi-jkl-123' , owner : 'CLIENT#client-id' } ,
1154+ ReturnValues : 'ALL_NEW' ,
1155+ ReturnValuesOnConditionCheckFailure : 'ALL_OLD' ,
1156+ ExpressionAttributeNames : {
1157+ '#templateStatus' : 'templateStatus' ,
1158+ '#updatedAt' : 'updatedAt' ,
1159+ '#updatedBy' : 'updatedBy' ,
1160+ '#lockNumber' : 'lockNumber' ,
1161+ } ,
1162+ ExpressionAttributeValues : {
1163+ ':deleted' : 'DELETED' ,
1164+ ':newStatus' : 'PENDING_VALIDATION' ,
1165+ ':submitted' : 'SUBMITTED' ,
1166+ ':updatedAt' : '2024-12-27T00:00:00.000Z' ,
1167+ ':updatedBy' : 'user-id' ,
1168+ ':lockNumberIncrement' : 1 ,
1169+ } ,
1170+ UpdateExpression :
1171+ 'SET #templateStatus = :newStatus, #updatedAt = :updatedAt, #updatedBy = :updatedBy ADD #lockNumber :lockNumberIncrement' ,
1172+ ConditionExpression :
1173+ 'attribute_exists(id) AND NOT #templateStatus IN (:deleted, :submitted)' ,
1174+ } ) ;
11681175 } ) ;
11691176 } ) ;
11701177
@@ -1413,7 +1420,7 @@ describe('templateRepository', () => {
14131420 TableName : 'templates' ,
14141421 Key : { id : 'template-id' , owner : ownerWithClientPrefix } ,
14151422 UpdateExpression :
1416- 'SET #files.#file.#scanStatus = :scanStatus , #updatedAt = :updatedAt' ,
1423+ 'SET #files.#file.#scanStatus = :scanStatus , #updatedAt = :updatedAt ADD #lockNumber :lockNumberIncrement ' ,
14171424 ConditionExpression :
14181425 '#files.#file.#version = :version and not #templateStatus in (:templateStatusDeleted, :templateStatusSubmitted)' ,
14191426 ExpressionAttributeNames : {
@@ -1423,13 +1430,15 @@ describe('templateRepository', () => {
14231430 '#templateStatus' : 'templateStatus' ,
14241431 '#updatedAt' : 'updatedAt' ,
14251432 '#version' : 'currentVersion' ,
1433+ '#lockNumber' : 'lockNumber' ,
14261434 } ,
14271435 ExpressionAttributeValues : {
14281436 ':scanStatus' : 'PASSED' ,
14291437 ':templateStatusDeleted' : 'DELETED' ,
14301438 ':templateStatusSubmitted' : 'SUBMITTED' ,
14311439 ':updatedAt' : '2024-12-27T00:00:00.000Z' ,
14321440 ':version' : 'pdf-version-id' ,
1441+ ':lockNumberIncrement' : 1 ,
14331442 } ,
14341443 } ) ;
14351444 } ) ;
@@ -1448,7 +1457,7 @@ describe('templateRepository', () => {
14481457 TableName : 'templates' ,
14491458 Key : { id : 'template-id' , owner : ownerWithClientPrefix } ,
14501459 UpdateExpression :
1451- 'SET #files.#file.#scanStatus = :scanStatus , #updatedAt = :updatedAt' ,
1460+ 'SET #files.#file.#scanStatus = :scanStatus , #updatedAt = :updatedAt ADD #lockNumber :lockNumberIncrement ' ,
14521461 ConditionExpression :
14531462 '#files.#file.#version = :version and not #templateStatus in (:templateStatusDeleted, :templateStatusSubmitted)' ,
14541463 ExpressionAttributeNames : {
@@ -1458,13 +1467,15 @@ describe('templateRepository', () => {
14581467 '#templateStatus' : 'templateStatus' ,
14591468 '#updatedAt' : 'updatedAt' ,
14601469 '#version' : 'currentVersion' ,
1470+ '#lockNumber' : 'lockNumber' ,
14611471 } ,
14621472 ExpressionAttributeValues : {
14631473 ':scanStatus' : 'PASSED' ,
14641474 ':templateStatusDeleted' : 'DELETED' ,
14651475 ':templateStatusSubmitted' : 'SUBMITTED' ,
14661476 ':updatedAt' : '2024-12-27T00:00:00.000Z' ,
14671477 ':version' : 'csv-version-id' ,
1478+ ':lockNumberIncrement' : 1 ,
14681479 } ,
14691480 } ) ;
14701481 } ) ;
@@ -1483,7 +1494,7 @@ describe('templateRepository', () => {
14831494 TableName : 'templates' ,
14841495 Key : { id : 'template-id' , owner : ownerWithClientPrefix } ,
14851496 UpdateExpression :
1486- 'SET #files.#file.#scanStatus = :scanStatus , #updatedAt = :updatedAt , #templateStatus = :templateStatusFailed' ,
1497+ 'SET #files.#file.#scanStatus = :scanStatus , #updatedAt = :updatedAt , #templateStatus = :templateStatusFailed ADD #lockNumber :lockNumberIncrement ' ,
14871498 ConditionExpression :
14881499 '#files.#file.#version = :version and not #templateStatus in (:templateStatusDeleted, :templateStatusSubmitted)' ,
14891500 ExpressionAttributeNames : {
@@ -1493,6 +1504,7 @@ describe('templateRepository', () => {
14931504 '#templateStatus' : 'templateStatus' ,
14941505 '#updatedAt' : 'updatedAt' ,
14951506 '#version' : 'currentVersion' ,
1507+ '#lockNumber' : 'lockNumber' ,
14961508 } ,
14971509 ExpressionAttributeValues : {
14981510 ':scanStatus' : 'FAILED' ,
@@ -1501,6 +1513,7 @@ describe('templateRepository', () => {
15011513 ':templateStatusSubmitted' : 'SUBMITTED' ,
15021514 ':updatedAt' : '2024-12-27T00:00:00.000Z' ,
15031515 ':version' : 'pdf-version-id' ,
1516+ ':lockNumberIncrement' : 1 ,
15041517 } ,
15051518 } ) ;
15061519 } ) ;
@@ -1519,7 +1532,7 @@ describe('templateRepository', () => {
15191532 TableName : 'templates' ,
15201533 Key : { id : 'template-id' , owner : ownerWithClientPrefix } ,
15211534 UpdateExpression :
1522- 'SET #files.#file.#scanStatus = :scanStatus , #updatedAt = :updatedAt , #templateStatus = :templateStatusFailed' ,
1535+ 'SET #files.#file.#scanStatus = :scanStatus , #updatedAt = :updatedAt , #templateStatus = :templateStatusFailed ADD #lockNumber :lockNumberIncrement ' ,
15231536 ConditionExpression :
15241537 '#files.#file.#version = :version and not #templateStatus in (:templateStatusDeleted, :templateStatusSubmitted)' ,
15251538 ExpressionAttributeNames : {
@@ -1529,6 +1542,7 @@ describe('templateRepository', () => {
15291542 '#templateStatus' : 'templateStatus' ,
15301543 '#updatedAt' : 'updatedAt' ,
15311544 '#version' : 'currentVersion' ,
1545+ '#lockNumber' : 'lockNumber' ,
15321546 } ,
15331547 ExpressionAttributeValues : {
15341548 ':scanStatus' : 'FAILED' ,
@@ -1537,6 +1551,7 @@ describe('templateRepository', () => {
15371551 ':templateStatusSubmitted' : 'SUBMITTED' ,
15381552 ':updatedAt' : '2024-12-27T00:00:00.000Z' ,
15391553 ':version' : 'csv-version-id' ,
1554+ ':lockNumberIncrement' : 1 ,
15401555 } ,
15411556 } ) ;
15421557 } ) ;
@@ -1598,7 +1613,7 @@ describe('templateRepository', () => {
15981613 TableName : 'templates' ,
15991614 Key : { id : 'template-id' , owner : ownerWithClientPrefix } ,
16001615 UpdateExpression :
1601- 'SET #templateStatus = :templateStatus , #updatedAt = :updatedAt , #personalisationParameters = :personalisationParameters , #testDataCsvHeaders = :testDataCsvHeaders' ,
1616+ 'SET #templateStatus = :templateStatus , #updatedAt = :updatedAt , #personalisationParameters = :personalisationParameters , #testDataCsvHeaders = :testDataCsvHeaders ADD #lockNumber :lockNumberIncrement ' ,
16021617 ConditionExpression :
16031618 '#files.#file.#version = :version and not #templateStatus in (:templateStatusDeleted, :templateStatusSubmitted)' ,
16041619 ExpressionAttributeNames : {
@@ -1609,6 +1624,7 @@ describe('templateRepository', () => {
16091624 '#templateStatus' : 'templateStatus' ,
16101625 '#updatedAt' : 'updatedAt' ,
16111626 '#version' : 'currentVersion' ,
1627+ '#lockNumber' : 'lockNumber' ,
16121628 } ,
16131629 ExpressionAttributeValues : {
16141630 ':testDataCsvHeaders' : [ 'csv' , 'headers' ] ,
@@ -1618,6 +1634,7 @@ describe('templateRepository', () => {
16181634 ':templateStatusSubmitted' : 'SUBMITTED' ,
16191635 ':updatedAt' : '2024-12-27T00:00:00.000Z' ,
16201636 ':version' : 'file-version-id' ,
1637+ ':lockNumberIncrement' : 1 ,
16211638 } ,
16221639 } ) ;
16231640 } ) ;
@@ -1636,7 +1653,7 @@ describe('templateRepository', () => {
16361653 TableName : 'templates' ,
16371654 Key : { id : 'template-id' , owner : ownerWithClientPrefix } ,
16381655 UpdateExpression :
1639- 'SET #templateStatus = :templateStatus , #updatedAt = :updatedAt' ,
1656+ 'SET #templateStatus = :templateStatus , #updatedAt = :updatedAt ADD #lockNumber :lockNumberIncrement ' ,
16401657 ConditionExpression :
16411658 '#files.#file.#version = :version and not #templateStatus in (:templateStatusDeleted, :templateStatusSubmitted)' ,
16421659 ExpressionAttributeNames : {
@@ -1645,13 +1662,15 @@ describe('templateRepository', () => {
16451662 '#templateStatus' : 'templateStatus' ,
16461663 '#updatedAt' : 'updatedAt' ,
16471664 '#version' : 'currentVersion' ,
1665+ '#lockNumber' : 'lockNumber' ,
16481666 } ,
16491667 ExpressionAttributeValues : {
16501668 ':templateStatus' : 'VALIDATION_FAILED' ,
16511669 ':templateStatusDeleted' : 'DELETED' ,
16521670 ':templateStatusSubmitted' : 'SUBMITTED' ,
16531671 ':updatedAt' : '2024-12-27T00:00:00.000Z' ,
16541672 ':version' : 'file-version-id' ,
1673+ ':lockNumberIncrement' : 1 ,
16551674 } ,
16561675 } ) ;
16571676 } ) ;
@@ -1674,7 +1693,7 @@ describe('templateRepository', () => {
16741693 TableName : 'templates' ,
16751694 Key : { id : 'template-id' , owner : ownerWithClientPrefix } ,
16761695 UpdateExpression :
1677- 'SET #templateStatus = :templateStatus , #updatedAt = :updatedAt , #personalisationParameters = :personalisationParameters , #testDataCsvHeaders = :testDataCsvHeaders' ,
1696+ 'SET #templateStatus = :templateStatus , #updatedAt = :updatedAt , #personalisationParameters = :personalisationParameters , #testDataCsvHeaders = :testDataCsvHeaders ADD #lockNumber :lockNumberIncrement ' ,
16781697 ConditionExpression :
16791698 '#files.#file.#version = :version and not #templateStatus in (:templateStatusDeleted, :templateStatusSubmitted)' ,
16801699 ExpressionAttributeNames : {
@@ -1685,6 +1704,7 @@ describe('templateRepository', () => {
16851704 '#templateStatus' : 'templateStatus' ,
16861705 '#updatedAt' : 'updatedAt' ,
16871706 '#version' : 'currentVersion' ,
1707+ '#lockNumber' : 'lockNumber' ,
16881708 } ,
16891709 ExpressionAttributeValues : {
16901710 ':testDataCsvHeaders' : [ 'csv' , 'headers' ] ,
@@ -1694,6 +1714,7 @@ describe('templateRepository', () => {
16941714 ':templateStatusSubmitted' : 'SUBMITTED' ,
16951715 ':updatedAt' : '2024-12-27T00:00:00.000Z' ,
16961716 ':version' : 'file-version-id' ,
1717+ ':lockNumberIncrement' : 1 ,
16971718 } ,
16981719 } ) ;
16991720 } ) ;
@@ -1714,7 +1735,7 @@ describe('templateRepository', () => {
17141735 TableName : 'templates' ,
17151736 Key : { id : 'template-id' , owner : ownerWithClientPrefix } ,
17161737 UpdateExpression :
1717- 'SET #templateStatus = :templateStatus , #updatedAt = :updatedAt' ,
1738+ 'SET #templateStatus = :templateStatus , #updatedAt = :updatedAt ADD #lockNumber :lockNumberIncrement ' ,
17181739 ConditionExpression :
17191740 '#files.#file.#version = :version and not #templateStatus in (:templateStatusDeleted, :templateStatusSubmitted)' ,
17201741 ExpressionAttributeNames : {
@@ -1723,13 +1744,15 @@ describe('templateRepository', () => {
17231744 '#templateStatus' : 'templateStatus' ,
17241745 '#updatedAt' : 'updatedAt' ,
17251746 '#version' : 'currentVersion' ,
1747+ '#lockNumber' : 'lockNumber' ,
17261748 } ,
17271749 ExpressionAttributeValues : {
17281750 ':templateStatus' : 'VALIDATION_FAILED' ,
17291751 ':templateStatusDeleted' : 'DELETED' ,
17301752 ':templateStatusSubmitted' : 'SUBMITTED' ,
17311753 ':updatedAt' : '2024-12-27T00:00:00.000Z' ,
17321754 ':version' : 'file-version-id' ,
1755+ ':lockNumberIncrement' : 1 ,
17331756 } ,
17341757 } ) ;
17351758 } ) ;
0 commit comments