Back to "La Comisión Consultiva recomienda que el Secretario General apruebe el siguiente proyecto de resolución:"

This is a viewer only at the moment see the article on how this works.

To update the preview hit Ctrl-Alt-R (or ⌘-Alt-R on Mac) or Enter to refresh. The Save icon lets you save the markdown file to disk

This is a preview from the server running through my markdig pipeline

Umami xUnit

La Comisión Consultiva recomienda que el Secretario General apruebe el siguiente proyecto de resolución:

Sunday, 01 September 2024

El Comité recomienda al Estado Parte que adopte todas las medidas necesarias para garantizar la igualdad entre los géneros y el empoderamiento de la mujer.

En el párrafo 2 de la resolución, la Asamblea General pidió al Secretario General que le presentara en su quincuagésimo séptimo período de sesiones un informe sobre los progresos realizados en la aplicación del Programa de Acción. La Comisión Consultiva recomienda que el Secretario General apruebe el siguiente proyecto de resolución: por supuesto quiero asegurar que todo funciona como se espera. Para hacer esto la mejor manera es probar de alguna forma exhaustiva todas las metodologías y clases. Aquí viene el test de unidadM SK2 Nota: Esta no es una ' un ' enfoque perfectoM SK3 post tipoMSC4 es la misma ' como yo lo he hecho en el momento actualMST7 En realidad, no tengo que mocar a IHttpMessageHandler aquí se puede atacar un DelegatingMessageHandler a un cliente Http normal para hacer esto. quería mostrar solo cómo se puede hacer con Mock.

El Comité recomienda que el Estado Parte adopte todas las medidas necesarias para garantizar la igualdad de oportunidades entre hombres y mujeres en materia de empleo, incluida la eliminación del trabajo forzoso.

La prueba de unidad se refiere al proceso de prueba de unidades individuales de código para asegurar que funcionen como se esperaba. Esto se hace mediante escribir pruebas que llaman los métodos y las clases de una manera controlada y luego comprobar la salida es como se esperara.

Para un paquete como Umami.Net esto es algo complicado ya que ambos llaman a un cliente remoto. HttpClient El Comité recomienda al Estado Parte que adopte todas las medidas necesarias para garantizar la igualdad entre los géneros y el empoderamiento de la mujer. IHostedService utiliza para hacer que el envío de nuevos datos de evento sea tan transparente como sea posible.

El Comité recomienda que el Estado Parte adopte todas las medidas necesarias para garantizar la igualdad de oportunidades entre hombres y mujeres en materia de empleo, incluida la adopción de disposiciones legislativas, administrativas y de otra índole que prohíban la discriminación.

El Comité recomienda al Estado Parte que adopte todas las medidas necesarias para garantizar la igualdad entre los géneros y el empoderamiento de la mujer. HttpClient base de biblioteca es evitar la llamada real 'HttpClient' callM SK2 Esto se hace creando un HttpClient El Comité recomienda al Estado Parte que adopte todas las medidas necesarias para garantizar la igualdad entre los géneros y el empoderamiento de la mujer. HttpMessageHandler . Esto se hace mediante la creación de un HttpClient El Comité recomienda al Estado Parte que adopte todas las medidas necesarias para garantizar la igualdad entre los géneros y el empoderamiento de la mujer. HttpMessageHandler que reembolsa una respuesta conocida; en este caso sólo echo de nuevo la respuesta de entrada y comprobar que' no ha sido manipulado por el UmamiClient.

    public static HttpMessageHandler Create()
    {
        var mockHandler = new Mock<HttpMessageHandler>();

        mockHandler.Protected()
            .Setup<Task<HttpResponseMessage>>(
                "SendAsync",
                ItExpr.Is<HttpRequestMessage>(x => x.RequestUri.ToString().Contains("api/send")),
                ItExpr.IsAny<CancellationToken>())
            .ReturnsAsync((HttpRequestMessage request, CancellationToken cancellationToken) =>
            {
                // Read the request content
                var requestBody = request.Content != null
                    ? request.Content.ReadAsStringAsync(cancellationToken).Result
                    : null;

                // Create a response that echoes the request body
                var responseContent = requestBody != null
                    ? requestBody
                    : "No request body";


                // Return the response
                return new HttpResponseMessage(HttpStatusCode.OK)
                {
                    Content = new StringContent(responseContent, Encoding.UTF8, "application/json")
                };
            });

        return mockHandler.Object;
    }

Como usted verá' esto configura un Mock<HttpMessageHandler> En el párrafo 2 de la resolución, la Asamblea General pidió al Secretario General que le presentara en su quincuagésimo séptimo período de sesiones un informe sobre los progresos realizados en la aplicación del Programa de Acción para prevenir, combatir y eliminar el tráfico ilícito de armas pequeñas y ligeras en todos sus aspectos. UmamiClient. En este código añado esto a nuestro IServiceCollection method. Esto agrega todos los servicios necesarios por el UmamiClient Además, el Comité recomienda que el Estado Parte adopte todas las medidas necesarias para garantizar la igualdad de oportunidades entre los hombres y las mujeres en materia de empleo, incluida la eliminación del trabajo forzoso. HttpMessageHandler El Comité recomienda al Estado Parte que incluya en su próximo informe periódico información detallada sobre la situación de los derechos humanos y las libertades fundamentales de todos los trabajadores migratorios y de sus familiares. IServiceCollection Para uso en las pruebas.

    public static IServiceCollection SetupServiceCollection(string webSiteId = Consts.WebSiteId,
        string umamiPath = Consts.UmamiPath, HttpMessageHandler? handler = null)
    {
        var services = new ServiceCollection();
        var umamiClientSettings = new UmamiClientSettings
        {
            WebsiteId = webSiteId,
            UmamiPath = umamiPath
        };
        services.AddSingleton(umamiClientSettings);
        services.AddScoped<PayloadService>();
        services.AddLogging(x => x.AddConsole());
        // Mocking HttpMessageHandler with Moq
        var mockHandler = handler ?? EchoMockHandler.Create();
        services.AddHttpClient<UmamiClient>((serviceProvider, client) =>
        {
            var umamiSettings = serviceProvider.GetRequiredService<UmamiClientSettings>();
            client.BaseAddress = new Uri(umamiSettings.UmamiPath);
        }).ConfigurePrimaryHttpMessageHandler(() => mockHandler);
        return services;
    }

Para usarlo y inyectarlo en el UmamiClient Después utilizo estos servicios en el UmamiClient El Comité recomienda que el Estado Parte adopte todas las medidas necesarias para garantizar la igualdad de oportunidades entre hombres y mujeres en materia de empleo, incluida la adopción de medidas legislativas, administrativas, judiciales y de otra índole.

    public static UmamiClient GetUmamiClient(IServiceCollection? serviceCollection = null,
        HttpContextAccessor? contextAccessor = null)
    {
        serviceCollection ??= SetupServiceCollection();
        SetupUmamiClient(serviceCollection, contextAccessor);
        if (serviceCollection == null) throw new NullReferenceException(nameof(serviceCollection));
        var serviceProvider = serviceCollection.BuildServiceProvider();
        return serviceProvider.GetRequiredService<UmamiClient>();
    }

Usted'verás que tengo una serie de parámetros opcionales alternativos aquí que me permiten introducir diferentes opciones para diferentes tipos de prueba.

El Comité recomienda al Estado Parte que adopte todas las medidas necesarias para garantizar la igualdad entre los géneros y el empoderamiento de la mujer.

Así que ahora tengo toda esta configuración en lugar puedo ahora empezar a escribir pruebas para el UmamiClient El Comité recomienda que el Estado Parte adopte todas las medidas necesarias para garantizar la igualdad de oportunidades entre hombres y mujeres en materia de empleo, incluida la adopción de medidas legislativas, administrativas, judiciales y de otra índole.

El Comité recomienda al Estado Parte que incluya en su próximo informe periódico datos desglosados por sexo, edad y origen étnico.

Lo que toda esta configuración significa es que nuestras pruebas pueden ser realmente bastante sencillas

public class UmamiClient_SendTests
{
    [Fact]
    public async Task Send_Wrong_Type()
    {
        var umamiClient = SetupExtensions.GetUmamiClient();
        await Assert.ThrowsAsync<ArgumentException>(async () => await umamiClient.Send(type: "boop"));
    }

    [Fact]
    public async Task Send_Empty_Success()
    {
        var umamiClient = SetupExtensions.GetUmamiClient();
        var response = await umamiClient.Send();
        Assert.Equal(HttpStatusCode.OK, response.StatusCode);
    }
}

Aquí se ve el caso de prueba más sencillo, garantizando que la UmamiClient puede enviar un mensaje y obtener una respuesta; importantemente también testamos para un caso de excepción donde el type es incorrecto. Esta es una parte de la prueba que a menudo se ignora, para asegurarse de que el código fracasa como se esperabaM SK2

El Comité recomienda al Estado Parte que adopte todas las medidas necesarias para garantizar la igualdad entre los géneros y el empoderamiento de la mujer.

Para probar nuestro método de visualización de página podemos hacer algo parecido. En el código de abajo uso mi EchoHttpHandler para reflejar la respuesta enviada y asegurarse de que envía lo que espero.

    [Fact]
    public async Task TrackPageView_WithNoUrl()
    {
        var defaultUrl = "/testpath";
        var contextAccessor = SetupExtensions.SetupHttpContextAccessor(path: "/testpath");
        var umamiClient = SetupExtensions.GetUmamiClient(contextAccessor: contextAccessor);
        var response = await umamiClient.TrackPageView();

        var content = await response.Content.ReadFromJsonAsync<EchoedRequest>();
        Assert.NotNull(response);
        Assert.NotNull(content);
        Assert.Equal(content.Payload.Url, defaultUrl);
        Assert.Equal(HttpStatusCode.OK, response.StatusCode);
    }

En la misma sesión, el Consejo aprobó el proyecto de resolución A/C.2/57/L.32 sin someterlo a votación (véase párr.

El Comité recomienda al Estado Parte que adopte todas las medidas necesarias para garantizar la igualdad entre los géneros y el empoderamiento de la mujer. HttpContextAccessor El Comité recomienda que el Estado Parte adopte todas las medidas necesarias para garantizar la igualdad de oportunidades entre los hombres y las mujeres en materia de empleo, incluida la eliminación del trabajo forzoso. /testpath El Comité recomienda al Estado Parte que adopte todas las medidas necesarias para garantizar la igualdad entre los géneros y el empoderamiento de la mujer. UmamiClient El Comité recomienda que el Estado Parte adopte todas las medidas necesarias para garantizar la igualdad de oportunidades entre los hombres y las mujeres en materia de empleo, incluida la eliminación del trabajo forzoso.

    public static HttpContextAccessor SetupHttpContextAccessor(string host = Consts.Host,
        string path = Consts.Path, string ip = Consts.Ip, string userAgent = Consts.UserAgent,
        string referer = Consts.Referer)
    {
        HttpContext httpContext = new DefaultHttpContext();
        httpContext.Request.Host = new HostString(host);
        httpContext.Request.Path = new PathString(path);
        httpContext.Connection.RemoteIpAddress = IPAddress.Parse(ip);
        httpContext.Request.Headers.UserAgent = userAgent;
        httpContext.Request.Headers.Referer = referer;

        var context = new HttpContextAccessor { HttpContext = httpContext };
        return context;
    }

Esto es importante para nuestro código cliente Umami, ya que la mayoría de los datos enviados de cada solicitud son generados de forma dinámica desde el HttpContext Object. Así que no podemos enviar nada en un await umamiClient.TrackPageView(); y todavía enviará los datos correctos extrayendo el Url de la HttpContext.

Como veremos más adelante, también es importante que el esplendor envíe artículos como el UserAgent El Comité recomienda al Estado Parte que adopte todas las medidas necesarias para garantizar la igualdad entre los géneros y el empoderamiento de la mujer. IPAddress Como estas son utilizadas por el servidor Umami para rastrear los datos y 'trackM SK1 opiniones de usuario sin usar cookies.

Para tener este predecible definimos un grupo de Consts en el Consts class. Así que podemos probar contra respuestas predecibles y peticionesM SK1

public class Consts
{
    public const string UmamiPath = "https://example.com";
    public const string WebSiteId = "B41A9964-FD33-4108-B6EC-9A6B68150763";
    public const string Host = "example.com";
    public const string Path = "/example";
    public const string Ip = "127.0.0.1";
    public const string UserAgent = "Test User Agent";
    public const string Referer = "Test Referer";
    public const string DefaultUrl = "/testpath";
    public const string DefaultTitle = "Example Page";
    public const string DefaultName = "RSS";
    public const string DefaultType = "event";

    public const string Email = "[email protected]";

    public const string UserId = "11224456";
    
    public const string UserName = "Test User";
    
    public const string SessionId = "B41A9964-FD33-4108-B6EC-9A6B68150763";
}

El Comité recomienda que el Estado Parte adopte todas las medidas necesarias para garantizar la igualdad de oportunidades entre los hombres y las mujeres en materia de empleo, incluida la adopción de medidas legislativas, administrativas, judiciales y de otra índole.

Este es sólo el comienzo de nuestra estrategia de pruebas para Umami.Net, todavía tenemos que probar IHostedService y prueba contra los datos reales Umami genera (que no está documentado en ningún lugar pero contiene un token JWT con algunos datos útiles.)

{
  "alg": "HS256",
  "typ": "JWT"
}{
  "id": "b9836672-feee-55c5-985a-a5a23d4a23ad",
  "websiteId": "32c2aa31-b1ac-44c0-b8f3-ff1f50403bee",
  "hostname": "example.com",
  "browser": "chrome",
  "os": "Windows 10",
  "device": "desktop",
  "screen": "1920x1080",
  "language": "en-US",
  "country": "GB",
  "subdivision1": null,
  "subdivision2": null,
  "city": null,
  "createdAt": "2024-09-01T09:26:14.418Z",
  "visitId": "e7a6542f-671a-5573-ab32-45244474da47",
  "iat": 1725182817
}2|Y*: �(N%-ޘ^1>@V

Así que nosotros ' queremos probar para que , simular el token y posiblemente devolver los datos en cada visita. uuid(websiteId,ipaddress, useragent)).

El Comité recomienda al Estado Parte que adopte todas las medidas necesarias para garantizar la igualdad entre los géneros y el empoderamiento de la mujer.

Este es sólo el comienzo de la prueba del paquete Umami.Net , hay mucho más que hacer, pero este es un buen comienzoM SK3 I' añadiré más pruebas a medida que vaya y sin duda mejoraré estas.

logo

© 2026 Scott Galloway — Unlicense — All content and source code on this site is free to use, copy, modify, and sell.