Ghost/ghost/core/test/e2e-api/content/recommendations.test.js
Simon Backx 9abd466397
Renamed reason to description in recommendations table (#18527)
fixes https://github.com/TryGhost/Product/issues/4005

We no longer use the 'reason' of a recommendation, but allow a flexible
description instead. Because this is a breaking change in the API, we do
this before making this feature GA.
- Added new database utils for renaming a column
- Added new migration to rename the column
- Updated all references in code
2023-10-09 11:19:44 -03:00

90 lines
3.3 KiB
JavaScript

const {agentProvider, fixtureManager, matchers} = require('../../utils/e2e-framework');
const recommendationsService = require('../../../core/server/services/recommendations');
const {Recommendation} = require('@tryghost/recommendations');
const {anyObjectId, anyISODateTime} = matchers;
const assert = require('assert/strict');
describe('Recommendations Content API', function () {
let agent;
before(async function () {
agent = await agentProvider.getContentAPIAgent();
await fixtureManager.init('api_keys');
await agent.authenticate();
// Clear placeholders
for (const recommendation of (await recommendationsService.repository.getAll())) {
recommendation.delete();
await recommendationsService.repository.save(recommendation);
}
// Add 7 recommendations using the repository
for (let i = 0; i < 7; i++) {
const recommendation = Recommendation.create({
title: `Recommendation ${i}`,
description: `Description ${i}`,
url: new URL(`https://recommendation${i}.com`),
favicon: null,
featuredImage: null,
excerpt: null,
oneClickSubscribe: false,
createdAt: new Date(i * 5000) // Reliable ordering
});
await recommendationsService.repository.save(recommendation);
}
});
it('Can paginate recommendations', async function () {
await agent.get(`recommendations/`)
.expectStatus(200)
.matchHeaderSnapshot({
'content-version': matchers.anyContentVersion,
etag: matchers.anyEtag
})
.matchBodySnapshot({
recommendations: new Array(5).fill({
id: anyObjectId,
created_at: anyISODateTime,
updated_at: anyISODateTime
})
});
await agent.get(`recommendations/?page=2`)
.expectStatus(200)
.matchHeaderSnapshot({
'content-version': matchers.anyContentVersion,
etag: matchers.anyEtag
})
.matchBodySnapshot({
recommendations: new Array(2).fill({
id: anyObjectId,
created_at: anyISODateTime,
updated_at: anyISODateTime
})
});
});
it('Does not allow includes', async function () {
const {body} = await agent.get(`recommendations/?include=count.clicks,count.subscribers`)
.expectStatus(200)
.matchHeaderSnapshot({
'content-version': matchers.anyContentVersion,
etag: matchers.anyEtag
})
.matchBodySnapshot({
recommendations: new Array(5).fill({
id: anyObjectId,
created_at: anyISODateTime,
updated_at: anyISODateTime
})
});
assert(body.recommendations[0].count === undefined);
assert(body.recommendations[1].count === undefined);
assert(body.recommendations[2].count === undefined);
assert(body.recommendations[3].count === undefined);
assert(body.recommendations[4].count === undefined);
});
});