Skip to content

Commit 4252f73

Browse files
committed
feat(js): pass searchParams to EchoRequester, update CTS
1 parent 0ed4d40 commit 4252f73

File tree

13 files changed

+985
-568
lines changed

13 files changed

+985
-568
lines changed

clients/algoliasearch-client-javascript/client-analytics/utils/requester/EchoRequester.ts

Lines changed: 41 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,14 +2,53 @@ import type { EndRequest, Request, Response } from '../types';
22

33
import { Requester } from './Requester';
44

5+
type AdditionalContent = {
6+
headers: Record<string, string>;
7+
searchParams: string | undefined;
8+
userAgent: string | undefined;
9+
connectTimeout: number;
10+
responseTimeout: number;
11+
};
12+
13+
function searchParamsWithoutUA(params: URLSearchParams): string | undefined {
14+
let searchParams = '?';
15+
16+
for (const [k, v] of params) {
17+
if (k === 'x-algolia-agent') {
18+
continue;
19+
}
20+
21+
searchParams += encodeURI(`${k}=${v}&`);
22+
}
23+
24+
if (searchParams === '?') {
25+
return undefined;
26+
}
27+
28+
return searchParams.replace(/&$/, '');
29+
}
30+
531
export class EchoRequester extends Requester {
632
constructor(private status = 200) {
733
super();
834
}
935

10-
send(_request: EndRequest, originalRequest: Request): Promise<Response> {
36+
send(
37+
{ headers, url, connectTimeout, responseTimeout }: EndRequest,
38+
originalRequest: Request
39+
): Promise<Response> {
40+
const urlSearchParams = new URL(url).searchParams;
41+
const userAgent = urlSearchParams.get('x-algolia-agent') || undefined;
42+
const additionalContent: AdditionalContent = {
43+
headers,
44+
connectTimeout,
45+
responseTimeout,
46+
userAgent: userAgent ? encodeURI(userAgent) : undefined,
47+
searchParams: searchParamsWithoutUA(urlSearchParams),
48+
};
49+
1150
return Promise.resolve({
12-
content: JSON.stringify(originalRequest),
51+
content: JSON.stringify({ ...originalRequest, ...additionalContent }),
1352
isTimedOut: false,
1453
status: this.status,
1554
});

clients/algoliasearch-client-javascript/client-insights/utils/requester/EchoRequester.ts

Lines changed: 41 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,14 +2,53 @@ import type { EndRequest, Request, Response } from '../types';
22

33
import { Requester } from './Requester';
44

5+
type AdditionalContent = {
6+
headers: Record<string, string>;
7+
searchParams: string | undefined;
8+
userAgent: string | undefined;
9+
connectTimeout: number;
10+
responseTimeout: number;
11+
};
12+
13+
function searchParamsWithoutUA(params: URLSearchParams): string | undefined {
14+
let searchParams = '?';
15+
16+
for (const [k, v] of params) {
17+
if (k === 'x-algolia-agent') {
18+
continue;
19+
}
20+
21+
searchParams += encodeURI(`${k}=${v}&`);
22+
}
23+
24+
if (searchParams === '?') {
25+
return undefined;
26+
}
27+
28+
return searchParams.replace(/&$/, '');
29+
}
30+
531
export class EchoRequester extends Requester {
632
constructor(private status = 200) {
733
super();
834
}
935

10-
send(_request: EndRequest, originalRequest: Request): Promise<Response> {
36+
send(
37+
{ headers, url, connectTimeout, responseTimeout }: EndRequest,
38+
originalRequest: Request
39+
): Promise<Response> {
40+
const urlSearchParams = new URL(url).searchParams;
41+
const userAgent = urlSearchParams.get('x-algolia-agent') || undefined;
42+
const additionalContent: AdditionalContent = {
43+
headers,
44+
connectTimeout,
45+
responseTimeout,
46+
userAgent: userAgent ? encodeURI(userAgent) : undefined,
47+
searchParams: searchParamsWithoutUA(urlSearchParams),
48+
};
49+
1150
return Promise.resolve({
12-
content: JSON.stringify(originalRequest),
51+
content: JSON.stringify({ ...originalRequest, ...additionalContent }),
1352
isTimedOut: false,
1453
status: this.status,
1554
});

clients/algoliasearch-client-javascript/client-personalization/utils/requester/EchoRequester.ts

Lines changed: 41 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,14 +2,53 @@ import type { EndRequest, Request, Response } from '../types';
22

33
import { Requester } from './Requester';
44

5+
type AdditionalContent = {
6+
headers: Record<string, string>;
7+
searchParams: string | undefined;
8+
userAgent: string | undefined;
9+
connectTimeout: number;
10+
responseTimeout: number;
11+
};
12+
13+
function searchParamsWithoutUA(params: URLSearchParams): string | undefined {
14+
let searchParams = '?';
15+
16+
for (const [k, v] of params) {
17+
if (k === 'x-algolia-agent') {
18+
continue;
19+
}
20+
21+
searchParams += encodeURI(`${k}=${v}&`);
22+
}
23+
24+
if (searchParams === '?') {
25+
return undefined;
26+
}
27+
28+
return searchParams.replace(/&$/, '');
29+
}
30+
531
export class EchoRequester extends Requester {
632
constructor(private status = 200) {
733
super();
834
}
935

10-
send(_request: EndRequest, originalRequest: Request): Promise<Response> {
36+
send(
37+
{ headers, url, connectTimeout, responseTimeout }: EndRequest,
38+
originalRequest: Request
39+
): Promise<Response> {
40+
const urlSearchParams = new URL(url).searchParams;
41+
const userAgent = urlSearchParams.get('x-algolia-agent') || undefined;
42+
const additionalContent: AdditionalContent = {
43+
headers,
44+
connectTimeout,
45+
responseTimeout,
46+
userAgent: userAgent ? encodeURI(userAgent) : undefined,
47+
searchParams: searchParamsWithoutUA(urlSearchParams),
48+
};
49+
1150
return Promise.resolve({
12-
content: JSON.stringify(originalRequest),
51+
content: JSON.stringify({ ...originalRequest, ...additionalContent }),
1352
isTimedOut: false,
1453
status: this.status,
1554
});

clients/algoliasearch-client-javascript/client-search/utils/requester/EchoRequester.ts

Lines changed: 41 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,14 +2,53 @@ import type { EndRequest, Request, Response } from '../types';
22

33
import { Requester } from './Requester';
44

5+
type AdditionalContent = {
6+
headers: Record<string, string>;
7+
searchParams: string | undefined;
8+
userAgent: string | undefined;
9+
connectTimeout: number;
10+
responseTimeout: number;
11+
};
12+
13+
function searchParamsWithoutUA(params: URLSearchParams): string | undefined {
14+
let searchParams = '?';
15+
16+
for (const [k, v] of params) {
17+
if (k === 'x-algolia-agent') {
18+
continue;
19+
}
20+
21+
searchParams += encodeURI(`${k}=${v}&`);
22+
}
23+
24+
if (searchParams === '?') {
25+
return undefined;
26+
}
27+
28+
return searchParams.replace(/&$/, '');
29+
}
30+
531
export class EchoRequester extends Requester {
632
constructor(private status = 200) {
733
super();
834
}
935

10-
send(_request: EndRequest, originalRequest: Request): Promise<Response> {
36+
send(
37+
{ headers, url, connectTimeout, responseTimeout }: EndRequest,
38+
originalRequest: Request
39+
): Promise<Response> {
40+
const urlSearchParams = new URL(url).searchParams;
41+
const userAgent = urlSearchParams.get('x-algolia-agent') || undefined;
42+
const additionalContent: AdditionalContent = {
43+
headers,
44+
connectTimeout,
45+
responseTimeout,
46+
userAgent: userAgent ? encodeURI(userAgent) : undefined,
47+
searchParams: searchParamsWithoutUA(urlSearchParams),
48+
};
49+
1150
return Promise.resolve({
12-
content: JSON.stringify(originalRequest),
51+
content: JSON.stringify({ ...originalRequest, ...additionalContent }),
1352
isTimedOut: false,
1453
status: this.status,
1554
});

clients/algoliasearch-client-javascript/recommend/utils/requester/EchoRequester.ts

Lines changed: 41 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,14 +2,53 @@ import type { EndRequest, Request, Response } from '../types';
22

33
import { Requester } from './Requester';
44

5+
type AdditionalContent = {
6+
headers: Record<string, string>;
7+
searchParams: string | undefined;
8+
userAgent: string | undefined;
9+
connectTimeout: number;
10+
responseTimeout: number;
11+
};
12+
13+
function searchParamsWithoutUA(params: URLSearchParams): string | undefined {
14+
let searchParams = '?';
15+
16+
for (const [k, v] of params) {
17+
if (k === 'x-algolia-agent') {
18+
continue;
19+
}
20+
21+
searchParams += encodeURI(`${k}=${v}&`);
22+
}
23+
24+
if (searchParams === '?') {
25+
return undefined;
26+
}
27+
28+
return searchParams.replace(/&$/, '');
29+
}
30+
531
export class EchoRequester extends Requester {
632
constructor(private status = 200) {
733
super();
834
}
935

10-
send(_request: EndRequest, originalRequest: Request): Promise<Response> {
36+
send(
37+
{ headers, url, connectTimeout, responseTimeout }: EndRequest,
38+
originalRequest: Request
39+
): Promise<Response> {
40+
const urlSearchParams = new URL(url).searchParams;
41+
const userAgent = urlSearchParams.get('x-algolia-agent') || undefined;
42+
const additionalContent: AdditionalContent = {
43+
headers,
44+
connectTimeout,
45+
responseTimeout,
46+
userAgent: userAgent ? encodeURI(userAgent) : undefined,
47+
searchParams: searchParamsWithoutUA(urlSearchParams),
48+
};
49+
1150
return Promise.resolve({
12-
content: JSON.stringify(originalRequest),
51+
content: JSON.stringify({ ...originalRequest, ...additionalContent }),
1352
isTimedOut: false,
1453
status: this.status,
1554
});

clients/algoliasearch-client-javascript/utils/requester/EchoRequester.ts

Lines changed: 41 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,14 +2,53 @@ import type { EndRequest, Request, Response } from '../types';
22

33
import { Requester } from './Requester';
44

5+
type AdditionalContent = {
6+
headers: Record<string, string>;
7+
searchParams: string | undefined;
8+
userAgent: string | undefined;
9+
connectTimeout: number;
10+
responseTimeout: number;
11+
};
12+
13+
function searchParamsWithoutUA(params: URLSearchParams): string | undefined {
14+
let searchParams = '?';
15+
16+
for (const [k, v] of params) {
17+
if (k === 'x-algolia-agent') {
18+
continue;
19+
}
20+
21+
searchParams += encodeURI(`${k}=${v}&`);
22+
}
23+
24+
if (searchParams === '?') {
25+
return undefined;
26+
}
27+
28+
return searchParams.replace(/&$/, '');
29+
}
30+
531
export class EchoRequester extends Requester {
632
constructor(private status = 200) {
733
super();
834
}
935

10-
send(_request: EndRequest, originalRequest: Request): Promise<Response> {
36+
send(
37+
{ headers, url, connectTimeout, responseTimeout }: EndRequest,
38+
originalRequest: Request
39+
): Promise<Response> {
40+
const urlSearchParams = new URL(url).searchParams;
41+
const userAgent = urlSearchParams.get('x-algolia-agent') || undefined;
42+
const additionalContent: AdditionalContent = {
43+
headers,
44+
connectTimeout,
45+
responseTimeout,
46+
userAgent: userAgent ? encodeURI(userAgent) : undefined,
47+
searchParams: searchParamsWithoutUA(urlSearchParams),
48+
};
49+
1150
return Promise.resolve({
12-
content: JSON.stringify(originalRequest),
51+
content: JSON.stringify({ ...originalRequest, ...additionalContent }),
1352
isTimedOut: false,
1453
status: this.status,
1554
});

tests/CTS/templates/javascript.mustache

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,11 +17,11 @@ describe('{{operationId}}', () => {
1717
}{{/hasParameters}}
1818
);
1919

20-
expect(req).toMatchObject({
20+
expect(req).toEqual(expect.objectContaining({
2121
path: '{{{request.path}}}',
2222
method: '{{{request.method}}}',
23-
{{#request.data}}data: {{{.}}},{{/request.data}}
24-
})
23+
{{#request.data}}data: {{{.}}},{{/request.data}}{{#request.searchParams}}searchParams: {{{.}}},{{/request.searchParams}}
24+
}))
2525
});
2626

2727
{{/tests}}

tests/generateCTS.ts

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,10 @@ type Tests = {
3030
request: {
3131
path: string;
3232
method: string;
33+
headers: string;
34+
userAgent: string;
3335
data?: string;
36+
searchParams?: string;
3437
};
3538
};
3639

@@ -128,9 +131,11 @@ async function loadCTSForClient(client: string): Promise<CTSBlock[]> {
128131
if (test.testName === undefined) {
129132
test.testName = test.method;
130133
}
131-
132134
// stringify request.data too
133135
test.request.data = JSON.stringify(test.request.data);
136+
test.request.headers = JSON.stringify(test.request.headers);
137+
test.request.searchParams = JSON.stringify(test.request.searchParams);
138+
test.request.userAgent = JSON.stringify(test.request.userAgent);
134139

135140
if (Object.keys(test.parameters).length === 0) {
136141
test.parameters = undefined;

0 commit comments

Comments
 (0)