Skip to content

Commit

Permalink
Merge branch 'master' of github.com:ccollins/milkman
Browse files Browse the repository at this point in the history
Conflicts:
	milkman/dairy.py
	milkman/generators.py
	testapp/models.py
	testapp/tests.py
  • Loading branch information
ccollins committed Aug 30, 2010
2 parents 0438c09 + b104a0c commit ecc60ed
Show file tree
Hide file tree
Showing 4 changed files with 67 additions and 28 deletions.
14 changes: 5 additions & 9 deletions milkman/dairy.py
Expand Up @@ -28,16 +28,16 @@ def register():
registry.add_generator(models.FloatField, generators.random_float_maker)
registry.add_generator(models.IntegerField, generators.random_integer_maker)
registry.add_generator(models.IPAddressField, generators.random_ipaddress_maker)
registry.add_generator(models.NullBooleanField, generators.random_null_boolean_maker)
registry.add_generator(models.PositiveIntegerField, generators.random_positive_integer_maker)
registry.add_generator(models.PositiveSmallIntegerField, generators.random_small_positive_integer_maker)
registry.add_generator(models.SlugField, generators.random_string_maker)
registry.add_generator(models.SmallIntegerField, generators.random_small_integer_maker)
registry.add_generator(models.TimeField, generators.random_time_string_maker)
# registry.add_generator(models.FileField, default_generator)
# registry.add_generator(models.FilePathField, default_generator)
# registry.add_generator(models.ImageField, default_generator)
# registry.add_generator(models.NullBooleanField, default_generator)
# registry.add_generator(models.PositiveIntegerField, default_generator)
# registry.add_generator(models.PositiveSmallIntegerField, default_generator)
# registry.add_generator(models.SmallIntegerField, default_generator)
# registry.add_generator(models.TextField, default_generator)
# registry.add_generator(models.TimeField, default_generator)
# registry.add_generator(models.URLField, default_generator)
# registry.add_generator(models.XMLField, default_generator)
return registry
Expand Down Expand Up @@ -108,10 +108,6 @@ def __init__(self, registry):
self.registry = registry

def deliver(self, model_class, **explicit_values):
"""
Create a new instance of model class with all required fields populated
with test data from appropriate generator functions.
"""
truck = self.trucks.setdefault(model_class, MilkTruck(model_class))
return truck.deliver(self, **explicit_values)

Expand Down
35 changes: 28 additions & 7 deletions milkman/generators.py
Expand Up @@ -44,12 +44,21 @@ def random_string(max_length=None, chars=None):
def random_boolean_maker(field=None):
return loop(lambda: random.choice((True, False)))

def random_null_boolean_maker(field=None):
return loop(lambda: random.choice((None, True, False)))

def random_date_string():
y = random.randint(1900, 2020)
m = random.randint(1, 12)
d = random.randint(1, 28)
return str(datetime.date(y, m, d))

def random_time_string():
h = random.randint(0, 23)
m = random.randint(0, 59)
s = random.randint(0, 59)
return str(datetime.time(h, m, s))

def random_date_string_maker(field):
return loop(random_date_string)

Expand All @@ -76,17 +85,26 @@ def email_gen_maker(field):
return sequence(lambda i: template % i)
return email_gen_maker

def random_integer_maker(field):
return loop(lambda: random.randint(-sys.maxint-1, sys.maxint))
def random_integer_maker(field, low=-sys.maxint-1, high=sys.maxint):
return loop(lambda: random.randint(low, high))

def random_big_integer_maker(field):
return random_integer_maker(field, low=-9223372036854775808, high=9223372036854775807)

def random_small_integer_maker(field):
return random_integer_maker(field, low=-1, high=1)

def random_small_positive_integer_maker(field):
return random_integer_maker(field, low=0, high=1)

def random_positive_integer_maker(field):
return random_integer_maker(field, low=0)

def random_float_maker(field):
return loop(lambda: random_float())

def random_auto_field_maker(field):
return loop(lambda: random.randint(1, sys.maxint))

def random_big_integer_maker(field):
return loop(lambda: random.randint(-9223372036854775808, 9223372036854775808))

def random_float():
return random.uniform(sys.float_info.min, sys.float_info.max)
Expand All @@ -101,7 +119,10 @@ def random_comma_seperated_integer(max_length):
max_length = (int)(max_length/2)
chars=['0','1','2','3','4','5','6','7','8','9']
return reduce(lambda x,y: "%s,%s" %(x,y), random_string(max_length, chars)).lstrip(',')

def random_comma_seperated_integer_maker(field):
max_length = getattr(field, 'max_length', DEFAULT_STRING_LENGTH)
return loop(lambda: random_comma_seperated_integer(max_length))
return loop(lambda: random_comma_seperated_integer(max_length))

def random_time_string_maker(field):
return loop(lambda: random_time_string())
16 changes: 8 additions & 8 deletions testapp/models.py
Expand Up @@ -2,12 +2,12 @@

class Root(models.Model):
my_auto = models.AutoField(blank=False, null=False, primary_key=True)
my_bigint = models.BigIntegerField(blank=False, null=False)
my_biginteger = models.BigIntegerField(blank=False, null=False)
my_boolean = models.BooleanField(blank=False, null=False)
my_char = models.CharField(blank=False, null=False, max_length=16)
my_commaseperatedinteger = models.CommaSeparatedIntegerField(blank=False, null=False, max_length=12)
my_datefield = models.DateField(blank=False, null=False)
my_datetimefield = models.DateTimeField(blank=False, null=False)
my_date = models.DateField(blank=False, null=False)
my_datetime = models.DateTimeField(blank=False, null=False)
my_decimal = models.DecimalField(blank=False, null=False, decimal_places=2, max_digits=4)
my_email = models.EmailField(blank=False, null=False)
# = models.FileField(blank=False, null=False)
Expand All @@ -16,13 +16,13 @@ class Root(models.Model):
# = models.ImageField(blank=False, null=False)
my_integer = models.IntegerField(blank=False, null=False)
my_ip = models.IPAddressField(blank=False, null=False)
# = models.NullBooleanField(blank=False, null=False)
# = models.PositiveIntegerField(blank=False, null=False)
# = models.PositiveSmallIntegerField(blank=False, null=False)
my_nullboolean = models.NullBooleanField(blank=False, null=False)
my_positiveinteger = models.PositiveIntegerField(blank=False, null=False)
my_positivesmallinteger = models.PositiveSmallIntegerField(blank=False, null=False)
my_slug = models.SlugField(blank=False, null=False)
# = models.SmallIntegerField(blank=False, null=False)
my_smallinteger = models.SmallIntegerField(blank=False, null=False)
# = models.TextField(blank=False, null=False)
# = models.TimeField(blank=False, null=False)
my_time = models.TimeField(blank=False, null=False)
# = models.URLField(blank=False, null=False)
# = models.XMLField(blank=False, null=False)

Expand Down
30 changes: 26 additions & 4 deletions testapp/tests.py
@@ -1,10 +1,11 @@
import unittest
import types
import sys
import string
from django.db import models
from milkman.dairy import milkman
from milkman.dairy import MilkTruck
from milkman.generators import email_generator, random_choice_iterator, random_string, random_float, random_ipaddress_maker, random_float_maker,random_comma_seperated_integer_maker
from milkman.generators import email_generator, random_choice_iterator, random_string, random_float, random_ipaddress_maker, random_float_maker,random_comma_seperated_integer_maker, random_time_string_maker
from testapp.models import *

MODELS = [Root, Child]
Expand Down Expand Up @@ -49,10 +50,25 @@ def test_m2m_explicit(self):
class RandomFieldTest(unittest.TestCase):
def test_required_field(self):
root = milkman.deliver(Root)
assert root.my_char
assert isinstance(root.my_boolean, types.BooleanType)
assert isinstance(root.my_auto, int)
assert isinstance(root.my_biginteger, long)
assert isinstance(root.my_boolean, bool)
assert isinstance(root.my_char, str)
assert isinstance(root.my_commaseperatedinteger, str)
assert isinstance(root.my_date, str)
assert isinstance(root.my_datetime, str)
assert isinstance(root.my_decimal, str)
assert isinstance(root.my_email, str)
assert isinstance(root.my_float, float)

assert isinstance(root.my_integer, int)
assert isinstance(root.my_ip, str)
assert (isinstance(root.my_nullboolean, bool) or isinstance(root.my_nullboolean, types.NoneType))
assert isinstance(root.my_positiveinteger, int)
assert isinstance(root.my_positivesmallinteger, int)
assert isinstance(root.my_slug, str)
assert isinstance(root.my_smallinteger, int)
assert isinstance(root.my_time, str)

class FieldTest(unittest.TestCase):
def test_needs_generated_value(self):
f = Root._meta.get_field('my_char')
Expand Down Expand Up @@ -93,3 +109,9 @@ def test_random_comma_seperated_integer_maker(self):
f = models.CommaSeparatedIntegerField()
v = random_comma_seperated_integer_maker(f)().next()
self.assertEquals(len(v.split(',')), 4)

def test_timefield_maker(self):
f = models.TimeField()
v = random_time_string_maker(f)().next()
times = v.split(':')
self.assertEquals(len(times), 3)

0 comments on commit ecc60ed

Please sign in to comment.