Skip to content

Commit

Permalink
feat: optionally use provided track instead of picking random track (#70
Browse files Browse the repository at this point in the history
)

* feat: create video from track id provided in the env var

* refactor: extract the pick action to a diff function

* chore: update webpack config

* fix: use Object.assign to reset TRACK_ID var

* fix(test): set writeable as true
  • Loading branch information
Buzzertech committed Jan 8, 2020
1 parent 254ad1d commit 1c9b2db
Show file tree
Hide file tree
Showing 3 changed files with 70 additions and 16 deletions.
65 changes: 50 additions & 15 deletions src/audio.ts
Original file line number Diff line number Diff line change
Expand Up @@ -248,9 +248,58 @@ export const getStreamUrlFromTranscoding = async (
}
};

export const getTrackFromSoundcloud = async (track_id: Track['id']) => {
try {
audioLogger('fetching track document');
const response = await axios.get<Track>(
`https://api.soundcloud.com/tracks/${track_id}`,
{
params: {
client_id: config.SOUNDCLOUD_CLIENT_ID,
},
}
);

return response.data;
} catch (error) {
audioLogger(
`There was an error while fetching track metadata for track id - ${track_id}`
);
audioLogger(error);
return Promise.reject(error);
}
};

const pluckPropertiesFromTrack = (track: Track) =>
pick(track, [
'stream_url',
'download_url',
'user',
'description',
'title',
'purchase_title',
'purchase_url',
'tag_list',
'permalink_url',
'id',
'duration',
'uri',
'media_url',
]);

export const getTracksFromSoundcloud = async () => {
try {
audioLogger('fetching tracks');

if (process.env.TRACK_ID) {
audioLogger(
`Fetching the preselected track using the track id provided ${process.env.TRACK_ID}`
);
const track = await getTrackFromSoundcloud(Number(process.env.TRACK_ID));

return pluckPropertiesFromTrack(track);
}

const response = await axios.get<Track[]>(
`https://api.soundcloud.com/tracks`,
{
Expand Down Expand Up @@ -291,21 +340,7 @@ export const getTracksFromSoundcloud = async () => {
`Picked Song - ${pickedSong.title} (Soundcloud id - ${pickedSong.id})`
);

return pick(pickedSong, [
'stream_url',
'download_url',
'user',
'description',
'title',
'purchase_title',
'purchase_url',
'tag_list',
'permalink_url',
'id',
'duration',
'uri',
'media_url',
]);
return pluckPropertiesFromTrack(pickedSong);
} catch (e) {
audioLogger(`Something went wrong while fetching / picking track`);
audioLogger(e);
Expand Down
19 changes: 19 additions & 0 deletions test/audio.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -294,5 +294,24 @@ describe('audio', () => {
const song = await getTracksFromSoundcloud();
expect(song.id).toEqual(1);
});

it('will fetch particular track document if TRACK_ID is set as an environment variable', async () => {
Object.defineProperty(process.env, 'TRACK_ID', {
value: tracks[2].id,
writable: true,
});

nock(`https://api.soundcloud.com`)
.get(RegExp(`/tracks/${tracks[2].id}`))
.once()
.reply(200, tracks[2]);

const song = await getTracksFromSoundcloud();
expect(song.id).toEqual(tracks[2].id);

Object.assign(process.env, {
TRACK_ID: undefined,
});
});
});
});
2 changes: 1 addition & 1 deletion webpack.config.js
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@ module.exports = {
},
],
},
devtool: 'inline-source-map',
devtool: 'cheap-source-map',
externals: {
'chrome-aws-lambda': 'chrome-aws-lambda',
'aws-sdk': 'aws-sdk',
Expand Down

0 comments on commit 1c9b2db

Please sign in to comment.