summaryrefslogtreecommitdiff
path: root/packages/webapi/test/fetch.js
blob: ae5ae038649b52c560524acb68dd3ede5a5553f2 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
import { expect } from 'chai'
import { polyfill } from '../mod.js'

describe('Fetch', () => {
	const target = {}

	before(() => polyfill(target))

	it('Fetch functionality', () => {
		expect(target).to.have.property('fetch').that.is.a('function')
	})

	it('Fetch with https', async () => {
		const { fetch } = target

		const response = await fetch('https://api.openbrewerydb.org/breweries')

		expect(response.constructor).to.equal(target.Response)

		const json = await response.json()

		expect(json).to.be.an('array')
	})

	it('Fetch with file', async () => {
		const { fetch } = target

		const url = new URL('../package.json', import.meta.url)

		const response = await fetch(url)

		expect(response.constructor).to.equal(target.Response)

		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)

		const json = await response.json()

		expect(json.name).to.equal('@astrojs/webapi')
	})

	it('Fetch with missing file', async () => {
		const { fetch } = target

		const url = new URL('../missing.json', import.meta.url)

		const response = await fetch(url)

		expect(response.constructor).to.equal(target.Response)

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

	it('Fetch with (file) Request', async () => {
		const { Request, fetch } = target

		const request = new Request(new URL('../package.json', import.meta.url))

		const response = await fetch(request)

		expect(response.constructor).to.equal(target.Response)

		const json = await response.json()

		expect(json.name).to.equal('@astrojs/webapi')
	})

	it('Fetch with relative file', async () => {
		const { fetch } = target

		const response = await fetch('package.json')

		const json = await response.json()

		expect(json.name).to.equal('@astrojs/webapi')
	})

	it('Fetch with data', async () => {
		const { fetch } = target

		const jsonURI = `data:application/json,${encodeURIComponent(
			JSON.stringify({
				name: '@astrojs/webapi',
			})
		)}`

		const response = await fetch(jsonURI)

		const json = await response.json()

		expect(json.name).to.equal('@astrojs/webapi')
	})
})