示例#1
0
    public async Task NullArguments_ReadRequestBodyAsync_ThrowsArgumentNullException()
    {
        var sut = new JsonMergePatchInputReader(new JsonOptions(), Substitute.For <ITypeRepository>());
        await Assert.ThrowsAsync <ArgumentNullException>(() => sut.ReadRequestBodyAsync(null, Encoding.UTF8));

        await Assert.ThrowsAsync <ArgumentNullException>(() => sut.ReadRequestBodyAsync(CreateInputFormatterContext(typeof(Patch <TestDto>), new DefaultHttpContext()), null));
    }
示例#2
0
    public void Contruction_Sets_SerializerOptions()
    {
        var options = new JsonOptions();
        var sut     = new JsonMergePatchInputReader(options, Substitute.For <ITypeRepository>());

        Assert.Same(options.SerializerOptions, sut.SerializerOptions);
    }
示例#3
0
    public void Contruction_Sets_SupportedEncodings()
    {
        var sut = new JsonMergePatchInputReader(new JsonOptions(), Substitute.For <ITypeRepository>());

        Assert.Contains(Encoding.UTF8, sut.SupportedEncodings);
        Assert.Contains(Encoding.Unicode, sut.SupportedEncodings);
    }
示例#4
0
    public async Task NonPatchType_CanRead_ReturnsFalse()
    {
        var sut = new JsonMergePatchInputReader(new JsonOptions(), CreateTypeRepository());
        DefaultHttpContext httpContext = await CreateHttpContextAsync("{ \"Prop1\" : 5 }").ConfigureAwait(false);

        var inputContext = CreateInputFormatterContext(typeof(TestDto), httpContext);

        Assert.False(sut.CanRead(inputContext));
    }
示例#5
0
    public async Task NoTypeRepositoryRegistration_ReadRequestBodyAsync_ReturnsFailure()
    {
        var sut          = new JsonMergePatchInputReader(new JsonOptions(), Substitute.For <ITypeRepository>());
        var httpContext  = new DefaultHttpContext();
        var inputContext = CreateInputFormatterContext(typeof(Patch <TestDto>), httpContext);

        var result = await sut.ReadRequestBodyAsync(inputContext, Encoding.UTF8);

        Assert.Equal(InputFormatterResult.Failure(), result);
    }
示例#6
0
    public async Task OtherEncodingJson_ReadRequestBodyAsync_ReturnsFailure()
    {
        var sut = new JsonMergePatchInputReader(new JsonOptions(), CreateTypeRepository());
        DefaultHttpContext httpContext = await CreateHttpContextAsync("{ \"Prop1\" : 5 }", Encoding.Unicode).ConfigureAwait(false);

        var inputContext = CreateInputFormatterContext(typeof(Patch <TestDto>), httpContext);

        var result = await sut.ReadRequestBodyAsync(inputContext, Encoding.Unicode);

        Assert.Equal(5, ((TestDtoWrapped)result.Model).Prop1);
    }
示例#7
0
    public async Task NoPatchInputType_ReadRequestBodyAsync_ReturnsFailure()
    {
        var sut = new JsonMergePatchInputReader(new JsonOptions(), CreateTypeRepository());
        DefaultHttpContext httpContext = await CreateHttpContextAsync("{ \"Prop1\" : 5 }").ConfigureAwait(false);

        var inputContext = CreateInputFormatterContext(typeof(TestDto), httpContext);

        var result = await sut.ReadRequestBodyAsync(inputContext, Encoding.UTF8);

        Assert.Equal(InputFormatterResult.Failure(), result);
    }
示例#8
0
    public async Task InvalidJson_ReadRequestBodyAsync_ReturnsFailure()
    {
        var sut = new JsonMergePatchInputReader(new JsonOptions(), CreateTypeRepository());
        DefaultHttpContext httpContext = await CreateHttpContextAsync("invalid").ConfigureAwait(false);

        var inputContext = CreateInputFormatterContext(typeof(Patch <TestDto>), httpContext);

        var result = await sut.ReadRequestBodyAsync(inputContext, Encoding.UTF8);

        Assert.Equal(InputFormatterResult.Failure(), result);
        Assert.Equal(1, inputContext.ModelState.ErrorCount);
    }
示例#9
0
    public void Contruction_Sets_SupportedMediaType()
    {
        var sut = new JsonMergePatchInputReader(new JsonOptions(), Substitute.For <ITypeRepository>());

        Assert.Contains("application/merge-patch+json", sut.SupportedMediaTypes);
    }