From 816eb78064cfe2c5b0d96101c0ffc9c1a8c0d1e4 Mon Sep 17 00:00:00 2001 From: Chris McCord Date: Tue, 14 Dec 2021 21:02:50 -0500 Subject: [PATCH] Add mp3stat test --- lib/live_beats/mp3_stat.ex | 8 ++++++-- test/live_beats/mp3_stat_test.exs | 12 ++++++++++++ test/support/fixtures/silence1s.mp3 | Bin 37206 -> 4422 bytes 3 files changed, 18 insertions(+), 2 deletions(-) create mode 100644 test/live_beats/mp3_stat_test.exs diff --git a/lib/live_beats/mp3_stat.ex b/lib/live_beats/mp3_stat.ex index 2016fb4..8b7e39c 100644 --- a/lib/live_beats/mp3_stat.ex +++ b/lib/live_beats/mp3_stat.ex @@ -8,7 +8,7 @@ defmodule LiveBeats.MP3Stat do use Bitwise alias LiveBeats.MP3Stat - defstruct duration: 0, path: nil, title: nil, tags: nil + defstruct duration: 0, path: nil, title: nil, artist: nil, tags: nil @declared_frame_ids ~w(AENC APIC ASPI COMM COMR ENCR EQU2 ETCO GEOB GRID LINK MCDI MLLT OWNE PRIV PCNT POPM POSS RBUF RVA2 RVRB SEEK SIGN SYLT SYTC TALB TBPM TCOM TCON TCOP TDEN TDLY TDOR TDRC TDRL TDTG TENC TEXT TFLT TIPL TIT1 TIT2 TIT3 TKEY TLAN TLEN TMCL TMED TMOO TOAL TOFN TOLY TOPE TOWN TPE1 TPE2 TPE3 TPE4 TPOS TPRO TPUB TRCK TRSN TRSO TSOA TSOP TSOT TSRC TSSE TSST TXXX UFID USER USLT WCOM WCOP WOAF WOAR WOAS WORS WPAY WPUB WXXX) @@ -36,7 +36,11 @@ defmodule LiveBeats.MP3Stat do def parse(path) do {tag_info, rest} = parse_tag(File.read!(path)) duration = parse_frame(rest, 0, 0, 0) - {:ok, %MP3Stat{duration: round(duration), path: path, tags: tag_info, title: tag_info["TIT2"]}} + title = Enum.at(tag_info["TIT2"] || [], 0) + artist = Enum.at(tag_info["TPE1"] || [], 0) + + {:ok, + %MP3Stat{duration: round(duration), path: path, tags: tag_info, title: title, artist: artist}} rescue _ -> {:error, :bad_file} end diff --git a/test/live_beats/mp3_stat_test.exs b/test/live_beats/mp3_stat_test.exs new file mode 100644 index 0000000..382095f --- /dev/null +++ b/test/live_beats/mp3_stat_test.exs @@ -0,0 +1,12 @@ +defmodule LiveBeats.MP3StatTest do + use ExUnit.Case, async: true + + alias LiveBeats.MP3Stat + + test "parse/1 with valid mp3" do + {:ok, %MP3Stat{} = stat} = MP3Stat.parse("test/support/fixtures/silence1s.mp3") + assert stat.duration == 1 + assert stat.title == "Silence" + assert stat.artist == "Anon" + end +end diff --git a/test/support/fixtures/silence1s.mp3 b/test/support/fixtures/silence1s.mp3 index fed8dc6015f31a68e94a812141850e284803a300..2bb8c0d738494f7c0c917609ba02b6c00b638cbf 100644 GIT binary patch literal 4422 zcmeZtF=k-^0k;s(5F;SX$-uxIoSBoFmz>HF65whG6k-DkIp*c(F@yvMy8`+AK)z36 zS(>SZo{6cRp@9KV3XI&|X1iF4B9?fPndnhp-p%=rR zV08Z=)KbF2u&0Jj{#iyR|D30jf3DHVKcn^#mE1AX^=P<_h8w879!&?M>0mS+5S0c% yibl&(qJs)W;b^#_1P9Ta(QqR=s8AG+h8s$7kjJ56y@2ANQF~B=gJ=%D!VLg6Y-B+I literal 37206 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