Spaces:
Build error
Build error
import aiounittest | |
from botbuilder.dialogs import ObjectPath | |
class Location: | |
def __init__(self, lat: float = None, long: float = None): | |
self.lat = lat | |
self.long = long | |
class Options: | |
def __init__( | |
self, | |
first_name: str = None, | |
last_name: str = None, | |
age: int = None, | |
boolean: bool = None, | |
dictionary: dict = None, | |
location: Location = None, | |
): | |
self.first_name = first_name | |
self.last_name = last_name | |
self.age = age | |
self.boolean = boolean | |
self.dictionary = dictionary | |
self.location = location | |
class ObjectPathTests(aiounittest.AsyncTestCase): | |
async def test_typed_only_default(self): | |
default_options = Options( | |
last_name="Smith", | |
first_name="Fred", | |
age=22, | |
location=Location( | |
lat=1.2312312, | |
long=3.234234, | |
), | |
) | |
overlay = Options() | |
result = ObjectPath.assign(default_options, overlay) | |
assert result.last_name == default_options.last_name | |
assert result.first_name == default_options.first_name | |
assert result.age == default_options.age | |
assert result.boolean == default_options.boolean | |
assert result.location.lat == default_options.location.lat | |
assert result.location.long == default_options.location.long | |
async def test_typed_only_overlay(self): | |
default_options = Options() | |
overlay = Options( | |
last_name="Smith", | |
first_name="Fred", | |
age=22, | |
location=Location( | |
lat=1.2312312, | |
long=3.234234, | |
), | |
) | |
result = ObjectPath.assign(default_options, overlay) | |
assert result.last_name == overlay.last_name | |
assert result.first_name == overlay.first_name | |
assert result.age == overlay.age | |
assert result.boolean == overlay.boolean | |
assert result.location.lat == overlay.location.lat | |
assert result.location.long == overlay.location.long | |
async def test_typed_full_overlay(self): | |
default_options = Options( | |
last_name="Smith", | |
first_name="Fred", | |
age=22, | |
location=Location( | |
lat=1.2312312, | |
long=3.234234, | |
), | |
dictionary={"one": 1, "two": 2}, | |
) | |
overlay = Options( | |
last_name="Grant", | |
first_name="Eddit", | |
age=32, | |
location=Location( | |
lat=2.2312312, | |
long=2.234234, | |
), | |
dictionary={"one": 99, "three": 3}, | |
) | |
result = ObjectPath.assign(default_options, overlay) | |
assert result.last_name == overlay.last_name | |
assert result.first_name == overlay.first_name | |
assert result.age == overlay.age | |
assert result.boolean == overlay.boolean | |
assert result.location.lat == overlay.location.lat | |
assert result.location.long == overlay.location.long | |
assert "one" in result.dictionary | |
assert result.dictionary["one"] == 99 | |
assert "two" in result.dictionary | |
assert "three" in result.dictionary | |
async def test_typed_partial_overlay(self): | |
default_options = Options( | |
last_name="Smith", | |
first_name="Fred", | |
age=22, | |
location=Location( | |
lat=1.2312312, | |
long=3.234234, | |
), | |
) | |
overlay = Options( | |
last_name="Grant", | |
) | |
result = ObjectPath.assign(default_options, overlay) | |
assert result.last_name == overlay.last_name | |
assert result.first_name == default_options.first_name | |
assert result.age == default_options.age | |
assert result.boolean == default_options.boolean | |
assert result.location.lat == default_options.location.lat | |
assert result.location.long == default_options.location.long | |
async def test_typed_no_target(self): | |
overlay = Options( | |
last_name="Smith", | |
first_name="Fred", | |
age=22, | |
location=Location( | |
lat=1.2312312, | |
long=3.234234, | |
), | |
) | |
result = ObjectPath.assign(None, overlay) | |
assert result.last_name == overlay.last_name | |
assert result.first_name == overlay.first_name | |
assert result.age == overlay.age | |
assert result.boolean == overlay.boolean | |
assert result.location.lat == overlay.location.lat | |
assert result.location.long == overlay.location.long | |
async def test_typed_no_overlay(self): | |
default_options = Options( | |
last_name="Smith", | |
first_name="Fred", | |
age=22, | |
location=Location( | |
lat=1.2312312, | |
long=3.234234, | |
), | |
) | |
result = ObjectPath.assign(default_options, None) | |
assert result.last_name == default_options.last_name | |
assert result.first_name == default_options.first_name | |
assert result.age == default_options.age | |
assert result.boolean == default_options.boolean | |
assert result.location.lat == default_options.location.lat | |
assert result.location.long == default_options.location.long | |
async def test_no_target_or_overlay(self): | |
result = ObjectPath.assign(None, None, Options) | |
assert result | |
async def test_dict_partial_overlay(self): | |
default_options = { | |
"last_name": "Smith", | |
"first_name": "Fred", | |
"age": 22, | |
"location": Location( | |
lat=1.2312312, | |
long=3.234234, | |
), | |
} | |
overlay = { | |
"last_name": "Grant", | |
} | |
result = ObjectPath.assign(default_options, overlay) | |
assert result["last_name"] == overlay["last_name"] | |
assert result["first_name"] == default_options["first_name"] | |
assert result["age"] == default_options["age"] | |
assert result["location"].lat == default_options["location"].lat | |
assert result["location"].long == default_options["location"].long | |
async def test_dict_to_typed_overlay(self): | |
default_options = Options( | |
last_name="Smith", | |
first_name="Fred", | |
age=22, | |
location=Location( | |
lat=1.2312312, | |
long=3.234234, | |
), | |
) | |
overlay = { | |
"last_name": "Grant", | |
} | |
result = ObjectPath.assign(default_options, overlay) | |
assert result.last_name == overlay["last_name"] | |
assert result.first_name == default_options.first_name | |
assert result.age == default_options.age | |
assert result.boolean == default_options.boolean | |
assert result.location.lat == default_options.location.lat | |
assert result.location.long == default_options.location.long | |
async def test_set_value(self): | |
test = {} | |
ObjectPath.set_path_value(test, "x.y.z", 15) | |
ObjectPath.set_path_value(test, "x.p", "hello") | |
ObjectPath.set_path_value(test, "foo", {"Bar": 15, "Blat": "yo"}) | |
ObjectPath.set_path_value(test, "x.a[1]", "yabba") | |
ObjectPath.set_path_value(test, "x.a[0]", "dabba") | |
ObjectPath.set_path_value(test, "null", None) | |
assert ObjectPath.get_path_value(test, "x.y.z") == 15 | |
assert ObjectPath.get_path_value(test, "x.p") == "hello" | |
assert ObjectPath.get_path_value(test, "foo.bar") == 15 | |
assert not ObjectPath.try_get_path_value(test, "foo.Blatxxx") | |
assert ObjectPath.try_get_path_value(test, "x.a[1]") == "yabba" | |
assert ObjectPath.try_get_path_value(test, "x.a[0]") == "dabba" | |
assert not ObjectPath.try_get_path_value(test, "null") | |
async def test_remove_path_value(self): | |
test = {} | |
ObjectPath.set_path_value(test, "x.y.z", 15) | |
ObjectPath.set_path_value(test, "x.p", "hello") | |
ObjectPath.set_path_value(test, "foo", {"Bar": 15, "Blat": "yo"}) | |
ObjectPath.set_path_value(test, "x.a[1]", "yabba") | |
ObjectPath.set_path_value(test, "x.a[0]", "dabba") | |
ObjectPath.remove_path_value(test, "x.y.z") | |
with self.assertRaises(KeyError): | |
ObjectPath.get_path_value(test, "x.y.z") | |
assert ObjectPath.get_path_value(test, "x.y.z", 99) == 99 | |
ObjectPath.remove_path_value(test, "x.a[1]") | |
assert not ObjectPath.try_get_path_value(test, "x.a[1]") | |
assert ObjectPath.try_get_path_value(test, "x.a[0]") == "dabba" | |