public async Task CalculatesSignatureForExpectedRequest() { var compositionRequest = new SigningStringCompositionRequest(); HttpRequestForSigning interceptedRequest = null; SigningSettings interceptedSigningSettings = null; DateTimeOffset? interceptedTimeOfSigning = null; TimeSpan?interceptedExpires = null; A.CallTo(() => _stringCompositionRequestFactory.CreateForSigning(A <HttpRequestForSigning> ._, A <SigningSettings> ._, A <DateTimeOffset?> ._, A <TimeSpan?> ._)) .Invokes(call => { interceptedRequest = call.GetArgument <HttpRequestForSigning>(0); interceptedSigningSettings = call.GetArgument <SigningSettings>(1); interceptedTimeOfSigning = call.GetArgument <DateTimeOffset?>(2); interceptedExpires = call.GetArgument <TimeSpan?>(3); }) .Returns(compositionRequest); var composedString = "{the composed string}"; A.CallTo(() => _signingStringComposer.Compose(A <SigningStringCompositionRequest> ._)) .Returns(composedString); await _sut.CreateSignature(_httpRequestMessage, _settings, _timeOfSigning, _expires); interceptedRequest.Should().BeEquivalentTo(new HttpRequestForSigning { Method = HttpMethod.Post, RequestUri = "http://dalion.eu/api/resource/id1".ToUri(), Headers = new HeaderDictionary(new Dictionary <string, StringValues> { { "H1", "v1" } }) }); interceptedSigningSettings.Should().Be(_settings); interceptedTimeOfSigning.Should().Be(_timeOfSigning); interceptedExpires.Should().Be(_expires); }
public async Task ReturnsSignatureWithExpectedNonceValue() { var compositionRequest = new SigningStringCompositionRequest { Nonce = _nonce }; A.CallTo(() => _stringCompositionRequestFactory.CreateForSigning(A <HttpRequestForSigning> ._, A <SigningSettings> ._, A <DateTimeOffset?> ._, A <TimeSpan?> ._)) .Returns(compositionRequest); var actual = await _sut.CreateSignature(_httpRequestMessage, _settings, _timeOfSigning, _expires); actual.Nonce.Should().Be(_nonce); }
public async Task ReturnsSignatureWithExpectedHeaders() { var compositionRequest = new SigningStringCompositionRequest { HeadersToInclude = _settings.Headers }; A.CallTo(() => _stringCompositionRequestFactory.CreateForSigning(A <HttpRequestForSigning> ._, A <SigningSettings> ._, A <DateTimeOffset?> ._, A <TimeSpan?> ._)) .Returns(compositionRequest); var actual = await _sut.CreateSignature(_httpRequestMessage, _settings, _timeOfSigning, _expires); actual.Headers.Should().BeEquivalentTo( new[] { HeaderName.PredefinedHeaderNames.RequestTarget, HeaderName.PredefinedHeaderNames.Date, new HeaderName("dalion_app_id") }, options => options.WithStrictOrdering()); }
public async Task WhenEverythingIsSpecified_CallsSigningStringComposerWithCreatedCompositionRequest() { var compositionRequest = new SigningStringCompositionRequest { Request = _signedRequest.ToHttpRequestForSignatureString(), Expires = _signature.Expires.Value - _signature.Created.Value, HeadersToInclude = _signature.Headers, RequestTargetEscaping = _client.RequestTargetEscaping, TimeOfComposing = _now }; A.CallTo(() => _stringCompositionRequestFactory.CreateForVerification(_signedRequest, _client, _signature)) .Returns(compositionRequest); SigningStringCompositionRequest interceptedRequest = null; _composeCall().Invokes(call => interceptedRequest = call.GetArgument <SigningStringCompositionRequest>(0)) .Returns(_composedSignatureString); await _method(_signedRequest, _signature, _client); interceptedRequest.Should().Be(compositionRequest); }