100% edit-to-changes code coverage
This commit is contained in:
		
							parent
							
								
									8c4e16e255
								
							
						
					
					
						commit
						7780ee806a
					
				
					 5 changed files with 74 additions and 4 deletions
				
			
		| 
						 | 
				
			
			@ -24,7 +24,7 @@ async function editMessage(message, guild) {
 | 
			
		|||
		await api.sendEvent(roomID, eventType, newContentWithoutType, senderMxid)
 | 
			
		||||
		// Ensure the database is up to date.
 | 
			
		||||
		// The columns are event_id, event_type, event_subtype, message_id, channel_id, part, source. Only event_subtype could potentially be changed by a replacement event.
 | 
			
		||||
		const subtype = newContentWithoutType.msgtype ?? null
 | 
			
		||||
		const subtype = newContentWithoutType.msgtype || null
 | 
			
		||||
		db.prepare("UPDATE event_message SET event_subtype = ? WHERE event_id = ?").run(subtype, oldID)
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -23,7 +23,7 @@ async function editToChanges(message, guild, api) {
 | 
			
		|||
 | 
			
		||||
	const roomID = db.prepare("SELECT room_id FROM channel_room WHERE channel_id = ?").pluck().get(message.channel_id)
 | 
			
		||||
	/** @type {string?} */
 | 
			
		||||
	let senderMxid = db.prepare("SELECT mxid FROM sim WHERE discord_id = ?").pluck().get(message.author.id) ?? null
 | 
			
		||||
	let senderMxid = db.prepare("SELECT mxid FROM sim WHERE discord_id = ?").pluck().get(message.author.id) || null
 | 
			
		||||
	if (senderMxid) {
 | 
			
		||||
		const senderIsInRoom = db.prepare("SELECT * FROM sim_member WHERE room_id = ? and mxid = ?").get(roomID, senderMxid)
 | 
			
		||||
		if (!senderIsInRoom) {
 | 
			
		||||
| 
						 | 
				
			
			@ -66,7 +66,7 @@ async function editToChanges(message, guild, api) {
 | 
			
		|||
		// Find a new event to pair it with...
 | 
			
		||||
		for (let i = 0; i < oldEventRows.length; i++) {
 | 
			
		||||
			const olde = oldEventRows[i]
 | 
			
		||||
			if (olde.event_type === newe.$type && olde.event_subtype === (newe.msgtype ?? null)) { // The spec does allow subtypes to change, so I can change this condition later if I want to
 | 
			
		||||
			if (olde.event_type === newe.$type && olde.event_subtype === (newe.msgtype || null)) { // The spec does allow subtypes to change, so I can change this condition later if I want to
 | 
			
		||||
				// Found one!
 | 
			
		||||
				// Set up the pairing
 | 
			
		||||
				eventsToReplace.push({
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -103,6 +103,32 @@ test("edit2changes: add caption back to that image", async t => {
 | 
			
		|||
	t.deepEqual(eventsToReplace, [])
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
test("edit2changes: stickers and attachments are not changed, only the content can be edited", async t => {
 | 
			
		||||
	const {eventsToRedact, eventsToReplace, eventsToSend} = await editToChanges(data.message_update.edited_content_with_sticker_and_attachments, data.guild.general, {})
 | 
			
		||||
	t.deepEqual(eventsToRedact, [])
 | 
			
		||||
	t.deepEqual(eventsToSend, [])
 | 
			
		||||
	t.deepEqual(eventsToReplace, [{
 | 
			
		||||
		oldID: "$lnAF9IosAECTnlv9p2e18FG8rHn-JgYKHEHIh5qdFv4",
 | 
			
		||||
		newContent: {
 | 
			
		||||
			$type: "m.room.message",
 | 
			
		||||
			msgtype: "m.text",
 | 
			
		||||
			body: "* only the content can be edited",
 | 
			
		||||
			"m.mentions": {},
 | 
			
		||||
			// *** Replaced With: ***
 | 
			
		||||
			"m.new_content": {
 | 
			
		||||
				msgtype: "m.text",
 | 
			
		||||
				body: "only the content can be edited",
 | 
			
		||||
				"m.mentions": {}
 | 
			
		||||
			},
 | 
			
		||||
			"m.relates_to": {
 | 
			
		||||
				rel_type: "m.replace",
 | 
			
		||||
				event_id: "$lnAF9IosAECTnlv9p2e18FG8rHn-JgYKHEHIh5qdFv4"
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
	}])
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
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, {})
 | 
			
		||||
	t.deepEqual(eventsToRedact, [])
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -83,7 +83,10 @@ INSERT INTO event_message (event_id, event_type, event_subtype, message_id, chan
 | 
			
		|||
('$vgTKOR5ZTYNMKaS7XvgEIDaOWZtVCEyzLLi5Pc5Gz4M', 'm.room.message', 'm.text', '1128084851279536279', '112760669178241024', 0, 1),
 | 
			
		||||
('$YUJFa5j0ZJe7PUvD2DykRt9g51RoadUEYmuJLdSEbJ0', 'm.room.message', 'm.image', '1128084851279536279', '112760669178241024', 1, 1),
 | 
			
		||||
('$oLyUTyZ_7e_SUzGNWZKz880ll9amLZvXGbArJCKai2Q', 'm.room.message', 'm.text', '1128084748338741392', '112760669178241024', 0, 1),
 | 
			
		||||
('$FchUVylsOfmmbj-VwEs5Z9kY49_dt2zd0vWfylzy5Yo', 'm.room.message', 'm.text', '1143121514925928541', '1100319550446252084', 0, 1);
 | 
			
		||||
('$FchUVylsOfmmbj-VwEs5Z9kY49_dt2zd0vWfylzy5Yo', 'm.room.message', 'm.text', '1143121514925928541', '1100319550446252084', 0, 1),
 | 
			
		||||
('$lnAF9IosAECTnlv9p2e18FG8rHn-JgYKHEHIh5qdFv4', 'm.room.message', 'm.text', '1106366167788044450', '122155380120748034', 0, 1),
 | 
			
		||||
('$Ijf1MFCD39ktrNHxrA-i2aKoRWNYdAV2ZXYQeiZIgEU', 'm.room.message', 'm.image', '1106366167788044450', '122155380120748034', 0, 0),
 | 
			
		||||
('$f9cjKiacXI9qPF_nUAckzbiKnJEi0LM399kOkhdd8f8', 'm.sticker', NULL, '1106366167788044450', '122155380120748034', 0, 0);
 | 
			
		||||
 | 
			
		||||
INSERT INTO file (discord_url, mxc_url) VALUES
 | 
			
		||||
('https://cdn.discordapp.com/attachments/497161332244742154/1124628646431297546/image.png', 'mxc://cadence.moe/qXoZktDqNtEGuOCZEADAMvhM'),
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										41
									
								
								test/data.js
									
										
									
									
									
								
							
							
						
						
									
										41
									
								
								test/data.js
									
										
									
									
									
								
							| 
						 | 
				
			
			@ -1250,6 +1250,47 @@ module.exports = {
 | 
			
		|||
			tts: false,
 | 
			
		||||
			type: 0
 | 
			
		||||
		},
 | 
			
		||||
		edited_content_with_sticker_and_attachments: {
 | 
			
		||||
			id: "1106366167788044450",
 | 
			
		||||
			type: 0,
 | 
			
		||||
			content: "only the content can be edited",
 | 
			
		||||
			channel_id: "122155380120748034",
 | 
			
		||||
			author: {
 | 
			
		||||
				id: "113340068197859328",
 | 
			
		||||
				username: "Cookie 🍪",
 | 
			
		||||
				global_name: null,
 | 
			
		||||
				display_name: null,
 | 
			
		||||
				avatar: "b48302623a12bc7c59a71328f72ccb39",
 | 
			
		||||
				discriminator: "7766",
 | 
			
		||||
				public_flags: 128,
 | 
			
		||||
				avatar_decoration: null
 | 
			
		||||
			},
 | 
			
		||||
			attachments: [{
 | 
			
		||||
				id: "1106366167486038016",
 | 
			
		||||
				filename: "image.png",
 | 
			
		||||
				size: 127373,
 | 
			
		||||
				url: "https://cdn.discordapp.com/attachments/122155380120748034/1106366167486038016/image.png",
 | 
			
		||||
				proxy_url: "https://media.discordapp.net/attachments/122155380120748034/1106366167486038016/image.png",
 | 
			
		||||
				width: 333,
 | 
			
		||||
				height: 287,
 | 
			
		||||
				content_type: "image/png"
 | 
			
		||||
			}],
 | 
			
		||||
			embeds: [],
 | 
			
		||||
			mentions: [],
 | 
			
		||||
			mention_roles: [],
 | 
			
		||||
			pinned: false,
 | 
			
		||||
			mention_everyone: false,
 | 
			
		||||
			tts: false,
 | 
			
		||||
			timestamp: "2023-05-11T23:44:09.690000+00:00",
 | 
			
		||||
			edited_timestamp: "2023-05-11T23:44:19.690000+00:00",
 | 
			
		||||
			flags: 0,
 | 
			
		||||
			components: [],
 | 
			
		||||
			sticker_items: [{
 | 
			
		||||
				id: "1106323941183717586",
 | 
			
		||||
				format_type: 1,
 | 
			
		||||
				name: "pomu puff"
 | 
			
		||||
			}]
 | 
			
		||||
		},
 | 
			
		||||
		edit_of_reply_to_skull_webp_attachment_with_content: {
 | 
			
		||||
			type: 19,
 | 
			
		||||
			tts: false,
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue