Upgrading to react-test-renderer and snapshots; Fixing tests
This commit is contained in:
@ -1,6 +1,8 @@
|
||||
import React from 'react';
|
||||
import { render } from 'enzyme';
|
||||
import { BrowserRouter } from 'react-router-dom';
|
||||
import TestRenderer from 'react-test-renderer';
|
||||
import { GridItem } from '../../src/js/components/GridItem';
|
||||
import { core } from '../state';
|
||||
|
||||
jest.mock('react-redux', () => ({
|
||||
useSelector: jest.fn(),
|
||||
@ -19,45 +21,28 @@ jest.mock('react-router-dom', () => ({
|
||||
}));
|
||||
|
||||
describe('<GridItem />', () => {
|
||||
|
||||
it('should handle album', () => {
|
||||
const item = {
|
||||
uri: 'spotify:album:alpha',
|
||||
type: 'album',
|
||||
name: 'One',
|
||||
};
|
||||
const dom = render(<GridItem item={item} />);
|
||||
expect(dom.find('.grid__item__name').text()).toEqual('One');
|
||||
expect(dom.find('.grid__item__secondary__content').length).toBe(1);
|
||||
const result = TestRenderer.create(
|
||||
<BrowserRouter>
|
||||
<GridItem item={core.items['local:album:md5:66fbea3593ba96a15a9d4188bebab50b']} />
|
||||
</BrowserRouter>
|
||||
).toJSON();
|
||||
expect(result).toMatchSnapshot();
|
||||
});
|
||||
|
||||
it('should handle artist', () => {
|
||||
const item = {
|
||||
uri: 'spotify:artist:alpha',
|
||||
type: 'artist',
|
||||
name: 'Alpha',
|
||||
followers: 123,
|
||||
albums_uris: ['spotify:album:beta'],
|
||||
};
|
||||
const dom = render(<GridItem item={item} />);
|
||||
console.debug( dom.find('.grid__item__secondary__content') );
|
||||
expect(dom.find('.grid__item__name').text()).toEqual('Alpha');
|
||||
expect(dom.find('.grid__item__secondary__content').childAt(0).render().text()).toEqual('123 followers');
|
||||
expect(dom.find('.grid__item__secondary__content').childAt(1).render().text()).toEqual('1 albums');
|
||||
const result = TestRenderer.create(
|
||||
<BrowserRouter>
|
||||
<GridItem item={core.items['local:artist:md5:4f6e4f979e2c40c5e6ad1735804c29bc']} />
|
||||
</BrowserRouter>
|
||||
).toJSON();
|
||||
expect(result).toMatchSnapshot();
|
||||
});
|
||||
|
||||
it('should handle playlist', () => {
|
||||
const item = {
|
||||
uri: 'spotify:playlist:alpha',
|
||||
type: 'playlist',
|
||||
name: 'One',
|
||||
tracks: [
|
||||
{ uri: 'spotify:track:123' },
|
||||
{ uri: 'spotify:track:456' },
|
||||
],
|
||||
};
|
||||
const dom = render(<GridItem item={item} />);
|
||||
expect(dom.find('.grid__item__name').text()).toEqual('One');
|
||||
expect(dom.find('.grid__item__secondary__content').render().text()).toEqual('2 tracks');
|
||||
const result = TestRenderer.create(
|
||||
<BrowserRouter>
|
||||
<GridItem item={core.items['m3u:Local%20tester.m3u8']} />
|
||||
</BrowserRouter>
|
||||
).toJSON();
|
||||
expect(result).toMatchSnapshot();
|
||||
});
|
||||
});
|
||||
212
__tests__/components/__snapshots__/GridItem.test.js.snap
Normal file
212
__tests__/components/__snapshots__/GridItem.test.js.snap
Normal file
@ -0,0 +1,212 @@
|
||||
// Jest Snapshot v1, https://goo.gl/fbAQLP
|
||||
|
||||
exports[`<GridItem /> should handle album 1`] = `
|
||||
<a
|
||||
className="grid__item grid__item--album "
|
||||
data-qa-file="Link"
|
||||
data-qa-node="RouterLink"
|
||||
href="/album/local%3Aalbum%3Amd5%3A66fbea3593ba96a15a9d4188bebab50b"
|
||||
onClick={[Function]}
|
||||
onContextMenu={[Function]}
|
||||
>
|
||||
<div
|
||||
className="thumbnail thumbnail--loaded thumbnail--medium grid__item__thumbnail"
|
||||
data-qa-file="Thumbnail"
|
||||
data-qa-node="div"
|
||||
>
|
||||
<i
|
||||
className="icon icon--material thumbnail__placeholder"
|
||||
data-qa-file="Icon"
|
||||
data-qa-node="i"
|
||||
>
|
||||
album
|
||||
</i>
|
||||
<div
|
||||
className="thumbnail__image"
|
||||
data-qa-file="Thumbnail"
|
||||
data-qa-node="div"
|
||||
style={
|
||||
Object {
|
||||
"backgroundImage": "url(\\"/local/17338e740316f18dbb5e3331ac6be6c1-500x500.jpeg\\")",
|
||||
}
|
||||
}
|
||||
/>
|
||||
<div
|
||||
className="thumbnail__actions"
|
||||
data-qa-file="Thumbnail"
|
||||
data-qa-node="div"
|
||||
/>
|
||||
</div>
|
||||
<div
|
||||
className="grid__item__name"
|
||||
data-qa-file="GridItem"
|
||||
data-qa-node="div"
|
||||
>
|
||||
Sirens of the Sea
|
||||
</div>
|
||||
<div
|
||||
className="grid__item__secondary"
|
||||
data-qa-file="GridItem"
|
||||
data-qa-node="div"
|
||||
>
|
||||
<ul
|
||||
className="grid__item__secondary__content details"
|
||||
data-qa-file="GridItem"
|
||||
data-qa-node="ul"
|
||||
>
|
||||
<li
|
||||
data-qa-file="GridItem"
|
||||
data-qa-node="li"
|
||||
>
|
||||
<span
|
||||
className="undefined links-sentence"
|
||||
data-qa-file="LinksSentence"
|
||||
data-qa-node="span"
|
||||
>
|
||||
<span
|
||||
data-qa-file="LinksSentence"
|
||||
data-qa-node="span"
|
||||
>
|
||||
<span
|
||||
data-qa-file="LinksSentence"
|
||||
data-qa-node="span"
|
||||
>
|
||||
Above & Beyond
|
||||
</span>
|
||||
</span>
|
||||
</span>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</a>
|
||||
`;
|
||||
|
||||
exports[`<GridItem /> should handle artist 1`] = `
|
||||
<a
|
||||
className="grid__item grid__item--artist "
|
||||
data-qa-file="Link"
|
||||
data-qa-node="RouterLink"
|
||||
href="/artist/local%3Aartist%3Amd5%3A4f6e4f979e2c40c5e6ad1735804c29bc"
|
||||
onClick={[Function]}
|
||||
onContextMenu={[Function]}
|
||||
>
|
||||
<div
|
||||
className="thumbnail thumbnail--loaded thumbnail--medium grid__item__thumbnail"
|
||||
data-qa-file="Thumbnail"
|
||||
data-qa-node="div"
|
||||
>
|
||||
<i
|
||||
className="icon icon--material thumbnail__placeholder"
|
||||
data-qa-file="Icon"
|
||||
data-qa-node="i"
|
||||
>
|
||||
perm_identity
|
||||
</i>
|
||||
<div
|
||||
className="thumbnail__image"
|
||||
data-qa-file="Thumbnail"
|
||||
data-qa-node="div"
|
||||
style={
|
||||
Object {
|
||||
"backgroundImage": "url(\\"https://i.scdn.co/image/4dc7080ef509c36203a131a0eab8dd5e4800d7c2\\")",
|
||||
}
|
||||
}
|
||||
/>
|
||||
<div
|
||||
className="thumbnail__actions"
|
||||
data-qa-file="Thumbnail"
|
||||
data-qa-node="div"
|
||||
/>
|
||||
</div>
|
||||
<div
|
||||
className="grid__item__name"
|
||||
data-qa-file="GridItem"
|
||||
data-qa-node="div"
|
||||
>
|
||||
Above & Beyond
|
||||
</div>
|
||||
<div
|
||||
className="grid__item__secondary"
|
||||
data-qa-file="GridItem"
|
||||
data-qa-node="div"
|
||||
>
|
||||
<ul
|
||||
className="grid__item__secondary__content details"
|
||||
data-qa-file="GridItem"
|
||||
data-qa-node="ul"
|
||||
>
|
||||
<li
|
||||
data-qa-file="GridItem"
|
||||
data-qa-node="li"
|
||||
>
|
||||
2 albums
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</a>
|
||||
`;
|
||||
|
||||
exports[`<GridItem /> should handle playlist 1`] = `
|
||||
<a
|
||||
className="grid__item grid__item--playlist "
|
||||
data-qa-file="Link"
|
||||
data-qa-node="RouterLink"
|
||||
href="/playlist/m3u%3ALocal%20tester.m3u8"
|
||||
onClick={[Function]}
|
||||
onContextMenu={[Function]}
|
||||
>
|
||||
<div
|
||||
className="thumbnail thumbnail--loaded thumbnail--medium grid__item__thumbnail"
|
||||
data-qa-file="Thumbnail"
|
||||
data-qa-node="div"
|
||||
>
|
||||
<i
|
||||
className="icon icon--material thumbnail__placeholder"
|
||||
data-qa-file="Icon"
|
||||
data-qa-node="i"
|
||||
>
|
||||
queue_music
|
||||
</i>
|
||||
<div
|
||||
className="thumbnail__image"
|
||||
data-qa-file="Thumbnail"
|
||||
data-qa-node="div"
|
||||
style={
|
||||
Object {
|
||||
"backgroundImage": "url(\\"null\\")",
|
||||
}
|
||||
}
|
||||
/>
|
||||
<div
|
||||
className="thumbnail__actions"
|
||||
data-qa-file="Thumbnail"
|
||||
data-qa-node="div"
|
||||
/>
|
||||
</div>
|
||||
<div
|
||||
className="grid__item__name"
|
||||
data-qa-file="GridItem"
|
||||
data-qa-node="div"
|
||||
>
|
||||
Local tester
|
||||
</div>
|
||||
<div
|
||||
className="grid__item__secondary"
|
||||
data-qa-file="GridItem"
|
||||
data-qa-node="div"
|
||||
>
|
||||
<ul
|
||||
className="grid__item__secondary__content details"
|
||||
data-qa-file="GridItem"
|
||||
data-qa-node="ul"
|
||||
>
|
||||
<li
|
||||
data-qa-file="GridItem"
|
||||
data-qa-node="li"
|
||||
>
|
||||
13 tracks
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</a>
|
||||
`;
|
||||
@ -2,18 +2,72 @@ import { store } from '../src/js/store';
|
||||
|
||||
const state = store.getState();
|
||||
|
||||
/**
|
||||
* Artists
|
||||
**/
|
||||
state.core.items['jest:artist:alpha'] = {
|
||||
uri: 'jest:artist:alpha',
|
||||
name: 'Alpha',
|
||||
followers: 123,
|
||||
albums_uris: [
|
||||
'jest:album:one'
|
||||
],
|
||||
albums_total: 1,
|
||||
biography: "Alpha biography"
|
||||
state.core.items['local:artist:md5:4f6e4f979e2c40c5e6ad1735804c29bc'] = {
|
||||
type: "artist",
|
||||
uri: "local:artist:md5:4f6e4f979e2c40c5e6ad1735804c29bc",
|
||||
name: "Above & Beyond",
|
||||
provider: "mopidy",
|
||||
images: [
|
||||
{
|
||||
formatted: true,
|
||||
small: "https://i.scdn.co/image/c8fde6d9f274eb40e5404dd1e806b597ca09c29d",
|
||||
medium: "https://i.scdn.co/image/4dc7080ef509c36203a131a0eab8dd5e4800d7c2",
|
||||
large: "https://i.scdn.co/image/4dc7080ef509c36203a131a0eab8dd5e4800d7c2",
|
||||
huge: "https://i.scdn.co/image/4dc7080ef509c36203a131a0eab8dd5e4800d7c2"
|
||||
}
|
||||
],
|
||||
albums_uris: [
|
||||
"local:album:md5:1186a9e31d19405f1c6ca2ca4ec4714a",
|
||||
"local:album:md5:66fbea3593ba96a15a9d4188bebab50b"
|
||||
],
|
||||
tracks: [
|
||||
{
|
||||
type: "track",
|
||||
uri: "local:track:Above%20%26%20Beyond/Sirens%20of%20the%20Sea%20Remixed%20%5B2009%5D/Above%20%26%20Beyond%20-%2001%20If%20I%20Could%20Fly%20%28Jaytech%20remix%29.mp3",
|
||||
name: "If I Could Fly (Jaytech remix)",
|
||||
last_modified: 1528571787982,
|
||||
artists: [
|
||||
{
|
||||
uri: "local:artist:md5:171fb07b0aca1f116a998d72582f2caf",
|
||||
name: "Above & Beyond presents OceanLab"
|
||||
}
|
||||
],
|
||||
album: {
|
||||
uri: "local:album:md5:1186a9e31d19405f1c6ca2ca4ec4714a",
|
||||
name: "Sirens of the Sea Remixed"
|
||||
},
|
||||
added_at: 1528571787982,
|
||||
duration: 433737,
|
||||
track_number: 1,
|
||||
disc_number: 1,
|
||||
release_date: "2009",
|
||||
provider: "local",
|
||||
disc_track: "001.001"
|
||||
},
|
||||
{
|
||||
type: "track",
|
||||
uri: "local:track:Above%20%26%20Beyond/Sirens%20of%20the%20Sea%20Remixed%20%5B2009%5D/Above%20%26%20Beyond%20-%2002%20Come%20Home%20%28Michael%20Cassette%20remix%29.mp3",
|
||||
name: "Come Home (Michael Cassette remix)",
|
||||
last_modified: 1528571788421,
|
||||
artists: [
|
||||
{
|
||||
uri: "local:artist:md5:171fb07b0aca1f116a998d72582f2caf",
|
||||
name: "Above & Beyond presents OceanLab"
|
||||
}
|
||||
],
|
||||
album: {
|
||||
uri: "local:album:md5:1186a9e31d19405f1c6ca2ca4ec4714a",
|
||||
name: "Sirens of the Sea Remixed"
|
||||
},
|
||||
added_at: 1528571788421,
|
||||
duration: 472241,
|
||||
track_number: 2,
|
||||
disc_number: 1,
|
||||
release_date: "2009",
|
||||
provider: "local",
|
||||
disc_track: "001.002"
|
||||
},
|
||||
]
|
||||
};
|
||||
|
||||
state.core.items['jest:artist:beta'] = {
|
||||
@ -37,30 +91,141 @@ state.core.items['jest:artist:delta'] = {
|
||||
/**
|
||||
* Albums
|
||||
**/
|
||||
state.core.items['jest:album:one'] = {
|
||||
uri: 'jest:album:one',
|
||||
name: 'One',
|
||||
artists_uris: [
|
||||
'jest:artist:alpha'
|
||||
state.core.items['local:album:md5:66fbea3593ba96a15a9d4188bebab50b'] = {
|
||||
artists: [
|
||||
{
|
||||
uri: "local:artist:md5:4f6e4f979e2c40c5e6ad1735804c29bc",
|
||||
name: "Above & Beyond"
|
||||
}
|
||||
],
|
||||
tracks_uris: [
|
||||
'jest:track:one',
|
||||
'jest:track:two'
|
||||
tracks: [
|
||||
{
|
||||
type: "track",
|
||||
uri: "local:track:Above%20%26%20Beyond/Sirens%20of%20the%20Sea%20%5B2008%5D/Above%20%26%20Beyond%20-%2001%20Just%20Listen.mp3",
|
||||
name: "Just Listen",
|
||||
last_modified: 1528571779393,
|
||||
artists: [
|
||||
{
|
||||
uri: "local:artist:md5:171fb07b0aca1f116a998d72582f2caf",
|
||||
name: "Above & Beyond presents OceanLab"
|
||||
}
|
||||
],
|
||||
album: {
|
||||
uri: "local:album:md5:66fbea3593ba96a15a9d4188bebab50b",
|
||||
name: "Sirens of the Sea"
|
||||
},
|
||||
added_at: 1528571779393,
|
||||
duration: 230086,
|
||||
track_number: 1,
|
||||
disc_number: 1,
|
||||
release_date: "2008",
|
||||
provider: "local",
|
||||
disc_track: "001.001"
|
||||
},
|
||||
{
|
||||
type: "track",
|
||||
uri: "local:track:Above%20%26%20Beyond/Sirens%20of%20the%20Sea%20%5B2008%5D/Above%20%26%20Beyond%20-%2002%20Sirens%20of%20the%20Sea.mp3",
|
||||
name: "Sirens of the Sea",
|
||||
last_modified: 1528571780104,
|
||||
artists: [
|
||||
{
|
||||
uri: "local:artist:md5:171fb07b0aca1f116a998d72582f2caf",
|
||||
name: "Above & Beyond presents OceanLab"
|
||||
}
|
||||
],
|
||||
album: {
|
||||
uri: "local:album:md5:66fbea3593ba96a15a9d4188bebab50b",
|
||||
name: "Sirens of the Sea"
|
||||
},
|
||||
added_at: 1528571780104,
|
||||
duration: 356884,
|
||||
track_number: 2,
|
||||
disc_number: 1,
|
||||
release_date: "2008",
|
||||
provider: "local",
|
||||
disc_track: "001.002"
|
||||
},
|
||||
],
|
||||
wiki: "Wiki text"
|
||||
last_modified: 1528571779393,
|
||||
type: "album",
|
||||
uri: "local:album:md5:66fbea3593ba96a15a9d4188bebab50b",
|
||||
name: "Sirens of the Sea",
|
||||
release_date: "2008",
|
||||
provider: "local",
|
||||
images: {
|
||||
formatted: true,
|
||||
small: "/local/17338e740316f18dbb5e3331ac6be6c1-500x500.jpeg",
|
||||
medium: "/local/17338e740316f18dbb5e3331ac6be6c1-500x500.jpeg",
|
||||
large: "/local/17338e740316f18dbb5e3331ac6be6c1-500x500.jpeg",
|
||||
huge: "/local/17338e740316f18dbb5e3331ac6be6c1-500x500.jpeg"
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* Playlists
|
||||
**/
|
||||
state.core.items['jest:playlist:one'] = {
|
||||
uri: 'jest:playlist:one',
|
||||
name: 'One',
|
||||
tracks_uris: [
|
||||
'jest:track:one',
|
||||
'jest:track:three'
|
||||
],
|
||||
tracks_total: 2
|
||||
state.core.items['m3u:Local%20tester.m3u8'] = {
|
||||
type: "playlist",
|
||||
uri: "m3u:Local%20tester.m3u8",
|
||||
name: "Local tester",
|
||||
last_modified: 1616053598509,
|
||||
can_edit: true,
|
||||
tracks_total: 13,
|
||||
added_at: 1616053598509,
|
||||
provider: "mopidy",
|
||||
images: {
|
||||
formatted: true,
|
||||
small: null,
|
||||
medium: null,
|
||||
large: null,
|
||||
huge: null
|
||||
},
|
||||
tracks: [
|
||||
{
|
||||
type: "track",
|
||||
uri: "spotify:track:57YNeCxXGWY4a2rQJlw5du",
|
||||
name: "Heat Of The Moment",
|
||||
artists: [
|
||||
{
|
||||
uri: "spotify:artist:1O6ddbpGxRTse2V0YEkhNH",
|
||||
name: "15grams"
|
||||
}
|
||||
],
|
||||
album: {
|
||||
uri: "spotify:album:7stB1TDEe4BEvBM2HSXXBA",
|
||||
name: "Heat Of The Moment"
|
||||
},
|
||||
duration: 189000,
|
||||
track_number: 1,
|
||||
disc_number: 0,
|
||||
release_date: "2020",
|
||||
provider: "spotify",
|
||||
disc_track: "000.001",
|
||||
sort_id: 0
|
||||
},
|
||||
{
|
||||
type: "track",
|
||||
uri: "spotify:track:5DHSlpd0MX9DfnoAQqolfa",
|
||||
name: "Julia (Deep Diving)",
|
||||
artists: [
|
||||
{
|
||||
uri: "spotify:artist:4oLeXFyACqeem2VImYeBFe",
|
||||
name: "Fred again.."
|
||||
}
|
||||
],
|
||||
album: {
|
||||
uri: "spotify:album:2HJCdduuXbN70tTNQyuFQn",
|
||||
name: "Julia (Deep Diving)"
|
||||
},
|
||||
duration: 275000,
|
||||
track_number: 1,
|
||||
disc_number: 0,
|
||||
release_date: "2020",
|
||||
provider: "spotify",
|
||||
disc_track: "000.001",
|
||||
sort_id: 4
|
||||
},
|
||||
]
|
||||
};
|
||||
|
||||
/**
|
||||
|
||||
@ -8,7 +8,7 @@ import { isLoading } from '../../src/js/util/helpers';
|
||||
|
||||
describe('isLoading', () => {
|
||||
const load_queue = {
|
||||
'spotify:playlist:123': 'Some load queue value',
|
||||
'guid1234ABC': 'spotify:playlist:123',
|
||||
'stuff:and_things': 'stuff:and_things',
|
||||
};
|
||||
|
||||
|
||||
Reference in New Issue
Block a user