55
66from django_unicorn .components import UnicornView
77from django_unicorn .views .action_parsers .utils import set_property_value
8- from example .coffee .models import Flavor
8+ from example .coffee .models import Flavor , Taste
99
1010
1111class FakeComponent (UnicornView ):
@@ -15,54 +15,63 @@ class FakeComponent(UnicornView):
1515 array : List [str ] = []
1616 model = Flavor (name = "initial-flavor" )
1717 queryset = Flavor .objects .none ()
18+ taste = Taste (name = "bitter" )
1819
1920
2021def test_set_property_value_str ():
2122 component = FakeComponent (component_name = "test" , component_id = "12345678" )
2223 assert "property_view" == component .string
2324
25+ string = "property_view_updated"
26+ data = {"string" : "property_view_updated" }
27+
2428 set_property_value (
25- component ,
26- "string" ,
27- "property_view_updated" ,
28- {"string" : "property_view_updated" },
29+ component , "string" , string , data ,
2930 )
3031
31- assert "property_view_updated" == component .string
32+ assert component .string == string
33+ assert data ["string" ] == string
3234
3335
3436def test_set_property_value_int ():
3537 component = FakeComponent (component_name = "test" , component_id = "12345678" )
3638 assert 99 == component .integer
3739
38- set_property_value (component , "integer" , 100 , {"integer" : 100 })
40+ integer = 100
41+ data = {"integer" : None }
42+
43+ set_property_value (component , "integer" , integer , data )
3944
40- assert 100 == component .integer
45+ assert component .integer == integer
46+ assert data ["integer" ] == integer
4147
4248
4349def test_set_property_value_datetime ():
4450 component = FakeComponent (component_name = "test" , component_id = "12345678" )
4551 assert datetime (2020 , 1 , 1 ) == component .datetime
4652
47- set_property_value (
48- component , "datetime" , datetime (2020 , 1 , 2 ), {"datetime" : datetime (2020 , 1 , 2 )}
49- )
53+ dt = datetime (2020 , 1 , 2 )
54+ data = {"datetime" : None }
5055
51- assert datetime (2020 , 1 , 2 ) == component .datetime
56+ set_property_value (component , "datetime" , dt , data )
57+
58+ assert component .datetime == dt
59+ assert data ["datetime" ] == dt
5260
5361
5462def test_set_property_value_model ():
5563 component = FakeComponent (component_name = "test" , component_id = "12345678" )
5664 assert "initial-flavor" == component .model .name
5765
66+ model = Flavor (name = "test-flavor" )
67+ data = {"model" : {}}
68+
5869 set_property_value (
59- component ,
60- "model" ,
61- Flavor (name = "test-flavor" ),
62- {"model" : {"name" : "test-flavor" }},
70+ component , "model" , model , data ,
6371 )
6472
65- assert "test-flavor" == component .model .name
73+ assert component .model .name == model .name
74+ assert data ["model" ] == model
6675
6776
6877@pytest .mark .django_db
@@ -75,12 +84,55 @@ def test_set_property_value_queryset():
7584 flavor_two = Flavor (name = "test-flavor-two" )
7685 flavor_two .save ()
7786 queryset = Flavor .objects .all ()[:2 ]
87+ data = {"queryset" : []}
7888
7989 set_property_value (
80- component ,
81- "queryset" ,
82- queryset ,
83- {"queryset" : [{"name" : "test-flavor-one" }, {"name" : "test-flavor-two" }]},
90+ component , "queryset" , queryset , data ,
8491 )
8592
8693 assert len (queryset ) == 2
94+ assert data ["queryset" ] == queryset
95+
96+
97+ @pytest .mark .django_db
98+ def test_set_property_value_many_to_many_is_referenced ():
99+ component = FakeComponent (component_name = "test" , component_id = "12345678" )
100+ component .model .save ()
101+ assert component .model .taste_set .count () == 0
102+
103+ taste = Taste (name = "Bitter" )
104+ taste .save ()
105+ flavor = Flavor (name = "test-flavor" )
106+ flavor .save ()
107+ flavor .taste_set .add (taste )
108+
109+ data = {"model" : {}}
110+
111+ set_property_value (
112+ component , "model.taste_set" , [taste .pk ], data ,
113+ )
114+
115+ assert data ["model" ]["taste_set" ] == [taste .pk ]
116+ assert component .model .taste_set .count () == 1
117+
118+
119+ @pytest .mark .django_db
120+ def test_set_property_value_many_to_many_references_model ():
121+ component = FakeComponent (component_name = "test" , component_id = "12345678" )
122+ component .taste .save ()
123+ assert component .taste .flavor .count () == 0
124+
125+ taste = Taste (name = "Bitter" )
126+ taste .save ()
127+ flavor = Flavor (name = "test-flavor" )
128+ flavor .save ()
129+ flavor .taste_set .add (taste )
130+
131+ data = {"taste" : {}}
132+
133+ set_property_value (
134+ component , "taste.flavor" , [flavor .pk ], data ,
135+ )
136+
137+ assert data ["taste" ]["flavor" ] == [flavor .pk ]
138+ assert component .taste .flavor .count () == 1
0 commit comments