git » sdk » main » tree

[main] / test / TestImport.hx

package test;

import utest.Assert;

import borogove.Import;
import borogove.Message;
import borogove.JID;

class TestImport extends utest.Test {
	public function testOnAccount() {
		final accounts = [];

		final i = new Import(null);
		i.onAccount = (id) -> {
			accounts.push(id);
		};
		i.write("<server-data xmlns='urn:xmpp:pie:0' xmlns:ns0='urn:xmpp:pie:0'>");
		i.write("<host jid='capulet.com'>");
		i.write("<user name='juliet' />");
		i.write("</host>");
		i.write("<ns0:host jid='montague.net'>");
		i.write("<ns0:user name='romeo' />");
		i.write("</ns0:host>");
		i.write("</server-data>");

		Assert.equals(2, accounts.length);
		Assert.equals("juliet@capulet.com", accounts[0]);
		Assert.equals("romeo@montague.net", accounts[1]);
	}

	public function testOnChannel() {
		final channels = [];

		final i = new Import(null);
		i.onChannel = (id) -> {
			channels.push(id);
		};
		i.write("<server-data xmlns='urn:xmpp:pie:0'>");
		i.write("<component xmlns='urn:xmpp:pie:0#component' jid='capulet.com' type='muc'>");
		i.write("<item name='party' />");
		i.write("</component>");
		i.write("<component xmlns='urn:xmpp:pie:0#component' jid='other.capulet.com' type='other'>");
		i.write("<item name='party' />");
		i.write("</component>");
		i.write("</server-data>");

		Assert.equals(1, channels.length);
		Assert.equals("party@capulet.com", channels[0]);
	}

	public function testOnMamItem() {
		final items = [];

		final i = new Import(null);
		i.onMessage = (source, msg) -> {
			items.push(msg);
		};
		i.write("<server-data xmlns='urn:xmpp:pie:0'>");
		i.write("<host jid='capulet.com'>");
		i.write("<user name='juliet'>");
		i.write("<archive xmlns='urn:xmpp:pie:0#mam'>");
		i.write("<result xmlns='urn:xmpp:mam:2' id='mam-id-1'>");
		i.write("<forwarded xmlns='urn:xmpp:forward:0'>");
		i.write("<delay xmlns='urn:xmpp:delay' stamp='2023-10-27T10:00:00Z' />");
		i.write("<message xmlns='jabber:client' from='juliet@capulet.com/balcony' to='romeo@montague.net' id='msg-id-1'>");
		i.write("<body>Hello Romeo</body>");
		i.write("</message>");
		i.write("</forwarded>");
		i.write("</result>");
		i.write("</archive>");
		i.write("</user>");
		i.write("</host>");
		i.write("</server-data>");

		Assert.equals(1, items.length);
		final msg = items[0];
		Assert.equals("romeo@montague.net", msg.chatId);
		Assert.equals("juliet@capulet.com", msg.senderId);
		switch (msg.parsed) {
			case ChatMessageStanza(chatMsg):
				Assert.equals("Hello Romeo", chatMsg.body().toPlainText());
				Assert.equals("mam-id-1", chatMsg.serverId);
				Assert.equals("juliet@capulet.com", chatMsg.serverIdBy);
				Assert.equals("2023-10-27T10:00:00.001Z", chatMsg.timestamp);
				Assert.isFalse(chatMsg.isIncoming());
			default:
				Assert.fail("Expected ChatMessageStanza");
		}
	}

	public function testTargetAccount() {
		final items = [];

		final i = new Import("me@example.com");
		i.onMessage = (source, msg) -> {
			items.push(msg);
		};
		i.write("<server-data xmlns='urn:xmpp:pie:0'>");
		i.write("<host jid='capulet.com'>");
		i.write("<user name='juliet'>");
		i.write("<archive xmlns='urn:xmpp:pie:0#mam'>");
		i.write("<result xmlns='urn:xmpp:mam:2' id='mam-id-1'>");
		i.write("<forwarded xmlns='urn:xmpp:forward:0'>");
		i.write("<delay xmlns='urn:xmpp:delay' stamp='2023-10-27T10:00:00Z' />");
		i.write("<message xmlns='jabber:client' from='juliet@capulet.com/balcony' to='romeo@montague.net' id='msg-id-1'>");
		i.write("<body>Hello Romeo</body>");
		i.write("</message>");
		i.write("</forwarded>");
		i.write("</result>");
		i.write("</archive>");
		i.write("</user>");
		i.write("</host>");
		i.write("</server-data>");

		Assert.equals(1, items.length);
		final msg = items[0];
		Assert.equals("romeo@montague.net", msg.chatId);
		Assert.equals("me@example.com", msg.senderId);
		switch (msg.parsed) {
			case ChatMessageStanza(chatMsg):
				Assert.isFalse(chatMsg.isIncoming());
			default:
				Assert.fail("Expected ChatMessageStanza");
		}
	}

	public function testTimestampFixing() {
		final items = [];

		final i = new Import(null);
		i.onMessage = (source, msg) -> {
			items.push(msg);
		};
		i.write("<server-data xmlns='urn:xmpp:pie:0'>");
		i.write("<host jid='capulet.com'>");
		i.write("<user name='juliet'>");
		i.write("<archive xmlns='urn:xmpp:pie:0#mam'>");

		i.write("<result xmlns='urn:xmpp:mam:2' id='mam-id-1'>");
		i.write("<forwarded xmlns='urn:xmpp:forward:0'>");
		i.write("<delay xmlns='urn:xmpp:delay' stamp='2023-10-27T10:00:00Z' />");
		i.write("<message xmlns='jabber:client' from='juliet@capulet.com' to='romeo@montague.net' id='m1'><body>1</body></message>");
		i.write("</forwarded>");
		i.write("</result>");

		i.write("<result xmlns='urn:xmpp:mam:2' id='mam-id-2'>");
		i.write("<forwarded xmlns='urn:xmpp:forward:0'>");
		i.write("<delay xmlns='urn:xmpp:delay' stamp='2023-10-27T10:00:00Z' />");
		i.write("<message xmlns='jabber:client' from='juliet@capulet.com' to='romeo@montague.net' id='m2'><body>2</body></message>");
		i.write("</forwarded>");
		i.write("</result>");

		i.write("<result xmlns='urn:xmpp:mam:2' id='mam-id-3'>");
		i.write("<forwarded xmlns='urn:xmpp:forward:0'>");
		i.write("<delay xmlns='urn:xmpp:delay' stamp='2023-10-27T10:00:01Z' />");
		i.write("<message xmlns='jabber:client' from='juliet@capulet.com' to='romeo@montague.net' id='m3'><body>3</body></message>");
		i.write("</forwarded>");
		i.write("</result>");

		i.write("</archive>");
		i.write("</user>");
		i.write("</host>");
		i.write("</server-data>");

		Assert.equals(3, items.length);

		switch (items[0].parsed) {
			case ChatMessageStanza(m): Assert.equals("2023-10-27T10:00:00.001Z", m.timestamp);
			default: Assert.fail();
		}
		switch (items[1].parsed) {
			case ChatMessageStanza(m): Assert.equals("2023-10-27T10:00:00.002Z", m.timestamp);
			default: Assert.fail();
		}
		switch (items[2].parsed) {
			case ChatMessageStanza(m): Assert.equals("2023-10-27T10:00:01.001Z", m.timestamp);
			default: Assert.fail();
		}
	}
}