123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152 |
- const { Snekfetch, TestRoot } = require('./interop');
- const server = require('./server');
- function makeTestObj({ unicode = true, numbers = false } = {}) {
- const test = {
- Hello: 'world',
- Test: numbers ? 1337 : '1337',
- };
- if (unicode)
- test.Unicode = '( ͡° ͜ʖ ͡°)';
- return {
- test,
- check: (obj) => {
- expect(obj).not.toBeUndefined();
- expect(obj.Hello).toBe(test.Hello);
- expect(obj.Test).toBe(test.Test);
- if (unicode)
- expect(obj.Unicode).toBe(test.Unicode);
- },
- };
- }
- test('should return a promise', () => {
- expect(Snekfetch.get(`${TestRoot}/get`).end())
- .toBeInstanceOf(Promise);
- });
- test('should reject with error on network failure', () => {
- const invalid = 'http://localhost:0/';
- /* https://gc.gy/❥ȗ.png
- return expect(Snekfetch.get(invalid).end())
- .rejects.toBeInstanceOf(Error);*/
- return Snekfetch.get(invalid).catch((err) => {
- expect(err.name).toMatch(/(Fetch)?Error/);
- });
- });
- test('should resolve on success', () =>
- Snekfetch.get(`${TestRoot}/get`).then((res) => {
- expect(res.status).toBe(200);
- expect(res.ok).toBe(true);
- expect(res).toHaveProperty('text');
- expect(res).toHaveProperty('body');
- })
- );
- test('end should work', () =>
- Snekfetch.get(`${TestRoot}/get`).end((err, res) => {
- expect(err).toBe(null);
- expect(res.body).not.toBeUndefined();
- })
- );
- test('should reject if response is not between 200 and 300', () =>
- Snekfetch.get(`${TestRoot}/404`).catch((err) => {
- expect(err.status).toBe(404);
- expect(err.ok).toBe(false);
- })
- );
- test('unzipping works', () =>
- Snekfetch.get(`${TestRoot}/gzip`)
- .then((res) => {
- expect(res.body).not.toBeUndefined();
- expect(res.body.gzipped).toBe(true);
- })
- );
- test('query should work', () => {
- const { test, check } = makeTestObj();
- Promise.all([
- Snekfetch.get(`${TestRoot}/get?inline=true`)
- .query(test).end(),
- Snekfetch.get(`${TestRoot}/get?inline=true`, { query: test })
- .end(),
- ])
- .then((ress) => {
- for (const res of ress) {
- const { args } = res.body;
- check(args);
- expect(args.inline).toBe('true');
- }
- });
- });
- test('headers should work', () => {
- const { test, check } = makeTestObj({ unicode: false });
- return Promise.all([
- Snekfetch.get(`${TestRoot}/get`)
- .set(test).end(),
- Snekfetch.get(`${TestRoot}/get`, { headers: test })
- .end(),
- ])
- .then((ress) => {
- for (const res of ress)
- check(res.body.headers);
- });
- });
- test('attach should work', () => {
- const { test, check } = makeTestObj();
- return Snekfetch.post(`${TestRoot}/post`)
- .attach(test)
- .then((res) => check(res.body.form));
- });
- test('send should work with json', () => {
- const { test, check } = makeTestObj({ numbers: true });
- return Promise.all([
- Snekfetch.post(`${TestRoot}/post`)
- .send(test).end(),
- Snekfetch.post(`${TestRoot}/post`, { data: test })
- .end(),
- ])
- .then((ress) => {
- for (const res of ress)
- check(res.body.json);
- });
- });
- test('send should work with urlencoded', () => {
- const { test, check } = makeTestObj();
- return Snekfetch.post(`${TestRoot}/post`)
- .set('content-type', 'application/x-www-form-urlencoded')
- .send(test)
- .then((res) => check(res.body.form));
- });
- test('invalid json is just text', () =>
- Snekfetch.get(`http://localhost:${server.port}/invalid-json`)
- .then((res) => {
- expect(res.body).toBe('{ "a": 1');
- })
- );
- test('x-www-form-urlencoded response body', () =>
- Snekfetch.get(`http://localhost:${server.port}/form-urlencoded`)
- .then((res) => {
- const { body } = res;
- expect(body.test).toBe('1');
- expect(body.hello).toBe('world');
- })
- );
- test('redirects', () =>
- Snekfetch.get(`${TestRoot}/redirect/1`)
- .then((res) => {
- expect(res.body).not.toBeUndefined();
- expect(res.body.url).toBe(`${TestRoot}/get`);
- })
- );
|