describe(“QueryString”, function() {

describe("#navigateWithNewParam", function() {
  it("sets the query string to include the given key/value pair", function() {
    var windowLocation = {
        search: ""
      },
      queryString = new j$.QueryString({
        getWindowLocation: function() { return windowLocation }
      });

    queryString.navigateWithNewParam("foo", "bar baz");

    expect(windowLocation.search).toMatch(/foo=bar%20baz/);
  });

  it("leaves existing params alone", function() {
    var windowLocation = {
      search: "?foo=bar"
    },
    queryString = new j$.QueryString({
      getWindowLocation: function() { return windowLocation }
    });

    queryString.navigateWithNewParam("baz", "quux");

    expect(windowLocation.search).toMatch(/foo=bar/);
    expect(windowLocation.search).toMatch(/baz=quux/);
  });
});

describe('#fullStringWithNewParam', function() {
  it("gets the query string including the given key/value pair", function() {
    var windowLocation = {
      search: "?foo=bar"
    },
    queryString = new j$.QueryString({
      getWindowLocation: function() { return windowLocation }
    });

    var result = queryString.fullStringWithNewParam("baz", "quux");

    expect(result).toMatch(/foo=bar/);
    expect(result).toMatch(/baz=quux/);
  });
});

describe("#getParam", function() {

  it("returns the value of the requested key", function() {
    var windowLocation = {
        search: "?baz=quux%20corge"
      },
      queryString = new j$.QueryString({
        getWindowLocation: function() { return windowLocation }
      });

    expect(queryString.getParam("baz")).toEqual("quux corge");
  });

  it("returns null if the key is not present", function() {
    var windowLocation = {
        search: ""
      },
      queryString = new j$.QueryString({
        getWindowLocation: function() { return windowLocation }
      });

    expect(queryString.getParam("baz")).toBeFalsy();
  });
});

});