def test_add_annotation_with_no_missing_arguments(self, argument_mock): def dummy(): pass builder = arguments.ArgumentAnnotationHandlerBuilder(dummy, [], False) with pytest.raises(arguments.ExhaustedArguments): builder.add_annotation(argument_mock)
def test_add_annotation_that_is_not_an_annotation(self): def dummy(): pass builder = arguments.ArgumentAnnotationHandlerBuilder( dummy, ["arg1"], False) builder.add_annotation(type, "arg1") assert builder.remaining_args_count == 1
def test_add_named_annotation_without_name(self, mocker, named_argument_mock, args): builder = arguments.ArgumentAnnotationHandlerBuilder(None, args, False) named_argument_mock.name = None builder.listener = mocker.stub() builder.add_annotation(named_argument_mock) builder.listener.assert_called_with(named_argument_mock) assert named_argument_mock.name == args[0] assert args[0] not in builder.missing_arguments
def test_add_annotation_with_name_not_recognized(self, argument_mock, args): def dummy(): pass assert -1 not in args builder = arguments.ArgumentAnnotationHandlerBuilder( dummy, args, False) with pytest.raises(arguments.ArgumentNotFound): builder.add_annotation(argument_mock, name=-1)
def __call__(self, func): spec = utils.get_arg_spec(func) arg_handler = arguments.ArgumentAnnotationHandlerBuilder( func, spec.args) builder = RequestDefinitionBuilder( self._method, URIDefinitionBuilder(self._uri), arg_handler, decorators.MethodAnnotationHandlerBuilder(), ) # Need to add the annotations after constructing the request # definition builder so it has a chance to attach its listener. arg_handler.set_annotations(spec.annotations) # Use return value type hint as expected return type if spec.return_annotation is not None: builder = returns.schema(spec.return_annotation)(builder) functools.update_wrapper(builder, func) builder = self._add_args(builder) return builder
def test_add_annotation_with_name(self, mocker, argument_mock, args): builder = arguments.ArgumentAnnotationHandlerBuilder(None, args, False) builder.listener = mocker.stub() builder.add_annotation(argument_mock, name=args[-1]) builder.listener.assert_called_with(argument_mock) assert args[-1] not in builder.missing_arguments
def test_remaining_args_count(self, args): builder = arguments.ArgumentAnnotationHandlerBuilder(None, args, False) assert builder.remaining_args_count == len(args)
def test_missing_arguments(self, args): builder = arguments.ArgumentAnnotationHandlerBuilder(None, args, False) assert list(builder.missing_arguments) == args
def test_is_done(self, argument_mock): builder = arguments.ArgumentAnnotationHandlerBuilder( None, ("arg1", ), False) assert not builder.is_done() builder.add_annotation(argument_mock) assert builder.is_done()
def test_set_annotations_with_dict(self, mocker, argument_mock, args): builder = arguments.ArgumentAnnotationHandlerBuilder(None, args, False) builder.listener = mocker.stub() builder.set_annotations(**{args[0]: argument_mock}) builder.listener.assert_called_with(argument_mock) assert args[0] not in builder.missing_arguments
def test_add_annotation_class(self, mocker, args): builder = arguments.ArgumentAnnotationHandlerBuilder(None, args, False) builder.listener = mocker.stub() argument = builder.add_annotation(arguments.ArgumentAnnotation()) builder.listener.assert_called_with(argument) assert args[0] not in builder.missing_arguments