mirror of
https://github.com/NodeBB/NodeBB.git
synced 2025-10-26 16:46:12 +01:00
test: post diff deletion tests
This commit is contained in:
@@ -116,6 +116,8 @@ paths:
|
||||
$ref: 'write/posts/pid/diffs.yaml'
|
||||
/posts/{pid}/diffs/{since}:
|
||||
$ref: 'write/posts/pid/diffs/since.yaml'
|
||||
/posts/{pid}/diffs/{timestamp}:
|
||||
$ref: 'write/posts/pid/diffs/timestamp.yaml'
|
||||
/admin/settings/{setting}:
|
||||
$ref: 'write/admin/settings/setting.yaml'
|
||||
/files/:
|
||||
|
||||
@@ -39,3 +39,5 @@ get:
|
||||
type: string
|
||||
editable:
|
||||
type: boolean
|
||||
deletable:
|
||||
type: boolean
|
||||
|
||||
37
public/openapi/write/posts/pid/diffs/timestamp.yaml
Normal file
37
public/openapi/write/posts/pid/diffs/timestamp.yaml
Normal file
@@ -0,0 +1,37 @@
|
||||
delete:
|
||||
tags:
|
||||
- posts
|
||||
summary: delete a post diff
|
||||
description: This operation deletes a post diff from its history.
|
||||
parameters:
|
||||
- in: path
|
||||
name: pid
|
||||
schema:
|
||||
type: string
|
||||
required: true
|
||||
description: a valid post id
|
||||
example: 2
|
||||
- in: path
|
||||
name: timestamp
|
||||
schema:
|
||||
type: number
|
||||
required: true
|
||||
description: a valid UNIX timestamp
|
||||
example: 1611850000000
|
||||
responses:
|
||||
'200':
|
||||
description: Post diff successfully deleted
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
type: object
|
||||
properties:
|
||||
status:
|
||||
$ref: ../../../../components/schemas/Status.yaml#/Status
|
||||
response:
|
||||
type: object
|
||||
properties: {}
|
||||
'400':
|
||||
$ref: ../../../../components/responses/400.yaml#/400
|
||||
'403':
|
||||
$ref: ../../../../components/responses/403.yaml#/403
|
||||
@@ -84,6 +84,7 @@ module.exports = function (Posts) {
|
||||
const lastTimestampIndex = timestamps.length - 1;
|
||||
|
||||
if (timestamp === String(post[0].timestamp)) {
|
||||
// Deleting oldest diff, so history rewrite is not needed
|
||||
return Promise.all([
|
||||
db.delete(`diff:${pid}.${timestamps[lastTimestampIndex]}`),
|
||||
db.listRemoveAll(`post:${pid}:diffs`, timestamps[lastTimestampIndex]),
|
||||
@@ -102,6 +103,7 @@ module.exports = function (Posts) {
|
||||
|
||||
/* eslint-disable no-await-in-loop */
|
||||
for (let i = lastTimestampIndex; i >= timestampIndex; --i) {
|
||||
// Recreate older diffs with skipping the deleted diff
|
||||
const newContentIndex = i === timestampIndex ? i - 2 : i - 1;
|
||||
const timestampToUpdate = newContentIndex + 1;
|
||||
const newContent = newContentIndex < 0 ? postContent : versionContents[timestamps[newContentIndex]];
|
||||
|
||||
@@ -647,6 +647,29 @@ describe('Post\'s', function () {
|
||||
done();
|
||||
});
|
||||
});
|
||||
|
||||
it('should not delete first diff of a post', async function () {
|
||||
const timestamps = await posts.diffs.list(replyPid);
|
||||
await assert.rejects(async () => {
|
||||
await posts.diffs.delete(replyPid, timestamps[0], voterUid);
|
||||
}, {
|
||||
message: '[[error:invalid-data]]',
|
||||
});
|
||||
});
|
||||
|
||||
it('should delete a post diff', async function () {
|
||||
await socketPosts.edit({ uid: voterUid }, { pid: replyPid, content: 'another edit has been made' });
|
||||
await socketPosts.edit({ uid: voterUid }, { pid: replyPid, content: 'most recent edit' });
|
||||
const timestamp = (await posts.diffs.list(replyPid)).pop();
|
||||
await posts.diffs.delete(replyPid, timestamp, voterUid);
|
||||
const differentTimestamp = (await posts.diffs.list(replyPid)).pop();
|
||||
assert.notStrictEqual(timestamp, differentTimestamp);
|
||||
});
|
||||
|
||||
it('should load (oldest) diff and reconstruct post correctly after a diff deletion', async function () {
|
||||
const data = await posts.diffs.load(replyPid, 0, voterUid);
|
||||
assert.strictEqual(data.content, 'A reply to edit');
|
||||
});
|
||||
});
|
||||
|
||||
describe('move', function () {
|
||||
|
||||
Reference in New Issue
Block a user