conftest.py 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171
  1. import json
  2. import pytest
  3. from django.contrib.auth import get_user_model
  4. from rest_framework.authtoken.models import Token
  5. from boardgames.models import BoardGame
  6. from music.models import Track, Artist
  7. from scrobbles.models import Scrobble
  8. from people.models import Person
  9. User = get_user_model()
  10. @pytest.fixture
  11. def boardgame_scrobble():
  12. first = Person.objects.create(name="First Player")
  13. second = Person.objects.create(name="Second Player")
  14. return Scrobble.objects.create(
  15. board_game=BoardGame.objects.create(title="Test Board Game"),
  16. media_type="BoardGame",
  17. played_to_completion=True,
  18. log={
  19. "players": [
  20. {"person_id": first.id, "win": True, "score": 30, "color": "Blue"},
  21. {"person_id": second.id, "win": False, "score": 28, "color": "Red"}
  22. ],
  23. },
  24. )
  25. @pytest.fixture
  26. def test_track():
  27. Track.objects.create(
  28. title="Emotion",
  29. artist=Artist.objects.create(name="Carly Rae Jepsen"),
  30. run_time_seconds=60,
  31. )
  32. class MopidyRequest:
  33. name = "Same in the End"
  34. artist = "Sublime"
  35. album = "Sublime"
  36. track_number = 4
  37. run_time_ticks = 156604
  38. run_time = 60
  39. playback_time_ticks = 15045
  40. musicbrainz_track_id = "54214d63-5adf-4909-87cd-c65c37a6d558"
  41. musicbrainz_album_id = "03b864cd-7761-314c-a892-05a89ddff00d"
  42. musicbrainz_artist_id = "95f5b748-d370-47fe-85bd-0af2dc450bc0"
  43. mopidy_uri = "local:track:Sublime%20-%20Sublime/Disc%201%20-%2004%20-%20Same%20in%20the%20End.mp3" # noqa
  44. status = "resumed"
  45. def __init__(self, **kwargs):
  46. self.request_data = {
  47. "name": kwargs.get("name", self.name),
  48. "artist": kwargs.get("artist", self.artist),
  49. "album": kwargs.get("album", self.album),
  50. "track_number": int(kwargs.get("track_number", self.track_number)),
  51. "run_time_ticks": int(
  52. kwargs.get("run_time_ticks", self.run_time_ticks)
  53. ),
  54. "run_time": int(kwargs.get("run_time", self.run_time)),
  55. "playback_time_ticks": int(
  56. kwargs.get("playback_time_ticks", self.playback_time_ticks)
  57. ),
  58. "musicbrainz_track_id": kwargs.get(
  59. "musicbrainz_track_id", self.musicbrainz_track_id
  60. ),
  61. "musicbrainz_album_id": kwargs.get(
  62. "musicbrainz_album_id", self.musicbrainz_album_id
  63. ),
  64. "musicbrainz_artist_id": kwargs.get(
  65. "musicbrainz_artist_id", self.musicbrainz_artist_id
  66. ),
  67. "mopidy_uri": kwargs.get("mopidy_uri", self.mopidy_uri),
  68. "status": kwargs.get("status", self.status),
  69. }
  70. def __eq__(self, other):
  71. for key in self.request_data.keys():
  72. if self.request_data[key] != getattr(self, key):
  73. return False
  74. return True
  75. @property
  76. def request_json(self):
  77. return json.dumps(self.request_data)
  78. @pytest.fixture
  79. def valid_auth_token():
  80. user = User.objects.create(email="test@exmaple.com")
  81. return Token.objects.create(user=user).key
  82. @pytest.fixture
  83. def mopidy_track():
  84. return MopidyRequest()
  85. @pytest.fixture
  86. def mopidy_track_diff_album_request_data(**kwargs):
  87. mb_album_id = "0c56c457-afe1-4679-baab-759ba8dd2a58"
  88. return MopidyRequest(
  89. album="Gold", musicbrainz_album_id=mb_album_id
  90. ).request_json
  91. @pytest.fixture
  92. def mopidy_podcast_request_data():
  93. mopidy_uri = "local:podcast:Up%20First/2022-01-01%20Up%20First.mp3"
  94. return MopidyRequest(
  95. mopidy_uri=mopidy_uri, artist="NPR", album="Up First"
  96. ).request_json
  97. class JellyfinTrackRequest:
  98. name = "Emotion"
  99. artist = "Carly Rae Jepsen"
  100. album = "Emotion"
  101. track_number = 1
  102. item_type = "Audio"
  103. timestamp = "2024-01-14 12:00:19"
  104. run_time_ticks = 156604
  105. run_time = "00:00:60"
  106. playback_time_ticks = 15045
  107. musicbrainz_track_id = "54214d63-5adf-4909-87cd-c65c37a6d558"
  108. musicbrainz_album_id = "03b864cd-7761-314c-a892-05a89ddff00d"
  109. musicbrainz_artist_id = "95f5b748-d370-47fe-85bd-0af2dc450bc0"
  110. status = "resumed"
  111. def __init__(self, **kwargs):
  112. self.request_data = {
  113. "Name": kwargs.get("name", self.name),
  114. "Artist": kwargs.get("artist", self.artist),
  115. "Album": kwargs.get("album", self.album),
  116. "TrackNumber": int(kwargs.get("track_number", self.track_number)),
  117. "RunTime": kwargs.get("run_time", self.run_time),
  118. "ItemType": kwargs.get("item_type", self.item_type),
  119. "UtcTimestamp": kwargs.get("timestamp", self.timestamp),
  120. "PlaybackPositionTicks": int(
  121. kwargs.get("playback_time_ticks", self.playback_time_ticks)
  122. ),
  123. "Provider_musicbrainztrack": kwargs.get(
  124. "musicbrainz_track_id", self.musicbrainz_track_id
  125. ),
  126. "Provider_musicbrainzalbum": kwargs.get(
  127. "musicbrainz_album_id", self.musicbrainz_album_id
  128. ),
  129. "Provider_musicbrainzartist": kwargs.get(
  130. "musicbrainz_artist_id", self.musicbrainz_artist_id
  131. ),
  132. "Status": kwargs.get("status", self.status),
  133. }
  134. def __eq__(self, other):
  135. for key in self.request_data.keys():
  136. if self.request_data[key] != getattr(self, key):
  137. return False
  138. return True
  139. @property
  140. def request_json(self):
  141. return json.dumps(self.request_data)
  142. @pytest.fixture
  143. def jellyfin_track():
  144. return JellyfinTrackRequest()