test for editing a new caption onto an image
This commit is contained in:
parent
8f6bb86b92
commit
2973170e87
4 changed files with 202 additions and 10 deletions
|
@ -9,7 +9,7 @@ async function editMessage() {
|
||||||
// 3. Send all the things.
|
// 3. Send all the things.
|
||||||
|
|
||||||
// old code lies here
|
// old code lies here
|
||||||
let eventPart = 0 // TODO: what to do about eventPart when editing? probably just need to make sure that exactly 1 value of '1' remains in the database?
|
let eventPart = 0 // TODO: what to do about eventPart when editing? probably just need to make sure that exactly 1 value of '0' remains in the database?
|
||||||
for (const event of events) {
|
for (const event of events) {
|
||||||
const eventType = event.$type
|
const eventType = event.$type
|
||||||
/** @type {Pick<typeof event, Exclude<keyof event, "$type">> & { $type?: string }} */
|
/** @type {Pick<typeof event, Exclude<keyof event, "$type">> & { $type?: string }} */
|
||||||
|
|
|
@ -6,8 +6,6 @@ const passthrough = require("../../passthrough")
|
||||||
const { discord, sync, db } = passthrough
|
const { discord, sync, db } = passthrough
|
||||||
/** @type {import("./message-to-event")} */
|
/** @type {import("./message-to-event")} */
|
||||||
const messageToEvent = sync.require("../converters/message-to-event")
|
const messageToEvent = sync.require("../converters/message-to-event")
|
||||||
/** @type {import("../../matrix/api")} */
|
|
||||||
const api = sync.require("../../matrix/api")
|
|
||||||
/** @type {import("../actions/register-user")} */
|
/** @type {import("../actions/register-user")} */
|
||||||
const registerUser = sync.require("../actions/register-user")
|
const registerUser = sync.require("../actions/register-user")
|
||||||
/** @type {import("../actions/create-room")} */
|
/** @type {import("../actions/create-room")} */
|
||||||
|
@ -18,8 +16,9 @@ const createRoom = sync.require("../actions/create-room")
|
||||||
* IMPORTANT: This may not have all the normal fields! The API documentation doesn't provide possible types, just says it's all optional!
|
* IMPORTANT: This may not have all the normal fields! The API documentation doesn't provide possible types, just says it's all optional!
|
||||||
* Since I don't have a spec, I will have to capture some real traffic and add it as test cases... I hope they don't change anything later...
|
* Since I don't have a spec, I will have to capture some real traffic and add it as test cases... I hope they don't change anything later...
|
||||||
* @param {import("discord-api-types/v10").APIGuild} guild
|
* @param {import("discord-api-types/v10").APIGuild} guild
|
||||||
|
* @param {import("../../matrix/api")} api simple-as-nails dependency injection for the matrix API
|
||||||
*/
|
*/
|
||||||
async function editToChanges(message, guild) {
|
async function editToChanges(message, guild, api) {
|
||||||
// Figure out what events we will be replacing
|
// Figure out what events we will be replacing
|
||||||
|
|
||||||
const roomID = db.prepare("SELECT room_id FROM channel_room WHERE channel_id = ?").pluck().get(message.channel_id)
|
const roomID = db.prepare("SELECT room_id FROM channel_room WHERE channel_id = ?").pluck().get(message.channel_id)
|
||||||
|
@ -76,7 +75,7 @@ async function editToChanges(message, guild) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// If we got this far, we could not pair it to an existing event, so it'll have to be a new one
|
// If we got this far, we could not pair it to an existing event, so it'll have to be a new one
|
||||||
eventsToSend.push(newe)
|
eventsToSend.push(newInnerContent[0])
|
||||||
shift()
|
shift()
|
||||||
}
|
}
|
||||||
// Anything remaining in oldEventRows is present in the old version only and should be redacted.
|
// Anything remaining in oldEventRows is present in the old version only and should be redacted.
|
||||||
|
@ -102,7 +101,7 @@ async function editToChanges(message, guild) {
|
||||||
eventsToRedact = eventsToRedact.map(e => e.event_id)
|
eventsToRedact = eventsToRedact.map(e => e.event_id)
|
||||||
eventsToReplace = eventsToReplace.map(e => ({oldID: e.old.event_id, new: eventToReplacementEvent(e.old.event_id, e.newFallbackContent, e.newInnerContent)}))
|
eventsToReplace = eventsToReplace.map(e => ({oldID: e.old.event_id, new: eventToReplacementEvent(e.old.event_id, e.newFallbackContent, e.newInnerContent)}))
|
||||||
|
|
||||||
return {eventsToReplace, eventsToRedact, eventsToSend}
|
return {eventsToReplace, eventsToRedact, eventsToSend, senderMxid}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -1,12 +1,30 @@
|
||||||
// @ts-check
|
|
||||||
|
|
||||||
const {test} = require("supertape")
|
const {test} = require("supertape")
|
||||||
const {editToChanges} = require("./edit-to-changes")
|
const {editToChanges} = require("./edit-to-changes")
|
||||||
const data = require("../../test/data")
|
const data = require("../../test/data")
|
||||||
const Ty = require("../../types")
|
const Ty = require("../../types")
|
||||||
|
|
||||||
test("edit2changes: bot response", async t => {
|
test("edit2changes: bot response", async t => {
|
||||||
const {eventsToRedact, eventsToReplace, eventsToSend} = await editToChanges(data.message_update.bot_response, data.guild.general)
|
const {eventsToRedact, eventsToReplace, eventsToSend} = await editToChanges(data.message_update.bot_response, data.guild.general, {
|
||||||
|
async getJoinedMembers(roomID) {
|
||||||
|
t.equal(roomID, "!uCtjHhfGlYbVnPVlkG:cadence.moe")
|
||||||
|
return new Promise(resolve => {
|
||||||
|
setTimeout(() => {
|
||||||
|
resolve({
|
||||||
|
joined: {
|
||||||
|
"@cadence:cadence.moe": {
|
||||||
|
display_name: "cadence [they]",
|
||||||
|
avatar_url: "whatever"
|
||||||
|
},
|
||||||
|
"@_ooye_botrac4r:cadence.moe": {
|
||||||
|
display_name: "botrac4r",
|
||||||
|
avatar_url: "whatever"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
})
|
||||||
|
})
|
||||||
|
})
|
||||||
|
}
|
||||||
|
})
|
||||||
t.deepEqual(eventsToRedact, [])
|
t.deepEqual(eventsToRedact, [])
|
||||||
t.deepEqual(eventsToSend, [])
|
t.deepEqual(eventsToSend, [])
|
||||||
t.deepEqual(eventsToReplace, [{
|
t.deepEqual(eventsToReplace, [{
|
||||||
|
@ -39,8 +57,27 @@ test("edit2changes: bot response", async t => {
|
||||||
}])
|
}])
|
||||||
})
|
})
|
||||||
|
|
||||||
|
test("edit2changes: remove caption from image", async t => {
|
||||||
|
const {eventsToRedact, eventsToReplace, eventsToSend} = await editToChanges(data.message_update.removed_caption_from_image, data.guild.general, {})
|
||||||
|
t.deepEqual(eventsToRedact, ["$mtR8cJqM4fKno1bVsm8F4wUVqSntt2sq6jav1lyavuA"])
|
||||||
|
t.deepEqual(eventsToSend, [])
|
||||||
|
t.deepEqual(eventsToReplace, [])
|
||||||
|
})
|
||||||
|
|
||||||
|
test("edit2changes: add caption back to that image", async t => {
|
||||||
|
const {eventsToRedact, eventsToReplace, eventsToSend} = await editToChanges(data.message_update.added_caption_to_image, data.guild.general, {})
|
||||||
|
t.deepEqual(eventsToRedact, [])
|
||||||
|
t.deepEqual(eventsToSend, [{
|
||||||
|
$type: "m.room.message",
|
||||||
|
msgtype: "m.text",
|
||||||
|
body: "some text",
|
||||||
|
"m.mentions": {}
|
||||||
|
}])
|
||||||
|
t.deepEqual(eventsToReplace, [])
|
||||||
|
})
|
||||||
|
|
||||||
test("edit2changes: edit of reply to skull webp attachment with content", async t => {
|
test("edit2changes: edit of reply to skull webp attachment with content", async t => {
|
||||||
const {eventsToRedact, eventsToReplace, eventsToSend} = await editToChanges(data.message_update.edit_of_reply_to_skull_webp_attachment_with_content, data.guild.general)
|
const {eventsToRedact, eventsToReplace, eventsToSend} = await editToChanges(data.message_update.edit_of_reply_to_skull_webp_attachment_with_content, data.guild.general, {})
|
||||||
t.deepEqual(eventsToRedact, [])
|
t.deepEqual(eventsToRedact, [])
|
||||||
t.deepEqual(eventsToSend, [])
|
t.deepEqual(eventsToSend, [])
|
||||||
t.deepEqual(eventsToReplace, [{
|
t.deepEqual(eventsToReplace, [{
|
||||||
|
|
156
test/data.js
156
test/data.js
|
@ -867,6 +867,162 @@ module.exports = {
|
||||||
tts: false,
|
tts: false,
|
||||||
type: 0
|
type: 0
|
||||||
},
|
},
|
||||||
|
removed_caption_from_image: {
|
||||||
|
attachments: [
|
||||||
|
{
|
||||||
|
content_type: "image/png",
|
||||||
|
filename: "piper_2.png",
|
||||||
|
height: 163,
|
||||||
|
id: "1141501302497615912",
|
||||||
|
proxy_url: "https://media.discordapp.net/attachments/112760669178241024/1141501302497615912/piper_2.png",
|
||||||
|
size: 43231,
|
||||||
|
url: "https://cdn.discordapp.com/attachments/112760669178241024/1141501302497615912/piper_2.png",
|
||||||
|
width: 188
|
||||||
|
}
|
||||||
|
],
|
||||||
|
author: {
|
||||||
|
avatar: "47db1be7ab77e1d812a4573177af0692",
|
||||||
|
avatar_decoration: null,
|
||||||
|
discriminator: "0",
|
||||||
|
global_name: "wing",
|
||||||
|
id: "112890272819507200",
|
||||||
|
public_flags: 0,
|
||||||
|
username: ".wing."
|
||||||
|
},
|
||||||
|
channel_id: "112760669178241024",
|
||||||
|
components: [],
|
||||||
|
content: "",
|
||||||
|
edited_timestamp: "2023-08-16T22:38:43.075298+00:00",
|
||||||
|
embeds: [],
|
||||||
|
flags: 0,
|
||||||
|
guild_id: "112760669178241024",
|
||||||
|
id: "1141501302736695316",
|
||||||
|
member: {
|
||||||
|
avatar: null,
|
||||||
|
communication_disabled_until: null,
|
||||||
|
deaf: false,
|
||||||
|
flags: 0,
|
||||||
|
joined_at: "2015-11-08T12:25:38.461000+00:00",
|
||||||
|
mute: false,
|
||||||
|
nick: "windfucker",
|
||||||
|
pending: false,
|
||||||
|
premium_since: null,
|
||||||
|
roles: [
|
||||||
|
"204427286542417920",
|
||||||
|
"118924814567211009",
|
||||||
|
"222168467627835392",
|
||||||
|
"265239342648131584",
|
||||||
|
"303273332248412160",
|
||||||
|
"303319030163439616",
|
||||||
|
"305775031223320577",
|
||||||
|
"318243902521868288",
|
||||||
|
"349185088157777920",
|
||||||
|
"378402925128712193",
|
||||||
|
"391076926573510656",
|
||||||
|
"230462991751970827",
|
||||||
|
"392141548932038658",
|
||||||
|
"397533096012152832",
|
||||||
|
"454567553738473472",
|
||||||
|
"482658335536185357",
|
||||||
|
"482860581670486028",
|
||||||
|
"495384759074160642",
|
||||||
|
"638988388740890635",
|
||||||
|
"764071315388629012",
|
||||||
|
"373336013109461013",
|
||||||
|
"872274377150980116",
|
||||||
|
"1034022405275910164",
|
||||||
|
"790724320824655873",
|
||||||
|
"1040735082610167858",
|
||||||
|
"1123730787653660742",
|
||||||
|
"1070177137367208036"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
mention_everyone: false,
|
||||||
|
mention_roles: [],
|
||||||
|
mentions: [],
|
||||||
|
pinned: false,
|
||||||
|
timestamp: "2023-08-16T22:38:38.641000+00:00",
|
||||||
|
tts: false,
|
||||||
|
type: 0
|
||||||
|
},
|
||||||
|
added_caption_to_image: {
|
||||||
|
attachments: [
|
||||||
|
{
|
||||||
|
content_type: "image/png",
|
||||||
|
filename: "piper_2.png",
|
||||||
|
height: 163,
|
||||||
|
id: "1141501302497615912",
|
||||||
|
proxy_url: "https://media.discordapp.net/attachments/112760669178241024/1141501302497615912/piper_2.png",
|
||||||
|
size: 43231,
|
||||||
|
url: "https://cdn.discordapp.com/attachments/112760669178241024/1141501302497615912/piper_2.png",
|
||||||
|
width: 188
|
||||||
|
}
|
||||||
|
],
|
||||||
|
author: {
|
||||||
|
avatar: "47db1be7ab77e1d812a4573177af0692",
|
||||||
|
avatar_decoration: null,
|
||||||
|
discriminator: "0",
|
||||||
|
global_name: "wing",
|
||||||
|
id: "112890272819507200",
|
||||||
|
public_flags: 0,
|
||||||
|
username: ".wing."
|
||||||
|
},
|
||||||
|
channel_id: "112760669178241024",
|
||||||
|
components: [],
|
||||||
|
content: "some text",
|
||||||
|
edited_timestamp: "2023-08-17T00:13:18.620975+00:00",
|
||||||
|
embeds: [],
|
||||||
|
flags: 0,
|
||||||
|
guild_id: "112760669178241024",
|
||||||
|
id: "1141501302736695317",
|
||||||
|
member: {
|
||||||
|
avatar: null,
|
||||||
|
communication_disabled_until: null,
|
||||||
|
deaf: false,
|
||||||
|
flags: 0,
|
||||||
|
joined_at: "2015-11-08T12:25:38.461000+00:00",
|
||||||
|
mute: false,
|
||||||
|
nick: "windfucker",
|
||||||
|
pending: false,
|
||||||
|
premium_since: null,
|
||||||
|
roles: [
|
||||||
|
"204427286542417920",
|
||||||
|
"118924814567211009",
|
||||||
|
"222168467627835392",
|
||||||
|
"265239342648131584",
|
||||||
|
"303273332248412160",
|
||||||
|
"303319030163439616",
|
||||||
|
"305775031223320577",
|
||||||
|
"318243902521868288",
|
||||||
|
"349185088157777920",
|
||||||
|
"378402925128712193",
|
||||||
|
"391076926573510656",
|
||||||
|
"230462991751970827",
|
||||||
|
"392141548932038658",
|
||||||
|
"397533096012152832",
|
||||||
|
"454567553738473472",
|
||||||
|
"482658335536185357",
|
||||||
|
"482860581670486028",
|
||||||
|
"495384759074160642",
|
||||||
|
"638988388740890635",
|
||||||
|
"764071315388629012",
|
||||||
|
"373336013109461013",
|
||||||
|
"872274377150980116",
|
||||||
|
"1034022405275910164",
|
||||||
|
"790724320824655873",
|
||||||
|
"1040735082610167858",
|
||||||
|
"1123730787653660742",
|
||||||
|
"1070177137367208036"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
mention_everyone: false,
|
||||||
|
mention_roles: [],
|
||||||
|
mentions: [],
|
||||||
|
pinned: false,
|
||||||
|
timestamp: "2023-08-16T22:38:38.641000+00:00",
|
||||||
|
tts: false,
|
||||||
|
type: 0
|
||||||
|
},
|
||||||
edit_of_reply_to_skull_webp_attachment_with_content: {
|
edit_of_reply_to_skull_webp_attachment_with_content: {
|
||||||
type: 19,
|
type: 19,
|
||||||
tts: false,
|
tts: false,
|
||||||
|
|
Loading…
Reference in a new issue