import dataclasses import pytest from slz_downloader.dsp.brandwatch.query_parser import prepare_artist_keywords @dataclasses.dataclass class ArtistQuery: keywords: str exclusion_keywords: str inclusion_keywords: str mentions: str hashtags: str @pytest.mark.parametrize( "keywords,exclusion_keywords,inclusion_keywords,mentions,hashtags, expected_value", [ ( 'kanye west, kanyewest, kanye', 'bad_word_1, bad_word_2 (key west - florida)', 'music, chart, lyrics, (ye, #ye - music, song, album)', 'kenywwwest', 'kw', '((((("kanye west" OR kanyewest OR kanye) OR #kw) AND (music OR chart OR lyrics)) OR ((ye OR #ye) AND (music OR song OR album))) AND NOT (bad_word_1 OR bad_word_2)) OR (("key west") AND NOT (florida)) OR @kenywwwest' ), ( 'beyoncé, beyonce, bey, sasha fierce, sashafierce, queenb, queen b', '', '(nas - music, song, album)', 'kenywwwest', '', '((beyoncé OR beyonce OR bey OR "sasha fierce" OR sashafierce OR queenb OR "queen b") OR ((nas) AND (music OR song OR album))) OR @kenywwwest' ), ( 'beyoncé, beyonce, bey, sasha fierce, sashafierce, queenb, queen b', '(nas - music, song, album)', '', 'kenywwwest', '', '(beyoncé OR beyonce OR bey OR "sasha fierce" OR sashafierce OR queenb OR "queen b") OR ((nas) AND NOT (music OR song OR album)) OR @kenywwwest' ), ( 'beyoncé, beyonce, bey, sasha fierce, sashafierce, queenb, queen b', '(nas - music, song, album)', '', '', 'kenywwwest', '((beyoncé OR beyonce OR bey OR "sasha fierce" OR sashafierce OR queenb OR "queen b") OR #kenywwwest) OR ((nas) AND NOT (music OR song OR album))' ), ( '', '(nas - music, song, album)', '', '', 'kenywwwest', '#kenywwwest OR ((nas) AND NOT (music OR song OR album))' ), ( 'beyoncé, beyonce, bey, sasha fierce, sashafierce, queenb, queen b', '(nas - music, song, album)', '', 'kenywwwest', 'kenywwwest', '((beyoncé OR beyonce OR bey OR "sasha fierce" OR sashafierce OR queenb OR "queen b") OR #kenywwwest) OR ((nas) AND NOT (music OR song OR album)) OR @kenywwwest' ), ( 'beyoncé, beyonce, bey, sasha fierce, sashafierce, queenb, queen b', '(nas - music, song, album)', '', '', '', '(beyoncé OR beyonce OR bey OR "sasha fierce" OR sashafierce OR queenb OR "queen b") OR ((nas) AND NOT (music OR song OR album))' ) ] ) def test_prepare_artist_keywords( keywords, exclusion_keywords, inclusion_keywords, mentions, hashtags, expected_value ): query = ArtistQuery( keywords=keywords, exclusion_keywords=exclusion_keywords, inclusion_keywords=inclusion_keywords, mentions=mentions, hashtags=hashtags, ) result = prepare_artist_keywords(query) assert result == expected_value