From fe3a9c817a875ab4d2e0cf4adbb735563c5968ba Mon Sep 17 00:00:00 2001 From: chrisdevwords Date: Sun, 13 Aug 2017 19:27:33 -0400 Subject: [PATCH] adding playBasedOnTrack method to radio module --- src/spotify/radio.js | 23 +++++++- test/spotify/radio/test_playBasedOnTrack.js | 58 +++++++++++++++++++++ 2 files changed, 80 insertions(+), 1 deletion(-) create mode 100644 test/spotify/radio/test_playBasedOnTrack.js diff --git a/src/spotify/radio.js b/src/spotify/radio.js index bd60343..c92a0fd 100644 --- a/src/spotify/radio.js +++ b/src/spotify/radio.js @@ -14,10 +14,13 @@ const TRACK_NAME = (artist, songName) => `"${songName}" by ${artist}`; const RECCOMENDED_TRACKS_ENDPOINT = `${API_BASE}/recommendations`; +const SLACK_SUCCESS_MESSAGE = playlistName => + `Playlist changed to ${playlistName}`; module.exports = { PLAYLIST_NAME, + SLACK_SUCCESS_MESSAGE, getRecommendationsFromTrack(trackId, trackInfo, accessToken) { @@ -45,7 +48,6 @@ module.exports = { createStation(playlistUri, spotifyUri, accessToken) { - const trackId = extractFromUri(spotifyUri, 'track'); let playlistName; @@ -81,5 +83,24 @@ module.exports = { } return Promise.reject(err) }); + }, + + playBasedOnTrack(playlistUri, trackUri, accessToken, spotifyLocalUrl) { + + return this + .createStation(playlistUri, trackUri, accessToken) + .then(() => + request + .post({ + uri: `${spotifyLocalUrl}/api/spotify/playlist`, + body: { + playlist: playlistUri + }, + json: true + }) + ) + .then(resp => + SLACK_SUCCESS_MESSAGE(resp.playlist.title) + ); } }; diff --git a/test/spotify/radio/test_playBasedOnTrack.js b/test/spotify/radio/test_playBasedOnTrack.js new file mode 100644 index 0000000..27b2690 --- /dev/null +++ b/test/spotify/radio/test_playBasedOnTrack.js @@ -0,0 +1,58 @@ +const { beforeEach, afterEach, describe, it } = require('mocha'); +const { expect, config } = require('chai'); +const request = require('request-promise-native'); +const sinon = require('sinon'); +const radio = require('../../../src/spotify/radio'); + + +const context = describe; + +config.includeStack = true; + +describe('The spotify.radio.playBasedOnTrack method', () => { + + context('with a working spotifyLocal connection', () => { + + const playlistName = radio.PLAYLIST_NAME( + '"Everyone" by Van Morrison' + ); + + beforeEach(() => { + sinon + .stub(radio, 'createStation') + .resolves({}) + + sinon + .stub(request, 'post') + .resolves({ + playlist: { + title: playlistName + } + }) + + }); + + afterEach(() => { + radio.createStation.restore(); + request.post.restore(); + }); + + it('resolves with a message for slack', (done) => { + + const trackUri = 'spotify:track:528kEbmXBOuMbxdn7YQAXx'; + const spotifyLocalUrl = 'http://localhost:5000'; + const playlistUri = 'spotify:user:awpoops:playlist:5PP1I2m0uxEBb3VKLhI7bP'; + const token = 'BQDCP3FOWeE8e9a9lKUeu4JB0o1eN8UQzLvsWiyXgcr9RaPhM3o8L7XLXcopGnzl3vK4w8R_hlzy2-MW6x0PPS14b7CDMw_ctMcLUvWPLYEokMHKd9ENL-_fLwsRVhQFyHphY90hVYYthsizEWy8jdxMT_uptqf2auwAu6zhowkCxSYW9qG6F62_AkLQL5qu1t64DOmp4X8NtEP84ZGGiw11lbvGPl_wf6qS2ADuedQqxVSNoL4'; + + radio + .playBasedOnTrack(playlistUri, trackUri, token, spotifyLocalUrl) + .then((message) => { + expect(message).to.equal( + radio.SLACK_SUCCESS_MESSAGE(playlistName) + ) + done(); + }) + .catch(done); + }) + }); +}); \ No newline at end of file