diff --git a/tests/videodinges/factories.py b/tests/videodinges/factories.py index 93059d2..458bb89 100644 --- a/tests/videodinges/factories.py +++ b/tests/videodinges/factories.py @@ -14,10 +14,8 @@ def create(model: Type[T], **kwargs) -> T: return _create_with_defaults(models.Video, kwargs, title='Title', slug='slug', description='Description') if model is models.Transcoding: - video = create(models.Video, title='Title', slug='slug', description='Description') \ - if 'video' not in kwargs else None defaults = dict( - video=video, + video=lambda: create(models.Video), quality=models.qualities[0].name, type=str(models.transcoding_types[0]), ) @@ -36,8 +34,16 @@ def create(model: Type[T], **kwargs) -> T: def _create_with_defaults(model: Type[T], kwargs: dict, **defaults) -> T: """ Return created django model instance. + When providing lambda as default item, the result of the lambda will be taken. + The lambda will ONLY be executed when not provided in kwargs. + :param model: django model to create :param kwargs: keyword arguments to fill the model :param defaults: default keyword arguments to use when not mentioned in kwargs """ + + for k, v in defaults.items(): + if callable(v) and not k in kwargs: + defaults[k] = v() + return model.objects.create(**{**defaults, **kwargs}) diff --git a/tests/videodinges/test_factories/test_transcoding.py b/tests/videodinges/test_factories/test_transcoding.py index 0ddaca6..b1f691f 100644 --- a/tests/videodinges/test_factories/test_transcoding.py +++ b/tests/videodinges/test_factories/test_transcoding.py @@ -24,3 +24,14 @@ class TranscodingTestCase(TestCase): self.assertEqual(transcoding.quality, '720p') self.assertEqual(transcoding.type, 'video/mp4') self.assertEqual(transcoding.url, 'http://another_url') + + def test_does_not_create_video_when_providing_one(self): + transcoding = factories.create( + Transcoding, + quality='720p', + type='video/mp4', + url='http://another_url', + video=factories.create(Video, slug='yet-another-video-slug') + ) + + self.assertEquals(Video.objects.all().count(), 1)