Skip to content

Commit

Permalink
Django fields testing
Browse files Browse the repository at this point in the history
This commit adds test for different django fields and
some of their parameters.

This commit also adds model-bakery as a requirement which
is used to create mock objects of model classes and facilitates
testing.

work towards vitessio/vitess#7905

Signed-off-by: abhaykatheria <[email protected]>
  • Loading branch information
abhaykatheria committed Jun 2, 2021
1 parent 15a2256 commit a14808d
Show file tree
Hide file tree
Showing 5 changed files with 172 additions and 2 deletions.
2 changes: 1 addition & 1 deletion frameworks/python/django/Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ RUN apk add --no-cache mariadb-connector-c

ADD src/requirements.txt /src/requirements.txt
RUN \
apk add --no-cache --virtual .build-deps gcc libc-dev mariadb-dev && \
apk add --no-cache --virtual .build-deps gcc libc-dev mariadb-dev jpeg-dev&& \
pip install --no-cache-dir -r /src/requirements.txt && \
apk del .build-deps

Expand Down
2 changes: 2 additions & 0 deletions frameworks/python/django/src/requirements.txt
Original file line number Diff line number Diff line change
Expand Up @@ -3,3 +3,5 @@ Django==3.1.4
mysqlclient==2.0.1
pytz==2020.4
sqlparse==0.4.1
model-bakery==1.3.1
Pillow==8.2.0
46 changes: 45 additions & 1 deletion frameworks/python/django/src/testApp/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,4 +5,48 @@ class Person(models.Model):
last_name = models.CharField(max_length=100)

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


class Event(models.Model):
id = models.BigAutoField(primary_key=True)

title = models.CharField(max_length=150)
start_date = models.DateField()
start_date_time = models.DateTimeField()
duration = models.DurationField()
organiser_email = models.EmailField()
banner = models.ImageField()
slug = models.SlugField()
no_of_attendees = models.IntegerField()
no_of_views = models.BigIntegerField()
website = models.URLField(null=True)
start_time = models.TimeField()
summary = models.TextField()
brochure = models.FileField()
rating = models.FloatField(blank=True, default="5.0")
is_accepting_registration = models.BooleanField()
SHIRT_SIZES = (
("S", "Small"),
("M", "Medium"),
("L", "Large"),
)
t_size = models.CharField(max_length=20, choices=SHIRT_SIZES)

def __str__(self):
return self.title


class Server(models.Model):
uuid = models.UUIDField()
ip = models.GenericIPAddressField()
memory_in_mb = models.PositiveBigIntegerField()
no_of_cores = models.PositiveSmallIntegerField()
freq_in_ghz = models.SmallIntegerField()
no_of_threads = models.PositiveIntegerField()
binary_sig = models.BinaryField()
cache_size = models.DecimalField(max_digits=100, decimal_places=10)
name = models.CharField(max_length=100)

def __str__(self):
return self.name
Empty file.
124 changes: 124 additions & 0 deletions frameworks/python/django/src/testApp/test/test_fields/test_fields.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,124 @@
# Django's guide on Model layer
# https://docs.djangoproject.com/en/3.2/topics/db/models

from django.test import TestCase
from testApp.models import Person, Event, Server
from django.core.files.uploadedfile import SimpleUploadedFile
from pprint import pprint
from model_bakery import baker
from datetime import datetime, timedelta, time
from uuid import UUID
from decimal import Decimal


class FieldsTestCase(TestCase):
@classmethod
def setUpTestData(cls):
small_gif = (
b"\x47\x49\x46\x38\x39\x61\x01\x00\x01\x00\x00\x00\x00\x21\xf9\x04"
b"\x01\x0a\x00\x01\x00\x2c\x00\x00\x00\x00\x01\x00\x01\x00\x00\x02"
b"\x02\x4c\x01\x00\x3b"
)
cls.test_image = SimpleUploadedFile(
"small.gif", small_gif, content_type="image/gif"
)
cls.test_event = baker.make("testApp.Event", title="TEST EVENT")
cls.test_server = baker.make("testApp.Server", name="TEST SERVER")

def test_event_model(self):
event_1 = Event.objects.get(title="TEST EVENT")

# testing big auto field as a primary key
self.assertEqual(event_1.id, 1)

# testing website field with default null value
self.assertIsNone(event_1.website)

# testing fields with choices
self.assertIn(event_1.t_size, ("S", "M", "L"))
event_1.brochure = self.test_image
print(event_1.id)

# testing float field with blank = true and a set default value
self.assertIsNotNone(event_1.rating)
self.assertEquals(event_1.rating, 5.0)
self.assertIsInstance(event_1.rating, float)

# testing date and datetime fields
self.assertEqual(event_1.start_date_time.date(), datetime.today().date())
self.assertEqual(event_1.start_date, datetime.today().date())

# testing duration field
self.assertIsNotNone(event_1.duration)
self.assertIsInstance(event_1.duration, timedelta)

# testing email field
self.assertIsNotNone(event_1.organiser_email)
self.assertIsInstance(event_1.organiser_email, str)

# testing slug field
self.assertIsNotNone(event_1.slug)
self.assertIsInstance(event_1.slug, str)

# testing big integer field
self.assertIsNotNone(event_1.no_of_views)
self.assertIsInstance(event_1.no_of_views, int)

# testing integer field
self.assertIsNotNone(event_1.no_of_attendees)
self.assertIsInstance(event_1.no_of_attendees, int)

# testing time field
self.assertIsNotNone(event_1.start_time)
self.assertIsInstance(event_1.start_time, time)

# testing text field
self.assertIsNotNone(event_1.summary)
self.assertIsInstance(event_1.summary, str)

# testing boolean field
self.assertIsNotNone(event_1.is_accepting_registration)
self.assertIsInstance(event_1.is_accepting_registration, bool)

# testing image field
event_1.banner = self.test_image
self.assertIsNotNone(event_1.banner)

# testing file field
event_1.brochure = self.test_image
self.assertIsNotNone(event_1.brochure)

def test_server_model(self):
test_server = Server.objects.get(name="TEST SERVER")

# testing UUID Fields
self.assertIsNotNone(test_server.uuid)
self.assertIsInstance(test_server.uuid, UUID)

# testing generic ip field
self.assertIsNotNone(test_server.ip)
self.assertIsInstance(test_server.ip, str)

# testing positive big integer field
self.assertIsNotNone(test_server.memory_in_mb)
self.assertIsInstance(test_server.memory_in_mb, int)

# testing positive small integer field
self.assertIsNotNone(test_server.no_of_cores)
self.assertIsInstance(test_server.no_of_cores, int)

# testing small integer field
self.assertIsNotNone(test_server.freq_in_ghz)
self.assertIsInstance(test_server.freq_in_ghz, int)

# testing positive integer field
self.assertIsNotNone(test_server.no_of_threads)
self.assertIsInstance(test_server.no_of_threads, int)

# testing binary field
self.assertIsNotNone(test_server.binary_sig)
self.assertIsInstance(test_server.binary_sig, bytes)

# testing decimal field
self.assertIsNotNone(test_server.cache_size)
self.assertIsInstance(test_server.cache_size, Decimal)

0 comments on commit a14808d

Please sign in to comment.