/*
* test for rule shouldUseLocal
*
*/

const ProxyServerUtil = require('../util/ProxyServerUtil.js');
const { proxyGet, generateUrl } = require('../util/HttpUtil.js');
const Server = require('../server/server.js');
const { printLog } = require('../util/CommonUtil.js');

const rule = require('./rule/rule_should_use_local_response.js');

const expectedLocalBody = 'handled_in_local_response';

testWrapper('http');
testWrapper('https');

function testWrapper(protocol) {
  describe('Rule shouldUseLocalResponse should be working in :' + protocol, () => {
    let proxyServer;
    let serverInstance;

    beforeAll((done) => {
      jasmine.DEFAULT_TIMEOUT_INTERVAL = 50000;
      printLog('Start server for rule_shouldUseLocalResponse_spec');

      serverInstance = new Server();

      proxyServer = ProxyServerUtil.proxyServerWithRule(rule);

      setTimeout(() => {
        done();
      }, 2000);
    });

    afterAll(() => {
      serverInstance && serverInstance.close();
      proxyServer && proxyServer.close();
      printLog('Close server for rule_shouldUseLocalResponse_spec');
    });

    it('Should use local response if the assertion is true', done => {
      const url = generateUrl(protocol, '/test/uselocal');
      proxyGet(url, {})
        .then(res => {
          expect(res.body).toEqual(expectedLocalBody);
          expect(res.headers['via-proxy-local']).toEqual('true');
          done();
        }).catch((error) => {
          console.log('error happened in proxy get for shouldUseLocal: ', error);
          done.fail('error happened when test shouldUseLocal rule');
        });
    });
  });
}