Test coverage for message info API
This commit is contained in:
		
							parent
							
								
									ab396bd581
								
							
						
					
					
						commit
						557b7653e2
					
				
					 3 changed files with 214 additions and 8 deletions
				
			
		|  | @ -37,6 +37,7 @@ as.router.get("/api/message", defineEventHandler(async event => { | ||||||
| 		})) | 		})) | ||||||
| 	)) | 	)) | ||||||
| 
 | 
 | ||||||
|  | 	/* c8 ignore next */ | ||||||
| 	const primary = events.find(e => e.metadata.part === 0) || events[0] | 	const primary = events.find(e => e.metadata.part === 0) || events[0] | ||||||
| 	const mxid = primary.metadata.sender | 	const mxid = primary.metadata.sender | ||||||
| 	const source = primary.metadata.source === 0 ? "matrix" : "discord" | 	const source = primary.metadata.source === 0 ? "matrix" : "discord" | ||||||
|  |  | ||||||
|  | @ -1,19 +1,219 @@ | ||||||
| // @ts-check
 | // @ts-check
 | ||||||
| 
 | 
 | ||||||
| const assert = require("assert/strict") | const assert = require("assert/strict") | ||||||
| const tryToCatch = require("try-to-catch") |  | ||||||
| const {router, test} = require("../../../test/web") | const {router, test} = require("../../../test/web") | ||||||
| 
 | 
 | ||||||
| test("web info: 404 when message does not exist", async t => { | test("web info: returns 404 when message doesn't exist", async t => { | ||||||
| 	const res = await router.test("get", "/api/message?message_id=1", { | 	const res = await router.test("get", "/api/message?message_id=1") | ||||||
|  | 	assert(res instanceof Response) | ||||||
|  | 	t.equal(res.status, 404) | ||||||
|  | }) | ||||||
|  | 
 | ||||||
|  | test("web info: returns data for a matrix message and profile", async t => { | ||||||
|  | 	let called = 0 | ||||||
|  | 	const raw = { | ||||||
|  | 		type: "m.room.message", | ||||||
|  | 		room_id: "!qzDBLKlildpzrrOnFZ:cadence.moe", | ||||||
|  | 		sender: "@cadence:cadence.moe", | ||||||
|  | 		content: { | ||||||
|  | 			msgtype: "m.text", | ||||||
|  | 			body: "testing :heart_pink: :heart_pink: ", | ||||||
|  | 			format: "org.matrix.custom.html", | ||||||
|  | 			formatted_body: "testing <img data-mx-emoticon=\"\" src=\"mxc://cadence.moe/AyAhnRNjWyFhJYTRibYwQpvf\" alt=\":heart_pink:\" title=\":heart_pink:\" height=\"32\" vertical-align=\"middle\" /> <img data-mx-emoticon=\"\" src=\"mxc://cadence.moe/AyAhnRNjWyFhJYTRibYwQpvf\" alt=\":heart_pink:\" title=\":heart_pink:\" height=\"32\" vertical-align=\"middle\" />" | ||||||
|  | 		}, | ||||||
|  | 		origin_server_ts: 1739312945302, | ||||||
|  | 		unsigned: { | ||||||
|  | 			membership: "join", | ||||||
|  | 			age: 10063702303 | ||||||
|  | 		}, | ||||||
|  | 		event_id: "$51gH61p_eJc2RylOdE2lAr4-ogP7dS0WJI62lCFzBvk", | ||||||
|  | 		user_id: "@cadence:cadence.moe", | ||||||
|  | 		age: 10063702303 | ||||||
|  | 	} | ||||||
|  | 	const res = await router.test("get", "/api/message?message_id=1339000288144658482", { | ||||||
| 		api: { | 		api: { | ||||||
|  | 			// @ts-ignore - returning static data when method could be called with a different typescript generic
 | ||||||
| 			async getEvent(roomID, eventID) { | 			async getEvent(roomID, eventID) { | ||||||
|  | 				called++ | ||||||
|  | 				t.equal(roomID, "!qzDBLKlildpzrrOnFZ:cadence.moe") | ||||||
|  | 				t.equal(eventID, "$51gH61p_eJc2RylOdE2lAr4-ogP7dS0WJI62lCFzBvk") | ||||||
|  | 				return raw | ||||||
|  | 			}, | ||||||
|  | 			async getProfile(mxid) { | ||||||
|  | 				called++ | ||||||
|  | 				t.equal(mxid, "@cadence:cadence.moe") | ||||||
|  | 				return { | ||||||
|  | 					displayname: "okay 🤍 yay 🤍" | ||||||
|  | 				} | ||||||
| 			} | 			} | ||||||
| 		} | 		} | ||||||
| 	}) | 	}) | ||||||
| 	t.fail("test not written") | 	t.deepEqual(res, { | ||||||
|  | 		source: "matrix", | ||||||
|  | 		matrix_author: { | ||||||
|  | 			displayname: "okay 🤍 yay 🤍", | ||||||
|  | 			avatar_url: null, | ||||||
|  | 			mxid: "@cadence:cadence.moe" | ||||||
|  | 		}, | ||||||
|  | 		events: [{ | ||||||
|  | 			metadata: { | ||||||
|  | 			  event_id: "$51gH61p_eJc2RylOdE2lAr4-ogP7dS0WJI62lCFzBvk", | ||||||
|  | 			  event_subtype: "m.text", | ||||||
|  | 			  event_type: "m.room.message", | ||||||
|  | 			  part: 0, | ||||||
|  | 			  reaction_part: 0, | ||||||
|  | 			  room_id: "!qzDBLKlildpzrrOnFZ:cadence.moe", | ||||||
|  | 			  sender: "@cadence:cadence.moe", | ||||||
|  | 			  source: 0 | ||||||
|  | 			}, | ||||||
|  | 			raw | ||||||
|  | 		}] | ||||||
|  | 	}) | ||||||
|  | 	t.equal(called, 2) | ||||||
| }) | }) | ||||||
| 
 | 
 | ||||||
| test("web info: returns data when message exists", async t => { | test("web info: returns data for a matrix message without profile", async t => { | ||||||
| 	t.fail("test not written") | 	let called = 0 | ||||||
|  | 	const raw = { | ||||||
|  | 		type: "m.room.message", | ||||||
|  | 		room_id: "!qzDBLKlildpzrrOnFZ:cadence.moe", | ||||||
|  | 		sender: "@cadence:cadence.moe", | ||||||
|  | 		content: { | ||||||
|  | 			msgtype: "m.text", | ||||||
|  | 			body: "testing :heart_pink: :heart_pink: ", | ||||||
|  | 			format: "org.matrix.custom.html", | ||||||
|  | 			formatted_body: "testing <img data-mx-emoticon=\"\" src=\"mxc://cadence.moe/AyAhnRNjWyFhJYTRibYwQpvf\" alt=\":heart_pink:\" title=\":heart_pink:\" height=\"32\" vertical-align=\"middle\" /> <img data-mx-emoticon=\"\" src=\"mxc://cadence.moe/AyAhnRNjWyFhJYTRibYwQpvf\" alt=\":heart_pink:\" title=\":heart_pink:\" height=\"32\" vertical-align=\"middle\" />" | ||||||
|  | 		}, | ||||||
|  | 		origin_server_ts: 1739312945302, | ||||||
|  | 		unsigned: { | ||||||
|  | 			membership: "join", | ||||||
|  | 			age: 10063702303 | ||||||
|  | 		}, | ||||||
|  | 		event_id: "$51gH61p_eJc2RylOdE2lAr4-ogP7dS0WJI62lCFzBvk", | ||||||
|  | 		user_id: "@cadence:cadence.moe", | ||||||
|  | 		age: 10063702303 | ||||||
|  | 	} | ||||||
|  | 	const res = await router.test("get", "/api/message?message_id=1339000288144658482", { | ||||||
|  | 		api: { | ||||||
|  | 			// @ts-ignore - returning static data when method could be called with a different typescript generic
 | ||||||
|  | 			async getEvent(roomID, eventID) { | ||||||
|  | 				called++ | ||||||
|  | 				t.equal(roomID, "!qzDBLKlildpzrrOnFZ:cadence.moe") | ||||||
|  | 				t.equal(eventID, "$51gH61p_eJc2RylOdE2lAr4-ogP7dS0WJI62lCFzBvk") | ||||||
|  | 				return raw | ||||||
|  | 			} | ||||||
|  | 		} | ||||||
|  | 	}) | ||||||
|  | 	t.deepEqual(res, { | ||||||
|  | 		source: "matrix", | ||||||
|  | 		matrix_author: { | ||||||
|  | 			displayname: "@cadence:cadence.moe", | ||||||
|  | 			avatar_url: null, | ||||||
|  | 			mxid: "@cadence:cadence.moe" | ||||||
|  | 		}, | ||||||
|  | 		events: [{ | ||||||
|  | 			metadata: { | ||||||
|  | 			  event_id: "$51gH61p_eJc2RylOdE2lAr4-ogP7dS0WJI62lCFzBvk", | ||||||
|  | 			  event_subtype: "m.text", | ||||||
|  | 			  event_type: "m.room.message", | ||||||
|  | 			  part: 0, | ||||||
|  | 			  reaction_part: 0, | ||||||
|  | 			  room_id: "!qzDBLKlildpzrrOnFZ:cadence.moe", | ||||||
|  | 			  sender: "@cadence:cadence.moe", | ||||||
|  | 			  source: 0 | ||||||
|  | 			}, | ||||||
|  | 			raw | ||||||
|  | 		}] | ||||||
|  | 	}) | ||||||
|  | 	t.equal(called, 1) | ||||||
|  | }) | ||||||
|  | 
 | ||||||
|  | test("web info: returns data for a discord message", async t => { | ||||||
|  | 	let called = 0 | ||||||
|  | 	const raw1 = { | ||||||
|  | 		type: "m.room.message", | ||||||
|  | 		sender: "@_ooye_accavish:cadence.moe", | ||||||
|  | 		content: { | ||||||
|  | 			"m.mentions": {}, | ||||||
|  | 			msgtype: "m.text", | ||||||
|  | 			body: "brony music mentioned on wikipedia's did you know and also unrelated cat pic" | ||||||
|  | 		}, | ||||||
|  | 		origin_server_ts: 1749377203735, | ||||||
|  | 		unsigned: { | ||||||
|  | 			membership: "join", | ||||||
|  | 			age: 119 | ||||||
|  | 		}, | ||||||
|  | 		event_id: "$AfrB8hzXkDMvuoWjSZkDdFYomjInWH7jMBPkwQMN8AI", | ||||||
|  | 		room_id: "!kLRqKKUQXcibIMtOpl:cadence.moe" | ||||||
|  | 	} | ||||||
|  | 	const raw2 = { | ||||||
|  | 		type: "m.room.message", | ||||||
|  | 		sender: "@_ooye_accavish:cadence.moe", | ||||||
|  | 		content: { | ||||||
|  | 			"m.mentions": {}, | ||||||
|  | 			msgtype: "m.image", | ||||||
|  | 			url: "mxc://cadence.moe/ABOMymxHcpVeecHvmSIYmYXx", | ||||||
|  | 			external_url: "https://bridge.cadence.moe/download/discordcdn/112760669178241024/1381212840710504448/image.png", | ||||||
|  | 			body: "image.png", | ||||||
|  | 			filename: "image.png", | ||||||
|  | 			info: { | ||||||
|  | 				mimetype: "image/png", | ||||||
|  | 				w: 966, | ||||||
|  | 				h: 368, | ||||||
|  | 				size: 166060 | ||||||
|  | 			} | ||||||
|  | 		}, | ||||||
|  | 		origin_server_ts: 1749377203789, | ||||||
|  | 		unsigned: { | ||||||
|  | 			membership: "join", | ||||||
|  | 			age: 65 | ||||||
|  | 		}, | ||||||
|  | 		event_id: "$43baKEhJfD-RlsFQi0LB16Zxd8yMqp0HSVL00TDQOqM", | ||||||
|  | 		room_id: "!kLRqKKUQXcibIMtOpl:cadence.moe" | ||||||
|  | 	} | ||||||
|  | 	const res = await router.test("get", "/api/message?message_id=1381212840957972480", { | ||||||
|  | 		api: { | ||||||
|  | 			// @ts-ignore - returning static data when method could be called with a different typescript generic
 | ||||||
|  | 			async getEvent(roomID, eventID) { | ||||||
|  | 				called++ | ||||||
|  | 				t.equal(roomID, "!kLRqKKUQXcibIMtOpl:cadence.moe") | ||||||
|  | 				if (eventID === raw1.event_id) { | ||||||
|  | 					return raw1 | ||||||
|  | 				} else { | ||||||
|  | 					assert(eventID === raw2.event_id) | ||||||
|  | 					return raw2 | ||||||
|  | 				} | ||||||
|  | 			} | ||||||
|  | 		} | ||||||
|  | 	}) | ||||||
|  | 	t.deepEqual(res, { | ||||||
|  | 		source: "discord", | ||||||
|  | 		matrix_author: undefined, | ||||||
|  | 		events: [{ | ||||||
|  | 			metadata: { | ||||||
|  | 			  event_id: "$AfrB8hzXkDMvuoWjSZkDdFYomjInWH7jMBPkwQMN8AI", | ||||||
|  | 			  event_subtype: "m.text", | ||||||
|  | 			  event_type: "m.room.message", | ||||||
|  | 			  part: 0, | ||||||
|  | 			  reaction_part: 1, | ||||||
|  | 			  room_id: "!kLRqKKUQXcibIMtOpl:cadence.moe", | ||||||
|  | 			  sender: "@_ooye_accavish:cadence.moe", | ||||||
|  | 			  source: 1 | ||||||
|  | 			}, | ||||||
|  | 			raw: raw1 | ||||||
|  | 		}, { | ||||||
|  | 			metadata: { | ||||||
|  | 				event_id: "$43baKEhJfD-RlsFQi0LB16Zxd8yMqp0HSVL00TDQOqM", | ||||||
|  | 				event_subtype: "m.image", | ||||||
|  | 				event_type: "m.room.message", | ||||||
|  | 				part: 1, | ||||||
|  | 				reaction_part: 0, | ||||||
|  | 				room_id: "!kLRqKKUQXcibIMtOpl:cadence.moe", | ||||||
|  | 				sender: "@_ooye_accavish:cadence.moe", | ||||||
|  | 				source: 1 | ||||||
|  | 			}, | ||||||
|  | 			raw: raw2 | ||||||
|  | 		}] | ||||||
|  | 	}) | ||||||
|  | 	t.equal(called, 2) | ||||||
| }) | }) | ||||||
|  |  | ||||||
|  | @ -70,7 +70,9 @@ INSERT INTO message_channel (message_id, channel_id) VALUES | ||||||
| ('1278002262400176128', '1100319550446252084'), | ('1278002262400176128', '1100319550446252084'), | ||||||
| ('1278001833876525057', '1100319550446252084'), | ('1278001833876525057', '1100319550446252084'), | ||||||
| ('1191567971970191490', '176333891320283136'), | ('1191567971970191490', '176333891320283136'), | ||||||
| ('1144874214311067708', '687028734322147344'); | ('1144874214311067708', '687028734322147344'), | ||||||
|  | ('1339000288144658482', '176333891320283136'), | ||||||
|  | ('1381212840957972480', '112760669178241024'); | ||||||
| 
 | 
 | ||||||
| INSERT INTO event_message (event_id, event_type, event_subtype, message_id, part, reaction_part, source) VALUES | INSERT INTO event_message (event_id, event_type, event_subtype, message_id, part, reaction_part, source) VALUES | ||||||
| ('$X16nfVks1wsrhq4E9SSLiqrf2N8KD0erD0scZG7U5xg', 'm.room.message', 'm.text', '1126786462646550579', 0, 0, 1), | ('$X16nfVks1wsrhq4E9SSLiqrf2N8KD0erD0scZG7U5xg', 'm.room.message', 'm.text', '1126786462646550579', 0, 0, 1), | ||||||
|  | @ -110,7 +112,10 @@ INSERT INTO event_message (event_id, event_type, event_subtype, message_id, part | ||||||
| ('$W1nsDhNIojWrcQOdnOD9RaEvrz2qyZErQoNhPRs1nK4', 'm.room.message', 'm.text', '1273743950028607530', 0, 0, 0), | ('$W1nsDhNIojWrcQOdnOD9RaEvrz2qyZErQoNhPRs1nK4', 'm.room.message', 'm.text', '1273743950028607530', 0, 0, 0), | ||||||
| ('$UTqiL3Zj3FC4qldxRLggN1fhygpKl8sZ7XGY5f9MNbF', 'm.room.message', 'm.text', '1278002262400176128', 0, 0, 1), | ('$UTqiL3Zj3FC4qldxRLggN1fhygpKl8sZ7XGY5f9MNbF', 'm.room.message', 'm.text', '1278002262400176128', 0, 0, 1), | ||||||
| ('$aLVZyiC3HlOu-prCSIaXlQl68I8leUdnPFiCwkgn6qM', 'm.room.message', 'm.text', '1278001833876525057', 0, 0, 1), | ('$aLVZyiC3HlOu-prCSIaXlQl68I8leUdnPFiCwkgn6qM', 'm.room.message', 'm.text', '1278001833876525057', 0, 0, 1), | ||||||
| ('$tBIT8mO7XTTCgIINyiAIy6M2MSoPAdJenRl_RLyYuaE', 'm.room.message', 'm.text', '1191567971970191490', 0, 0, 1); | ('$tBIT8mO7XTTCgIINyiAIy6M2MSoPAdJenRl_RLyYuaE', 'm.room.message', 'm.text', '1191567971970191490', 0, 0, 1), | ||||||
|  | ('$51gH61p_eJc2RylOdE2lAr4-ogP7dS0WJI62lCFzBvk', 'm.room.message', 'm.text', '1339000288144658482', 0, 0, 0), | ||||||
|  | ('$AfrB8hzXkDMvuoWjSZkDdFYomjInWH7jMBPkwQMN8AI', 'm.room.message', 'm.text', '1381212840957972480', 0, 1, 1), | ||||||
|  | ('$43baKEhJfD-RlsFQi0LB16Zxd8yMqp0HSVL00TDQOqM', 'm.room.message', 'm.image', '1381212840957972480', 1, 0, 1); | ||||||
| 
 | 
 | ||||||
| INSERT INTO file (discord_url, mxc_url) VALUES | INSERT INTO file (discord_url, mxc_url) VALUES | ||||||
| ('https://cdn.discordapp.com/attachments/497161332244742154/1124628646431297546/image.png', 'mxc://cadence.moe/qXoZktDqNtEGuOCZEADAMvhM'), | ('https://cdn.discordapp.com/attachments/497161332244742154/1124628646431297546/image.png', 'mxc://cadence.moe/qXoZktDqNtEGuOCZEADAMvhM'), | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue