def test_call_requires_item_optional_present(self): def foo(x=1): return x context = Context() context.add(dict(bar='baz'), 'foo') result = context.call(foo, requires(item(optional('foo'), 'bar'))) compare(result, 'baz')
def test_call_requires_item(self): def foo(x): return x context = Context() context.add(dict(bar='baz'), 'foo') result = context.call(foo, requires(item('foo', 'bar'))) compare(result, 'baz')
def test_call_requires_item_optional_ContextError(self): def foo(x=1): return x context = Context() result = context.call(foo, requires(item(optional('foo'), 'bar')), result_type) compare(result, 1)
def test_call_requires_item_missing(self): def foo(obj): return obj context = Context() context.add({}, TheType) with ShouldRaise(ContextError("No TheType['foo'] in context")): context.call(foo, requires(item(TheType, 'foo')), result_type)
def test_call_requires_item_missing(self): def foo(obj): return obj context = Context() context.add({}, TheType) with ShouldRaise(ContextError( "No TheType['foo'] in context" )): context.call(foo, requires(item(TheType, 'foo')), result_type)
def test_call_requires_item_optional_ContextError(self): def foo(x=1): return x context = Context() result = context.call(foo, requires(item(optional('foo'), 'bar')), result_type) compare(result, 1)
def test_call_requires_item_optional_present(self): def foo(x=1): return x context = Context() context.add(dict(bar='baz'), 'foo') result = context.call(foo, requires(item(optional('foo'), 'bar')), result_type) compare(result, 'baz')
def test_call_requires_item_attr(self): def foo(x): return x m = Mock() m.bar= dict(baz='bob') context = Context() context.add(m, 'foo') result = context.call(foo, requires(item(attr('foo', 'bar'), 'baz'))) compare(result, 'bob')
def test_call_requires_item_attr(self): def foo(x): return x m = Mock() m.bar= dict(baz='bob') context = Context() context.add(m, 'foo') result = context.call(foo, requires(item(attr('foo', 'bar'), 'baz')), result_type) compare(result, 'bob')
def test_nested(self): class T(object): foo = dict(baz='bar') m = Mock() def job1(): m.job1() return T() def job2(obj): m.job2(obj) runner = Runner() runner.add(job1) runner.add(job2, requires(item(attr(T, 'foo'), 'baz'))) runner() compare([ call.job1(), call.job2('bar'), ], m.mock_calls)
def test_item_multiple(self): class MyDict(dict): pass m = Mock() def job1(): m.job1() obj = MyDict() obj['the_thing'] = dict(other_thing=m.the_thing) return obj def job2(obj): m.job2(obj) runner = Runner() runner.add(job1) runner.add(job2, requires(item(MyDict, 'the_thing', 'other_thing'))) runner() compare([ call.job1(), call.job2(m.the_thing), ], m.mock_calls)
def test_item_multiple(self): class MyDict(dict): pass m = Mock() def job1(): m.job1() obj = MyDict() obj['the_thing'] = dict(other_thing=m.the_thing) return obj def job2(obj): m.job2(obj) runner = Runner() runner.add(job1) runner.add(job2, requires(item(MyDict, 'the_thing', 'other_thing'))) runner() compare([ call.job1(), call.job2(m.the_thing), ], m.mock_calls)
def test_nested(self): class T(object): foo = dict(baz='bar') m = Mock() def job1(): m.job1() return T() def job2(obj): m.job2(obj) runner = Runner() runner.add(job1) runner.add(job2, requires(item(attr(T, 'foo'), 'baz'))) runner() compare([ call.job1(), call.job2('bar'), ], m.mock_calls)
def test_passed_missing(self): h = item(Type1, 'foo', 'bar') compare(h.process(missing), missing)
def test_missing_key(self): h = item(Type1, 'foo', 'bar') compare(h.process({}), missing)
def test_missing_obj(self): h = item(Type1, 'foo', 'bar') with ShouldRaise(TypeError): h.process(object())
def test_multiple(self): h = item(Type1, 'foo', 'bar') compare(repr(h), "Type1['foo']['bar']") compare(h.process(dict(foo=dict(bar=1))), 1)
def test_single(self): h = item(Type1, 'foo') compare(repr(h), "Type1['foo']") compare(h.process(dict(foo=1)), 1)
def test_bad_type(self): with ShouldRaise(TypeError): item([], 'foo', 'bar')
def test_how_instance_in_annotations(self): how = item('config', 'db_url') def foo(a: how): pass check_extract(foo, expected_rq=requires(a=how), expected_rt=None)