""" Tests for Accoustic Brainz Adapter """ from textwrap import indent import pytest import json import os from absl import logging from track_features.adapters.accoustic_brainz import ( AccousticBrainzAdapter, LOW_LEVEL_FEATURES, RYTHMIC_FEATURES, META_FEATURES, TONAL_FEATURES ) @pytest.fixture() def json_record(): """ Fetches low level data """ filepath = os.path.join(os.getcwd(), 'adapters/tests/test.json') with open(filepath) as json_file: json_record = json.load(json_file) yield json_record def test_metada_feature_extractor(json_record): """ Tests Metadata feature extractor Params: json_record (dict): JSON record """ adapter = AccousticBrainzAdapter() meta_features = adapter.get_meta_features(json_record) # assertions # - should be dict assert type(meta_features) == dict # - should be a subset of META_FEATURES assert set(meta_features.keys()).issubset(set(META_FEATURES)) def test_lowlevel_feature_extractor(json_record): """ Tests Lowlevel feature extractor Params: json_record (dict): JSON record """ adapter = AccousticBrainzAdapter() lowlevel_feature = adapter.get_lowlevel_features(json_record) # assertions # - should be dict assert type(lowlevel_feature) == dict # - should have key features print(json.dumps(lowlevel_feature, indent=3)) for key_feature in ['hfc_mean', 'gfcc_mean', 'mfcc_mean']: assert key_feature in lowlevel_feature.keys() def test_tonal_feature_extractor(json_record): """ Tests Tonal feature extractor Params: json_record (dict): JSON record """ adapter = AccousticBrainzAdapter() tonal_features = adapter.get_tonal_features(json_record) # assertions # - should be dict assert type(tonal_features) == dict # - should have key features print(json.dumps(tonal_features, indent=3)) for key_feature in ['hpcp_mean', 'thpcp', 'chords_histogram']: assert key_feature in tonal_features.keys() def test_rythmic_feature_extractor(json_record): """ Tests Rythmic feature extractor Params: json_record (dict): JSON record """ adapter = AccousticBrainzAdapter() rythmic_features = adapter.get_rythmic_features(json_record) # assertions # - should be dict assert type(rythmic_features) == dict # - should have key features print(json.dumps(rythmic_features, indent=3)) for key_feature in ['bpm', 'onset_rate', 'beats_count', 'beats_loudness_mean', 'beats_position']: assert key_feature in rythmic_features.keys()