test_aggregators.py 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107
  1. from datetime import datetime, timedelta
  2. import pytest
  3. import time_machine
  4. from django.contrib.auth import get_user_model
  5. from django.urls import reverse
  6. from django.utils import timezone
  7. from music.aggregators import (
  8. scrobble_counts,
  9. top_artists,
  10. top_tracks,
  11. week_of_scrobbles,
  12. )
  13. from profiles.models import UserProfile
  14. from scrobbles.models import Scrobble
  15. def build_scrobbles(client, request_data, num=7, spacing=2):
  16. url = reverse('scrobbles:mopidy-websocket')
  17. user = get_user_model().objects.create(username='Test User')
  18. UserProfile.objects.create(user=user, timezone='US/Eastern')
  19. for i in range(num):
  20. client.post(url, request_data, content_type='application/json')
  21. s = Scrobble.objects.last()
  22. s.user = user
  23. s.timestamp = timezone.now() - timedelta(days=i * spacing)
  24. s.played_to_completion = True
  25. s.save()
  26. @pytest.mark.django_db
  27. @time_machine.travel(datetime(2022, 3, 4, 1, 24))
  28. def test_scrobble_counts_data(client, mopidy_track_request_data):
  29. build_scrobbles(client, mopidy_track_request_data)
  30. user = get_user_model().objects.first()
  31. count_dict = scrobble_counts(user)
  32. assert count_dict == {
  33. 'alltime': 7,
  34. 'month': 2,
  35. 'today': 1,
  36. 'week': 3,
  37. 'year': 7,
  38. }
  39. @pytest.mark.django_db
  40. def test_week_of_scrobbles_data(client, mopidy_track_request_data):
  41. build_scrobbles(client, mopidy_track_request_data, 7, 1)
  42. user = get_user_model().objects.first()
  43. week = week_of_scrobbles(user)
  44. assert list(week.values()) == [1, 1, 1, 1, 1, 1, 1]
  45. @pytest.mark.django_db
  46. def test_top_tracks_by_day(client, mopidy_track_request_data):
  47. build_scrobbles(client, mopidy_track_request_data, 7, 1)
  48. user = get_user_model().objects.first()
  49. tops = top_tracks(user)
  50. assert tops[0].title == "Same in the End"
  51. @pytest.mark.django_db
  52. def test_top_tracks_by_week(client, mopidy_track_request_data):
  53. build_scrobbles(client, mopidy_track_request_data, 7, 1)
  54. user = get_user_model().objects.first()
  55. tops = top_tracks(user, filter='week')
  56. assert tops[0].title == "Same in the End"
  57. @pytest.mark.django_db
  58. def test_top_tracks_by_month(client, mopidy_track_request_data):
  59. build_scrobbles(client, mopidy_track_request_data, 7, 1)
  60. user = get_user_model().objects.first()
  61. tops = top_tracks(user, filter='month')
  62. assert tops[0].title == "Same in the End"
  63. @pytest.mark.django_db
  64. def test_top_tracks_by_year(client, mopidy_track_request_data):
  65. build_scrobbles(client, mopidy_track_request_data, 7, 1)
  66. user = get_user_model().objects.first()
  67. tops = top_tracks(user, filter='year')
  68. assert tops[0].title == "Same in the End"
  69. @pytest.mark.django_db
  70. def test_top__artists_by_week(client, mopidy_track_request_data):
  71. build_scrobbles(client, mopidy_track_request_data, 7, 1)
  72. user = get_user_model().objects.first()
  73. tops = top_artists(user, filter='week')
  74. assert tops[0].name == "Sublime"
  75. @pytest.mark.django_db
  76. def test_top__artists_by_month(client, mopidy_track_request_data):
  77. build_scrobbles(client, mopidy_track_request_data, 7, 1)
  78. user = get_user_model().objects.first()
  79. tops = top_artists(user, filter='month')
  80. assert tops[0].name == "Sublime"
  81. @pytest.mark.django_db
  82. def test_top__artists_by_year(client, mopidy_track_request_data):
  83. build_scrobbles(client, mopidy_track_request_data, 7, 1)
  84. user = get_user_model().objects.first()
  85. tops = top_artists(user, filter='year')
  86. assert tops[0].name == "Sublime"