import {Before, When, Then} from "cucumber";
import seleniumWebdriver = require("selenium-webdriver");
import Assert = require("assert");
import Request = require("request-promise");
import Bluebird = require("bluebird");

When("I query {string}", function (url: string) {
  const that = this;
  return Request(url, { followRedirect: false })
    .then(function(response) {
      that.response = response;
    })
    .catch(function(err: Error) {
      that.error = err;
    })
});

Then("I get error code 401", function() {
  const that = this;
  return new Bluebird(function(resolve, reject) {
    if(that.error && that.error.statusCode == 401) {
      resolve();
    }
    else {
      if(that.response) 
        reject(new Error("No error thrown"));
      else if(that.error.statusCode != 401)
        reject(new Error(`Error code (${that.error.statusCode}) != 401`));
    }
  });
});

Then("I get redirected to {string}", function(url: string) {
  const that = this;
  return new Bluebird(function(resolve, reject) {
    if(that.error && that.error.statusCode == 302 
      && that.error.message.indexOf(url) > -1) {
      resolve();
    }
    else {
      reject(new Error("Not redirected"));
    }
  });
});