2021-04-16 04:34:29 +00:00
|
|
|
import test from 'ava';
|
|
|
|
|
import GraphQL from 'graphql';
|
|
|
|
|
import context from './helpers/context.js';
|
2016-12-07 08:23:02 +00:00
|
|
|
|
2021-04-16 04:34:29 +00:00
|
|
|
const { graphql } = GraphQL;
|
2017-11-18 08:35:28 +00:00
|
|
|
|
2017-11-07 05:54:56 +00:00
|
|
|
function testData(t, query, handler) {
|
2021-04-16 04:34:29 +00:00
|
|
|
return graphql(t.context.schema, query, null, context).then((result) => {
|
2017-10-06 03:27:53 +00:00
|
|
|
if (result.errors !== undefined) {
|
2021-04-16 04:34:29 +00:00
|
|
|
result.errors.forEach((error) => t.log(error));
|
2017-10-06 03:27:53 +00:00
|
|
|
}
|
2021-04-16 04:34:29 +00:00
|
|
|
t.is(result.errors, undefined);
|
|
|
|
|
return handler(t, result.data);
|
|
|
|
|
});
|
2016-12-10 02:55:41 +00:00
|
|
|
}
|
2016-12-09 00:08:11 +00:00
|
|
|
|
2017-11-07 05:54:56 +00:00
|
|
|
function testError(t, query, handler) {
|
2021-04-16 04:34:29 +00:00
|
|
|
return graphql(t.context.schema, query, null, context).then((result) => {
|
|
|
|
|
t.truthy(result.errors);
|
|
|
|
|
t.true(result.errors.length > 0);
|
|
|
|
|
return handler(t, result.errors);
|
|
|
|
|
});
|
2016-12-10 02:55:41 +00:00
|
|
|
}
|
2016-12-07 08:23:02 +00:00
|
|
|
|
2017-11-07 05:54:56 +00:00
|
|
|
test(
|
|
|
|
|
'schema has a node field',
|
|
|
|
|
testData,
|
|
|
|
|
`
|
2016-12-11 20:37:25 +00:00
|
|
|
{
|
|
|
|
|
node(id: "UmVsZWFzZUdyb3VwOmUzN2QyNzQwLTQ1MDMtNGUzZi1hYjZkLWU2MjJhMjVlOTY0ZA==") {
|
|
|
|
|
__typename
|
|
|
|
|
... on ReleaseGroup {
|
|
|
|
|
mbid
|
2016-12-08 22:33:18 +00:00
|
|
|
}
|
|
|
|
|
}
|
2016-12-10 02:55:41 +00:00
|
|
|
}
|
2017-11-07 05:54:56 +00:00
|
|
|
`,
|
|
|
|
|
(t, data) => {
|
|
|
|
|
t.deepEqual(data, {
|
|
|
|
|
node: {
|
|
|
|
|
__typename: 'ReleaseGroup',
|
2021-04-16 04:34:29 +00:00
|
|
|
mbid: 'e37d2740-4503-4e3f-ab6d-e622a25e964d',
|
|
|
|
|
},
|
|
|
|
|
});
|
2017-11-07 05:54:56 +00:00
|
|
|
}
|
2021-04-16 04:34:29 +00:00
|
|
|
);
|
2016-12-08 22:33:18 +00:00
|
|
|
|
2017-11-07 05:54:56 +00:00
|
|
|
test(
|
|
|
|
|
'schema has a lookup query',
|
|
|
|
|
testData,
|
|
|
|
|
`
|
2016-12-11 20:37:25 +00:00
|
|
|
{
|
|
|
|
|
lookup {
|
|
|
|
|
artist (mbid: "c8da2e40-bd28-4d4e-813a-bd2f51958ba8") {
|
|
|
|
|
mbid
|
|
|
|
|
name
|
|
|
|
|
type
|
2016-12-07 08:23:02 +00:00
|
|
|
}
|
|
|
|
|
}
|
2016-12-11 20:37:25 +00:00
|
|
|
}
|
2017-11-07 05:54:56 +00:00
|
|
|
`,
|
|
|
|
|
(t, data) => {
|
|
|
|
|
t.deepEqual(data, {
|
|
|
|
|
lookup: {
|
|
|
|
|
artist: {
|
|
|
|
|
mbid: 'c8da2e40-bd28-4d4e-813a-bd2f51958ba8',
|
|
|
|
|
name: 'Lures',
|
2021-04-16 04:34:29 +00:00
|
|
|
type: 'Group',
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
});
|
2017-11-07 05:54:56 +00:00
|
|
|
}
|
2021-04-16 04:34:29 +00:00
|
|
|
);
|
2016-12-07 14:16:30 +00:00
|
|
|
|
2017-11-07 05:54:56 +00:00
|
|
|
test(
|
|
|
|
|
'schema has a search query',
|
|
|
|
|
testData,
|
|
|
|
|
`
|
2016-12-11 20:37:25 +00:00
|
|
|
{
|
|
|
|
|
search {
|
|
|
|
|
recordings (query: "Burn the Witch") {
|
|
|
|
|
totalCount
|
|
|
|
|
edges {
|
|
|
|
|
score
|
|
|
|
|
node {
|
|
|
|
|
mbid
|
|
|
|
|
title
|
2016-12-07 14:16:30 +00:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
2016-12-11 20:37:25 +00:00
|
|
|
}
|
2017-11-07 05:54:56 +00:00
|
|
|
`,
|
|
|
|
|
(t, data) => {
|
2021-04-16 04:34:29 +00:00
|
|
|
const { recordings } = data.search;
|
|
|
|
|
t.true(recordings.totalCount > 0);
|
|
|
|
|
t.true(recordings.edges.length === 25);
|
|
|
|
|
recordings.edges.forEach((edge) => t.true(edge.score > 0));
|
2017-11-07 05:54:56 +00:00
|
|
|
}
|
2021-04-16 04:34:29 +00:00
|
|
|
);
|
2016-12-07 14:16:30 +00:00
|
|
|
|
2017-11-07 05:54:56 +00:00
|
|
|
test(
|
|
|
|
|
'schema has a browse query',
|
|
|
|
|
testData,
|
|
|
|
|
`
|
2016-12-11 20:37:25 +00:00
|
|
|
{
|
|
|
|
|
browse {
|
2016-12-12 04:03:05 +00:00
|
|
|
releaseGroups(artist: "c8da2e40-bd28-4d4e-813a-bd2f51958ba8") {
|
2016-12-11 20:37:25 +00:00
|
|
|
totalCount
|
|
|
|
|
edges {
|
|
|
|
|
node {
|
|
|
|
|
mbid
|
|
|
|
|
title
|
|
|
|
|
artistCredit {
|
|
|
|
|
artist {
|
|
|
|
|
mbid
|
2016-12-07 23:10:03 +00:00
|
|
|
}
|
2016-12-11 20:37:25 +00:00
|
|
|
name
|
|
|
|
|
joinPhrase
|
2016-12-07 14:16:30 +00:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
2016-12-11 20:37:25 +00:00
|
|
|
}
|
2017-11-07 05:54:56 +00:00
|
|
|
`,
|
|
|
|
|
(t, data) => {
|
2021-04-16 04:34:29 +00:00
|
|
|
const { releaseGroups } = data.browse;
|
|
|
|
|
t.true(releaseGroups.totalCount > 0);
|
|
|
|
|
t.true(releaseGroups.edges.length > 0);
|
|
|
|
|
releaseGroups.edges.forEach((edge) => t.truthy(edge.node.title));
|
2017-11-07 05:54:56 +00:00
|
|
|
}
|
2021-04-16 04:34:29 +00:00
|
|
|
);
|
2016-12-08 22:11:05 +00:00
|
|
|
|
2017-11-07 05:54:56 +00:00
|
|
|
test(
|
|
|
|
|
'supports deeply nested queries',
|
|
|
|
|
testData,
|
|
|
|
|
`
|
2016-12-11 20:37:25 +00:00
|
|
|
query AppleRecordsMarriages {
|
|
|
|
|
search {
|
|
|
|
|
labels(query: "Apple Records", first: 1) {
|
|
|
|
|
edges {
|
|
|
|
|
node {
|
|
|
|
|
name
|
|
|
|
|
disambiguation
|
|
|
|
|
country
|
|
|
|
|
releases(first: 1) {
|
|
|
|
|
edges {
|
|
|
|
|
node {
|
|
|
|
|
title
|
|
|
|
|
date
|
|
|
|
|
artists {
|
|
|
|
|
edges {
|
|
|
|
|
node {
|
|
|
|
|
name
|
|
|
|
|
...bandMembers
|
2016-12-08 22:11:05 +00:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
2016-12-11 20:37:25 +00:00
|
|
|
}
|
2016-12-08 22:11:05 +00:00
|
|
|
|
2016-12-11 20:37:25 +00:00
|
|
|
fragment bandMembers on Artist {
|
|
|
|
|
relationships {
|
|
|
|
|
artists(direction: "backward", type: "member of band") {
|
|
|
|
|
edges {
|
|
|
|
|
node {
|
|
|
|
|
type
|
|
|
|
|
target {
|
|
|
|
|
... on Artist {
|
|
|
|
|
name
|
|
|
|
|
...marriages
|
2016-12-08 22:11:05 +00:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
2016-12-11 20:37:25 +00:00
|
|
|
}
|
2016-12-08 22:11:05 +00:00
|
|
|
|
2016-12-11 20:37:25 +00:00
|
|
|
fragment marriages on Artist {
|
|
|
|
|
relationships {
|
|
|
|
|
artists(type: "married") {
|
|
|
|
|
edges {
|
|
|
|
|
node {
|
|
|
|
|
type
|
|
|
|
|
direction
|
|
|
|
|
begin
|
|
|
|
|
end
|
|
|
|
|
target {
|
|
|
|
|
... on Artist {
|
|
|
|
|
name
|
2016-12-08 22:11:05 +00:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
2016-12-11 20:37:25 +00:00
|
|
|
}
|
2017-11-07 05:54:56 +00:00
|
|
|
`,
|
|
|
|
|
(t, data) => {
|
2021-04-16 04:34:29 +00:00
|
|
|
const { labels } = data.search;
|
|
|
|
|
t.true(labels.edges.length > 0);
|
|
|
|
|
t.is(labels.edges[0].node.releases.edges.length, 1);
|
2017-11-07 05:54:56 +00:00
|
|
|
}
|
2021-04-16 04:34:29 +00:00
|
|
|
);
|
2016-12-10 02:55:41 +00:00
|
|
|
|
2017-11-07 05:54:56 +00:00
|
|
|
test(
|
|
|
|
|
'connections have a nodes shortcut field',
|
|
|
|
|
testData,
|
|
|
|
|
`
|
2017-10-07 02:43:15 +00:00
|
|
|
query AppleRecordsMarriages {
|
|
|
|
|
search {
|
|
|
|
|
labels(query: "Apple Records", first: 1) {
|
|
|
|
|
nodes {
|
|
|
|
|
name
|
|
|
|
|
disambiguation
|
|
|
|
|
country
|
|
|
|
|
releases(first: 1) {
|
|
|
|
|
nodes {
|
|
|
|
|
title
|
|
|
|
|
date
|
|
|
|
|
artists {
|
|
|
|
|
nodes {
|
|
|
|
|
name
|
|
|
|
|
...bandMembers
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
fragment bandMembers on Artist {
|
|
|
|
|
relationships {
|
|
|
|
|
artists(direction: "backward", type: "member of band") {
|
|
|
|
|
nodes {
|
|
|
|
|
type
|
|
|
|
|
target {
|
|
|
|
|
... on Artist {
|
|
|
|
|
name
|
|
|
|
|
...marriages
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
fragment marriages on Artist {
|
|
|
|
|
relationships {
|
|
|
|
|
artists(type: "married") {
|
|
|
|
|
nodes {
|
|
|
|
|
type
|
|
|
|
|
direction
|
|
|
|
|
begin
|
|
|
|
|
end
|
|
|
|
|
target {
|
|
|
|
|
... on Artist {
|
|
|
|
|
name
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
2017-11-07 05:54:56 +00:00
|
|
|
`,
|
|
|
|
|
(t, data) => {
|
2021-04-16 04:34:29 +00:00
|
|
|
const { labels } = data.search;
|
|
|
|
|
t.true(labels.nodes.length > 0);
|
|
|
|
|
t.is(labels.nodes[0].releases.nodes.length, 1);
|
2017-11-07 05:54:56 +00:00
|
|
|
}
|
2021-04-16 04:34:29 +00:00
|
|
|
);
|
2017-10-07 02:43:15 +00:00
|
|
|
|
2017-11-07 05:54:56 +00:00
|
|
|
test(
|
|
|
|
|
'throws an error if given a malformed MBID',
|
2018-08-04 19:04:19 +00:00
|
|
|
testError,
|
2017-11-07 05:54:56 +00:00
|
|
|
`
|
2016-12-11 20:37:25 +00:00
|
|
|
{
|
|
|
|
|
lookup {
|
|
|
|
|
artist(mbid: "ABC123") {
|
|
|
|
|
name
|
2016-12-10 02:55:41 +00:00
|
|
|
}
|
|
|
|
|
}
|
2016-12-11 20:37:25 +00:00
|
|
|
}
|
2017-11-07 05:54:56 +00:00
|
|
|
`,
|
2018-08-04 19:04:19 +00:00
|
|
|
(t, errors) => {
|
2021-04-16 04:34:29 +00:00
|
|
|
t.regex(errors[0].message, /Malformed MBID: ABC123/);
|
2017-11-07 05:54:56 +00:00
|
|
|
}
|
2021-04-16 04:34:29 +00:00
|
|
|
);
|
2016-12-10 02:55:41 +00:00
|
|
|
|
2017-11-07 05:54:56 +00:00
|
|
|
test(
|
|
|
|
|
'artist areas access begin_area/end_area for lookup queries',
|
|
|
|
|
testData,
|
|
|
|
|
`
|
2016-12-11 20:37:25 +00:00
|
|
|
{
|
|
|
|
|
lookup {
|
|
|
|
|
artist(mbid: "65314b12-0e08-43fa-ba33-baaa7b874c15") {
|
|
|
|
|
beginArea {
|
|
|
|
|
name
|
|
|
|
|
}
|
|
|
|
|
endArea {
|
|
|
|
|
name
|
2016-12-10 02:55:41 +00:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
2016-12-11 20:37:25 +00:00
|
|
|
}
|
2017-11-07 05:54:56 +00:00
|
|
|
`,
|
|
|
|
|
(t, data) => {
|
2021-04-16 04:34:29 +00:00
|
|
|
const { artist } = data.lookup;
|
|
|
|
|
t.is(artist.beginArea.name, 'Westmount');
|
|
|
|
|
t.is(artist.endArea.name, 'Los Angeles');
|
2017-11-07 05:54:56 +00:00
|
|
|
}
|
2021-04-16 04:34:29 +00:00
|
|
|
);
|
2016-12-10 02:55:41 +00:00
|
|
|
|
2017-11-07 05:54:56 +00:00
|
|
|
test(
|
|
|
|
|
'artist areas access begin_area/end_area for browse queries',
|
|
|
|
|
testData,
|
|
|
|
|
`
|
2016-12-11 20:37:25 +00:00
|
|
|
{
|
|
|
|
|
browse {
|
|
|
|
|
artists(area: "3f504d54-c40c-487d-bc16-c1990eac887f") {
|
|
|
|
|
edges {
|
|
|
|
|
node {
|
|
|
|
|
beginArea {
|
|
|
|
|
name
|
|
|
|
|
}
|
|
|
|
|
endArea {
|
|
|
|
|
name
|
2016-12-10 02:55:41 +00:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
2016-12-11 20:37:25 +00:00
|
|
|
}
|
2017-11-07 05:54:56 +00:00
|
|
|
`,
|
|
|
|
|
(t, data) => {
|
2021-04-16 04:34:29 +00:00
|
|
|
const artists = data.browse.artists.edges.map((edge) => edge.node);
|
|
|
|
|
t.true(artists.length > 1);
|
|
|
|
|
t.true(artists.some((artist) => artist.beginArea));
|
|
|
|
|
t.true(artists.some((artist) => artist.endArea));
|
2017-11-07 05:54:56 +00:00
|
|
|
}
|
2021-04-16 04:34:29 +00:00
|
|
|
);
|
2016-12-10 02:55:41 +00:00
|
|
|
|
2017-11-07 05:54:56 +00:00
|
|
|
test(
|
|
|
|
|
'artist areas access begin-area/end-area for search queries',
|
|
|
|
|
testData,
|
|
|
|
|
`
|
2016-12-11 20:37:25 +00:00
|
|
|
{
|
|
|
|
|
search {
|
|
|
|
|
artists(query: "Leonard Cohen", first: 1) {
|
|
|
|
|
edges {
|
|
|
|
|
node {
|
|
|
|
|
beginArea {
|
|
|
|
|
name
|
|
|
|
|
}
|
|
|
|
|
endArea {
|
|
|
|
|
name
|
2016-12-10 02:55:41 +00:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
2016-12-11 20:37:25 +00:00
|
|
|
}
|
2017-11-07 05:54:56 +00:00
|
|
|
`,
|
|
|
|
|
(t, data) => {
|
2021-04-16 04:34:29 +00:00
|
|
|
const artists = data.search.artists.edges.map((edge) => edge.node);
|
|
|
|
|
t.true(artists.length === 1);
|
|
|
|
|
t.is(artists[0].beginArea.name, 'Westmount');
|
|
|
|
|
t.is(artists[0].endArea.name, 'Los Angeles');
|
2017-11-07 05:54:56 +00:00
|
|
|
}
|
2021-04-16 04:34:29 +00:00
|
|
|
);
|
2016-12-10 02:55:41 +00:00
|
|
|
|
2017-11-07 05:54:56 +00:00
|
|
|
test(
|
|
|
|
|
'relationships are grouped by target type',
|
|
|
|
|
testData,
|
|
|
|
|
`
|
2016-12-11 20:37:25 +00:00
|
|
|
{
|
|
|
|
|
lookup {
|
|
|
|
|
artist(mbid: "65314b12-0e08-43fa-ba33-baaa7b874c15") {
|
|
|
|
|
relationships {
|
|
|
|
|
artists(first: 5) {
|
|
|
|
|
edges {
|
|
|
|
|
node {
|
|
|
|
|
target {
|
|
|
|
|
__typename
|
2016-12-10 02:55:41 +00:00
|
|
|
}
|
2016-12-11 20:37:25 +00:00
|
|
|
targetType
|
2016-12-10 02:55:41 +00:00
|
|
|
}
|
|
|
|
|
}
|
2016-12-11 20:37:25 +00:00
|
|
|
}
|
|
|
|
|
recordings(first: 5) {
|
|
|
|
|
edges {
|
|
|
|
|
node {
|
|
|
|
|
target {
|
|
|
|
|
__typename
|
2016-12-10 02:55:41 +00:00
|
|
|
}
|
2016-12-11 20:37:25 +00:00
|
|
|
targetType
|
2016-12-10 02:55:41 +00:00
|
|
|
}
|
|
|
|
|
}
|
2016-12-11 20:37:25 +00:00
|
|
|
}
|
|
|
|
|
releases(first: 5) {
|
|
|
|
|
edges {
|
|
|
|
|
node {
|
|
|
|
|
target {
|
|
|
|
|
__typename
|
2016-12-10 02:55:41 +00:00
|
|
|
}
|
2016-12-11 20:37:25 +00:00
|
|
|
targetType
|
2016-12-10 02:55:41 +00:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
2016-12-11 20:37:25 +00:00
|
|
|
}
|
2017-11-07 05:54:56 +00:00
|
|
|
`,
|
|
|
|
|
(t, data) => {
|
2021-04-16 04:34:29 +00:00
|
|
|
const { relationships } = data.lookup.artist;
|
|
|
|
|
t.is(relationships.artists.edges.length, 5);
|
|
|
|
|
relationships.artists.edges.forEach((edge) => {
|
|
|
|
|
t.is(edge.node.targetType, 'artist');
|
|
|
|
|
t.is(edge.node.target.__typename, 'Artist');
|
|
|
|
|
});
|
|
|
|
|
t.is(relationships.recordings.edges.length, 5);
|
|
|
|
|
relationships.recordings.edges.forEach((edge) => {
|
|
|
|
|
t.is(edge.node.targetType, 'recording');
|
|
|
|
|
t.is(edge.node.target.__typename, 'Recording');
|
|
|
|
|
});
|
|
|
|
|
t.is(relationships.releases.edges.length, 5);
|
|
|
|
|
relationships.releases.edges.forEach((edge) => {
|
|
|
|
|
t.is(edge.node.targetType, 'release');
|
|
|
|
|
t.is(edge.node.target.__typename, 'Release');
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
);
|
2016-12-10 02:55:41 +00:00
|
|
|
|
2017-11-07 05:54:56 +00:00
|
|
|
test(
|
|
|
|
|
'relationships can be filtered by type',
|
|
|
|
|
testData,
|
|
|
|
|
`
|
2016-12-13 07:25:23 +00:00
|
|
|
{
|
|
|
|
|
lookup {
|
|
|
|
|
artist(mbid: "65314b12-0e08-43fa-ba33-baaa7b874c15") {
|
|
|
|
|
relationships {
|
|
|
|
|
artists(type: "parent") {
|
|
|
|
|
edges {
|
|
|
|
|
node {
|
|
|
|
|
targetType
|
|
|
|
|
type
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
2017-11-07 05:54:56 +00:00
|
|
|
`,
|
|
|
|
|
(t, data) => {
|
2021-04-16 04:34:29 +00:00
|
|
|
const { artist } = data.lookup;
|
|
|
|
|
const rels = artist.relationships.artists.edges.map((edge) => edge.node);
|
|
|
|
|
t.is(rels.length, 2);
|
|
|
|
|
rels.forEach((rel) => {
|
|
|
|
|
t.is(rel.targetType, 'artist');
|
|
|
|
|
t.is(rel.type, 'parent');
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
);
|
2016-12-13 07:25:23 +00:00
|
|
|
|
2017-11-07 05:54:56 +00:00
|
|
|
test(
|
|
|
|
|
'relationships can be filtered by type ID',
|
|
|
|
|
testData,
|
|
|
|
|
`
|
2016-12-13 07:25:23 +00:00
|
|
|
{
|
|
|
|
|
lookup {
|
|
|
|
|
artist(mbid: "65314b12-0e08-43fa-ba33-baaa7b874c15") {
|
|
|
|
|
relationships {
|
|
|
|
|
artists(typeID: "fd3927ba-fd51-4fa9-bcc2-e83637896fe8") {
|
|
|
|
|
edges {
|
|
|
|
|
node {
|
|
|
|
|
targetType
|
|
|
|
|
type
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
2017-11-07 05:54:56 +00:00
|
|
|
`,
|
|
|
|
|
(t, data) => {
|
2021-04-16 04:34:29 +00:00
|
|
|
const { artist } = data.lookup;
|
|
|
|
|
const rels = artist.relationships.artists.edges.map((edge) => edge.node);
|
|
|
|
|
t.is(rels.length, 1);
|
|
|
|
|
rels.forEach((rel) => {
|
|
|
|
|
t.is(rel.targetType, 'artist');
|
|
|
|
|
t.is(rel.type, 'involved with');
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
);
|
2016-12-13 07:25:23 +00:00
|
|
|
|
2017-11-07 05:54:56 +00:00
|
|
|
test(
|
|
|
|
|
'relationships can be filtered by direction',
|
|
|
|
|
testData,
|
|
|
|
|
`
|
2016-12-13 07:25:23 +00:00
|
|
|
{
|
|
|
|
|
lookup {
|
|
|
|
|
area(mbid: "10cb2ebd-1bc7-4c11-b10d-54f60c421d20") {
|
|
|
|
|
relationships {
|
|
|
|
|
isPartOf: areas(direction: "backward") {
|
|
|
|
|
edges {
|
|
|
|
|
node {
|
|
|
|
|
type
|
|
|
|
|
direction
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
hasParts: areas(direction: "forward") {
|
|
|
|
|
edges {
|
|
|
|
|
node {
|
|
|
|
|
type
|
|
|
|
|
direction
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
2017-11-07 05:54:56 +00:00
|
|
|
`,
|
|
|
|
|
(t, data) => {
|
2021-04-16 04:34:29 +00:00
|
|
|
const { area } = data.lookup;
|
|
|
|
|
const isPartOf = area.relationships.isPartOf.edges.map((edge) => edge.node);
|
|
|
|
|
const hasParts = area.relationships.hasParts.edges.map((edge) => edge.node);
|
|
|
|
|
t.true(isPartOf.length > 0);
|
|
|
|
|
t.true(hasParts.length > 0);
|
|
|
|
|
isPartOf.forEach((rel) => {
|
|
|
|
|
t.is(rel.type, 'part of');
|
|
|
|
|
t.is(rel.direction, 'backward');
|
|
|
|
|
});
|
|
|
|
|
hasParts.forEach((rel) => {
|
|
|
|
|
t.is(rel.type, 'part of');
|
|
|
|
|
t.is(rel.direction, 'forward');
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
);
|
2016-12-13 07:25:23 +00:00
|
|
|
|
2017-11-07 05:54:56 +00:00
|
|
|
test(
|
|
|
|
|
'area maps iso-3166-1-codes to isoCodes',
|
|
|
|
|
testData,
|
|
|
|
|
`
|
2016-12-11 20:37:25 +00:00
|
|
|
{
|
|
|
|
|
lookup {
|
|
|
|
|
area(mbid: "489ce91b-6658-3307-9877-795b68554c98") {
|
|
|
|
|
name
|
|
|
|
|
isoCodes
|
2016-12-10 02:55:41 +00:00
|
|
|
}
|
|
|
|
|
}
|
2016-12-11 20:37:25 +00:00
|
|
|
}
|
2017-11-07 05:54:56 +00:00
|
|
|
`,
|
|
|
|
|
(t, data) => {
|
2021-04-16 04:34:29 +00:00
|
|
|
t.deepEqual(data.lookup.area.isoCodes, ['US']);
|
2017-11-07 05:54:56 +00:00
|
|
|
}
|
2021-04-16 04:34:29 +00:00
|
|
|
);
|
2016-12-10 02:55:41 +00:00
|
|
|
|
2017-11-23 20:43:40 +00:00
|
|
|
test(
|
|
|
|
|
'area isoCodes accepts an argument to retrieve 3166-1, 3166-2, or 3166-3 codes',
|
|
|
|
|
testData,
|
|
|
|
|
`
|
|
|
|
|
{
|
|
|
|
|
lookup {
|
|
|
|
|
eastGermany: area(mbid: "d907b0ac-2956-386f-a246-62d55779aae1") {
|
|
|
|
|
name
|
|
|
|
|
isoDefault: isoCodes
|
|
|
|
|
iso3166_1: isoCodes(standard: "3166-1")
|
|
|
|
|
iso3166_2: isoCodes(standard: "3166-2")
|
|
|
|
|
iso3166_3: isoCodes(standard: "3166-3")
|
|
|
|
|
}
|
|
|
|
|
newYork: area(mbid: "75e398a3-5f3f-4224-9cd8-0fe44715bc95") {
|
|
|
|
|
name
|
|
|
|
|
isoDefault: isoCodes
|
|
|
|
|
iso3166_1: isoCodes(standard: "3166-1")
|
|
|
|
|
iso3166_2: isoCodes(standard: "3166-2")
|
|
|
|
|
iso3166_3: isoCodes(standard: "3166-3")
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
`,
|
|
|
|
|
(t, data) => {
|
2021-04-16 04:34:29 +00:00
|
|
|
t.deepEqual(data.lookup.eastGermany.isoDefault, ['XG']);
|
|
|
|
|
t.deepEqual(data.lookup.eastGermany.iso3166_1, ['XG']);
|
|
|
|
|
t.is(data.lookup.eastGermany.iso3166_2, null);
|
|
|
|
|
t.deepEqual(data.lookup.eastGermany.iso3166_3, ['DDDE']);
|
2017-11-23 20:43:40 +00:00
|
|
|
|
2021-04-16 04:34:29 +00:00
|
|
|
t.is(data.lookup.newYork.isoDefault, null);
|
|
|
|
|
t.is(data.lookup.newYork.iso3166_1, null);
|
|
|
|
|
t.deepEqual(data.lookup.newYork.iso3166_2, ['US-NY']);
|
|
|
|
|
t.is(data.lookup.newYork.iso3166_3, null);
|
2017-11-23 20:43:40 +00:00
|
|
|
}
|
2021-04-16 04:34:29 +00:00
|
|
|
);
|
2017-11-23 20:43:40 +00:00
|
|
|
|
2017-11-07 05:54:56 +00:00
|
|
|
test(
|
|
|
|
|
'areas have a type and typeID',
|
|
|
|
|
testData,
|
|
|
|
|
`
|
2017-11-04 22:32:05 +00:00
|
|
|
{
|
|
|
|
|
search {
|
|
|
|
|
areas(query: "Germany", first: 5) {
|
|
|
|
|
nodes {
|
|
|
|
|
name
|
|
|
|
|
type
|
|
|
|
|
typeID
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
2017-11-07 05:54:56 +00:00
|
|
|
`,
|
|
|
|
|
(t, data) => {
|
2021-04-16 04:34:29 +00:00
|
|
|
t.snapshot(data);
|
2017-11-07 05:54:56 +00:00
|
|
|
}
|
2021-04-16 04:34:29 +00:00
|
|
|
);
|
2017-11-04 22:32:05 +00:00
|
|
|
|
2017-11-07 05:54:56 +00:00
|
|
|
test(
|
|
|
|
|
'alias locales use the locale scalar',
|
|
|
|
|
testData,
|
|
|
|
|
`
|
2016-12-11 20:37:25 +00:00
|
|
|
{
|
|
|
|
|
lookup {
|
|
|
|
|
artist(mbid: "f99b7d67-4e63-4678-aa66-4c6ac0f7d24a") {
|
|
|
|
|
aliases {
|
|
|
|
|
name
|
|
|
|
|
locale
|
2016-12-10 02:55:41 +00:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
2016-12-11 20:37:25 +00:00
|
|
|
}
|
2017-11-07 05:54:56 +00:00
|
|
|
`,
|
|
|
|
|
(t, data) => {
|
2021-04-16 04:34:29 +00:00
|
|
|
const { aliases } = data.lookup.artist;
|
|
|
|
|
t.true(
|
|
|
|
|
aliases.some((alias) => alias.locale === 'en' && alias.name === 'PSY')
|
|
|
|
|
);
|
|
|
|
|
t.true(
|
|
|
|
|
aliases.some((alias) => alias.locale === 'ko' && alias.name === '싸이')
|
|
|
|
|
);
|
2017-11-07 05:54:56 +00:00
|
|
|
}
|
2021-04-16 04:34:29 +00:00
|
|
|
);
|
2016-12-10 02:55:41 +00:00
|
|
|
|
2017-11-07 05:54:56 +00:00
|
|
|
test(
|
|
|
|
|
'work ISWCs use the ISWC scalar',
|
|
|
|
|
testData,
|
|
|
|
|
`
|
2016-12-11 20:37:25 +00:00
|
|
|
{
|
|
|
|
|
lookup {
|
|
|
|
|
work(mbid: "ef7d0814-da6a-32f5-a600-ff81cffd1aed") {
|
|
|
|
|
title
|
|
|
|
|
iswcs
|
2016-12-10 02:55:41 +00:00
|
|
|
}
|
|
|
|
|
}
|
2016-12-11 20:37:25 +00:00
|
|
|
}
|
2017-11-07 05:54:56 +00:00
|
|
|
`,
|
|
|
|
|
(t, data) => {
|
2021-04-16 04:34:29 +00:00
|
|
|
const { work } = data.lookup;
|
|
|
|
|
t.is(work.title, 'The Partisan');
|
|
|
|
|
t.deepEqual(work.iswcs, ['T-900.755.682-3']);
|
2017-11-07 05:54:56 +00:00
|
|
|
}
|
2021-04-16 04:34:29 +00:00
|
|
|
);
|
2016-12-10 02:55:41 +00:00
|
|
|
|
2017-11-07 05:54:56 +00:00
|
|
|
test(
|
|
|
|
|
'URLs may be looked up by resource',
|
|
|
|
|
testData,
|
|
|
|
|
`
|
2016-12-11 20:37:25 +00:00
|
|
|
{
|
|
|
|
|
lookup {
|
|
|
|
|
url(resource: "http://www.nirvana.com/") {
|
|
|
|
|
mbid
|
|
|
|
|
resource
|
2016-12-10 02:55:41 +00:00
|
|
|
}
|
|
|
|
|
}
|
2016-12-11 20:37:25 +00:00
|
|
|
}
|
2017-11-07 05:54:56 +00:00
|
|
|
`,
|
|
|
|
|
(t, data) => {
|
2021-04-16 04:34:29 +00:00
|
|
|
const { url } = data.lookup;
|
|
|
|
|
t.is(url.mbid, '4347ffe2-82ec-4059-9520-6a1a3f73a304');
|
|
|
|
|
t.is(url.resource, 'http://www.nirvana.com/');
|
2017-11-07 05:54:56 +00:00
|
|
|
}
|
2021-04-16 04:34:29 +00:00
|
|
|
);
|
2016-12-10 02:55:41 +00:00
|
|
|
|
2017-11-07 05:54:56 +00:00
|
|
|
test(
|
|
|
|
|
'throws an error if given a malformed resource URL',
|
2018-08-04 19:04:19 +00:00
|
|
|
testError,
|
2017-11-07 05:54:56 +00:00
|
|
|
`
|
2016-12-11 20:37:25 +00:00
|
|
|
{
|
|
|
|
|
lookup {
|
|
|
|
|
url(resource: "http:foo") {
|
|
|
|
|
mbid
|
|
|
|
|
resource
|
2016-12-10 02:55:41 +00:00
|
|
|
}
|
|
|
|
|
}
|
2016-12-11 20:37:25 +00:00
|
|
|
}
|
2017-11-07 05:54:56 +00:00
|
|
|
`,
|
2018-08-04 19:04:19 +00:00
|
|
|
(t, errors) => {
|
2021-04-16 04:34:29 +00:00
|
|
|
t.regex(errors[0].message, /Malformed URL: http:foo/);
|
2017-11-07 05:54:56 +00:00
|
|
|
}
|
2021-04-16 04:34:29 +00:00
|
|
|
);
|
2016-12-10 02:55:41 +00:00
|
|
|
|
2017-11-07 05:54:56 +00:00
|
|
|
test(
|
|
|
|
|
'release groups can be browsed by type',
|
|
|
|
|
testData,
|
|
|
|
|
`
|
2016-12-11 20:37:25 +00:00
|
|
|
{
|
|
|
|
|
browse {
|
|
|
|
|
releaseGroups(artist: "5b11f4ce-a62d-471e-81fc-a69a8278c7da", type: EP) {
|
|
|
|
|
edges {
|
|
|
|
|
node {
|
|
|
|
|
primaryType
|
2016-12-10 02:55:41 +00:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
2016-12-11 20:37:25 +00:00
|
|
|
}
|
2017-11-07 05:54:56 +00:00
|
|
|
`,
|
|
|
|
|
(t, data) => {
|
2021-04-16 04:34:29 +00:00
|
|
|
const releaseGroups = data.browse.releaseGroups.edges.map(
|
|
|
|
|
(edge) => edge.node
|
|
|
|
|
);
|
|
|
|
|
t.is(releaseGroups.length, 8);
|
|
|
|
|
releaseGroups.forEach((releaseGroup) =>
|
|
|
|
|
t.is(releaseGroup.primaryType, 'EP')
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
);
|
2016-12-10 02:55:41 +00:00
|
|
|
|
2017-11-07 05:54:56 +00:00
|
|
|
test(
|
|
|
|
|
'releases can be browsed by type and status',
|
|
|
|
|
testData,
|
|
|
|
|
`
|
2016-12-11 20:37:25 +00:00
|
|
|
{
|
|
|
|
|
browse {
|
|
|
|
|
releases(artist: "5b11f4ce-a62d-471e-81fc-a69a8278c7da", type: EP, status: BOOTLEG) {
|
|
|
|
|
edges {
|
|
|
|
|
node {
|
|
|
|
|
status
|
2016-12-10 02:55:41 +00:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
2016-12-11 20:37:25 +00:00
|
|
|
}
|
2017-11-07 05:54:56 +00:00
|
|
|
`,
|
|
|
|
|
(t, data) => {
|
2021-04-16 04:34:29 +00:00
|
|
|
const releases = data.browse.releases.edges.map((edge) => edge.node);
|
|
|
|
|
t.is(releases.length, 6);
|
|
|
|
|
releases.forEach((release) => t.is(release.status, 'BOOTLEG'));
|
2017-11-07 05:54:56 +00:00
|
|
|
}
|
2021-04-16 04:34:29 +00:00
|
|
|
);
|
2016-12-10 02:55:41 +00:00
|
|
|
|
2017-11-07 05:54:56 +00:00
|
|
|
test(
|
|
|
|
|
'releases have an ASIN field',
|
|
|
|
|
testData,
|
|
|
|
|
`
|
2016-12-11 20:37:25 +00:00
|
|
|
{
|
|
|
|
|
lookup {
|
|
|
|
|
release(mbid: "d5cdb7fd-c7e9-460a-9549-8a369655cc52") {
|
|
|
|
|
asin
|
2016-12-10 02:55:41 +00:00
|
|
|
}
|
|
|
|
|
}
|
2016-12-11 20:37:25 +00:00
|
|
|
}
|
2017-11-07 05:54:56 +00:00
|
|
|
`,
|
|
|
|
|
(t, data) => {
|
2021-04-16 04:34:29 +00:00
|
|
|
const { release } = data.lookup;
|
|
|
|
|
t.is(release.asin, 'B01KN6XDS6');
|
2017-11-07 05:54:56 +00:00
|
|
|
}
|
2021-04-16 04:34:29 +00:00
|
|
|
);
|
2016-12-10 17:51:33 +00:00
|
|
|
|
2017-11-07 05:54:56 +00:00
|
|
|
test(
|
|
|
|
|
'artists have a list of ISNIs and IPIs',
|
|
|
|
|
testData,
|
|
|
|
|
`
|
2016-12-11 20:37:25 +00:00
|
|
|
{
|
|
|
|
|
lookup {
|
|
|
|
|
artist(mbid: "65314b12-0e08-43fa-ba33-baaa7b874c15") {
|
|
|
|
|
ipis
|
|
|
|
|
isnis
|
2016-12-10 17:51:33 +00:00
|
|
|
}
|
|
|
|
|
}
|
2016-12-11 20:37:25 +00:00
|
|
|
}
|
2017-11-07 05:54:56 +00:00
|
|
|
`,
|
|
|
|
|
(t, data) => {
|
2021-04-16 04:34:29 +00:00
|
|
|
const { artist } = data.lookup;
|
|
|
|
|
t.deepEqual(artist.ipis, ['00006457004']);
|
|
|
|
|
t.deepEqual(artist.isnis, ['0000000110273481']);
|
2017-11-07 05:54:56 +00:00
|
|
|
}
|
2021-04-16 04:34:29 +00:00
|
|
|
);
|
2016-12-11 20:32:58 +00:00
|
|
|
|
2017-11-07 05:54:56 +00:00
|
|
|
test(
|
|
|
|
|
'artistCredits is an alias for artistCredit',
|
|
|
|
|
testData,
|
|
|
|
|
`
|
2016-12-11 20:37:25 +00:00
|
|
|
{
|
|
|
|
|
lookup {
|
|
|
|
|
recording(mbid: "07649758-09c8-4d70-bc6f-5c37ab36334d") {
|
|
|
|
|
artistCredit {
|
|
|
|
|
name
|
|
|
|
|
joinPhrase
|
2016-12-11 20:32:58 +00:00
|
|
|
}
|
2016-12-11 20:37:25 +00:00
|
|
|
artistCredits {
|
|
|
|
|
name
|
|
|
|
|
joinPhrase
|
2016-12-11 20:32:58 +00:00
|
|
|
}
|
2016-12-11 20:37:25 +00:00
|
|
|
}
|
|
|
|
|
release(mbid: "d5cdb7fd-c7e9-460a-9549-8a369655cc52") {
|
|
|
|
|
artistCredit {
|
|
|
|
|
name
|
|
|
|
|
joinPhrase
|
|
|
|
|
}
|
|
|
|
|
artistCredits {
|
|
|
|
|
name
|
|
|
|
|
joinPhrase
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
releaseGroup(mbid: "53614893-6f25-4519-9cae-b1db904e2887") {
|
|
|
|
|
artistCredit {
|
|
|
|
|
name
|
|
|
|
|
joinPhrase
|
|
|
|
|
}
|
|
|
|
|
artistCredits {
|
|
|
|
|
name
|
|
|
|
|
joinPhrase
|
2016-12-11 20:32:58 +00:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
2016-12-11 20:37:25 +00:00
|
|
|
}
|
2017-11-07 05:54:56 +00:00
|
|
|
`,
|
|
|
|
|
(t, data) => {
|
2021-04-16 04:34:29 +00:00
|
|
|
const { recording, release, releaseGroup } = data.lookup;
|
2017-11-07 05:54:56 +00:00
|
|
|
t.deepEqual(recording.artistCredit, [
|
2021-04-16 04:34:29 +00:00
|
|
|
{ name: 'Holly Golightly & The Brokeoffs', joinPhrase: '' },
|
|
|
|
|
]);
|
|
|
|
|
t.deepEqual(recording.artistCredits, recording.artistCredit);
|
2016-12-11 20:32:58 +00:00
|
|
|
|
2017-11-07 05:54:56 +00:00
|
|
|
t.deepEqual(release.artistCredit, [
|
2021-04-16 04:34:29 +00:00
|
|
|
{ name: 'Leonard Cohen', joinPhrase: '' },
|
|
|
|
|
]);
|
|
|
|
|
t.deepEqual(release.artistCredits, release.artistCredit);
|
2016-12-11 20:32:58 +00:00
|
|
|
|
2017-11-07 05:54:56 +00:00
|
|
|
t.deepEqual(releaseGroup.artistCredit, [
|
|
|
|
|
{ name: 'DJ Muggs', joinPhrase: ' vs. ' },
|
2021-04-16 04:34:29 +00:00
|
|
|
{ name: 'Ill Bill', joinPhrase: '' },
|
|
|
|
|
]);
|
|
|
|
|
t.deepEqual(releaseGroup.artistCredits, releaseGroup.artistCredit);
|
|
|
|
|
}
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
test(
|
|
|
|
|
'recordings have a list of ISRCs',
|
|
|
|
|
testData,
|
|
|
|
|
`
|
|
|
|
|
{
|
|
|
|
|
lookup {
|
|
|
|
|
recording(mbid: "9f9cf187-d6f9-437f-9d98-d59cdbd52757") {
|
|
|
|
|
isrcs
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
`,
|
|
|
|
|
(t, data) => {
|
|
|
|
|
t.true(data.lookup.recording.isrcs.includes('GBAYE9701376'));
|
|
|
|
|
t.true(data.lookup.recording.isrcs.includes('GBBKS1700108'));
|
2017-11-07 05:54:56 +00:00
|
|
|
}
|
2021-04-16 04:34:29 +00:00
|
|
|
);
|
2016-12-11 21:09:28 +00:00
|
|
|
|
2017-11-07 05:54:56 +00:00
|
|
|
test(
|
|
|
|
|
'recordings can be browsed by ISRC',
|
|
|
|
|
testData,
|
|
|
|
|
`
|
2016-12-11 21:09:28 +00:00
|
|
|
{
|
|
|
|
|
browse {
|
|
|
|
|
recordings(isrc: "USSUB0200002") {
|
|
|
|
|
totalCount
|
|
|
|
|
edges {
|
|
|
|
|
node {
|
|
|
|
|
title
|
|
|
|
|
isrcs
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
2017-11-07 05:54:56 +00:00
|
|
|
`,
|
|
|
|
|
(t, data) => {
|
2021-04-16 04:34:29 +00:00
|
|
|
const recordings = data.browse.recordings.edges.map((edge) => edge.node);
|
|
|
|
|
t.true(data.browse.recordings.totalCount >= 1);
|
|
|
|
|
t.true(
|
|
|
|
|
recordings.every((recording) => recording.isrcs.includes('USSUB0200002'))
|
|
|
|
|
);
|
2017-11-07 05:54:56 +00:00
|
|
|
}
|
2021-04-16 04:34:29 +00:00
|
|
|
);
|
2016-12-11 21:09:28 +00:00
|
|
|
|
2017-11-07 05:54:56 +00:00
|
|
|
test(
|
|
|
|
|
'releases can be browsed by Disc ID',
|
|
|
|
|
testData,
|
|
|
|
|
`
|
2016-12-11 21:09:28 +00:00
|
|
|
{
|
|
|
|
|
browse {
|
|
|
|
|
releases(discID: "XzPS7vW.HPHsYemQh0HBUGr8vuU-") {
|
|
|
|
|
totalCount
|
|
|
|
|
edges {
|
|
|
|
|
node {
|
|
|
|
|
mbid
|
|
|
|
|
title
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
2017-11-07 05:54:56 +00:00
|
|
|
`,
|
|
|
|
|
(t, data) => {
|
2021-04-16 04:34:29 +00:00
|
|
|
const releases = data.browse.releases.edges.map((edge) => edge.node);
|
|
|
|
|
t.true(data.browse.releases.totalCount >= 2);
|
2017-11-07 05:54:56 +00:00
|
|
|
t.true(
|
|
|
|
|
releases.some(
|
2021-04-16 04:34:29 +00:00
|
|
|
(release) => release.mbid === '5a6e5ad7-c2bd-3484-a20e-121bf981c883'
|
2017-11-07 05:54:56 +00:00
|
|
|
)
|
2021-04-16 04:34:29 +00:00
|
|
|
);
|
2017-11-07 05:54:56 +00:00
|
|
|
t.true(
|
|
|
|
|
releases.some(
|
2021-04-16 04:34:29 +00:00
|
|
|
(release) => release.mbid === '96f6f90e-d831-4f37-bf72-ce2982e459fb'
|
2017-11-07 05:54:56 +00:00
|
|
|
)
|
2021-04-16 04:34:29 +00:00
|
|
|
);
|
2017-11-07 05:54:56 +00:00
|
|
|
}
|
2021-04-16 04:34:29 +00:00
|
|
|
);
|
2016-12-11 21:09:28 +00:00
|
|
|
|
2017-11-07 05:54:56 +00:00
|
|
|
test(
|
|
|
|
|
'works can be browsed by ISWC',
|
|
|
|
|
testData,
|
|
|
|
|
`
|
2016-12-11 21:09:28 +00:00
|
|
|
{
|
|
|
|
|
browse {
|
|
|
|
|
works(iswc: "T-900.755.682-3") {
|
|
|
|
|
totalCount
|
|
|
|
|
edges {
|
|
|
|
|
node {
|
|
|
|
|
title
|
|
|
|
|
iswcs
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
2017-11-07 05:54:56 +00:00
|
|
|
`,
|
|
|
|
|
(t, data) => {
|
2021-04-16 04:34:29 +00:00
|
|
|
const works = data.browse.works.edges.map((edge) => edge.node);
|
|
|
|
|
t.is(data.browse.works.totalCount, 1);
|
|
|
|
|
t.deepEqual(works, [{ title: 'The Partisan', iswcs: ['T-900.755.682-3'] }]);
|
2017-11-07 05:54:56 +00:00
|
|
|
}
|
2021-04-16 04:34:29 +00:00
|
|
|
);
|
2016-12-12 00:12:54 +00:00
|
|
|
|
2017-11-07 05:54:56 +00:00
|
|
|
test(
|
|
|
|
|
'recordings have a length in milliseconds',
|
|
|
|
|
testData,
|
|
|
|
|
`
|
2016-12-12 00:12:54 +00:00
|
|
|
{
|
|
|
|
|
lookup {
|
|
|
|
|
recording(mbid: "9f9cf187-d6f9-437f-9d98-d59cdbd52757") {
|
|
|
|
|
length
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
2017-11-07 05:54:56 +00:00
|
|
|
`,
|
|
|
|
|
(t, data) => {
|
2021-04-16 04:34:29 +00:00
|
|
|
const { recording } = data.lookup;
|
|
|
|
|
t.is(recording.length, 383813);
|
2017-11-07 05:54:56 +00:00
|
|
|
}
|
2021-04-16 04:34:29 +00:00
|
|
|
);
|
2016-12-12 04:03:05 +00:00
|
|
|
|
2017-11-07 05:54:56 +00:00
|
|
|
test(
|
|
|
|
|
'collections can be browsed by the entities they contain',
|
|
|
|
|
testData,
|
|
|
|
|
`
|
2016-12-12 04:03:05 +00:00
|
|
|
{
|
|
|
|
|
browse {
|
|
|
|
|
collections(artist: "24f1766e-9635-4d58-a4d4-9413f9f98a4c") {
|
|
|
|
|
totalCount
|
|
|
|
|
edges {
|
|
|
|
|
node {
|
|
|
|
|
name
|
|
|
|
|
editor
|
|
|
|
|
entityType
|
|
|
|
|
type
|
|
|
|
|
artists {
|
|
|
|
|
totalCount
|
|
|
|
|
edges {
|
|
|
|
|
node {
|
|
|
|
|
mbid
|
|
|
|
|
name
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
2017-11-07 05:54:56 +00:00
|
|
|
`,
|
|
|
|
|
(t, data) => {
|
2021-04-16 04:34:29 +00:00
|
|
|
const collections = data.browse.collections.edges.map((edge) => edge.node);
|
|
|
|
|
t.true(collections.length >= 2);
|
|
|
|
|
t.true(collections.some((collection) => collection.editor === 'arist.on'));
|
2017-11-07 05:54:56 +00:00
|
|
|
t.true(
|
2021-04-16 04:34:29 +00:00
|
|
|
collections.some((collection) => collection.editor === 'ListMyCDs.com')
|
|
|
|
|
);
|
|
|
|
|
collections.forEach((collection) => {
|
|
|
|
|
t.is(collection.entityType, 'artist');
|
|
|
|
|
t.is(collection.type, 'Artist');
|
|
|
|
|
t.true(collection.artists.totalCount > 0);
|
|
|
|
|
t.true(collection.artists.edges.length > 0);
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
);
|
2016-12-12 04:03:05 +00:00
|
|
|
|
2017-11-07 05:54:56 +00:00
|
|
|
test(
|
|
|
|
|
'collections can be looked up by MBID',
|
|
|
|
|
testData,
|
|
|
|
|
`
|
2016-12-12 04:03:05 +00:00
|
|
|
{
|
|
|
|
|
lookup {
|
|
|
|
|
collection(mbid: "85da782d-2ec0-41ec-a97f-9be464bba309") {
|
|
|
|
|
name
|
|
|
|
|
releases {
|
|
|
|
|
edges {
|
|
|
|
|
node {
|
|
|
|
|
title
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
2017-11-07 05:54:56 +00:00
|
|
|
`,
|
|
|
|
|
(t, data) => {
|
2021-04-16 04:34:29 +00:00
|
|
|
const { collection } = data.lookup;
|
|
|
|
|
t.is(collection.name, 'Beets Music Collection');
|
|
|
|
|
t.is(collection.releases.edges.length, 25);
|
2017-11-07 05:54:56 +00:00
|
|
|
}
|
2021-04-16 04:34:29 +00:00
|
|
|
);
|
2016-12-12 08:34:26 +00:00
|
|
|
|
2017-11-07 05:54:56 +00:00
|
|
|
test(
|
|
|
|
|
'entities have a collections field',
|
|
|
|
|
testData,
|
|
|
|
|
`
|
2016-12-12 08:34:26 +00:00
|
|
|
{
|
|
|
|
|
lookup {
|
|
|
|
|
release(mbid: "0702057c-cb90-43d3-b7b4-6d0cc37e8644") {
|
|
|
|
|
title
|
|
|
|
|
collections {
|
|
|
|
|
totalCount
|
|
|
|
|
edges {
|
|
|
|
|
node {
|
|
|
|
|
editor
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
artist(mbid: "24f1766e-9635-4d58-a4d4-9413f9f98a4c") {
|
|
|
|
|
name
|
|
|
|
|
collections {
|
|
|
|
|
totalCount
|
|
|
|
|
edges {
|
|
|
|
|
node {
|
|
|
|
|
editor
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
2017-11-07 05:54:56 +00:00
|
|
|
`,
|
|
|
|
|
(t, data) => {
|
2021-04-16 04:34:29 +00:00
|
|
|
const { release, artist } = data.lookup;
|
|
|
|
|
t.true(release.collections.totalCount > 0);
|
|
|
|
|
t.true(release.collections.edges.length > 0);
|
|
|
|
|
t.true(artist.collections.edges.length > 0);
|
2017-11-07 05:54:56 +00:00
|
|
|
}
|
2021-04-16 04:34:29 +00:00
|
|
|
);
|
2016-12-12 09:01:40 +00:00
|
|
|
|
2017-11-07 05:54:56 +00:00
|
|
|
test(
|
|
|
|
|
'releases support a list of media',
|
|
|
|
|
testData,
|
|
|
|
|
`
|
2016-12-12 09:01:40 +00:00
|
|
|
{
|
|
|
|
|
lookup {
|
|
|
|
|
release(mbid: "a4864e94-6d75-4ade-bc93-0dabf3521453") {
|
|
|
|
|
media {
|
|
|
|
|
title
|
|
|
|
|
format
|
|
|
|
|
formatID
|
|
|
|
|
position
|
|
|
|
|
trackCount
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
2017-11-07 05:54:56 +00:00
|
|
|
`,
|
|
|
|
|
(t, data) => {
|
2021-04-16 04:34:29 +00:00
|
|
|
const { release } = data.lookup;
|
2017-11-07 05:54:56 +00:00
|
|
|
t.deepEqual(release.media, [
|
|
|
|
|
{
|
|
|
|
|
title: 'Left',
|
|
|
|
|
format: 'CD',
|
|
|
|
|
formatID: '9712d52a-4509-3d4b-a1a2-67c88c643e31',
|
|
|
|
|
position: 1,
|
2021-04-16 04:34:29 +00:00
|
|
|
trackCount: 12,
|
2017-11-07 05:54:56 +00:00
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
title: 'Right',
|
|
|
|
|
format: 'CD',
|
|
|
|
|
formatID: '9712d52a-4509-3d4b-a1a2-67c88c643e31',
|
|
|
|
|
position: 2,
|
2021-04-16 04:34:29 +00:00
|
|
|
trackCount: 11,
|
|
|
|
|
},
|
|
|
|
|
]);
|
2017-11-07 05:54:56 +00:00
|
|
|
}
|
2021-04-16 04:34:29 +00:00
|
|
|
);
|
2016-12-13 07:25:23 +00:00
|
|
|
|
2017-11-07 05:54:56 +00:00
|
|
|
test(
|
|
|
|
|
'throws an error if looking up a URL without an argument',
|
|
|
|
|
testError,
|
|
|
|
|
`
|
2016-12-13 07:25:23 +00:00
|
|
|
{
|
|
|
|
|
lookup {
|
|
|
|
|
url {
|
|
|
|
|
mbid
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
2017-11-07 05:54:56 +00:00
|
|
|
`,
|
|
|
|
|
(t, errors) => {
|
|
|
|
|
t.is(
|
|
|
|
|
errors[0].message,
|
|
|
|
|
'Lookups by a field other than MBID must provide: resource'
|
2021-04-16 04:34:29 +00:00
|
|
|
);
|
2017-11-07 05:54:56 +00:00
|
|
|
}
|
2021-04-16 04:34:29 +00:00
|
|
|
);
|
2016-12-14 04:50:38 +00:00
|
|
|
|
2017-11-07 05:54:56 +00:00
|
|
|
test(
|
|
|
|
|
'some entities support ratings',
|
|
|
|
|
testData,
|
|
|
|
|
`
|
2016-12-14 04:50:38 +00:00
|
|
|
{
|
|
|
|
|
lookup {
|
|
|
|
|
event(mbid: "eec75a81-8864-4cea-b8b4-e99cd08b29f1") {
|
|
|
|
|
rating {
|
|
|
|
|
voteCount
|
|
|
|
|
value
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
work(mbid: "12b53203-64af-3a94-b3ec-11fad7c7d809") {
|
|
|
|
|
rating {
|
|
|
|
|
voteCount
|
|
|
|
|
value
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
browse {
|
|
|
|
|
artists(work: "8a25ce1e-8695-42c0-b668-8f0aa057c72b") {
|
|
|
|
|
edges {
|
|
|
|
|
node {
|
|
|
|
|
rating {
|
|
|
|
|
voteCount
|
|
|
|
|
value
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
recordings(artist: "c8da2e40-bd28-4d4e-813a-bd2f51958ba8") {
|
|
|
|
|
edges {
|
|
|
|
|
node {
|
|
|
|
|
rating {
|
|
|
|
|
voteCount
|
|
|
|
|
value
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
search {
|
|
|
|
|
labels(query: "Fin Records") {
|
|
|
|
|
edges {
|
|
|
|
|
node {
|
|
|
|
|
rating {
|
|
|
|
|
voteCount
|
|
|
|
|
value
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
releaseGroups(query: "arid:c8da2e40-bd28-4d4e-813a-bd2f51958ba8") {
|
|
|
|
|
edges {
|
|
|
|
|
node {
|
|
|
|
|
rating {
|
|
|
|
|
voteCount
|
|
|
|
|
value
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
2017-11-07 05:54:56 +00:00
|
|
|
`,
|
|
|
|
|
(t, data) => {
|
2021-04-16 04:34:29 +00:00
|
|
|
const { event, work } = data.lookup;
|
|
|
|
|
const artists = data.browse.artists.edges.map((edge) => edge.node);
|
|
|
|
|
const recordings = data.browse.recordings.edges.map((edge) => edge.node);
|
|
|
|
|
const labels = data.search.labels.edges.map((edge) => edge.node);
|
|
|
|
|
const releaseGroups = data.search.releaseGroups.edges.map(
|
|
|
|
|
(edge) => edge.node
|
|
|
|
|
);
|
|
|
|
|
t.is(event.rating.voteCount, 0);
|
|
|
|
|
t.is(event.rating.value, null);
|
|
|
|
|
t.true(work.rating.voteCount > 0);
|
|
|
|
|
t.true(work.rating.value >= 4);
|
|
|
|
|
t.true(artists.some((artist) => artist.rating.voteCount > 0));
|
|
|
|
|
t.true(artists.some((artist) => artist.rating.value > 3));
|
|
|
|
|
t.true(recordings.some((recording) => recording.rating.voteCount > 0));
|
|
|
|
|
t.true(recordings.some((recording) => recording.rating.value > 3));
|
|
|
|
|
t.true(labels.some((label) => label.rating.voteCount > 0));
|
|
|
|
|
t.true(labels.some((label) => label.rating.value > 3));
|
2017-11-07 05:54:56 +00:00
|
|
|
t.true(
|
2021-04-16 04:34:29 +00:00
|
|
|
releaseGroups.some((releaseGroup) => releaseGroup.rating.voteCount > 0)
|
|
|
|
|
);
|
|
|
|
|
t.true(releaseGroups.some((releaseGroup) => releaseGroup.rating.value > 3));
|
2017-11-07 05:54:56 +00:00
|
|
|
}
|
2021-04-16 04:34:29 +00:00
|
|
|
);
|
2016-12-14 05:18:33 +00:00
|
|
|
|
2017-11-07 05:54:56 +00:00
|
|
|
test(
|
|
|
|
|
'discs can be looked up by disc ID',
|
|
|
|
|
testData,
|
|
|
|
|
`
|
2016-12-14 05:18:33 +00:00
|
|
|
{
|
|
|
|
|
lookup {
|
|
|
|
|
disc(discID: "TMXdzZkTcc9Jq24PD0w5J9_AXms-") {
|
|
|
|
|
id
|
|
|
|
|
discID
|
|
|
|
|
offsetCount
|
|
|
|
|
offsets
|
|
|
|
|
sectors
|
|
|
|
|
releases {
|
|
|
|
|
totalCount
|
|
|
|
|
edges {
|
|
|
|
|
node {
|
|
|
|
|
mbid
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
2017-11-07 05:54:56 +00:00
|
|
|
`,
|
|
|
|
|
(t, data) => {
|
2021-04-16 04:34:29 +00:00
|
|
|
const { disc } = data.lookup;
|
|
|
|
|
t.is(disc.discID, 'TMXdzZkTcc9Jq24PD0w5J9_AXms-');
|
|
|
|
|
t.is(disc.offsetCount, 9);
|
|
|
|
|
t.is(disc.sectors, 193443);
|
2017-11-07 05:54:56 +00:00
|
|
|
t.deepEqual(disc.offsets, [
|
|
|
|
|
150,
|
|
|
|
|
18190,
|
|
|
|
|
34163,
|
|
|
|
|
66150,
|
|
|
|
|
87453,
|
|
|
|
|
116853,
|
|
|
|
|
151413,
|
|
|
|
|
166833,
|
2021-04-16 04:34:29 +00:00
|
|
|
184123,
|
|
|
|
|
]);
|
|
|
|
|
t.is(disc.releases.totalCount, 1);
|
|
|
|
|
t.is(disc.releases.edges.length, 1);
|
2017-11-07 05:54:56 +00:00
|
|
|
t.is(
|
|
|
|
|
disc.releases.edges[0].node.mbid,
|
|
|
|
|
'7f6d3088-837d-495e-905f-be5c70ac2d82'
|
2021-04-16 04:34:29 +00:00
|
|
|
);
|
2017-11-07 05:54:56 +00:00
|
|
|
}
|
2021-04-16 04:34:29 +00:00
|
|
|
);
|
2016-12-14 05:18:33 +00:00
|
|
|
|
2017-11-07 05:54:56 +00:00
|
|
|
test(
|
|
|
|
|
'release media has a list of discs',
|
|
|
|
|
testData,
|
|
|
|
|
`
|
2016-12-14 05:18:33 +00:00
|
|
|
{
|
|
|
|
|
lookup {
|
|
|
|
|
release(mbid: "7f6d3088-837d-495e-905f-be5c70ac2d82") {
|
|
|
|
|
media {
|
|
|
|
|
discs {
|
|
|
|
|
discID
|
|
|
|
|
releases {
|
|
|
|
|
totalCount
|
|
|
|
|
edges {
|
|
|
|
|
node {
|
|
|
|
|
mbid
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
2017-11-07 05:54:56 +00:00
|
|
|
`,
|
|
|
|
|
(t, data) => {
|
2021-04-16 04:34:29 +00:00
|
|
|
const { release } = data.lookup;
|
|
|
|
|
t.is(release.media.length, 1);
|
|
|
|
|
t.is(release.media[0].discs.length, 2);
|
2017-11-07 05:54:56 +00:00
|
|
|
}
|
2021-04-16 04:34:29 +00:00
|
|
|
);
|
2016-12-14 05:18:33 +00:00
|
|
|
|
2018-08-04 19:04:19 +00:00
|
|
|
// FIXME: API seems to have changed, potentially a bug in MusicBrainz.
|
2021-04-16 04:34:29 +00:00
|
|
|
test(
|
2017-11-07 05:54:56 +00:00
|
|
|
'disc queries can be deeply nested',
|
|
|
|
|
testData,
|
|
|
|
|
`
|
2016-12-14 05:18:33 +00:00
|
|
|
{
|
|
|
|
|
lookup {
|
|
|
|
|
disc(discID: "TMXdzZkTcc9Jq24PD0w5J9_AXms-") {
|
|
|
|
|
discID
|
|
|
|
|
offsetCount
|
|
|
|
|
offsets
|
|
|
|
|
sectors
|
|
|
|
|
releases {
|
|
|
|
|
totalCount
|
|
|
|
|
edges {
|
|
|
|
|
node {
|
|
|
|
|
mbid
|
|
|
|
|
title
|
|
|
|
|
date
|
|
|
|
|
media {
|
|
|
|
|
discs {
|
|
|
|
|
discID
|
|
|
|
|
releases {
|
|
|
|
|
edges {
|
|
|
|
|
node {
|
|
|
|
|
date
|
|
|
|
|
media {
|
|
|
|
|
discs {
|
|
|
|
|
discID
|
|
|
|
|
releases {
|
|
|
|
|
edges {
|
|
|
|
|
node {
|
|
|
|
|
date
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
2017-11-07 05:54:56 +00:00
|
|
|
`,
|
|
|
|
|
(t, data) => {
|
2021-04-16 04:34:29 +00:00
|
|
|
const { disc } = data.lookup;
|
|
|
|
|
t.true(disc.releases.edges.length > 0);
|
|
|
|
|
disc.releases.edges.forEach((release) => {
|
|
|
|
|
t.true(release.node.media.length > 0);
|
|
|
|
|
release.node.media.forEach((medium) => {
|
|
|
|
|
t.true(medium.discs.length > 0);
|
|
|
|
|
medium.discs.forEach((disc) => {
|
|
|
|
|
t.true(disc.releases.edges.length > 0);
|
|
|
|
|
disc.releases.edges.forEach((release) => {
|
|
|
|
|
t.true(release.node.media.length > 0);
|
|
|
|
|
release.node.media.forEach((medium) => {
|
|
|
|
|
t.true(medium.discs.length > 0);
|
|
|
|
|
});
|
|
|
|
|
});
|
|
|
|
|
});
|
|
|
|
|
});
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
);
|
2016-12-15 07:18:53 +00:00
|
|
|
|
2017-11-07 05:54:56 +00:00
|
|
|
test(
|
|
|
|
|
'entities support tags',
|
|
|
|
|
testData,
|
|
|
|
|
`
|
2016-12-15 07:18:53 +00:00
|
|
|
{
|
|
|
|
|
lookup {
|
|
|
|
|
label(mbid: "38dc88de-7720-4100-9d5b-3cdc41b0c474") {
|
|
|
|
|
tags {
|
|
|
|
|
edges {
|
|
|
|
|
node {
|
|
|
|
|
name
|
|
|
|
|
count
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
search {
|
|
|
|
|
artists(query: "Leonard Cohen", first: 1) {
|
|
|
|
|
edges {
|
|
|
|
|
node {
|
|
|
|
|
tags {
|
|
|
|
|
edges {
|
|
|
|
|
node {
|
|
|
|
|
name
|
|
|
|
|
count
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
2017-11-07 05:54:56 +00:00
|
|
|
`,
|
|
|
|
|
(t, data) => {
|
2021-04-16 04:34:29 +00:00
|
|
|
const { label } = data.lookup;
|
|
|
|
|
const artists = data.search.artists.edges.map((edge) => edge.node);
|
|
|
|
|
t.true(label.tags.edges.some((edge) => edge.node.name === 'indie folk'));
|
|
|
|
|
t.true(label.tags.edges.some((edge) => edge.node.count > 0));
|
|
|
|
|
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));
|
|
|
|
|
}
|
|
|
|
|
);
|
2018-09-17 04:53:15 +00:00
|
|
|
|
|
|
|
|
test(
|
|
|
|
|
'releases can include tracks',
|
|
|
|
|
testData,
|
|
|
|
|
`
|
|
|
|
|
{
|
|
|
|
|
lookup {
|
|
|
|
|
release(mbid: "fba5f8fe-c6c8-4511-8562-c9febf482674") {
|
|
|
|
|
media {
|
|
|
|
|
trackCount
|
|
|
|
|
position
|
|
|
|
|
formatID
|
|
|
|
|
format
|
|
|
|
|
tracks {
|
|
|
|
|
mbid
|
|
|
|
|
title
|
|
|
|
|
position
|
|
|
|
|
number
|
|
|
|
|
length
|
|
|
|
|
recording {
|
|
|
|
|
title
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
`,
|
|
|
|
|
(t, data) => {
|
2021-04-16 04:34:29 +00:00
|
|
|
t.true(data.lookup.release.media.every((media) => media.tracks.length > 0));
|
2018-09-17 04:53:15 +00:00
|
|
|
t.true(
|
2021-04-16 04:34:29 +00:00
|
|
|
data.lookup.release.media.every((media) =>
|
|
|
|
|
media.tracks.every((track) => track.recording)
|
2018-09-17 04:53:15 +00:00
|
|
|
)
|
2021-04-16 04:34:29 +00:00
|
|
|
);
|
2018-09-17 04:53:15 +00:00
|
|
|
}
|
2021-04-16 04:34:29 +00:00
|
|
|
);
|