Esempio n. 1
0
        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");
        }
Esempio n. 2
0
        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");
        }
Esempio n. 3
0
        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.");
        }
Esempio n. 4
0
        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>());
        }
Esempio n. 5
0
        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);
        }
Esempio n. 6
0
        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));
        }
Esempio n. 7
0
        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);
        }
Esempio n. 8
0
        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);
        }