fix(http): include transferCache when cloning HttpRequest (#54939)

Fixes a bug where HttpRequest.clone() does not include the transferCache property.

Fixes #54924.

PR Close #54939
This commit is contained in:
Mahdi Lazraq 2024-03-19 07:53:32 +00:00 committed by Dylan Hunn
parent 3cf70e26ba
commit cb433af0e1
3 changed files with 19 additions and 0 deletions

View file

@ -2099,6 +2099,9 @@ export class HttpRequest<T> {
params?: HttpParams;
responseType?: 'arraybuffer' | 'blob' | 'json' | 'text';
withCredentials?: boolean;
transferCache?: {
includeHeaders?: string[];
} | boolean;
body?: T | null;
method?: string;
url?: string;
@ -2117,6 +2120,9 @@ export class HttpRequest<T> {
params?: HttpParams;
responseType?: 'arraybuffer' | 'blob' | 'json' | 'text';
withCredentials?: boolean;
transferCache?: {
includeHeaders?: string[];
} | boolean;
body?: V | null;
method?: string;
url?: string;

View file

@ -439,6 +439,7 @@ export class HttpRequest<T> {
params?: HttpParams;
responseType?: 'arraybuffer' | 'blob' | 'json' | 'text';
withCredentials?: boolean;
transferCache?: {includeHeaders?: string[]} | boolean;
body?: T | null;
method?: string;
url?: string;
@ -452,6 +453,7 @@ export class HttpRequest<T> {
params?: HttpParams;
responseType?: 'arraybuffer' | 'blob' | 'json' | 'text';
withCredentials?: boolean;
transferCache?: {includeHeaders?: string[]} | boolean;
body?: V | null;
method?: string;
url?: string;
@ -466,6 +468,7 @@ export class HttpRequest<T> {
params?: HttpParams;
responseType?: 'arraybuffer' | 'blob' | 'json' | 'text';
withCredentials?: boolean;
transferCache?: {includeHeaders?: string[]} | boolean;
body?: any | null;
method?: string;
url?: string;
@ -479,6 +482,10 @@ export class HttpRequest<T> {
const url = update.url || this.url;
const responseType = update.responseType || this.responseType;
// Carefully handle the transferCache to differentiate between
// `false` and `undefined` in the update args.
const transferCache = update.transferCache ?? this.transferCache;
// The body is somewhat special - a `null` value in update.body means
// whatever current body is present is being overridden with an empty
// body, whereas an `undefined` value in update.body implies no
@ -526,6 +533,7 @@ export class HttpRequest<T> {
reportProgress,
responseType,
withCredentials,
transferCache,
});
}
}

View file

@ -76,6 +76,7 @@ describe('HttpRequest', () => {
reportProgress: true,
responseType: 'text',
withCredentials: true,
transferCache: true,
});
it('in the base case', () => {
const clone = req.clone();
@ -87,6 +88,7 @@ describe('HttpRequest', () => {
expect(clone.headers.get('Test')).toBe('Test header');
expect(clone.context).toBe(context);
expect(clone.transferCache).toBe(true);
});
it('and updates the url', () => {
expect(req.clone({url: '/changed'}).url).toBe('/changed');
@ -101,6 +103,9 @@ describe('HttpRequest', () => {
const newContext = new HttpContext();
expect(req.clone({context: newContext}).context).toBe(newContext);
});
it('and updates the transferCache', () => {
expect(req.clone({transferCache: false}).transferCache).toBe(false);
});
});
describe('content type detection', () => {
const baseReq = new HttpRequest('POST', '/test', null);