diff --git a/test/api.js b/test/api.js index fad747a..ac646cf 100644 --- a/test/api.js +++ b/test/api.js @@ -1,23 +1,23 @@ import path from 'path' import test from 'ava' import sepia from 'sepia' -import MusicBrainz from '../src/api' +import MusicBrainz, { MusicBrainzError } from '../src/api' sepia.fixtureDir(path.join(__dirname, 'fixtures')) -test.beforeEach(t => { - t.context.client = new MusicBrainz() +let client + +test.before(t => { + client = new MusicBrainz() }) test('getLookupURL() generates a lookup URL', t => { - const { client } = t.context t.is(client.getLookupURL('artist', 'c8da2e40-bd28-4d4e-813a-bd2f51958ba8', { inc: ['recordings', 'release-groups'] }), 'artist/c8da2e40-bd28-4d4e-813a-bd2f51958ba8?inc=recordings%2Brelease-groups') }) test('getBrowseURL() generates a browse URL', t => { - const { client } = t.context t.is(client.getBrowseURL('recording', { artist: 'c8da2e40-bd28-4d4e-813a-bd2f51958ba8', limit: null, @@ -26,14 +26,20 @@ test('getBrowseURL() generates a browse URL', t => { }) test('getSearchURL() generates a search URL', t => { - const { client } = t.context t.is(client.getSearchURL('artist', 'Lures', { inc: null }), 'artist?query=Lures') }) test('lookup() sends a lookup query', t => { - const { client } = t.context return client.lookup('artist', 'c8da2e40-bd28-4d4e-813a-bd2f51958ba8').then(response => { t.is(response.id, 'c8da2e40-bd28-4d4e-813a-bd2f51958ba8') t.is(response.type, 'Group') }) }) + +test('rejects the promise when the API returns an error', t => { + t.throws( + client.lookup('artist', '5b11f4ce-a62d-471e-81fc-a69a8278c7da', { + inc: ['foobar'] + }), MusicBrainzError + ) +}) diff --git a/test/fixtures/215ca91efacd4b7a1e7800813c8382e0 b/test/fixtures/215ca91efacd4b7a1e7800813c8382e0 new file mode 100644 index 0000000..bf78c0f --- /dev/null +++ b/test/fixtures/215ca91efacd4b7a1e7800813c8382e0 @@ -0,0 +1 @@ +{"error":"foobar is not a valid inc parameter for the artist resource."} \ No newline at end of file diff --git a/test/fixtures/215ca91efacd4b7a1e7800813c8382e0.headers b/test/fixtures/215ca91efacd4b7a1e7800813c8382e0.headers new file mode 100644 index 0000000..87bdaa8 --- /dev/null +++ b/test/fixtures/215ca91efacd4b7a1e7800813c8382e0.headers @@ -0,0 +1,27 @@ +{ + "statusCode": 400, + "headers": { + "date": "Fri, 09 Dec 2016 00:06:41 GMT", + "content-type": "application/json; charset=utf-8", + "content-length": "72", + "connection": "keep-alive", + "keep-alive": "timeout=15", + "x-ratelimit-limit": "700", + "x-ratelimit-remaining": "575", + "x-ratelimit-reset": "1481242002", + "server": "Plack::Handler::Starlet", + "etag": "\"d54d2bc5c412c1bb3c02bfc91d13a900\"", + "access-control-allow-origin": "*" + }, + "url": "http://musicbrainz.org:80/ws/2/artist/5b11f4ce-a62d-471e-81fc-a69a8278c7da?inc=foobar&fmt=json", + "time": 613, + "request": { + "method": "GET", + "headers": { + "User-Agent": "graphbrainz/3.1.1 ( https://github.com/exogen/graphbrainz )", + "host": "musicbrainz.org", + "accept-encoding": "gzip, deflate", + "accept": "application/json" + } + } +} \ No newline at end of file diff --git a/test/schema.js b/test/schema.js index faa3eac..69f1c7f 100644 --- a/test/schema.js +++ b/test/schema.js @@ -8,9 +8,15 @@ import createLoaders from '../src/loaders' sepia.fixtureDir(path.join(__dirname, 'fixtures')) -const client = new MusicBrainz() -const loaders = createLoaders(client) -const context = { client, loaders } +let client +let loaders +let context + +test.before(t => { + client = new MusicBrainz() + loaders = createLoaders(client) + context = { client, loaders } +}) test('schema has a node field', t => { const query = `