Skip to content

Commit

Permalink
Apply field default if it exists. (#44)
Browse files Browse the repository at this point in the history
* Refactoring tests

* Prevent to guess formatter if the field has an default value

* Removing unused pprint import
  • Loading branch information
Paulo Barros authored and Brobin committed Jan 15, 2018
1 parent e4b00f7 commit d6e8a6e
Show file tree
Hide file tree
Showing 4 changed files with 48 additions and 6 deletions.
3 changes: 2 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -31,4 +31,5 @@ var/
*.egg

env/
.idea
.idea
.vscode
1 change: 0 additions & 1 deletion django_seed/guessers.py
Original file line number Diff line number Diff line change
Expand Up @@ -66,7 +66,6 @@ def guess_format(self, field):
faker = self.faker
provider = self.provider


if isinstance(field, DurationField): return lambda x: provider.duration()
if isinstance(field, UUIDField): return lambda x: provider.uuid()

Expand Down
8 changes: 7 additions & 1 deletion django_seed/seeder.py
Original file line number Diff line number Diff line change
Expand Up @@ -38,9 +38,15 @@ def guess_field_formatters(self, faker):
field_type_guesser = FieldTypeGuesser(faker)

for field in self.model._meta.fields:

field_name = field.name

if field.get_default():
formatters[field_name] = field.get_default()
continue

if isinstance(field, (ForeignKey, ManyToManyField, OneToOneField)):
formatters[field_name] = self.build_relation(field, field.rel.to)
formatters[field_name] = self.build_relation(field, field.related_model)
continue

if isinstance(field, AutoField):
Expand Down
42 changes: 39 additions & 3 deletions django_seed/tests.py
Original file line number Diff line number Diff line change
Expand Up @@ -63,7 +63,7 @@ class Player(models.Model):
avatar = models.FilePathField()
score = models.BigIntegerField()
last_login_at = models.DateTimeField()
game = models.ForeignKey(Game)
game = models.ForeignKey(to=Game, on_delete=models.CASCADE)
ip = models.IPAddressField()
achievements = models.CommaSeparatedIntegerField(max_length=1000)
friends = models.PositiveIntegerField()
Expand All @@ -83,8 +83,15 @@ class Action(models.Model):
executed_at = models.DateTimeField()
duration = models.DurationField()
uuid = models.UUIDField()
actor = models.ForeignKey(Player,related_name='actions', null=False)
target = models.ForeignKey(Player, related_name='enemy_actions+', null=True)
actor = models.ForeignKey(to=Player,on_delete=models.CASCADE,related_name='actions', null=False)
target = models.ForeignKey(to=Player,on_delete=models.CASCADE, related_name='enemy_actions+', null=True)

class Product(models.Model):

name = models.CharField(max_length=100)
short_description = models.CharField(max_length=100, default='default short description')
description = models.TextField(default='default long description')
enabled = models.BooleanField(default=True)


class NameGuesserTestCase(TestCase):
Expand Down Expand Up @@ -258,3 +265,32 @@ def test_invalid_number_arg(self):
except Exception as e:
self.assertTrue(isinstance(e, SeederCommandError))
pass

class DefaultValueTestCase(TestCase):

def test_default_value_guessed_by_field_type(self):
faker = fake
seeder = Seeder(faker)

seeder.add_entity(Product, 1, {'name':'Awesome Product'})
_id = seeder.execute()

self.assertIsNotNone(_id)

product = Product.objects.get(id=_id[Product][0])

self.assertEquals(product.short_description, 'default short description')
self.assertTrue(product.enabled)

def test_default_value_guessed_by_field_name(self):
faker = fake
seeder = Seeder(faker)

seeder.add_entity(Product, 1, {'name':'Great Product'})
_id = seeder.execute()

self.assertIsNotNone(_id)

product = Product.objects.get(id=_id[Product][0])

self.assertEquals(product.description, 'default long description')

0 comments on commit d6e8a6e

Please sign in to comment.