示例#1
0
        public void AddExpectedResponse(string rawResponse, CodeBlockAnnotation annotation)
        {
            if (this.ExpectedResponse != null)
            {
                throw new InvalidOperationException("An expected response was already added to this request.");
            }

            this.ExpectedResponse         = rawResponse;
            this.ExpectedResponseMetadata = annotation;
        }
示例#2
0
        public static MethodDefinition FromRequest(string request, CodeBlockAnnotation annotation, DocFile source, IssueLogger issues)
        {
            var method = new MethodDefinition
            {
                Request             = request,
                RequestMetadata     = annotation,
                Identifier          = annotation.MethodName?.FirstOrDefault(),
                SourceFile          = source,
                RequiredScopes      = annotation.RequiredScopes,
                RequiredApiVersions = annotation.RequiredApiVersions,
                RequiredTags        = annotation.RequiredTags
            };

            method.Title = method.Identifier;

            var methodIssues = issues.For(method.Identifier);

            try
            {
                HttpRequest requestExample;
                HttpParser.TryParseHttpRequest(request, out requestExample, methodIssues);
                if (!string.IsNullOrEmpty(requestExample?.Body) && requestExample.Body.Contains("{"))
                {
                    if (string.IsNullOrEmpty(annotation.ResourceType))
                    {
                        annotation.ResourceType = "requestBodyResourceFor." + method.Identifier;
                    }

                    var body = requestExample.Body;
                    if (requestExample.ContentType != null && requestExample.ContentType.StartsWith(MimeTypeMultipartRelated, StringComparison.OrdinalIgnoreCase))
                    {
                        var multipartContent = new MultipartMime.MultipartMimeContent(requestExample.ContentType, body);
                        var part             = multipartContent.PartWithId("<metadata>");
                        body = part.Body;
                    }

                    var requestBodyResource = new JsonResourceDefinition(annotation, body, source, methodIssues);
                    if (requestBodyResource.Parameters != null)
                    {
                        method.RequestBodyParameters.AddRange(requestBodyResource.Parameters);
                    }
                }
            }
            catch (Exception ex)
            {
                methodIssues.Warning(ValidationErrorCode.HttpParserError, "Unable to parse request body resource", ex);
            }

            return(method);
        }
示例#3
0
        public ExampleDefinition(CodeBlockAnnotation annotation, string content, DocFile source, string language)
        {
            if (string.IsNullOrEmpty(language))
            {
                throw new ArgumentNullException("language");
            }

            this.Metadata      = annotation;
            this.SourceExample = content;
            this.SourceFile    = source;

            switch (language.ToLower())
            {
            case "json":
            {
                this.Language = CodeLanguage.Json;
                try
                {
                    object inputObject = JsonConvert.DeserializeObject(content);
                    this.ParsedExample = JsonConvert.SerializeObject(inputObject, Formatting.Indented);
                }
                catch (Exception ex)
                {
                    Logging.LogMessage(
                        new ValidationError(
                            ValidationErrorCode.JsonParserException,
                            source.DisplayName,
                            "Error parsing resource definition: {0}",
                            ex.Message));
                }
                break;
            }

            case "http":
                this.ParsedExample = this.SourceExample;
                this.Language      = CodeLanguage.Http;
                break;

            default:
                this.Language = CodeLanguage.Unsupported;
                Logging.LogMessage(
                    new ValidationError(
                        ValidationErrorCode.UnsupportedLanguage,
                        source.DisplayName,
                        "The code language for this example is unuspported: {0}", language));
                break;
            }
        }
示例#4
0
        protected ResourceDefinition(CodeBlockAnnotation sourceAnnotation, string content, DocFile source, string language)
        {
            this.sourceAnnotation    = sourceAnnotation;
            this.OriginalExampleText = content;
            this.SourceFile          = source;
            this.Abstract            = sourceAnnotation.Abstract;
            this.Name            = sourceAnnotation.ResourceType;
            this.NameAka         = sourceAnnotation.ResourceTypeAka;
            this.KeyPropertyName = sourceAnnotation.KeyPropertyName;
            this.BaseType        = sourceAnnotation.BaseType;

            if (string.IsNullOrEmpty(sourceAnnotation.ResourceType))
            {
                Logging.LogMessage(
                    new ValidationError(
                        ValidationErrorCode.MissingResourceName,
                        source.DisplayName,
                        "Resource definition is missing Name value"));
            }
        }
示例#5
0
 public SamplesDefinition(CodeBlockAnnotation annotation, string content)
 {
     this.Samples = content.Split(new[] { '\r', '\n' }, StringSplitOptions.RemoveEmptyEntries);
 }
示例#6
0
 public JsonResourceDefinition(CodeBlockAnnotation sourceAnnotation, string json, DocFile source, IssueLogger issues)
     : base(sourceAnnotation, json, source, "json")
 {
     ParseJsonInput(issues);
 }
示例#7
0
 public void AddSimulatedResponse(string rawResponse, CodeBlockAnnotation annotation)
 {
     this.ActualResponse = rawResponse;
 }