def test__aoty__get_reviews__WillReturnListOfReviews__WhenAOTYRespondsWithPublicationScreenHTML( self, mock_requests): response = MagicMock() response.text = get_reviews_html() mock_requests.get.return_value = response expected_reviews = [ PublicationReview( artist='Ghost', release_name='Prequelle', score=80, link='https://www.youtube.com/watch?v=-L2Xv5-EmUo', publication_name='57-the-needle-drop', date=None), PublicationReview( artist='Sleep', release_name='The Sciences', score=80, link='https://www.youtube.com/watch?v=d5jWckdWqpM', publication_name='57-the-needle-drop', date=None) ] actual_reviews = aoty.get_reviews('57-the-needle-drop') self.assertEqual(actual_reviews, expected_reviews)
def get_publication_reviews() -> List[PublicationReview]: return [ PublicationReview( artist='Yob', date='Posted Jun 20, 2018', publication_name='The Quietus', release_name='Our Raw Heart', score=80, link= 'http://thequietus.com/articles/24811-yob-our-raw-heart-album-review' ), PublicationReview(artist='Sleep', publication_name='57-the-needle-drop', release_name='The Sciences', score=80, link='https://www.youtube.com/watch?v=d5jWckdWqpM') ]
def extract_data(review_html, publication_name) -> PublicationReview: release_name = review_html.find('div', attrs={'class': 'albumTitle'}).text score = int(review_html.find('div', attrs={'class': 'rating'}).text) link = review_html.find('div', attrs={'class': 'ratingText'}).a['href'] artist = review_html.find('div', attrs={'class': 'artistTitle'}).text return PublicationReview( artist=artist, release_name=release_name, score=score, link=link, publication_name=publication_name )
def test__metacritic__get_reviews__WillIncludeFirstReview_WhenMetacriticHTMLIncludesFirstReviewHTMLClass( self, mock_requests): response = MagicMock() response.text = get_review_without_full_review() mock_requests.get.return_value = response expected_reviews = [ PublicationReview(artist='Yob', date='Posted Jun 20, 2018', publication_name='The Quietus', release_name='Our Raw Heart', score=80, link=None) ] actual_reviews = metacritic.get_reviews('the-quietus') self.assertEqual(actual_reviews, expected_reviews)
def test__metacritic__get_reviews__WillIncludeFirstReview_WhenMetacriticHTMLIncludesFirstReviewHTMLClass( self, mock_requests): response = MagicMock() response.text = get_first_review_html() mock_requests.get.return_value = response expected_reviews = [ PublicationReview( artist='Pusha T', date='Posted Jun 21, 2018', publication_name='The Quietus', release_name='DAYTONA', score=80, link= 'http://thequietus.com/articles/24834-pusha-t-daytona-album-review' ) ] actual_reviews = metacritic.get_reviews('the-quietus') self.assertEqual(actual_reviews, expected_reviews)
def test__metacritic__get_reviews__WillReturnListOfReviews__WhenMetacriticRespondsWithPublicationScreenHTML( self, mock_requests): response = MagicMock() response.text = get_reviews_html() mock_requests.get.return_value = response expected_reviews = [ PublicationReview( artist='Yob', date='Posted Jun 20, 2018', publication_name='The Quietus', release_name='Our Raw Heart', score=80, link= 'http://thequietus.com/articles/24811-yob-our-raw-heart-album-review' ) ] actual_reviews = metacritic.get_reviews('the-quietus') self.assertEqual(actual_reviews, expected_reviews)
def extract_data(review_html) -> PublicationReview: release_name = review_html.find('div', attrs={ 'class': 'review_product' }).a.text score = int( review_html.find('li', attrs={ 'class': 'review_product_score brief_critscore' }).span.text) publication_name = review_html.find('li', attrs={ 'class': 'review_action publication_title' }).text date, link = extract_full_review(review_html) review_product_href = review_html.find('div', attrs={ 'class': 'review_product' }).a['href'] groups = re.search(ARTIST_PARTS_REGEX, review_product_href) if not groups: print( 'failed to parse metacritic html for release: %s got artist: %s' % (release_name, review_product_href)) return None artist_parts = groups.group(1).split('-') artist = ' '.join([part.capitalize() for part in artist_parts]) return PublicationReview(artist=artist, release_name=release_name, score=score, publication_name=publication_name, date=date, link=link)
def test__MusicReviewCollector__collect__WillCatalogAListOfArtistsWithReviews__WhenCalledTwice( self): mock_metacritic = MagicMock() mock_metacritic.get_reviews.return_value = [ PublicationReview(release_name='Clearing The Path', artist='YOB', publication_name='pitchfork', score=80, date='', link='') ] mock_aoty = MagicMock() mock_aoty.get_reviews.return_value = [ PublicationReview(release_name='Clearing The Path', artist='YOB', publication_name='melon', score=70, date='', link='') ] catalog = MusicCatalog() collector = MusicReviewCollector() cataloger = MusicCataloger(catalog, collector, None) cataloger.collect_reviews(mock_metacritic, publications=['pitchfork']) cataloger.collect_reviews(mock_aoty, publications=['melon']) actual_artists = cataloger.catalog_reviews() expected_artists = { 'd92a4901abc2f02dfd347e0793ca3f1c223cbff321d30cdef2679ed13b1c58ae': Artist( id= 'd92a4901abc2f02dfd347e0793ca3f1c223cbff321d30cdef2679ed13b1c58ae', name='YOB', releases=[ Release( id= '137801a1514b811c49b2d27183e4b6fd8b7371d76cc4ff177c0a70d9700e196c', name='Clearing The Path', reviews=[ Review( id= 'af9896e8834f324e2ad0aa281985cc9b13534ec3b2b81414f05df508ef0f2f0b', publication_name='pitchfork', score=80, date='', link=''), Review( id= 'f36c160e4def4615f4ab216fa3a3f68bb98b29e649be9804a41e6199e9985f48', publication_name='melon', score=70, date='', link='') ], date=None, type=None, total_tracks=None, spotify_url=None), ]) } self.assertEqual(expected_artists, actual_artists)