2021-11-08 03:51:49 -08:00
|
|
|
import {FormData as FormDataNode} from 'formdata-node';
|
2020-06-10 13:31:35 -07:00
|
|
|
import chai from 'chai';
|
2022-01-20 12:42:44 -08:00
|
|
|
import {Request, Response, FormData, Blob} from '../src/index.js';
|
2020-06-10 13:31:35 -07:00
|
|
|
|
|
|
|
const {expect} = chai;
|
|
|
|
|
|
|
|
describe('FormData', () => {
|
2021-11-08 03:51:49 -08:00
|
|
|
it('Consume empty URLSearchParams as FormData', async () => {
|
|
|
|
const res = new Response(new URLSearchParams());
|
|
|
|
const fd = await res.formData();
|
2020-06-10 13:31:35 -07:00
|
|
|
|
2021-11-08 03:51:49 -08:00
|
|
|
expect(fd).to.be.instanceOf(FormData);
|
2020-06-10 13:31:35 -07:00
|
|
|
});
|
|
|
|
|
2021-11-08 03:51:49 -08:00
|
|
|
it('Consume empty URLSearchParams as FormData', async () => {
|
|
|
|
const req = new Request('about:blank', {
|
|
|
|
method: 'POST',
|
|
|
|
body: new URLSearchParams()
|
|
|
|
});
|
|
|
|
const fd = await req.formData();
|
2020-06-10 13:31:35 -07:00
|
|
|
|
2021-11-08 03:51:49 -08:00
|
|
|
expect(fd).to.be.instanceOf(FormData);
|
|
|
|
});
|
2020-06-10 13:31:35 -07:00
|
|
|
|
2021-11-08 03:51:49 -08:00
|
|
|
it('Consume empty response.formData() as FormData', async () => {
|
|
|
|
const res = new Response(new FormData());
|
|
|
|
const fd = await res.formData();
|
2020-06-10 13:31:35 -07:00
|
|
|
|
2021-11-08 03:51:49 -08:00
|
|
|
expect(fd).to.be.instanceOf(FormData);
|
2020-06-10 13:31:35 -07:00
|
|
|
});
|
|
|
|
|
2021-11-08 03:51:49 -08:00
|
|
|
it('Consume empty response.formData() as FormData', async () => {
|
|
|
|
const res = new Response(new FormData());
|
|
|
|
const fd = await res.formData();
|
2020-06-10 13:31:35 -07:00
|
|
|
|
2021-11-08 03:51:49 -08:00
|
|
|
expect(fd).to.be.instanceOf(FormData);
|
|
|
|
});
|
2020-06-10 13:31:35 -07:00
|
|
|
|
2021-11-08 03:51:49 -08:00
|
|
|
it('Consume empty request.formData() as FormData', async () => {
|
|
|
|
const req = new Request('about:blank', {
|
|
|
|
method: 'POST',
|
|
|
|
body: new FormData()
|
|
|
|
});
|
|
|
|
const fd = await req.formData();
|
2020-06-10 13:31:35 -07:00
|
|
|
|
2021-11-08 03:51:49 -08:00
|
|
|
expect(fd).to.be.instanceOf(FormData);
|
2020-06-10 13:31:35 -07:00
|
|
|
});
|
|
|
|
|
2021-11-08 03:51:49 -08:00
|
|
|
it('Consume URLSearchParams with entries as FormData', async () => {
|
|
|
|
const res = new Response(new URLSearchParams({foo: 'bar'}));
|
|
|
|
const fd = await res.formData();
|
2020-06-10 13:31:35 -07:00
|
|
|
|
2021-11-08 03:51:49 -08:00
|
|
|
expect(fd.get('foo')).to.be.equal('bar');
|
2020-06-10 13:31:35 -07:00
|
|
|
});
|
|
|
|
|
2021-11-08 03:51:49 -08:00
|
|
|
it('should return a length for empty form-data', async () => {
|
2020-06-10 13:31:35 -07:00
|
|
|
const form = new FormData();
|
2021-11-08 03:51:49 -08:00
|
|
|
const ab = await new Request('http://a', {
|
|
|
|
method: 'post',
|
|
|
|
body: form
|
|
|
|
}).arrayBuffer();
|
2020-06-10 13:31:35 -07:00
|
|
|
|
2021-11-08 03:51:49 -08:00
|
|
|
expect(ab.byteLength).to.be.greaterThan(30);
|
2020-06-10 13:31:35 -07:00
|
|
|
});
|
|
|
|
|
2021-11-08 03:51:49 -08:00
|
|
|
it('should add a Blob field\'s size to the FormData length', async () => {
|
2020-06-10 13:31:35 -07:00
|
|
|
const form = new FormData();
|
2021-11-08 03:51:49 -08:00
|
|
|
const string = 'Hello, world!';
|
2020-06-10 13:31:35 -07:00
|
|
|
form.set('field', string);
|
2021-11-08 03:51:49 -08:00
|
|
|
const fd = await new Request('about:blank', {method: 'POST', body: form}).formData();
|
|
|
|
expect(fd.get('field')).to.equal(string);
|
2020-06-10 13:31:35 -07:00
|
|
|
});
|
|
|
|
|
2021-11-08 03:51:49 -08:00
|
|
|
it('should return a length for a Blob field', async () => {
|
2020-06-10 13:31:35 -07:00
|
|
|
const form = new FormData();
|
2021-11-08 03:51:49 -08:00
|
|
|
const blob = new Blob(['Hello, world!'], {type: 'text/plain'});
|
|
|
|
form.set('blob', blob);
|
|
|
|
|
|
|
|
const fd = await new Response(form).formData();
|
2020-06-10 13:31:35 -07:00
|
|
|
|
2021-11-08 03:51:49 -08:00
|
|
|
expect(fd.get('blob').size).to.equal(13);
|
|
|
|
});
|
2020-06-10 13:31:35 -07:00
|
|
|
|
2021-11-08 03:51:49 -08:00
|
|
|
it('FormData-node still works thanks to symbol.hasInstance', async () => {
|
|
|
|
const form = new FormDataNode();
|
|
|
|
form.append('file', new Blob(['abc'], {type: 'text/html'}));
|
|
|
|
const res = new Response(form);
|
|
|
|
const fd = await res.formData();
|
2020-06-10 13:31:35 -07:00
|
|
|
|
2021-11-08 03:51:49 -08:00
|
|
|
expect(await fd.get('file').text()).to.equal('abc');
|
|
|
|
expect(fd.get('file').type).to.equal('text/html');
|
2020-06-10 13:31:35 -07:00
|
|
|
});
|
|
|
|
});
|