diff --git a/packages/spacecat-shared-data-access/src/service/audits/accessPatterns.js b/packages/spacecat-shared-data-access/src/service/audits/accessPatterns.js index 7f88103a..7c23dd31 100644 --- a/packages/spacecat-shared-data-access/src/service/audits/accessPatterns.js +++ b/packages/spacecat-shared-data-access/src/service/audits/accessPatterns.js @@ -65,17 +65,12 @@ export const getAuditForSite = async ( auditType, auditedAt, ) => { - const audit = await dynamoClient.query({ - TableName: config.tableNameAudits, - KeyConditionExpression: 'siteId = :siteId AND SK = :sk', - ExpressionAttributeValues: { - ':siteId': siteId, - ':sk': `${auditType}#${auditedAt}`, - }, - Limit: 1, + const audit = await dynamoClient.getItem(config.tableNameAudits, { + siteId, + SK: `${auditType}#${auditedAt}`, }); - return audit.length > 0 ? AuditDto.fromDynamoItem(audit[0]) : null; + return audit ? AuditDto.fromDynamoItem(audit) : null; }; /** @@ -158,7 +153,7 @@ export const getLatestAuditForSite = async ( ) => { const latestAudit = await dynamoClient.query({ TableName: config.tableNameLatestAudits, - KeyConditionExpression: 'siteId = :siteId AND begins_with(auditType, :auditType)', + KeyConditionExpression: 'siteId = :siteId AND auditType = :auditType', ExpressionAttributeValues: { ':siteId': siteId, ':auditType': `${auditType}`, diff --git a/packages/spacecat-shared-data-access/test/unit/service/audits/index.test.js b/packages/spacecat-shared-data-access/test/unit/service/audits/index.test.js index a671271c..5257c6d4 100644 --- a/packages/spacecat-shared-data-access/test/unit/service/audits/index.test.js +++ b/packages/spacecat-shared-data-access/test/unit/service/audits/index.test.js @@ -110,13 +110,14 @@ describe('Audit Access Pattern Tests', () => { beforeEach(() => { mockDynamoClient = { query: sinon.stub().returns(Promise.resolve([])), + getItem: sinon.stub().resolves(), }; mockLog = { log: sinon.stub() }; exportedFunctions = auditFunctions(mockDynamoClient, TEST_DA_CONFIG, mockLog); }); it('successfully retrieves an audit for a site', async () => { - const mockAuditData = [{ + const mockAuditData = { siteId: 'siteId', auditType: 'lhs-mobile', auditedAt: new Date().toISOString(), @@ -129,21 +130,21 @@ describe('Audit Access Pattern Tests', () => { }, }, fullAuditRef: 'https://someurl.com', - }]; - mockDynamoClient.query.returns(Promise.resolve(mockAuditData)); + }; + mockDynamoClient.getItem.resolves(mockAuditData); const result = await exportedFunctions.getAuditForSite('siteId', 'auditType', 'auditedAt'); expect(result).to.not.be.null; expect(result.getScores()).to.be.an('object'); - expect(mockDynamoClient.query.calledOnce).to.be.true; + expect(mockDynamoClient.getItem.calledOnce).to.be.true; }); it('returns null if no audit is found for a site', async () => { - mockDynamoClient.query.returns(Promise.resolve([])); + mockDynamoClient.getItem.resolves(undefined); const result = await exportedFunctions.getAuditForSite('siteId', 'auditType', 'auditedAt'); expect(result).to.be.null; - expect(mockDynamoClient.query.calledOnce).to.be.true; + expect(mockDynamoClient.getItem.calledOnce).to.be.true; }); }); @@ -170,6 +171,7 @@ describe('Audit Access Pattern Tests', () => { beforeEach(() => { mockDynamoClient = { query: sinon.stub().returns(Promise.resolve([])), + getItem: sinon.stub().returns(Promise.resolve()), putItem: sinon.stub().returns(Promise.resolve()), removeItem: sinon.stub().returns(Promise.resolve()), }; @@ -193,7 +195,7 @@ describe('Audit Access Pattern Tests', () => { }); it('throws an error if audit already exists', async () => { - mockDynamoClient.query.returns(Promise.resolve([auditData])); + mockDynamoClient.getItem.resolves(auditData); await expect(exportedFunctions.addAudit(auditData)).to.be.rejectedWith('Audit already exists'); });