const test = require('tap').test;
const util = require('../../lib/util');

test('spec', function (t) {
    t.type(util, 'object');
    t.type(util.b64Encode, 'function');
    t.type(util.b64Decode, 'function');
    t.type(util.md5, 'function');
    t.end();
});

test('b64Encode', function (t) {
    // Valid input
    t.strictEqual(util.b64Encode('foobar'), 'Zm9vYmFy');
    t.strictEqual(util.b64Encode('http://foo-bar'), 'aHR0cDovL2Zvby1iYXI');
    t.strictEqual(util.b64Encode('http:/`\\'), 'aHR0cDovYFw');

    // Invalid input
    t.strictEqual(util.b64Encode(undefined), undefined);
    t.strictEqual(util.b64Encode(null), undefined);
    t.strictEqual(util.b64Encode(NaN), undefined);
    t.strictEqual(util.b64Encode(0), undefined);
    t.strictEqual(util.b64Encode({}), undefined);
    t.end();
});

test('b64Decode', function (t) {
    // Valid input
    t.strictEqual(util.b64Decode('Zm9vYmFy'), 'foobar');
    t.strictEqual(util.b64Decode('aHR0cDovL2Zvby1iYXI'), 'http://foo-bar');
    t.strictEqual(util.b64Decode('.aHR0cDovYFy='), 'http:/`\\');

    // Invalid input
    t.strictEqual(util.b64Decode(undefined), undefined);
    t.strictEqual(util.b64Decode(null), undefined);
    t.strictEqual(util.b64Decode(NaN), undefined);
    t.strictEqual(util.b64Decode(0), undefined);
    t.strictEqual(util.b64Decode({}), undefined);
    t.end();
});

test('md5', function (t) {
    // Valid input
    t.strictEqual(util.md5('foobar'), '3858f62230ac3c915f300c664312c63f');

    // Invalid input
    t.strictEqual(util.md5(undefined), undefined);
    t.strictEqual(util.md5(null), undefined);
    t.strictEqual(util.md5(NaN), undefined);
    t.strictEqual(util.md5(0), undefined);
    t.strictEqual(util.md5({}), undefined);
    t.end();
});