Exemplo n.º 1
0
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
Exemplo n.º 2
0
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
Exemplo n.º 5
0
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
Exemplo n.º 6
0
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
Exemplo n.º 7
0
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
Exemplo n.º 8
0
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
Exemplo n.º 9
0
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
Exemplo n.º 10
0
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
Exemplo n.º 11
0
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
Exemplo n.º 12
0
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"
Exemplo n.º 13
0
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
Exemplo n.º 14
0
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
Exemplo n.º 15
0
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,
    )