Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
25 changes: 15 additions & 10 deletions src/ClientBuilder.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,12 @@ const HttpSender = require("./HttpSender");
const SigningSender = require("./SigningSender");
const BaseUrlSender = require("./BaseUrlSender");
const AgentSender = require("./AgentSender");
const StaticCredentials = require("./StaticCredentials");
const SharedCredentials = require("./SharedCredentials");
const BasicAuthCredentials = require("./BasicAuthCredentials");
const _StaticCredentials = require("./StaticCredentials");
const StaticCredentials = _StaticCredentials.default || _StaticCredentials;
const _SharedCredentials = require("./SharedCredentials");
const SharedCredentials = _SharedCredentials.default || _SharedCredentials;
const _BasicAuthCredentials = require("./BasicAuthCredentials");
const BasicAuthCredentials = _BasicAuthCredentials.default || _BasicAuthCredentials;
const CustomHeaderSender = require("./CustomHeaderSender");
const StatusCodeSender = require("./StatusCodeSender");
const LicenseSender = require("./LicenseSender");
Expand Down Expand Up @@ -194,13 +197,8 @@ class ClientBuilder {
* @return ClientBuilder <b>this</b> to accommodate method chaining.
*/
withCustomCommaSeperatedQuery(key, value) {
let values = this.customQueries.get(key);
if (values === "") {
values = value;
} else {
values += "," + value;
}
this.customQueries.set(key, values);
const existing = this.customQueries.get(key);
this.customQueries.set(key, existing ? existing + "," + value : value);
return this;
}

Expand Down Expand Up @@ -228,6 +226,13 @@ class ClientBuilder {
return this.withCustomCommaSeperatedQuery("features", "occupant-use");
}

/**
* Adds to the request query to use the IANA timezone feature.
* @return ClientBuilder <b>this</b> to accommodate method chaining.
*/
withFeatureIANATimeZone() {
return this.withCustomCommaSeperatedQuery("features", "iana-timezone");
}

buildSender() {
if (this.httpSender) return this.httpSender;
Expand Down
3 changes: 3 additions & 0 deletions src/us_street/Candidate.js
Original file line number Diff line number Diff line change
Expand Up @@ -64,6 +64,9 @@ class Candidate {
this.metadata.timeZone = responseData.metadata.time_zone;
this.metadata.utcOffset = responseData.metadata.utc_offset;
this.metadata.obeysDst = responseData.metadata.dst;
this.metadata.ianaTimeZone = responseData.metadata.iana_time_zone;
this.metadata.ianaUtcOffset = responseData.metadata.iana_utc_offset;
this.metadata.ianaDst = responseData.metadata.iana_dst;
this.metadata.isEwsMatch = responseData.metadata.ews_match;
}

Expand Down
23 changes: 23 additions & 0 deletions tests/test_ClientBuilder.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
import { expect } from "chai";
import StaticCredentials from "../src/StaticCredentials.js";
// eslint-disable-next-line @typescript-eslint/no-require-imports
const ClientBuilder = require("../src/ClientBuilder");

describe("ClientBuilder", function () {
const credentials = new StaticCredentials("test-id", "test-token");

it("sets the iana-timezone feature flag.", function () {
const builder = new ClientBuilder(credentials);
builder.withFeatureIANATimeZone();

expect(builder.customQueries.get("features")).to.equal("iana-timezone");
});

it("appends iana-timezone when combined with component-analysis.", function () {
const builder = new ClientBuilder(credentials);
builder.withFeatureComponentAnalysis();
builder.withFeatureIANATimeZone();

expect(builder.customQueries.get("features")).to.equal("component-analysis,iana-timezone");
});
});
6 changes: 6 additions & 0 deletions tests/us_street/test_Candidate.js
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,9 @@ describe("A match candidate", function () {
time_zone: "39",
utc_offset: 40.0,
dst: "41",
iana_time_zone: "68",
iana_utc_offset: 69.0,
iana_dst: "70",
ews_match: "47",
},
analysis: {
Expand Down Expand Up @@ -132,6 +135,9 @@ describe("A match candidate", function () {
expect(candidate.metadata.timeZone).to.equal("39");
expect(candidate.metadata.utcOffset).to.equal(40.0);
expect(candidate.metadata.obeysDst).to.equal("41");
expect(candidate.metadata.ianaTimeZone).to.equal("68");
expect(candidate.metadata.ianaUtcOffset).to.equal(69.0);
expect(candidate.metadata.ianaDst).to.equal("70");
expect(candidate.metadata.isEwsMatch).to.equal("47");

expect(candidate.analysis.dpvMatchCode).to.equal("42");
Expand Down