Import request viewset, serializer and url
This commit is contained in:
parent
f3d77ef7d9
commit
98b62caa24
|
@ -52,6 +52,10 @@ v1_patterns += [
|
||||||
include(
|
include(
|
||||||
('funkwhale_api.users.api_urls', 'users'),
|
('funkwhale_api.users.api_urls', 'users'),
|
||||||
namespace='users')),
|
namespace='users')),
|
||||||
|
url(r'^requests/',
|
||||||
|
include(
|
||||||
|
('funkwhale_api.requests.api_urls', 'requests'),
|
||||||
|
namespace='requests')),
|
||||||
url(r'^token/$', jwt_views.obtain_jwt_token, name='token'),
|
url(r'^token/$', jwt_views.obtain_jwt_token, name='token'),
|
||||||
url(r'^token/refresh/$', jwt_views.refresh_jwt_token, name='token_refresh'),
|
url(r'^token/refresh/$', jwt_views.refresh_jwt_token, name='token_refresh'),
|
||||||
]
|
]
|
||||||
|
|
|
@ -80,10 +80,12 @@ if RAVEN_ENABLED:
|
||||||
|
|
||||||
# Apps specific for this project go here.
|
# Apps specific for this project go here.
|
||||||
LOCAL_APPS = (
|
LOCAL_APPS = (
|
||||||
|
'funkwhale_api.common',
|
||||||
'funkwhale_api.users', # custom users app
|
'funkwhale_api.users', # custom users app
|
||||||
# Your stuff: custom apps go here
|
# Your stuff: custom apps go here
|
||||||
'funkwhale_api.instance',
|
'funkwhale_api.instance',
|
||||||
'funkwhale_api.music',
|
'funkwhale_api.music',
|
||||||
|
'funkwhale_api.requests',
|
||||||
'funkwhale_api.favorites',
|
'funkwhale_api.favorites',
|
||||||
'funkwhale_api.radios',
|
'funkwhale_api.radios',
|
||||||
'funkwhale_api.history',
|
'funkwhale_api.history',
|
||||||
|
|
|
@ -0,0 +1,11 @@
|
||||||
|
from django.conf.urls import include, url
|
||||||
|
from . import views
|
||||||
|
|
||||||
|
from rest_framework import routers
|
||||||
|
router = routers.SimpleRouter()
|
||||||
|
router.register(
|
||||||
|
r'import-requests',
|
||||||
|
views.ImportRequestViewSet,
|
||||||
|
'import-requests')
|
||||||
|
|
||||||
|
urlpatterns = router.urls
|
|
@ -0,0 +1,27 @@
|
||||||
|
from rest_framework import serializers
|
||||||
|
|
||||||
|
from . import models
|
||||||
|
|
||||||
|
|
||||||
|
class ImportRequestSerializer(serializers.ModelSerializer):
|
||||||
|
|
||||||
|
class Meta:
|
||||||
|
model = models.ImportRequest
|
||||||
|
fields = (
|
||||||
|
'id',
|
||||||
|
'status',
|
||||||
|
'albums',
|
||||||
|
'artist_name',
|
||||||
|
'user',
|
||||||
|
'creation_date',
|
||||||
|
'imported_date',
|
||||||
|
'comment')
|
||||||
|
read_only_fields = (
|
||||||
|
'creation_date',
|
||||||
|
'imported_date',
|
||||||
|
'user',
|
||||||
|
'status')
|
||||||
|
|
||||||
|
def create(self, validated_data):
|
||||||
|
validated_data['user'] = self.context['user']
|
||||||
|
return super().create(validated_data)
|
|
@ -0,0 +1,30 @@
|
||||||
|
from rest_framework import generics, mixins, viewsets
|
||||||
|
from rest_framework import status
|
||||||
|
from rest_framework.response import Response
|
||||||
|
from rest_framework.decorators import detail_route
|
||||||
|
|
||||||
|
from funkwhale_api.music.views import SearchMixin
|
||||||
|
|
||||||
|
from . import models
|
||||||
|
from . import serializers
|
||||||
|
|
||||||
|
|
||||||
|
class ImportRequestViewSet(
|
||||||
|
SearchMixin,
|
||||||
|
mixins.CreateModelMixin,
|
||||||
|
mixins.RetrieveModelMixin,
|
||||||
|
mixins.ListModelMixin,
|
||||||
|
viewsets.GenericViewSet):
|
||||||
|
|
||||||
|
serializer_class = serializers.ImportRequestSerializer
|
||||||
|
queryset = models.ImportRequest.objects.all()
|
||||||
|
search_fields = ['artist_name', 'album_name', 'comment']
|
||||||
|
|
||||||
|
def perform_create(self, serializer):
|
||||||
|
return serializer.save(user=self.request.user)
|
||||||
|
|
||||||
|
def get_serializer_context(self):
|
||||||
|
context = super().get_serializer_context()
|
||||||
|
if self.request.user.is_authenticated:
|
||||||
|
context['user'] = self.request.user
|
||||||
|
return context
|
|
@ -0,0 +1,26 @@
|
||||||
|
from django.urls import reverse
|
||||||
|
|
||||||
|
|
||||||
|
def test_request_viewset_requires_auth(db, api_client):
|
||||||
|
url = reverse('api:v1:requests:import-requests-list')
|
||||||
|
response = api_client.get(url)
|
||||||
|
assert response.status_code == 401
|
||||||
|
|
||||||
|
|
||||||
|
def test_user_can_create_request(logged_in_api_client):
|
||||||
|
url = reverse('api:v1:requests:import-requests-list')
|
||||||
|
user = logged_in_api_client.user
|
||||||
|
data = {
|
||||||
|
'artist_name': 'System of a Down',
|
||||||
|
'albums': 'All please!',
|
||||||
|
'comment': 'Please, they rock!',
|
||||||
|
}
|
||||||
|
response = logged_in_api_client.post(url, data)
|
||||||
|
|
||||||
|
assert response.status_code == 201
|
||||||
|
|
||||||
|
ir = user.import_requests.latest('id')
|
||||||
|
assert ir.status == 'pending'
|
||||||
|
assert ir.creation_date is not None
|
||||||
|
for field, value in data.items():
|
||||||
|
assert getattr(ir, field) == value
|
Loading…
Reference in New Issue