Skip to content

Commit

Permalink
Merge branch 'development'
Browse files Browse the repository at this point in the history
  • Loading branch information
davguij committed Feb 21, 2018
2 parents 30a08d9 + 7df522b commit 49d8957
Show file tree
Hide file tree
Showing 4 changed files with 144 additions and 89 deletions.
6 changes: 4 additions & 2 deletions .travis.yml
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,10 @@ node_js:
cache:
directories:
- "node_modules"
before_install:
- "npm install axios rxjs"
before_script:
- "npm install --no-save axios@0.17 rxjs"
script:
- "npm test -- -w=2"
after_success:
- "npm run build"
- "npm run semantic-release"
191 changes: 130 additions & 61 deletions __tests__/index.ts
Original file line number Diff line number Diff line change
@@ -1,130 +1,194 @@
import { rxios } from '../src';
jest.setTimeout(20000);

import { rxios, Rxios } from '../src';
import * as nock from 'nock';

const mockServer = nock('http://test.com');

describe('Instantiation', () => {
let rxiosInstance: rxios;

afterEach(() => {
rxiosInstance = null;
});

it('works with new rxios()', () => {
rxiosInstance = new rxios({
baseURL: 'http://test.com/',
});
expect(rxiosInstance).toBeInstanceOf(rxios);
});

it('also works with new Rxios()', () => {
rxiosInstance = new Rxios({
baseURL: 'http://test.com/',
});
expect(rxiosInstance).toBeInstanceOf(rxios);
});
});

describe('GET method', () => {
let rxiosInstance: rxios;

beforeEach(() => {
rxiosInstance = new rxios({
baseURL: 'http://test.com/'
baseURL: 'http://test.com/',
});
});

afterEach(() => {
rxiosInstance = null;
});

it('makes a successful GET req', async () => {
const expected = { id: 1, title: 'rxios is so cool!', author: 'davguij' };
mockServer.get('/posts/1').reply(200, expected);
const promise = new Promise((resolve, reject) => {
rxiosInstance.get('http://test.com/posts/1').subscribe(resp => {
resolve(resp);
}, err => {
reject(err);
});
rxiosInstance.get('http://test.com/posts/1').subscribe(
resp => {
resolve(resp);
},
err => {
reject(err);
}
);
});
await expect(promise).resolves.toEqual(expected);
});

it('throws an error on a failed GET req', async () => {
mockServer.get('/posts/1').replyWithError('Request failed with status code 500');
mockServer
.get('/posts/1')
.replyWithError('Request failed with status code 500');

const promise = new Promise((resolve, reject) => {
rxiosInstance.get('http://test.com/posts/1').subscribe(resp => {
resolve(resp);
}, err => {
reject(err);
});
rxiosInstance.get('http://test.com/posts/1').subscribe(
resp => {
resolve(resp);
},
err => {
reject(err);
}
);
});
await expect(promise).rejects.toBeInstanceOf(Error);
});

it('accepts queryParams', async () => {
mockServer.get('/posts').query({title: 'rxios', author: 'davguij'}).reply(200);
mockServer
.get('/posts')
.query({ title: 'rxios', author: 'davguij' })
.reply(200);
const promise = new Promise((resolve, reject) => {
rxiosInstance.get('http://test.com/posts', {title: 'rxios', author: 'davguij'}).subscribe(resp => {
resolve(resp);
}, err => {
reject(err);
})
rxiosInstance
.get('http://test.com/posts', { title: 'rxios', author: 'davguij' })
.subscribe(
resp => {
resolve(resp);
},
err => {
reject(err);
}
);
});
await expect(promise).resolves.toBeDefined();
});

it('accepts a type for the response', async () => {
interface i {
cool: boolean;
};
}

const response: i = { cool: true };

const response: i = {cool: true};

mockServer.get('/post/1').reply(200, response);
const promise = new Promise((resolve, reject) => {
rxiosInstance.get<i>('http://test.com/post/1').subscribe(resp => {
resolve(resp);
}, err => {
reject(err);
})
rxiosInstance.get<i>('http://test.com/post/1').subscribe(
resp => {
resolve(resp);
},
err => {
reject(err);
}
);
});
await expect(promise).resolves.toBeDefined();
});

});

describe('POST method', () => {
let rxiosInstance: rxios;

beforeEach(() => {
rxiosInstance = new rxios({
baseURL: 'http://test.com/'
baseURL: 'http://test.com/',
});
});

afterEach(() => {
rxiosInstance = null;
});

it('makes a successful POST req', async () => {
mockServer.post('/posts').reply(201);
const body = { title: 'json-server', author: 'davguij' };
const promise = new Promise((resolve, reject) => {
rxiosInstance.post('posts', body).subscribe(resp => {
resolve(resp);
}, err => {
reject(err);
})
rxiosInstance.post('posts', body).subscribe(
resp => {
resolve(resp);
},
err => {
reject(err);
}
);
});
await expect(promise).resolves.toBeDefined();
});

it('throws an error on a failed POST req', async () => {
mockServer.post('/posts').replyWithError('Request failed with status code 500');
mockServer
.post('/posts')
.replyWithError('Request failed with status code 500');

const promise = new Promise((resolve, reject) => {
rxiosInstance.post('http://test.com/posts', {}).subscribe(resp => {
resolve(resp);
}, err => {
reject(err);
});
rxiosInstance.post('http://test.com/posts', {}).subscribe(
resp => {
resolve(resp);
},
err => {
reject(err);
}
);
});
await expect(promise).rejects.toBeInstanceOf(Error);
});
});


describe('rest of methods', () => {
let rxiosInstance: rxios;

beforeEach(() => {
rxiosInstance = new rxios({
baseURL: 'http://test.com/'
baseURL: 'http://test.com/',
});
});

afterEach(() => {
rxiosInstance = null;
});

it('makes a successful PUT req', async () => {
const body = { title: 'json-server', author: 'davguij' };
mockServer.put('/post/1').reply(200, body);
const promise = new Promise((resolve, reject) => {
rxiosInstance.put('post/1', body).subscribe(resp => {
resolve(resp);
}, err => {
reject(err);
})
rxiosInstance.put('post/1', body).subscribe(
resp => {
resolve(resp);
},
err => {
reject(err);
}
);
});
await expect(promise).resolves.toEqual(body);
});
Expand All @@ -133,25 +197,30 @@ describe('rest of methods', () => {
const body = { title: 'json-server', author: 'davguij' };
mockServer.patch('/post/1').reply(200, body);
const promise = new Promise((resolve, reject) => {
rxiosInstance.patch('post/1', body).subscribe(resp => {
resolve(resp);
}, err => {
reject(err);
})
rxiosInstance.patch('post/1', body).subscribe(
resp => {
resolve(resp);
},
err => {
reject(err);
}
);
});
await expect(promise).resolves.toEqual(body);
});

it('makes a successful DELETE req', async () => {
mockServer.delete('/post/1').reply(200);
const promise = new Promise((resolve, reject) => {
rxiosInstance.delete('post/1').subscribe(resp => {
resolve(resp);
}, err => {
reject(err);
})
rxiosInstance.delete('post/1').subscribe(
resp => {
resolve(resp);
},
err => {
reject(err);
}
);
});
await expect(promise).resolves.toBeDefined();
});

});
32 changes: 7 additions & 25 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Loading

0 comments on commit 49d8957

Please sign in to comment.