public async Task SetPayloadHandlerContentTypeOnPostAsync() { var mockRequestExecutor = Substitute.For <IRequestExecutor>(); mockRequestExecutor .PostAsync(Arg.Any <HttpRequest>(), Arg.Any <CancellationToken>()) .Returns(new HttpResponse <string>() { StatusCode = 200 }); var testPayloadHandler = new TestPayloadHandler(); PayloadHandler.TryRegister(testPayloadHandler); var request = new TestHttpRequest(); request.ContentType.Should().Be("application/json"); request.GetPayloadHandler().ContentType.Should().Be("application/json"); var dataStore = new DefaultDataStore(mockRequestExecutor, new DefaultSerializer(), new ResourceFactory(null, null), NullLogger.Instance); await dataStore.PostAsync <TestResource>(request, new RequestContext { ContentType = "foo" }, CancellationToken.None); request.ContentType.Should().Be("foo"); request.GetPayloadHandler().ContentType.Should().Be("foo"); }
public async Task ThrowApiExceptionWhenContentTypeIsJsonAndErrorDescriptionIsNotPresent() { var response = @" { ""errorCode"": ""E0000022"", ""errorSummary"": ""The endpoint does not support the provided HTTP method"", ""errorLink"": ""E0000022"", ""errorId"": ""oaey24IvG9nTJCx8gqGeh8j4Q"", ""errorCauses"": [] }"; var mockResponseHeaders = new List <KeyValuePair <string, IEnumerable <string> > >(); mockResponseHeaders.Add(new KeyValuePair <string, IEnumerable <string> >("content-type", new List <string>() { "Accept: application/json" })); var mockRequestExecutor = new MockedStringRequestExecutor(response, statusCode: 400, mockResponseHeaders); var dataStore = new DefaultDataStore(mockRequestExecutor, new DefaultSerializer(), new ResourceFactory(null, null, null), NullLogger.Instance, new UserAgentBuilder("test", UserAgentHelper.SdkVersion)); var request = new HttpRequest { Uri = "https://foo.dev" }; OktaException exception = await Assert.ThrowsAsync <OktaApiException>( () => dataStore.PostAsync <TestResource>(request, new RequestContext(), CancellationToken.None)); exception.Message.Should().Contain("The endpoint does not support the provided HTTP method"); }
public async Task ThrowOAuthExceptionWhenErrorDescriptionIsPresent() { var response = @" { ""error"": ""invalid_grant"", ""error_description"": ""The interaction code is invalid or has expired."" }"; var mockResponseHeaders = new List <KeyValuePair <string, IEnumerable <string> > >(); mockResponseHeaders.Add(new KeyValuePair <string, IEnumerable <string> >("content-type", new List <string>() { "Accept: application/json" })); var mockRequestExecutor = new MockedStringRequestExecutor(response, statusCode: 400, mockResponseHeaders); var dataStore = new DefaultDataStore(mockRequestExecutor, new DefaultSerializer(), new ResourceFactory(null, null, null), NullLogger.Instance, new UserAgentBuilder("test", UserAgentHelper.SdkVersion)); var request = new HttpRequest { Uri = "https://foo.dev" }; OktaException exception = await Assert.ThrowsAsync <OktaOAuthException>( () => dataStore.PostAsync <TestResource>(request, new RequestContext(), CancellationToken.None)); exception.Message.Should().Contain("The interaction code is invalid or has expired."); }
public async Task CallRequestExecutorPostAsyncOnPostAsync() { var mockRequestExecutor = Substitute.For <IRequestExecutor>(); mockRequestExecutor .PostAsync(Arg.Any <HttpRequest>(), Arg.Any <CancellationToken>()) .Returns(new HttpResponse <string>() { StatusCode = 200 }); var defaultDataStore = new DefaultDataStore(mockRequestExecutor, new DefaultSerializer(), new ResourceFactory(null, null), NullLogger.Instance); var testRequest = new HttpRequest(); var testRequestContext = new RequestContext(); await defaultDataStore.PostAsync <Resource>(testRequest, testRequestContext, CancellationToken.None); await mockRequestExecutor .Received(1) .PostAsync(Arg.Is(testRequest), Arg.Any <CancellationToken>()); }
public async Task PostWithNullBody() { var mockRequestExecutor = Substitute.For <IRequestExecutor>(); mockRequestExecutor .PostAsync(Arg.Any <HttpRequest>(), Arg.Any <CancellationToken>()) .Returns(new HttpResponse <string>() { StatusCode = 200 }); var dataStore = new DefaultDataStore(mockRequestExecutor, new DefaultSerializer(), new ResourceFactory(null, null), NullLogger.Instance); var request = new HttpRequest { Uri = "https://foo.dev" }; // Payload = null await dataStore.PostAsync <TestResource>(request, new RequestContext(), CancellationToken.None); await mockRequestExecutor.Received().PostAsync( request: Arg.Is <HttpRequest>(httpRequest => httpRequest.Uri.Equals("https://foo.dev")), cancellationToken: CancellationToken.None); }
public async Task ThrowIonApiExceptionWhenContentTypeIsJsonIon() { var response = @"{ ""version"": ""1.0.0"", ""messages"": { ""type"": ""array"", ""value"": [ { ""message"": ""'stateHandle' is required."", ""i18n"": { ""key"": ""api.error.field_required"", ""params"": [ ""stateHandle"" ] }, ""class"": ""ERROR"" } ] } }"; var mockResponseHeaders = new List <KeyValuePair <string, IEnumerable <string> > >(); mockResponseHeaders.Add(new KeyValuePair <string, IEnumerable <string> >("content-type", new List <string>() { "Accept: application/ion+json; okta-version=1.0.0" })); var mockRequestExecutor = new MockedStringRequestExecutor(response, statusCode: 400, mockResponseHeaders); var dataStore = new DefaultDataStore(mockRequestExecutor, new DefaultSerializer(), new ResourceFactory(null, null, null), NullLogger.Instance, new UserAgentBuilder("test", UserAgentHelper.SdkVersion)); var request = new HttpRequest { Uri = "https://foo.dev" }; await Assert.ThrowsAsync <OktaIonApiException>( () => dataStore.PostAsync <TestResource>(request, new RequestContext(), CancellationToken.None)); }
public async Task PostWithNullBody() { var mockRequestExecutor = Substitute.For <IRequestExecutor>(); mockRequestExecutor .PostAsync(Arg.Any <string>(), Arg.Any <IEnumerable <KeyValuePair <string, string> > >(), Arg.Any <string>(), Arg.Any <CancellationToken>()) .Returns(new HttpResponse <string>() { StatusCode = 200 }); var dataStore = new DefaultDataStore(mockRequestExecutor, new DefaultSerializer(), new ResourceFactory(null, null), NullLogger.Instance); var request = new HttpRequest { Uri = "https://foo.dev" }; // Payload = null await dataStore.PostAsync <TestResource>(request, new RequestContext(), CancellationToken.None); await mockRequestExecutor.Received().PostAsync( href: "https://foo.dev", headers: Arg.Any <IEnumerable <KeyValuePair <string, string> > >(), body: null, cancellationToken: CancellationToken.None); }
public async Task DelegatePostToRequestExecutor() { var mockRequestExecutor = Substitute.For <IRequestExecutor>(); mockRequestExecutor .PostAsync(Arg.Any <string>(), Arg.Any <IEnumerable <KeyValuePair <string, string> > >(), Arg.Any <string>(), Arg.Any <CancellationToken>()) .Returns(new HttpResponse <string>() { StatusCode = 200 }); var dataStore = new DefaultDataStore(mockRequestExecutor, new DefaultSerializer(), new ResourceFactory(null, null, null), NullLogger.Instance, new UserAgentBuilder("test", UserAgentHelper.SdkVersion)); var request = new HttpRequest { Uri = "https://foo.dev", Payload = new { } }; await dataStore.PostAsync <TestResource>(request, new RequestContext(), CancellationToken.None); await mockRequestExecutor.Received().PostAsync( "https://foo.dev", Arg.Any <IEnumerable <KeyValuePair <string, string> > >(), "{}", CancellationToken.None); }