beets/test/test_acousticbrainz.py
Andrew Rogl 1ec87a3bdd pyupgrade beetsplug and tests
All tests working
More tidy up to be done
2021-08-26 19:12:51 +10:00

107 lines
3.7 KiB
Python

# This file is part of beets.
# Copyright 2016, Nathan Dwek.
#
# Permission is hereby granted, free of charge, to any person obtaining
# a copy of this software and associated documentation files (the
# "Software"), to deal in the Software without restriction, including
# without limitation the rights to use, copy, modify, merge, publish,
# distribute, sublicense, and/or sell copies of the Software, and to
# permit persons to whom the Software is furnished to do so, subject to
# the following conditions:
#
# The above copyright notice and this permission notice shall be
# included in all copies or substantial portions of the Software.
"""Tests for the 'acousticbrainz' plugin.
"""
import json
import os.path
import unittest
from test._common import RSRC
from beetsplug.acousticbrainz import AcousticPlugin, ABSCHEME
class MapDataToSchemeTest(unittest.TestCase):
def test_basic(self):
ab = AcousticPlugin()
data = {'key 1': 'value 1', 'key 2': 'value 2'}
scheme = {'key 1': 'attribute 1', 'key 2': 'attribute 2'}
mapping = set(ab._map_data_to_scheme(data, scheme))
self.assertEqual(mapping, {('attribute 1', 'value 1'),
('attribute 2', 'value 2')})
def test_recurse(self):
ab = AcousticPlugin()
data = {
'key': 'value',
'group': {
'subkey': 'subvalue',
'subgroup': {
'subsubkey': 'subsubvalue'
}
}
}
scheme = {
'key': 'attribute 1',
'group': {
'subkey': 'attribute 2',
'subgroup': {
'subsubkey': 'attribute 3'
}
}
}
mapping = set(ab._map_data_to_scheme(data, scheme))
self.assertEqual(mapping, {('attribute 1', 'value'),
('attribute 2', 'subvalue'),
('attribute 3', 'subsubvalue')})
def test_composite(self):
ab = AcousticPlugin()
data = {'key 1': 'part 1', 'key 2': 'part 2'}
scheme = {'key 1': ('attribute', 0), 'key 2': ('attribute', 1)}
mapping = set(ab._map_data_to_scheme(data, scheme))
self.assertEqual(mapping, {('attribute', 'part 1 part 2')})
def test_realistic(self):
ab = AcousticPlugin()
data_path = os.path.join(RSRC, b'acousticbrainz/data.json')
with open(data_path) as res:
data = json.load(res)
mapping = set(ab._map_data_to_scheme(data, ABSCHEME))
expected = {
('chords_key', 'A'),
('average_loudness', 0.815025985241),
('mood_acoustic', 0.415711194277),
('chords_changes_rate', 0.0445116683841),
('tonal', 0.874250173569),
('mood_sad', 0.299694597721),
('bpm', 162.532119751),
('gender', 'female'),
('initial_key', 'A minor'),
('chords_number_rate', 0.00194468453992),
('mood_relaxed', 0.123632438481),
('chords_scale', 'minor'),
('voice_instrumental', 'instrumental'),
('key_strength', 0.636936545372),
('genre_rosamerica', 'roc'),
('mood_party', 0.234383180737),
('mood_aggressive', 0.0779221653938),
('danceable', 0.143928021193),
('rhythm', 'VienneseWaltz'),
('mood_electronic', 0.339881360531),
('mood_happy', 0.0894767045975),
('moods_mirex', "Cluster3"),
('timbre', "bright")
}
self.assertEqual(mapping, expected)
def suite():
return unittest.TestLoader().loadTestsFromName(__name__)
if __name__ == '__main__':
unittest.main(defaultTest='suite')