2022-04-11 01:29:46 +00:00
|
|
|
import { expect } from 'chai'
|
2022-03-07 21:36:22 +00:00
|
|
|
import { polyfill } from '../mod.js'
|
|
|
|
|
2022-04-11 01:29:46 +00:00
|
|
|
describe('Fetch', () => {
|
|
|
|
const target = {}
|
2022-03-07 21:37:50 +00:00
|
|
|
|
2022-04-11 01:29:46 +00:00
|
|
|
before(() => polyfill(target))
|
2022-03-07 21:37:50 +00:00
|
|
|
|
2022-04-11 01:29:46 +00:00
|
|
|
it('Fetch functionality', () => {
|
|
|
|
expect(target).to.have.property('fetch').that.is.a('function')
|
|
|
|
})
|
2022-03-07 21:37:50 +00:00
|
|
|
|
2022-04-11 01:29:46 +00:00
|
|
|
it('Fetch with https', async () => {
|
|
|
|
const { fetch } = target
|
2022-03-07 21:36:22 +00:00
|
|
|
|
2022-04-11 01:29:46 +00:00
|
|
|
const response = await fetch('https://api.openbrewerydb.org/breweries')
|
2022-03-07 21:36:22 +00:00
|
|
|
|
2022-04-11 01:29:46 +00:00
|
|
|
expect(response.constructor).to.equal(target.Response)
|
2022-03-07 21:36:22 +00:00
|
|
|
|
2022-04-11 01:29:46 +00:00
|
|
|
const json = await response.json()
|
2022-03-07 21:36:22 +00:00
|
|
|
|
2022-04-11 01:29:46 +00:00
|
|
|
expect(json).to.be.an('array')
|
|
|
|
})
|
2022-03-07 21:36:22 +00:00
|
|
|
|
2022-04-11 01:29:46 +00:00
|
|
|
it('Fetch with file', async () => {
|
|
|
|
const { fetch } = target
|
2022-03-07 21:37:50 +00:00
|
|
|
|
2022-04-11 01:29:46 +00:00
|
|
|
const url = new URL('../package.json', import.meta.url)
|
2022-03-07 21:36:22 +00:00
|
|
|
|
2022-04-11 01:29:46 +00:00
|
|
|
const response = await fetch(url)
|
2022-03-07 21:36:22 +00:00
|
|
|
|
2022-04-11 01:29:46 +00:00
|
|
|
expect(response.constructor).to.equal(target.Response)
|
2022-03-07 21:36:22 +00:00
|
|
|
|
2022-04-11 01:29:46 +00:00
|
|
|
expect(response.status).to.equal(200)
|
|
|
|
expect(response.statusText).to.be.empty
|
|
|
|
expect(response.headers.has('date')).to.equal(true)
|
|
|
|
expect(response.headers.has('content-length')).to.equal(true)
|
|
|
|
expect(response.headers.has('last-modified')).to.equal(true)
|
2022-03-07 21:36:22 +00:00
|
|
|
|
2022-04-11 01:29:46 +00:00
|
|
|
const json = await response.json()
|
2022-03-07 21:36:22 +00:00
|
|
|
|
2022-04-11 01:29:46 +00:00
|
|
|
expect(json.name).to.equal('@astrojs/webapi')
|
|
|
|
})
|
2022-03-07 21:36:22 +00:00
|
|
|
|
2022-04-11 01:29:46 +00:00
|
|
|
it('Fetch with missing file', async () => {
|
|
|
|
const { fetch } = target
|
2022-03-07 21:36:22 +00:00
|
|
|
|
2022-04-11 01:29:46 +00:00
|
|
|
const url = new URL('../missing.json', import.meta.url)
|
2022-03-07 21:37:50 +00:00
|
|
|
|
2022-04-11 01:29:46 +00:00
|
|
|
const response = await fetch(url)
|
2022-03-07 21:36:22 +00:00
|
|
|
|
2022-04-11 01:29:46 +00:00
|
|
|
expect(response.constructor).to.equal(target.Response)
|
2022-03-07 21:36:22 +00:00
|
|
|
|
2022-04-11 01:29:46 +00:00
|
|
|
expect(response.status).to.equal(404)
|
|
|
|
expect(response.statusText).to.be.empty
|
|
|
|
expect(response.headers.has('date')).to.equal(true)
|
|
|
|
expect(response.headers.has('content-length')).to.equal(false)
|
|
|
|
expect(response.headers.has('last-modified')).to.equal(false)
|
|
|
|
})
|
2022-03-07 21:36:22 +00:00
|
|
|
|
2022-04-11 01:29:46 +00:00
|
|
|
it('Fetch with (file) Request', async () => {
|
|
|
|
const { Request, fetch } = target
|
2022-03-07 21:36:22 +00:00
|
|
|
|
2022-04-11 01:29:46 +00:00
|
|
|
const request = new Request(new URL('../package.json', import.meta.url))
|
2022-03-07 21:36:22 +00:00
|
|
|
|
2022-04-11 01:29:46 +00:00
|
|
|
const response = await fetch(request)
|
2022-03-07 21:37:50 +00:00
|
|
|
|
2022-04-11 01:29:46 +00:00
|
|
|
expect(response.constructor).to.equal(target.Response)
|
2022-03-07 21:36:22 +00:00
|
|
|
|
2022-04-11 01:29:46 +00:00
|
|
|
const json = await response.json()
|
2022-03-07 21:36:22 +00:00
|
|
|
|
2022-04-11 01:29:46 +00:00
|
|
|
expect(json.name).to.equal('@astrojs/webapi')
|
|
|
|
})
|
2022-03-07 21:36:22 +00:00
|
|
|
|
2022-04-11 01:29:46 +00:00
|
|
|
it('Fetch with relative file', async () => {
|
|
|
|
const { fetch } = target
|
2022-03-07 21:36:22 +00:00
|
|
|
|
2022-04-11 01:29:46 +00:00
|
|
|
const response = await fetch('package.json')
|
2022-03-07 21:36:22 +00:00
|
|
|
|
2022-04-11 01:29:46 +00:00
|
|
|
const json = await response.json()
|
2022-03-07 21:36:22 +00:00
|
|
|
|
2022-04-11 01:29:46 +00:00
|
|
|
expect(json.name).to.equal('@astrojs/webapi')
|
|
|
|
})
|
2022-03-07 21:37:50 +00:00
|
|
|
|
2022-04-11 01:29:46 +00:00
|
|
|
it('Fetch with data', async () => {
|
|
|
|
const { fetch } = target
|
2022-03-07 21:36:22 +00:00
|
|
|
|
2022-04-11 01:29:46 +00:00
|
|
|
const jsonURI = `data:application/json,${encodeURIComponent(
|
|
|
|
JSON.stringify({
|
|
|
|
name: '@astrojs/webapi',
|
|
|
|
})
|
|
|
|
)}`
|
2022-03-07 21:36:22 +00:00
|
|
|
|
2022-04-11 01:29:46 +00:00
|
|
|
const response = await fetch(jsonURI)
|
2022-03-07 21:36:22 +00:00
|
|
|
|
2022-04-11 01:29:46 +00:00
|
|
|
const json = await response.json()
|
2022-03-07 21:36:22 +00:00
|
|
|
|
2022-04-11 01:29:46 +00:00
|
|
|
expect(json.name).to.equal('@astrojs/webapi')
|
|
|
|
})
|
2022-03-07 21:36:22 +00:00
|
|
|
})
|