def test_set_property_value_int(): component = FakeComponent(component_name="test", component_id="12345678") assert 99 == component.integer set_property_value(component, "integer", 100, {"integer": 100}) assert 100 == component.integer
def test_set_property_value_datetime(): component = FakeComponent(component_name="test", component_id="12345678") assert datetime(2020, 1, 1) == component.datetime set_property_value( component, "datetime", datetime(2020, 1, 2), {"datetime": datetime(2020, 1, 2)} ) assert datetime(2020, 1, 2) == component.datetime
def test_set_property_value_int(): component = FakeComponent(component_name="test", component_id="12345678") assert 99 == component.integer integer = 100 data = {"integer": None} set_property_value(component, "integer", integer, data) assert component.integer == integer assert data["integer"] == integer
def test_set_property_value_datetime(): component = FakeComponent(component_name="test", component_id="12345678") assert datetime(2020, 1, 1) == component.datetime dt = datetime(2020, 1, 2) data = {"datetime": None} set_property_value(component, "datetime", dt, data) assert component.datetime == dt assert data["datetime"] == dt
def test_set_property_value_model(): component = FakeComponent(component_name="test", component_id="12345678") assert "initial-flavor" == component.model.name set_property_value( component, "model", Flavor(name="test-flavor"), {"model": {"name": "test-flavor"}}, ) assert "test-flavor" == component.model.name
def test_set_property_value_str(): component = FakeComponent(component_name="test", component_id="12345678") assert "property_view" == component.string set_property_value( component, "string", "property_view_updated", {"string": "property_view_updated"}, ) assert "property_view_updated" == component.string
def test_set_property_value_dataclass(): component = PropertyView(component_name="test", component_id="12345678") assert InventoryItem("Hammer", 20) == component.inventory set_property_value( component, "inventory", InventoryItem("Hammer", 20, 1), {"inventory": InventoryItem("Hammer", 20, 1)}, ) assert InventoryItem("Hammer", 20, 1) == component.inventory
def test_set_property_value_model(): component = FakeComponent(component_name="test", component_id="12345678") assert "initial-flavor" == component.model.name model = Flavor(name="test-flavor") data = {"model": {}} set_property_value( component, "model", model, data, ) assert component.model.name == model.name assert data["model"] == model
def test_set_property_value_str(): component = FakeComponent(component_name="test", component_id="12345678") assert "property_view" == component.string string = "property_view_updated" data = {"string": "property_view_updated"} set_property_value( component, "string", string, data, ) assert component.string == string assert data["string"] == string
def test_set_property_value_queryset(): component = FakeComponent(component_name="test", component_id="12345678") assert len(component.queryset) == 0 flavor_one = Flavor(name="test-flavor-one") flavor_one.save() flavor_two = Flavor(name="test-flavor-two") flavor_two.save() queryset = Flavor.objects.all()[:2] data = {"queryset": []} set_property_value( component, "queryset", queryset, data, ) assert len(queryset) == 2 assert data["queryset"] == queryset
def test_set_property_value_queryset(): component = FakeComponent(component_name="test", component_id="12345678") assert len(component.queryset) == 0 flavor_one = Flavor(name="test-flavor-one") flavor_one.save() flavor_two = Flavor(name="test-flavor-two") flavor_two.save() queryset = Flavor.objects.all()[:2] set_property_value( component, "queryset", queryset, {"queryset": [{"name": "test-flavor-one"}, {"name": "test-flavor-two"}]}, ) assert len(queryset) == 2
def test_set_property_value_array(): flavor_one = Flavor(name="initial 1") flavor_one.save() flavor_two = Flavor(name="initial 2") flavor_two.save() component = FakeComponent(component_name="test", component_id="12345678") set_property_value( component, "flavors.0.name", "test 1", {"flavors": [{ "name": "test" }, { "name": "something" }]}, ) assert component.flavors[0].name == "test 1"
def test_set_property_value_many_to_many_is_referenced(): component = FakeComponent(component_name="test", component_id="12345678") component.model.save() assert component.model.taste_set.count() == 0 taste = Taste(name="Bitter") taste.save() flavor = Flavor(name="test-flavor") flavor.save() flavor.taste_set.add(taste) data = {"model": {}} set_property_value( component, "model.taste_set", [taste.pk], data, ) assert data["model"]["taste_set"] == [taste.pk] assert component.model.taste_set.count() == 1
def test_set_property_value_foreign_key(): flavor = Flavor(name="initial 1") flavor.save() parent = Flavor(name="initial 2") parent.save() component = FakeComponent(component_name="test", component_id="12345678") set_property_value( component, "flavors.0.parent", parent.pk, {"flavors": [ { "name": flavor.name, "parent": None }, ]}, ) assert component.flavors[0].parent_id == parent.pk
def handle(component_request: ComponentRequest, component: UnicornView, payload: Dict): call_method_name = payload.get("name", "") assert call_method_name, "Missing 'name' key for callMethod" (method_name, args, kwargs) = parse_call_method_name(call_method_name) return_data = Return(method_name, args, kwargs) setter_method = {} is_refresh_called = False is_reset_called = False validate_all_fields = False if "=" in call_method_name: try: setter_method = parse_kwarg(call_method_name, raise_if_unparseable=True) except InvalidKwarg: pass if setter_method: property_name = list(setter_method.keys())[0] property_value = setter_method[property_name] set_property_value(component, property_name, property_value) return_data = Return(property_name, [property_value]) else: if method_name == "$refresh": # Handle the refresh special action component = UnicornView.create( component_id=component_request.id, component_name=component_request.name, request=component_request.request, ) # Set component properties based on request data for ( property_name, property_value, ) in component_request.data.items(): set_property_from_data(component, property_name, property_value) component.hydrate() is_refresh_called = True elif method_name == "$reset": # Handle the reset special action component = UnicornView.create( component_id=component_request.id, component_name=component_request.name, request=component_request.request, use_cache=False, ) # Explicitly remove all errors and prevent validation from firing before render() component.errors = {} is_reset_called = True elif method_name == "$toggle": for property_name in args: property_value = _get_property_value(component, property_name) property_value = not property_value set_property_value(component, property_name, property_value) elif method_name == "$validate": # Handle the validate special action validate_all_fields = True else: component.calling(method_name, args) return_data.value = _call_method_name(component, method_name, args, kwargs) component.called(method_name, args) return ( component, is_refresh_called, is_reset_called, validate_all_fields, return_data, )