test_views.py 2.9 KB

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