test_views.py 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  1. import json
  2. import pytest
  3. from django.urls import reverse
  4. from music.models import Track
  5. from podcasts.models import Episode
  6. from scrobbles.models import Scrobble
  7. @pytest.mark.django_db
  8. def test_get_not_allowed_from_mopidy(client, valid_auth_token):
  9. url = reverse("scrobbles:mopidy-webhook")
  10. headers = {"Authorization": f"Token {valid_auth_token}"}
  11. response = client.get(url, headers=headers)
  12. assert response.status_code == 405
  13. @pytest.mark.django_db
  14. def test_bad_mopidy_request_data(client, valid_auth_token):
  15. url = reverse("scrobbles:mopidy-webhook")
  16. headers = {"Authorization": f"Token {valid_auth_token}"}
  17. response = client.post(url, headers)
  18. assert response.status_code == 400
  19. assert (
  20. response.data["detail"]
  21. == "JSON parse error - Expecting value: line 1 column 1 (char 0)"
  22. )
  23. @pytest.mark.django_db
  24. def test_scrobble_mopidy_track(
  25. client, mopidy_track_request_data, valid_auth_token
  26. ):
  27. url = reverse("scrobbles:mopidy-webhook")
  28. headers = {"Authorization": f"Token {valid_auth_token}"}
  29. response = client.post(
  30. url,
  31. mopidy_track_request_data,
  32. content_type="application/json",
  33. headers=headers,
  34. )
  35. assert response.status_code == 200
  36. assert response.data == {"scrobble_id": 1}
  37. scrobble = Scrobble.objects.get(id=1)
  38. assert scrobble.media_obj.__class__ == Track
  39. assert scrobble.media_obj.title == "Same in the End"
  40. @pytest.mark.django_db
  41. def test_scrobble_mopidy_same_track_different_album(
  42. client,
  43. mopidy_track_request_data,
  44. mopidy_track_diff_album_request_data,
  45. valid_auth_token,
  46. ):
  47. url = reverse("scrobbles:mopidy-webhook")
  48. headers = {"Authorization": f"Token {valid_auth_token}"}
  49. response = client.post(
  50. url,
  51. mopidy_track_request_data,
  52. content_type="application/json",
  53. headers=headers,
  54. )
  55. assert response.status_code == 200
  56. assert response.data == {"scrobble_id": 1}
  57. scrobble = Scrobble.objects.get(id=1)
  58. assert scrobble.media_obj.album.name == "Sublime"
  59. response = client.post(
  60. url,
  61. mopidy_track_diff_album_request_data,
  62. content_type="application/json",
  63. )
  64. scrobble = Scrobble.objects.get(id=2)
  65. assert scrobble.media_obj.__class__ == Track
  66. assert scrobble.media_obj.album.name == "Gold"
  67. assert scrobble.media_obj.title == "Same in the End"
  68. @pytest.mark.django_db
  69. def test_scrobble_mopidy_podcast(
  70. client, mopidy_podcast_request_data, valid_auth_token
  71. ):
  72. url = reverse("scrobbles:mopidy-webhook")
  73. headers = {"Authorization": f"Token {valid_auth_token}"}
  74. response = client.post(
  75. url,
  76. mopidy_podcast_request_data,
  77. content_type="application/json",
  78. headers=headers,
  79. )
  80. assert response.status_code == 200
  81. assert response.data == {"scrobble_id": 1}
  82. scrobble = Scrobble.objects.get(id=1)
  83. assert scrobble.media_obj.__class__ == Episode
  84. assert scrobble.media_obj.title == "Up First"