Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 0 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -11,5 +11,4 @@

*.pyc
**/.vscode
.pylint
**/media
75 changes: 47 additions & 28 deletions backend/core/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,42 +3,61 @@


class Material(models.Model):
name = models.CharField(max_length=30)
weight = models.FloatField()
price_by_square_meter = models.FloatField()
name = models.CharField(max_length=30)
weight = models.FloatField()
price_by_square_meter = models.FloatField()

def __str__(self):
return self.name
def __str__(self):
return self.name


class Range(models.Model):
start = models.FloatField()
stop = models.FloatField()
price = models.FloatField()
material = models.ForeignKey(Material, on_delete=models.CASCADE, related_name="ranges")
start = models.FloatField()
stop = models.FloatField()
price = models.FloatField()
material = models.ForeignKey(Material, on_delete=models.CASCADE, related_name="ranges")

def __str__(self):
return f"{self.start} - {self.stop} by {self.price}"
def __str__(self):
return f"{self.start} - {self.stop} by {self.price}"


class Order(models.Model):
username = models.CharField(max_length=70)
email = models.EmailField()
phone_number = models.CharField(max_length=20)
status = models.PositiveSmallIntegerField(choices=VERBOSE_STATUS_TYPE, default=0)
is_individual = models.BooleanField(default=True)
username = models.CharField(max_length=70)
email = models.EmailField()
phone_number = models.CharField(max_length=20)
status = models.PositiveSmallIntegerField(choices=VERBOSE_STATUS_TYPE, default=0)
is_individual = models.BooleanField(default=True)
date = models.DateField(auto_now=True)


class Detail(models.Model):
name = models.CharField(max_length=70)
material = models.ForeignKey(Material, on_delete=models.CASCADE)
width = models.FloatField()
height = models.FloatField()
dxf_file = models.FileField(upload_to="dxf")
svg_file = models.FileField(upload_to="svg")
length = models.FloatField()
order = models.ForeignKey(Order, on_delete=models.CASCADE, null=True, blank=True, related_name="details")
count = models.PositiveIntegerField(default=1)

def get_price(self):
pass
name = models.CharField(max_length=70)
material = models.ForeignKey(Material, on_delete=models.CASCADE)
width = models.FloatField()
height = models.FloatField()
dxf_file = models.FileField(upload_to="dxf")
svg_file = models.TextField()
length = models.FloatField()
order = models.ForeignKey(Order, on_delete=models.CASCADE, null=True, blank=True, related_name="details")
count = models.PositiveIntegerField(default=1)
date = models.DateField(auto_now=True)
price = models.IntegerField(default=0)

def __str__(self):
return self.name


class DXFSize(models.Model):
size = models.PositiveIntegerField(default=1000)

def save(self, *args, **kwargs):
self.__class__.objects.exclude(id=self.id).delete()
super(DXFSize, self).save(*args, **kwargs)

def get(self):
if not self.__class__.objects.exists():
instance = self.__class__.objects.create(size=1000)
instance.save()
else:
instance = self.__class__.objects.first()
return instance
1 change: 0 additions & 1 deletion backend/core/tests.py

This file was deleted.

Empty file added backend/core/tests/__init__.py
Empty file.
1 change: 1 addition & 0 deletions backend/core/tests/static/base64example.txt

Large diffs are not rendered by default.

1 change: 1 addition & 0 deletions backend/core/tests/test_forms.py
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
from django.test import TestCase
134 changes: 134 additions & 0 deletions backend/core/tests/test_models.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,134 @@
from django.test import TestCase
from ..models import Material,Range,Order,Detail


class MaterialModelTest(TestCase):

@classmethod
def setUpTestData(cls):
Material.objects.create(
name="aluminium",
weight=100.0,
price_by_square_meter=200.4
)

def test_name_max_length_material(self):
material = Material.objects.get(id=1)
max_length = material._meta.get_field("name").max_length
self.assertEquals(max_length, 30)

def test_weight_material_more_0(self):
material = Material.objects.get(id=1)
self.assertGreater(material.weight, 0.0)

def test_price_material_more_0(self):
material = Material.objects.get(id=1)
self.assertGreater(material.price_by_square_meter, 0.0)


class RangeModelTest(TestCase):

@classmethod
def setUpTestData(cls):
material1 = Material.objects.create(
name="aluminium",
weight=100.0,
price_by_square_meter=200.4
)

Range.objects.create(
start=1,
stop=5,
price=10.5,
material=material1
)

def test_start_less_stop_range(self):
range = Range.objects.get(id=1)
self.assertLess(range.start, range.stop)

def test_price_range_more_0(self):
range = Range.objects.get(id=1)
self.assertGreater(range.price, 0.0)


class OrderModelTest(TestCase):

@classmethod
def setUpTestData(cls):
Order.objects.create(
username="username_example",
email="example@gmail.com",
phone_number="899999999",
status=0,
is_individual=True,
)

def test_username_max_lenght_order(self):
order = Order.objects.get(id=1)
username_max_length = order._meta.get_field("username").max_length
self.assertEquals(username_max_length, 70)

def test_phone_number_max_lenght_order(self):
order = Order.objects.get(id=1)
phone_number_max_length = order._meta.get_field("phone_number").max_length
self.assertEquals(phone_number_max_length, 20)


class DetailModelTest(TestCase):

@classmethod
def setUpTestData(cls):

material2 = Material.objects.create(
name="aluminium",
weight=100.0,
price_by_square_meter=200.4
)

order2 = Order.objects.create(
username="username_example",
email="example@gmail.com",
phone_number="899999999",
status=0,
is_individual=True,
)

Detail.objects.create(
name = "example",
material = material2,
width = 350.5,
height = 240.3,
dxf_file = "../../static/1.dxf",
svg_file = "svg_example",
length = 0.5,
order = order2,
count = 5,
price = 60
)

def test_name_max_lenght_detail(self):
detail = Detail.objects.get(id=1)
name_max_length = detail._meta.get_field("name").max_length
self.assertEquals(name_max_length, 70)

def test_width_detail_more_0(self):
detail = Detail.objects.get(id=1)
self.assertGreater(detail.width, 0.0)

def test_height_detail_more_0(self):
detail = Detail.objects.get(id=1)
self.assertGreater(detail.height, 0.0)

def test_length_detail_more_0(self):
detail = Detail.objects.get(id=1)
self.assertGreater(detail.length, 0.0)

def test_price_detail_more_0(self):
detail = Detail.objects.get(id=1)
self.assertGreater(detail.price, 0.0)

def test_count_detail_more_0(self):
detail = Detail.objects.get(id=1)
self.assertGreater(detail.count, 0.0)

101 changes: 101 additions & 0 deletions backend/core/tests/test_urls.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,101 @@
from django.test import TestCase, Client
from django.urls import reverse
from ..models import Detail, Order, Material
import json

class CoreTests(TestCase):

def setUp(self):
self.client = Client()

self.material = Material.objects.create(
name="steel",
weight=500.0,
price_by_square_meter=700.0
)

self.order = Order.objects.create(
username="username_example",
email="example@gmail.com",
phone_number="899999999",
status=0,
is_individual=True,
)

self.detail = Detail.objects.create(
name = "example",
material = self.material,
width = 350.5,
height = 240.3,
dxf_file = "../../static/1.dxf",
svg_file = "svg_example",
length = 0.5,
order = self.order,
count = 5,
price = 60
)
# Здесь вы можете создать тестовые данные для использования в тестах
# Например:
# self.material = Material.objects.create(name="Test Material")
# ...

def test_dxf_view_post_normal(self):
f = open("./static/base64example.txt", 'r')
response = self.client.post(reverse('core:dxf_view'), {'base64file': f.read()}, content_type='application/json')
self.assertEqual(response.status_code, 200)

def test_dxf_view_post_string(self):
f = "134324rewwrwr"
response = self.client.post(reverse('core:dxf_view'), {'base64file': f}, content_type='application/json')
self.assertEqual(response.status_code, 200)

def test_dxf_view_post_integer(self):
f = 114324
response = self.client.post(reverse('core:dxf_view'), {'base64file': f}, content_type='application/json')
self.assertEqual(response.status_code, 200)

def test_detail_list_create_view(self):
response = self.client.get(reverse('core:detail'))
self.assertEqual(response.status_code, 200)
# Создание детали
# response = self.client.post(reverse('core:detail'), {'field': 'value'}, format='json')
# self.assertEqual(response.status_code, 201)

def test_order_list_create_view(self):
response = self.client.get(reverse('core:order'))
self.assertEqual(response.status_code, 200)
# Создание заказа
# response = self.client.post(reverse('core:order'), {'field': 'value'}, format='json')
# self.assertEqual(response.status_code, 201)

def test_material_get_edit_delete_view(self):
# Предполагается, что у вас есть созданный объект Material с id=1
response = self.client.get(reverse('core:materials_edit_create_delete', kwargs={'pk': 1}))
self.assertEqual(response.status_code, 200)
# Редактирование
# response = self.client.put(reverse('core:materials_edit_create_delete', kwargs={'pk': 1}), {'field': 'new_value'}, content_type='application/json')
# self.assertEqual(response.status_code, 200)
# Удаление
# response = self.client.delete(reverse('core:materials_edit_create_delete', kwargs={'pk': 1}))
# self.assertEqual(response.status_code, 204)

def test_material_list_create_view(self):
response = self.client.get(reverse('core:material'))
self.assertEqual(response.status_code, 200)
# Создание материала
# response = self.client.post(reverse('core:material'), {'field': 'value'}, format='json')
# self.assertEqual(response.status_code, 201)

def test_user_get_view(self):
response = self.client.get(reverse('core:user'))
self.assertEqual(response.status_code, 200)
# Дополнительные проверки на основе ответа

# Дополнительные тесты для других представлений







1 change: 1 addition & 0 deletions backend/core/tests/test_views.py
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
from django.test import TestCase
4 changes: 2 additions & 2 deletions backend/core/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -37,8 +37,8 @@ def dxf_view(request):
return JsonResponse({
"status": "error",
"error_message": result["error_message"]
})
})
class DetailApiView(CreateAPIView, ListAPIView):
serializer_class = DetailWithOrderStatus
queryset = Detail.objects.all()
Expand Down