"use strict";

const expect = require("chai").expect;

const Msg = require("../../src/models/msg");
const User = require("../../src/models/user");

describe("Msg", function() {
	["from", "target"].forEach((prop) => {
		it(`should keep a copy of the original user in the \`${prop}\` property`, function() {
			const prefixLookup = {a: "&", o: "@"};
			const user = new User(
				{
					modes: ["o"],
					nick: "foo",
				},
				prefixLookup
			);
			const msg = new Msg({[prop]: user});

			// Mutating the user
			user.setModes(["a"], prefixLookup);
			user.nick = "bar";

			// Message's `.from`/etc. should still refer to the original user
			expect(msg[prop]).to.deep.equal({mode: "@", nick: "foo"});
		});
	});

	describe("#findPreview(link)", function() {
		const msg = new Msg({
			previews: [
				{
					body: "",
					head: "Example Domain",
					link: "https://example.org/",
					thumb: "",
					type: "link",
					shown: true,
				},
				{
					body: "",
					head: "The Lounge",
					link: "https://thelounge.chat/",
					thumb: "",
					type: "link",
					shown: true,
				},
			],
		});

		it("should find a preview given an existing link", function() {
			expect(msg.findPreview("https://thelounge.chat/").head).to.equal("The Lounge");
		});

		it("should not find a preview that does not exist", function() {
			expect(msg.findPreview("https://github.com/thelounge/thelounge")).to.be.undefined;
		});
	});
});