Skip to content

Commit

Permalink
fix(adapter-nextjs): Set-Cookie headers incorrectly set with getServe…
Browse files Browse the repository at this point in the history
…rSideProps context
  • Loading branch information
HuiSF committed May 15, 2024
1 parent 291e989 commit 1283b78
Show file tree
Hide file tree
Showing 2 changed files with 29 additions and 10 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -293,7 +293,7 @@ describe('createCookieStorageAdapterFromNextServerContext', () => {

const request = new IncomingMessage(new Socket());
const response = new ServerResponse(request);
const setHeaderSpy = jest.spyOn(response, 'setHeader');
const appendHeaderSpy = jest.spyOn(response, 'appendHeader');

Object.defineProperty(request, 'cookies', {
get() {
Expand All @@ -314,21 +314,30 @@ describe('createCookieStorageAdapterFromNextServerContext', () => {
]);

result.set('key3', 'value3');
expect(setHeaderSpy).toHaveBeenCalledWith('Set-Cookie', 'key3=value3;');
expect(appendHeaderSpy).toHaveBeenCalledWith(
'Set-Cookie',
'key3=value3;',
);

result.set('key4', 'value4', {
httpOnly: true,
});
expect(setHeaderSpy).toHaveBeenCalledWith(
expect(appendHeaderSpy).toHaveBeenCalledWith(
'Set-Cookie',
'key4=value4;HttpOnly',
);

result.delete('key3');
expect(setHeaderSpy).toHaveBeenCalledWith(
expect(appendHeaderSpy).toHaveBeenCalledWith(
'Set-Cookie',
`key3=;Expires=${DATE_IN_THE_PAST.toUTCString()}`,
);

expect(response.getHeader('Set-Cookie')).toEqual([
'key3=value3;',
'key4=value4;HttpOnly',
'key3=;Expires=Thu, 01 Jan 1970 00:00:00 GMT',
]);
});

it('operates with the underlying cookie store with encoded cookie names', () => {
Expand All @@ -346,7 +355,7 @@ describe('createCookieStorageAdapterFromNextServerContext', () => {

const request = new IncomingMessage(new Socket());
const response = new ServerResponse(request);
const setHeaderSpy = jest.spyOn(response, 'setHeader');
const appendHeaderSpy = jest.spyOn(response, 'appendHeader');

Object.defineProperty(request, 'cookies', {
get() {
Expand All @@ -371,7 +380,10 @@ describe('createCookieStorageAdapterFromNextServerContext', () => {
]);

result.set('key3', 'value3');
expect(setHeaderSpy).toHaveBeenCalledWith('Set-Cookie', 'key3=value3;');
expect(appendHeaderSpy).toHaveBeenCalledWith(
'Set-Cookie',
'key3=value3;',
);

result.set('key4', 'value4', {
httpOnly: true,
Expand All @@ -381,16 +393,23 @@ describe('createCookieStorageAdapterFromNextServerContext', () => {
'test@email.com.somethingElse',
);
result.set(encodeURIComponent('test@email.com.somethingElse'), 'value5');
expect(setHeaderSpy).toHaveBeenCalledWith(
expect(appendHeaderSpy).toHaveBeenCalledWith(
'Set-Cookie',
`${encodeURIComponent(encodedCookieName)}=value5;`,
);

result.delete('key3');
expect(setHeaderSpy).toHaveBeenCalledWith(
expect(appendHeaderSpy).toHaveBeenCalledWith(
'Set-Cookie',
`key3=;Expires=${DATE_IN_THE_PAST.toUTCString()}`,
);

expect(response.getHeader('Set-Cookie')).toEqual([
'key3=value3;',
'key4=value4;HttpOnly',
'test%2540email.com.somethingElse=value5;',
'key3=;Expires=Thu, 01 Jan 1970 00:00:00 GMT',
]);
});
});

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -171,15 +171,15 @@ const createCookieStorageAdapterFromGetServerSidePropsContext = (
return allCookies;
},
set(name, value, options) {
response.setHeader(
response.appendHeader(
'Set-Cookie',
`${ensureEncodedForJSCookie(name)}=${value};${
options ? serializeSetCookieOptions(options) : ''
}`,
);
},
delete(name) {
response.setHeader(
response.appendHeader(
'Set-Cookie',
`${ensureEncodedForJSCookie(
name,
Expand Down

0 comments on commit 1283b78

Please sign in to comment.