File: test_build.py

package info (click to toggle)
python-polyfactory 2.22.2-1
  • links: PTS, VCS
  • area: main
  • in suites: sid
  • size: 1,892 kB
  • sloc: python: 11,338; makefile: 103; sh: 37
file content (70 lines) | stat: -rw-r--r-- 2,287 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
from uuid import uuid4

from pydantic import BaseModel

from polyfactory.factories.pydantic_factory import ModelFactory
from tests.models import PersonFactoryWithDefaults, Pet, PetFactory


def test_merges_defaults_with_kwargs() -> None:
    first_obj = PersonFactoryWithDefaults.build()
    assert first_obj.id == PersonFactoryWithDefaults.id
    assert first_obj.name == PersonFactoryWithDefaults.name
    assert first_obj.hobbies == PersonFactoryWithDefaults.hobbies
    assert first_obj.age == PersonFactoryWithDefaults.age
    assert first_obj.pets == PersonFactoryWithDefaults.pets
    assert first_obj.birthday == PersonFactoryWithDefaults.birthday
    pet = Pet(
        name="bluey the blowfish",
        species="blowfish",
        color="bluish-green",
        sound="",
        age=1,
    )
    id_ = uuid4()
    hobbies = ["dancing"]
    age = 35
    pets = [pet]
    second_obj = PersonFactoryWithDefaults.build(id=id_, hobbies=hobbies, age=age, pets=pets)
    assert second_obj.id == id_
    assert second_obj.hobbies == hobbies
    assert second_obj.age == age
    assert second_obj.pets == [pet]
    assert second_obj.name == PersonFactoryWithDefaults.name
    assert second_obj.birthday == PersonFactoryWithDefaults.birthday


def test_respects_none_overrides() -> None:
    result = PersonFactoryWithDefaults.build(hobbies=None)
    assert result.hobbies is None


def test_uses_faker_to_set_values_when_none_available_on_class() -> None:
    result = PetFactory.build()
    assert isinstance(result.name, str)
    assert isinstance(result.species, str)
    assert isinstance(result.color, str)
    assert isinstance(result.sound, str)
    assert isinstance(result.age, float)


def test_builds_batch() -> None:
    results = PetFactory.batch(10)
    assert isinstance(results, list)
    assert len(results) == 10
    for result in results:
        assert isinstance(result.name, str)
        assert isinstance(result.species, str)
        assert isinstance(result.color, str)
        assert isinstance(result.sound, str)
        assert isinstance(result.age, float)


def test_build_model_with_fields_named_like_factory_fields() -> None:
    class C(BaseModel):
        batch: int

    class CFactory(ModelFactory):
        __model__ = C

    assert CFactory.build()