332 lines
9.7 KiB
TypeScript
332 lines
9.7 KiB
TypeScript
import {
|
|
deserialize,
|
|
serialize,
|
|
wrapToughCookie,
|
|
wrapReactNativeCookieManager,
|
|
} from './cookies'
|
|
import { Cookie, CookieManager } from './types'
|
|
import { CookieJar } from 'tough-cookie'
|
|
import RNCookieManager from '@react-native-cookies/cookies'
|
|
|
|
describe('CookieManager', () => {
|
|
describe('deserialize', () => {
|
|
it('deserializes cookies with only name and value', () => {
|
|
const cookieStr = 'foo=bar'
|
|
const cookie: Cookie = {
|
|
name: 'foo',
|
|
value: 'bar',
|
|
}
|
|
|
|
expect(deserialize(cookieStr)).toEqual(cookie)
|
|
})
|
|
it('deserializes cookies with Expires', () => {
|
|
const cookieStr = 'foo=bar; Expires=Tue, 09 Mar 2021 08:27:48 GMT'
|
|
const cookie: Cookie = {
|
|
name: 'foo',
|
|
value: 'bar',
|
|
expires: 'Tue, 09 Mar 2021 08:27:48 GMT',
|
|
}
|
|
|
|
expect(deserialize(cookieStr)).toEqual(cookie)
|
|
})
|
|
it('deserializes cookies with Domain', () => {
|
|
const cookieStr = 'foo=bar; Domain=.stockholm.se'
|
|
const cookie: Cookie = {
|
|
name: 'foo',
|
|
value: 'bar',
|
|
domain: '.stockholm.se',
|
|
}
|
|
|
|
expect(deserialize(cookieStr)).toEqual(cookie)
|
|
})
|
|
it('deserializes cookies with Path', () => {
|
|
const cookieStr = 'foo=bar; Path=/'
|
|
const cookie: Cookie = {
|
|
name: 'foo',
|
|
value: 'bar',
|
|
path: '/',
|
|
}
|
|
|
|
expect(deserialize(cookieStr)).toEqual(cookie)
|
|
})
|
|
it('deserializes cookies with Secure', () => {
|
|
const cookieStr = 'foo=bar; Secure'
|
|
const cookie: Cookie = {
|
|
name: 'foo',
|
|
value: 'bar',
|
|
secure: true,
|
|
}
|
|
|
|
expect(deserialize(cookieStr)).toEqual(cookie)
|
|
})
|
|
it('deserializes cookies with HttpOnly', () => {
|
|
const cookieStr = 'foo=bar; HttpOnly'
|
|
const cookie: Cookie = {
|
|
name: 'foo',
|
|
value: 'bar',
|
|
httpOnly: true,
|
|
}
|
|
|
|
expect(deserialize(cookieStr)).toEqual(cookie)
|
|
})
|
|
it('deserializes cookies with HTTPOnly', () => {
|
|
const cookieStr = 'foo=bar; HTTPOnly'
|
|
const cookie: Cookie = {
|
|
name: 'foo',
|
|
value: 'bar',
|
|
httpOnly: true,
|
|
}
|
|
|
|
expect(deserialize(cookieStr)).toEqual(cookie)
|
|
})
|
|
it('deserializes cookies with all properties', () => {
|
|
const cookieStr =
|
|
'foo=bar; Expires=Tue, 09 Mar 2021 08:27:48 GMT; Domain=.stockholm.se; Path=/; Secure; HTTPOnly'
|
|
const cookie: Cookie = {
|
|
name: 'foo',
|
|
value: 'bar',
|
|
expires: 'Tue, 09 Mar 2021 08:27:48 GMT',
|
|
domain: '.stockholm.se',
|
|
path: '/',
|
|
secure: true,
|
|
httpOnly: true,
|
|
}
|
|
|
|
expect(deserialize(cookieStr)).toEqual(cookie)
|
|
})
|
|
})
|
|
describe('serialize', () => {
|
|
it('serializes cookies with only name and value', () => {
|
|
const cookieStr = 'foo=bar'
|
|
const cookie: Cookie = {
|
|
name: 'foo',
|
|
value: 'bar',
|
|
}
|
|
|
|
expect(serialize(cookie)).toEqual(cookieStr)
|
|
})
|
|
it('serializes cookies with Expires', () => {
|
|
const cookieStr = 'foo=bar; Expires=Tue, 09 Mar 2021 08:27:48 GMT'
|
|
const cookie: Cookie = {
|
|
name: 'foo',
|
|
value: 'bar',
|
|
expires: 'Tue, 09 Mar 2021 08:27:48 GMT',
|
|
}
|
|
|
|
expect(serialize(cookie)).toEqual(cookieStr)
|
|
})
|
|
it('serializes cookies with Domain', () => {
|
|
const cookieStr = 'foo=bar; Domain=.stockholm.se'
|
|
const cookie: Cookie = {
|
|
name: 'foo',
|
|
value: 'bar',
|
|
domain: '.stockholm.se',
|
|
}
|
|
|
|
expect(serialize(cookie)).toEqual(cookieStr)
|
|
})
|
|
it('serializes cookies with Path', () => {
|
|
const cookieStr = 'foo=bar; Path=/'
|
|
const cookie: Cookie = {
|
|
name: 'foo',
|
|
value: 'bar',
|
|
path: '/',
|
|
}
|
|
|
|
expect(serialize(cookie)).toEqual(cookieStr)
|
|
})
|
|
it('serializes cookies with Secure', () => {
|
|
const cookieStr = 'foo=bar; Secure'
|
|
const cookie: Cookie = {
|
|
name: 'foo',
|
|
value: 'bar',
|
|
secure: true,
|
|
}
|
|
|
|
expect(serialize(cookie)).toEqual(cookieStr)
|
|
})
|
|
it('serializes cookies with HttpOnly', () => {
|
|
const cookieStr = 'foo=bar; HttpOnly'
|
|
const cookie: Cookie = {
|
|
name: 'foo',
|
|
value: 'bar',
|
|
httpOnly: true,
|
|
}
|
|
|
|
expect(serialize(cookie)).toEqual(cookieStr)
|
|
})
|
|
it('serializes cookies with all properties', () => {
|
|
const cookieStr =
|
|
'foo=bar; Expires=Tue, 09 Mar 2021 08:27:48 GMT; Domain=.stockholm.se; Path=/; Secure; HttpOnly'
|
|
const cookie: Cookie = {
|
|
name: 'foo',
|
|
value: 'bar',
|
|
expires: 'Tue, 09 Mar 2021 08:27:48 GMT',
|
|
domain: '.stockholm.se',
|
|
path: '/',
|
|
secure: true,
|
|
httpOnly: true,
|
|
}
|
|
|
|
expect(serialize(cookie)).toEqual(cookieStr)
|
|
})
|
|
})
|
|
describe('wrap', () => {
|
|
describe('tough cookie', () => {
|
|
let jar: CookieJar
|
|
let manager: CookieManager
|
|
beforeEach(() => {
|
|
jar = new CookieJar()
|
|
manager = wrapToughCookie(jar)
|
|
})
|
|
it('handles getCookieString', async () => {
|
|
const url = 'https://etjanster.stockholm.se/'
|
|
const cookieStr =
|
|
'foo=bar; Domain=.stockholm.se; Path=/; Secure; HttpOnly'
|
|
|
|
await jar.setCookie(cookieStr, url)
|
|
const storedCookies = await manager.getCookieString(
|
|
'https://foo.stockholm.se/bar/baz'
|
|
)
|
|
expect(storedCookies).toEqual('foo=bar')
|
|
})
|
|
it('handles getCookies', async () => {
|
|
const url = 'https://etjanster.stockholm.se/'
|
|
const cookieStr =
|
|
'foo=bar; Domain=.stockholm.se; Path=/; Secure; HttpOnly'
|
|
const cookie: Cookie = {
|
|
name: 'foo',
|
|
value: 'bar',
|
|
domain: 'stockholm.se',
|
|
path: '/',
|
|
secure: true,
|
|
httpOnly: true,
|
|
}
|
|
|
|
await jar.setCookie(cookieStr, url)
|
|
const storedCookies = await manager.getCookies(
|
|
'https://foo.stockholm.se/bar/baz'
|
|
)
|
|
|
|
expect(storedCookies).toHaveLength(1)
|
|
expect(storedCookies[0]).toEqual(cookie)
|
|
})
|
|
it('handles setCookie', async () => {
|
|
const url = 'https://etjanster.stockholm.se/'
|
|
const cookie: Cookie = {
|
|
name: 'foo',
|
|
value: 'bar',
|
|
domain: 'stockholm.se',
|
|
path: '/',
|
|
secure: true,
|
|
httpOnly: true,
|
|
}
|
|
|
|
await manager.setCookie(cookie, url)
|
|
|
|
const cookies = await jar.getCookieString(url)
|
|
expect(cookies).toEqual('foo=bar')
|
|
})
|
|
it('handles setCookieString', async () => {
|
|
const url = 'https://etjanster.stockholm.se/'
|
|
const cookieStr =
|
|
'foo=bar; Domain=.stockholm.se; Path=/; Secure; HttpOnly'
|
|
|
|
await manager.setCookieString(cookieStr, url)
|
|
|
|
const cookies = await jar.getCookieString(url)
|
|
expect(cookies).toEqual('foo=bar')
|
|
})
|
|
it('handles clearAll', async () => {
|
|
const url = 'https://etjanster.stockholm.se/'
|
|
const cookieStr =
|
|
'foo=bar; Domain=.stockholm.se; Path=/; Secure; HttpOnly'
|
|
|
|
await manager.setCookieString(cookieStr, url)
|
|
await manager.clearAll()
|
|
const cookies = await jar.getCookieString(url)
|
|
|
|
expect(cookies).toEqual('')
|
|
})
|
|
})
|
|
describe('@react-native-cookies/cookies', () => {
|
|
let manager: CookieManager
|
|
beforeEach(async () => {
|
|
await RNCookieManager.clearAll()
|
|
manager = wrapReactNativeCookieManager(RNCookieManager)
|
|
})
|
|
it('handles getCookieString', async () => {
|
|
const url = 'https://etjanster.stockholm.se/'
|
|
const cookieStr =
|
|
'foo=bar; Domain=.stockholm.se; Path=/; Secure; HttpOnly'
|
|
|
|
await RNCookieManager.setFromResponse(url, cookieStr)
|
|
const storedCookies = await manager.getCookieString(
|
|
'https://foo.stockholm.se/bar/baz'
|
|
)
|
|
expect(storedCookies).toEqual('foo=bar')
|
|
})
|
|
it('handles getCookies', async () => {
|
|
const url = 'https://etjanster.stockholm.se/'
|
|
const cookieStr =
|
|
'foo=bar; Domain=.stockholm.se; Path=/; Secure; HttpOnly'
|
|
const cookie: Cookie = {
|
|
name: 'foo',
|
|
value: 'bar',
|
|
domain: 'stockholm.se',
|
|
path: '/',
|
|
secure: true,
|
|
httpOnly: true,
|
|
}
|
|
|
|
await RNCookieManager.setFromResponse(url, cookieStr)
|
|
const storedCookies = await manager.getCookies(
|
|
'https://foo.stockholm.se/bar/baz'
|
|
)
|
|
|
|
expect(storedCookies).toHaveLength(1)
|
|
expect(storedCookies[0]).toEqual(cookie)
|
|
})
|
|
it('handles setCookie', async () => {
|
|
const url = 'https://etjanster.stockholm.se/'
|
|
const cookie: Cookie = {
|
|
name: 'foo',
|
|
value: 'bar',
|
|
domain: 'stockholm.se',
|
|
path: '/',
|
|
secure: true,
|
|
httpOnly: true,
|
|
}
|
|
|
|
await manager.setCookie(cookie, url)
|
|
const cookies = await RNCookieManager.get(url)
|
|
|
|
expect(cookies).toHaveProperty('foo')
|
|
expect(cookies['foo'].value).toEqual('bar')
|
|
})
|
|
it('handles setCookieString', async () => {
|
|
const url = 'https://etjanster.stockholm.se/'
|
|
const cookieStr =
|
|
'foo=bar; Domain=.stockholm.se; Path=/; Secure; HttpOnly'
|
|
|
|
await manager.setCookieString(cookieStr, url)
|
|
const cookies = await RNCookieManager.get(url)
|
|
|
|
expect(cookies).toHaveProperty('foo')
|
|
expect(cookies['foo'].value).toEqual('bar')
|
|
})
|
|
it('handles clearAll', async () => {
|
|
const url = 'https://etjanster.stockholm.se/'
|
|
const cookieStr =
|
|
'foo=bar; Domain=.stockholm.se; Path=/; Secure; HttpOnly'
|
|
|
|
await manager.setCookieString(cookieStr, url)
|
|
await manager.clearAll()
|
|
const cookies = await RNCookieManager.get(url)
|
|
|
|
expect(cookies).toEqual({})
|
|
})
|
|
})
|
|
})
|
|
})
|