'use strict';

require('../helper');

var ApikeyAuth = require('../../lib/auth/apikey');
var assert = require('assert');

describe.skip('has credentials', function () {
    var noCredentialsRequests = [
        {
            des: 'there is not api_key/map_key in the request query',
            req: { query: {} }
        },
        {
            des: 'api_key is undefined`ish in the request query',
            req: { query: { api_key: null } }
        },
        {
            des: 'map_key is undefined`ish in the request query',
            req: { query: { map_key: null } }
        },
        {
            des: 'there is not api_key/map_key in the request body',
            req: { query: {}, body: {} }
        },
        {
            des: 'api_key is undefined`ish in the request body',
            req: { query: {}, body: { api_key: null } }
        },
        {
            des: 'map_key is undefined`ish in the request body',
            req: { query: {}, body: { map_key: null } }
        }
    ];

    noCredentialsRequests.forEach(function (request) {
        it('has no credentials if ' + request.des, function () {
            testCredentials(request.req, false);
        });
    });

    var credentialsRequests = [
        {
            des: 'there is api_key in the request query',
            req: { query: { api_key: 'foo' } }
        },
        {
            des: 'there is api_key in the request query',
            req: { query: { map_key: 'foo' } }
        },
        {
            des: 'there is api_key in the request body',
            req: { query: {}, body: { api_key: 'foo' } }
        },
        {
            des: 'there is map_key in the request body',
            req: { query: {}, body: { map_key: 'foo' } }
        }
    ];

    credentialsRequests.forEach(function (request) {
        it('has credentials if ' + request.des, function () {
            testCredentials(request.req, true);
        });
    });

    function testCredentials (req, hasCredentials) {
        var apiKeyAuth = new ApikeyAuth(req);
        assert.strictEqual(apiKeyAuth.hasCredentials(), hasCredentials);
    }
});

describe.skip('verifyCredentials', function () {
    it('callbacks with true value when request api_key is the same', function (done) {
        testVerifyCredentials({ query: { api_key: 'foo' } }, { apiKey: 'foo' }, true, done);
    });

    it('callbacks with false value when request api_key is different', function (done) {
        testVerifyCredentials({ query: { api_key: 'foo' } }, { apiKey: 'bar' }, false, done);
    });

    function testVerifyCredentials (req, options, shouldBeValid, done) {
        var apiKeyAuth = new ApikeyAuth(req);
        apiKeyAuth.verifyCredentials(options, function (err, validCredentials) {
            assert.ifError(err);
            assert.strictEqual(validCredentials, shouldBeValid);
            done();
        });
    }
});
