diff --git a/src/web/routes/info.js b/src/web/routes/info.js
index 1ed615b..b70ef84 100644
--- a/src/web/routes/info.js
+++ b/src/web/routes/info.js
@@ -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 mxid = primary.metadata.sender
const source = primary.metadata.source === 0 ? "matrix" : "discord"
diff --git a/src/web/routes/info.test.js b/src/web/routes/info.test.js
index 5188198..28dac3b 100644
--- a/src/web/routes/info.test.js
+++ b/src/web/routes/info.test.js
@@ -1,19 +1,219 @@
// @ts-check
const assert = require("assert/strict")
-const tryToCatch = require("try-to-catch")
const {router, test} = require("../../../test/web")
-test("web info: 404 when message does not exist", async t => {
- const res = await router.test("get", "/api/message?message_id=1", {
+test("web info: returns 404 when message doesn't exist", async t => {
+ 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
"
+ },
+ 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
+ },
+ 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 => {
- t.fail("test not written")
+test("web info: returns data for a matrix message without 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
"
+ },
+ 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)
})
diff --git a/test/ooye-test-data.sql b/test/ooye-test-data.sql
index caac692..2b66486 100644
--- a/test/ooye-test-data.sql
+++ b/test/ooye-test-data.sql
@@ -70,7 +70,9 @@ INSERT INTO message_channel (message_id, channel_id) VALUES
('1278002262400176128', '1100319550446252084'),
('1278001833876525057', '1100319550446252084'),
('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
('$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),
('$UTqiL3Zj3FC4qldxRLggN1fhygpKl8sZ7XGY5f9MNbF', 'm.room.message', 'm.text', '1278002262400176128', 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
('https://cdn.discordapp.com/attachments/497161332244742154/1124628646431297546/image.png', 'mxc://cadence.moe/qXoZktDqNtEGuOCZEADAMvhM'),