def test_add_annotation_with_no_missing_arguments(self, argument_mock): def dummy(): pass builder = types.ArgumentAnnotationHandlerBuilder(dummy, [], False) with pytest.raises(types.ExhaustedArguments): builder.add_annotation(argument_mock)
def test_auto_fill_when_not_done(self, request_definition_builder, args): request_definition_builder.uri.remaining_variables = args builder = types.ArgumentAnnotationHandlerBuilder(None, args, False) builder.set_request_definition_builder(request_definition_builder) handler = builder.build() types_ = map(type, handler.annotations) assert list(types_) == ([types.Path] * len(args)) names = [argument.name for argument in handler.annotations] assert names == args
def test_add_named_annotation_without_name(self, named_argument_mock, args): builder = types.ArgumentAnnotationHandlerBuilder(None, args, False) named_argument_mock.name = None builder.add_annotation(named_argument_mock) named_argument_mock.modify_request_definition.assert_called_with( builder.request_definition_builder) assert named_argument_mock.name == args[0] assert args[0] not in builder.missing_arguments
def test_add_named_annotation_without_name(self, mocker, named_argument_mock, args): builder = types.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 = types.ArgumentAnnotationHandlerBuilder(dummy, args, False) with pytest.raises(types.ArgumentNotFound): builder.add_annotation(argument_mock, name=-1)
def __call__(self, func): spec = utils.get_arg_spec(func) arg_handler = types.ArgumentAnnotationHandlerBuilder(func, spec.args) builder = RequestDefinitionBuilder( self._method, URIDefinitionBuilder(self._uri), arg_handler, decorators.MethodAnnotationHandlerBuilder()) arg_handler.add_annotations_from_spec(spec) if spec.return_annotation is not None: builder = decorators.returns(spec.return_annotation)(builder) functools.update_wrapper(builder, func) return builder
def __call__(self, func): spec = utils.get_arg_spec(func) arg_handler = types.ArgumentAnnotationHandlerBuilder(func, spec.args) method_handler = decorators.MethodAnnotationHandlerBuilder() builder = RequestDefinitionBuilder(self._method, URIDefinitionBuilder(self._uri), arg_handler, method_handler) if spec.args: # Ignore `self` instance reference spec.annotations.pop(spec.args[0], None) arg_handler.set_annotations(spec.annotations) if spec.return_annotation is not None: builder = decorators.returns(spec.return_annotation)(builder) functools.update_wrapper(builder, func) return builder
def test_add_annotation_class(self, mocker, argument_mock, args): builder = types.ArgumentAnnotationHandlerBuilder(None, args, False) builder.listener = mocker.stub() argument = builder.add_annotation(type(argument_mock)) builder.listener.assert_called_with(argument) assert args[0] not in builder.missing_arguments
def test_set_annotations_with_dict(self, argument_mock, args): builder = types.ArgumentAnnotationHandlerBuilder(None, args, False) builder.set_annotations(**{args[0]: argument_mock}) argument_mock.modify_request_definition.assert_called_with( builder.request_definition_builder) assert args[0] not in builder.missing_arguments
def test_add_annotation_with_name(self, mocker, argument_mock, args): builder = types.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 = types.ArgumentAnnotationHandlerBuilder(None, args, False) assert builder.remaining_args_count == len(args)
def test_missing_arguments(self, args): builder = types.ArgumentAnnotationHandlerBuilder(None, args, False) assert list(builder.missing_arguments) == args
def test_is_done(self, argument_mock): builder = types.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 = types.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_auto_fill_when_not_done_fails(self, request_definition_builder): request_definition_builder.uri.remaining_variables = [] builder = types.ArgumentAnnotationHandlerBuilder(None, ["arg1"], False) builder.set_request_definition_builder(request_definition_builder) with pytest.raises(types.MissingArgumentAnnotations): builder.build()
def test_add_annotation_class(self, argument_mock, args): builder = types.ArgumentAnnotationHandlerBuilder(None, args, False) argument = builder.add_annotation(type(argument_mock)) argument.modify_request_definition.assert_called_with( builder.request_definition_builder) assert args[0] not in builder.missing_arguments
def test_add_annotation_with_name(self, argument_mock, args): builder = types.ArgumentAnnotationHandlerBuilder(None, args, False) builder.add_annotation(argument_mock, name=args[-1]) argument_mock.modify_request_definition.assert_called_with( builder.request_definition_builder) assert args[-1] not in builder.missing_arguments