Import request viewset, serializer and url
This commit is contained in:
parent
f3d77ef7d9
commit
98b62caa24
|
@ -52,6 +52,10 @@ v1_patterns += [
|
|||
include(
|
||||
('funkwhale_api.users.api_urls', '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/refresh/$', jwt_views.refresh_jwt_token, name='token_refresh'),
|
||||
]
|
||||
|
|
|
@ -80,10 +80,12 @@ if RAVEN_ENABLED:
|
|||
|
||||
# Apps specific for this project go here.
|
||||
LOCAL_APPS = (
|
||||
'funkwhale_api.common',
|
||||
'funkwhale_api.users', # custom users app
|
||||
# Your stuff: custom apps go here
|
||||
'funkwhale_api.instance',
|
||||
'funkwhale_api.music',
|
||||
'funkwhale_api.requests',
|
||||
'funkwhale_api.favorites',
|
||||
'funkwhale_api.radios',
|
||||
'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