< Summary

Information
Class: OzonOrdersWeb.Extensions.SwaggerExtensions
Assembly: OzonOrdersWeb
File(s): /home/runner/work/Studio2Prod/Studio2Prod/OzonOrdersWeb/Extensions/SwaggerExtensions.cs
Line coverage
100%
Covered lines: 36
Uncovered lines: 0
Coverable lines: 36
Total lines: 47
Line coverage: 100%
Branch coverage
100%
Covered branches: 8
Total branches: 8
Branch coverage: 100%
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity Line coverage
AddStudio2Swagger(...)100%88100%

File(s)

/home/runner/work/Studio2Prod/Studio2Prod/OzonOrdersWeb/Extensions/SwaggerExtensions.cs

#LineLine coverage
 1using Microsoft.AspNetCore.Mvc;
 2
 3namespace OzonOrdersWeb.Extensions;
 4
 5public static class SwaggerExtensions
 6{
 7    public static IServiceCollection AddStudio2Swagger(this IServiceCollection services)
 8    {
 49        services.AddEndpointsApiExplorer();
 410        services.AddSwaggerGen(options =>
 411        {
 412            options.SwaggerDoc("v1", new Microsoft.OpenApi.Models.OpenApiInfo
 413            {
 414                Title = "Studio2Prod API",
 415                Version = "v1",
 416                Description = "Внутренние machine-to-machine endpoint'ы Studio2Prod (импорт из внешних приложений и т.п.
 417            });
 418
 419            // Документируем только настоящие [ApiController]-эндпоинты (api/...), а не сотни
 420            // классических MVC-контроллеров приложения — среди них есть неоднозначные по HTTP-методу
 421            // action'ы (несколько методов на одном маршруте), на которых генератор Swagger падает.
 422            options.DocInclusionPredicate((docName, apiDesc) =>
 423            {
 550424                if (apiDesc.ActionDescriptor is not Microsoft.AspNetCore.Mvc.Controllers.ControllerActionDescriptor cad 
 550425                    !cad.ControllerTypeInfo.IsDefined(typeof(ApiControllerAttribute), inherit: true))
 526426                    return false;
 427
 428                // API партнёров живёт в собственном документе и не смешивается с machine-to-machine контрактом v1.
 24029                var isPartnerApi = apiDesc.GroupName == PartnerOfficeExtensions.SwaggerDocName;
 24030                return docName == PartnerOfficeExtensions.SwaggerDocName ? isPartnerApi : !isPartnerApi;
 431            });
 432
 433            options.SwaggerDoc(PartnerOfficeExtensions.SwaggerDocName, new Microsoft.OpenApi.Models.OpenApiInfo
 434            {
 435                Title = "PartnerOffice API",
 436                Version = "v1",
 437                Description = "API кабинета партнёра. Сначала вызовите POST /partner-api/auth/login: сессия хранится в c
 438                              "поэтому остальные методы в Swagger UI работают из того же окна. Видны только заказы, подх
 439            });
 440
 441            var xmlDoc = Path.Combine(AppContext.BaseDirectory, $"{typeof(SwaggerExtensions).Assembly.GetName().Name}.xm
 842            if (File.Exists(xmlDoc)) options.IncludeXmlComments(xmlDoc);
 843        });
 44
 445        return services;
 46    }
 47}