fixed create_company_user endoint, tests working
This commit is contained in:
@@ -580,3 +580,61 @@ class ActivateUserTest(APITestCase):
|
|||||||
# assertions
|
# assertions
|
||||||
self.assertEquals(response.status_code, 406)
|
self.assertEquals(response.status_code, 406)
|
||||||
self.assertTrue('error' in response.json())
|
self.assertTrue('error' in response.json())
|
||||||
|
|
||||||
|
|
||||||
|
class CreateCompanyUserTest(APITestCase):
|
||||||
|
|
||||||
|
def setUp(self):
|
||||||
|
self.endpoint = '/api/v1/create_company_user/'
|
||||||
|
self.factory = factories.CustomUserFactory
|
||||||
|
self.model = models.CustomUser
|
||||||
|
# create user
|
||||||
|
self.email = f"user@mail.com"
|
||||||
|
self.password = ''.join(random.choices(string.ascii_uppercase, k = 10))
|
||||||
|
self.user = self.factory(email=self.email, is_active=False)
|
||||||
|
self.user.set_password(self.password)
|
||||||
|
self.user.save()
|
||||||
|
|
||||||
|
def test_succesful_creation(self):
|
||||||
|
data = {
|
||||||
|
'user': {
|
||||||
|
'email': 'test@email.com',
|
||||||
|
'full_name': 'TEST NAME',
|
||||||
|
'password': 'VENTILADORES1234499.89',
|
||||||
|
},
|
||||||
|
'company': {
|
||||||
|
'cif': 'qwerewq',
|
||||||
|
'company_name': 'qwerewq',
|
||||||
|
'short_name': 'qwerewq',
|
||||||
|
'web_link': 'http://qwerewq.com',
|
||||||
|
'shop': True,
|
||||||
|
'shop_link': 'http://qwerewq.com',
|
||||||
|
'platform': 'PRESTASHOP',
|
||||||
|
'email': 'test@email.com',
|
||||||
|
'logo': None,
|
||||||
|
'city': None,
|
||||||
|
'address': 'qwer qewr 5',
|
||||||
|
'geo': None,
|
||||||
|
'phone': '1234',
|
||||||
|
'mobile': '4321',
|
||||||
|
'other_phone': '41423',
|
||||||
|
'description': 'dfgfdgdfg',
|
||||||
|
'shop_rss_feed': 'http://qwerewq.com',
|
||||||
|
'sale_terms': 'tewrnmfew f ewfrfew ewewew f',
|
||||||
|
'shipping_cost': '12.25',
|
||||||
|
'sync': False
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
response = self.client.post(self.endpoint, data=data, format='json')
|
||||||
|
|
||||||
|
self.assertEquals(response.status_code, 201)
|
||||||
|
self.assertEquals(len(mail.outbox), 1)
|
||||||
|
|
||||||
|
def test_creation_error(self):
|
||||||
|
|
||||||
|
response = self.client.post(self.endpoint, data={}, format='json')
|
||||||
|
|
||||||
|
self.assertEquals(response.status_code, 406)
|
||||||
|
self.assertEquals(len(mail.outbox), 0)
|
||||||
|
|
||||||
|
|||||||
@@ -20,6 +20,7 @@ from rest_framework.generics import UpdateAPIView
|
|||||||
from rest_framework.decorators import api_view, permission_classes
|
from rest_framework.decorators import api_view, permission_classes
|
||||||
|
|
||||||
from companies.models import Company
|
from companies.models import Company
|
||||||
|
from companies.serializers import CompanySerializer
|
||||||
from geo.models import City
|
from geo.models import City
|
||||||
|
|
||||||
from . import models
|
from . import models
|
||||||
@@ -112,51 +113,47 @@ class UpdateUserView(UpdateAPIView):
|
|||||||
@permission_classes([CustomUserPermissions,])
|
@permission_classes([CustomUserPermissions,])
|
||||||
def create_company_user(request):
|
def create_company_user(request):
|
||||||
"""
|
"""
|
||||||
Create non-validated company and manager user associated
|
Create non-validated company and associated managing user
|
||||||
"""
|
"""
|
||||||
user_data = {
|
if 'user' not in request.data:
|
||||||
'full_name': request.data['user']['full_name'],
|
return Response({"error": "Missing parameter: user"}, status=406)
|
||||||
'email': request.data['user']['email'],
|
if 'company' not in request.data:
|
||||||
'password': request.data['user']['password']
|
return Response({"error": "Missing parameter: company"}, status=406)
|
||||||
}
|
|
||||||
company_data = {
|
|
||||||
'cif': request.data['company']['cif'],
|
|
||||||
'company_name': request.data['company']['company_name'],
|
|
||||||
'short_name': request.data['company']['short_name'],
|
|
||||||
'web_link': request.data['company']['web_link'],
|
|
||||||
'shop': request.data['company']['shop'],
|
|
||||||
'city': request.data['company']['city'],
|
|
||||||
'geo': request.data['company']['geo'],
|
|
||||||
'address': request.data['company']['address']
|
|
||||||
}
|
|
||||||
try:
|
|
||||||
user = models.CustomUser.objects.create(email=user_data['email'], full_name=user_data['full_name'])
|
|
||||||
except IntegrityError as e:
|
|
||||||
return Response({"errors": {"details": str(e)}}, status=status.HTTP_409_CONFLICT)
|
|
||||||
|
|
||||||
try:
|
# create company
|
||||||
city = company_data.pop('city')
|
company_data = request.data['company']
|
||||||
#city = City.objects.get(name=city)
|
# substitute coordinates for Point
|
||||||
|
geo = company_data.pop('geo')
|
||||||
|
if geo:
|
||||||
|
company_data['geo'] = Point(geo['latitude'],geo['longitude'])
|
||||||
|
company_serializer = CompanySerializer(
|
||||||
|
data=company_data,
|
||||||
|
)
|
||||||
|
if company_serializer.is_valid():
|
||||||
|
# save model instance data
|
||||||
|
new_company = Company.objects.create(**company_serializer.validated_data)
|
||||||
|
else:
|
||||||
|
return Response({"error": "Company data is not valid"}, status=406)
|
||||||
|
|
||||||
geo = company_data.pop('geo')
|
# create user
|
||||||
geo = Point(geo['latitude'],geo['longitude'])
|
user_data = request.data['user']
|
||||||
|
user_data['role'] = 'COOP_MANAGER'
|
||||||
|
user_data['company'] = new_company.id
|
||||||
|
user_serializer = core_serializers.CustomUserWriteSerializer(
|
||||||
|
data=user_data,
|
||||||
|
)
|
||||||
|
if user_serializer.is_valid():
|
||||||
|
# save model instance data
|
||||||
|
password = user_serializer.validated_data.pop('password')
|
||||||
|
new_user = User(**user_serializer.validated_data)
|
||||||
|
new_user.set_password(password)
|
||||||
|
new_user.save()
|
||||||
|
# send verification email
|
||||||
|
utils.send_verification_email(request, new_user)
|
||||||
|
else:
|
||||||
|
return Response({"error": "User data is not valid"}, status=406)
|
||||||
|
|
||||||
company = Company.objects.create(**company_data, city=city, geo=geo)
|
return Response(status=status.HTTP_201_CREATED)
|
||||||
except Exception as e:
|
|
||||||
user.delete()
|
|
||||||
return Response({"errors": {"details": str(e)}}, status=status.HTTP_500_INTERNAL_SERVER_ERROR)
|
|
||||||
|
|
||||||
user.set_password(user_data['password'])
|
|
||||||
user.company = company
|
|
||||||
user.role = 'COOP_MANAGER'
|
|
||||||
user.save()
|
|
||||||
|
|
||||||
company.creator = user
|
|
||||||
company.save()
|
|
||||||
|
|
||||||
serializer = core_serializers.CustomUserSerializer(user)
|
|
||||||
|
|
||||||
return Response(data=serializer.data,status=status.HTTP_201_CREATED)
|
|
||||||
|
|
||||||
|
|
||||||
@api_view(['GET',])
|
@api_view(['GET',])
|
||||||
|
|||||||
@@ -6,6 +6,7 @@ from django.db.models import Q
|
|||||||
from django.contrib.postgres.search import SearchQuery, SearchRank, SearchVector, TrigramSimilarity
|
from django.contrib.postgres.search import SearchQuery, SearchRank, SearchVector, TrigramSimilarity
|
||||||
from django.db.models import Max, Min
|
from django.db.models import Max, Min
|
||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
|
from django.utils import timezone
|
||||||
|
|
||||||
import requests
|
import requests
|
||||||
|
|
||||||
@@ -203,7 +204,7 @@ def product_loader(csv_reader, user, company=None):
|
|||||||
return None
|
return None
|
||||||
|
|
||||||
# create historysync instance
|
# create historysync instance
|
||||||
history = HistorySync.objects.create(company=company, sync_date=datetime.datetime.now())
|
history = HistorySync.objects.create(company=company, sync_date=timezone.now())
|
||||||
for row in csv_reader:
|
for row in csv_reader:
|
||||||
# trim strings
|
# trim strings
|
||||||
for key in row:
|
for key in row:
|
||||||
|
|||||||
Reference in New Issue
Block a user