skolplattformen-backup/libs/api-skolplattformen/lib/cookies.test.ts

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({})
})
})
})
})