Import request viewset, serializer and url

merge-requests/154/head
Eliot Berriot 2018-02-21 00:05:07 +01:00
rodzic f3d77ef7d9
commit 98b62caa24
Nie znaleziono w bazie danych klucza dla tego podpisu
ID klucza GPG: DD6965E2476E5C27
6 zmienionych plików z 100 dodań i 0 usunięć

Wyświetl plik

@ -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'),
]

Wyświetl plik

@ -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',

Wyświetl plik

@ -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

Wyświetl plik

@ -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)

Wyświetl plik

@ -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

Wyświetl plik

@ -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