mirror of
https://github.com/koel/koel
synced 2024-12-23 02:53:20 +00:00
147 lines
4.8 KiB
JavaScript
147 lines
4.8 KiB
JavaScript
require('chai').should();
|
|
import { cloneDeep, last } from 'lodash';
|
|
|
|
import { songStore, albumStore, artistStore } from '../../stores';
|
|
import artists from '../blobs/media';
|
|
import interactions from '../blobs/interactions';
|
|
|
|
describe('stores/song', () => {
|
|
beforeEach(() => {
|
|
artistStore.init(artists);
|
|
});
|
|
|
|
describe('#init', () => {
|
|
it('correctly gathers all songs', () => {
|
|
songStore.state.songs.length.should.equal(14);
|
|
});
|
|
|
|
it ('coverts lengths to formatted lengths', () => {
|
|
songStore.state.songs[0].fmtLength.should.be.a.string;
|
|
});
|
|
|
|
it('correctly sets albums', () => {
|
|
songStore.state.songs[0].album.id.should.equal(1193);
|
|
});
|
|
});
|
|
|
|
describe('#all', () => {
|
|
it('correctly returns all songs', () => {
|
|
songStore.all.length.should.equal(14);
|
|
});
|
|
});
|
|
|
|
describe('#byId', () => {
|
|
it('correctly gets a song by ID', () => {
|
|
songStore.byId('e6d3977f3ffa147801ca5d1fdf6fa55e').title.should.equal('Like a rolling stone');
|
|
});
|
|
});
|
|
|
|
describe('#byIds', () => {
|
|
it('correctly gets multiple songs by IDs', () => {
|
|
const songs = songStore.byIds(['e6d3977f3ffa147801ca5d1fdf6fa55e', 'aa16bbef6a9710eb9a0f41ecc534fad5']);
|
|
songs[0].title.should.equal('Like a rolling stone');
|
|
songs[1].title.should.equal("Knockin' on heaven's door");
|
|
});
|
|
});
|
|
|
|
describe('#initInteractions', () => {
|
|
beforeEach(() => songStore.initInteractions(interactions));
|
|
|
|
it('correctly sets interaction status', () => {
|
|
const song = songStore.byId('cb7edeac1f097143e65b1b2cde102482');
|
|
song.liked.should.be.true;
|
|
song.playCount.should.equal(3);
|
|
});
|
|
});
|
|
|
|
describe('#syncUpdatedSong', () => {
|
|
beforeEach(() => artistStore.init(artists));
|
|
|
|
const updatedSong = {
|
|
id: "39189f4545f9d5671fb3dc964f0080a0",
|
|
album_id: 1193,
|
|
title: "I Swear A Lot",
|
|
album: {
|
|
id: 1193,
|
|
arist_id: 1,
|
|
artist: {
|
|
id: 1,
|
|
name: 'All-4-One',
|
|
},
|
|
},
|
|
};
|
|
|
|
it ('correctly syncs an updated song with no album changes', () => {
|
|
songStore.syncUpdatedSong(cloneDeep(updatedSong));
|
|
songStore.byId(updatedSong.id).title.should.equal('I Swear A Lot');
|
|
});
|
|
|
|
it ('correctly syncs an updated song into an existing album of same artist', () => {
|
|
const song = cloneDeep(updatedSong);
|
|
song.album_id = 1194;
|
|
song.album = {
|
|
id: 1194,
|
|
artist_id: 1,
|
|
artist: {
|
|
id: 1,
|
|
name: 'All-4-One',
|
|
},
|
|
};
|
|
|
|
songStore.syncUpdatedSong(song);
|
|
songStore.byId(song.id).album.name.should.equal('And The Music Speaks');
|
|
});
|
|
|
|
it ('correctly syncs an updated song into a new album of same artist', () => {
|
|
const song = cloneDeep(updatedSong);
|
|
song.album_id = 9999;
|
|
song.album = {
|
|
id: 9999,
|
|
artist_id: 1,
|
|
name: 'Brand New Album from All-4-One',
|
|
artist: {
|
|
id: 1,
|
|
name: 'All-4-One',
|
|
},
|
|
};
|
|
|
|
songStore.syncUpdatedSong(song);
|
|
|
|
// A new album should be created...
|
|
last(albumStore.all).name.should.equal('Brand New Album from All-4-One');
|
|
|
|
// ...and assigned with the song.
|
|
songStore.byId(song.id).album.name.should.equal('Brand New Album from All-4-One');
|
|
});
|
|
|
|
it ('correctly syncs an updated song into a new album of a new artist', () => {
|
|
const song = cloneDeep(updatedSong);
|
|
song.album_id = 10000;
|
|
song.album = {
|
|
id: 10000,
|
|
name: "It's... John Cena!!!",
|
|
artist_id: 10000,
|
|
artist: {
|
|
id: 10000,
|
|
name: 'John Cena',
|
|
},
|
|
};
|
|
|
|
songStore.syncUpdatedSong(song);
|
|
|
|
// A new artist should be created...
|
|
const lastArtist = last(artistStore.all);
|
|
lastArtist.name.should.equal('John Cena');
|
|
|
|
// A new album should be created
|
|
const lastAlbum = last(albumStore.all);
|
|
lastAlbum.name.should.equal("It's... John Cena!!!");
|
|
|
|
// The album must belong to John Cena of course!
|
|
last(lastArtist.albums).should.equal(lastAlbum);
|
|
|
|
// And the song belongs to the album.
|
|
songStore.byId(song.id).album.should.equal(lastAlbum);
|
|
});
|
|
});
|
|
});
|