mirror of
https://github.com/TryGhost/Ghost.git
synced 2024-12-25 20:03:12 +03:00
7f184d2451
refs TryGhost/Team#2904 <!-- Leave the line below if you'd like GitHub Copilot to generate a summary from your commit --> <!-- copilot:summary --> ### <samp>🤖 Generated by Copilot at b3f5423</samp> This pull request adds support for multiple formats of snippet content, especially the `lexical` format, to the Ghost CMS. It modifies the snippets API, model, and test files to handle the format conversion, filtering, and serialization of snippets.
251 lines
7.2 KiB
JavaScript
251 lines
7.2 KiB
JavaScript
const {agentProvider, fixtureManager, matchers} = require('../../utils/e2e-framework');
|
|
const {anyContentVersion, anyEtag, anyLocationFor, anyObjectId, anyISODateTime, anyErrorId} = matchers;
|
|
|
|
const matchSnippet = {
|
|
id: anyObjectId,
|
|
created_at: anyISODateTime,
|
|
updated_at: anyISODateTime
|
|
};
|
|
|
|
describe('Snippets API', function () {
|
|
let agent;
|
|
|
|
before(async function () {
|
|
agent = await agentProvider.getAdminAPIAgent();
|
|
await fixtureManager.init('snippets');
|
|
await agent.loginAsOwner();
|
|
});
|
|
|
|
it('Can add', async function () {
|
|
const snippet = {
|
|
name: 'test',
|
|
mobiledoc: JSON.stringify({})
|
|
};
|
|
|
|
await agent
|
|
.post('snippets/')
|
|
.body({snippets: [snippet]})
|
|
.expectStatus(201)
|
|
.matchBodySnapshot({
|
|
snippets: [matchSnippet]
|
|
})
|
|
.matchHeaderSnapshot({
|
|
'content-version': anyContentVersion,
|
|
etag: anyEtag,
|
|
location: anyLocationFor('snippets')
|
|
});
|
|
});
|
|
|
|
it('Can browse', async function () {
|
|
await agent
|
|
.get('snippets')
|
|
.expectStatus(200)
|
|
.matchBodySnapshot({
|
|
snippets: new Array(2).fill(matchSnippet)
|
|
})
|
|
.matchHeaderSnapshot({
|
|
'content-version': anyContentVersion,
|
|
etag: anyEtag
|
|
});
|
|
});
|
|
|
|
it('Can read', async function () {
|
|
await agent
|
|
.get(`snippets/${fixtureManager.get('snippets', 0).id}/`)
|
|
.expectStatus(200)
|
|
.matchBodySnapshot({
|
|
snippets: [matchSnippet]
|
|
})
|
|
.matchHeaderSnapshot({
|
|
'content-version': anyContentVersion,
|
|
etag: anyEtag
|
|
});
|
|
});
|
|
|
|
it('Can read lexical', async function () {
|
|
await agent
|
|
.get(`snippets/${fixtureManager.get('snippets', 0).id}/?formats=lexical`)
|
|
.expectStatus(200)
|
|
.matchBodySnapshot({
|
|
snippets: [matchSnippet]
|
|
})
|
|
.matchHeaderSnapshot({
|
|
'content-version': anyContentVersion,
|
|
etag: anyEtag
|
|
});
|
|
});
|
|
|
|
it('Can edit', async function () {
|
|
const snippetToChange = {
|
|
name: 'change me',
|
|
mobiledoc: '{}'
|
|
};
|
|
|
|
const snippetChanged = {
|
|
name: 'changed',
|
|
mobiledoc: '{}'
|
|
};
|
|
|
|
const {body} = await agent
|
|
.post(`snippets/`)
|
|
.body({snippets: [snippetToChange]})
|
|
.expectStatus(201)
|
|
.matchBodySnapshot({
|
|
snippets: [matchSnippet]
|
|
})
|
|
.matchHeaderSnapshot({
|
|
'content-version': anyContentVersion,
|
|
etag: anyEtag,
|
|
location: anyLocationFor('snippets')
|
|
});
|
|
|
|
const newsnippet = body.snippets[0];
|
|
|
|
await agent
|
|
.put(`snippets/${newsnippet.id}/`)
|
|
.body({snippets: [snippetChanged]})
|
|
.expectStatus(200)
|
|
.matchBodySnapshot({
|
|
snippets: [matchSnippet]
|
|
})
|
|
.matchHeaderSnapshot({
|
|
'content-version': anyContentVersion,
|
|
etag: anyEtag
|
|
});
|
|
});
|
|
|
|
it('Can destroy', async function () {
|
|
const snippet = {
|
|
name: 'destroy test',
|
|
mobiledoc: '{}'
|
|
};
|
|
|
|
const {body} = await agent
|
|
.post(`snippets/`)
|
|
.body({snippets: [snippet]})
|
|
.expectStatus(201)
|
|
.matchBodySnapshot({
|
|
snippets: [matchSnippet]
|
|
})
|
|
.matchHeaderSnapshot({
|
|
'content-version': anyContentVersion,
|
|
etag: anyEtag,
|
|
location: anyLocationFor('snippets')
|
|
});
|
|
|
|
const newSnippet = body.snippets[0];
|
|
|
|
await agent
|
|
.delete(`snippets/${newSnippet.id}`)
|
|
.expectStatus(204)
|
|
.expectEmptyBody()
|
|
.matchHeaderSnapshot({
|
|
'content-version': anyContentVersion,
|
|
etag: anyEtag
|
|
});
|
|
|
|
await agent
|
|
.get(`snippets/${newSnippet.id}/`)
|
|
.expectStatus(404)
|
|
.matchBodySnapshot({
|
|
errors: [{
|
|
id: anyErrorId
|
|
}]
|
|
})
|
|
.matchHeaderSnapshot({
|
|
'content-version': anyContentVersion,
|
|
etag: anyEtag
|
|
});
|
|
});
|
|
|
|
it('Cannot destroy non-existent snippet', async function () {
|
|
await agent
|
|
.delete('snippets/abcd1234abcd1234abcd1234')
|
|
.expectStatus(404)
|
|
.matchBodySnapshot({
|
|
errors: [{
|
|
id: anyErrorId
|
|
}]
|
|
})
|
|
.matchHeaderSnapshot({
|
|
'content-version': anyContentVersion,
|
|
etag: anyEtag
|
|
});
|
|
});
|
|
|
|
it('Can add lexical', async function () {
|
|
const snippet = {
|
|
name: 'test lexical',
|
|
lexical: JSON.stringify({node: 'text'}),
|
|
mobiledoc: '{}'
|
|
};
|
|
|
|
await agent
|
|
.post('snippets/?formats=lexical')
|
|
.body({snippets: [snippet]})
|
|
.expectStatus(201)
|
|
.matchBodySnapshot({
|
|
snippets: [matchSnippet]
|
|
})
|
|
.matchHeaderSnapshot({
|
|
'content-version': anyContentVersion,
|
|
etag: anyEtag,
|
|
location: anyLocationFor('snippets')
|
|
});
|
|
});
|
|
|
|
it('Can browse lexical', async function () {
|
|
await agent
|
|
.get('snippets?formats=lexical&filter=lexical:-null')
|
|
.expectStatus(200)
|
|
.matchBodySnapshot({
|
|
snippets: new Array(1).fill(matchSnippet)
|
|
})
|
|
.matchHeaderSnapshot({
|
|
'content-version': anyContentVersion,
|
|
etag: anyEtag
|
|
});
|
|
});
|
|
|
|
it('Can edit lexical', async function () {
|
|
const snippetToChange = {
|
|
name: 'change me',
|
|
mobiledoc: '{}',
|
|
lexical: '{}'
|
|
};
|
|
|
|
const snippetChanged = {
|
|
name: 'changed lexical',
|
|
mobiledoc: '{}',
|
|
lexical: JSON.stringify({node: 'text'})
|
|
};
|
|
|
|
const {body} = await agent
|
|
.post(`snippets/?formats=lexical`)
|
|
.body({snippets: [snippetToChange]})
|
|
.expectStatus(201)
|
|
.matchBodySnapshot({
|
|
snippets: [matchSnippet]
|
|
})
|
|
.matchHeaderSnapshot({
|
|
'content-version': anyContentVersion,
|
|
etag: anyEtag,
|
|
location: anyLocationFor('snippets')
|
|
});
|
|
|
|
const newsnippet = body.snippets[0];
|
|
|
|
await agent
|
|
.put(`snippets/${newsnippet.id}/?formats=lexical`)
|
|
.body({snippets: [snippetChanged]})
|
|
.expectStatus(200)
|
|
.matchBodySnapshot({
|
|
snippets: [matchSnippet]
|
|
})
|
|
.matchHeaderSnapshot({
|
|
'content-version': anyContentVersion,
|
|
etag: anyEtag
|
|
});
|
|
});
|
|
});
|