"use strict";

const expect = require("chai").expect;
const parseIrcUri = require("../../../../client/js/helpers/parseIrcUri").default;

describe("parseIrcUri helper", function() {
	it("should parse irc:// without port", function() {
		expect(parseIrcUri("irc://example.com")).to.deep.equal({
			tls: false,
			name: "example.com",
			host: "example.com",
			port: "6667",
			join: "",
		});
	});

	it("should parse ircs:// without port", function() {
		expect(parseIrcUri("ircs://example.com")).to.deep.equal({
			tls: true,
			name: "example.com",
			host: "example.com",
			port: "6697",
			join: "",
		});
	});

	it("should parse irc:// with port", function() {
		expect(parseIrcUri("irc://example.com:1337")).to.deep.equal({
			tls: false,
			name: "example.com",
			host: "example.com",
			port: "1337",
			join: "",
		});
	});

	it("should parse ircs:// with port", function() {
		expect(parseIrcUri("ircs://example.com:1337")).to.deep.equal({
			tls: true,
			name: "example.com",
			host: "example.com",
			port: "1337",
			join: "",
		});
	});

	it("should not parse invalid port", function() {
		expect(parseIrcUri("ircs://example.com:lol")).to.deep.equal({});
	});

	it("should not parse plus in port", function() {
		expect(parseIrcUri("irc://example.com:+6697")).to.deep.equal({});
	});

	it("should not channel on empty query and hash", function() {
		const obj = {
			tls: false,
			name: "example.com",
			host: "example.com",
			port: "6667",
			join: "",
		};

		expect(parseIrcUri("irc://example.com#")).to.deep.equal(obj);
		expect(parseIrcUri("irc://example.com/")).to.deep.equal(obj);
		expect(parseIrcUri("irc://example.com/#")).to.deep.equal(obj);
	});

	it("should parse multiple channels", function() {
		const obj = {
			tls: true,
			name: "example.com",
			host: "example.com",
			port: "1337",
			join: "#channel,channel2",
		};

		expect(parseIrcUri("ircs://example.com:1337#channel,channel2")).to.deep.equal(obj);
		expect(parseIrcUri("ircs://example.com:1337/#channel,channel2")).to.deep.equal(obj);

		obj.join = "channel,channel2";
		expect(parseIrcUri("ircs://example.com:1337/channel,channel2")).to.deep.equal(obj);

		obj.join = "chan,#chan2,#chan3";
		expect(parseIrcUri("ircs://example.com:1337/chan,#chan2,#chan3")).to.deep.equal(obj);

		obj.join = "&chan,@chan2,#chan3";
		expect(parseIrcUri("ircs://example.com:1337/&chan,@chan2,#chan3")).to.deep.equal(obj);

		// URL() drops empty hash
		obj.join = "chan";
		expect(parseIrcUri("ircs://example.com:1337/chan#")).to.deep.equal(obj);
	});
});