diff --git a/package.json b/package.json index a98abcf..3165ba7 100644 --- a/package.json +++ b/package.json @@ -36,6 +36,7 @@ "test:coverage": "cross-env NODE_ENV=test nyc npm run test:only", "test:only": "cross-env VCR_MODE=playback ava", "test:record": "cross-env VCR_MODE=record ava", + "test:record-new": "cross-env VCR_MODE=cache ava --serial", "test:watch": "npm run test:only -- --watch", "update-schema": "npm run -s print-schema:json > schema.json" }, diff --git a/src/api.js b/src/api/client.js similarity index 60% rename from src/api.js rename to src/api/client.js index 52d2bf3..a6280a1 100644 --- a/src/api.js +++ b/src/api/client.js @@ -1,11 +1,10 @@ import request from 'request' import retry from 'retry' -import qs from 'qs' import ExtendableError from 'es6-error' -import RateLimit from './rate-limit' -import pkg from '../package.json' +import RateLimit from '../rate-limit' +import pkg from '../../package.json' -const debug = require('debug')('graphbrainz:api') +const debug = require('debug')('graphbrainz:api/client') // If the `request` callback returns an error, it indicates a failure at a lower // level than the HTTP response itself. If it's any of the following error @@ -21,19 +20,20 @@ const RETRY_CODES = { EAI_AGAIN: true } -export class MusicBrainzError extends ExtendableError { +export class ClientError extends ExtendableError { constructor (message, statusCode) { super(message) this.statusCode = statusCode } } -export default class MusicBrainz { +export default class Client { constructor ({ baseURL = process.env.MUSICBRAINZ_BASE_URL || 'http://musicbrainz.org/ws/2/', userAgent = `${pkg.name}/${pkg.version} ` + `( ${pkg.homepage || pkg.author.url || pkg.author.email} )`, extraHeaders = {}, + errorClass = ClientError, timeout = 60000, // MusicBrainz API requests are limited to an *average* of 1 req/sec. // That means if, for example, we only need to make a few API requests to @@ -41,8 +41,8 @@ export default class MusicBrainz { // we then wait a few seconds before making more. In practice this can // seemingly be set to about 5 requests every 5 seconds before we're // considered to exceed the rate limit. - limit = 5, - period = 5500, + limit = 1, + period = 1000, concurrency = 10, retries = 10, // It's OK for `retryDelayMin` to be less than one second, even 0, because @@ -57,6 +57,7 @@ export default class MusicBrainz { this.baseURL = baseURL this.userAgent = userAgent this.extraHeaders = extraHeaders + this.errorClass = errorClass this.timeout = timeout this.limiter = new RateLimit({ limit, period, concurrency }) this.retryOptions = { @@ -73,36 +74,48 @@ export default class MusicBrainz { * `RETRY_CODES`. */ shouldRetry (err) { - if (err instanceof MusicBrainzError) { + if (err instanceof this.errorClass) { return err.statusCode >= 500 && err.statusCode < 600 } return RETRY_CODES[err.code] || false } + parseErrorMessage (response, body) { + return typeof body === 'string' && body ? body : `${response.statusCode}` + } + /** * Send a request without any retrying or rate limiting. * Use `get` instead. */ - _get (path, params, info = {}) { + _get (path, options = {}, info = {}) { return new Promise((resolve, reject) => { - const options = { + options = { baseUrl: this.baseURL, url: path, - qs: { ...params, fmt: 'json' }, - json: true, gzip: true, - headers: { 'User-Agent': this.userAgent, ...this.extraHeaders }, - timeout: this.timeout + timeout: this.timeout, + ...options, + headers: { + 'User-Agent': this.userAgent, + ...this.extraHeaders, + ...options.headers + } } - debug(`Sending request. url=${path} attempt=${info.currentAttempt}`) + debug(`Sending request. url=${this.baseURL}${path} attempt=${info.currentAttempt}`) request(options, (err, response, body) => { if (err) { + debug(`Error: “${err}” url=${this.baseURL}${path}`) reject(err) - } else if (response.statusCode !== 200) { - const message = (body && body.error) || '' - reject(new MusicBrainzError(message, response.statusCode)) + } else if (response.statusCode >= 400) { + const message = this.parseErrorMessage(response, body) + debug(`Error: “${message}” url=${this.baseURL}${path}`) + const ClientError = this.errorClass + reject(new ClientError(message, response.statusCode)) + } else if (options.method === 'HEAD') { + resolve(response.headers) } else { resolve(body) } @@ -113,7 +126,7 @@ export default class MusicBrainz { /** * Send a request with retrying and rate limiting. */ - get (path, params) { + get (path, options = {}) { return new Promise((resolve, reject) => { const fn = this._get.bind(this) const operation = retry.operation(this.retryOptions) @@ -121,7 +134,7 @@ export default class MusicBrainz { // This will increase the priority in our `RateLimit` queue for each // retry, so that newer requests don't delay this one further. const priority = currentAttempt - this.limiter.enqueue(fn, [path, params, { currentAttempt }], priority) + this.limiter.enqueue(fn, [path, options, { currentAttempt }], priority) .then(resolve) .catch(err => { if (!this.shouldRetry(err) || !operation.retry(err)) { @@ -131,64 +144,4 @@ export default class MusicBrainz { }) }) } - - stringifyParams (params) { - if (Array.isArray(params.inc)) { - params = { - ...params, - inc: params.inc.join('+') - } - } - if (Array.isArray(params.type)) { - params = { - ...params, - type: params.type.join('|') - } - } - if (Array.isArray(params.status)) { - params = { - ...params, - status: params.status.join('|') - } - } - return qs.stringify(params, { - skipNulls: true, - filter: (key, value) => value === '' ? undefined : value - }) - } - - getURL (path, params) { - const query = params ? this.stringifyParams(params) : '' - return query ? `${path}?${query}` : path - } - - getLookupURL (entity, id, params) { - if (id == null) { - return this.getBrowseURL(entity, params) - } - return this.getURL(`${entity}/${id}`, params) - } - - lookup (entity, id, params = {}) { - const url = this.getLookupURL(entity, id, params) - return this.get(url) - } - - getBrowseURL (entity, params) { - return this.getURL(entity, params) - } - - browse (entity, params = {}) { - const url = this.getBrowseURL(entity, params) - return this.get(url) - } - - getSearchURL (entity, query, params) { - return this.getURL(entity, { ...params, query }) - } - - search (entity, query, params = {}) { - const url = this.getSearchURL(entity, query, params) - return this.get(url) - } } diff --git a/src/api/cover-art-archive.js b/src/api/cover-art-archive.js new file mode 100644 index 0000000..3d03cfd --- /dev/null +++ b/src/api/cover-art-archive.js @@ -0,0 +1,47 @@ +import Client, { ClientError } from './client' + +export class CoverArtArchiveError extends ClientError {} + +export default class CoverArtArchive extends Client { + constructor ({ + baseURL = process.env.COVER_ART_ARCHIVE_BASE_URL || 'http://coverartarchive.org/', + errorClass = CoverArtArchiveError, + limit = 10, + period = 1000, + ...options + } = {}) { + super({ baseURL, errorClass, limit, period, ...options }) + } + + parseErrorMessage (response, body) { + if (typeof body === 'string' && body.startsWith('([^<]+)<\/h1>/i.exec(body) + const message = /
([^<]+)<\/p>/i.exec(body) + return `${heading ? heading[1] + ': ' : ''}${message ? message[1] : ''}` + } + return super.parseErrorMessage(response, body) + } + + getImagesURL (entity, mbid) { + return `${entity}/${mbid}` + } + + images (entity, mbid) { + const url = this.getImagesURL(entity, mbid) + return this.get(url, { json: true }) + } + + getImageURL (entity, mbid, typeOrID = 'front', size) { + let url = `${entity}/${mbid}/${typeOrID}` + if (size != null) { + url += `-${size}` + } + return url + } + + imageURL (entity, mbid, typeOrID = 'front', size) { + const url = this.getImageURL(entity, mbid, typeOrID, size) + return this.get(url, { method: 'HEAD', followRedirect: false }) + .then(headers => headers.location) + } +} diff --git a/src/api/index.js b/src/api/index.js new file mode 100644 index 0000000..fe1b7e9 --- /dev/null +++ b/src/api/index.js @@ -0,0 +1,10 @@ +import MusicBrainz, { MusicBrainzError } from './musicbrainz' +import CoverArtArchive, { CoverArtArchiveError } from './cover-art-archive' + +export { + MusicBrainz as default, + MusicBrainz, + MusicBrainzError, + CoverArtArchive, + CoverArtArchiveError +} diff --git a/src/api/musicbrainz.js b/src/api/musicbrainz.js new file mode 100644 index 0000000..ac1bc88 --- /dev/null +++ b/src/api/musicbrainz.js @@ -0,0 +1,83 @@ +import qs from 'qs' +import Client, { ClientError } from './client' + +export class MusicBrainzError extends ClientError {} + +export default class MusicBrainz extends Client { + constructor ({ + baseURL = process.env.MUSICBRAINZ_BASE_URL || 'http://musicbrainz.org/ws/2/', + errorClass = MusicBrainzError, + limit = 5, + period = 5500, + ...options + } = {}) { + super({ baseURL, errorClass, limit, period, ...options }) + } + + parseErrorMessage (response, body) { + if (body && body.error) { + return body.error + } + return super.parseErrorMessage(response, body) + } + + stringifyParams (params) { + if (Array.isArray(params.inc)) { + params = { + ...params, + inc: params.inc.join('+') + } + } + if (Array.isArray(params.type)) { + params = { + ...params, + type: params.type.join('|') + } + } + if (Array.isArray(params.status)) { + params = { + ...params, + status: params.status.join('|') + } + } + return qs.stringify(params, { + skipNulls: true, + filter: (key, value) => value === '' ? undefined : value + }) + } + + getURL (path, params) { + const query = params ? this.stringifyParams(params) : '' + return query ? `${path}?${query}` : path + } + + getLookupURL (entity, id, params) { + if (id == null) { + return this.getBrowseURL(entity, params) + } + return this.getURL(`${entity}/${id}`, params) + } + + lookup (entity, id, params = {}) { + const url = this.getLookupURL(entity, id, params) + return this.get(url, { json: true, qs: { fmt: 'json' } }) + } + + getBrowseURL (entity, params) { + return this.getURL(entity, params) + } + + browse (entity, params = {}) { + const url = this.getBrowseURL(entity, params) + return this.get(url, { json: true, qs: { fmt: 'json' } }) + } + + getSearchURL (entity, query, params) { + return this.getURL(entity, { ...params, query }) + } + + search (entity, query, params = {}) { + const url = this.getSearchURL(entity, query, params) + return this.get(url, { json: true, qs: { fmt: 'json' } }) + } +} diff --git a/src/index.js b/src/index.js index 10671c8..d3b2b2c 100644 --- a/src/index.js +++ b/src/index.js @@ -1,7 +1,7 @@ import express from 'express' import graphqlHTTP from 'express-graphql' import compression from 'compression' -import MusicBrainz from './api' +import MusicBrainz, { CoverArtArchive } from './api' import schema from './schema' import createLoaders from './loaders' @@ -11,13 +11,17 @@ const formatError = (err) => ({ stack: err.stack }) -const middleware = ({ client = new MusicBrainz(), ...options } = {}) => { +const middleware = ({ + client = new MusicBrainz(), + coverArtClient = new CoverArtArchive(), + ...options +} = {}) => { const DEV = process.env.NODE_ENV !== 'production' const graphiql = DEV || process.env.GRAPHBRAINZ_GRAPHIQL === 'true' - const loaders = createLoaders(client) + const loaders = createLoaders(client, coverArtClient) return graphqlHTTP({ schema, - context: { client, loaders }, + context: { client, coverArtClient, loaders }, pretty: DEV, graphiql, formatError: DEV ? formatError : undefined, diff --git a/src/loaders.js b/src/loaders.js index c74c4ca..cce7657 100644 --- a/src/loaders.js +++ b/src/loaders.js @@ -5,7 +5,7 @@ import { toPlural } from './types/helpers' const debug = require('debug')('graphbrainz:loaders') const ONE_DAY = 24 * 60 * 60 * 1000 -export default function createLoaders (client) { +export default function createLoaders (client, coverArtClient) { // All loaders share a single LRU cache that will remember 8192 responses, // each cached for 1 day. const cache = LRUCache({ @@ -27,23 +27,6 @@ export default function createLoaders (client) { // Store the entity type so we can determine what type of object this // is elsewhere in the code. entity._type = entityType - entity._inc = params.inc - if (entityType === 'discid' && entity.releases) { - entity.releases.forEach(release => { - release._type = 'release' - release._inc = params.inc - }) - } else if (entityType === 'isrc' && entity.recordings) { - entity.recordings.forEach(recording => { - recording._type = 'recording' - recording._inc = params.inc - }) - } else if (entityType === 'iswc' && entity.works) { - entity.works.forEach(work => { - work._type = 'work' - work._inc = params.inc - }) - } } return entity }) @@ -61,7 +44,6 @@ export default function createLoaders (client) { // Store the entity type so we can determine what type of object this // is elsewhere in the code. entity._type = entityType - entity._inc = params.inc }) return list }) @@ -79,15 +61,45 @@ export default function createLoaders (client) { // Store the entity type so we can determine what type of object this // is elsewhere in the code. entity._type = entityType - entity._inc = params.inc }) return list }) })) }, { - cacheKeyFn: (key) => client.getSearchURL(...key), + cacheKeyFn: key => client.getSearchURL(...key), cacheMap: cache }) - return { lookup, browse, search } + const coverArt = new DataLoader(keys => { + return Promise.all(keys.map(key => { + const [ entityType, id ] = key + return coverArtClient.images(...key).catch(err => { + if (err.statusCode === 404) { + return { images: [] } + } + throw err + }).then(coverArt => { + coverArt._parentType = entityType + coverArt._parentID = id + if (entityType === 'release') { + coverArt._release = id + } else { + coverArt._release = coverArt.release && coverArt.release.split('/').pop() + } + return coverArt + }) + })) + }, { + cacheKeyFn: key => `cover-art/${coverArtClient.getImagesURL(...key)}`, + cacheMap: cache + }) + + const coverArtURL = new DataLoader(keys => { + return Promise.all(keys.map(key => coverArtClient.imageURL(...key))) + }, { + cacheKeyFn: key => `cover-art/url/${coverArtClient.getImageURL(...key)}`, + cacheMap: cache + }) + + return { lookup, browse, search, coverArt, coverArtURL } } diff --git a/src/types/cover-art-image.js b/src/types/cover-art-image.js new file mode 100644 index 0000000..b71f684 --- /dev/null +++ b/src/types/cover-art-image.js @@ -0,0 +1,72 @@ +import { + GraphQLObjectType, + GraphQLNonNull, + GraphQLList, + GraphQLBoolean, + GraphQLString, + GraphQLInt +} from 'graphql/type' +import { URLString } from './scalars' + +export const CoverArtImageThumbnails = new GraphQLObjectType({ + name: 'CoverArtImageThumbnails', + description: `URLs for thumbnails of different sizes for a particular piece of +cover art.`, + fields: () => ({ + small: { + type: URLString, + description: `The URL of a small version of the cover art, where the +maximum dimension is 250px.` + }, + large: { + type: URLString, + description: `The URL of a large version of the cover art, where the +maximum dimension is 500px.` + } + }) +}) + +export default new GraphQLObjectType({ + name: 'CoverArtImage', + description: 'An individual piece of album artwork from the [Cover Art Archive](https://musicbrainz.org/doc/Cover_Art_Archive).', + fields: () => ({ + fileID: { + type: new GraphQLNonNull(GraphQLString), + description: 'The Internet Archive’s internal file ID for the image.', + resolve: image => image.id + }, + image: { + type: new GraphQLNonNull(URLString), + description: 'The URL at which the image can be found.' + }, + thumbnails: { + type: CoverArtImageThumbnails, + description: 'A set of thumbnails for the image.' + }, + front: { + type: new GraphQLNonNull(GraphQLBoolean), + description: 'Whether this image depicts the “main front” of the release.' + }, + back: { + type: new GraphQLNonNull(GraphQLBoolean), + description: 'Whether this image depicts the “main back” of the release.' + }, + types: { + type: new GraphQLList(GraphQLString), + description: `A list of [image types](https://musicbrainz.org/doc/Cover_Art/Types) +describing what part(s) of the release the image includes.` + }, + edit: { + type: GraphQLInt, + description: 'The MusicBrainz edit ID.' + }, + approved: { + type: GraphQLBoolean, + description: 'Whether the image was approved by the MusicBrainz edit system.' + }, + comment: { + type: GraphQLString, + description: 'A free-text comment left for the image.' + } + }) +}) diff --git a/src/types/cover-art.js b/src/types/cover-art.js new file mode 100644 index 0000000..fae4f7a --- /dev/null +++ b/src/types/cover-art.js @@ -0,0 +1,188 @@ +import { + GraphQLObjectType, + GraphQLList, + GraphQLNonNull, + GraphQLBoolean, + GraphQLInt +} from 'graphql/type' +import CoverArtImage from './cover-art-image' +import { CoverArtImageSize } from './enums' +import Release from './release' +import { URLString } from './scalars' +import { resolveLookup } from '../resolvers' +import { getFields } from '../util' + +/** + * Return a resolver that will call `resolveFn` only if the requested field on + * the object is null or not present. + */ +function createFallbackResolver (resolveFn) { + return function resolve (coverArt, args, context, info) { + const value = coverArt[info.fieldName] + if (value == null) { + return resolveFn(coverArt, args, context, info) + } + return value + } +} + +function resolveImage (coverArt, { size }, { loaders }, info) { + if (size === 'FULL') { + size = null + } + const field = info.fieldName + if (coverArt.images) { + const matches = coverArt.images.filter(image => image[field]) + if (!matches.length) { + return null + } else if (matches.length === 1) { + const match = matches[0] + if (size === 250) { + return match.thumbnails.small + } else if (size === 500) { + return match.thumbnails.large + } else { + return match.image + } + } + } + if (coverArt[field] !== false) { + const { + _parentType: entityType = 'release', + _parentID: id = coverArt._release + } = coverArt + return loaders.coverArtURL.load([entityType, id, field, size]) + } +} + +const size = { + type: CoverArtImageSize, + description: `The size of the image to retrieve. By default, the returned +image will have its full original dimensions, but certain thumbnail sizes may be +retrieved as well.`, + defaultValue: null +} + +/** + * Get around both the circular dependency between the release and cover art + * types, and not have to define an identical `release` field twice on + * `ReleaseCoverArt` and `ReleaseGroupCoverArt`. + */ +function createReleaseField () { + return { + type: new GraphQLNonNull(Release), + description: 'The particular release shown in the returned cover art.', + resolve: (coverArt, args, context, info) => { + const id = coverArt._release + const fields = Object.keys(getFields(info)) + if (fields.length > 1 || fields[0] !== 'mbid') { + return resolveLookup(coverArt, { mbid: id }, context, info) + } + return { id } + } + } +} + +// This type combines two sets of data from different places. One is a *summary* +// of the images available at the Cover Art Archive, found in the `cover-art-archive` +// field on releases. The other is the actual list of images with their metadata, +// fetched from the Cover Art Archive itself rather than MusicBrainz. Depending +// on what fields are requested, we may only need to fetch one or the other, or +// both. Much of the summary data can be reconstructed if we already fetched the +// full image list, for example. +export const ReleaseCoverArt = new GraphQLObjectType({ + name: 'ReleaseCoverArt', + description: `An object containing a list of the cover art images for a +release obtained from the [Cover Art Archive](https://musicbrainz.org/doc/Cover_Art_Archive), +as well as a summary of what artwork is available.`, + fields: () => ({ + front: { + type: URLString, + description: `The URL of an image depicting the album cover or “main +front” of the release, i.e. the front of the packaging of the audio recording +(or in the case of a digital release, the image associated with it in a digital +media store). + +In the MusicBrainz schema, this field is a Boolean value indicating the presence +of a front image, whereas here the value is the URL for the image itself if one +exists. You can check for null if you just want to determine the presence of an +image.`, + args: { size }, + resolve: resolveImage + }, + back: { + type: URLString, + description: `The URL of an image depicting the “main back” of the +release, i.e. the back of the packaging of the audio recording. + +In the MusicBrainz schema, this field is a Boolean value indicating the presence +of a back image, whereas here the value is the URL for the image itself. You can +check for null if you just want to determine the presence of an image.`, + args: { size }, + resolve: resolveImage + }, + images: { + type: new GraphQLList(CoverArtImage), + description: `A list of images depicting the different sides and surfaces +of a release’s media and packaging.`, + resolve: createFallbackResolver((coverArt, args, { loaders }) => { + if (coverArt.count === 0) { + return [] + } + return loaders.coverArt.load(['release', coverArt._release]) + .then(coverArt => coverArt.images) + }) + }, + artwork: { + type: new GraphQLNonNull(GraphQLBoolean), + description: 'Whether there is artwork present for this release.', + resolve: createFallbackResolver(coverArt => coverArt.images.length > 0) + }, + darkened: { + type: new GraphQLNonNull(GraphQLBoolean), + description: `Whether the Cover Art Archive has received a take-down +request for this release’s artwork, disallowing new uploads.`, + resolve: createFallbackResolver((coverArt, args, { loaders }) => { + return loaders.lookup.load(['release', coverArt._release]) + .then(release => release['cover-art-archive'].darkened) + }) + }, + count: { + type: new GraphQLNonNull(GraphQLInt), + description: 'The number of artwork images present for this release.', + resolve: createFallbackResolver(coverArt => coverArt.images.length) + }, + release: createReleaseField() + }) +}) + +export const ReleaseGroupCoverArt = new GraphQLObjectType({ + name: 'ReleaseGroupCoverArt', + description: `An object containing the cover art for a release group obtained +from the [Cover Art Archive](https://musicbrainz.org/doc/Cover_Art_Archive). For +release groups, just the front cover of particular release will be selected.`, + fields: () => ({ + front: { + type: URLString, + description: `The URL of an image depicting the album cover or “main +front” of a release in the release group, i.e. the front of the packaging of the +audio recording (or in the case of a digital release, the image associated with +it in a digital media store).`, + args: { size }, + resolve: resolveImage + }, + images: { + type: new GraphQLList(CoverArtImage), + description: `A list of images returned by the [Cover Art +Archive](https://musicbrainz.org/doc/Cover_Art_Archive) for a release group. A +particular release’s front image will be included in the list, and likely no +others, even if other images are available.` + }, + artwork: { + type: new GraphQLNonNull(GraphQLBoolean), + description: 'Whether there is artwork present for this release group.', + resolve: createFallbackResolver(coverArt => coverArt.images.length > 0) + }, + release: createReleaseField() + }) +}) diff --git a/src/types/enums.js b/src/types/enums.js index d0e66e4..263b2f4 100644 --- a/src/types/enums.js +++ b/src/types/enums.js @@ -39,6 +39,29 @@ distinctive name.`, } }) +export const CoverArtImageSize = new GraphQLEnumType({ + name: 'CoverArtImageSize', + description: `The image sizes that may be requested at the [Cover Art +Archive](https://musicbrainz.org/doc/Cover_Art_Archive).`, + values: { + SMALL: { + name: 'Small', + description: 'A maximum dimension of 250px.', + value: 250 + }, + LARGE: { + name: 'Large', + description: 'A maximum dimension of 500px.', + value: 500 + }, + FULL: { + name: 'Full', + description: 'The image’s original dimensions, with no maximum.', + value: null + } + } +}) + export const ReleaseStatus = new GraphQLEnumType({ name: 'ReleaseStatus', description: `A type used to describe the status of releases, e.g. official, diff --git a/src/types/release-group.js b/src/types/release-group.js index 6161202..f7f68b8 100644 --- a/src/types/release-group.js +++ b/src/types/release-group.js @@ -1,6 +1,7 @@ import { GraphQLObjectType, GraphQLList } from 'graphql/type' import Node from './node' import Entity from './entity' +import { ReleaseGroupCoverArt } from './cover-art' import { DateType } from './scalars' import { ReleaseGroupType } from './enums' import { @@ -58,6 +59,14 @@ e.g. album, single, soundtrack, compilation, etc. A release group can have a description: `Additional [types](https://musicbrainz.org/doc/Release_Group/Type) that apply to this release group.` }), + coverArt: { + type: ReleaseGroupCoverArt, + description: `The cover art for a release group, obtained from the [Cover +Art Archive](https://musicbrainz.org/doc/Cover_Art_Archive).`, + resolve: (releaseGroup, args, { loaders }) => { + return loaders.coverArt.load(['release-group', releaseGroup.id]) + } + }, artists, releases, relationships, diff --git a/src/types/release.js b/src/types/release.js index 80f8abc..a8475c7 100644 --- a/src/types/release.js +++ b/src/types/release.js @@ -1,8 +1,14 @@ -import { GraphQLObjectType, GraphQLString, GraphQLList } from 'graphql/type' +import { + GraphQLObjectType, + GraphQLNonNull, + GraphQLString, + GraphQLList +} from 'graphql/type' import Node from './node' import Entity from './entity' import { ASIN, DateType } from './scalars' import Media from './media' +import { ReleaseCoverArt } from './cover-art' import { ReleaseStatus } from './enums' import ReleaseEvent from './release-event' import { @@ -68,6 +74,19 @@ release has one. The most common types found on releases are 12-digit [UPCs](https://en.wikipedia.org/wiki/Universal_Product_Code) and 13-digit [EANs](https://en.wikipedia.org/wiki/International_Article_Number).` }, + coverArt: { + type: new GraphQLNonNull(ReleaseCoverArt), + description: `A list and summary of the cover art images that are present +for this release from the [Cover Art Archive](https://musicbrainz.org/doc/Cover_Art_Archive).`, + resolve: (release, args, { loaders }) => { + const coverArt = release['cover-art-archive'] + if (coverArt) { + coverArt._release = release.id + return coverArt + } + return loaders.coverArt.load(['release', release.id]) + } + }, ...fieldWithID('status', { type: ReleaseStatus, description: 'The status describes how “official” a release is.' diff --git a/test/api/client.js b/test/api/client.js new file mode 100644 index 0000000..ecde9bf --- /dev/null +++ b/test/api/client.js @@ -0,0 +1,9 @@ +import test from 'ava' +import Client from '../../src/api/client' + +test('parseErrorMessage() returns the body or status code', t => { + const client = new Client() + t.is(client.parseErrorMessage({ statusCode: 500 }, 'something went wrong'), 'something went wrong') + t.is(client.parseErrorMessage({ statusCode: 500 }, ''), '500') + t.is(client.parseErrorMessage({ statusCode: 404 }, {}), '404') +}) diff --git a/test/api/cover-art-archive.js b/test/api/cover-art-archive.js new file mode 100644 index 0000000..02cf7ab --- /dev/null +++ b/test/api/cover-art-archive.js @@ -0,0 +1,47 @@ +import test from 'ava' +import { CoverArtArchiveError } from '../../src/api' +import client from '../helpers/client/cover-art-archive' + +test('can retrieve a front image URL', t => { + return client.imageURL('release', '76df3287-6cda-33eb-8e9a-044b5e15ffdd', 'front') + .then(url => { + t.is(url, 'http://archive.org/download/mbid-76df3287-6cda-33eb-8e9a-044b5e15ffdd/mbid-76df3287-6cda-33eb-8e9a-044b5e15ffdd-829521842.jpg') + }) +}) + +test('can retrieve a back image URL', t => { + return client.imageURL('release', '76df3287-6cda-33eb-8e9a-044b5e15ffdd', 'back') + .then(url => { + t.is(url, 'http://archive.org/download/mbid-76df3287-6cda-33eb-8e9a-044b5e15ffdd/mbid-76df3287-6cda-33eb-8e9a-044b5e15ffdd-5769317885.jpg') + }) +}) + +test('can retrieve a list of release images', t => { + return client.images('release', '76df3287-6cda-33eb-8e9a-044b5e15ffdd') + .then(data => { + t.is(data.release, 'http://musicbrainz.org/release/76df3287-6cda-33eb-8e9a-044b5e15ffdd') + t.true(data.images.length >= 3) + data.images.forEach(image => { + t.true(image.approved) + t.truthy(image.image) + t.truthy(image.id) + t.truthy(image.thumbnails.small) + t.truthy(image.thumbnails.large) + }) + t.true(data.images.some(image => image.front)) + t.true(data.images.some(image => image.back)) + t.true(data.images.some(image => image.types.indexOf('Front') !== -1)) + t.true(data.images.some(image => image.types.indexOf('Back') !== -1)) + t.true(data.images.some(image => image.types.indexOf('Medium') !== -1)) + }) +}) + +test('throws an error if given an invalid MBID', t => { + return t.throws(client.images('release', 'xyz'), CoverArtArchiveError) +}) + +test('uses the default error impementation if there is no HTML error', t => { + t.is(client.parseErrorMessage({ statusCode: 501 }, 'yikes'), 'yikes') + t.is(client.parseErrorMessage({ statusCode: 500 }, ''), '500') + t.is(client.parseErrorMessage({ statusCode: 404 }, null), '404') +}) diff --git a/test/api.js b/test/api/musicbrainz.js similarity index 86% rename from test/api.js rename to test/api/musicbrainz.js index e2405bd..62a4e5d 100644 --- a/test/api.js +++ b/test/api/musicbrainz.js @@ -1,6 +1,6 @@ import test from 'ava' -import MusicBrainz, { MusicBrainzError } from '../src/api' -import client from './helpers/client' +import MusicBrainz, { MusicBrainzError } from '../../src/api' +import client from '../helpers/client/musicbrainz' test('getLookupURL() generates a lookup URL', t => { t.is(client.getLookupURL('artist', 'c8da2e40-bd28-4d4e-813a-bd2f51958ba8', { @@ -62,3 +62,9 @@ test('rejects non-MusicBrainz errors', t => { const client = new MusicBrainz({ baseURL: '$!@#$' }) t.throws(client.get('artist/5b11f4ce-a62d-471e-81fc-a69a8278c7da'), Error) }) + +test('uses the default error impementation if there is no JSON error', t => { + t.is(client.parseErrorMessage({ statusCode: 501 }, 'yikes'), 'yikes') + t.is(client.parseErrorMessage({ statusCode: 500 }, {}), '500') + t.is(client.parseErrorMessage({ statusCode: 404 }, null), '404') +}) diff --git a/test/fixtures/01f85d1b5c1e1c7ee9768df1f7529a89 b/test/fixtures/01f85d1b5c1e1c7ee9768df1f7529a89 new file mode 100644 index 0000000..1d98000 --- /dev/null +++ b/test/fixtures/01f85d1b5c1e1c7ee9768df1f7529a89 @@ -0,0 +1 @@ +See: http://archive.org/download/mbid-76df3287-6cda-33eb-8e9a-044b5e15ffdd/index.json diff --git a/test/fixtures/01f85d1b5c1e1c7ee9768df1f7529a89.headers b/test/fixtures/01f85d1b5c1e1c7ee9768df1f7529a89.headers new file mode 100644 index 0000000..ece0e55 --- /dev/null +++ b/test/fixtures/01f85d1b5c1e1c7ee9768df1f7529a89.headers @@ -0,0 +1,24 @@ +{ + "statusCode": 307, + "headers": { + "date": "Tue, 20 Dec 2016 01:37:47 GMT", + "content-type": "text/plain; charset=utf-8", + "content-length": "86", + "connection": "keep-alive", + "keep-alive": "timeout=15", + "location": "http://archive.org/download/mbid-76df3287-6cda-33eb-8e9a-044b5e15ffdd/index.json", + "access-control-allow-origin": "*", + "server": "4b4c084fb141" + }, + "url": "http://coverartarchive.org:80/release/76df3287-6cda-33eb-8e9a-044b5e15ffdd", + "time": 372, + "request": { + "method": "GET", + "headers": { + "User-Agent": "graphbrainz/4.5.0 ( https://github.com/exogen/graphbrainz )", + "host": "coverartarchive.org", + "accept-encoding": "gzip, deflate", + "accept": "application/json" + } + } +} \ No newline at end of file diff --git a/test/fixtures/029740f01ae52e57fcaa1fbe44f3cc76 b/test/fixtures/029740f01ae52e57fcaa1fbe44f3cc76 new file mode 100644 index 0000000..5547437 --- /dev/null +++ b/test/fixtures/029740f01ae52e57fcaa1fbe44f3cc76 @@ -0,0 +1 @@ +{"images":[{"edit":41326273,"back":false,"approved":true,"comment":"","types":["Front"],"thumbnails":{"small":"http://coverartarchive.org/release/d5cdb7fd-c7e9-460a-9549-8a369655cc52/14955061405-250.jpg","large":"http://coverartarchive.org/release/d5cdb7fd-c7e9-460a-9549-8a369655cc52/14955061405-500.jpg"},"front":true,"id":"14955061405","image":"http://coverartarchive.org/release/d5cdb7fd-c7e9-460a-9549-8a369655cc52/14955061405.jpg"},{"approved":true,"back":true,"edit":41326275,"id":"14955062822","front":false,"image":"http://coverartarchive.org/release/d5cdb7fd-c7e9-460a-9549-8a369655cc52/14955062822.jpg","thumbnails":{"small":"http://coverartarchive.org/release/d5cdb7fd-c7e9-460a-9549-8a369655cc52/14955062822-250.jpg","large":"http://coverartarchive.org/release/d5cdb7fd-c7e9-460a-9549-8a369655cc52/14955062822-500.jpg"},"comment":"","types":["Back","Spine"]},{"id":"14955064370","front":false,"image":"http://coverartarchive.org/release/d5cdb7fd-c7e9-460a-9549-8a369655cc52/14955064370.jpg","thumbnails":{"large":"http://coverartarchive.org/release/d5cdb7fd-c7e9-460a-9549-8a369655cc52/14955064370-500.jpg","small":"http://coverartarchive.org/release/d5cdb7fd-c7e9-460a-9549-8a369655cc52/14955064370-250.jpg"},"types":["Tray"],"comment":"","approved":true,"back":false,"edit":41326278},{"edit":41326288,"approved":true,"back":false,"thumbnails":{"large":"http://coverartarchive.org/release/d5cdb7fd-c7e9-460a-9549-8a369655cc52/14955066041-500.jpg","small":"http://coverartarchive.org/release/d5cdb7fd-c7e9-460a-9549-8a369655cc52/14955066041-250.jpg"},"comment":"","types":["Booklet"],"image":"http://coverartarchive.org/release/d5cdb7fd-c7e9-460a-9549-8a369655cc52/14955066041.jpg","id":"14955066041","front":false},{"edit":41326294,"back":false,"approved":true,"comment":"","types":["Booklet"],"thumbnails":{"small":"http://coverartarchive.org/release/d5cdb7fd-c7e9-460a-9549-8a369655cc52/14955068047-250.jpg","large":"http://coverartarchive.org/release/d5cdb7fd-c7e9-460a-9549-8a369655cc52/14955068047-500.jpg"},"image":"http://coverartarchive.org/release/d5cdb7fd-c7e9-460a-9549-8a369655cc52/14955068047.jpg","front":false,"id":"14955068047"},{"front":false,"id":"14955069655","image":"http://coverartarchive.org/release/d5cdb7fd-c7e9-460a-9549-8a369655cc52/14955069655.jpg","types":["Booklet"],"comment":"","thumbnails":{"large":"http://coverartarchive.org/release/d5cdb7fd-c7e9-460a-9549-8a369655cc52/14955069655-500.jpg","small":"http://coverartarchive.org/release/d5cdb7fd-c7e9-460a-9549-8a369655cc52/14955069655-250.jpg"},"back":false,"approved":true,"edit":41326297},{"approved":true,"back":false,"edit":41326303,"image":"http://coverartarchive.org/release/d5cdb7fd-c7e9-460a-9549-8a369655cc52/14955071842.jpg","id":"14955071842","front":false,"thumbnails":{"small":"http://coverartarchive.org/release/d5cdb7fd-c7e9-460a-9549-8a369655cc52/14955071842-250.jpg","large":"http://coverartarchive.org/release/d5cdb7fd-c7e9-460a-9549-8a369655cc52/14955071842-500.jpg"},"comment":"","types":["Booklet"]},{"types":["Booklet"],"comment":"","thumbnails":{"small":"http://coverartarchive.org/release/d5cdb7fd-c7e9-460a-9549-8a369655cc52/14955073836-250.jpg","large":"http://coverartarchive.org/release/d5cdb7fd-c7e9-460a-9549-8a369655cc52/14955073836-500.jpg"},"front":false,"id":"14955073836","image":"http://coverartarchive.org/release/d5cdb7fd-c7e9-460a-9549-8a369655cc52/14955073836.jpg","edit":41326306,"back":false,"approved":true},{"edit":41326325,"back":false,"approved":true,"comment":"","types":["Booklet"],"thumbnails":{"large":"http://coverartarchive.org/release/d5cdb7fd-c7e9-460a-9549-8a369655cc52/14955075724-500.jpg","small":"http://coverartarchive.org/release/d5cdb7fd-c7e9-460a-9549-8a369655cc52/14955075724-250.jpg"},"front":false,"id":"14955075724","image":"http://coverartarchive.org/release/d5cdb7fd-c7e9-460a-9549-8a369655cc52/14955075724.jpg"},{"edit":41538992,"approved":true,"back":false,"thumbnails":{"small":"http://coverartarchive.org/release/d5cdb7fd-c7e9-460a-9549-8a369655cc52/15067760321-250.jpg","large":"http://coverartarchive.org/release/d5cdb7fd-c7e9-460a-9549-8a369655cc52/15067760321-500.jpg"},"comment":"Sticker","types":["Sticker"],"image":"http://coverartarchive.org/release/d5cdb7fd-c7e9-460a-9549-8a369655cc52/15067760321.jpg","id":"15067760321","front":false},{"id":"15067761190","front":false,"image":"http://coverartarchive.org/release/d5cdb7fd-c7e9-460a-9549-8a369655cc52/15067761190.jpg","thumbnails":{"large":"http://coverartarchive.org/release/d5cdb7fd-c7e9-460a-9549-8a369655cc52/15067761190-500.jpg","small":"http://coverartarchive.org/release/d5cdb7fd-c7e9-460a-9549-8a369655cc52/15067761190-250.jpg"},"comment":"CD","types":["Medium"],"approved":true,"back":false,"edit":41538996}],"release":"https://musicbrainz.org/release/d5cdb7fd-c7e9-460a-9549-8a369655cc52"} \ No newline at end of file diff --git a/test/fixtures/029740f01ae52e57fcaa1fbe44f3cc76.headers b/test/fixtures/029740f01ae52e57fcaa1fbe44f3cc76.headers new file mode 100644 index 0000000..040ff16 --- /dev/null +++ b/test/fixtures/029740f01ae52e57fcaa1fbe44f3cc76.headers @@ -0,0 +1,27 @@ +{ + "statusCode": 200, + "headers": { + "server": "nginx/1.4.6 (Ubuntu)", + "date": "Tue, 20 Dec 2016 01:39:56 GMT", + "content-type": "application/json", + "content-length": "4829", + "last-modified": "Fri, 04 Nov 2016 08:01:44 GMT", + "connection": "keep-alive", + "etag": "\"581c4068-12dd\"", + "expires": "Tue, 20 Dec 2016 07:39:56 GMT", + "cache-control": "max-age=21600", + "accept-ranges": "bytes" + }, + "url": "http://ia601203.us.archive.org:80/29/items/mbid-d5cdb7fd-c7e9-460a-9549-8a369655cc52/index.json", + "time": 155, + "request": { + "method": "GET", + "headers": { + "User-Agent": "graphbrainz/4.5.0 ( https://github.com/exogen/graphbrainz )", + "accept-encoding": "gzip, deflate", + "accept": "application/json", + "referer": "http://archive.org/download/mbid-d5cdb7fd-c7e9-460a-9549-8a369655cc52/index.json", + "host": "ia601203.us.archive.org" + } + } +} \ No newline at end of file diff --git a/test/fixtures/0362ca3081fd5d16d8e29846798296a0 b/test/fixtures/0362ca3081fd5d16d8e29846798296a0 new file mode 100644 index 0000000..fc146de --- /dev/null +++ b/test/fixtures/0362ca3081fd5d16d8e29846798296a0 @@ -0,0 +1 @@ +See: http://archive.org/download/mbid-dd15903e-0ee7-45ec-aba1-2fc7b3a44e19/index.json diff --git a/test/fixtures/0362ca3081fd5d16d8e29846798296a0.headers b/test/fixtures/0362ca3081fd5d16d8e29846798296a0.headers new file mode 100644 index 0000000..5784d9f --- /dev/null +++ b/test/fixtures/0362ca3081fd5d16d8e29846798296a0.headers @@ -0,0 +1,24 @@ +{ + "statusCode": 307, + "headers": { + "date": "Tue, 20 Dec 2016 01:39:55 GMT", + "content-type": "text/plain; charset=utf-8", + "content-length": "86", + "connection": "keep-alive", + "keep-alive": "timeout=15", + "location": "http://archive.org/download/mbid-dd15903e-0ee7-45ec-aba1-2fc7b3a44e19/index.json", + "access-control-allow-origin": "*", + "server": "d6446ea62189" + }, + "url": "http://coverartarchive.org:80/release/dd15903e-0ee7-45ec-aba1-2fc7b3a44e19", + "time": 414, + "request": { + "method": "GET", + "headers": { + "User-Agent": "graphbrainz/4.5.0 ( https://github.com/exogen/graphbrainz )", + "host": "coverartarchive.org", + "accept-encoding": "gzip, deflate", + "accept": "application/json" + } + } +} \ No newline at end of file diff --git a/test/fixtures/071ecc4967496ac9ff5c75bcb6faf549 b/test/fixtures/071ecc4967496ac9ff5c75bcb6faf549 new file mode 100644 index 0000000..e69de29 diff --git a/test/fixtures/071ecc4967496ac9ff5c75bcb6faf549.headers b/test/fixtures/071ecc4967496ac9ff5c75bcb6faf549.headers new file mode 100644 index 0000000..16039e4 --- /dev/null +++ b/test/fixtures/071ecc4967496ac9ff5c75bcb6faf549.headers @@ -0,0 +1,25 @@ +{ + "statusCode": 302, + "headers": { + "server": "nginx/1.4.6 (Ubuntu)", + "date": "Tue, 20 Dec 2016 01:37:47 GMT", + "content-type": "text/html; charset=UTF-8", + "transfer-encoding": "chunked", + "connection": "keep-alive", + "x-powered-by": "PHP/5.5.9-1ubuntu4.20", + "accept-ranges": "bytes", + "location": "http://ia802607.us.archive.org/32/items/mbid-76df3287-6cda-33eb-8e9a-044b5e15ffdd/index.json" + }, + "url": "http://archive.org:80/download/mbid-76df3287-6cda-33eb-8e9a-044b5e15ffdd/index.json", + "time": 139, + "request": { + "method": "GET", + "headers": { + "User-Agent": "graphbrainz/4.5.0 ( https://github.com/exogen/graphbrainz )", + "accept-encoding": "gzip, deflate", + "accept": "application/json", + "referer": "http://coverartarchive.org/release/76df3287-6cda-33eb-8e9a-044b5e15ffdd", + "host": "archive.org" + } + } +} \ No newline at end of file diff --git a/test/fixtures/078ffa5f6640843175067e82b92da215 b/test/fixtures/078ffa5f6640843175067e82b92da215 new file mode 100644 index 0000000..79842a2 Binary files /dev/null and b/test/fixtures/078ffa5f6640843175067e82b92da215 differ diff --git a/test/fixtures/078ffa5f6640843175067e82b92da215.headers b/test/fixtures/078ffa5f6640843175067e82b92da215.headers new file mode 100644 index 0000000..bde033d --- /dev/null +++ b/test/fixtures/078ffa5f6640843175067e82b92da215.headers @@ -0,0 +1,29 @@ +{ + "statusCode": 200, + "headers": { + "date": "Tue, 20 Dec 2016 01:40:11 GMT", + "content-type": "application/json; charset=utf-8", + "transfer-encoding": "chunked", + "connection": "keep-alive", + "keep-alive": "timeout=15", + "vary": "Accept-Encoding", + "x-ratelimit-limit": "700", + "x-ratelimit-remaining": "577", + "x-ratelimit-reset": "1482198012", + "server": "Plack::Handler::Starlet", + "etag": "W/\"0c725784e392aef95ce4df262002a059\"", + "access-control-allow-origin": "*", + "content-encoding": "gzip" + }, + "url": "http://musicbrainz.org:80/ws/2/release/3e2c779e-16e8-459e-8791-2da47a92dce6?fmt=json", + "time": 415, + "request": { + "method": "GET", + "headers": { + "User-Agent": "graphbrainz/4.5.0 ( 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/fixtures/07a9f4ce4cc4639f8ec3d5c06a91b670 b/test/fixtures/07a9f4ce4cc4639f8ec3d5c06a91b670 new file mode 100644 index 0000000..e69de29 diff --git a/test/fixtures/07a9f4ce4cc4639f8ec3d5c06a91b670.headers b/test/fixtures/07a9f4ce4cc4639f8ec3d5c06a91b670.headers new file mode 100644 index 0000000..23b84e4 --- /dev/null +++ b/test/fixtures/07a9f4ce4cc4639f8ec3d5c06a91b670.headers @@ -0,0 +1,25 @@ +{ + "statusCode": 302, + "headers": { + "server": "nginx/1.4.6 (Ubuntu)", + "date": "Tue, 20 Dec 2016 01:39:57 GMT", + "content-type": "text/html; charset=UTF-8", + "transfer-encoding": "chunked", + "connection": "keep-alive", + "x-powered-by": "PHP/5.5.9-1ubuntu4.20", + "accept-ranges": "bytes", + "location": "http://ia600509.us.archive.org/33/items/mbid-fb98043c-7ac8-4505-ba87-28576836a8d5/index.json" + }, + "url": "http://archive.org:80/download/mbid-fb98043c-7ac8-4505-ba87-28576836a8d5/index.json", + "time": 178, + "request": { + "method": "GET", + "headers": { + "User-Agent": "graphbrainz/4.5.0 ( https://github.com/exogen/graphbrainz )", + "accept-encoding": "gzip, deflate", + "accept": "application/json", + "referer": "http://coverartarchive.org/release/fb98043c-7ac8-4505-ba87-28576836a8d5", + "host": "archive.org" + } + } +} \ No newline at end of file diff --git a/test/fixtures/17a054fb91109cd8b5a2d1a8c8ab3a4a b/test/fixtures/17a054fb91109cd8b5a2d1a8c8ab3a4a new file mode 100644 index 0000000..e96c7b9 Binary files /dev/null and b/test/fixtures/17a054fb91109cd8b5a2d1a8c8ab3a4a differ diff --git a/test/fixtures/17a054fb91109cd8b5a2d1a8c8ab3a4a.headers b/test/fixtures/17a054fb91109cd8b5a2d1a8c8ab3a4a.headers new file mode 100644 index 0000000..338e1d2 --- /dev/null +++ b/test/fixtures/17a054fb91109cd8b5a2d1a8c8ab3a4a.headers @@ -0,0 +1,29 @@ +{ + "statusCode": 200, + "headers": { + "date": "Tue, 20 Dec 2016 01:40:05 GMT", + "content-type": "application/json; charset=utf-8", + "transfer-encoding": "chunked", + "connection": "keep-alive", + "keep-alive": "timeout=15", + "vary": "Accept-Encoding", + "x-ratelimit-limit": "700", + "x-ratelimit-remaining": "423", + "x-ratelimit-reset": "1482198006", + "server": "Plack::Handler::Starlet", + "etag": "W/\"3467a86d0b1b88d5eccfdd5223cf828a\"", + "access-control-allow-origin": "*", + "content-encoding": "gzip" + }, + "url": "http://musicbrainz.org:80/ws/2/release/3ee3723e-ed1e-4baa-a718-7f1d9ecb3bec?fmt=json", + "time": 518, + "request": { + "method": "GET", + "headers": { + "User-Agent": "graphbrainz/4.5.0 ( 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/fixtures/1c31d4f3569dee83470ccf2948435447 b/test/fixtures/1c31d4f3569dee83470ccf2948435447 new file mode 100644 index 0000000..e69de29 diff --git a/test/fixtures/1c31d4f3569dee83470ccf2948435447.headers b/test/fixtures/1c31d4f3569dee83470ccf2948435447.headers new file mode 100644 index 0000000..2780df4 --- /dev/null +++ b/test/fixtures/1c31d4f3569dee83470ccf2948435447.headers @@ -0,0 +1,24 @@ +{ + "statusCode": 307, + "headers": { + "date": "Tue, 20 Dec 2016 01:37:46 GMT", + "content-type": "text/plain; charset=utf-8", + "content-length": "132", + "connection": "keep-alive", + "keep-alive": "timeout=15", + "location": "http://archive.org/download/mbid-76df3287-6cda-33eb-8e9a-044b5e15ffdd/mbid-76df3287-6cda-33eb-8e9a-044b5e15ffdd-5769317885.jpg", + "access-control-allow-origin": "*", + "server": "d8b8a8eb2a2a" + }, + "url": "http://coverartarchive.org:80/release/76df3287-6cda-33eb-8e9a-044b5e15ffdd/back", + "time": 385, + "request": { + "method": "HEAD", + "headers": { + "User-Agent": "graphbrainz/4.5.0 ( https://github.com/exogen/graphbrainz )", + "host": "coverartarchive.org", + "accept-encoding": "gzip, deflate", + "content-length": 0 + } + } +} \ No newline at end of file diff --git a/test/fixtures/1fd72722a40edf79ad5317b82116949d b/test/fixtures/1fd72722a40edf79ad5317b82116949d new file mode 100644 index 0000000..a964bc7 --- /dev/null +++ b/test/fixtures/1fd72722a40edf79ad5317b82116949d @@ -0,0 +1 @@ +See: http://archive.org/download/mbid-533e14a8-519d-4f04-95e8-8a84833f26b1/index.json diff --git a/test/fixtures/1fd72722a40edf79ad5317b82116949d.headers b/test/fixtures/1fd72722a40edf79ad5317b82116949d.headers new file mode 100644 index 0000000..1fc57c6 --- /dev/null +++ b/test/fixtures/1fd72722a40edf79ad5317b82116949d.headers @@ -0,0 +1,24 @@ +{ + "statusCode": 307, + "headers": { + "date": "Tue, 20 Dec 2016 01:39:56 GMT", + "content-type": "text/plain; charset=utf-8", + "content-length": "86", + "connection": "keep-alive", + "keep-alive": "timeout=15", + "location": "http://archive.org/download/mbid-533e14a8-519d-4f04-95e8-8a84833f26b1/index.json", + "access-control-allow-origin": "*", + "server": "d6446ea62189" + }, + "url": "http://coverartarchive.org:80/release/533e14a8-519d-4f04-95e8-8a84833f26b1", + "time": 504, + "request": { + "method": "GET", + "headers": { + "User-Agent": "graphbrainz/4.5.0 ( https://github.com/exogen/graphbrainz )", + "host": "coverartarchive.org", + "accept-encoding": "gzip, deflate", + "accept": "application/json" + } + } +} \ No newline at end of file diff --git a/test/fixtures/217d797211c26dc393ef44fbf1a1a37e b/test/fixtures/217d797211c26dc393ef44fbf1a1a37e new file mode 100644 index 0000000..e69de29 diff --git a/test/fixtures/217d797211c26dc393ef44fbf1a1a37e.headers b/test/fixtures/217d797211c26dc393ef44fbf1a1a37e.headers new file mode 100644 index 0000000..d4042e2 --- /dev/null +++ b/test/fixtures/217d797211c26dc393ef44fbf1a1a37e.headers @@ -0,0 +1,25 @@ +{ + "statusCode": 302, + "headers": { + "server": "nginx/1.4.6 (Ubuntu)", + "date": "Tue, 20 Dec 2016 01:39:57 GMT", + "content-type": "text/html; charset=UTF-8", + "transfer-encoding": "chunked", + "connection": "keep-alive", + "x-powered-by": "PHP/5.5.9-1ubuntu4.20", + "accept-ranges": "bytes", + "location": "http://ia601208.us.archive.org/31/items/mbid-ee773571-6147-4bfd-8ea1-d666c4d4caef/index.json" + }, + "url": "http://archive.org:80/download/mbid-ee773571-6147-4bfd-8ea1-d666c4d4caef/index.json", + "time": 149, + "request": { + "method": "GET", + "headers": { + "User-Agent": "graphbrainz/4.5.0 ( https://github.com/exogen/graphbrainz )", + "accept-encoding": "gzip, deflate", + "accept": "application/json", + "referer": "http://coverartarchive.org/release/ee773571-6147-4bfd-8ea1-d666c4d4caef", + "host": "archive.org" + } + } +} \ No newline at end of file diff --git a/test/fixtures/240fa01906160caef0ad74b8e2fe44f0 b/test/fixtures/240fa01906160caef0ad74b8e2fe44f0 new file mode 100644 index 0000000..f1f96a3 Binary files /dev/null and b/test/fixtures/240fa01906160caef0ad74b8e2fe44f0 differ diff --git a/test/fixtures/240fa01906160caef0ad74b8e2fe44f0.headers b/test/fixtures/240fa01906160caef0ad74b8e2fe44f0.headers new file mode 100644 index 0000000..2f3375c --- /dev/null +++ b/test/fixtures/240fa01906160caef0ad74b8e2fe44f0.headers @@ -0,0 +1,29 @@ +{ + "statusCode": 200, + "headers": { + "date": "Tue, 20 Dec 2016 01:39:55 GMT", + "content-type": "application/json; charset=UTF-8", + "transfer-encoding": "chunked", + "connection": "keep-alive", + "keep-alive": "timeout=15", + "vary": "Accept-Encoding", + "x-ratelimit-limit": "700", + "x-ratelimit-remaining": "541", + "x-ratelimit-reset": "1482197996", + "last-modified": "Tue, 20 Dec 2016 01:16:03 GMT", + "server": "Jetty(9.3.10.v20160621)", + "access-control-allow-origin": "*", + "content-encoding": "gzip" + }, + "url": "http://musicbrainz.org:80/ws/2/release?query=You%20Want%20It%20Darker&fmt=json", + "time": 415, + "request": { + "method": "GET", + "headers": { + "User-Agent": "graphbrainz/4.5.0 ( 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/fixtures/257742f1f5f07e90a7514808bc18977a b/test/fixtures/257742f1f5f07e90a7514808bc18977a new file mode 100644 index 0000000..17ef318 --- /dev/null +++ b/test/fixtures/257742f1f5f07e90a7514808bc18977a @@ -0,0 +1,4 @@ + +
invalid MBID specified
diff --git a/test/fixtures/257742f1f5f07e90a7514808bc18977a.headers b/test/fixtures/257742f1f5f07e90a7514808bc18977a.headers new file mode 100644 index 0000000..5e8d68b --- /dev/null +++ b/test/fixtures/257742f1f5f07e90a7514808bc18977a.headers @@ -0,0 +1,22 @@ +{ + "statusCode": 400, + "headers": { + "date": "Tue, 20 Dec 2016 01:37:47 GMT", + "content-type": "text/html", + "content-length": "138", + "connection": "keep-alive", + "keep-alive": "timeout=15", + "server": "d6446ea62189" + }, + "url": "http://coverartarchive.org:80/release/xyz", + "time": 366, + "request": { + "method": "GET", + "headers": { + "User-Agent": "graphbrainz/4.5.0 ( https://github.com/exogen/graphbrainz )", + "host": "coverartarchive.org", + "accept-encoding": "gzip, deflate", + "accept": "application/json" + } + } +} \ No newline at end of file diff --git a/test/fixtures/325850e36c752b826928e22ac481772a b/test/fixtures/325850e36c752b826928e22ac481772a new file mode 100644 index 0000000..9d0517f Binary files /dev/null and b/test/fixtures/325850e36c752b826928e22ac481772a differ diff --git a/test/fixtures/325850e36c752b826928e22ac481772a.headers b/test/fixtures/325850e36c752b826928e22ac481772a.headers new file mode 100644 index 0000000..490fe06 --- /dev/null +++ b/test/fixtures/325850e36c752b826928e22ac481772a.headers @@ -0,0 +1,29 @@ +{ + "statusCode": 200, + "headers": { + "date": "Tue, 20 Dec 2016 01:39:58 GMT", + "content-type": "application/json; charset=utf-8", + "transfer-encoding": "chunked", + "connection": "keep-alive", + "keep-alive": "timeout=15", + "vary": "Accept-Encoding", + "x-ratelimit-limit": "700", + "x-ratelimit-remaining": "203", + "x-ratelimit-reset": "1482197998", + "server": "Plack::Handler::Starlet", + "etag": "W/\"08dc9c7327d0e7a8b9ede6ae8509c80b\"", + "access-control-allow-origin": "*", + "content-encoding": "gzip" + }, + "url": "http://musicbrainz.org:80/ws/2/release/dd15903e-0ee7-45ec-aba1-2fc7b3a44e19?fmt=json", + "time": 449, + "request": { + "method": "GET", + "headers": { + "User-Agent": "graphbrainz/4.5.0 ( 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/fixtures/34ca10f44e5af073160c7b6adac60130 b/test/fixtures/34ca10f44e5af073160c7b6adac60130 new file mode 100644 index 0000000..e69de29 diff --git a/test/fixtures/34ca10f44e5af073160c7b6adac60130.headers b/test/fixtures/34ca10f44e5af073160c7b6adac60130.headers new file mode 100644 index 0000000..b66cd46 --- /dev/null +++ b/test/fixtures/34ca10f44e5af073160c7b6adac60130.headers @@ -0,0 +1,25 @@ +{ + "statusCode": 302, + "headers": { + "server": "nginx/1.4.6 (Ubuntu)", + "date": "Tue, 20 Dec 2016 01:39:56 GMT", + "content-type": "text/html; charset=UTF-8", + "transfer-encoding": "chunked", + "connection": "keep-alive", + "x-powered-by": "PHP/5.5.9-1ubuntu4.20", + "accept-ranges": "bytes", + "location": "http://ia601203.us.archive.org/29/items/mbid-d5cdb7fd-c7e9-460a-9549-8a369655cc52/index.json" + }, + "url": "http://archive.org:80/download/mbid-d5cdb7fd-c7e9-460a-9549-8a369655cc52/index.json", + "time": 356, + "request": { + "method": "GET", + "headers": { + "User-Agent": "graphbrainz/4.5.0 ( https://github.com/exogen/graphbrainz )", + "accept-encoding": "gzip, deflate", + "accept": "application/json", + "referer": "http://coverartarchive.org/release/d5cdb7fd-c7e9-460a-9549-8a369655cc52", + "host": "archive.org" + } + } +} \ No newline at end of file diff --git a/test/fixtures/363970b23b4aa02d9be42a6492f76ada b/test/fixtures/363970b23b4aa02d9be42a6492f76ada new file mode 100644 index 0000000..516486e Binary files /dev/null and b/test/fixtures/363970b23b4aa02d9be42a6492f76ada differ diff --git a/test/fixtures/363970b23b4aa02d9be42a6492f76ada.headers b/test/fixtures/363970b23b4aa02d9be42a6492f76ada.headers new file mode 100644 index 0000000..5453dcd --- /dev/null +++ b/test/fixtures/363970b23b4aa02d9be42a6492f76ada.headers @@ -0,0 +1,29 @@ +{ + "statusCode": 200, + "headers": { + "date": "Tue, 20 Dec 2016 01:40:22 GMT", + "content-type": "application/json; charset=utf-8", + "transfer-encoding": "chunked", + "connection": "keep-alive", + "keep-alive": "timeout=15", + "vary": "Accept-Encoding", + "x-ratelimit-limit": "700", + "x-ratelimit-remaining": "338", + "x-ratelimit-reset": "1482198022", + "server": "Plack::Handler::Starlet", + "etag": "W/\"c190811eaf16a29a562055fc038d682c\"", + "access-control-allow-origin": "*", + "content-encoding": "gzip" + }, + "url": "http://musicbrainz.org:80/ws/2/release/7ff98ba2-d865-49eb-8bbd-23dc9d60f21c?fmt=json", + "time": 400, + "request": { + "method": "GET", + "headers": { + "User-Agent": "graphbrainz/4.5.0 ( 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/fixtures/37dafe8b4260600bbb8b2571ec4ac86c b/test/fixtures/37dafe8b4260600bbb8b2571ec4ac86c new file mode 100644 index 0000000..9c3a5bb Binary files /dev/null and b/test/fixtures/37dafe8b4260600bbb8b2571ec4ac86c differ diff --git a/test/fixtures/37dafe8b4260600bbb8b2571ec4ac86c.headers b/test/fixtures/37dafe8b4260600bbb8b2571ec4ac86c.headers new file mode 100644 index 0000000..bcf7a97 --- /dev/null +++ b/test/fixtures/37dafe8b4260600bbb8b2571ec4ac86c.headers @@ -0,0 +1,29 @@ +{ + "statusCode": 200, + "headers": { + "date": "Tue, 20 Dec 2016 01:40:05 GMT", + "content-type": "application/json; charset=utf-8", + "transfer-encoding": "chunked", + "connection": "keep-alive", + "keep-alive": "timeout=15", + "vary": "Accept-Encoding", + "x-ratelimit-limit": "700", + "x-ratelimit-remaining": "422", + "x-ratelimit-reset": "1482198006", + "server": "Plack::Handler::Starlet", + "etag": "W/\"bc27197091616cb74bbc5128fb69a933\"", + "access-control-allow-origin": "*", + "content-encoding": "gzip" + }, + "url": "http://musicbrainz.org:80/ws/2/release/533e14a8-519d-4f04-95e8-8a84833f26b1?fmt=json", + "time": 410, + "request": { + "method": "GET", + "headers": { + "User-Agent": "graphbrainz/4.5.0 ( 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/fixtures/39192d7783e3cbd103a64e37435860c8 b/test/fixtures/39192d7783e3cbd103a64e37435860c8 new file mode 100644 index 0000000..d4519ba --- /dev/null +++ b/test/fixtures/39192d7783e3cbd103a64e37435860c8 @@ -0,0 +1,4 @@ + +No cover art found for release 29a43eb0-537d-4af1-8598-8b488c847f2e
diff --git a/test/fixtures/39192d7783e3cbd103a64e37435860c8.headers b/test/fixtures/39192d7783e3cbd103a64e37435860c8.headers new file mode 100644 index 0000000..b8b8ba4 --- /dev/null +++ b/test/fixtures/39192d7783e3cbd103a64e37435860c8.headers @@ -0,0 +1,22 @@ +{ + "statusCode": 404, + "headers": { + "date": "Tue, 20 Dec 2016 01:39:56 GMT", + "content-type": "text/html", + "content-length": "179", + "connection": "keep-alive", + "keep-alive": "timeout=15", + "server": "d6446ea62189" + }, + "url": "http://coverartarchive.org:80/release/29a43eb0-537d-4af1-8598-8b488c847f2e", + "time": 506, + "request": { + "method": "GET", + "headers": { + "User-Agent": "graphbrainz/4.5.0 ( https://github.com/exogen/graphbrainz )", + "host": "coverartarchive.org", + "accept-encoding": "gzip, deflate", + "accept": "application/json" + } + } +} \ No newline at end of file diff --git a/test/fixtures/3aaa80314ca3bb3404ab1a0b2be0da6a b/test/fixtures/3aaa80314ca3bb3404ab1a0b2be0da6a new file mode 100644 index 0000000..edc4439 --- /dev/null +++ b/test/fixtures/3aaa80314ca3bb3404ab1a0b2be0da6a @@ -0,0 +1 @@ +See: http://archive.org/download/mbid-7aa99236-67d1-4996-b5ec-f6a517653fbe/index.json diff --git a/test/fixtures/3aaa80314ca3bb3404ab1a0b2be0da6a.headers b/test/fixtures/3aaa80314ca3bb3404ab1a0b2be0da6a.headers new file mode 100644 index 0000000..ad5136b --- /dev/null +++ b/test/fixtures/3aaa80314ca3bb3404ab1a0b2be0da6a.headers @@ -0,0 +1,24 @@ +{ + "statusCode": 307, + "headers": { + "date": "Tue, 20 Dec 2016 01:39:57 GMT", + "content-type": "text/plain; charset=utf-8", + "content-length": "86", + "connection": "keep-alive", + "keep-alive": "timeout=15", + "location": "http://archive.org/download/mbid-7aa99236-67d1-4996-b5ec-f6a517653fbe/index.json", + "access-control-allow-origin": "*", + "server": "4b4c084fb141" + }, + "url": "http://coverartarchive.org:80/release/7aa99236-67d1-4996-b5ec-f6a517653fbe", + "time": 391, + "request": { + "method": "GET", + "headers": { + "User-Agent": "graphbrainz/4.5.0 ( https://github.com/exogen/graphbrainz )", + "host": "coverartarchive.org", + "accept-encoding": "gzip, deflate", + "accept": "application/json" + } + } +} \ No newline at end of file diff --git a/test/fixtures/3d1ea2a773f49cdf17cf4256f5cde4bf b/test/fixtures/3d1ea2a773f49cdf17cf4256f5cde4bf new file mode 100644 index 0000000..e69de29 diff --git a/test/fixtures/3d1ea2a773f49cdf17cf4256f5cde4bf.headers b/test/fixtures/3d1ea2a773f49cdf17cf4256f5cde4bf.headers new file mode 100644 index 0000000..85c5e97 --- /dev/null +++ b/test/fixtures/3d1ea2a773f49cdf17cf4256f5cde4bf.headers @@ -0,0 +1,25 @@ +{ + "statusCode": 302, + "headers": { + "server": "nginx/1.4.6 (Ubuntu)", + "date": "Tue, 20 Dec 2016 01:39:57 GMT", + "content-type": "text/html; charset=UTF-8", + "transfer-encoding": "chunked", + "connection": "keep-alive", + "x-powered-by": "PHP/5.5.9-1ubuntu4.20", + "accept-ranges": "bytes", + "location": "http://ia601204.us.archive.org/4/items/mbid-3ee3723e-ed1e-4baa-a718-7f1d9ecb3bec/index.json" + }, + "url": "http://archive.org:80/download/mbid-3ee3723e-ed1e-4baa-a718-7f1d9ecb3bec/index.json", + "time": 158, + "request": { + "method": "GET", + "headers": { + "User-Agent": "graphbrainz/4.5.0 ( https://github.com/exogen/graphbrainz )", + "accept-encoding": "gzip, deflate", + "accept": "application/json", + "referer": "http://coverartarchive.org/release/3ee3723e-ed1e-4baa-a718-7f1d9ecb3bec", + "host": "archive.org" + } + } +} \ No newline at end of file diff --git a/test/fixtures/3d67fb108e6729c1e1e31c4889191cc4 b/test/fixtures/3d67fb108e6729c1e1e31c4889191cc4 new file mode 100644 index 0000000..ef26f0d Binary files /dev/null and b/test/fixtures/3d67fb108e6729c1e1e31c4889191cc4 differ diff --git a/test/fixtures/3d67fb108e6729c1e1e31c4889191cc4.headers b/test/fixtures/3d67fb108e6729c1e1e31c4889191cc4.headers new file mode 100644 index 0000000..0e0d31f --- /dev/null +++ b/test/fixtures/3d67fb108e6729c1e1e31c4889191cc4.headers @@ -0,0 +1,29 @@ +{ + "statusCode": 200, + "headers": { + "date": "Tue, 20 Dec 2016 01:40:11 GMT", + "content-type": "application/json; charset=utf-8", + "transfer-encoding": "chunked", + "connection": "keep-alive", + "keep-alive": "timeout=15", + "vary": "Accept-Encoding", + "x-ratelimit-limit": "700", + "x-ratelimit-remaining": "579", + "x-ratelimit-reset": "1482198012", + "server": "Plack::Handler::Starlet", + "etag": "W/\"dc7e6d284fbbe310adcd3da8b6a4b24e\"", + "access-control-allow-origin": "*", + "content-encoding": "gzip" + }, + "url": "http://musicbrainz.org:80/ws/2/release/22a1945f-185c-4d70-979e-f297b00b0c71?fmt=json", + "time": 414, + "request": { + "method": "GET", + "headers": { + "User-Agent": "graphbrainz/4.5.0 ( 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/fixtures/3f24e4abb92f417cc6ee84b83d09c180 b/test/fixtures/3f24e4abb92f417cc6ee84b83d09c180 new file mode 100644 index 0000000..77c0810 --- /dev/null +++ b/test/fixtures/3f24e4abb92f417cc6ee84b83d09c180 @@ -0,0 +1,4 @@ + +No cover art found for release b2d35202-f793-487f-b796-ad0f1882a777
diff --git a/test/fixtures/3f24e4abb92f417cc6ee84b83d09c180.headers b/test/fixtures/3f24e4abb92f417cc6ee84b83d09c180.headers new file mode 100644 index 0000000..831402d --- /dev/null +++ b/test/fixtures/3f24e4abb92f417cc6ee84b83d09c180.headers @@ -0,0 +1,22 @@ +{ + "statusCode": 404, + "headers": { + "date": "Tue, 20 Dec 2016 01:39:57 GMT", + "content-type": "text/html", + "content-length": "179", + "connection": "keep-alive", + "keep-alive": "timeout=15", + "server": "d8b8a8eb2a2a" + }, + "url": "http://coverartarchive.org:80/release/b2d35202-f793-487f-b796-ad0f1882a777", + "time": 392, + "request": { + "method": "GET", + "headers": { + "User-Agent": "graphbrainz/4.5.0 ( https://github.com/exogen/graphbrainz )", + "host": "coverartarchive.org", + "accept-encoding": "gzip, deflate", + "accept": "application/json" + } + } +} \ No newline at end of file diff --git a/test/fixtures/436bd8bd74ed540a37fcc9135ea97368 b/test/fixtures/436bd8bd74ed540a37fcc9135ea97368 new file mode 100644 index 0000000..2f0130a Binary files /dev/null and b/test/fixtures/436bd8bd74ed540a37fcc9135ea97368 differ diff --git a/test/fixtures/436bd8bd74ed540a37fcc9135ea97368.headers b/test/fixtures/436bd8bd74ed540a37fcc9135ea97368.headers new file mode 100644 index 0000000..d072136 --- /dev/null +++ b/test/fixtures/436bd8bd74ed540a37fcc9135ea97368.headers @@ -0,0 +1,29 @@ +{ + "statusCode": 200, + "headers": { + "date": "Tue, 20 Dec 2016 01:40:11 GMT", + "content-type": "application/json; charset=utf-8", + "transfer-encoding": "chunked", + "connection": "keep-alive", + "keep-alive": "timeout=15", + "vary": "Accept-Encoding", + "x-ratelimit-limit": "700", + "x-ratelimit-remaining": "573", + "x-ratelimit-reset": "1482198012", + "server": "Plack::Handler::Starlet", + "etag": "W/\"f31d3255a73df98fcc757f99355ca3d9\"", + "access-control-allow-origin": "*", + "content-encoding": "gzip" + }, + "url": "http://musicbrainz.org:80/ws/2/release/90a00dba-addb-4fdc-af2c-6fbb5d733c39?fmt=json", + "time": 419, + "request": { + "method": "GET", + "headers": { + "User-Agent": "graphbrainz/4.5.0 ( 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/fixtures/4722e553ad2febf7e2c68d71f478a338 b/test/fixtures/4722e553ad2febf7e2c68d71f478a338 new file mode 100644 index 0000000..02ae5eb --- /dev/null +++ b/test/fixtures/4722e553ad2febf7e2c68d71f478a338 @@ -0,0 +1,4 @@ + +No cover art found for release 15c88cc0-30f5-4568-bac8-e577e3358023
diff --git a/test/fixtures/4722e553ad2febf7e2c68d71f478a338.headers b/test/fixtures/4722e553ad2febf7e2c68d71f478a338.headers new file mode 100644 index 0000000..476e2d7 --- /dev/null +++ b/test/fixtures/4722e553ad2febf7e2c68d71f478a338.headers @@ -0,0 +1,22 @@ +{ + "statusCode": 404, + "headers": { + "date": "Tue, 20 Dec 2016 01:39:55 GMT", + "content-type": "text/html", + "content-length": "179", + "connection": "keep-alive", + "keep-alive": "timeout=15", + "server": "4b4c084fb141" + }, + "url": "http://coverartarchive.org:80/release/15c88cc0-30f5-4568-bac8-e577e3358023", + "time": 434, + "request": { + "method": "GET", + "headers": { + "User-Agent": "graphbrainz/4.5.0 ( https://github.com/exogen/graphbrainz )", + "host": "coverartarchive.org", + "accept-encoding": "gzip, deflate", + "accept": "application/json" + } + } +} \ No newline at end of file diff --git a/test/fixtures/49b42184abf656b320a7124347074075 b/test/fixtures/49b42184abf656b320a7124347074075 new file mode 100644 index 0000000..25c7a61 --- /dev/null +++ b/test/fixtures/49b42184abf656b320a7124347074075 @@ -0,0 +1 @@ +See: http://archive.org/download/mbid-32a863b3-a356-4873-8b74-c2039156cb68/index.json diff --git a/test/fixtures/49b42184abf656b320a7124347074075.headers b/test/fixtures/49b42184abf656b320a7124347074075.headers new file mode 100644 index 0000000..c404dc0 --- /dev/null +++ b/test/fixtures/49b42184abf656b320a7124347074075.headers @@ -0,0 +1,24 @@ +{ + "statusCode": 307, + "headers": { + "date": "Tue, 20 Dec 2016 01:39:56 GMT", + "content-type": "text/plain; charset=utf-8", + "content-length": "86", + "connection": "keep-alive", + "keep-alive": "timeout=15", + "location": "http://archive.org/download/mbid-32a863b3-a356-4873-8b74-c2039156cb68/index.json", + "access-control-allow-origin": "*", + "server": "d6446ea62189" + }, + "url": "http://coverartarchive.org:80/release/32a863b3-a356-4873-8b74-c2039156cb68", + "time": 495, + "request": { + "method": "GET", + "headers": { + "User-Agent": "graphbrainz/4.5.0 ( https://github.com/exogen/graphbrainz )", + "host": "coverartarchive.org", + "accept-encoding": "gzip, deflate", + "accept": "application/json" + } + } +} \ No newline at end of file diff --git a/test/fixtures/4d3b01cc6d5ab75031ffa9465320de11 b/test/fixtures/4d3b01cc6d5ab75031ffa9465320de11 new file mode 100644 index 0000000..26c0eaa Binary files /dev/null and b/test/fixtures/4d3b01cc6d5ab75031ffa9465320de11 differ diff --git a/test/fixtures/4d3b01cc6d5ab75031ffa9465320de11.headers b/test/fixtures/4d3b01cc6d5ab75031ffa9465320de11.headers new file mode 100644 index 0000000..320a7a2 --- /dev/null +++ b/test/fixtures/4d3b01cc6d5ab75031ffa9465320de11.headers @@ -0,0 +1,29 @@ +{ + "statusCode": 200, + "headers": { + "date": "Tue, 20 Dec 2016 01:40:16 GMT", + "content-type": "application/json; charset=utf-8", + "transfer-encoding": "chunked", + "connection": "keep-alive", + "keep-alive": "timeout=15", + "vary": "Accept-Encoding", + "x-ratelimit-limit": "700", + "x-ratelimit-remaining": "217", + "x-ratelimit-reset": "1482198016", + "server": "Plack::Handler::Starlet", + "etag": "W/\"463f2bbcb3f8dfb7e98aea81f2672f23\"", + "access-control-allow-origin": "*", + "content-encoding": "gzip" + }, + "url": "http://musicbrainz.org:80/ws/2/release/1724b946-fde3-49e5-adec-5e3f62f14a53?fmt=json", + "time": 417, + "request": { + "method": "GET", + "headers": { + "User-Agent": "graphbrainz/4.5.0 ( 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/fixtures/4fcb70e39045e968057c2ef8a75f9186 b/test/fixtures/4fcb70e39045e968057c2ef8a75f9186 new file mode 100644 index 0000000..17fbac3 Binary files /dev/null and b/test/fixtures/4fcb70e39045e968057c2ef8a75f9186 differ diff --git a/test/fixtures/4fcb70e39045e968057c2ef8a75f9186.headers b/test/fixtures/4fcb70e39045e968057c2ef8a75f9186.headers new file mode 100644 index 0000000..a3902d3 --- /dev/null +++ b/test/fixtures/4fcb70e39045e968057c2ef8a75f9186.headers @@ -0,0 +1,29 @@ +{ + "statusCode": 200, + "headers": { + "date": "Tue, 20 Dec 2016 01:40:00 GMT", + "content-type": "application/json; charset=utf-8", + "transfer-encoding": "chunked", + "connection": "keep-alive", + "keep-alive": "timeout=15", + "vary": "Accept-Encoding", + "x-ratelimit-limit": "700", + "x-ratelimit-remaining": "296", + "x-ratelimit-reset": "1482198000", + "server": "Plack::Handler::Starlet", + "etag": "W/\"913a1fe119084c569261937e14d21171\"", + "access-control-allow-origin": "*", + "content-encoding": "gzip" + }, + "url": "http://musicbrainz.org:80/ws/2/release/0832e770-e7e5-464c-9288-9c407a770842?fmt=json", + "time": 415, + "request": { + "method": "GET", + "headers": { + "User-Agent": "graphbrainz/4.5.0 ( 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/fixtures/55e718a13ff7c5178cbb0116a1bd2cd6 b/test/fixtures/55e718a13ff7c5178cbb0116a1bd2cd6 new file mode 100644 index 0000000..cb99e7d Binary files /dev/null and b/test/fixtures/55e718a13ff7c5178cbb0116a1bd2cd6 differ diff --git a/test/fixtures/55e718a13ff7c5178cbb0116a1bd2cd6.headers b/test/fixtures/55e718a13ff7c5178cbb0116a1bd2cd6.headers new file mode 100644 index 0000000..867a886 --- /dev/null +++ b/test/fixtures/55e718a13ff7c5178cbb0116a1bd2cd6.headers @@ -0,0 +1,29 @@ +{ + "statusCode": 200, + "headers": { + "date": "Tue, 20 Dec 2016 01:39:49 GMT", + "content-type": "application/json; charset=utf-8", + "transfer-encoding": "chunked", + "connection": "keep-alive", + "keep-alive": "timeout=15", + "vary": "Accept-Encoding", + "x-ratelimit-limit": "700", + "x-ratelimit-remaining": "548", + "x-ratelimit-reset": "1482197990", + "server": "Plack::Handler::Starlet", + "etag": "W/\"412565deba857fd28ed53fb04eba9e16\"", + "access-control-allow-origin": "*", + "content-encoding": "gzip" + }, + "url": "http://musicbrainz.org:80/ws/2/release/b84ee12a-09ef-421b-82de-0441a926375b?fmt=json", + "time": 467, + "request": { + "method": "GET", + "headers": { + "User-Agent": "graphbrainz/4.5.0 ( 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/fixtures/59293eea29033071de7f98943c3b5b1f b/test/fixtures/59293eea29033071de7f98943c3b5b1f new file mode 100644 index 0000000..e1bca9e --- /dev/null +++ b/test/fixtures/59293eea29033071de7f98943c3b5b1f @@ -0,0 +1 @@ +See: http://archive.org/download/mbid-3ee3723e-ed1e-4baa-a718-7f1d9ecb3bec/index.json diff --git a/test/fixtures/59293eea29033071de7f98943c3b5b1f.headers b/test/fixtures/59293eea29033071de7f98943c3b5b1f.headers new file mode 100644 index 0000000..afe8419 --- /dev/null +++ b/test/fixtures/59293eea29033071de7f98943c3b5b1f.headers @@ -0,0 +1,24 @@ +{ + "statusCode": 307, + "headers": { + "date": "Tue, 20 Dec 2016 01:39:56 GMT", + "content-type": "text/plain; charset=utf-8", + "content-length": "86", + "connection": "keep-alive", + "keep-alive": "timeout=15", + "location": "http://archive.org/download/mbid-3ee3723e-ed1e-4baa-a718-7f1d9ecb3bec/index.json", + "access-control-allow-origin": "*", + "server": "d6446ea62189" + }, + "url": "http://coverartarchive.org:80/release/3ee3723e-ed1e-4baa-a718-7f1d9ecb3bec", + "time": 513, + "request": { + "method": "GET", + "headers": { + "User-Agent": "graphbrainz/4.5.0 ( https://github.com/exogen/graphbrainz )", + "host": "coverartarchive.org", + "accept-encoding": "gzip, deflate", + "accept": "application/json" + } + } +} \ No newline at end of file diff --git a/test/fixtures/59c56dc30ab4179d0ee155e799ed637a b/test/fixtures/59c56dc30ab4179d0ee155e799ed637a new file mode 100644 index 0000000..240d3fe Binary files /dev/null and b/test/fixtures/59c56dc30ab4179d0ee155e799ed637a differ diff --git a/test/fixtures/59c56dc30ab4179d0ee155e799ed637a.headers b/test/fixtures/59c56dc30ab4179d0ee155e799ed637a.headers new file mode 100644 index 0000000..fc33d75 --- /dev/null +++ b/test/fixtures/59c56dc30ab4179d0ee155e799ed637a.headers @@ -0,0 +1,29 @@ +{ + "statusCode": 200, + "headers": { + "date": "Tue, 20 Dec 2016 01:40:00 GMT", + "content-type": "application/json; charset=utf-8", + "transfer-encoding": "chunked", + "connection": "keep-alive", + "keep-alive": "timeout=15", + "vary": "Accept-Encoding", + "x-ratelimit-limit": "700", + "x-ratelimit-remaining": "302", + "x-ratelimit-reset": "1482198000", + "server": "Plack::Handler::Starlet", + "etag": "W/\"d62c1c90ac668a9d6a2b70547d7879ce\"", + "access-control-allow-origin": "*", + "content-encoding": "gzip" + }, + "url": "http://musicbrainz.org:80/ws/2/release/15c88cc0-30f5-4568-bac8-e577e3358023?fmt=json", + "time": 409, + "request": { + "method": "GET", + "headers": { + "User-Agent": "graphbrainz/4.5.0 ( 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/fixtures/5d11ca0430a620cfab0f05264323a992 b/test/fixtures/5d11ca0430a620cfab0f05264323a992 new file mode 100644 index 0000000..fd17adf --- /dev/null +++ b/test/fixtures/5d11ca0430a620cfab0f05264323a992 @@ -0,0 +1,4 @@ + +No cover art found for release 83dc341f-1854-4319-b008-b6a26709dab8
diff --git a/test/fixtures/5d11ca0430a620cfab0f05264323a992.headers b/test/fixtures/5d11ca0430a620cfab0f05264323a992.headers new file mode 100644 index 0000000..33b9124 --- /dev/null +++ b/test/fixtures/5d11ca0430a620cfab0f05264323a992.headers @@ -0,0 +1,22 @@ +{ + "statusCode": 404, + "headers": { + "date": "Tue, 20 Dec 2016 01:39:56 GMT", + "content-type": "text/html", + "content-length": "179", + "connection": "keep-alive", + "keep-alive": "timeout=15", + "server": "4b4c084fb141" + }, + "url": "http://coverartarchive.org:80/release/83dc341f-1854-4319-b008-b6a26709dab8", + "time": 465, + "request": { + "method": "GET", + "headers": { + "User-Agent": "graphbrainz/4.5.0 ( https://github.com/exogen/graphbrainz )", + "host": "coverartarchive.org", + "accept-encoding": "gzip, deflate", + "accept": "application/json" + } + } +} \ No newline at end of file diff --git a/test/fixtures/600c519401f48c53791ce190cae3f561 b/test/fixtures/600c519401f48c53791ce190cae3f561 new file mode 100644 index 0000000..8606524 --- /dev/null +++ b/test/fixtures/600c519401f48c53791ce190cae3f561 @@ -0,0 +1 @@ +See: http://archive.org/download/mbid-ee773571-6147-4bfd-8ea1-d666c4d4caef/index.json diff --git a/test/fixtures/600c519401f48c53791ce190cae3f561.headers b/test/fixtures/600c519401f48c53791ce190cae3f561.headers new file mode 100644 index 0000000..6448183 --- /dev/null +++ b/test/fixtures/600c519401f48c53791ce190cae3f561.headers @@ -0,0 +1,24 @@ +{ + "statusCode": 307, + "headers": { + "date": "Tue, 20 Dec 2016 01:39:56 GMT", + "content-type": "text/plain; charset=utf-8", + "content-length": "86", + "connection": "keep-alive", + "keep-alive": "timeout=15", + "location": "http://archive.org/download/mbid-ee773571-6147-4bfd-8ea1-d666c4d4caef/index.json", + "access-control-allow-origin": "*", + "server": "d6446ea62189" + }, + "url": "http://coverartarchive.org:80/release/ee773571-6147-4bfd-8ea1-d666c4d4caef", + "time": 476, + "request": { + "method": "GET", + "headers": { + "User-Agent": "graphbrainz/4.5.0 ( https://github.com/exogen/graphbrainz )", + "host": "coverartarchive.org", + "accept-encoding": "gzip, deflate", + "accept": "application/json" + } + } +} \ No newline at end of file diff --git a/test/fixtures/681f1edb476435e41fdb6ae48bd7e2f9 b/test/fixtures/681f1edb476435e41fdb6ae48bd7e2f9 new file mode 100644 index 0000000..3c77997 --- /dev/null +++ b/test/fixtures/681f1edb476435e41fdb6ae48bd7e2f9 @@ -0,0 +1 @@ +{"images":[{"types":["Front","Booklet"],"front":true,"back":false,"edit":29753022,"image":"http://coverartarchive.org/release/90a00dba-addb-4fdc-af2c-6fbb5d733c39/8615474322.jpg","comment":"","approved":true,"id":"8615474322","thumbnails":{"large":"http://coverartarchive.org/release/90a00dba-addb-4fdc-af2c-6fbb5d733c39/8615474322-500.jpg","small":"http://coverartarchive.org/release/90a00dba-addb-4fdc-af2c-6fbb5d733c39/8615474322-250.jpg"}},{"types":["Medium"],"front":false,"back":false,"edit":29753069,"image":"http://coverartarchive.org/release/90a00dba-addb-4fdc-af2c-6fbb5d733c39/8615530709.jpg","comment":"","approved":true,"id":"8615530709","thumbnails":{"large":"http://coverartarchive.org/release/90a00dba-addb-4fdc-af2c-6fbb5d733c39/8615530709-500.jpg","small":"http://coverartarchive.org/release/90a00dba-addb-4fdc-af2c-6fbb5d733c39/8615530709-250.jpg"}},{"types":["Back","Spine"],"front":false,"back":true,"edit":29753023,"image":"http://coverartarchive.org/release/90a00dba-addb-4fdc-af2c-6fbb5d733c39/8615477106.jpg","comment":"","approved":true,"id":"8615477106","thumbnails":{"large":"http://coverartarchive.org/release/90a00dba-addb-4fdc-af2c-6fbb5d733c39/8615477106-500.jpg","small":"http://coverartarchive.org/release/90a00dba-addb-4fdc-af2c-6fbb5d733c39/8615477106-250.jpg"}}],"release":"http://musicbrainz.org/release/90a00dba-addb-4fdc-af2c-6fbb5d733c39"} \ No newline at end of file diff --git a/test/fixtures/681f1edb476435e41fdb6ae48bd7e2f9.headers b/test/fixtures/681f1edb476435e41fdb6ae48bd7e2f9.headers new file mode 100644 index 0000000..33d6543 --- /dev/null +++ b/test/fixtures/681f1edb476435e41fdb6ae48bd7e2f9.headers @@ -0,0 +1,27 @@ +{ + "statusCode": 200, + "headers": { + "server": "nginx/1.4.6 (Ubuntu)", + "date": "Tue, 20 Dec 2016 01:39:57 GMT", + "content-type": "application/json", + "content-length": "1380", + "last-modified": "Sun, 26 Oct 2014 03:00:42 GMT", + "connection": "keep-alive", + "etag": "\"544c63da-564\"", + "expires": "Tue, 20 Dec 2016 07:39:57 GMT", + "cache-control": "max-age=21600", + "accept-ranges": "bytes" + }, + "url": "http://ia802605.us.archive.org:80/15/items/mbid-90a00dba-addb-4fdc-af2c-6fbb5d733c39/index.json", + "time": 93, + "request": { + "method": "GET", + "headers": { + "User-Agent": "graphbrainz/4.5.0 ( https://github.com/exogen/graphbrainz )", + "accept-encoding": "gzip, deflate", + "accept": "application/json", + "referer": "http://archive.org/download/mbid-90a00dba-addb-4fdc-af2c-6fbb5d733c39/index.json", + "host": "ia802605.us.archive.org" + } + } +} \ No newline at end of file diff --git a/test/fixtures/71097d26676d70389a9b76ea2061db4d b/test/fixtures/71097d26676d70389a9b76ea2061db4d new file mode 100644 index 0000000..43c3a1c --- /dev/null +++ b/test/fixtures/71097d26676d70389a9b76ea2061db4d @@ -0,0 +1 @@ +See: http://archive.org/download/mbid-25fbfbb4-b1ee-4448-aadf-ae3bc2e2dd27/index.json diff --git a/test/fixtures/71097d26676d70389a9b76ea2061db4d.headers b/test/fixtures/71097d26676d70389a9b76ea2061db4d.headers new file mode 100644 index 0000000..b2e15a0 --- /dev/null +++ b/test/fixtures/71097d26676d70389a9b76ea2061db4d.headers @@ -0,0 +1,24 @@ +{ + "statusCode": 307, + "headers": { + "date": "Tue, 20 Dec 2016 01:39:54 GMT", + "content-type": "text/plain; charset=utf-8", + "content-length": "86", + "connection": "keep-alive", + "keep-alive": "timeout=15", + "location": "http://archive.org/download/mbid-25fbfbb4-b1ee-4448-aadf-ae3bc2e2dd27/index.json", + "access-control-allow-origin": "*", + "server": "4b4c084fb141" + }, + "url": "http://coverartarchive.org:80/release-group/f5093c06-23e3-404f-aeaa-40f72885ee3a", + "time": 383, + "request": { + "method": "GET", + "headers": { + "User-Agent": "graphbrainz/4.5.0 ( https://github.com/exogen/graphbrainz )", + "host": "coverartarchive.org", + "accept-encoding": "gzip, deflate", + "accept": "application/json" + } + } +} \ No newline at end of file diff --git a/test/fixtures/725c9375e05c924c1e007b737cb42594 b/test/fixtures/725c9375e05c924c1e007b737cb42594 new file mode 100644 index 0000000..a73292e --- /dev/null +++ b/test/fixtures/725c9375e05c924c1e007b737cb42594 @@ -0,0 +1,4 @@ + +No cover art found for release 1724b946-fde3-49e5-adec-5e3f62f14a53
diff --git a/test/fixtures/725c9375e05c924c1e007b737cb42594.headers b/test/fixtures/725c9375e05c924c1e007b737cb42594.headers new file mode 100644 index 0000000..d17fcdf --- /dev/null +++ b/test/fixtures/725c9375e05c924c1e007b737cb42594.headers @@ -0,0 +1,22 @@ +{ + "statusCode": 404, + "headers": { + "date": "Tue, 20 Dec 2016 01:39:57 GMT", + "content-type": "text/html", + "content-length": "179", + "connection": "keep-alive", + "keep-alive": "timeout=15", + "server": "d8b8a8eb2a2a" + }, + "url": "http://coverartarchive.org:80/release/1724b946-fde3-49e5-adec-5e3f62f14a53", + "time": 410, + "request": { + "method": "GET", + "headers": { + "User-Agent": "graphbrainz/4.5.0 ( https://github.com/exogen/graphbrainz )", + "host": "coverartarchive.org", + "accept-encoding": "gzip, deflate", + "accept": "application/json" + } + } +} \ No newline at end of file diff --git a/test/fixtures/74e59908ce007e6c1904a9ea1772ebb6 b/test/fixtures/74e59908ce007e6c1904a9ea1772ebb6 new file mode 100644 index 0000000..e69de29 diff --git a/test/fixtures/74e59908ce007e6c1904a9ea1772ebb6.headers b/test/fixtures/74e59908ce007e6c1904a9ea1772ebb6.headers new file mode 100644 index 0000000..250193f --- /dev/null +++ b/test/fixtures/74e59908ce007e6c1904a9ea1772ebb6.headers @@ -0,0 +1,24 @@ +{ + "statusCode": 307, + "headers": { + "date": "Tue, 20 Dec 2016 01:39:49 GMT", + "content-type": "text/plain; charset=utf-8", + "content-length": "133", + "connection": "keep-alive", + "keep-alive": "timeout=15", + "location": "http://archive.org/download/mbid-b84ee12a-09ef-421b-82de-0441a926375b/mbid-b84ee12a-09ef-421b-82de-0441a926375b-13536418798.jpg", + "access-control-allow-origin": "*", + "server": "4b4c084fb141" + }, + "url": "http://coverartarchive.org:80/release/b84ee12a-09ef-421b-82de-0441a926375b/back", + "time": 392, + "request": { + "method": "HEAD", + "headers": { + "User-Agent": "graphbrainz/4.5.0 ( https://github.com/exogen/graphbrainz )", + "host": "coverartarchive.org", + "accept-encoding": "gzip, deflate", + "content-length": 0 + } + } +} \ No newline at end of file diff --git a/test/fixtures/7625f6228e21bb0a707d6284d29f6238 b/test/fixtures/7625f6228e21bb0a707d6284d29f6238 new file mode 100644 index 0000000..32ddc42 Binary files /dev/null and b/test/fixtures/7625f6228e21bb0a707d6284d29f6238 differ diff --git a/test/fixtures/7625f6228e21bb0a707d6284d29f6238.headers b/test/fixtures/7625f6228e21bb0a707d6284d29f6238.headers new file mode 100644 index 0000000..685e778 --- /dev/null +++ b/test/fixtures/7625f6228e21bb0a707d6284d29f6238.headers @@ -0,0 +1,29 @@ +{ + "statusCode": 200, + "headers": { + "date": "Tue, 20 Dec 2016 01:40:05 GMT", + "content-type": "application/json; charset=utf-8", + "transfer-encoding": "chunked", + "connection": "keep-alive", + "keep-alive": "timeout=15", + "vary": "Accept-Encoding", + "x-ratelimit-limit": "700", + "x-ratelimit-remaining": "428", + "x-ratelimit-reset": "1482198006", + "server": "Plack::Handler::Starlet", + "etag": "W/\"d1bd4c0b88cef71df921aaf373ebec8b\"", + "access-control-allow-origin": "*", + "content-encoding": "gzip" + }, + "url": "http://musicbrainz.org:80/ws/2/release/29a43eb0-537d-4af1-8598-8b488c847f2e?fmt=json", + "time": 402, + "request": { + "method": "GET", + "headers": { + "User-Agent": "graphbrainz/4.5.0 ( 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/fixtures/7ac42ecd7ad91d876c3c3202ce69efa6 b/test/fixtures/7ac42ecd7ad91d876c3c3202ce69efa6 new file mode 100644 index 0000000..bed7b4d Binary files /dev/null and b/test/fixtures/7ac42ecd7ad91d876c3c3202ce69efa6 differ diff --git a/test/fixtures/7ac42ecd7ad91d876c3c3202ce69efa6.headers b/test/fixtures/7ac42ecd7ad91d876c3c3202ce69efa6.headers new file mode 100644 index 0000000..7669903 --- /dev/null +++ b/test/fixtures/7ac42ecd7ad91d876c3c3202ce69efa6.headers @@ -0,0 +1,29 @@ +{ + "statusCode": 200, + "headers": { + "date": "Tue, 20 Dec 2016 01:40:05 GMT", + "content-type": "application/json; charset=utf-8", + "transfer-encoding": "chunked", + "connection": "keep-alive", + "keep-alive": "timeout=15", + "vary": "Accept-Encoding", + "x-ratelimit-limit": "700", + "x-ratelimit-remaining": "430", + "x-ratelimit-reset": "1482198006", + "server": "Plack::Handler::Starlet", + "etag": "W/\"47fd9b0e0985095d4a5fb58e02ddb790\"", + "access-control-allow-origin": "*", + "content-encoding": "gzip" + }, + "url": "http://musicbrainz.org:80/ws/2/release/060dc665-af64-4e75-8e51-d74eda2ec957?fmt=json", + "time": 392, + "request": { + "method": "GET", + "headers": { + "User-Agent": "graphbrainz/4.5.0 ( 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/fixtures/7c1ef1cb044aa69ddad7cd69db399a81 b/test/fixtures/7c1ef1cb044aa69ddad7cd69db399a81 new file mode 100644 index 0000000..e69de29 diff --git a/test/fixtures/7c1ef1cb044aa69ddad7cd69db399a81.headers b/test/fixtures/7c1ef1cb044aa69ddad7cd69db399a81.headers new file mode 100644 index 0000000..c108b8b --- /dev/null +++ b/test/fixtures/7c1ef1cb044aa69ddad7cd69db399a81.headers @@ -0,0 +1,25 @@ +{ + "statusCode": 302, + "headers": { + "server": "nginx/1.4.6 (Ubuntu)", + "date": "Tue, 20 Dec 2016 01:39:57 GMT", + "content-type": "text/html; charset=UTF-8", + "transfer-encoding": "chunked", + "connection": "keep-alive", + "x-powered-by": "PHP/5.5.9-1ubuntu4.20", + "accept-ranges": "bytes", + "location": "http://ia802605.us.archive.org/15/items/mbid-90a00dba-addb-4fdc-af2c-6fbb5d733c39/index.json" + }, + "url": "http://archive.org:80/download/mbid-90a00dba-addb-4fdc-af2c-6fbb5d733c39/index.json", + "time": 185, + "request": { + "method": "GET", + "headers": { + "User-Agent": "graphbrainz/4.5.0 ( https://github.com/exogen/graphbrainz )", + "accept-encoding": "gzip, deflate", + "accept": "application/json", + "referer": "http://coverartarchive.org/release/90a00dba-addb-4fdc-af2c-6fbb5d733c39", + "host": "archive.org" + } + } +} \ No newline at end of file diff --git a/test/fixtures/82f8e5c9c0995affcb90ff13a0359856 b/test/fixtures/82f8e5c9c0995affcb90ff13a0359856 new file mode 100644 index 0000000..e69de29 diff --git a/test/fixtures/82f8e5c9c0995affcb90ff13a0359856.headers b/test/fixtures/82f8e5c9c0995affcb90ff13a0359856.headers new file mode 100644 index 0000000..9c04b42 --- /dev/null +++ b/test/fixtures/82f8e5c9c0995affcb90ff13a0359856.headers @@ -0,0 +1,25 @@ +{ + "statusCode": 302, + "headers": { + "server": "nginx/1.4.6 (Ubuntu)", + "date": "Tue, 20 Dec 2016 01:39:57 GMT", + "content-type": "text/html; charset=UTF-8", + "transfer-encoding": "chunked", + "connection": "keep-alive", + "x-powered-by": "PHP/5.5.9-1ubuntu4.20", + "accept-ranges": "bytes", + "location": "http://ia902608.us.archive.org/12/items/mbid-533e14a8-519d-4f04-95e8-8a84833f26b1/index.json" + }, + "url": "http://archive.org:80/download/mbid-533e14a8-519d-4f04-95e8-8a84833f26b1/index.json", + "time": 202, + "request": { + "method": "GET", + "headers": { + "User-Agent": "graphbrainz/4.5.0 ( https://github.com/exogen/graphbrainz )", + "accept-encoding": "gzip, deflate", + "accept": "application/json", + "referer": "http://coverartarchive.org/release/533e14a8-519d-4f04-95e8-8a84833f26b1", + "host": "archive.org" + } + } +} \ No newline at end of file diff --git a/test/fixtures/8417827908807fd6dda52450c6e094c6 b/test/fixtures/8417827908807fd6dda52450c6e094c6 new file mode 100644 index 0000000..db2b014 Binary files /dev/null and b/test/fixtures/8417827908807fd6dda52450c6e094c6 differ diff --git a/test/fixtures/8417827908807fd6dda52450c6e094c6.headers b/test/fixtures/8417827908807fd6dda52450c6e094c6.headers new file mode 100644 index 0000000..1766cef --- /dev/null +++ b/test/fixtures/8417827908807fd6dda52450c6e094c6.headers @@ -0,0 +1,29 @@ +{ + "statusCode": 200, + "headers": { + "date": "Tue, 20 Dec 2016 01:39:58 GMT", + "content-type": "application/json; charset=utf-8", + "transfer-encoding": "chunked", + "connection": "keep-alive", + "keep-alive": "timeout=15", + "vary": "Accept-Encoding", + "x-ratelimit-limit": "700", + "x-ratelimit-remaining": "200", + "x-ratelimit-reset": "1482197998", + "server": "Plack::Handler::Starlet", + "etag": "W/\"43924c0dd2c3e691bc33bebc8ddc9268\"", + "access-control-allow-origin": "*", + "content-encoding": "gzip" + }, + "url": "http://musicbrainz.org:80/ws/2/release/3d354599-d9d4-44a8-9584-37e3b0238871?fmt=json", + "time": 416, + "request": { + "method": "GET", + "headers": { + "User-Agent": "graphbrainz/4.5.0 ( 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/fixtures/851fadff7981d6862cc045eea0a822e3 b/test/fixtures/851fadff7981d6862cc045eea0a822e3 new file mode 100644 index 0000000..e3d0bac --- /dev/null +++ b/test/fixtures/851fadff7981d6862cc045eea0a822e3 @@ -0,0 +1 @@ +{"release":"https://musicbrainz.org/release/dd15903e-0ee7-45ec-aba1-2fc7b3a44e19","images":[{"id":"14693820293","front":true,"image":"http://coverartarchive.org/release/dd15903e-0ee7-45ec-aba1-2fc7b3a44e19/14693820293.jpg","thumbnails":{"small":"http://coverartarchive.org/release/dd15903e-0ee7-45ec-aba1-2fc7b3a44e19/14693820293-250.jpg","large":"http://coverartarchive.org/release/dd15903e-0ee7-45ec-aba1-2fc7b3a44e19/14693820293-500.jpg"},"types":["Front"],"comment":"","approved":true,"back":false,"edit":40831187},{"thumbnails":{"large":"http://coverartarchive.org/release/dd15903e-0ee7-45ec-aba1-2fc7b3a44e19/15029120792-500.jpg","small":"http://coverartarchive.org/release/dd15903e-0ee7-45ec-aba1-2fc7b3a44e19/15029120792-250.jpg"},"types":["Back","Spine"],"comment":"","image":"http://coverartarchive.org/release/dd15903e-0ee7-45ec-aba1-2fc7b3a44e19/15029120792.jpg","id":"15029120792","front":false,"edit":41462768,"approved":true,"back":true},{"edit":41462773,"approved":true,"back":false,"thumbnails":{"small":"http://coverartarchive.org/release/dd15903e-0ee7-45ec-aba1-2fc7b3a44e19/15029124666-250.jpg","large":"http://coverartarchive.org/release/dd15903e-0ee7-45ec-aba1-2fc7b3a44e19/15029124666-500.jpg"},"types":["Medium"],"comment":"","image":"http://coverartarchive.org/release/dd15903e-0ee7-45ec-aba1-2fc7b3a44e19/15029124666.jpg","id":"15029124666","front":false}]} \ No newline at end of file diff --git a/test/fixtures/851fadff7981d6862cc045eea0a822e3.headers b/test/fixtures/851fadff7981d6862cc045eea0a822e3.headers new file mode 100644 index 0000000..759e63f --- /dev/null +++ b/test/fixtures/851fadff7981d6862cc045eea0a822e3.headers @@ -0,0 +1,27 @@ +{ + "statusCode": 200, + "headers": { + "server": "nginx/1.4.6 (Ubuntu)", + "date": "Tue, 20 Dec 2016 01:39:56 GMT", + "content-type": "application/json", + "content-length": "1383", + "last-modified": "Sun, 06 Nov 2016 10:02:39 GMT", + "connection": "keep-alive", + "etag": "\"581effbf-567\"", + "expires": "Tue, 20 Dec 2016 07:39:56 GMT", + "cache-control": "max-age=21600", + "accept-ranges": "bytes" + }, + "url": "http://ia801508.us.archive.org:80/17/items/mbid-dd15903e-0ee7-45ec-aba1-2fc7b3a44e19/index.json", + "time": 293, + "request": { + "method": "GET", + "headers": { + "User-Agent": "graphbrainz/4.5.0 ( https://github.com/exogen/graphbrainz )", + "accept-encoding": "gzip, deflate", + "accept": "application/json", + "referer": "http://archive.org/download/mbid-dd15903e-0ee7-45ec-aba1-2fc7b3a44e19/index.json", + "host": "ia801508.us.archive.org" + } + } +} \ No newline at end of file diff --git a/test/fixtures/85b25c8d456ebee45124282fee2ce040 b/test/fixtures/85b25c8d456ebee45124282fee2ce040 new file mode 100644 index 0000000..ca52376 Binary files /dev/null and b/test/fixtures/85b25c8d456ebee45124282fee2ce040 differ diff --git a/test/fixtures/85b25c8d456ebee45124282fee2ce040.headers b/test/fixtures/85b25c8d456ebee45124282fee2ce040.headers new file mode 100644 index 0000000..7ec5a0c --- /dev/null +++ b/test/fixtures/85b25c8d456ebee45124282fee2ce040.headers @@ -0,0 +1,29 @@ +{ + "statusCode": 200, + "headers": { + "date": "Tue, 20 Dec 2016 01:40:16 GMT", + "content-type": "application/json; charset=utf-8", + "transfer-encoding": "chunked", + "connection": "keep-alive", + "keep-alive": "timeout=15", + "vary": "Accept-Encoding", + "x-ratelimit-limit": "700", + "x-ratelimit-remaining": "224", + "x-ratelimit-reset": "1482198016", + "server": "Plack::Handler::Starlet", + "etag": "W/\"72d2983f2989ac6c7d1e5404726717fe\"", + "access-control-allow-origin": "*", + "content-encoding": "gzip" + }, + "url": "http://musicbrainz.org:80/ws/2/release/83dc341f-1854-4319-b008-b6a26709dab8?fmt=json", + "time": 414, + "request": { + "method": "GET", + "headers": { + "User-Agent": "graphbrainz/4.5.0 ( 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/fixtures/85fe9ce7ea1df73ed9a47c34a9ab639a b/test/fixtures/85fe9ce7ea1df73ed9a47c34a9ab639a new file mode 100644 index 0000000..b2eb705 --- /dev/null +++ b/test/fixtures/85fe9ce7ea1df73ed9a47c34a9ab639a @@ -0,0 +1 @@ +{"release":"https://musicbrainz.org/release/ee773571-6147-4bfd-8ea1-d666c4d4caef","images":[{"comment":"","types":["Front"],"thumbnails":{"large":"http://coverartarchive.org/release/ee773571-6147-4bfd-8ea1-d666c4d4caef/14352438517-500.jpg","small":"http://coverartarchive.org/release/ee773571-6147-4bfd-8ea1-d666c4d4caef/14352438517-250.jpg"},"image":"http://coverartarchive.org/release/ee773571-6147-4bfd-8ea1-d666c4d4caef/14352438517.jpg","front":true,"id":"14352438517","edit":40179297,"back":false,"approved":true}]} \ No newline at end of file diff --git a/test/fixtures/85fe9ce7ea1df73ed9a47c34a9ab639a.headers b/test/fixtures/85fe9ce7ea1df73ed9a47c34a9ab639a.headers new file mode 100644 index 0000000..661bffa --- /dev/null +++ b/test/fixtures/85fe9ce7ea1df73ed9a47c34a9ab639a.headers @@ -0,0 +1,27 @@ +{ + "statusCode": 200, + "headers": { + "server": "nginx/1.4.6 (Ubuntu)", + "date": "Tue, 20 Dec 2016 01:39:57 GMT", + "content-type": "application/json", + "content-length": "520", + "last-modified": "Sat, 20 Aug 2016 02:02:44 GMT", + "connection": "keep-alive", + "etag": "\"57b7ba44-208\"", + "expires": "Tue, 20 Dec 2016 07:39:57 GMT", + "cache-control": "max-age=21600", + "accept-ranges": "bytes" + }, + "url": "http://ia601208.us.archive.org:80/31/items/mbid-ee773571-6147-4bfd-8ea1-d666c4d4caef/index.json", + "time": 113, + "request": { + "method": "GET", + "headers": { + "User-Agent": "graphbrainz/4.5.0 ( https://github.com/exogen/graphbrainz )", + "accept-encoding": "gzip, deflate", + "accept": "application/json", + "referer": "http://archive.org/download/mbid-ee773571-6147-4bfd-8ea1-d666c4d4caef/index.json", + "host": "ia601208.us.archive.org" + } + } +} \ No newline at end of file diff --git a/test/fixtures/88d25eac97d9ca9d35b89f082799a4c6 b/test/fixtures/88d25eac97d9ca9d35b89f082799a4c6 new file mode 100644 index 0000000..e69de29 diff --git a/test/fixtures/88d25eac97d9ca9d35b89f082799a4c6.headers b/test/fixtures/88d25eac97d9ca9d35b89f082799a4c6.headers new file mode 100644 index 0000000..fab6cd8 --- /dev/null +++ b/test/fixtures/88d25eac97d9ca9d35b89f082799a4c6.headers @@ -0,0 +1,25 @@ +{ + "statusCode": 302, + "headers": { + "server": "nginx/1.4.6 (Ubuntu)", + "date": "Tue, 20 Dec 2016 01:39:57 GMT", + "content-type": "text/html; charset=UTF-8", + "transfer-encoding": "chunked", + "connection": "keep-alive", + "x-powered-by": "PHP/5.5.9-1ubuntu4.20", + "accept-ranges": "bytes", + "location": "http://ia902502.us.archive.org/29/items/mbid-22a1945f-185c-4d70-979e-f297b00b0c71/index.json" + }, + "url": "http://archive.org:80/download/mbid-22a1945f-185c-4d70-979e-f297b00b0c71/index.json", + "time": 153, + "request": { + "method": "GET", + "headers": { + "User-Agent": "graphbrainz/4.5.0 ( https://github.com/exogen/graphbrainz )", + "accept-encoding": "gzip, deflate", + "accept": "application/json", + "referer": "http://coverartarchive.org/release/22a1945f-185c-4d70-979e-f297b00b0c71", + "host": "archive.org" + } + } +} \ No newline at end of file diff --git a/test/fixtures/899fe51e8e100f8345cd1cf922bbfe1e b/test/fixtures/899fe51e8e100f8345cd1cf922bbfe1e new file mode 100644 index 0000000..0b3f60b --- /dev/null +++ b/test/fixtures/899fe51e8e100f8345cd1cf922bbfe1e @@ -0,0 +1 @@ +See: http://archive.org/download/mbid-22a1945f-185c-4d70-979e-f297b00b0c71/index.json diff --git a/test/fixtures/899fe51e8e100f8345cd1cf922bbfe1e.headers b/test/fixtures/899fe51e8e100f8345cd1cf922bbfe1e.headers new file mode 100644 index 0000000..34b3283 --- /dev/null +++ b/test/fixtures/899fe51e8e100f8345cd1cf922bbfe1e.headers @@ -0,0 +1,24 @@ +{ + "statusCode": 307, + "headers": { + "date": "Tue, 20 Dec 2016 01:39:56 GMT", + "content-type": "text/plain; charset=utf-8", + "content-length": "86", + "connection": "keep-alive", + "keep-alive": "timeout=15", + "location": "http://archive.org/download/mbid-22a1945f-185c-4d70-979e-f297b00b0c71/index.json", + "access-control-allow-origin": "*", + "server": "d8b8a8eb2a2a" + }, + "url": "http://coverartarchive.org:80/release/22a1945f-185c-4d70-979e-f297b00b0c71", + "time": 486, + "request": { + "method": "GET", + "headers": { + "User-Agent": "graphbrainz/4.5.0 ( https://github.com/exogen/graphbrainz )", + "host": "coverartarchive.org", + "accept-encoding": "gzip, deflate", + "accept": "application/json" + } + } +} \ No newline at end of file diff --git a/test/fixtures/8a175e08b48501b6e4cf37482521210d b/test/fixtures/8a175e08b48501b6e4cf37482521210d new file mode 100644 index 0000000..928e8a6 Binary files /dev/null and b/test/fixtures/8a175e08b48501b6e4cf37482521210d differ diff --git a/test/fixtures/8a175e08b48501b6e4cf37482521210d.headers b/test/fixtures/8a175e08b48501b6e4cf37482521210d.headers new file mode 100644 index 0000000..f9db01f --- /dev/null +++ b/test/fixtures/8a175e08b48501b6e4cf37482521210d.headers @@ -0,0 +1,29 @@ +{ + "statusCode": 200, + "headers": { + "date": "Tue, 20 Dec 2016 01:40:16 GMT", + "content-type": "application/json; charset=utf-8", + "transfer-encoding": "chunked", + "connection": "keep-alive", + "keep-alive": "timeout=15", + "vary": "Accept-Encoding", + "x-ratelimit-limit": "700", + "x-ratelimit-remaining": "222", + "x-ratelimit-reset": "1482198016", + "server": "Plack::Handler::Starlet", + "etag": "W/\"50514a23f86075506673175d648b5503\"", + "access-control-allow-origin": "*", + "content-encoding": "gzip" + }, + "url": "http://musicbrainz.org:80/ws/2/release/b2d35202-f793-487f-b796-ad0f1882a777?fmt=json", + "time": 408, + "request": { + "method": "GET", + "headers": { + "User-Agent": "graphbrainz/4.5.0 ( 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/fixtures/8dbe81ff8f0caaa1ae9d4efa37dc1412 b/test/fixtures/8dbe81ff8f0caaa1ae9d4efa37dc1412 new file mode 100644 index 0000000..81113c6 --- /dev/null +++ b/test/fixtures/8dbe81ff8f0caaa1ae9d4efa37dc1412 @@ -0,0 +1 @@ +{"images":[{"types":["Front"],"front":true,"back":false,"edit":19887905,"image":"http://coverartarchive.org/release/7aa99236-67d1-4996-b5ec-f6a517653fbe/2690764163.jpg","comment":"","approved":true,"thumbnails":{"large":"http://coverartarchive.org/release/7aa99236-67d1-4996-b5ec-f6a517653fbe/2690764163-500.jpg","small":"http://coverartarchive.org/release/7aa99236-67d1-4996-b5ec-f6a517653fbe/2690764163-250.jpg"},"id":"2690764163"}],"release":"http://musicbrainz.org/release/7aa99236-67d1-4996-b5ec-f6a517653fbe"} \ No newline at end of file diff --git a/test/fixtures/8dbe81ff8f0caaa1ae9d4efa37dc1412.headers b/test/fixtures/8dbe81ff8f0caaa1ae9d4efa37dc1412.headers new file mode 100644 index 0000000..4dc44b3 --- /dev/null +++ b/test/fixtures/8dbe81ff8f0caaa1ae9d4efa37dc1412.headers @@ -0,0 +1,27 @@ +{ + "statusCode": 200, + "headers": { + "server": "nginx/1.4.6 (Ubuntu)", + "date": "Tue, 20 Dec 2016 01:39:58 GMT", + "content-type": "application/json", + "content-length": "515", + "last-modified": "Sun, 16 Dec 2012 09:01:10 GMT", + "connection": "keep-alive", + "etag": "\"50cd8dd6-203\"", + "expires": "Tue, 20 Dec 2016 07:39:58 GMT", + "cache-control": "max-age=21600", + "accept-ranges": "bytes" + }, + "url": "http://ia800503.us.archive.org:80/13/items/mbid-7aa99236-67d1-4996-b5ec-f6a517653fbe/index.json", + "time": 153, + "request": { + "method": "GET", + "headers": { + "User-Agent": "graphbrainz/4.5.0 ( https://github.com/exogen/graphbrainz )", + "accept-encoding": "gzip, deflate", + "accept": "application/json", + "referer": "http://archive.org/download/mbid-7aa99236-67d1-4996-b5ec-f6a517653fbe/index.json", + "host": "ia800503.us.archive.org" + } + } +} \ No newline at end of file diff --git a/test/fixtures/8e366fd1096b4f5c9a7992c9aac9f7b9 b/test/fixtures/8e366fd1096b4f5c9a7992c9aac9f7b9 new file mode 100644 index 0000000..44e8e05 Binary files /dev/null and b/test/fixtures/8e366fd1096b4f5c9a7992c9aac9f7b9 differ diff --git a/test/fixtures/8e366fd1096b4f5c9a7992c9aac9f7b9.headers b/test/fixtures/8e366fd1096b4f5c9a7992c9aac9f7b9.headers new file mode 100644 index 0000000..4f3f26a --- /dev/null +++ b/test/fixtures/8e366fd1096b4f5c9a7992c9aac9f7b9.headers @@ -0,0 +1,29 @@ +{ + "statusCode": 200, + "headers": { + "date": "Tue, 20 Dec 2016 01:40:23 GMT", + "content-type": "application/json; charset=utf-8", + "transfer-encoding": "chunked", + "connection": "keep-alive", + "keep-alive": "timeout=15", + "vary": "Accept-Encoding", + "x-ratelimit-limit": "700", + "x-ratelimit-remaining": "632", + "x-ratelimit-reset": "1482198024", + "server": "Plack::Handler::Starlet", + "etag": "W/\"01992442d4c144ee1d736fcf341bc0b2\"", + "access-control-allow-origin": "*", + "content-encoding": "gzip" + }, + "url": "http://musicbrainz.org:80/ws/2/release/c0f74d5a-7534-414d-8b90-0ebe6c5da19e?fmt=json", + "time": 410, + "request": { + "method": "GET", + "headers": { + "User-Agent": "graphbrainz/4.5.0 ( 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/fixtures/8e41d1b7bbfb49f1d68725fe46b32b31 b/test/fixtures/8e41d1b7bbfb49f1d68725fe46b32b31 new file mode 100644 index 0000000..ac17073 --- /dev/null +++ b/test/fixtures/8e41d1b7bbfb49f1d68725fe46b32b31 @@ -0,0 +1,4 @@ + +No cover art found for release d632b12b-211e-4fbd-87fb-21382556388b
diff --git a/test/fixtures/8e41d1b7bbfb49f1d68725fe46b32b31.headers b/test/fixtures/8e41d1b7bbfb49f1d68725fe46b32b31.headers new file mode 100644 index 0000000..38598c2 --- /dev/null +++ b/test/fixtures/8e41d1b7bbfb49f1d68725fe46b32b31.headers @@ -0,0 +1,22 @@ +{ + "statusCode": 404, + "headers": { + "date": "Tue, 20 Dec 2016 01:39:57 GMT", + "content-type": "text/html", + "content-length": "179", + "connection": "keep-alive", + "keep-alive": "timeout=15", + "server": "d6446ea62189" + }, + "url": "http://coverartarchive.org:80/release/d632b12b-211e-4fbd-87fb-21382556388b", + "time": 395, + "request": { + "method": "GET", + "headers": { + "User-Agent": "graphbrainz/4.5.0 ( https://github.com/exogen/graphbrainz )", + "host": "coverartarchive.org", + "accept-encoding": "gzip, deflate", + "accept": "application/json" + } + } +} \ No newline at end of file diff --git a/test/fixtures/8f4adff433d805330aebe035bbb3d002 b/test/fixtures/8f4adff433d805330aebe035bbb3d002 new file mode 100644 index 0000000..bbb3d1a Binary files /dev/null and b/test/fixtures/8f4adff433d805330aebe035bbb3d002 differ diff --git a/test/fixtures/8f4adff433d805330aebe035bbb3d002.headers b/test/fixtures/8f4adff433d805330aebe035bbb3d002.headers new file mode 100644 index 0000000..04636d8 --- /dev/null +++ b/test/fixtures/8f4adff433d805330aebe035bbb3d002.headers @@ -0,0 +1,29 @@ +{ + "statusCode": 200, + "headers": { + "date": "Tue, 20 Dec 2016 01:40:22 GMT", + "content-type": "application/json; charset=UTF-8", + "transfer-encoding": "chunked", + "connection": "keep-alive", + "keep-alive": "timeout=15", + "vary": "Accept-Encoding", + "x-ratelimit-limit": "700", + "x-ratelimit-remaining": "236", + "x-ratelimit-reset": "1482198022", + "last-modified": "Tue, 20 Dec 2016 01:16:03 GMT", + "server": "Jetty(9.3.10.v20160621)", + "access-control-allow-origin": "*", + "content-encoding": "gzip" + }, + "url": "http://musicbrainz.org:80/ws/2/release?limit=1&query=reid%3Ab84ee12a-09ef-421b-82de-0441a926375b&fmt=json", + "time": 414, + "request": { + "method": "GET", + "headers": { + "User-Agent": "graphbrainz/4.5.0 ( 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/fixtures/90dd9e390b2eb9e86db99c06a5930c3c b/test/fixtures/90dd9e390b2eb9e86db99c06a5930c3c new file mode 100644 index 0000000..e69de29 diff --git a/test/fixtures/90dd9e390b2eb9e86db99c06a5930c3c.headers b/test/fixtures/90dd9e390b2eb9e86db99c06a5930c3c.headers new file mode 100644 index 0000000..711eab6 --- /dev/null +++ b/test/fixtures/90dd9e390b2eb9e86db99c06a5930c3c.headers @@ -0,0 +1,25 @@ +{ + "statusCode": 302, + "headers": { + "server": "nginx/1.4.6 (Ubuntu)", + "date": "Tue, 20 Dec 2016 01:39:57 GMT", + "content-type": "text/html; charset=UTF-8", + "transfer-encoding": "chunked", + "connection": "keep-alive", + "x-powered-by": "PHP/5.5.9-1ubuntu4.20", + "accept-ranges": "bytes", + "location": "http://ia601702.us.archive.org/1/items/mbid-32a863b3-a356-4873-8b74-c2039156cb68/index.json" + }, + "url": "http://archive.org:80/download/mbid-32a863b3-a356-4873-8b74-c2039156cb68/index.json", + "time": 196, + "request": { + "method": "GET", + "headers": { + "User-Agent": "graphbrainz/4.5.0 ( https://github.com/exogen/graphbrainz )", + "accept-encoding": "gzip, deflate", + "accept": "application/json", + "referer": "http://coverartarchive.org/release/32a863b3-a356-4873-8b74-c2039156cb68", + "host": "archive.org" + } + } +} \ No newline at end of file diff --git a/test/fixtures/92c20b3043c804f81d89af97976dfa53 b/test/fixtures/92c20b3043c804f81d89af97976dfa53 new file mode 100644 index 0000000..65e77d6 --- /dev/null +++ b/test/fixtures/92c20b3043c804f81d89af97976dfa53 @@ -0,0 +1 @@ +See: http://archive.org/download/mbid-3e2c779e-16e8-459e-8791-2da47a92dce6/index.json diff --git a/test/fixtures/92c20b3043c804f81d89af97976dfa53.headers b/test/fixtures/92c20b3043c804f81d89af97976dfa53.headers new file mode 100644 index 0000000..414209f --- /dev/null +++ b/test/fixtures/92c20b3043c804f81d89af97976dfa53.headers @@ -0,0 +1,24 @@ +{ + "statusCode": 307, + "headers": { + "date": "Tue, 20 Dec 2016 01:39:56 GMT", + "content-type": "text/plain; charset=utf-8", + "content-length": "86", + "connection": "keep-alive", + "keep-alive": "timeout=15", + "location": "http://archive.org/download/mbid-3e2c779e-16e8-459e-8791-2da47a92dce6/index.json", + "access-control-allow-origin": "*", + "server": "d6446ea62189" + }, + "url": "http://coverartarchive.org:80/release/3e2c779e-16e8-459e-8791-2da47a92dce6", + "time": 491, + "request": { + "method": "GET", + "headers": { + "User-Agent": "graphbrainz/4.5.0 ( https://github.com/exogen/graphbrainz )", + "host": "coverartarchive.org", + "accept-encoding": "gzip, deflate", + "accept": "application/json" + } + } +} \ No newline at end of file diff --git a/test/fixtures/9728c63ec56efc547f7cb0e94cb3fc43 b/test/fixtures/9728c63ec56efc547f7cb0e94cb3fc43 new file mode 100644 index 0000000..2043373 Binary files /dev/null and b/test/fixtures/9728c63ec56efc547f7cb0e94cb3fc43 differ diff --git a/test/fixtures/9728c63ec56efc547f7cb0e94cb3fc43.headers b/test/fixtures/9728c63ec56efc547f7cb0e94cb3fc43.headers new file mode 100644 index 0000000..ec66a7e --- /dev/null +++ b/test/fixtures/9728c63ec56efc547f7cb0e94cb3fc43.headers @@ -0,0 +1,29 @@ +{ + "statusCode": 200, + "headers": { + "date": "Tue, 20 Dec 2016 01:40:00 GMT", + "content-type": "application/json; charset=utf-8", + "transfer-encoding": "chunked", + "connection": "keep-alive", + "keep-alive": "timeout=15", + "vary": "Accept-Encoding", + "x-ratelimit-limit": "700", + "x-ratelimit-remaining": "303", + "x-ratelimit-reset": "1482198000", + "server": "Plack::Handler::Starlet", + "etag": "W/\"77cdb257044b11d746725a8ff91e4124\"", + "access-control-allow-origin": "*", + "content-encoding": "gzip" + }, + "url": "http://musicbrainz.org:80/ws/2/release/f12244a0-a0a6-4522-a78a-33b5c75c8b1f?fmt=json", + "time": 414, + "request": { + "method": "GET", + "headers": { + "User-Agent": "graphbrainz/4.5.0 ( 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/fixtures/97ca6d7fad6a7b70ec940fa3bab6c47a b/test/fixtures/97ca6d7fad6a7b70ec940fa3bab6c47a new file mode 100644 index 0000000..e69de29 diff --git a/test/fixtures/97ca6d7fad6a7b70ec940fa3bab6c47a.headers b/test/fixtures/97ca6d7fad6a7b70ec940fa3bab6c47a.headers new file mode 100644 index 0000000..4755fb2 --- /dev/null +++ b/test/fixtures/97ca6d7fad6a7b70ec940fa3bab6c47a.headers @@ -0,0 +1,25 @@ +{ + "statusCode": 302, + "headers": { + "server": "nginx/1.4.6 (Ubuntu)", + "date": "Tue, 20 Dec 2016 01:39:56 GMT", + "content-type": "text/html; charset=UTF-8", + "transfer-encoding": "chunked", + "connection": "keep-alive", + "x-powered-by": "PHP/5.5.9-1ubuntu4.20", + "accept-ranges": "bytes", + "location": "http://ia801508.us.archive.org/17/items/mbid-dd15903e-0ee7-45ec-aba1-2fc7b3a44e19/index.json" + }, + "url": "http://archive.org:80/download/mbid-dd15903e-0ee7-45ec-aba1-2fc7b3a44e19/index.json", + "time": 179, + "request": { + "method": "GET", + "headers": { + "User-Agent": "graphbrainz/4.5.0 ( https://github.com/exogen/graphbrainz )", + "accept-encoding": "gzip, deflate", + "accept": "application/json", + "referer": "http://coverartarchive.org/release/dd15903e-0ee7-45ec-aba1-2fc7b3a44e19", + "host": "archive.org" + } + } +} \ No newline at end of file diff --git a/test/fixtures/99a9d97c03b0197b42c4fc8e06319a87 b/test/fixtures/99a9d97c03b0197b42c4fc8e06319a87 new file mode 100644 index 0000000..e718843 --- /dev/null +++ b/test/fixtures/99a9d97c03b0197b42c4fc8e06319a87 @@ -0,0 +1 @@ +{"release":"https://musicbrainz.org/release/3d354599-d9d4-44a8-9584-37e3b0238871","images":[{"image":"http://coverartarchive.org/release/3d354599-d9d4-44a8-9584-37e3b0238871/15350933722.jpg","edit":42119625,"types":["Front"],"front":true,"thumbnails":{"small":"http://coverartarchive.org/release/3d354599-d9d4-44a8-9584-37e3b0238871/15350933722-250.jpg","large":"http://coverartarchive.org/release/3d354599-d9d4-44a8-9584-37e3b0238871/15350933722-500.jpg"},"approved":true,"comment":"","id":15350933722,"back":false},{"types":["Booklet"],"front":false,"thumbnails":{"large":"http://coverartarchive.org/release/3d354599-d9d4-44a8-9584-37e3b0238871/15350935318-500.jpg","small":"http://coverartarchive.org/release/3d354599-d9d4-44a8-9584-37e3b0238871/15350935318-250.jpg"},"approved":true,"id":15350935318,"comment":"","back":false,"image":"http://coverartarchive.org/release/3d354599-d9d4-44a8-9584-37e3b0238871/15350935318.jpg","edit":42119626},{"image":"http://coverartarchive.org/release/3d354599-d9d4-44a8-9584-37e3b0238871/15350936642.jpg","edit":42119627,"types":["Booklet"],"front":false,"approved":true,"thumbnails":{"large":"http://coverartarchive.org/release/3d354599-d9d4-44a8-9584-37e3b0238871/15350936642-500.jpg","small":"http://coverartarchive.org/release/3d354599-d9d4-44a8-9584-37e3b0238871/15350936642-250.jpg"},"id":15350936642,"comment":"","back":false},{"edit":42119628,"image":"http://coverartarchive.org/release/3d354599-d9d4-44a8-9584-37e3b0238871/15350937581.jpg","id":15350937581,"comment":"","back":false,"front":false,"types":["Booklet"],"thumbnails":{"large":"http://coverartarchive.org/release/3d354599-d9d4-44a8-9584-37e3b0238871/15350937581-500.jpg","small":"http://coverartarchive.org/release/3d354599-d9d4-44a8-9584-37e3b0238871/15350937581-250.jpg"},"approved":true},{"image":"http://coverartarchive.org/release/3d354599-d9d4-44a8-9584-37e3b0238871/15350938401.jpg","edit":42119634,"thumbnails":{"large":"http://coverartarchive.org/release/3d354599-d9d4-44a8-9584-37e3b0238871/15350938401-500.jpg","small":"http://coverartarchive.org/release/3d354599-d9d4-44a8-9584-37e3b0238871/15350938401-250.jpg"},"approved":true,"types":["Booklet"],"front":false,"back":false,"id":15350938401,"comment":""},{"edit":42119637,"image":"http://coverartarchive.org/release/3d354599-d9d4-44a8-9584-37e3b0238871/15350939426.jpg","back":false,"comment":"","id":15350939426,"approved":true,"thumbnails":{"large":"http://coverartarchive.org/release/3d354599-d9d4-44a8-9584-37e3b0238871/15350939426-500.jpg","small":"http://coverartarchive.org/release/3d354599-d9d4-44a8-9584-37e3b0238871/15350939426-250.jpg"},"front":false,"types":["Booklet"]},{"approved":true,"thumbnails":{"small":"http://coverartarchive.org/release/3d354599-d9d4-44a8-9584-37e3b0238871/15350940231-250.jpg","large":"http://coverartarchive.org/release/3d354599-d9d4-44a8-9584-37e3b0238871/15350940231-500.jpg"},"types":["Booklet"],"front":false,"back":false,"comment":"","id":15350940231,"edit":42119638,"image":"http://coverartarchive.org/release/3d354599-d9d4-44a8-9584-37e3b0238871/15350940231.jpg"},{"edit":42119639,"image":"http://coverartarchive.org/release/3d354599-d9d4-44a8-9584-37e3b0238871/15350940970.jpg","comment":"","id":15350940970,"back":false,"front":false,"types":["Booklet"],"approved":true,"thumbnails":{"large":"http://coverartarchive.org/release/3d354599-d9d4-44a8-9584-37e3b0238871/15350940970-500.jpg","small":"http://coverartarchive.org/release/3d354599-d9d4-44a8-9584-37e3b0238871/15350940970-250.jpg"}},{"edit":42119675,"image":"http://coverartarchive.org/release/3d354599-d9d4-44a8-9584-37e3b0238871/15350941477.jpg","back":false,"comment":"","id":15350941477,"approved":true,"thumbnails":{"small":"http://coverartarchive.org/release/3d354599-d9d4-44a8-9584-37e3b0238871/15350941477-250.jpg","large":"http://coverartarchive.org/release/3d354599-d9d4-44a8-9584-37e3b0238871/15350941477-500.jpg"},"front":false,"types":["Booklet"]},{"thumbnails":{"small":"http://coverartarchive.org/release/3d354599-d9d4-44a8-9584-37e3b0238871/15350942016-250.jpg","large":"http://coverartarchive.org/release/3d354599-d9d4-44a8-9584-37e3b0238871/15350942016-500.jpg"},"approved":true,"front":false,"types":["Booklet"],"back":false,"id":15350942016,"comment":"","image":"http://coverartarchive.org/release/3d354599-d9d4-44a8-9584-37e3b0238871/15350942016.jpg","edit":42119676},{"back":false,"comment":"","id":15350942799,"approved":true,"thumbnails":{"small":"http://coverartarchive.org/release/3d354599-d9d4-44a8-9584-37e3b0238871/15350942799-250.jpg","large":"http://coverartarchive.org/release/3d354599-d9d4-44a8-9584-37e3b0238871/15350942799-500.jpg"},"types":["Booklet"],"front":false,"image":"http://coverartarchive.org/release/3d354599-d9d4-44a8-9584-37e3b0238871/15350942799.jpg","edit":42119677},{"image":"http://coverartarchive.org/release/3d354599-d9d4-44a8-9584-37e3b0238871/15350943494.jpg","edit":42119679,"front":false,"types":["Booklet"],"thumbnails":{"small":"http://coverartarchive.org/release/3d354599-d9d4-44a8-9584-37e3b0238871/15350943494-250.jpg","large":"http://coverartarchive.org/release/3d354599-d9d4-44a8-9584-37e3b0238871/15350943494-500.jpg"},"approved":true,"id":15350943494,"comment":"","back":false},{"back":false,"comment":"","id":15350944158,"thumbnails":{"large":"http://coverartarchive.org/release/3d354599-d9d4-44a8-9584-37e3b0238871/15350944158-500.jpg","small":"http://coverartarchive.org/release/3d354599-d9d4-44a8-9584-37e3b0238871/15350944158-250.jpg"},"approved":true,"front":false,"types":["Booklet"],"edit":42119680,"image":"http://coverartarchive.org/release/3d354599-d9d4-44a8-9584-37e3b0238871/15350944158.jpg"},{"front":false,"types":["Booklet"],"thumbnails":{"small":"http://coverartarchive.org/release/3d354599-d9d4-44a8-9584-37e3b0238871/15350944853-250.jpg","large":"http://coverartarchive.org/release/3d354599-d9d4-44a8-9584-37e3b0238871/15350944853-500.jpg"},"approved":true,"id":15350944853,"comment":"","back":false,"edit":42119681,"image":"http://coverartarchive.org/release/3d354599-d9d4-44a8-9584-37e3b0238871/15350944853.jpg"},{"comment":"","id":15350945259,"back":false,"front":false,"types":["Booklet"],"approved":true,"thumbnails":{"large":"http://coverartarchive.org/release/3d354599-d9d4-44a8-9584-37e3b0238871/15350945259-500.jpg","small":"http://coverartarchive.org/release/3d354599-d9d4-44a8-9584-37e3b0238871/15350945259-250.jpg"},"edit":42119683,"image":"http://coverartarchive.org/release/3d354599-d9d4-44a8-9584-37e3b0238871/15350945259.jpg"},{"front":false,"types":["Booklet"],"approved":true,"thumbnails":{"small":"http://coverartarchive.org/release/3d354599-d9d4-44a8-9584-37e3b0238871/15350946269-250.jpg","large":"http://coverartarchive.org/release/3d354599-d9d4-44a8-9584-37e3b0238871/15350946269-500.jpg"},"id":15350946269,"comment":"","back":false,"edit":42119684,"image":"http://coverartarchive.org/release/3d354599-d9d4-44a8-9584-37e3b0238871/15350946269.jpg"},{"edit":42119686,"image":"http://coverartarchive.org/release/3d354599-d9d4-44a8-9584-37e3b0238871/15350946689.jpg","back":false,"comment":"","id":15350946689,"approved":true,"thumbnails":{"large":"http://coverartarchive.org/release/3d354599-d9d4-44a8-9584-37e3b0238871/15350946689-500.jpg","small":"http://coverartarchive.org/release/3d354599-d9d4-44a8-9584-37e3b0238871/15350946689-250.jpg"},"types":["Booklet"],"front":false},{"thumbnails":{"small":"http://coverartarchive.org/release/3d354599-d9d4-44a8-9584-37e3b0238871/15350947505-250.jpg","large":"http://coverartarchive.org/release/3d354599-d9d4-44a8-9584-37e3b0238871/15350947505-500.jpg"},"approved":true,"types":["Booklet"],"front":false,"back":false,"id":15350947505,"comment":"","edit":42119687,"image":"http://coverartarchive.org/release/3d354599-d9d4-44a8-9584-37e3b0238871/15350947505.jpg"},{"edit":42119688,"image":"http://coverartarchive.org/release/3d354599-d9d4-44a8-9584-37e3b0238871/15350948122.jpg","back":false,"comment":"","id":15350948122,"approved":true,"thumbnails":{"large":"http://coverartarchive.org/release/3d354599-d9d4-44a8-9584-37e3b0238871/15350948122-500.jpg","small":"http://coverartarchive.org/release/3d354599-d9d4-44a8-9584-37e3b0238871/15350948122-250.jpg"},"front":false,"types":["Booklet"]},{"approved":true,"thumbnails":{"large":"http://coverartarchive.org/release/3d354599-d9d4-44a8-9584-37e3b0238871/15350948750-500.jpg","small":"http://coverartarchive.org/release/3d354599-d9d4-44a8-9584-37e3b0238871/15350948750-250.jpg"},"front":false,"types":["Booklet"],"back":false,"comment":"","id":15350948750,"edit":42119694,"image":"http://coverartarchive.org/release/3d354599-d9d4-44a8-9584-37e3b0238871/15350948750.jpg"},{"image":"http://coverartarchive.org/release/3d354599-d9d4-44a8-9584-37e3b0238871/15350949469.jpg","edit":42119697,"comment":"","id":15350949469,"back":false,"front":false,"types":["Booklet"],"approved":true,"thumbnails":{"small":"http://coverartarchive.org/release/3d354599-d9d4-44a8-9584-37e3b0238871/15350949469-250.jpg","large":"http://coverartarchive.org/release/3d354599-d9d4-44a8-9584-37e3b0238871/15350949469-500.jpg"}},{"image":"http://coverartarchive.org/release/3d354599-d9d4-44a8-9584-37e3b0238871/15350949954.jpg","edit":42119698,"comment":"","id":15350949954,"back":true,"front":false,"types":["Back"],"thumbnails":{"small":"http://coverartarchive.org/release/3d354599-d9d4-44a8-9584-37e3b0238871/15350949954-250.jpg","large":"http://coverartarchive.org/release/3d354599-d9d4-44a8-9584-37e3b0238871/15350949954-500.jpg"},"approved":true},{"edit":42119699,"image":"http://coverartarchive.org/release/3d354599-d9d4-44a8-9584-37e3b0238871/15350950787.jpg","thumbnails":{"large":"http://coverartarchive.org/release/3d354599-d9d4-44a8-9584-37e3b0238871/15350950787-500.jpg","small":"http://coverartarchive.org/release/3d354599-d9d4-44a8-9584-37e3b0238871/15350950787-250.jpg"},"approved":true,"types":["Medium"],"front":false,"back":false,"comment":"","id":15350950787},{"edit":42119700,"image":"http://coverartarchive.org/release/3d354599-d9d4-44a8-9584-37e3b0238871/15350951427.jpg","thumbnails":{"large":"http://coverartarchive.org/release/3d354599-d9d4-44a8-9584-37e3b0238871/15350951427-500.jpg","small":"http://coverartarchive.org/release/3d354599-d9d4-44a8-9584-37e3b0238871/15350951427-250.jpg"},"approved":true,"front":false,"types":["Medium"],"back":false,"comment":"","id":15350951427},{"thumbnails":{"small":"http://coverartarchive.org/release/3d354599-d9d4-44a8-9584-37e3b0238871/15350952397-250.jpg","large":"http://coverartarchive.org/release/3d354599-d9d4-44a8-9584-37e3b0238871/15350952397-500.jpg"},"approved":true,"front":false,"types":["Obi"],"back":false,"id":15350952397,"comment":"","edit":42119701,"image":"http://coverartarchive.org/release/3d354599-d9d4-44a8-9584-37e3b0238871/15350952397.jpg"}]} \ No newline at end of file diff --git a/test/fixtures/99a9d97c03b0197b42c4fc8e06319a87.headers b/test/fixtures/99a9d97c03b0197b42c4fc8e06319a87.headers new file mode 100644 index 0000000..477efda --- /dev/null +++ b/test/fixtures/99a9d97c03b0197b42c4fc8e06319a87.headers @@ -0,0 +1,27 @@ +{ + "statusCode": 200, + "headers": { + "server": "nginx/1.4.6 (Ubuntu)", + "date": "Tue, 20 Dec 2016 01:39:56 GMT", + "content-type": "application/json", + "content-length": "10780", + "last-modified": "Tue, 13 Dec 2016 16:15:32 GMT", + "connection": "keep-alive", + "etag": "\"58501ea4-2a1c\"", + "expires": "Tue, 20 Dec 2016 07:39:56 GMT", + "cache-control": "max-age=21600", + "accept-ranges": "bytes" + }, + "url": "http://ia801204.us.archive.org:80/9/items/mbid-3d354599-d9d4-44a8-9584-37e3b0238871/index.json", + "time": 245, + "request": { + "method": "GET", + "headers": { + "User-Agent": "graphbrainz/4.5.0 ( https://github.com/exogen/graphbrainz )", + "accept-encoding": "gzip, deflate", + "accept": "application/json", + "referer": "http://archive.org/download/mbid-3d354599-d9d4-44a8-9584-37e3b0238871/index.json", + "host": "ia801204.us.archive.org" + } + } +} \ No newline at end of file diff --git a/test/fixtures/9e5831c56e1500e6c238583fc2a75fa7 b/test/fixtures/9e5831c56e1500e6c238583fc2a75fa7 new file mode 100644 index 0000000..6060d44 --- /dev/null +++ b/test/fixtures/9e5831c56e1500e6c238583fc2a75fa7 @@ -0,0 +1 @@ +{"images":[{"image":"http://coverartarchive.org/release/3ee3723e-ed1e-4baa-a718-7f1d9ecb3bec/14194257311.jpg","front":true,"id":"14194257311","comment":"","types":["Front"],"thumbnails":{"small":"http://coverartarchive.org/release/3ee3723e-ed1e-4baa-a718-7f1d9ecb3bec/14194257311-250.jpg","large":"http://coverartarchive.org/release/3ee3723e-ed1e-4baa-a718-7f1d9ecb3bec/14194257311-500.jpg"},"back":false,"approved":true,"edit":39932731}],"release":"https://musicbrainz.org/release/3ee3723e-ed1e-4baa-a718-7f1d9ecb3bec"} \ No newline at end of file diff --git a/test/fixtures/9e5831c56e1500e6c238583fc2a75fa7.headers b/test/fixtures/9e5831c56e1500e6c238583fc2a75fa7.headers new file mode 100644 index 0000000..1284a53 --- /dev/null +++ b/test/fixtures/9e5831c56e1500e6c238583fc2a75fa7.headers @@ -0,0 +1,27 @@ +{ + "statusCode": 200, + "headers": { + "server": "nginx/1.4.6 (Ubuntu)", + "date": "Tue, 20 Dec 2016 01:39:57 GMT", + "content-type": "application/json", + "content-length": "520", + "last-modified": "Mon, 01 Aug 2016 19:02:55 GMT", + "connection": "keep-alive", + "etag": "\"579f9cdf-208\"", + "expires": "Tue, 20 Dec 2016 07:39:57 GMT", + "cache-control": "max-age=21600", + "accept-ranges": "bytes" + }, + "url": "http://ia601204.us.archive.org:80/4/items/mbid-3ee3723e-ed1e-4baa-a718-7f1d9ecb3bec/index.json", + "time": 118, + "request": { + "method": "GET", + "headers": { + "User-Agent": "graphbrainz/4.5.0 ( https://github.com/exogen/graphbrainz )", + "accept-encoding": "gzip, deflate", + "accept": "application/json", + "referer": "http://archive.org/download/mbid-3ee3723e-ed1e-4baa-a718-7f1d9ecb3bec/index.json", + "host": "ia601204.us.archive.org" + } + } +} \ No newline at end of file diff --git a/test/fixtures/a04597ae29bb987a5c36b1747baa25fa b/test/fixtures/a04597ae29bb987a5c36b1747baa25fa new file mode 100644 index 0000000..563ebed --- /dev/null +++ b/test/fixtures/a04597ae29bb987a5c36b1747baa25fa @@ -0,0 +1 @@ +See: http://archive.org/download/mbid-90a00dba-addb-4fdc-af2c-6fbb5d733c39/index.json diff --git a/test/fixtures/a04597ae29bb987a5c36b1747baa25fa.headers b/test/fixtures/a04597ae29bb987a5c36b1747baa25fa.headers new file mode 100644 index 0000000..9a94f06 --- /dev/null +++ b/test/fixtures/a04597ae29bb987a5c36b1747baa25fa.headers @@ -0,0 +1,24 @@ +{ + "statusCode": 307, + "headers": { + "date": "Tue, 20 Dec 2016 01:39:56 GMT", + "content-type": "text/plain; charset=utf-8", + "content-length": "86", + "connection": "keep-alive", + "keep-alive": "timeout=15", + "location": "http://archive.org/download/mbid-90a00dba-addb-4fdc-af2c-6fbb5d733c39/index.json", + "access-control-allow-origin": "*", + "server": "4b4c084fb141" + }, + "url": "http://coverartarchive.org:80/release/90a00dba-addb-4fdc-af2c-6fbb5d733c39", + "time": 506, + "request": { + "method": "GET", + "headers": { + "User-Agent": "graphbrainz/4.5.0 ( https://github.com/exogen/graphbrainz )", + "host": "coverartarchive.org", + "accept-encoding": "gzip, deflate", + "accept": "application/json" + } + } +} \ No newline at end of file diff --git a/test/fixtures/a155d67a2d4b0ada2467e9cecd69577f b/test/fixtures/a155d67a2d4b0ada2467e9cecd69577f new file mode 100644 index 0000000..e69de29 diff --git a/test/fixtures/a155d67a2d4b0ada2467e9cecd69577f.headers b/test/fixtures/a155d67a2d4b0ada2467e9cecd69577f.headers new file mode 100644 index 0000000..1cd5961 --- /dev/null +++ b/test/fixtures/a155d67a2d4b0ada2467e9cecd69577f.headers @@ -0,0 +1,25 @@ +{ + "statusCode": 302, + "headers": { + "server": "nginx/1.4.6 (Ubuntu)", + "date": "Tue, 20 Dec 2016 01:39:56 GMT", + "content-type": "text/html; charset=UTF-8", + "transfer-encoding": "chunked", + "connection": "keep-alive", + "x-powered-by": "PHP/5.5.9-1ubuntu4.20", + "accept-ranges": "bytes", + "location": "http://ia801906.us.archive.org/20/items/mbid-10ed5ae4-2bb8-48ac-89ac-a5ea58667f44/index.json" + }, + "url": "http://archive.org:80/download/mbid-10ed5ae4-2bb8-48ac-89ac-a5ea58667f44/index.json", + "time": 203, + "request": { + "method": "GET", + "headers": { + "User-Agent": "graphbrainz/4.5.0 ( https://github.com/exogen/graphbrainz )", + "accept-encoding": "gzip, deflate", + "accept": "application/json", + "referer": "http://coverartarchive.org/release/10ed5ae4-2bb8-48ac-89ac-a5ea58667f44", + "host": "archive.org" + } + } +} \ No newline at end of file diff --git a/test/fixtures/a1edb81b97ca0875be3c3fc1fb58f10b b/test/fixtures/a1edb81b97ca0875be3c3fc1fb58f10b new file mode 100644 index 0000000..76e5aca --- /dev/null +++ b/test/fixtures/a1edb81b97ca0875be3c3fc1fb58f10b @@ -0,0 +1 @@ +{"images":[{"types":["Front"],"front":true,"back":false,"edit":32579873,"image":"http://coverartarchive.org/release/fb98043c-7ac8-4505-ba87-28576836a8d5/10114413997.jpg","comment":"","approved":true,"id":"10114413997","thumbnails":{"large":"http://coverartarchive.org/release/fb98043c-7ac8-4505-ba87-28576836a8d5/10114413997-500.jpg","small":"http://coverartarchive.org/release/fb98043c-7ac8-4505-ba87-28576836a8d5/10114413997-250.jpg"}},{"types":["Back"],"front":false,"back":true,"edit":32579874,"image":"http://coverartarchive.org/release/fb98043c-7ac8-4505-ba87-28576836a8d5/10114415607.jpg","comment":"","approved":true,"id":"10114415607","thumbnails":{"large":"http://coverartarchive.org/release/fb98043c-7ac8-4505-ba87-28576836a8d5/10114415607-500.jpg","small":"http://coverartarchive.org/release/fb98043c-7ac8-4505-ba87-28576836a8d5/10114415607-250.jpg"}},{"types":["Booklet"],"front":false,"back":false,"edit":32579979,"image":"http://coverartarchive.org/release/fb98043c-7ac8-4505-ba87-28576836a8d5/10114416564.jpg","comment":"","approved":true,"id":"10114416564","thumbnails":{"large":"http://coverartarchive.org/release/fb98043c-7ac8-4505-ba87-28576836a8d5/10114416564-500.jpg","small":"http://coverartarchive.org/release/fb98043c-7ac8-4505-ba87-28576836a8d5/10114416564-250.jpg"}},{"types":["Booklet"],"front":false,"back":false,"edit":32580070,"image":"http://coverartarchive.org/release/fb98043c-7ac8-4505-ba87-28576836a8d5/10114417494.jpg","comment":"","approved":true,"id":"10114417494","thumbnails":{"large":"http://coverartarchive.org/release/fb98043c-7ac8-4505-ba87-28576836a8d5/10114417494-500.jpg","small":"http://coverartarchive.org/release/fb98043c-7ac8-4505-ba87-28576836a8d5/10114417494-250.jpg"}},{"types":["Booklet"],"front":false,"back":false,"edit":32580071,"image":"http://coverartarchive.org/release/fb98043c-7ac8-4505-ba87-28576836a8d5/10114418302.jpg","comment":"","approved":true,"id":"10114418302","thumbnails":{"large":"http://coverartarchive.org/release/fb98043c-7ac8-4505-ba87-28576836a8d5/10114418302-500.jpg","small":"http://coverartarchive.org/release/fb98043c-7ac8-4505-ba87-28576836a8d5/10114418302-250.jpg"}},{"types":["Booklet"],"front":false,"back":false,"edit":32580072,"image":"http://coverartarchive.org/release/fb98043c-7ac8-4505-ba87-28576836a8d5/10114419149.jpg","comment":"","approved":true,"id":"10114419149","thumbnails":{"large":"http://coverartarchive.org/release/fb98043c-7ac8-4505-ba87-28576836a8d5/10114419149-500.jpg","small":"http://coverartarchive.org/release/fb98043c-7ac8-4505-ba87-28576836a8d5/10114419149-250.jpg"}},{"types":["Booklet"],"front":false,"back":false,"edit":32580074,"image":"http://coverartarchive.org/release/fb98043c-7ac8-4505-ba87-28576836a8d5/10114419917.jpg","comment":"","approved":true,"id":"10114419917","thumbnails":{"large":"http://coverartarchive.org/release/fb98043c-7ac8-4505-ba87-28576836a8d5/10114419917-500.jpg","small":"http://coverartarchive.org/release/fb98043c-7ac8-4505-ba87-28576836a8d5/10114419917-250.jpg"}},{"types":["Booklet"],"front":false,"back":false,"edit":32580076,"image":"http://coverartarchive.org/release/fb98043c-7ac8-4505-ba87-28576836a8d5/10114420921.jpg","comment":"","approved":true,"id":"10114420921","thumbnails":{"large":"http://coverartarchive.org/release/fb98043c-7ac8-4505-ba87-28576836a8d5/10114420921-500.jpg","small":"http://coverartarchive.org/release/fb98043c-7ac8-4505-ba87-28576836a8d5/10114420921-250.jpg"}},{"types":["Booklet"],"front":false,"back":false,"edit":32580079,"image":"http://coverartarchive.org/release/fb98043c-7ac8-4505-ba87-28576836a8d5/10114421736.jpg","comment":"","approved":true,"id":"10114421736","thumbnails":{"large":"http://coverartarchive.org/release/fb98043c-7ac8-4505-ba87-28576836a8d5/10114421736-500.jpg","small":"http://coverartarchive.org/release/fb98043c-7ac8-4505-ba87-28576836a8d5/10114421736-250.jpg"}},{"types":["Booklet"],"front":false,"back":false,"edit":32580080,"image":"http://coverartarchive.org/release/fb98043c-7ac8-4505-ba87-28576836a8d5/10114422457.jpg","comment":"","approved":true,"id":"10114422457","thumbnails":{"large":"http://coverartarchive.org/release/fb98043c-7ac8-4505-ba87-28576836a8d5/10114422457-500.jpg","small":"http://coverartarchive.org/release/fb98043c-7ac8-4505-ba87-28576836a8d5/10114422457-250.jpg"}},{"types":["Other"],"front":false,"back":false,"edit":32580520,"image":"http://coverartarchive.org/release/fb98043c-7ac8-4505-ba87-28576836a8d5/10114748249.jpg","comment":"","approved":true,"id":"10114748249","thumbnails":{"large":"http://coverartarchive.org/release/fb98043c-7ac8-4505-ba87-28576836a8d5/10114748249-500.jpg","small":"http://coverartarchive.org/release/fb98043c-7ac8-4505-ba87-28576836a8d5/10114748249-250.jpg"}},{"types":["Other"],"front":false,"back":false,"edit":32580081,"image":"http://coverartarchive.org/release/fb98043c-7ac8-4505-ba87-28576836a8d5/10114423433.jpg","comment":"","approved":true,"id":"10114423433","thumbnails":{"large":"http://coverartarchive.org/release/fb98043c-7ac8-4505-ba87-28576836a8d5/10114423433-500.jpg","small":"http://coverartarchive.org/release/fb98043c-7ac8-4505-ba87-28576836a8d5/10114423433-250.jpg"}},{"types":["Medium"],"front":false,"back":false,"edit":32580082,"image":"http://coverartarchive.org/release/fb98043c-7ac8-4505-ba87-28576836a8d5/10114424249.jpg","comment":"","approved":true,"id":"10114424249","thumbnails":{"large":"http://coverartarchive.org/release/fb98043c-7ac8-4505-ba87-28576836a8d5/10114424249-500.jpg","small":"http://coverartarchive.org/release/fb98043c-7ac8-4505-ba87-28576836a8d5/10114424249-250.jpg"}},{"types":["Medium"],"front":false,"back":false,"edit":32580084,"image":"http://coverartarchive.org/release/fb98043c-7ac8-4505-ba87-28576836a8d5/10114425067.jpg","comment":"","approved":true,"id":"10114425067","thumbnails":{"large":"http://coverartarchive.org/release/fb98043c-7ac8-4505-ba87-28576836a8d5/10114425067-500.jpg","small":"http://coverartarchive.org/release/fb98043c-7ac8-4505-ba87-28576836a8d5/10114425067-250.jpg"}},{"types":["Obi"],"front":false,"back":false,"edit":32580085,"image":"http://coverartarchive.org/release/fb98043c-7ac8-4505-ba87-28576836a8d5/10114425878.jpg","comment":"","approved":true,"id":"10114425878","thumbnails":{"large":"http://coverartarchive.org/release/fb98043c-7ac8-4505-ba87-28576836a8d5/10114425878-500.jpg","small":"http://coverartarchive.org/release/fb98043c-7ac8-4505-ba87-28576836a8d5/10114425878-250.jpg"}},{"types":["Obi"],"front":false,"back":false,"edit":32580088,"image":"http://coverartarchive.org/release/fb98043c-7ac8-4505-ba87-28576836a8d5/10114426775.jpg","comment":"","approved":true,"id":"10114426775","thumbnails":{"large":"http://coverartarchive.org/release/fb98043c-7ac8-4505-ba87-28576836a8d5/10114426775-500.jpg","small":"http://coverartarchive.org/release/fb98043c-7ac8-4505-ba87-28576836a8d5/10114426775-250.jpg"}}],"release":"http://musicbrainz.org/release/fb98043c-7ac8-4505-ba87-28576836a8d5"} \ No newline at end of file diff --git a/test/fixtures/a1edb81b97ca0875be3c3fc1fb58f10b.headers b/test/fixtures/a1edb81b97ca0875be3c3fc1fb58f10b.headers new file mode 100644 index 0000000..dbe71de --- /dev/null +++ b/test/fixtures/a1edb81b97ca0875be3c3fc1fb58f10b.headers @@ -0,0 +1,27 @@ +{ + "statusCode": 200, + "headers": { + "server": "nginx/1.4.6 (Ubuntu)", + "date": "Tue, 20 Dec 2016 01:39:57 GMT", + "content-type": "application/json", + "content-length": "6951", + "last-modified": "Fri, 17 Apr 2015 15:09:44 GMT", + "connection": "keep-alive", + "etag": "\"55312238-1b27\"", + "expires": "Tue, 20 Dec 2016 07:39:57 GMT", + "cache-control": "max-age=21600", + "accept-ranges": "bytes" + }, + "url": "http://ia600509.us.archive.org:80/33/items/mbid-fb98043c-7ac8-4505-ba87-28576836a8d5/index.json", + "time": 109, + "request": { + "method": "GET", + "headers": { + "User-Agent": "graphbrainz/4.5.0 ( https://github.com/exogen/graphbrainz )", + "accept-encoding": "gzip, deflate", + "accept": "application/json", + "referer": "http://archive.org/download/mbid-fb98043c-7ac8-4505-ba87-28576836a8d5/index.json", + "host": "ia600509.us.archive.org" + } + } +} \ No newline at end of file diff --git a/test/fixtures/a2e9ac8cccc68070158e14f749720049 b/test/fixtures/a2e9ac8cccc68070158e14f749720049 new file mode 100644 index 0000000..063635e --- /dev/null +++ b/test/fixtures/a2e9ac8cccc68070158e14f749720049 @@ -0,0 +1 @@ +See: http://archive.org/download/mbid-d5cdb7fd-c7e9-460a-9549-8a369655cc52/index.json diff --git a/test/fixtures/a2e9ac8cccc68070158e14f749720049.headers b/test/fixtures/a2e9ac8cccc68070158e14f749720049.headers new file mode 100644 index 0000000..d0940f3 --- /dev/null +++ b/test/fixtures/a2e9ac8cccc68070158e14f749720049.headers @@ -0,0 +1,24 @@ +{ + "statusCode": 307, + "headers": { + "date": "Tue, 20 Dec 2016 01:39:55 GMT", + "content-type": "text/plain; charset=utf-8", + "content-length": "86", + "connection": "keep-alive", + "keep-alive": "timeout=15", + "location": "http://archive.org/download/mbid-d5cdb7fd-c7e9-460a-9549-8a369655cc52/index.json", + "access-control-allow-origin": "*", + "server": "4b4c084fb141" + }, + "url": "http://coverartarchive.org:80/release/d5cdb7fd-c7e9-460a-9549-8a369655cc52", + "time": 414, + "request": { + "method": "GET", + "headers": { + "User-Agent": "graphbrainz/4.5.0 ( https://github.com/exogen/graphbrainz )", + "host": "coverartarchive.org", + "accept-encoding": "gzip, deflate", + "accept": "application/json" + } + } +} \ No newline at end of file diff --git a/test/fixtures/a437ae1263f54894b27977b291026a21 b/test/fixtures/a437ae1263f54894b27977b291026a21 new file mode 100644 index 0000000..c1557d5 --- /dev/null +++ b/test/fixtures/a437ae1263f54894b27977b291026a21 @@ -0,0 +1,4 @@ + +No cover art found for release 11b461f0-035f-4726-90e8-da897c9ffc58
diff --git a/test/fixtures/a437ae1263f54894b27977b291026a21.headers b/test/fixtures/a437ae1263f54894b27977b291026a21.headers new file mode 100644 index 0000000..85591e0 --- /dev/null +++ b/test/fixtures/a437ae1263f54894b27977b291026a21.headers @@ -0,0 +1,22 @@ +{ + "statusCode": 404, + "headers": { + "date": "Tue, 20 Dec 2016 01:39:55 GMT", + "content-type": "text/html", + "content-length": "179", + "connection": "keep-alive", + "keep-alive": "timeout=15", + "server": "d8b8a8eb2a2a" + }, + "url": "http://coverartarchive.org:80/release/11b461f0-035f-4726-90e8-da897c9ffc58", + "time": 416, + "request": { + "method": "GET", + "headers": { + "User-Agent": "graphbrainz/4.5.0 ( https://github.com/exogen/graphbrainz )", + "host": "coverartarchive.org", + "accept-encoding": "gzip, deflate", + "accept": "application/json" + } + } +} \ No newline at end of file diff --git a/test/fixtures/a4ee3084562f882fa11139d16733d21a b/test/fixtures/a4ee3084562f882fa11139d16733d21a new file mode 100644 index 0000000..b1b909d Binary files /dev/null and b/test/fixtures/a4ee3084562f882fa11139d16733d21a differ diff --git a/test/fixtures/a4ee3084562f882fa11139d16733d21a.headers b/test/fixtures/a4ee3084562f882fa11139d16733d21a.headers new file mode 100644 index 0000000..0a6cfe0 --- /dev/null +++ b/test/fixtures/a4ee3084562f882fa11139d16733d21a.headers @@ -0,0 +1,29 @@ +{ + "statusCode": 200, + "headers": { + "date": "Tue, 20 Dec 2016 01:40:16 GMT", + "content-type": "application/json; charset=utf-8", + "transfer-encoding": "chunked", + "connection": "keep-alive", + "keep-alive": "timeout=15", + "vary": "Accept-Encoding", + "x-ratelimit-limit": "700", + "x-ratelimit-remaining": "220", + "x-ratelimit-reset": "1482198016", + "server": "Plack::Handler::Starlet", + "etag": "W/\"e9aaff074e37acd6c521f674dfbf1d5c\"", + "access-control-allow-origin": "*", + "content-encoding": "gzip" + }, + "url": "http://musicbrainz.org:80/ws/2/release/7aa99236-67d1-4996-b5ec-f6a517653fbe?fmt=json", + "time": 429, + "request": { + "method": "GET", + "headers": { + "User-Agent": "graphbrainz/4.5.0 ( 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/fixtures/a7ebf644eeda889d47b3eeb3808e1612 b/test/fixtures/a7ebf644eeda889d47b3eeb3808e1612 new file mode 100644 index 0000000..f4e6078 Binary files /dev/null and b/test/fixtures/a7ebf644eeda889d47b3eeb3808e1612 differ diff --git a/test/fixtures/a7ebf644eeda889d47b3eeb3808e1612.headers b/test/fixtures/a7ebf644eeda889d47b3eeb3808e1612.headers new file mode 100644 index 0000000..9d9b066 --- /dev/null +++ b/test/fixtures/a7ebf644eeda889d47b3eeb3808e1612.headers @@ -0,0 +1,29 @@ +{ + "statusCode": 200, + "headers": { + "date": "Tue, 20 Dec 2016 01:39:54 GMT", + "content-type": "application/json; charset=utf-8", + "transfer-encoding": "chunked", + "connection": "keep-alive", + "keep-alive": "timeout=15", + "vary": "Accept-Encoding", + "x-ratelimit-limit": "700", + "x-ratelimit-remaining": "665", + "x-ratelimit-reset": "1482197996", + "server": "Plack::Handler::Starlet", + "etag": "W/\"e26f9afa519d55da80dff75fe8cfe5f7\"", + "access-control-allow-origin": "*", + "content-encoding": "gzip" + }, + "url": "http://musicbrainz.org:80/ws/2/release/25fbfbb4-b1ee-4448-aadf-ae3bc2e2dd27?fmt=json", + "time": 402, + "request": { + "method": "GET", + "headers": { + "User-Agent": "graphbrainz/4.5.0 ( 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/fixtures/ab47a9969477aef4978774f295da4fef b/test/fixtures/ab47a9969477aef4978774f295da4fef new file mode 100644 index 0000000..dbc192a --- /dev/null +++ b/test/fixtures/ab47a9969477aef4978774f295da4fef @@ -0,0 +1,4 @@ + +No cover art found for release 0832e770-e7e5-464c-9288-9c407a770842
diff --git a/test/fixtures/ab47a9969477aef4978774f295da4fef.headers b/test/fixtures/ab47a9969477aef4978774f295da4fef.headers new file mode 100644 index 0000000..559623d --- /dev/null +++ b/test/fixtures/ab47a9969477aef4978774f295da4fef.headers @@ -0,0 +1,22 @@ +{ + "statusCode": 404, + "headers": { + "date": "Tue, 20 Dec 2016 01:39:55 GMT", + "content-type": "text/html", + "content-length": "179", + "connection": "keep-alive", + "keep-alive": "timeout=15", + "server": "d8b8a8eb2a2a" + }, + "url": "http://coverartarchive.org:80/release/0832e770-e7e5-464c-9288-9c407a770842", + "time": 432, + "request": { + "method": "GET", + "headers": { + "User-Agent": "graphbrainz/4.5.0 ( https://github.com/exogen/graphbrainz )", + "host": "coverartarchive.org", + "accept-encoding": "gzip, deflate", + "accept": "application/json" + } + } +} \ No newline at end of file diff --git a/test/fixtures/abe14f4c4c73d24b0c1f73d484061520 b/test/fixtures/abe14f4c4c73d24b0c1f73d484061520 new file mode 100644 index 0000000..e69de29 diff --git a/test/fixtures/abe14f4c4c73d24b0c1f73d484061520.headers b/test/fixtures/abe14f4c4c73d24b0c1f73d484061520.headers new file mode 100644 index 0000000..12e783a --- /dev/null +++ b/test/fixtures/abe14f4c4c73d24b0c1f73d484061520.headers @@ -0,0 +1,25 @@ +{ + "statusCode": 302, + "headers": { + "server": "nginx/1.4.6 (Ubuntu)", + "date": "Tue, 20 Dec 2016 01:39:58 GMT", + "content-type": "text/html; charset=UTF-8", + "transfer-encoding": "chunked", + "connection": "keep-alive", + "x-powered-by": "PHP/5.5.9-1ubuntu4.20", + "accept-ranges": "bytes", + "location": "http://ia800503.us.archive.org/13/items/mbid-7aa99236-67d1-4996-b5ec-f6a517653fbe/index.json" + }, + "url": "http://archive.org:80/download/mbid-7aa99236-67d1-4996-b5ec-f6a517653fbe/index.json", + "time": 207, + "request": { + "method": "GET", + "headers": { + "User-Agent": "graphbrainz/4.5.0 ( https://github.com/exogen/graphbrainz )", + "accept-encoding": "gzip, deflate", + "accept": "application/json", + "referer": "http://coverartarchive.org/release/7aa99236-67d1-4996-b5ec-f6a517653fbe", + "host": "archive.org" + } + } +} \ No newline at end of file diff --git a/test/fixtures/ac7cdd14be6040b363313fe24fde27cc b/test/fixtures/ac7cdd14be6040b363313fe24fde27cc new file mode 100644 index 0000000..a69881b Binary files /dev/null and b/test/fixtures/ac7cdd14be6040b363313fe24fde27cc differ diff --git a/test/fixtures/ac7cdd14be6040b363313fe24fde27cc.headers b/test/fixtures/ac7cdd14be6040b363313fe24fde27cc.headers new file mode 100644 index 0000000..108b19d --- /dev/null +++ b/test/fixtures/ac7cdd14be6040b363313fe24fde27cc.headers @@ -0,0 +1,29 @@ +{ + "statusCode": 200, + "headers": { + "date": "Tue, 20 Dec 2016 01:40:11 GMT", + "content-type": "application/json; charset=utf-8", + "transfer-encoding": "chunked", + "connection": "keep-alive", + "keep-alive": "timeout=15", + "vary": "Accept-Encoding", + "x-ratelimit-limit": "700", + "x-ratelimit-remaining": "576", + "x-ratelimit-reset": "1482198012", + "server": "Plack::Handler::Starlet", + "etag": "W/\"4256762186114fb28b6bea3459d842eb\"", + "access-control-allow-origin": "*", + "content-encoding": "gzip" + }, + "url": "http://musicbrainz.org:80/ws/2/release/fb98043c-7ac8-4505-ba87-28576836a8d5?fmt=json", + "time": 419, + "request": { + "method": "GET", + "headers": { + "User-Agent": "graphbrainz/4.5.0 ( 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/fixtures/acac35649a5fee09364a40ee95829e69 b/test/fixtures/acac35649a5fee09364a40ee95829e69 new file mode 100644 index 0000000..73610b1 --- /dev/null +++ b/test/fixtures/acac35649a5fee09364a40ee95829e69 @@ -0,0 +1,4 @@ + +No cover art found for release 0138608c-a850-4351-bb1e-4d551bb900b6
diff --git a/test/fixtures/acac35649a5fee09364a40ee95829e69.headers b/test/fixtures/acac35649a5fee09364a40ee95829e69.headers new file mode 100644 index 0000000..1a286dc --- /dev/null +++ b/test/fixtures/acac35649a5fee09364a40ee95829e69.headers @@ -0,0 +1,22 @@ +{ + "statusCode": 404, + "headers": { + "date": "Tue, 20 Dec 2016 01:39:55 GMT", + "content-type": "text/html", + "content-length": "179", + "connection": "keep-alive", + "keep-alive": "timeout=15", + "server": "d8b8a8eb2a2a" + }, + "url": "http://coverartarchive.org:80/release/0138608c-a850-4351-bb1e-4d551bb900b6", + "time": 428, + "request": { + "method": "GET", + "headers": { + "User-Agent": "graphbrainz/4.5.0 ( https://github.com/exogen/graphbrainz )", + "host": "coverartarchive.org", + "accept-encoding": "gzip, deflate", + "accept": "application/json" + } + } +} \ No newline at end of file diff --git a/test/fixtures/acf19bc8716eec134a0b6421390ef7f8 b/test/fixtures/acf19bc8716eec134a0b6421390ef7f8 new file mode 100644 index 0000000..e7cc4ca Binary files /dev/null and b/test/fixtures/acf19bc8716eec134a0b6421390ef7f8 differ diff --git a/test/fixtures/acf19bc8716eec134a0b6421390ef7f8.headers b/test/fixtures/acf19bc8716eec134a0b6421390ef7f8.headers new file mode 100644 index 0000000..61925e6 --- /dev/null +++ b/test/fixtures/acf19bc8716eec134a0b6421390ef7f8.headers @@ -0,0 +1,29 @@ +{ + "statusCode": 200, + "headers": { + "date": "Tue, 20 Dec 2016 01:40:00 GMT", + "content-type": "application/json; charset=utf-8", + "transfer-encoding": "chunked", + "connection": "keep-alive", + "keep-alive": "timeout=15", + "vary": "Accept-Encoding", + "x-ratelimit-limit": "700", + "x-ratelimit-remaining": "291", + "x-ratelimit-reset": "1482198000", + "server": "Plack::Handler::Starlet", + "etag": "W/\"34c2b3fffb738a6ef98f2f0fd5ffa546\"", + "access-control-allow-origin": "*", + "content-encoding": "gzip" + }, + "url": "http://musicbrainz.org:80/ws/2/release/0138608c-a850-4351-bb1e-4d551bb900b6?fmt=json", + "time": 608, + "request": { + "method": "GET", + "headers": { + "User-Agent": "graphbrainz/4.5.0 ( 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/fixtures/aefcb623c80ff8bcf4ac278179801856 b/test/fixtures/aefcb623c80ff8bcf4ac278179801856 new file mode 100644 index 0000000..a0bb80a --- /dev/null +++ b/test/fixtures/aefcb623c80ff8bcf4ac278179801856 @@ -0,0 +1 @@ +{"images":[{"types":["Front"],"front":true,"back":false,"edit":18631582,"image":"http://coverartarchive.org/release/25fbfbb4-b1ee-4448-aadf-ae3bc2e2dd27/1675312275.jpg","comment":"","approved":true,"thumbnails":{"large":"http://coverartarchive.org/release/25fbfbb4-b1ee-4448-aadf-ae3bc2e2dd27/1675312275-500.jpg","small":"http://coverartarchive.org/release/25fbfbb4-b1ee-4448-aadf-ae3bc2e2dd27/1675312275-250.jpg"},"id":"1675312275"}],"release":"http://musicbrainz.org/release/25fbfbb4-b1ee-4448-aadf-ae3bc2e2dd27"} \ No newline at end of file diff --git a/test/fixtures/aefcb623c80ff8bcf4ac278179801856.headers b/test/fixtures/aefcb623c80ff8bcf4ac278179801856.headers new file mode 100644 index 0000000..7205442 --- /dev/null +++ b/test/fixtures/aefcb623c80ff8bcf4ac278179801856.headers @@ -0,0 +1,27 @@ +{ + "statusCode": 200, + "headers": { + "server": "nginx/1.4.6 (Ubuntu)", + "date": "Tue, 20 Dec 2016 01:39:54 GMT", + "content-type": "application/json", + "content-length": "515", + "last-modified": "Fri, 15 Feb 2013 14:02:18 GMT", + "connection": "keep-alive", + "etag": "\"511e3fea-203\"", + "expires": "Tue, 20 Dec 2016 07:39:54 GMT", + "cache-control": "max-age=21600", + "accept-ranges": "bytes" + }, + "url": "http://ia800808.us.archive.org:80/32/items/mbid-25fbfbb4-b1ee-4448-aadf-ae3bc2e2dd27/index.json", + "time": 136, + "request": { + "method": "GET", + "headers": { + "User-Agent": "graphbrainz/4.5.0 ( https://github.com/exogen/graphbrainz )", + "accept-encoding": "gzip, deflate", + "accept": "application/json", + "referer": "http://archive.org/download/mbid-25fbfbb4-b1ee-4448-aadf-ae3bc2e2dd27/index.json", + "host": "ia800808.us.archive.org" + } + } +} \ No newline at end of file diff --git a/test/fixtures/af9c8775c9c8864158f1c7b1b0fe5bda b/test/fixtures/af9c8775c9c8864158f1c7b1b0fe5bda new file mode 100644 index 0000000..6d2986f --- /dev/null +++ b/test/fixtures/af9c8775c9c8864158f1c7b1b0fe5bda @@ -0,0 +1 @@ +See: http://archive.org/download/mbid-3d354599-d9d4-44a8-9584-37e3b0238871/index.json diff --git a/test/fixtures/af9c8775c9c8864158f1c7b1b0fe5bda.headers b/test/fixtures/af9c8775c9c8864158f1c7b1b0fe5bda.headers new file mode 100644 index 0000000..416298f --- /dev/null +++ b/test/fixtures/af9c8775c9c8864158f1c7b1b0fe5bda.headers @@ -0,0 +1,24 @@ +{ + "statusCode": 307, + "headers": { + "date": "Tue, 20 Dec 2016 01:39:55 GMT", + "content-type": "text/plain; charset=utf-8", + "content-length": "86", + "connection": "keep-alive", + "keep-alive": "timeout=15", + "location": "http://archive.org/download/mbid-3d354599-d9d4-44a8-9584-37e3b0238871/index.json", + "access-control-allow-origin": "*", + "server": "4b4c084fb141" + }, + "url": "http://coverartarchive.org:80/release/3d354599-d9d4-44a8-9584-37e3b0238871", + "time": 427, + "request": { + "method": "GET", + "headers": { + "User-Agent": "graphbrainz/4.5.0 ( https://github.com/exogen/graphbrainz )", + "host": "coverartarchive.org", + "accept-encoding": "gzip, deflate", + "accept": "application/json" + } + } +} \ No newline at end of file diff --git a/test/fixtures/b126f5b19e3c828365bf2558f4c632d5 b/test/fixtures/b126f5b19e3c828365bf2558f4c632d5 new file mode 100644 index 0000000..5f89095 --- /dev/null +++ b/test/fixtures/b126f5b19e3c828365bf2558f4c632d5 @@ -0,0 +1,4 @@ + +No cover art found for release 7ff98ba2-d865-49eb-8bbd-23dc9d60f21c
diff --git a/test/fixtures/b126f5b19e3c828365bf2558f4c632d5.headers b/test/fixtures/b126f5b19e3c828365bf2558f4c632d5.headers new file mode 100644 index 0000000..bade8bf --- /dev/null +++ b/test/fixtures/b126f5b19e3c828365bf2558f4c632d5.headers @@ -0,0 +1,22 @@ +{ + "statusCode": 404, + "headers": { + "date": "Tue, 20 Dec 2016 01:39:57 GMT", + "content-type": "text/html", + "content-length": "179", + "connection": "keep-alive", + "keep-alive": "timeout=15", + "server": "d8b8a8eb2a2a" + }, + "url": "http://coverartarchive.org:80/release/7ff98ba2-d865-49eb-8bbd-23dc9d60f21c", + "time": 390, + "request": { + "method": "GET", + "headers": { + "User-Agent": "graphbrainz/4.5.0 ( https://github.com/exogen/graphbrainz )", + "host": "coverartarchive.org", + "accept-encoding": "gzip, deflate", + "accept": "application/json" + } + } +} \ No newline at end of file diff --git a/test/fixtures/b52874ed0f196446a4c665d43eb66a4e b/test/fixtures/b52874ed0f196446a4c665d43eb66a4e new file mode 100644 index 0000000..536bddf --- /dev/null +++ b/test/fixtures/b52874ed0f196446a4c665d43eb66a4e @@ -0,0 +1,4 @@ + +No cover art found for release f12244a0-a0a6-4522-a78a-33b5c75c8b1f
diff --git a/test/fixtures/b52874ed0f196446a4c665d43eb66a4e.headers b/test/fixtures/b52874ed0f196446a4c665d43eb66a4e.headers new file mode 100644 index 0000000..79beb55 --- /dev/null +++ b/test/fixtures/b52874ed0f196446a4c665d43eb66a4e.headers @@ -0,0 +1,22 @@ +{ + "statusCode": 404, + "headers": { + "date": "Tue, 20 Dec 2016 01:39:55 GMT", + "content-type": "text/html", + "content-length": "179", + "connection": "keep-alive", + "keep-alive": "timeout=15", + "server": "4b4c084fb141" + }, + "url": "http://coverartarchive.org:80/release/f12244a0-a0a6-4522-a78a-33b5c75c8b1f", + "time": 434, + "request": { + "method": "GET", + "headers": { + "User-Agent": "graphbrainz/4.5.0 ( https://github.com/exogen/graphbrainz )", + "host": "coverartarchive.org", + "accept-encoding": "gzip, deflate", + "accept": "application/json" + } + } +} \ No newline at end of file diff --git a/test/fixtures/b5ceda98812eb060f88237674aea6b39 b/test/fixtures/b5ceda98812eb060f88237674aea6b39 new file mode 100644 index 0000000..e69de29 diff --git a/test/fixtures/b5ceda98812eb060f88237674aea6b39.headers b/test/fixtures/b5ceda98812eb060f88237674aea6b39.headers new file mode 100644 index 0000000..2721232 --- /dev/null +++ b/test/fixtures/b5ceda98812eb060f88237674aea6b39.headers @@ -0,0 +1,24 @@ +{ + "statusCode": 307, + "headers": { + "date": "Tue, 20 Dec 2016 01:39:49 GMT", + "content-type": "text/plain; charset=utf-8", + "content-length": "132", + "connection": "keep-alive", + "keep-alive": "timeout=15", + "location": "http://archive.org/download/mbid-b84ee12a-09ef-421b-82de-0441a926375b/mbid-b84ee12a-09ef-421b-82de-0441a926375b-1611507818.jpg", + "access-control-allow-origin": "*", + "server": "d6446ea62189" + }, + "url": "http://coverartarchive.org:80/release/b84ee12a-09ef-421b-82de-0441a926375b/front", + "time": 386, + "request": { + "method": "HEAD", + "headers": { + "User-Agent": "graphbrainz/4.5.0 ( https://github.com/exogen/graphbrainz )", + "host": "coverartarchive.org", + "accept-encoding": "gzip, deflate", + "content-length": 0 + } + } +} \ No newline at end of file diff --git a/test/fixtures/bb2d63521b1bc4926702e93aca844990 b/test/fixtures/bb2d63521b1bc4926702e93aca844990 new file mode 100644 index 0000000..a581ca0 Binary files /dev/null and b/test/fixtures/bb2d63521b1bc4926702e93aca844990 differ diff --git a/test/fixtures/bb2d63521b1bc4926702e93aca844990.headers b/test/fixtures/bb2d63521b1bc4926702e93aca844990.headers new file mode 100644 index 0000000..aac33cb --- /dev/null +++ b/test/fixtures/bb2d63521b1bc4926702e93aca844990.headers @@ -0,0 +1,29 @@ +{ + "statusCode": 200, + "headers": { + "date": "Tue, 20 Dec 2016 01:40:00 GMT", + "content-type": "application/json; charset=utf-8", + "transfer-encoding": "chunked", + "connection": "keep-alive", + "keep-alive": "timeout=15", + "vary": "Accept-Encoding", + "x-ratelimit-limit": "700", + "x-ratelimit-remaining": "299", + "x-ratelimit-reset": "1482198000", + "server": "Plack::Handler::Starlet", + "etag": "W/\"249c8a9591359bb34c5d0f47bbb398f1\"", + "access-control-allow-origin": "*", + "content-encoding": "gzip" + }, + "url": "http://musicbrainz.org:80/ws/2/release/11b461f0-035f-4726-90e8-da897c9ffc58?fmt=json", + "time": 413, + "request": { + "method": "GET", + "headers": { + "User-Agent": "graphbrainz/4.5.0 ( 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/fixtures/c1c06c12681af538c710619bc6b120f6 b/test/fixtures/c1c06c12681af538c710619bc6b120f6 new file mode 100644 index 0000000..e69de29 diff --git a/test/fixtures/c1c06c12681af538c710619bc6b120f6.headers b/test/fixtures/c1c06c12681af538c710619bc6b120f6.headers new file mode 100644 index 0000000..30e370e --- /dev/null +++ b/test/fixtures/c1c06c12681af538c710619bc6b120f6.headers @@ -0,0 +1,24 @@ +{ + "statusCode": 307, + "headers": { + "date": "Tue, 20 Dec 2016 01:39:53 GMT", + "content-type": "text/plain; charset=utf-8", + "content-length": "141", + "connection": "keep-alive", + "keep-alive": "timeout=15", + "location": "http://archive.org/download/mbid-b84ee12a-09ef-421b-82de-0441a926375b/mbid-b84ee12a-09ef-421b-82de-0441a926375b-1611507818_thumb500.jpg", + "access-control-allow-origin": "*", + "server": "d8b8a8eb2a2a" + }, + "url": "http://coverartarchive.org:80/release/b84ee12a-09ef-421b-82de-0441a926375b/front-500", + "time": 379, + "request": { + "method": "HEAD", + "headers": { + "User-Agent": "graphbrainz/4.5.0 ( https://github.com/exogen/graphbrainz )", + "host": "coverartarchive.org", + "accept-encoding": "gzip, deflate", + "content-length": 0 + } + } +} \ No newline at end of file diff --git a/test/fixtures/c20a5c482aa7d04b9dda7babfe743188 b/test/fixtures/c20a5c482aa7d04b9dda7babfe743188 new file mode 100644 index 0000000..3b0d7f8 Binary files /dev/null and b/test/fixtures/c20a5c482aa7d04b9dda7babfe743188 differ diff --git a/test/fixtures/c20a5c482aa7d04b9dda7babfe743188.headers b/test/fixtures/c20a5c482aa7d04b9dda7babfe743188.headers new file mode 100644 index 0000000..46d1b52 --- /dev/null +++ b/test/fixtures/c20a5c482aa7d04b9dda7babfe743188.headers @@ -0,0 +1,29 @@ +{ + "statusCode": 200, + "headers": { + "date": "Tue, 20 Dec 2016 01:40:05 GMT", + "content-type": "application/json; charset=utf-8", + "transfer-encoding": "chunked", + "connection": "keep-alive", + "keep-alive": "timeout=15", + "vary": "Accept-Encoding", + "x-ratelimit-limit": "700", + "x-ratelimit-remaining": "420", + "x-ratelimit-reset": "1482198006", + "server": "Plack::Handler::Starlet", + "etag": "W/\"f24a4fd017cc04267e34fa29f8e51192\"", + "access-control-allow-origin": "*", + "content-encoding": "gzip" + }, + "url": "http://musicbrainz.org:80/ws/2/release/ee773571-6147-4bfd-8ea1-d666c4d4caef?fmt=json", + "time": 421, + "request": { + "method": "GET", + "headers": { + "User-Agent": "graphbrainz/4.5.0 ( 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/fixtures/caea1b69fe8f1d3a5e69b787336b9bc3 b/test/fixtures/caea1b69fe8f1d3a5e69b787336b9bc3 new file mode 100644 index 0000000..09236f6 --- /dev/null +++ b/test/fixtures/caea1b69fe8f1d3a5e69b787336b9bc3 @@ -0,0 +1 @@ +{"images":[{"types":["Front"],"front":true,"back":false,"edit":21452925,"image":"http://coverartarchive.org/release/32a863b3-a356-4873-8b74-c2039156cb68/3627541009.jpg","comment":"","approved":true,"thumbnails":{"large":"http://coverartarchive.org/release/32a863b3-a356-4873-8b74-c2039156cb68/3627541009-500.jpg","small":"http://coverartarchive.org/release/32a863b3-a356-4873-8b74-c2039156cb68/3627541009-250.jpg"},"id":"3627541009"},{"types":["Back","Spine"],"front":false,"back":true,"edit":21452926,"image":"http://coverartarchive.org/release/32a863b3-a356-4873-8b74-c2039156cb68/3627544011.jpg","comment":"","approved":true,"thumbnails":{"large":"http://coverartarchive.org/release/32a863b3-a356-4873-8b74-c2039156cb68/3627544011-500.jpg","small":"http://coverartarchive.org/release/32a863b3-a356-4873-8b74-c2039156cb68/3627544011-250.jpg"},"id":"3627544011"},{"types":["Medium"],"front":false,"back":false,"edit":21452927,"image":"http://coverartarchive.org/release/32a863b3-a356-4873-8b74-c2039156cb68/3627546344.jpg","comment":"","approved":true,"thumbnails":{"large":"http://coverartarchive.org/release/32a863b3-a356-4873-8b74-c2039156cb68/3627546344-500.jpg","small":"http://coverartarchive.org/release/32a863b3-a356-4873-8b74-c2039156cb68/3627546344-250.jpg"},"id":"3627546344"}],"release":"http://musicbrainz.org/release/32a863b3-a356-4873-8b74-c2039156cb68"} \ No newline at end of file diff --git a/test/fixtures/caea1b69fe8f1d3a5e69b787336b9bc3.headers b/test/fixtures/caea1b69fe8f1d3a5e69b787336b9bc3.headers new file mode 100644 index 0000000..6f30011 --- /dev/null +++ b/test/fixtures/caea1b69fe8f1d3a5e69b787336b9bc3.headers @@ -0,0 +1,27 @@ +{ + "statusCode": 200, + "headers": { + "server": "nginx/1.4.6 (Ubuntu)", + "date": "Tue, 20 Dec 2016 01:39:57 GMT", + "content-type": "application/json", + "content-length": "1370", + "last-modified": "Wed, 20 Mar 2013 18:33:30 GMT", + "connection": "keep-alive", + "etag": "\"514a00fa-55a\"", + "expires": "Tue, 20 Dec 2016 07:39:57 GMT", + "cache-control": "max-age=21600", + "accept-ranges": "bytes" + }, + "url": "http://ia601702.us.archive.org:80/1/items/mbid-32a863b3-a356-4873-8b74-c2039156cb68/index.json", + "time": 104, + "request": { + "method": "GET", + "headers": { + "User-Agent": "graphbrainz/4.5.0 ( https://github.com/exogen/graphbrainz )", + "accept-encoding": "gzip, deflate", + "accept": "application/json", + "referer": "http://archive.org/download/mbid-32a863b3-a356-4873-8b74-c2039156cb68/index.json", + "host": "ia601702.us.archive.org" + } + } +} \ No newline at end of file diff --git a/test/fixtures/cc371fbba7f2002beeba8b30e43289ba b/test/fixtures/cc371fbba7f2002beeba8b30e43289ba new file mode 100644 index 0000000..b556bc3d Binary files /dev/null and b/test/fixtures/cc371fbba7f2002beeba8b30e43289ba differ diff --git a/test/fixtures/cc371fbba7f2002beeba8b30e43289ba.headers b/test/fixtures/cc371fbba7f2002beeba8b30e43289ba.headers new file mode 100644 index 0000000..be50a7f --- /dev/null +++ b/test/fixtures/cc371fbba7f2002beeba8b30e43289ba.headers @@ -0,0 +1,29 @@ +{ + "statusCode": 200, + "headers": { + "date": "Tue, 20 Dec 2016 01:39:53 GMT", + "content-type": "application/json; charset=utf-8", + "transfer-encoding": "chunked", + "connection": "keep-alive", + "keep-alive": "timeout=15", + "vary": "Accept-Encoding", + "x-ratelimit-limit": "700", + "x-ratelimit-remaining": "417", + "x-ratelimit-reset": "1482197994", + "server": "Plack::Handler::Starlet", + "etag": "W/\"1ff297d8de273c62844b4f1d87f6d295\"", + "access-control-allow-origin": "*", + "content-encoding": "gzip" + }, + "url": "http://musicbrainz.org:80/ws/2/release-group/f5093c06-23e3-404f-aeaa-40f72885ee3a?fmt=json", + "time": 408, + "request": { + "method": "GET", + "headers": { + "User-Agent": "graphbrainz/4.5.0 ( 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/fixtures/d00537c2d4ee5e022ede99f8107c8f31 b/test/fixtures/d00537c2d4ee5e022ede99f8107c8f31 new file mode 100644 index 0000000..50a597b --- /dev/null +++ b/test/fixtures/d00537c2d4ee5e022ede99f8107c8f31 @@ -0,0 +1 @@ +See: http://archive.org/download/mbid-b84ee12a-09ef-421b-82de-0441a926375b/index.json diff --git a/test/fixtures/d00537c2d4ee5e022ede99f8107c8f31.headers b/test/fixtures/d00537c2d4ee5e022ede99f8107c8f31.headers new file mode 100644 index 0000000..aafa312 --- /dev/null +++ b/test/fixtures/d00537c2d4ee5e022ede99f8107c8f31.headers @@ -0,0 +1,24 @@ +{ + "statusCode": 307, + "headers": { + "date": "Tue, 20 Dec 2016 01:39:49 GMT", + "content-type": "text/plain; charset=utf-8", + "content-length": "86", + "connection": "keep-alive", + "keep-alive": "timeout=15", + "location": "http://archive.org/download/mbid-b84ee12a-09ef-421b-82de-0441a926375b/index.json", + "access-control-allow-origin": "*", + "server": "4b4c084fb141" + }, + "url": "http://coverartarchive.org:80/release/b84ee12a-09ef-421b-82de-0441a926375b", + "time": 397, + "request": { + "method": "GET", + "headers": { + "User-Agent": "graphbrainz/4.5.0 ( https://github.com/exogen/graphbrainz )", + "host": "coverartarchive.org", + "accept-encoding": "gzip, deflate", + "accept": "application/json" + } + } +} \ No newline at end of file diff --git a/test/fixtures/d24e77d89cb5c321d30e6d57295865cb b/test/fixtures/d24e77d89cb5c321d30e6d57295865cb new file mode 100644 index 0000000..5b22af9 --- /dev/null +++ b/test/fixtures/d24e77d89cb5c321d30e6d57295865cb @@ -0,0 +1 @@ +See: http://archive.org/download/mbid-10ed5ae4-2bb8-48ac-89ac-a5ea58667f44/index.json diff --git a/test/fixtures/d24e77d89cb5c321d30e6d57295865cb.headers b/test/fixtures/d24e77d89cb5c321d30e6d57295865cb.headers new file mode 100644 index 0000000..3588b7e --- /dev/null +++ b/test/fixtures/d24e77d89cb5c321d30e6d57295865cb.headers @@ -0,0 +1,24 @@ +{ + "statusCode": 307, + "headers": { + "date": "Tue, 20 Dec 2016 01:39:55 GMT", + "content-type": "text/plain; charset=utf-8", + "content-length": "86", + "connection": "keep-alive", + "keep-alive": "timeout=15", + "location": "http://archive.org/download/mbid-10ed5ae4-2bb8-48ac-89ac-a5ea58667f44/index.json", + "access-control-allow-origin": "*", + "server": "d8b8a8eb2a2a" + }, + "url": "http://coverartarchive.org:80/release/10ed5ae4-2bb8-48ac-89ac-a5ea58667f44", + "time": 398, + "request": { + "method": "GET", + "headers": { + "User-Agent": "graphbrainz/4.5.0 ( https://github.com/exogen/graphbrainz )", + "host": "coverartarchive.org", + "accept-encoding": "gzip, deflate", + "accept": "application/json" + } + } +} \ No newline at end of file diff --git a/test/fixtures/d2c0839932094a26d5b332efdeb29411 b/test/fixtures/d2c0839932094a26d5b332efdeb29411 new file mode 100644 index 0000000..e69de29 diff --git a/test/fixtures/d2c0839932094a26d5b332efdeb29411.headers b/test/fixtures/d2c0839932094a26d5b332efdeb29411.headers new file mode 100644 index 0000000..eabe9ad --- /dev/null +++ b/test/fixtures/d2c0839932094a26d5b332efdeb29411.headers @@ -0,0 +1,24 @@ +{ + "statusCode": 307, + "headers": { + "date": "Tue, 20 Dec 2016 01:39:53 GMT", + "content-type": "text/plain; charset=utf-8", + "content-length": "142", + "connection": "keep-alive", + "keep-alive": "timeout=15", + "location": "http://archive.org/download/mbid-b84ee12a-09ef-421b-82de-0441a926375b/mbid-b84ee12a-09ef-421b-82de-0441a926375b-13536418798_thumb250.jpg", + "access-control-allow-origin": "*", + "server": "4b4c084fb141" + }, + "url": "http://coverartarchive.org:80/release/b84ee12a-09ef-421b-82de-0441a926375b/back-250", + "time": 382, + "request": { + "method": "HEAD", + "headers": { + "User-Agent": "graphbrainz/4.5.0 ( https://github.com/exogen/graphbrainz )", + "host": "coverartarchive.org", + "accept-encoding": "gzip, deflate", + "content-length": 0 + } + } +} \ No newline at end of file diff --git a/test/fixtures/d48ca164b5167c4b15adaa30b79c5e48 b/test/fixtures/d48ca164b5167c4b15adaa30b79c5e48 new file mode 100644 index 0000000..3652ed6 --- /dev/null +++ b/test/fixtures/d48ca164b5167c4b15adaa30b79c5e48 @@ -0,0 +1 @@ +{"images":[{"types":["Front"],"front":true,"back":false,"edit":17462565,"image":"http://coverartarchive.org/release/76df3287-6cda-33eb-8e9a-044b5e15ffdd/829521842.jpg","comment":"","approved":true,"id":"829521842","thumbnails":{"large":"http://coverartarchive.org/release/76df3287-6cda-33eb-8e9a-044b5e15ffdd/829521842-500.jpg","small":"http://coverartarchive.org/release/76df3287-6cda-33eb-8e9a-044b5e15ffdd/829521842-250.jpg"}},{"types":["Back"],"front":false,"back":true,"edit":24923554,"image":"http://coverartarchive.org/release/76df3287-6cda-33eb-8e9a-044b5e15ffdd/5769317885.jpg","comment":"","approved":true,"id":"5769317885","thumbnails":{"large":"http://coverartarchive.org/release/76df3287-6cda-33eb-8e9a-044b5e15ffdd/5769317885-500.jpg","small":"http://coverartarchive.org/release/76df3287-6cda-33eb-8e9a-044b5e15ffdd/5769317885-250.jpg"}},{"types":["Medium"],"front":false,"back":false,"edit":24923552,"image":"http://coverartarchive.org/release/76df3287-6cda-33eb-8e9a-044b5e15ffdd/5769316809.jpg","comment":"","approved":true,"id":"5769316809","thumbnails":{"large":"http://coverartarchive.org/release/76df3287-6cda-33eb-8e9a-044b5e15ffdd/5769316809-500.jpg","small":"http://coverartarchive.org/release/76df3287-6cda-33eb-8e9a-044b5e15ffdd/5769316809-250.jpg"}}],"release":"http://musicbrainz.org/release/76df3287-6cda-33eb-8e9a-044b5e15ffdd"} \ No newline at end of file diff --git a/test/fixtures/d48ca164b5167c4b15adaa30b79c5e48.headers b/test/fixtures/d48ca164b5167c4b15adaa30b79c5e48.headers new file mode 100644 index 0000000..583c33d --- /dev/null +++ b/test/fixtures/d48ca164b5167c4b15adaa30b79c5e48.headers @@ -0,0 +1,27 @@ +{ + "statusCode": 200, + "headers": { + "server": "nginx/1.4.6 (Ubuntu)", + "date": "Tue, 20 Dec 2016 01:37:47 GMT", + "content-type": "application/json", + "content-length": "1358", + "last-modified": "Mon, 22 Jun 2015 14:56:27 GMT", + "connection": "keep-alive", + "etag": "\"5588221b-54e\"", + "expires": "Tue, 20 Dec 2016 07:37:47 GMT", + "cache-control": "max-age=21600", + "accept-ranges": "bytes" + }, + "url": "http://ia802607.us.archive.org:80/32/items/mbid-76df3287-6cda-33eb-8e9a-044b5e15ffdd/index.json", + "time": 87, + "request": { + "method": "GET", + "headers": { + "User-Agent": "graphbrainz/4.5.0 ( https://github.com/exogen/graphbrainz )", + "accept-encoding": "gzip, deflate", + "accept": "application/json", + "referer": "http://archive.org/download/mbid-76df3287-6cda-33eb-8e9a-044b5e15ffdd/index.json", + "host": "ia802607.us.archive.org" + } + } +} \ No newline at end of file diff --git a/test/fixtures/d79b4d5b3870a5c217bf065093f0c2bb b/test/fixtures/d79b4d5b3870a5c217bf065093f0c2bb new file mode 100644 index 0000000..e69de29 diff --git a/test/fixtures/d79b4d5b3870a5c217bf065093f0c2bb.headers b/test/fixtures/d79b4d5b3870a5c217bf065093f0c2bb.headers new file mode 100644 index 0000000..aba2b8d --- /dev/null +++ b/test/fixtures/d79b4d5b3870a5c217bf065093f0c2bb.headers @@ -0,0 +1,25 @@ +{ + "statusCode": 302, + "headers": { + "server": "nginx/1.4.6 (Ubuntu)", + "date": "Tue, 20 Dec 2016 01:39:53 GMT", + "content-type": "text/html; charset=UTF-8", + "transfer-encoding": "chunked", + "connection": "keep-alive", + "x-powered-by": "PHP/5.5.9-1ubuntu4.20", + "accept-ranges": "bytes", + "location": "http://ia600500.us.archive.org/31/items/mbid-b84ee12a-09ef-421b-82de-0441a926375b/index.json" + }, + "url": "http://archive.org:80/download/mbid-b84ee12a-09ef-421b-82de-0441a926375b/index.json", + "time": 3168, + "request": { + "method": "GET", + "headers": { + "User-Agent": "graphbrainz/4.5.0 ( https://github.com/exogen/graphbrainz )", + "accept-encoding": "gzip, deflate", + "accept": "application/json", + "referer": "http://coverartarchive.org/release/b84ee12a-09ef-421b-82de-0441a926375b", + "host": "archive.org" + } + } +} \ No newline at end of file diff --git a/test/fixtures/dcd063023913100f2337a15baaf7cab8 b/test/fixtures/dcd063023913100f2337a15baaf7cab8 new file mode 100644 index 0000000..e69de29 diff --git a/test/fixtures/dcd063023913100f2337a15baaf7cab8.headers b/test/fixtures/dcd063023913100f2337a15baaf7cab8.headers new file mode 100644 index 0000000..948050a --- /dev/null +++ b/test/fixtures/dcd063023913100f2337a15baaf7cab8.headers @@ -0,0 +1,25 @@ +{ + "statusCode": 302, + "headers": { + "server": "nginx/1.4.6 (Ubuntu)", + "date": "Tue, 20 Dec 2016 01:39:57 GMT", + "content-type": "text/html; charset=UTF-8", + "transfer-encoding": "chunked", + "connection": "keep-alive", + "x-powered-by": "PHP/5.5.9-1ubuntu4.20", + "accept-ranges": "bytes", + "location": "http://ia601209.us.archive.org/27/items/mbid-3e2c779e-16e8-459e-8791-2da47a92dce6/index.json" + }, + "url": "http://archive.org:80/download/mbid-3e2c779e-16e8-459e-8791-2da47a92dce6/index.json", + "time": 213, + "request": { + "method": "GET", + "headers": { + "User-Agent": "graphbrainz/4.5.0 ( https://github.com/exogen/graphbrainz )", + "accept-encoding": "gzip, deflate", + "accept": "application/json", + "referer": "http://coverartarchive.org/release/3e2c779e-16e8-459e-8791-2da47a92dce6", + "host": "archive.org" + } + } +} \ No newline at end of file diff --git a/test/fixtures/df3294c221f51a91e332658994955033 b/test/fixtures/df3294c221f51a91e332658994955033 new file mode 100644 index 0000000..92799e3 --- /dev/null +++ b/test/fixtures/df3294c221f51a91e332658994955033 @@ -0,0 +1 @@ +{"images":[{"thumbnails":{"small":"http://coverartarchive.org/release/3e2c779e-16e8-459e-8791-2da47a92dce6/14821922998-250.jpg","large":"http://coverartarchive.org/release/3e2c779e-16e8-459e-8791-2da47a92dce6/14821922998-500.jpg"},"types":["Front"],"comment":"","image":"http://coverartarchive.org/release/3e2c779e-16e8-459e-8791-2da47a92dce6/14821922998.jpg","id":"14821922998","front":true,"edit":41063647,"approved":true,"back":false},{"image":"http://coverartarchive.org/release/3e2c779e-16e8-459e-8791-2da47a92dce6/14821927303.jpg","front":false,"id":"14821927303","types":["Back","Spine"],"comment":"","thumbnails":{"small":"http://coverartarchive.org/release/3e2c779e-16e8-459e-8791-2da47a92dce6/14821927303-250.jpg","large":"http://coverartarchive.org/release/3e2c779e-16e8-459e-8791-2da47a92dce6/14821927303-500.jpg"},"back":true,"approved":true,"edit":41063650},{"types":["Medium"],"comment":"","thumbnails":{"small":"http://coverartarchive.org/release/3e2c779e-16e8-459e-8791-2da47a92dce6/14821929890-250.jpg","large":"http://coverartarchive.org/release/3e2c779e-16e8-459e-8791-2da47a92dce6/14821929890-500.jpg"},"image":"http://coverartarchive.org/release/3e2c779e-16e8-459e-8791-2da47a92dce6/14821929890.jpg","front":false,"id":"14821929890","edit":41063915,"back":false,"approved":true}],"release":"https://musicbrainz.org/release/3e2c779e-16e8-459e-8791-2da47a92dce6"} \ No newline at end of file diff --git a/test/fixtures/df3294c221f51a91e332658994955033.headers b/test/fixtures/df3294c221f51a91e332658994955033.headers new file mode 100644 index 0000000..b3685ec --- /dev/null +++ b/test/fixtures/df3294c221f51a91e332658994955033.headers @@ -0,0 +1,27 @@ +{ + "statusCode": 200, + "headers": { + "server": "nginx/1.4.6 (Ubuntu)", + "date": "Tue, 20 Dec 2016 01:39:57 GMT", + "content-type": "application/json", + "content-length": "1383", + "last-modified": "Thu, 13 Oct 2016 11:00:47 GMT", + "connection": "keep-alive", + "etag": "\"57ff695f-567\"", + "expires": "Tue, 20 Dec 2016 07:39:57 GMT", + "cache-control": "max-age=21600", + "accept-ranges": "bytes" + }, + "url": "http://ia601209.us.archive.org:80/27/items/mbid-3e2c779e-16e8-459e-8791-2da47a92dce6/index.json", + "time": 158, + "request": { + "method": "GET", + "headers": { + "User-Agent": "graphbrainz/4.5.0 ( https://github.com/exogen/graphbrainz )", + "accept-encoding": "gzip, deflate", + "accept": "application/json", + "referer": "http://archive.org/download/mbid-3e2c779e-16e8-459e-8791-2da47a92dce6/index.json", + "host": "ia601209.us.archive.org" + } + } +} \ No newline at end of file diff --git a/test/fixtures/e1554c0273de859d87630ea52d37372a b/test/fixtures/e1554c0273de859d87630ea52d37372a new file mode 100644 index 0000000..f67b4f2 Binary files /dev/null and b/test/fixtures/e1554c0273de859d87630ea52d37372a differ diff --git a/test/fixtures/e1554c0273de859d87630ea52d37372a.headers b/test/fixtures/e1554c0273de859d87630ea52d37372a.headers new file mode 100644 index 0000000..a62b2f4 --- /dev/null +++ b/test/fixtures/e1554c0273de859d87630ea52d37372a.headers @@ -0,0 +1,29 @@ +{ + "statusCode": 200, + "headers": { + "date": "Tue, 20 Dec 2016 01:39:58 GMT", + "content-type": "application/json; charset=utf-8", + "transfer-encoding": "chunked", + "connection": "keep-alive", + "keep-alive": "timeout=15", + "vary": "Accept-Encoding", + "x-ratelimit-limit": "700", + "x-ratelimit-remaining": "202", + "x-ratelimit-reset": "1482197998", + "server": "Plack::Handler::Starlet", + "etag": "W/\"0a585501bcfd9432a42969f28fa96ad3\"", + "access-control-allow-origin": "*", + "content-encoding": "gzip" + }, + "url": "http://musicbrainz.org:80/ws/2/release/10ed5ae4-2bb8-48ac-89ac-a5ea58667f44?fmt=json", + "time": 408, + "request": { + "method": "GET", + "headers": { + "User-Agent": "graphbrainz/4.5.0 ( 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/fixtures/e7d064c841ee5e01c02ed599ecbd556a b/test/fixtures/e7d064c841ee5e01c02ed599ecbd556a new file mode 100644 index 0000000..87899aa --- /dev/null +++ b/test/fixtures/e7d064c841ee5e01c02ed599ecbd556a @@ -0,0 +1 @@ +{"images":[{"types":["Front"],"front":true,"back":false,"edit":27985878,"image":"http://coverartarchive.org/release/22a1945f-185c-4d70-979e-f297b00b0c71/7436435354.jpg","comment":"","approved":true,"id":"7436435354","thumbnails":{"large":"http://coverartarchive.org/release/22a1945f-185c-4d70-979e-f297b00b0c71/7436435354-500.jpg","small":"http://coverartarchive.org/release/22a1945f-185c-4d70-979e-f297b00b0c71/7436435354-250.jpg"}},{"types":["Back"],"front":false,"back":true,"edit":27985879,"image":"http://coverartarchive.org/release/22a1945f-185c-4d70-979e-f297b00b0c71/7436436976.jpg","comment":"","approved":true,"id":"7436436976","thumbnails":{"large":"http://coverartarchive.org/release/22a1945f-185c-4d70-979e-f297b00b0c71/7436436976-500.jpg","small":"http://coverartarchive.org/release/22a1945f-185c-4d70-979e-f297b00b0c71/7436436976-250.jpg"}},{"types":["Medium"],"front":false,"back":false,"edit":27985881,"image":"http://coverartarchive.org/release/22a1945f-185c-4d70-979e-f297b00b0c71/7436437572.jpg","comment":"","approved":true,"id":"7436437572","thumbnails":{"large":"http://coverartarchive.org/release/22a1945f-185c-4d70-979e-f297b00b0c71/7436437572-500.jpg","small":"http://coverartarchive.org/release/22a1945f-185c-4d70-979e-f297b00b0c71/7436437572-250.jpg"}},{"types":["Medium"],"front":false,"back":false,"edit":27985882,"image":"http://coverartarchive.org/release/22a1945f-185c-4d70-979e-f297b00b0c71/7436438250.jpg","comment":"","approved":true,"id":"7436438250","thumbnails":{"large":"http://coverartarchive.org/release/22a1945f-185c-4d70-979e-f297b00b0c71/7436438250-500.jpg","small":"http://coverartarchive.org/release/22a1945f-185c-4d70-979e-f297b00b0c71/7436438250-250.jpg"}}],"release":"http://musicbrainz.org/release/22a1945f-185c-4d70-979e-f297b00b0c71"} \ No newline at end of file diff --git a/test/fixtures/e7d064c841ee5e01c02ed599ecbd556a.headers b/test/fixtures/e7d064c841ee5e01c02ed599ecbd556a.headers new file mode 100644 index 0000000..e0b0911 --- /dev/null +++ b/test/fixtures/e7d064c841ee5e01c02ed599ecbd556a.headers @@ -0,0 +1,27 @@ +{ + "statusCode": 200, + "headers": { + "server": "nginx/1.4.6 (Ubuntu)", + "date": "Tue, 20 Dec 2016 01:39:57 GMT", + "content-type": "application/json", + "content-length": "1787", + "last-modified": "Wed, 04 Jun 2014 14:48:40 GMT", + "connection": "keep-alive", + "etag": "\"538f31c8-6fb\"", + "expires": "Tue, 20 Dec 2016 07:39:57 GMT", + "cache-control": "max-age=21600", + "accept-ranges": "bytes" + }, + "url": "http://ia902502.us.archive.org:80/29/items/mbid-22a1945f-185c-4d70-979e-f297b00b0c71/index.json", + "time": 104, + "request": { + "method": "GET", + "headers": { + "User-Agent": "graphbrainz/4.5.0 ( https://github.com/exogen/graphbrainz )", + "accept-encoding": "gzip, deflate", + "accept": "application/json", + "referer": "http://archive.org/download/mbid-22a1945f-185c-4d70-979e-f297b00b0c71/index.json", + "host": "ia902502.us.archive.org" + } + } +} \ No newline at end of file diff --git a/test/fixtures/e7d66bffb0e7b3bb6f87aff19c514424 b/test/fixtures/e7d66bffb0e7b3bb6f87aff19c514424 new file mode 100644 index 0000000..f8b45cf --- /dev/null +++ b/test/fixtures/e7d66bffb0e7b3bb6f87aff19c514424 @@ -0,0 +1 @@ +{"images":[{"thumbnails":{"large":"http://coverartarchive.org/release/b84ee12a-09ef-421b-82de-0441a926375b/1611507818-500.jpg","small":"http://coverartarchive.org/release/b84ee12a-09ef-421b-82de-0441a926375b/1611507818-250.jpg"},"approved":true,"comment":"","image":"http://coverartarchive.org/release/b84ee12a-09ef-421b-82de-0441a926375b/1611507818.jpg","edit":18544122,"front":true,"types":["Front"],"back":false,"id":"1611507818"},{"approved":true,"thumbnails":{"small":"http://coverartarchive.org/release/b84ee12a-09ef-421b-82de-0441a926375b/13536418798-250.jpg","large":"http://coverartarchive.org/release/b84ee12a-09ef-421b-82de-0441a926375b/13536418798-500.jpg"},"comment":"","front":false,"types":["Back"],"id":"13536418798","back":true,"edit":38677409,"image":"http://coverartarchive.org/release/b84ee12a-09ef-421b-82de-0441a926375b/13536418798.jpg"},{"approved":true,"thumbnails":{"small":"http://coverartarchive.org/release/b84ee12a-09ef-421b-82de-0441a926375b/13536419390-250.jpg","large":"http://coverartarchive.org/release/b84ee12a-09ef-421b-82de-0441a926375b/13536419390-500.jpg"},"comment":"","edit":38677410,"image":"http://coverartarchive.org/release/b84ee12a-09ef-421b-82de-0441a926375b/13536419390.jpg","types":["Liner"],"front":false,"back":false,"id":"13536419390"},{"approved":true,"thumbnails":{"small":"http://coverartarchive.org/release/b84ee12a-09ef-421b-82de-0441a926375b/13536420212-250.jpg","large":"http://coverartarchive.org/release/b84ee12a-09ef-421b-82de-0441a926375b/13536420212-500.jpg"},"comment":"","image":"http://coverartarchive.org/release/b84ee12a-09ef-421b-82de-0441a926375b/13536420212.jpg","edit":38677411,"types":["Liner"],"front":false,"back":false,"id":"13536420212"},{"approved":true,"thumbnails":{"large":"http://coverartarchive.org/release/b84ee12a-09ef-421b-82de-0441a926375b/13536420721-500.jpg","small":"http://coverartarchive.org/release/b84ee12a-09ef-421b-82de-0441a926375b/13536420721-250.jpg"},"comment":"","edit":38677412,"image":"http://coverartarchive.org/release/b84ee12a-09ef-421b-82de-0441a926375b/13536420721.jpg","types":["Poster"],"front":false,"back":false,"id":"13536420721"},{"approved":true,"thumbnails":{"large":"http://coverartarchive.org/release/b84ee12a-09ef-421b-82de-0441a926375b/13536421121-500.jpg","small":"http://coverartarchive.org/release/b84ee12a-09ef-421b-82de-0441a926375b/13536421121-250.jpg"},"comment":"","front":false,"types":["Poster"],"back":false,"id":"13536421121","edit":38677413,"image":"http://coverartarchive.org/release/b84ee12a-09ef-421b-82de-0441a926375b/13536421121.jpg"},{"comment":"","thumbnails":{"small":"http://coverartarchive.org/release/b84ee12a-09ef-421b-82de-0441a926375b/13536421897-250.jpg","large":"http://coverartarchive.org/release/b84ee12a-09ef-421b-82de-0441a926375b/13536421897-500.jpg"},"approved":true,"image":"http://coverartarchive.org/release/b84ee12a-09ef-421b-82de-0441a926375b/13536421897.jpg","edit":38677414,"id":"13536421897","back":false,"types":["Poster"],"front":false},{"image":"http://coverartarchive.org/release/b84ee12a-09ef-421b-82de-0441a926375b/13536422293.jpg","edit":38677415,"front":false,"types":["Poster"],"back":false,"id":"13536422293","approved":true,"thumbnails":{"small":"http://coverartarchive.org/release/b84ee12a-09ef-421b-82de-0441a926375b/13536422293-250.jpg","large":"http://coverartarchive.org/release/b84ee12a-09ef-421b-82de-0441a926375b/13536422293-500.jpg"},"comment":""},{"thumbnails":{"large":"http://coverartarchive.org/release/b84ee12a-09ef-421b-82de-0441a926375b/13536422691-500.jpg","small":"http://coverartarchive.org/release/b84ee12a-09ef-421b-82de-0441a926375b/13536422691-250.jpg"},"approved":true,"comment":"","edit":38677416,"image":"http://coverartarchive.org/release/b84ee12a-09ef-421b-82de-0441a926375b/13536422691.jpg","front":false,"types":["Medium"],"back":false,"id":"13536422691"},{"back":false,"id":"13536423081","front":false,"types":["Medium"],"image":"http://coverartarchive.org/release/b84ee12a-09ef-421b-82de-0441a926375b/13536423081.jpg","edit":38677417,"comment":"","thumbnails":{"large":"http://coverartarchive.org/release/b84ee12a-09ef-421b-82de-0441a926375b/13536423081-500.jpg","small":"http://coverartarchive.org/release/b84ee12a-09ef-421b-82de-0441a926375b/13536423081-250.jpg"},"approved":true}],"release":"https://musicbrainz.org/release/b84ee12a-09ef-421b-82de-0441a926375b"} \ No newline at end of file diff --git a/test/fixtures/e7d66bffb0e7b3bb6f87aff19c514424.headers b/test/fixtures/e7d66bffb0e7b3bb6f87aff19c514424.headers new file mode 100644 index 0000000..64cee04 --- /dev/null +++ b/test/fixtures/e7d66bffb0e7b3bb6f87aff19c514424.headers @@ -0,0 +1,27 @@ +{ + "statusCode": 200, + "headers": { + "server": "nginx/1.4.6 (Ubuntu)", + "date": "Tue, 20 Dec 2016 01:39:53 GMT", + "content-type": "application/json", + "content-length": "4372", + "last-modified": "Tue, 10 May 2016 19:12:33 GMT", + "connection": "keep-alive", + "etag": "\"573232a1-1114\"", + "expires": "Tue, 20 Dec 2016 07:39:53 GMT", + "cache-control": "max-age=21600", + "accept-ranges": "bytes" + }, + "url": "http://ia600500.us.archive.org:80/31/items/mbid-b84ee12a-09ef-421b-82de-0441a926375b/index.json", + "time": 100, + "request": { + "method": "GET", + "headers": { + "User-Agent": "graphbrainz/4.5.0 ( https://github.com/exogen/graphbrainz )", + "accept-encoding": "gzip, deflate", + "accept": "application/json", + "referer": "http://archive.org/download/mbid-b84ee12a-09ef-421b-82de-0441a926375b/index.json", + "host": "ia600500.us.archive.org" + } + } +} \ No newline at end of file diff --git a/test/fixtures/eb333e098594fb7f53f15ca41f997176 b/test/fixtures/eb333e098594fb7f53f15ca41f997176 new file mode 100644 index 0000000..258f73c --- /dev/null +++ b/test/fixtures/eb333e098594fb7f53f15ca41f997176 @@ -0,0 +1 @@ +{"images":[{"types":["Front"],"front":true,"back":false,"edit":30009929,"image":"http://coverartarchive.org/release/533e14a8-519d-4f04-95e8-8a84833f26b1/8804135645.jpg","comment":"","approved":true,"id":"8804135645","thumbnails":{"large":"http://coverartarchive.org/release/533e14a8-519d-4f04-95e8-8a84833f26b1/8804135645-500.jpg","small":"http://coverartarchive.org/release/533e14a8-519d-4f04-95e8-8a84833f26b1/8804135645-250.jpg"}}],"release":"http://musicbrainz.org/release/533e14a8-519d-4f04-95e8-8a84833f26b1"} \ No newline at end of file diff --git a/test/fixtures/eb333e098594fb7f53f15ca41f997176.headers b/test/fixtures/eb333e098594fb7f53f15ca41f997176.headers new file mode 100644 index 0000000..6dc4a42 --- /dev/null +++ b/test/fixtures/eb333e098594fb7f53f15ca41f997176.headers @@ -0,0 +1,27 @@ +{ + "statusCode": 200, + "headers": { + "server": "nginx/1.4.6 (Ubuntu)", + "date": "Tue, 20 Dec 2016 01:39:57 GMT", + "content-type": "application/json", + "content-length": "515", + "last-modified": "Sun, 16 Nov 2014 22:03:42 GMT", + "connection": "keep-alive", + "etag": "\"54691f3e-203\"", + "expires": "Tue, 20 Dec 2016 07:39:57 GMT", + "cache-control": "max-age=21600", + "accept-ranges": "bytes" + }, + "url": "http://ia902608.us.archive.org:80/12/items/mbid-533e14a8-519d-4f04-95e8-8a84833f26b1/index.json", + "time": 180, + "request": { + "method": "GET", + "headers": { + "User-Agent": "graphbrainz/4.5.0 ( https://github.com/exogen/graphbrainz )", + "accept-encoding": "gzip, deflate", + "accept": "application/json", + "referer": "http://archive.org/download/mbid-533e14a8-519d-4f04-95e8-8a84833f26b1/index.json", + "host": "ia902608.us.archive.org" + } + } +} \ No newline at end of file diff --git a/test/fixtures/ef8a765d572046b07aa6947545f2655a b/test/fixtures/ef8a765d572046b07aa6947545f2655a new file mode 100644 index 0000000..e69de29 diff --git a/test/fixtures/ef8a765d572046b07aa6947545f2655a.headers b/test/fixtures/ef8a765d572046b07aa6947545f2655a.headers new file mode 100644 index 0000000..7fd6c7b --- /dev/null +++ b/test/fixtures/ef8a765d572046b07aa6947545f2655a.headers @@ -0,0 +1,24 @@ +{ + "statusCode": 307, + "headers": { + "date": "Tue, 20 Dec 2016 01:37:46 GMT", + "content-type": "text/plain; charset=utf-8", + "content-length": "131", + "connection": "keep-alive", + "keep-alive": "timeout=15", + "location": "http://archive.org/download/mbid-76df3287-6cda-33eb-8e9a-044b5e15ffdd/mbid-76df3287-6cda-33eb-8e9a-044b5e15ffdd-829521842.jpg", + "access-control-allow-origin": "*", + "server": "4b4c084fb141" + }, + "url": "http://coverartarchive.org:80/release/76df3287-6cda-33eb-8e9a-044b5e15ffdd/front", + "time": 414, + "request": { + "method": "HEAD", + "headers": { + "User-Agent": "graphbrainz/4.5.0 ( https://github.com/exogen/graphbrainz )", + "host": "coverartarchive.org", + "accept-encoding": "gzip, deflate", + "content-length": 0 + } + } +} \ No newline at end of file diff --git a/test/fixtures/ef97a1709cfc1a6cf2b23c0f0c7a34fa b/test/fixtures/ef97a1709cfc1a6cf2b23c0f0c7a34fa new file mode 100644 index 0000000..3e53715 --- /dev/null +++ b/test/fixtures/ef97a1709cfc1a6cf2b23c0f0c7a34fa @@ -0,0 +1 @@ +{"release":"https://musicbrainz.org/release/10ed5ae4-2bb8-48ac-89ac-a5ea58667f44","images":[{"image":"http://coverartarchive.org/release/10ed5ae4-2bb8-48ac-89ac-a5ea58667f44/14894448550.jpg","front":true,"id":"14894448550","types":["Front"],"comment":"","thumbnails":{"small":"http://coverartarchive.org/release/10ed5ae4-2bb8-48ac-89ac-a5ea58667f44/14894448550-250.jpg","large":"http://coverartarchive.org/release/10ed5ae4-2bb8-48ac-89ac-a5ea58667f44/14894448550-500.jpg"},"back":false,"approved":true,"edit":41203744}]} \ No newline at end of file diff --git a/test/fixtures/ef97a1709cfc1a6cf2b23c0f0c7a34fa.headers b/test/fixtures/ef97a1709cfc1a6cf2b23c0f0c7a34fa.headers new file mode 100644 index 0000000..a111562 --- /dev/null +++ b/test/fixtures/ef97a1709cfc1a6cf2b23c0f0c7a34fa.headers @@ -0,0 +1,27 @@ +{ + "statusCode": 200, + "headers": { + "server": "nginx/1.4.6 (Ubuntu)", + "date": "Tue, 20 Dec 2016 01:39:56 GMT", + "content-type": "application/json", + "content-length": "520", + "last-modified": "Fri, 21 Oct 2016 17:04:17 GMT", + "connection": "keep-alive", + "etag": "\"580a4a91-208\"", + "expires": "Tue, 20 Dec 2016 07:39:56 GMT", + "cache-control": "max-age=21600", + "accept-ranges": "bytes" + }, + "url": "http://ia801906.us.archive.org:80/20/items/mbid-10ed5ae4-2bb8-48ac-89ac-a5ea58667f44/index.json", + "time": 159, + "request": { + "method": "GET", + "headers": { + "User-Agent": "graphbrainz/4.5.0 ( https://github.com/exogen/graphbrainz )", + "accept-encoding": "gzip, deflate", + "accept": "application/json", + "referer": "http://archive.org/download/mbid-10ed5ae4-2bb8-48ac-89ac-a5ea58667f44/index.json", + "host": "ia801906.us.archive.org" + } + } +} \ No newline at end of file diff --git a/test/fixtures/f2f8141f92864c3860802d1e9d5b86c8 b/test/fixtures/f2f8141f92864c3860802d1e9d5b86c8 new file mode 100644 index 0000000..57905ed Binary files /dev/null and b/test/fixtures/f2f8141f92864c3860802d1e9d5b86c8 differ diff --git a/test/fixtures/f2f8141f92864c3860802d1e9d5b86c8.headers b/test/fixtures/f2f8141f92864c3860802d1e9d5b86c8.headers new file mode 100644 index 0000000..19cb9b1 --- /dev/null +++ b/test/fixtures/f2f8141f92864c3860802d1e9d5b86c8.headers @@ -0,0 +1,29 @@ +{ + "statusCode": 200, + "headers": { + "date": "Tue, 20 Dec 2016 01:40:11 GMT", + "content-type": "application/json; charset=utf-8", + "transfer-encoding": "chunked", + "connection": "keep-alive", + "keep-alive": "timeout=15", + "vary": "Accept-Encoding", + "x-ratelimit-limit": "700", + "x-ratelimit-remaining": "582", + "x-ratelimit-reset": "1482198012", + "server": "Plack::Handler::Starlet", + "etag": "W/\"b9cb2670f2ec23624af2b9452a5cd702\"", + "access-control-allow-origin": "*", + "content-encoding": "gzip" + }, + "url": "http://musicbrainz.org:80/ws/2/release/32a863b3-a356-4873-8b74-c2039156cb68?fmt=json", + "time": 413, + "request": { + "method": "GET", + "headers": { + "User-Agent": "graphbrainz/4.5.0 ( 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/fixtures/f3745cfb05ddfda57ec715ce6e752f4e b/test/fixtures/f3745cfb05ddfda57ec715ce6e752f4e new file mode 100644 index 0000000..fdaefaa --- /dev/null +++ b/test/fixtures/f3745cfb05ddfda57ec715ce6e752f4e @@ -0,0 +1 @@ +See: http://archive.org/download/mbid-fb98043c-7ac8-4505-ba87-28576836a8d5/index.json diff --git a/test/fixtures/f3745cfb05ddfda57ec715ce6e752f4e.headers b/test/fixtures/f3745cfb05ddfda57ec715ce6e752f4e.headers new file mode 100644 index 0000000..9ebd8b3 --- /dev/null +++ b/test/fixtures/f3745cfb05ddfda57ec715ce6e752f4e.headers @@ -0,0 +1,24 @@ +{ + "statusCode": 307, + "headers": { + "date": "Tue, 20 Dec 2016 01:39:56 GMT", + "content-type": "text/plain; charset=utf-8", + "content-length": "86", + "connection": "keep-alive", + "keep-alive": "timeout=15", + "location": "http://archive.org/download/mbid-fb98043c-7ac8-4505-ba87-28576836a8d5/index.json", + "access-control-allow-origin": "*", + "server": "d8b8a8eb2a2a" + }, + "url": "http://coverartarchive.org:80/release/fb98043c-7ac8-4505-ba87-28576836a8d5", + "time": 506, + "request": { + "method": "GET", + "headers": { + "User-Agent": "graphbrainz/4.5.0 ( https://github.com/exogen/graphbrainz )", + "host": "coverartarchive.org", + "accept-encoding": "gzip, deflate", + "accept": "application/json" + } + } +} \ No newline at end of file diff --git a/test/fixtures/f3c7a5a4d0fbaf81b0a721a0fea245ea b/test/fixtures/f3c7a5a4d0fbaf81b0a721a0fea245ea new file mode 100644 index 0000000..e0aacda --- /dev/null +++ b/test/fixtures/f3c7a5a4d0fbaf81b0a721a0fea245ea @@ -0,0 +1,4 @@ + +No cover art found for release 060dc665-af64-4e75-8e51-d74eda2ec957
diff --git a/test/fixtures/f3c7a5a4d0fbaf81b0a721a0fea245ea.headers b/test/fixtures/f3c7a5a4d0fbaf81b0a721a0fea245ea.headers new file mode 100644 index 0000000..006cce1 --- /dev/null +++ b/test/fixtures/f3c7a5a4d0fbaf81b0a721a0fea245ea.headers @@ -0,0 +1,22 @@ +{ + "statusCode": 404, + "headers": { + "date": "Tue, 20 Dec 2016 01:39:55 GMT", + "content-type": "text/html", + "content-length": "179", + "connection": "keep-alive", + "keep-alive": "timeout=15", + "server": "d6446ea62189" + }, + "url": "http://coverartarchive.org:80/release/060dc665-af64-4e75-8e51-d74eda2ec957", + "time": 433, + "request": { + "method": "GET", + "headers": { + "User-Agent": "graphbrainz/4.5.0 ( https://github.com/exogen/graphbrainz )", + "host": "coverartarchive.org", + "accept-encoding": "gzip, deflate", + "accept": "application/json" + } + } +} \ No newline at end of file diff --git a/test/fixtures/f64d96e2f100bde683ffde19d156218d b/test/fixtures/f64d96e2f100bde683ffde19d156218d new file mode 100644 index 0000000..e69de29 diff --git a/test/fixtures/f64d96e2f100bde683ffde19d156218d.headers b/test/fixtures/f64d96e2f100bde683ffde19d156218d.headers new file mode 100644 index 0000000..2a9ad76 --- /dev/null +++ b/test/fixtures/f64d96e2f100bde683ffde19d156218d.headers @@ -0,0 +1,25 @@ +{ + "statusCode": 302, + "headers": { + "server": "nginx/1.4.6 (Ubuntu)", + "date": "Tue, 20 Dec 2016 01:39:56 GMT", + "content-type": "text/html; charset=UTF-8", + "transfer-encoding": "chunked", + "connection": "keep-alive", + "x-powered-by": "PHP/5.5.9-1ubuntu4.20", + "accept-ranges": "bytes", + "location": "http://ia801204.us.archive.org/9/items/mbid-3d354599-d9d4-44a8-9584-37e3b0238871/index.json" + }, + "url": "http://archive.org:80/download/mbid-3d354599-d9d4-44a8-9584-37e3b0238871/index.json", + "time": 222, + "request": { + "method": "GET", + "headers": { + "User-Agent": "graphbrainz/4.5.0 ( https://github.com/exogen/graphbrainz )", + "accept-encoding": "gzip, deflate", + "accept": "application/json", + "referer": "http://coverartarchive.org/release/3d354599-d9d4-44a8-9584-37e3b0238871", + "host": "archive.org" + } + } +} \ No newline at end of file diff --git a/test/fixtures/faadb7f41cc3307e81ffc0775f85c8cd b/test/fixtures/faadb7f41cc3307e81ffc0775f85c8cd new file mode 100644 index 0000000..9c646c7 Binary files /dev/null and b/test/fixtures/faadb7f41cc3307e81ffc0775f85c8cd differ diff --git a/test/fixtures/faadb7f41cc3307e81ffc0775f85c8cd.headers b/test/fixtures/faadb7f41cc3307e81ffc0775f85c8cd.headers new file mode 100644 index 0000000..2486bb7 --- /dev/null +++ b/test/fixtures/faadb7f41cc3307e81ffc0775f85c8cd.headers @@ -0,0 +1,29 @@ +{ + "statusCode": 200, + "headers": { + "date": "Tue, 20 Dec 2016 01:40:16 GMT", + "content-type": "application/json; charset=utf-8", + "transfer-encoding": "chunked", + "connection": "keep-alive", + "keep-alive": "timeout=15", + "vary": "Accept-Encoding", + "x-ratelimit-limit": "700", + "x-ratelimit-remaining": "212", + "x-ratelimit-reset": "1482198016", + "server": "Plack::Handler::Starlet", + "etag": "W/\"cc124ae299c23d9df8cb9cc43a75d4b8\"", + "access-control-allow-origin": "*", + "content-encoding": "gzip" + }, + "url": "http://musicbrainz.org:80/ws/2/release/d632b12b-211e-4fbd-87fb-21382556388b?fmt=json", + "time": 421, + "request": { + "method": "GET", + "headers": { + "User-Agent": "graphbrainz/4.5.0 ( 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/fixtures/fd48eb2a7c834a80a4cf3f589b1d9688 b/test/fixtures/fd48eb2a7c834a80a4cf3f589b1d9688 new file mode 100644 index 0000000..e69de29 diff --git a/test/fixtures/fd48eb2a7c834a80a4cf3f589b1d9688.headers b/test/fixtures/fd48eb2a7c834a80a4cf3f589b1d9688.headers new file mode 100644 index 0000000..95b61c3 --- /dev/null +++ b/test/fixtures/fd48eb2a7c834a80a4cf3f589b1d9688.headers @@ -0,0 +1,25 @@ +{ + "statusCode": 302, + "headers": { + "server": "nginx/1.4.6 (Ubuntu)", + "date": "Tue, 20 Dec 2016 01:39:54 GMT", + "content-type": "text/html; charset=UTF-8", + "transfer-encoding": "chunked", + "connection": "keep-alive", + "x-powered-by": "PHP/5.5.9-1ubuntu4.20", + "accept-ranges": "bytes", + "location": "http://ia800808.us.archive.org/32/items/mbid-25fbfbb4-b1ee-4448-aadf-ae3bc2e2dd27/index.json" + }, + "url": "http://archive.org:80/download/mbid-25fbfbb4-b1ee-4448-aadf-ae3bc2e2dd27/index.json", + "time": 141, + "request": { + "method": "GET", + "headers": { + "User-Agent": "graphbrainz/4.5.0 ( https://github.com/exogen/graphbrainz )", + "accept-encoding": "gzip, deflate", + "accept": "application/json", + "referer": "http://coverartarchive.org/release-group/f5093c06-23e3-404f-aeaa-40f72885ee3a", + "host": "archive.org" + } + } +} \ No newline at end of file diff --git a/test/helpers/client.js b/test/helpers/client.js deleted file mode 100644 index 962017a..0000000 --- a/test/helpers/client.js +++ /dev/null @@ -1,11 +0,0 @@ -import path from 'path' -import sepia from 'sepia' -import MusicBrainz from '../../src/api' - -sepia.fixtureDir(path.join(__dirname, '..', 'fixtures')) - -const options = /^(playback|cache)$/.test(process.env.VCR_MODE) - ? { limit: Infinity, period: 0 } - : {} - -export default new MusicBrainz(options) diff --git a/test/helpers/client/cover-art-archive.js b/test/helpers/client/cover-art-archive.js new file mode 100644 index 0000000..0c509bd --- /dev/null +++ b/test/helpers/client/cover-art-archive.js @@ -0,0 +1,11 @@ +import path from 'path' +import sepia from 'sepia' +import { CoverArtArchive } from '../../../src/api' + +sepia.fixtureDir(path.join(__dirname, '..', '..', 'fixtures')) + +const options = process.env.VCR_MODE === 'playback' + ? { limit: Infinity, period: 0 } + : {} + +export default new CoverArtArchive(options) diff --git a/test/helpers/client/musicbrainz.js b/test/helpers/client/musicbrainz.js new file mode 100644 index 0000000..6ce707d --- /dev/null +++ b/test/helpers/client/musicbrainz.js @@ -0,0 +1,11 @@ +import path from 'path' +import sepia from 'sepia' +import MusicBrainz from '../../../src/api' + +sepia.fixtureDir(path.join(__dirname, '..', '..', 'fixtures')) + +const options = process.env.VCR_MODE === 'playback' + ? { limit: Infinity, period: 0 } + : {} + +export default new MusicBrainz(options) diff --git a/test/helpers/context.js b/test/helpers/context.js index c60cf17..e530fba 100644 --- a/test/helpers/context.js +++ b/test/helpers/context.js @@ -1,7 +1,9 @@ import createLoaders from '../../src/loaders' -import client from './client' +import client from './client/musicbrainz' +import coverArtClient from './client/cover-art-archive' export default { client, - loaders: createLoaders(client) + coverArtClient, + loaders: createLoaders(client, coverArtClient) } diff --git a/test/schema.js b/test/schema.js index 824087d..95d9f28 100644 --- a/test/schema.js +++ b/test/schema.js @@ -1071,3 +1071,224 @@ test('entities support tags', testData, ` t.true(artists[0].tags.edges.some(edge => edge.node.name === 'blues rock')) t.true(artists[0].tags.edges.some(edge => edge.node.count > 0)) }) + +test('releases have a cover art summary', testData, ` + { + lookup { + release(mbid: "b84ee12a-09ef-421b-82de-0441a926375b") { + coverArt { + artwork + darkened + count + } + } + } + } +`, (t, data) => { + const { coverArt } = data.lookup.release + t.true(coverArt.artwork) + t.false(coverArt.darkened) + t.true(coverArt.count >= 10) +}) + +test('releases have a set of cover art images', testData, ` + { + lookup { + release(mbid: "b84ee12a-09ef-421b-82de-0441a926375b") { + coverArt { + front + back + images { + front + back + types + approved + edit + comment + fileID + image + thumbnails { + small + large + } + } + } + } + } + } +`, (t, data) => { + const { coverArt } = data.lookup.release + t.is(coverArt.front, 'http://archive.org/download/mbid-b84ee12a-09ef-421b-82de-0441a926375b/mbid-b84ee12a-09ef-421b-82de-0441a926375b-1611507818.jpg') + t.is(coverArt.back, 'http://archive.org/download/mbid-b84ee12a-09ef-421b-82de-0441a926375b/mbid-b84ee12a-09ef-421b-82de-0441a926375b-13536418798.jpg') + t.true(coverArt.images.length >= 10) + t.true(coverArt.images.some(image => image.front === true)) + t.true(coverArt.images.some(image => image.back === true)) + t.true(coverArt.images.some(image => image.types.indexOf('Front') >= 0)) + t.true(coverArt.images.some(image => image.types.indexOf('Back') >= 0)) + t.true(coverArt.images.some(image => image.types.indexOf('Liner') >= 0)) + t.true(coverArt.images.some(image => image.types.indexOf('Poster') >= 0)) + t.true(coverArt.images.some(image => image.types.indexOf('Medium') >= 0)) + t.true(coverArt.images.some(image => image.edit === 18544122)) + t.true(coverArt.images.some(image => image.comment === '')) + t.true(coverArt.images.some(image => image.fileID === '1611507818')) + t.true(coverArt.images.some(image => image.image === 'http://coverartarchive.org/release/b84ee12a-09ef-421b-82de-0441a926375b/13536422691.jpg')) + t.true(coverArt.images.every(image => image.approved === true)) + t.true(coverArt.images.every(image => image.thumbnails.small)) + t.true(coverArt.images.every(image => image.thumbnails.large)) +}) + +test('can request a size for front and back cover art', testData, ` + { + lookup { + release(mbid: "b84ee12a-09ef-421b-82de-0441a926375b") { + coverArt { + front(size: LARGE) + back(size: SMALL) + fullFront: front(size: FULL) + } + } + } + } +`, (t, data) => { + const { coverArt } = data.lookup.release + t.is(coverArt.front, 'http://archive.org/download/mbid-b84ee12a-09ef-421b-82de-0441a926375b/mbid-b84ee12a-09ef-421b-82de-0441a926375b-1611507818_thumb500.jpg') + t.is(coverArt.back, 'http://archive.org/download/mbid-b84ee12a-09ef-421b-82de-0441a926375b/mbid-b84ee12a-09ef-421b-82de-0441a926375b-13536418798_thumb250.jpg') + t.is(coverArt.fullFront, 'http://archive.org/download/mbid-b84ee12a-09ef-421b-82de-0441a926375b/mbid-b84ee12a-09ef-421b-82de-0441a926375b-1611507818.jpg') +}) + +test('release groups have a front cover art image', testData, ` + { + lookup { + releaseGroup(mbid: "f5093c06-23e3-404f-aeaa-40f72885ee3a") { + coverArt { + artwork + front + images { + front + image + } + release { + mbid + title + } + } + } + } + } +`, (t, data) => { + const { coverArt } = data.lookup.releaseGroup + t.true(coverArt.artwork) + t.is(coverArt.front, 'http://coverartarchive.org/release/25fbfbb4-b1ee-4448-aadf-ae3bc2e2dd27/1675312275.jpg') + t.is(coverArt.release.mbid, '25fbfbb4-b1ee-4448-aadf-ae3bc2e2dd27') + t.is(coverArt.release.title, 'The Dark Side of the Moon') + t.is(coverArt.images.length, 1) + t.true(coverArt.images[0].front) +}) + +test('release groups have different cover art sizes available', testData, ` + { + lookup { + releaseGroup(mbid: "f5093c06-23e3-404f-aeaa-40f72885ee3a") { + coverArt { + small: front(size: SMALL) + large: front(size: LARGE) + } + } + } + } +`, (t, data) => { + const { coverArt } = data.lookup.releaseGroup + t.is(coverArt.small, 'http://coverartarchive.org/release/25fbfbb4-b1ee-4448-aadf-ae3bc2e2dd27/1675312275-250.jpg') + t.is(coverArt.large, 'http://coverartarchive.org/release/25fbfbb4-b1ee-4448-aadf-ae3bc2e2dd27/1675312275-500.jpg') +}) + +test('can retrieve cover art in searches', testData, ` + { + search { + releases(query: "You Want It Darker") { + edges { + node { + coverArt { + artwork + darkened + front + back + images { + image + } + } + } + } + } + } + } +`, (t, data) => { + const releases = data.search.releases.edges.map(edge => edge.node) + t.is(releases.length, 25) + t.true(releases.some(release => release.coverArt.artwork === true)) + t.true(releases.every(release => release.coverArt.darkened === false)) + t.true(releases.some(release => release.coverArt.images.length > 0)) + t.true(releases.some(release => release.coverArt.front === null)) + t.true(releases.some(release => release.coverArt.back === null)) +}) + +test('cover art release field does not make a request unless necessary', testData, ` + { + lookup { + release(mbid: "b84ee12a-09ef-421b-82de-0441a926375b") { + coverArt { + release { + mbid + } + } + } + } + } +`, (t, data) => { + // TODO: Add ability to check how many requests were made to fulfill a query. + const { coverArt } = data.lookup.release + t.is(coverArt.release.mbid, 'b84ee12a-09ef-421b-82de-0441a926375b') +}) + +test('cover art fields can be calculated instead of making another request', testData, ` + { + search { + releases(query: "reid:b84ee12a-09ef-421b-82de-0441a926375b", first: 1) { + edges { + node { + coverArt { + artwork + count + } + } + } + } + } + } +`, (t, data) => { + // TODO: Add ability to check how many requests were made to fulfill a query. + const releases = data.search.releases.edges.map(edge => edge.node) + t.is(releases.length, 1) + t.true(releases[0].coverArt.artwork) + t.is(releases[0].coverArt.count, 10) +}) + +test('cover art is not fetched if the count is 0', testData, ` + { + lookup { + release(mbid: "c0f74d5a-7534-414d-8b90-0ebe6c5da19e") { + coverArt { + count + images { + image + } + } + } + } + } +`, (t, data) => { + // TODO: Add ability to check how many requests were made to fulfill a query. + const { coverArt } = data.lookup.release + t.is(coverArt.count, 0) + t.deepEqual(coverArt.images, []) +}) diff --git a/test/types/scalars.js b/test/types/scalars.js index 51d92aa..a609341 100644 --- a/test/types/scalars.js +++ b/test/types/scalars.js @@ -45,6 +45,11 @@ test('Duration scalar must be a positive integer', t => { t.is(Duration.parseLiteral({ kind: Kind.STRING, value: '1000' }), null) t.throws(() => Duration.parseLiteral({ kind: Kind.INT, value: -1 }), TypeError) t.throws(() => Duration.parseLiteral({ kind: Kind.INT, value: -1000 }), TypeError) + t.is(Duration.parseValue(0), 0) + t.is(Duration.parseValue(1), 1) + t.is(Duration.parseValue(3000), 3000) + t.throws(() => Duration.parseValue(-1), TypeError) + t.throws(() => Duration.parseValue(-1000), TypeError) }) test('URLString scalar must be a valid URL', t => { @@ -62,6 +67,12 @@ test('ISWC scalar only accepts strings', t => { t.is(ISWC.parseLiteral({ kind: Kind.ENUM, value: 'xx' }), null) }) +test('ISWC scalar can be any string', t => { + t.is(ISWC.parseValue('foo'), 'foo') + t.is(ISWC.parseValue('123-456'), '123-456') + t.is(ISWC.parseValue('!@#$%^&*'), '!@#$%^&*') +}) + test('MBID scalar only accepts strings', t => { t.is(MBID.parseLiteral({ kind: Kind.INT, value: 12345 }), null) t.is(MBID.parseLiteral({ kind: Kind.ENUM, value: 'xx' }), null)