'use strict';

const test = require('ava');
const store = require('./fixtures/store');
const supertest = require('supertest');
const logger = require('../../../lib/logger');
const getApp = require('../../../lib/app');

const { EventEmitter } = require('events');
const eventBus = new EventEmitter();

test.beforeEach(() =>  {
    logger.setLevel('FATAL');
});


function getSetup () {
    const stores = store.createStores();
    const db = stores.db;
    const app = getApp({
        baseUriPath: '',
        stores,
        eventBus,
    });

    return {
        db,
        request: supertest(app),
    };
}

test('should give 500 when db is failing', t => {
    const { request, db } = getSetup();
    db.select = () => ({
        from: () => Promise.reject(new Error('db error')),
    });
    return request
        .get('/health')
        .expect(500)
        .expect((res) => {
            t.true(res.status === 500);
            t.true(res.body.health === 'BAD');
        });
});

test('should give 200 when db is not failing', () => {
    const { request } = getSetup();
    return request
        .get('/health')
        .expect(200);
});

test('should give health=GOOD when db is not failing', t => {
    const { request } = getSetup();
    return request
        .get('/health')
        .expect(200)
        .expect((res) => {
            t.true(res.status === 200);
            t.true(res.body.health === 'GOOD');
        });
});