Skip to content
Snippets Groups Projects
Commit a0362a11 authored by Håvard Farestveit's avatar Håvard Farestveit
Browse files

#28 fixed pylint errors in /users

#28
parent efa8a837
No related branches found
No related tags found
No related merge requests found
Pipeline #125309 passed
from django.contrib import admin
from django.contrib.auth.admin import UserAdmin
from .models import Offer, AthleteFile
from django.contrib.auth import get_user_model
from .models import Offer, AthleteFile
from .forms import CustomUserChangeForm, CustomUserCreationForm
# Register your models here.
class CustomUserAdmin(UserAdmin):
add_form = CustomUserCreationForm
......
......@@ -4,13 +4,11 @@ from django.contrib.auth import get_user_model
class CustomUserCreationForm(UserCreationForm):
phone_number = forms.CharField(max_length=50)
country = forms.CharField(max_length=50)
city = forms.CharField(max_length=50)
street_address = forms.CharField(max_length=50)
class Meta(UserCreationForm):
model = get_user_model()
fields = ("username", "coach", "phone_number", "country", "city", "street_address")
......
......@@ -18,7 +18,7 @@ class User(AbstractUser):
country = models.TextField(max_length=50, blank=True)
city = models.TextField(max_length=50, blank=True)
street_address = models.TextField(max_length=50, blank=True)
def athlete_directory_path(instance, filename):
"""
......
from rest_framework import serializers
from django.contrib.auth import get_user_model, password_validation
from users.models import Offer, AthleteFile
from django import forms
from users.models import Offer, AthleteFile
class UserSerializer(serializers.HyperlinkedModelSerializer):
......@@ -30,9 +30,7 @@ class UserSerializer(serializers.HyperlinkedModelSerializer):
def validate_password(self, value):
data = self.get_initial()
password = data.get("password")
password1 = data.get("password1")
try:
password_validation.validate_password(password)
......@@ -49,7 +47,14 @@ class UserSerializer(serializers.HyperlinkedModelSerializer):
country = validated_data["country"]
city = validated_data["city"]
street_address = validated_data["street_address"]
user_obj = get_user_model()(username=username, email=email, phone_number=phone_number, country=country, city=city, street_address=street_address)
user_obj = get_user_model()(
username=username,
email=email,
phone_number=phone_number,
country=country,
city=city,
street_address=street_address
)
user_obj.set_password(password)
user_obj.save()
......
from django.test import TestCase, Client
import uuid
variables = [
'username',
'email',
'password',
'password1',
'phone_number',
'country',
'city',
'street_address'
]
variable_values = {
'valid':
{
'username': 'Testuser',
'email': 'test@test.te',
'password': 'password',
'password1': 'password',
'phone_number': '1234567890',
'country': 'Testonia',
'city': 'Testheim',
'street_address': 'Test',
},
'invalid': {
'username': 'Test user',
'email': 'test',
'password': None,
'password1': None,
'phone_number': 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX',
'country': 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX',
'city': 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX',
'street_address': 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX',
},
'blank': {
'username': '',
'email': '',
'password': '',
'password1': '',
'phone_number': '',
'country': '',
'city': '',
'street_address': '',
}
}
# Test cases generated by https://pairwise.teremokgames.com
test_cases = [
{
"username": "invalid", "password": "blank", "password1": "valid", "email": "invalid", "phone_number": "valid", "country": "blank", "city": "blank", "street_address": "invalid"},{
"username": "invalid", "password": "valid", "password1": "blank", "email": "valid", "phone_number": "blank", "country": "blank", "city": "invalid", "street_address": "valid"},{
"username": "invalid", "password": "valid", "password1": "blank", "email": "blank", "phone_number": "invalid", "country": "valid", "city": "blank", "street_address": "invalid"},{
"username": "invalid", "password": "blank", "password1": "blank", "email": "invalid", "phone_number": "valid", "country": "blank", "city": "invalid", "street_address": "valid"},{
"username": "invalid", "password": "blank", "password1": "valid", "email": "valid", "phone_number": "blank", "country": "invalid", "city": "valid", "street_address": "blank"},{
"username": "valid", "password": "blank", "password1": "blank", "email": "blank", "phone_number": "invalid", "country": "blank", "city": "valid", "street_address": "blank"},{
"username": "valid", "password": "blank", "password1": "blank", "email": "invalid", "phone_number": "blank", "country": "valid", "city": "blank", "street_address": "valid"},{
"username": "valid", "password": "valid", "password1": "valid", "email": "valid", "phone_number": "blank", "country": "valid", "city": "invalid", "street_address": "blank"},{
"username": "blank", "password": "valid", "password1": "blank", "email": "valid", "phone_number": "valid", "country": "invalid", "city": "invalid", "street_address": "blank"},{
"username": "blank", "password": "blank", "password1": "blank", "email": "blank", "phone_number": "blank", "country": "valid", "city": "valid", "street_address": "invalid"},{
"username": "blank", "password": "blank", "password1": "blank", "email": "valid", "phone_number": "invalid", "country": "invalid", "city": "blank", "street_address": "blank"},{
"username": "blank", "password": "blank", "password1": "valid", "email": "blank", "phone_number": "valid", "country": "valid", "city": "invalid", "street_address": "invalid"},{
"username": "blank", "password": "valid", "password1": "blank", "email": "blank", "phone_number": "blank", "country": "blank", "city": "valid", "street_address": "valid"},{
"username": "blank", "password": "blank", "password1": "valid", "email": "invalid", "phone_number": "invalid", "country": "blank", "city": "blank", "street_address": "blank"},{
"username": "invalid", "password": "blank", "password1": "valid", "email": "blank", "phone_number": "invalid", "country": "invalid", "city": "valid", "street_address": "valid"},{
"username": "invalid", "password": "valid", "password1": "valid", "email": "valid", "phone_number": "blank", "country": "blank", "city": "blank", "street_address": "invalid"},{
"username": "invalid", "password": "blank", "password1": "blank", "email": "blank", "phone_number": "blank", "country": "invalid", "city": "invalid", "street_address": "valid"},{
"username": "invalid", "password": "valid", "password1": "blank", "email": "invalid", "phone_number": "invalid", "country": "valid", "city": "valid", "street_address": "blank"},{
"username": "valid", "password": "valid", "password1": "valid", "email": "invalid", "phone_number": "blank", "country": "invalid", "city": "valid", "street_address": "blank"},{
"username": "valid", "password": "blank", "password1": "blank", "email": "valid", "phone_number": "blank", "country": "valid", "city": "blank", "street_address": "invalid"},{
"username": "valid", "password": "blank", "password1": "valid", "email": "blank", "phone_number": "invalid", "country": "blank", "city": "invalid", "street_address": "valid"},{
"username": "valid", "password": "valid", "password1": "blank", "email": "invalid", "phone_number": "valid", "country": "blank", "city": "valid", "street_address": "blank"},{
"username": "valid", "password": "blank", "password1": "blank", "email": "valid", "phone_number": "blank", "country": "invalid", "city": "blank", "street_address": "invalid"},{
"username": "valid", "password": "valid", "password1": "valid", "email": "blank", "phone_number": "invalid", "country": "valid", "city": "blank", "street_address": "valid"},{
"username": "valid", "password": "blank", "password1": "blank", "email": "blank", "phone_number": "valid", "country": "blank", "city": "invalid", "street_address": "blank"},{
"username": "blank", "password": "blank", "password1": "valid", "email": "invalid", "phone_number": "blank", "country": "valid", "city": "invalid", "street_address": "blank"},{
"username": "blank", "password": "blank", "password1": "blank", "email": "valid", "phone_number": "invalid", "country": "blank", "city": "valid", "street_address": "invalid"},{
"username": "blank", "password": "valid", "password1": "blank", "email": "blank", "phone_number": "valid", "country": "invalid", "city": "blank", "street_address": "valid"},{
"username": "blank", "password": "blank", "password1": "valid", "email": "blank", "phone_number": "blank", "country": "valid", "city": "invalid", "street_address": "blank"},{
"username": "blank", "password": "valid", "password1": "blank", "email": "invalid", "phone_number": "blank", "country": "blank", "city": "valid", "street_address": "invalid"},{
"username": "blank", "password": "blank", "password1": "valid", "email": "valid", "phone_number": "invalid", "country": "blank", "city": "blank", "street_address": "valid"},{
"username": "blank", "password": "valid", "password1": "blank", "email": "blank", "phone_number": "valid", "country": "invalid", "city": "blank", "street_address": "blank"}
]
class UserRegistration2WayTestCase(TestCase):
def setUp(self):
print("Running two way user registration")
self.client = Client()
def test_two_way(self):
for testcase in test_cases:
request = {}
invalid_request = False
for key, value in testcase.items():
request[key] = variable_values[value][key]
if key == 'username' and value == 'valid':
# Add a uid to username to avoid "user already exists error"
request['username'] = request['username'] + str(uuid.uuid4())
if (
value == 'invalid'
or (key == 'username' and value == 'blank')
or (key == 'password' and value == 'blank')
or (key == 'password1' and value == 'blank')
):
invalid_request = True
response_code = 400 if invalid_request else 201
response = self.client.post('/api/users/', request)
self.assertEqual(response.status_code, response_code)
from users.tests.UserRegistration import *
from users.tests.UserSerializer import *
\ No newline at end of file
from users.tests.user_registration import *
from users.tests.user_serializer import *
variables = [
'username',
'email',
'password',
'password1',
'phone_number',
'country',
'city',
'street_address'
]
variable_values = {
'valid':
{
'username': 'Testuser',
'email': 'test@test.te',
'password': 'password',
'password1': 'password',
'phone_number': '1234567890',
'country': 'Testonia',
'city': 'Testheim',
'street_address': 'Test',
},
'invalid': {
'username': 'Test user',
'email': 'test',
'password': None,
'password1': None,
'phone_number': 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX',
'country': 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX',
'city': 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX',
'street_address': 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX',
},
'blank': {
'username': '',
'email': '',
'password': '',
'password1': '',
'phone_number': '',
'country': '',
'city': '',
'street_address': '',
}
}
test_cases = [
{
"username": "invalid",
"password": "blank",
"password1": "valid",
"email": "invalid",
"phone_number": "valid",
"country": "blank",
"city": "blank",
"street_address": "invalid"
},
{
"username": "invalid",
"password": "valid",
"password1": "blank",
"email": "valid",
"phone_number": "blank",
"country": "blank",
"city": "invalid",
"street_address": "valid"
},
{
"username": "invalid",
"password": "valid",
"password1": "blank",
"email": "blank",
"phone_number": "invalid",
"country": "valid",
"city": "blank",
"street_address": "invalid"
},
{
"username": "invalid",
"password": "blank",
"password1": "blank",
"email": "invalid",
"phone_number": "valid",
"country": "blank",
"city": "invalid",
"street_address": "valid"
},
{
"username": "invalid",
"password": "blank",
"password1": "valid",
"email": "valid",
"phone_number": "blank",
"country": "invalid",
"city": "valid",
"street_address": "blank"
},
{
"username": "valid",
"password": "blank",
"password1": "blank",
"email": "blank",
"phone_number": "invalid",
"country": "blank",
"city": "valid",
"street_address": "blank"
},
{
"username": "valid",
"password": "blank",
"password1": "blank",
"email": "invalid",
"phone_number": "blank",
"country": "valid",
"city": "blank",
"street_address": "valid"
},
{
"username": "valid",
"password": "valid",
"password1": "valid",
"email": "valid",
"phone_number": "blank",
"country": "valid",
"city": "invalid",
"street_address": "blank"
},
{
"username": "blank",
"password": "valid",
"password1": "blank",
"email": "valid",
"phone_number": "valid",
"country": "invalid",
"city": "invalid",
"street_address": "blank"
},
{
"username": "blank",
"password": "blank",
"password1": "blank",
"email": "blank",
"phone_number": "blank",
"country": "valid",
"city": "valid",
"street_address": "invalid"
},
{
"username": "blank",
"password": "blank",
"password1": "blank",
"email": "valid",
"phone_number": "invalid",
"country": "invalid",
"city": "blank",
"street_address": "blank"
},
{
"username": "blank",
"password": "blank",
"password1": "valid",
"email": "blank",
"phone_number": "valid",
"country": "valid",
"city": "invalid",
"street_address": "invalid"
},
{
"username": "blank",
"password": "valid",
"password1": "blank",
"email": "blank",
"phone_number": "blank",
"country": "blank",
"city": "valid",
"street_address": "valid"
},
{
"username": "blank",
"password": "blank",
"password1": "valid",
"email": "invalid",
"phone_number": "invalid",
"country": "blank",
"city": "blank",
"street_address": "blank"
},
{
"username": "invalid",
"password": "blank",
"password1": "valid",
"email": "blank",
"phone_number": "invalid",
"country": "invalid",
"city": "valid",
"street_address": "valid"
},
{
"username": "invalid",
"password": "valid",
"password1": "valid",
"email": "valid",
"phone_number": "blank",
"country": "blank",
"city": "blank",
"street_address": "invalid"
},
{
"username": "invalid",
"password": "blank",
"password1": "blank",
"email": "blank",
"phone_number": "blank",
"country": "invalid",
"city": "invalid",
"street_address": "valid"
},
{
"username": "invalid",
"password": "valid",
"password1": "blank",
"email": "invalid",
"phone_number": "invalid",
"country": "valid",
"city": "valid",
"street_address": "blank"
},
{
"username": "valid",
"password": "valid",
"password1": "valid",
"email": "invalid",
"phone_number": "blank",
"country": "invalid",
"city": "valid",
"street_address": "blank"
},
{
"username": "valid",
"password": "blank",
"password1": "blank",
"email": "valid",
"phone_number": "blank",
"country": "valid",
"city": "blank",
"street_address": "invalid"
},
{
"username": "valid",
"password": "blank",
"password1": "valid",
"email": "blank",
"phone_number": "invalid",
"country": "blank",
"city": "invalid",
"street_address": "valid"
},
{
"username": "valid",
"password": "valid",
"password1": "blank",
"email": "invalid",
"phone_number": "valid",
"country": "blank",
"city": "valid",
"street_address": "blank"
},
{
"username": "valid",
"password": "blank",
"password1": "blank",
"email": "valid",
"phone_number": "blank",
"country": "invalid",
"city": "blank",
"street_address": "invalid"
},
{
"username": "valid",
"password": "valid",
"password1": "valid",
"email": "blank",
"phone_number": "invalid",
"country": "valid",
"city": "blank",
"street_address": "valid"
},
{
"username": "valid",
"password": "blank",
"password1": "blank",
"email": "blank",
"phone_number": "valid",
"country": "blank",
"city": "invalid",
"street_address": "blank"
},
{
"username": "blank",
"password": "blank",
"password1": "valid",
"email": "invalid",
"phone_number": "blank",
"country": "valid",
"city": "invalid",
"street_address": "blank"
},
{
"username": "blank",
"password": "blank",
"password1": "blank",
"email": "valid",
"phone_number": "invalid",
"country": "blank",
"city": "valid",
"street_address": "invalid"
},
{
"username": "blank",
"password": "valid",
"password1": "blank",
"email": "blank",
"phone_number": "valid",
"country": "invalid",
"city": "blank",
"street_address": "valid"
},
{
"username": "blank",
"password": "blank",
"password1": "valid",
"email": "blank",
"phone_number": "blank",
"country": "valid",
"city": "invalid",
"street_address": "blank"
},
{
"username": "blank",
"password": "valid",
"password1": "blank",
"email": "invalid",
"phone_number": "blank",
"country": "blank",
"city": "valid",
"street_address": "invalid"
},
{
"username": "blank",
"password": "blank",
"password1": "valid",
"email": "valid",
"phone_number": "invalid",
"country": "blank",
"city": "blank",
"street_address": "valid"
},
{
"username": "blank",
"password": "valid",
"password1": "blank",
"email": "blank",
"phone_number": "valid",
"country": "invalid",
"city": "blank",
"street_address": "blank"
}
]
import uuid
from django.test import TestCase, Client
from users.tests.test_data import variable_values, test_cases
class UserRegistration2WayTestCase(TestCase):
def setUp(self):
print("Running two way user registration")
self.client = Client()
def test_two_way(self):
for testcase in test_cases:
request = {}
invalid_request = False
for key, value in testcase.items():
request[key] = variable_values[value][key]
if key == 'username' and value == 'valid':
# Add a uid to username to avoid "user already exists error"
request['username'] = request['username'] + str(uuid.uuid4())
if value == 'invalid':
invalid_request = True
elif key == ('username' or 'password' or 'password1') and value == 'blank':
invalid_request = True
response_code = 400 if invalid_request else 201
response = self.client.post('/api/users/', request)
self.assertEqual(response.status_code, response_code)
from django.test import TestCase
from users.serializers import UserSerializer
from django.contrib.auth import get_user_model
from users.serializers import UserSerializer
class UserSerializerTestCase(TestCase):
......@@ -43,6 +44,6 @@ class UserSerializerTestCase(TestCase):
self.assertEqual(self.user_model.objects.get(username="testCreate"), user_create)
def test_validate_password(self):
pw="password"
response = UserSerializer(data=self.data1).validate_password(value=pw)
self.assertEqual(response,pw)
password = "password"
response = UserSerializer(data=self.data1).validate_password(value=password)
self.assertEqual(response, password)
from django.urls import path, include
from django.urls import path
from users import views
from rest_framework.urlpatterns import format_suffix_patterns
urlpatterns = [
path("api/users/", views.UserList.as_view(), name="user-list"),
......
import django
from django.contrib.auth import get_user_model
from django.db.models import Q
from rest_framework import mixins, generics
from workouts.mixins import CreateListModelMixin
from rest_framework.parsers import MultiPartParser, FormParser
from rest_framework import permissions
from rest_framework.permissions import (
IsAuthenticatedOrReadOnly,
)
from workouts.mixins import CreateListModelMixin
from workouts.permissions import IsOwner, IsReadOnly
from users.serializers import (
UserSerializer,
OfferSerializer,
......@@ -9,21 +15,10 @@ from users.serializers import (
UserPutSerializer,
UserGetSerializer,
)
from rest_framework.permissions import (
AllowAny,
IsAdminUser,
IsAuthenticated,
IsAuthenticatedOrReadOnly,
)
from users.models import Offer, AthleteFile
from django.contrib.auth import get_user_model
from django.db.models import Q
from django.shortcuts import get_object_or_404
from rest_framework.parsers import MultiPartParser, FormParser
from users.permissions import IsCurrentUser, IsAthlete, IsCoach
from workouts.permissions import IsOwner, IsReadOnly
# Create your views here.
class UserList(mixins.ListModelMixin, mixins.CreateModelMixin, generics.GenericAPIView):
serializer_class = UserSerializer
users = []
......@@ -37,23 +32,24 @@ class UserList(mixins.ListModelMixin, mixins.CreateModelMixin, generics.GenericA
return self.create(request, *args, **kwargs)
def get_queryset(self):
qs = get_user_model().objects.all()
query_set = get_user_model().objects.all()
if self.request.user:
# Return the currently logged in user
status = self.request.query_params.get("user", None)
if status and status == "current":
qs = get_user_model().objects.filter(pk=self.request.user.pk)
query_set = get_user_model().objects.filter(pk=self.request.user.pk)
return qs
return query_set
class UserDetail(
mixins.RetrieveModelMixin,
mixins.UpdateModelMixin,
mixins.DestroyModelMixin,
generics.GenericAPIView,
):
mixins.RetrieveModelMixin,
mixins.UpdateModelMixin,
mixins.DestroyModelMixin,
generics.GenericAPIView
):
lookup_field_options = ["pk", "username"]
serializer_class = UserSerializer
queryset = get_user_model().objects.all()
......@@ -83,8 +79,10 @@ class UserDetail(
class OfferList(
mixins.ListModelMixin, mixins.CreateModelMixin, generics.GenericAPIView
):
mixins.ListModelMixin,
mixins.CreateModelMixin,
generics.GenericAPIView
):
permission_classes = [IsAuthenticatedOrReadOnly]
serializer_class = OfferSerializer
......@@ -98,41 +96,41 @@ class OfferList(
serializer.save(owner=self.request.user)
def get_queryset(self):
qs = Offer.objects.none()
query_set = Offer.objects.none()
result = Offer.objects.none()
if self.request.user:
qs = Offer.objects.filter(
query_set = Offer.objects.filter(
Q(owner=self.request.user) | Q(recipient=self.request.user)
).distinct()
qp = self.request.query_params
u = self.request.user
query_params = self.request.query_params
user = self.request.user
# filtering by status (if provided)
s = qp.get("status", None)
if s is not None and self.request is not None:
qs = qs.filter(status=s)
if qp.get("status", None) is None:
qs = Offer.objects.filter(Q(owner=u)).distinct()
status = query_params.get("status", None)
if status is not None and self.request is not None:
query_set = query_set.filter(status=status)
if query_params.get("status", None) is None:
query_set = Offer.objects.filter(Q(owner=user)).distinct()
# filtering by category (sent or received)
c = qp.get("category", None)
if c is not None and qp is not None:
if c == "sent":
qs = qs.filter(owner=u)
elif c == "received":
qs = qs.filter(recipient=u)
return qs
else:
return result
category = query_params.get("category", None)
if category is not None and query_params is not None:
if category == "sent":
query_set = query_set.filter(owner=user)
elif category == "received":
query_set = query_set.filter(recipient=user)
return query_set
return result
class OfferDetail(
mixins.RetrieveModelMixin,
mixins.UpdateModelMixin,
mixins.DestroyModelMixin,
generics.GenericAPIView,
):
mixins.RetrieveModelMixin,
mixins.UpdateModelMixin,
mixins.DestroyModelMixin,
generics.GenericAPIView,
):
permission_classes = [IsAuthenticatedOrReadOnly]
queryset = Offer.objects.all()
serializer_class = OfferSerializer
......@@ -151,11 +149,11 @@ class OfferDetail(
class AthleteFileList(
mixins.ListModelMixin,
mixins.CreateModelMixin,
CreateListModelMixin,
generics.GenericAPIView,
):
mixins.ListModelMixin,
mixins.CreateModelMixin,
CreateListModelMixin,
generics.GenericAPIView,
):
queryset = AthleteFile.objects.all()
serializer_class = AthleteFileSerializer
permission_classes = [permissions.IsAuthenticated & (IsAthlete | IsCoach)]
......@@ -182,11 +180,11 @@ class AthleteFileList(
class AthleteFileDetail(
mixins.RetrieveModelMixin,
mixins.UpdateModelMixin,
mixins.DestroyModelMixin,
generics.GenericAPIView,
):
mixins.RetrieveModelMixin,
mixins.UpdateModelMixin,
mixins.DestroyModelMixin,
generics.GenericAPIView,
):
queryset = AthleteFile.objects.all()
serializer_class = AthleteFileSerializer
permission_classes = [permissions.IsAuthenticated & (IsAthlete | IsOwner)]
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment