Upgrading to react-test-renderer and snapshots; Fixing tests

This commit is contained in:
James Barnsley
2021-03-18 20:52:30 +13:00
parent d222e381eb
commit cbcc79aa64
8 changed files with 578 additions and 117 deletions

View File

@ -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();
});
});

View 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>
`;

View File

@ -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
},
]
};
/**

View File

@ -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',
};