Skip to content

Commit a30c06f

Browse files
fix: add generateCompositeKeys for composite key entities and fix test method names
- Add generateCompositeKeys() to SentimentGuideline model (siteId + guidelineId) - Add generateCompositeKeys() to SentimentTopic model (siteId + topicId) - Fix test to use correct method names: enableAudit, disableAudit, isAuditEnabled - Handle getAudits() returning null for empty sets
1 parent 85ee8fe commit a30c06f

3 files changed

Lines changed: 41 additions & 12 deletions

File tree

packages/spacecat-shared-data-access/src/models/sentiment-guideline/sentiment-guideline.model.js

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,18 @@ class SentimentGuideline extends BaseModel {
7373
}
7474
return this;
7575
}
76+
77+
/**
78+
* Generates the composite keys for remove/update operations.
79+
* Required for entities with composite primary keys.
80+
* @returns {Object} - The composite keys (siteId + guidelineId).
81+
*/
82+
generateCompositeKeys() {
83+
return {
84+
siteId: this.getSiteId(),
85+
guidelineId: this.getGuidelineId(),
86+
};
87+
}
7688
}
7789

7890
export default SentimentGuideline;

packages/spacecat-shared-data-access/src/models/sentiment-topic/sentiment-topic.model.js

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,18 @@ class SentimentTopic extends BaseModel {
5353
}
5454
return this;
5555
}
56+
57+
/**
58+
* Generates the composite keys for remove/update operations.
59+
* Required for entities with composite primary keys.
60+
* @returns {Object} - The composite keys (siteId + topicId).
61+
*/
62+
generateCompositeKeys() {
63+
return {
64+
siteId: this.getSiteId(),
65+
topicId: this.getTopicId(),
66+
};
67+
}
5668
}
5769

5870
export default SentimentTopic;

packages/spacecat-shared-data-access/test/it/sentiment-guideline/sentiment-guideline.test.js

Lines changed: 17 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,9 @@ function checkSentimentGuideline(guideline) {
2626
expect(guideline.getGuidelineId()).to.be.a('string');
2727
expect(guideline.getName()).to.be.a('string');
2828
expect(guideline.getInstruction()).to.be.a('string');
29-
expect(guideline.getAudits()).to.be.an('array');
29+
// audits is a Set type which may return null or array
30+
const audits = guideline.getAudits();
31+
expect(audits === null || Array.isArray(audits)).to.be.true;
3032
expect(guideline.getEnabled()).to.be.a('boolean');
3133
expect(guideline.getCreatedAt()).to.be.a('string');
3234
expect(guideline.getCreatedBy()).to.be.a('string');
@@ -156,41 +158,44 @@ describe('SentimentGuideline IT', function () {
156158
});
157159

158160
describe('Custom Methods', () => {
159-
it('adds an audit', async () => {
161+
it('enables an audit', async () => {
160162
const site = sampleData.sites[0];
161163
const guidelineId = sampleData.sentimentGuidelines[0].getGuidelineId();
162164
const guideline = await SentimentGuideline.findById(site.getId(), guidelineId);
163-
const originalLength = guideline.getAudits().length;
165+
const audits = guideline.getAudits() || [];
166+
const originalLength = audits.length;
164167

165-
guideline.addAudit('new-audit-type');
168+
guideline.enableAudit('new-audit-type');
166169

167170
expect(guideline.getAudits()).to.include('new-audit-type');
168171
expect(guideline.getAudits().length).to.equal(originalLength + 1);
169172
});
170173

171-
it('removes an audit', async () => {
174+
it('disables an audit', async () => {
172175
const site = sampleData.sites[0];
173176
const guidelineId = sampleData.sentimentGuidelines[0].getGuidelineId();
174177
const guideline = await SentimentGuideline.findById(site.getId(), guidelineId);
175178

176179
// Ensure there's an audit to remove
177-
const auditToRemove = guideline.getAudits()[0];
180+
const audits = guideline.getAudits() || [];
181+
const auditToRemove = audits[0];
178182
if (auditToRemove) {
179-
guideline.removeAudit(auditToRemove);
183+
guideline.disableAudit(auditToRemove);
180184
expect(guideline.getAudits()).to.not.include(auditToRemove);
181185
}
182186
});
183187

184-
it('checks if audit is linked', async () => {
188+
it('checks if audit is enabled', async () => {
185189
const site = sampleData.sites[0];
186190
const guidelineId = sampleData.sentimentGuidelines[0].getGuidelineId();
187191
const guideline = await SentimentGuideline.findById(site.getId(), guidelineId);
188192

189-
const linkedAudit = guideline.getAudits()[0];
193+
const audits = guideline.getAudits() || [];
194+
const linkedAudit = audits[0];
190195
if (linkedAudit) {
191-
expect(guideline.isAuditLinked(linkedAudit)).to.be.true;
196+
expect(guideline.isAuditEnabled(linkedAudit)).to.be.true;
192197
}
193-
expect(guideline.isAuditLinked('nonexistent-audit')).to.be.false;
198+
expect(guideline.isAuditEnabled('nonexistent-audit')).to.be.false;
194199
});
195200

196201
it('toggles enabled state', async () => {
@@ -231,7 +236,7 @@ describe('SentimentGuideline IT', function () {
231236
expect(result.data).to.be.an('array');
232237

233238
result.data.forEach((guideline) => {
234-
expect(guideline.isAuditLinked('wikipedia-analysis')).to.be.true;
239+
expect(guideline.isAuditEnabled('wikipedia-analysis')).to.be.true;
235240
});
236241
});
237242

0 commit comments

Comments
 (0)