Skip to content

Commit

Permalink
feat(js): pass searchParameters to EchoRequester, update CTS
Browse files Browse the repository at this point in the history
  • Loading branch information
shortcuts committed Jan 7, 2022
1 parent b51ff01 commit 8a08566
Show file tree
Hide file tree
Showing 13 changed files with 1,010 additions and 592 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -2,14 +2,53 @@ import type { EndRequest, Request, Response } from '../types';

import { Requester } from './Requester';

type AdditionalContent = {
headers: Record<string, string>;
searchParams: string | undefined;
userAgent: string | undefined;
connectTimeout: number;
responseTimeout: number;
};

function searchParamsWithoutUA(params: URLSearchParams): string | undefined {
let searchParams = '?';

for (const [k, v] of params) {
if (k === 'x-algolia-agent') {
continue;
}

searchParams += encodeURI(`${k}=${v}&`);
}

if (searchParams === '?') {
return undefined;
}

return searchParams.replace(/&$/, '');
}

export class EchoRequester extends Requester {
constructor(private status = 200) {
super();
}

send(_request: EndRequest, originalRequest: Request): Promise<Response> {
send(
{ headers, url, connectTimeout, responseTimeout }: EndRequest,
originalRequest: Request
): Promise<Response> {
const urlSearchParams = new URL(url).searchParams;
const userAgent = urlSearchParams.get('x-algolia-agent') || undefined;
const additionalContent: AdditionalContent = {
headers,
connectTimeout,
responseTimeout,
userAgent: userAgent ? encodeURI(userAgent) : undefined,
searchParams: searchParamsWithoutUA(urlSearchParams),
};

return Promise.resolve({
content: JSON.stringify(originalRequest),
content: JSON.stringify({ ...originalRequest, ...additionalContent }),
isTimedOut: false,
status: this.status,
});
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,14 +2,53 @@ import type { EndRequest, Request, Response } from '../types';

import { Requester } from './Requester';

type AdditionalContent = {
headers: Record<string, string>;
searchParams: string | undefined;
userAgent: string | undefined;
connectTimeout: number;
responseTimeout: number;
};

function searchParamsWithoutUA(params: URLSearchParams): string | undefined {
let searchParams = '?';

for (const [k, v] of params) {
if (k === 'x-algolia-agent') {
continue;
}

searchParams += encodeURI(`${k}=${v}&`);
}

if (searchParams === '?') {
return undefined;
}

return searchParams.replace(/&$/, '');
}

export class EchoRequester extends Requester {
constructor(private status = 200) {
super();
}

send(_request: EndRequest, originalRequest: Request): Promise<Response> {
send(
{ headers, url, connectTimeout, responseTimeout }: EndRequest,
originalRequest: Request
): Promise<Response> {
const urlSearchParams = new URL(url).searchParams;
const userAgent = urlSearchParams.get('x-algolia-agent') || undefined;
const additionalContent: AdditionalContent = {
headers,
connectTimeout,
responseTimeout,
userAgent: userAgent ? encodeURI(userAgent) : undefined,
searchParams: searchParamsWithoutUA(urlSearchParams),
};

return Promise.resolve({
content: JSON.stringify(originalRequest),
content: JSON.stringify({ ...originalRequest, ...additionalContent }),
isTimedOut: false,
status: this.status,
});
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,14 +2,53 @@ import type { EndRequest, Request, Response } from '../types';

import { Requester } from './Requester';

type AdditionalContent = {
headers: Record<string, string>;
searchParams: string | undefined;
userAgent: string | undefined;
connectTimeout: number;
responseTimeout: number;
};

function searchParamsWithoutUA(params: URLSearchParams): string | undefined {
let searchParams = '?';

for (const [k, v] of params) {
if (k === 'x-algolia-agent') {
continue;
}

searchParams += encodeURI(`${k}=${v}&`);
}

if (searchParams === '?') {
return undefined;
}

return searchParams.replace(/&$/, '');
}

export class EchoRequester extends Requester {
constructor(private status = 200) {
super();
}

send(_request: EndRequest, originalRequest: Request): Promise<Response> {
send(
{ headers, url, connectTimeout, responseTimeout }: EndRequest,
originalRequest: Request
): Promise<Response> {
const urlSearchParams = new URL(url).searchParams;
const userAgent = urlSearchParams.get('x-algolia-agent') || undefined;
const additionalContent: AdditionalContent = {
headers,
connectTimeout,
responseTimeout,
userAgent: userAgent ? encodeURI(userAgent) : undefined,
searchParams: searchParamsWithoutUA(urlSearchParams),
};

return Promise.resolve({
content: JSON.stringify(originalRequest),
content: JSON.stringify({ ...originalRequest, ...additionalContent }),
isTimedOut: false,
status: this.status,
});
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,14 +2,53 @@ import type { EndRequest, Request, Response } from '../types';

import { Requester } from './Requester';

type AdditionalContent = {
headers: Record<string, string>;
searchParams: string | undefined;
userAgent: string | undefined;
connectTimeout: number;
responseTimeout: number;
};

function searchParamsWithoutUA(params: URLSearchParams): string | undefined {
let searchParams = '?';

for (const [k, v] of params) {
if (k === 'x-algolia-agent') {
continue;
}

searchParams += encodeURI(`${k}=${v}&`);
}

if (searchParams === '?') {
return undefined;
}

return searchParams.replace(/&$/, '');
}

export class EchoRequester extends Requester {
constructor(private status = 200) {
super();
}

send(_request: EndRequest, originalRequest: Request): Promise<Response> {
send(
{ headers, url, connectTimeout, responseTimeout }: EndRequest,
originalRequest: Request
): Promise<Response> {
const urlSearchParams = new URL(url).searchParams;
const userAgent = urlSearchParams.get('x-algolia-agent') || undefined;
const additionalContent: AdditionalContent = {
headers,
connectTimeout,
responseTimeout,
userAgent: userAgent ? encodeURI(userAgent) : undefined,
searchParams: searchParamsWithoutUA(urlSearchParams),
};

return Promise.resolve({
content: JSON.stringify(originalRequest),
content: JSON.stringify({ ...originalRequest, ...additionalContent }),
isTimedOut: false,
status: this.status,
});
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,14 +2,53 @@ import type { EndRequest, Request, Response } from '../types';

import { Requester } from './Requester';

type AdditionalContent = {
headers: Record<string, string>;
searchParams: string | undefined;
userAgent: string | undefined;
connectTimeout: number;
responseTimeout: number;
};

function searchParamsWithoutUA(params: URLSearchParams): string | undefined {
let searchParams = '?';

for (const [k, v] of params) {
if (k === 'x-algolia-agent') {
continue;
}

searchParams += encodeURI(`${k}=${v}&`);
}

if (searchParams === '?') {
return undefined;
}

return searchParams.replace(/&$/, '');
}

export class EchoRequester extends Requester {
constructor(private status = 200) {
super();
}

send(_request: EndRequest, originalRequest: Request): Promise<Response> {
send(
{ headers, url, connectTimeout, responseTimeout }: EndRequest,
originalRequest: Request
): Promise<Response> {
const urlSearchParams = new URL(url).searchParams;
const userAgent = urlSearchParams.get('x-algolia-agent') || undefined;
const additionalContent: AdditionalContent = {
headers,
connectTimeout,
responseTimeout,
userAgent: userAgent ? encodeURI(userAgent) : undefined,
searchParams: searchParamsWithoutUA(urlSearchParams),
};

return Promise.resolve({
content: JSON.stringify(originalRequest),
content: JSON.stringify({ ...originalRequest, ...additionalContent }),
isTimedOut: false,
status: this.status,
});
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,14 +2,53 @@ import type { EndRequest, Request, Response } from '../types';

import { Requester } from './Requester';

type AdditionalContent = {
headers: Record<string, string>;
searchParams: string | undefined;
userAgent: string | undefined;
connectTimeout: number;
responseTimeout: number;
};

function searchParamsWithoutUA(params: URLSearchParams): string | undefined {
let searchParams = '?';

for (const [k, v] of params) {
if (k === 'x-algolia-agent') {
continue;
}

searchParams += encodeURI(`${k}=${v}&`);
}

if (searchParams === '?') {
return undefined;
}

return searchParams.replace(/&$/, '');
}

export class EchoRequester extends Requester {
constructor(private status = 200) {
super();
}

send(_request: EndRequest, originalRequest: Request): Promise<Response> {
send(
{ headers, url, connectTimeout, responseTimeout }: EndRequest,
originalRequest: Request
): Promise<Response> {
const urlSearchParams = new URL(url).searchParams;
const userAgent = urlSearchParams.get('x-algolia-agent') || undefined;
const additionalContent: AdditionalContent = {
headers,
connectTimeout,
responseTimeout,
userAgent: userAgent ? encodeURI(userAgent) : undefined,
searchParams: searchParamsWithoutUA(urlSearchParams),
};

return Promise.resolve({
content: JSON.stringify(originalRequest),
content: JSON.stringify({ ...originalRequest, ...additionalContent }),
isTimedOut: false,
status: this.status,
});
Expand Down
6 changes: 3 additions & 3 deletions tests/CTS/templates/javascript.mustache
Original file line number Diff line number Diff line change
Expand Up @@ -17,11 +17,11 @@ describe('{{operationId}}', () => {
}{{/hasParameters}}
);

expect(req).toMatchObject({
expect(req).toEqual(expect.objectContaining({
path: '{{{request.path}}}',
method: '{{{request.method}}}',
{{#request.data}}data: {{{.}}},{{/request.data}}
})
{{#request.data}}data: {{{.}}},{{/request.data}}{{#request.searchParams}}searchParams: {{{.}}},{{/request.searchParams}}
}))
});

{{/tests}}
Expand Down
12 changes: 9 additions & 3 deletions tests/generateCTS.ts
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,10 @@ type Tests = {
request: {
path: string;
method: string;
headers: string;
userAgent: string;
data?: string;
searchParams?: string;
};
};

Expand Down Expand Up @@ -128,9 +131,11 @@ async function loadCTSForClient(client: string): Promise<CTSBlock[]> {
if (test.testName === undefined) {
test.testName = test.method;
}

// stringify request.data too
test.request.data = JSON.stringify(test.request.data);
test.request.headers = JSON.stringify(test.request.headers);
test.request.searchParams = JSON.stringify(test.request.searchParams);
test.request.userAgent = JSON.stringify(test.request.userAgent);

if (Object.keys(test.parameters).length === 0) {
test.parameters = undefined;
Expand All @@ -156,13 +161,14 @@ async function loadCTSForClient(client: string): Promise<CTSBlock[]> {
test.parametersWithDataType = Object.entries(test.parameters).map(
([key, value], i, arr) => {
const isDate = key === 'startDate' || key === 'endDate';
const isArray = Array.isArray(value);

return {
key,
value: JSON.stringify(value),
isString: typeof value === 'string' && isDate === false,
isObject: typeof value === 'object',
isArray: Array.isArray(value),
isObject: typeof value === 'object' && isArray === false,
isArray,
isDate,
'-last': i === arr.length - 1,
};
Expand Down
Loading

0 comments on commit 8a08566

Please sign in to comment.