public void ThrowsWhenResponseHasNoContent(HttpResponseMessage message, DefaultJSendParser parser)
 {
     // Fixture setup
     message.Content = null;
     // Exercise system and verify outcome
     parser.Awaiting(p => p.ParseAsync<Model>(null, message))
         .ShouldThrow<JSendParseException>()
         .WithMessage(StringResources.ResponseWithoutContent);
 }
 public void ThrowsWhenResponse_IsNotValidJson(HttpResponseMessage message, DefaultJSendParser parser)
 {
     // Fixture setup
     message.Content = new StringContent("1,2,3");
     // Exercise system and verify outcome
     parser.Awaiting(p => p.ParseAsync<Model>(null, message))
         .ShouldThrow<JSendParseException>()
         .WithInnerException<JsonReaderException>();
 }
Exemple #3
0
 public void ThrowsWhenResponse_IsNotValidJson(HttpResponseMessage message, DefaultJSendParser parser)
 {
     // Fixture setup
     message.Content = new StringContent("1,2,3");
     // Exercise system and verify outcome
     parser.Awaiting(p => p.ParseAsync <Model>(null, message))
     .ShouldThrow <JSendParseException>()
     .WithInnerException <JsonReaderException>();
 }
 public void ThrowsWhenResponse_IsJsonArray(HttpResponseMessage message, DefaultJSendParser parser)
 {
     // Fixture setup
     message.Content = new StringContent("[1,2,3]");
     // Exercise system and verify outcome
     parser.Awaiting(p => p.ParseAsync<Model>(null, message))
         .ShouldThrow<JSendParseException>()
         .WithInnerException<JsonSchemaException>()
         .WithInnerMessage("Invalid type. Expected Object but got Array*");
 }
Exemple #5
0
 public void ThrowsWhenResponse_IsNullToken(HttpResponseMessage message, DefaultJSendParser parser)
 {
     // Fixture setup
     message.Content = new StringContent("null");
     // Exercise system and verify outcome
     parser.Awaiting(p => p.ParseAsync <Model>(null, message))
     .ShouldThrow <JSendParseException>()
     .WithInnerException <JsonSchemaException>()
     .WithInnerMessage("Invalid type. Expected Object but got Null*");
 }
Exemple #6
0
        public void ThrowsWhenResponseHasNoContent(DefaultJSendParser parser)
        {
            // Fixture setup
            var message = new HttpResponseMessage();

            // Exercise system and verify outcome
            parser.Awaiting(p => p.ParseAsync <Model>(null, message))
            .ShouldThrow <JSendParseException>()
            .WithMessage(StringResources.ResponseWithEmptyBody);
        }
Exemple #7
0
 public void ThrowsWhenResponseDoesNotHaveStatus(HttpResponseMessage message, DefaultJSendParser parser)
 {
     // Fixture setup
     message.Content = new StringContent(@"
     {
         ""data"": null
     }");
     // Exercise system and verify outcome
     parser.Awaiting(p => p.ParseAsync <Model>(null, message))
     .ShouldThrow <JSendParseException>()
     .WithInnerException <JsonSchemaException>()
     .WithInnerMessage("Required properties are missing from object: status*");
 }
Exemple #8
0
        public async Task Parses204NoContent(DefaultJSendParser parser)
        {
            // Fixture setup
            var message = new HttpResponseMessage(HttpStatusCode.NoContent)
            {
                Content = new StringContent("")
            };
            // Exercise system and verify outcome
            var response = await parser.ParseAsync <Model>(null, message);

            // Verify outcome
            response.Status.Should().Be(JSendStatus.Success);
            response.HasData.Should().BeFalse();
        }
Exemple #9
0
 public void ThrowsWhenStatusIsNotString(HttpResponseMessage message, DefaultJSendParser parser)
 {
     // Fixture setup
     message.Content = new StringContent(@"
     {
         ""status"": 123,
         ""data"": null
     }");
     // Exercise system and verify outcome
     parser.Awaiting(p => p.ParseAsync <Model>(null, message))
     .ShouldThrow <JSendParseException>()
     .WithInnerException <JsonSchemaException>()
     .WithInnerMessage("Value 123 is not defined in enum.");
 }
Exemple #10
0
 public void ThrowsWhenDataIsOfAWrongType(HttpResponseMessage message, DefaultJSendParser parser)
 {
     // Fixture setup
     message.Content = new StringContent(@"
     {
         ""status"": ""success"",
         ""data"": ""invalid data""
     }");
     // Exercise system and verify outcome
     parser.Awaiting(p => p.ParseAsync <Model>(null, message))
     .ShouldThrow <JSendParseException>()
     .WithInnerException <JsonSerializationException>()
     .WithInnerMessage("Error converting value \"invalid data\"*");
 }
Exemple #11
0
 public void ThrowsWhenFailResponse_HasNullData(HttpResponseMessage message, DefaultJSendParser parser)
 {
     // Fixture setup
     message.Content = new StringContent(@"
     {
         ""status"": ""fail"",
         ""data"": null
     }");
     // Exercise system and verify outcome
     parser.Awaiting(p => p.ParseAsync <Model>(null, message))
     .ShouldThrow <JSendParseException>()
     .WithInnerException <JsonSchemaException>()
     .WithInnerMessage("Type Null is disallowed*");
 }
Exemple #12
0
 public void ThrowsWhenErrorResponse_HasMessageOfAWrongType(HttpResponseMessage message,
                                                            DefaultJSendParser parser)
 {
     // Fixture setup
     message.Content = new StringContent(@"
     {
         ""status"": ""error"",
         ""message"": { }
     }");
     // Exercise system and verify outcome
     parser.Awaiting(p => p.ParseAsync <Model>(null, message))
     .ShouldThrow <JSendParseException>()
     .WithInnerException <JsonSchemaException>()
     .WithInnerMessage("Invalid type. Expected String but got Object*");
 }
Exemple #13
0
        public async Task ParsesSuccessResponse_WithoutValueTypeData(HttpResponseMessage message,
                                                                     DefaultJSendParser parser)
        {
            // Fixture setup
            message.Content = new StringContent(@"
            {
                ""status"": ""success"",
                ""data"": null
            }");
            // Exercise system
            var response = await parser.ParseAsync <int>(null, message);

            // Verify outcome
            response.Status.Should().Be(JSendStatus.Success);
            response.HasData.Should().BeFalse();
        }
Exemple #14
0
        public async Task ParsesSuccessResponse_WithData(Model model, HttpResponseMessage message,
                                                         DefaultJSendParser parser)
        {
            // Fixture setup
            message.Content = new StringContent(@"
            {
                ""status"": ""success"",
                ""data"": " + JsonConvert.SerializeObject(model) + @"
            }");
            // Exercise system
            var response = await parser.ParseAsync <Model>(null, message);

            // Verify outcome
            response.Status.Should().Be(JSendStatus.Success);
            response.Data.ShouldBeEquivalentTo(model);
        }
        public void WrapsJsonExeptionsWithCorrectMessage(HttpResponseMessage message, DefaultJSendParser parser)
        {
            // Fixture setup
            const string invalidContent = "qwerty";

            var expectedMessage =
                @"HTTP response message could not be parsed into an instance of type ""JSend.Client.JSendResponse`1[JSend.Client.Tests.TestTypes.Model]"". Content:" +
                Environment.NewLine +
                invalidContent;

            message.Content = new StringContent(invalidContent);
            // Exercise system and verify outcome
            parser.Awaiting(p => p.ParseAsync<Model>(null, message))
                .ShouldThrow<JSendParseException>()
                .WithMessage(expectedMessage)
                .WithInnerException<JsonException>();
        }
Exemple #16
0
        public async Task ParsesSuccessResponse_WithData_UsingSerializerSettings(
            [NoAutoProperties] ModelWithPrivateDefaultConstructor model,
            HttpResponseMessage message,
            DefaultJSendParser parser)
        {
            // Fixture setup
            message.Content = new StringContent(@"
            {
                ""status"": ""success"",
                ""data"": " + JsonConvert.SerializeObject(model) + @"
            }");

            var serializerSettings = new JsonSerializerSettings
            {
                ConstructorHandling = ConstructorHandling.AllowNonPublicDefaultConstructor
            };

            // Exercise system
            var response = await parser.ParseAsync <ModelWithPrivateDefaultConstructor>(serializerSettings, message);

            // Verify outcome
            response.Data.PrivateDefaultConstructorCalled.Should().BeTrue();
        }
Exemple #17
0
        public async Task ParsesFailResponse_UsingSerializerSettings(
            HttpResponseMessage message, DefaultJSendParser parser)
        {
            // Fixture setup
            message.Content = new StringContent(@"
            {
                ""status"": ""fail"",
                ""data"": ""1989-01-02T15:14:03.9030824""
            }");

            var serializerSettings = new JsonSerializerSettings
            {
                DateTimeZoneHandling = DateTimeZoneHandling.Utc
            };

            // Exercise system
            var response = await parser.ParseAsync <Model>(serializerSettings, message);

            // Verify outcome
            var date = response.Error.Data.Value <DateTime>();

            date.Kind.Should().Be(DateTimeKind.Utc);
        }
Exemple #18
0
        public async Task ParsesErrorResponse_WithoutCodeKey(string message, DateTime data,
                                                             HttpResponseMessage responseMessage, DefaultJSendParser parser)
        {
            // Fixture setup
            responseMessage.Content = new StringContent(@"
            {
                ""status"": ""error"",
                ""message"": """ + message + @""",
                ""data"": """ + data + @"""
            }");

            var expectedError = new JSendError(JSendStatus.Error, message, null, JToken.FromObject(data));
            // Exercise system
            var response = await parser.ParseAsync <Model>(null, responseMessage);

            // Verify outcome
            response.Status.Should().Be(JSendStatus.Error);
            response.Error.ShouldBeEquivalentTo(expectedError);
        }
 public async Task ParsesSuccessResponse_WithData(Model model, HttpResponseMessage message,
     DefaultJSendParser parser)
 {
     // Fixture setup
     message.Content = new StringContent(@"
     {
         ""status"": ""success"",
         ""data"": " + JsonConvert.SerializeObject(model) + @"
     }");
     // Exercise system
     var response = await parser.ParseAsync<Model>(null, message);
     // Verify outcome
     response.Status.Should().Be(JSendStatus.Success);
     response.Data.ShouldBeEquivalentTo(model);
 }
        public async Task ParsesSuccessResponse_WithData_UsingSerializerSettings(
            [NoAutoProperties] ModelWithPrivateDefaultConstructor model,
            HttpResponseMessage message,
            DefaultJSendParser parser)
        {
            // Fixture setup
            message.Content = new StringContent(@"
            {
                ""status"": ""success"",
                ""data"": " + JsonConvert.SerializeObject(model) + @"
            }");

            var serializerSettings = new JsonSerializerSettings
            {
                ConstructorHandling = ConstructorHandling.AllowNonPublicDefaultConstructor
            };

            // Exercise system
            var response = await parser.ParseAsync<ModelWithPrivateDefaultConstructor>(serializerSettings, message);
            // Verify outcome
            response.Data.PrivateDefaultConstructorCalled.Should().BeTrue();
        }
Exemple #21
0
 public void ThrowsWhenHttpResponseMessageIsNull(DefaultJSendParser parser)
 {
     // Exercise system and verify outcome
     parser.Awaiting(p => p.ParseAsync <Model>(null, null))
     .ShouldThrow <ArgumentNullException>();
 }
Exemple #22
0
        public async Task ParsesFailResponse(string reason, HttpResponseMessage message, DefaultJSendParser parser)
        {
            // Fixture setup
            message.Content = new StringContent(@"
            {
                ""status"": ""fail"",
                ""data"": """ + reason + @"""
            }");
            // Exercise system
            var response = await parser.ParseAsync <Model>(null, message);

            // Verify outcome
            response.Status.Should().Be(JSendStatus.Fail);
            response.Error.Data.Type.Should().Be(JTokenType.String);
            response.Error.Data.Value <string>().Should().Be(reason);
        }
        public async Task ParsesErrorResponse_WithoutCodeKey(string message, DateTime data,
            HttpResponseMessage responseMessage, DefaultJSendParser parser)
        {
            // Fixture setup
            responseMessage.Content = new StringContent(@"
            {
                ""status"": ""error"",
                ""message"": """ + message + @""",
                ""data"": """ + data + @"""
            }");

            var expectedError = new JSendError(JSendStatus.Error, message, null, JToken.FromObject(data));
            // Exercise system
            var response = await parser.ParseAsync<Model>(null, responseMessage);
            // Verify outcome
            response.Status.Should().Be(JSendStatus.Error);
            response.Error.ShouldBeEquivalentTo(expectedError);
        }
 public void ThrowsWhenErrorResponse_HasErrorOfAWrongType(HttpResponseMessage message,
     DefaultJSendParser parser)
 {
     // Fixture setup
     message.Content = new StringContent(@"
     {
         ""status"": ""error"",
         ""message"": ""msg"",
         ""code"": ""invalid""
     }");
     // Exercise system and verify outcome
     parser.Awaiting(p => p.ParseAsync<Model>(null, message))
         .ShouldThrow<JSendParseException>()
         .WithInnerException<JsonSchemaException>()
         .WithInnerMessage("Invalid type. Expected Integer, Null but got String*");
 }
 public async Task ParsesFailResponse(string reason, HttpResponseMessage message, DefaultJSendParser parser)
 {
     // Fixture setup
     message.Content = new StringContent(@"
     {
         ""status"": ""fail"",
         ""data"": """ + reason + @"""
     }");
     // Exercise system
     var response = await parser.ParseAsync<Model>(null, message);
     // Verify outcome
     response.Status.Should().Be(JSendStatus.Fail);
     response.Error.Data.Type.Should().Be(JTokenType.String);
     response.Error.Data.Value<string>().Should().Be(reason);
 }
        public async Task ParsesErrorResponse_UsingSerializerSettings(
            HttpResponseMessage message, DefaultJSendParser parser)
        {
            // Fixture setup
            message.Content = new StringContent(@"
            {
                ""status"": ""error"",
                ""message"": ""message"",
                ""data"": ""1989-01-02T15:14:03.9030824""
            }");

            var serializerSettings = new JsonSerializerSettings
            {
                DateTimeZoneHandling = DateTimeZoneHandling.Utc
            };

            // Exercise system
            var response = await parser.ParseAsync<Model>(serializerSettings, message);
            // Verify outcome
            var date = response.Error.Data.Value<DateTime>();
            date.Kind.Should().Be(DateTimeKind.Utc);
        }
 public void ThrowsWhenHttpResponseMessageIsNull(DefaultJSendParser parser)
 {
     // Exercise system and verify outcome
     parser.Awaiting(p => p.ParseAsync<Model>(null, null))
         .ShouldThrow<ArgumentNullException>();
 }
 public void ThrowsWhenFailResponse_HasNullData(HttpResponseMessage message, DefaultJSendParser parser)
 {
     // Fixture setup
     message.Content = new StringContent(@"
     {
         ""status"": ""fail"",
         ""data"": null
     }");
     // Exercise system and verify outcome
     parser.Awaiting(p => p.ParseAsync<Model>(null, message))
         .ShouldThrow<JSendParseException>()
         .WithInnerException<JsonSchemaException>()
         .WithInnerMessage("Type Null is disallowed*");
 }
 public async Task ParsesSuccessResponse_WithoutValueTypeData(HttpResponseMessage message,
     DefaultJSendParser parser)
 {
     // Fixture setup
     message.Content = new StringContent(@"
     {
         ""status"": ""success"",
         ""data"": null
     }");
     // Exercise system
     var response = await parser.ParseAsync<int>(null, message);
     // Verify outcome
     response.Status.Should().Be(JSendStatus.Success);
     response.HasData.Should().BeFalse();
 }
Exemple #30
0
        public async Task ParsesErrorResponse_WithNullData(string message, int code,
                                                           HttpResponseMessage responseMessage, DefaultJSendParser parser)
        {
            // Fixture setup
            responseMessage.Content = new StringContent(@"
            {
                ""status"": ""error"",
                ""message"": """ + message + @""",
                ""code"": " + code + @",
                ""data"": null
            }");

            var expectedError = new JSendError(JSendStatus.Error, message, code, null);
            // Exercise system
            var response = await parser.ParseAsync <Model>(null, responseMessage);

            // Verify outcome
            response.Status.Should().Be(JSendStatus.Error);
            response.Error.ShouldBeEquivalentTo(expectedError);
        }
 public void ThrowsWhenDataIsOfAWrongType(HttpResponseMessage message, DefaultJSendParser parser)
 {
     // Fixture setup
     message.Content = new StringContent(@"
     {
         ""status"": ""success"",
         ""data"": ""invalid data""
     }");
     // Exercise system and verify outcome
     parser.Awaiting(p => p.ParseAsync<Model>(null, message))
         .ShouldThrow<JSendParseException>()
         .WithInnerException<JsonSerializationException>()
         .WithInnerMessage("Error converting value \"invalid data\"*");
 }
 public void ThrowsWhenResponseDoesNotHaveStatus(HttpResponseMessage message, DefaultJSendParser parser)
 {
     // Fixture setup
     message.Content = new StringContent(@"
     {
         ""data"": null
     }");
     // Exercise system and verify outcome
     parser.Awaiting(p => p.ParseAsync<Model>(null, message))
         .ShouldThrow<JSendParseException>()
         .WithInnerException<JsonSchemaException>()
         .WithInnerMessage("Required properties are missing from object: status*");
 }
        public async Task ParsesErrorResponse_WithNullData(string message, int code,
            HttpResponseMessage responseMessage, DefaultJSendParser parser)
        {
            // Fixture setup
            responseMessage.Content = new StringContent(@"
            {
                ""status"": ""error"",
                ""message"": """ + message + @""",
                ""code"": " + code + @",
                ""data"": null
            }");

            var expectedError = new JSendError(JSendStatus.Error, message, code, null);
            // Exercise system
            var response = await parser.ParseAsync<Model>(null, responseMessage);
            // Verify outcome
            response.Status.Should().Be(JSendStatus.Error);
            response.Error.ShouldBeEquivalentTo(expectedError);
        }
Exemple #34
0
        public void WrapsJsonExeptionsWithCorrectMessage(HttpResponseMessage message, DefaultJSendParser parser)
        {
            // Fixture setup
            const string invalidContent = "qwerty";

            var expectedMessage =
                @"HTTP response message could not be parsed into an instance of type ""JSend.Client.JSendResponse`1[JSend.Client.Tests.TestTypes.Model]"". Content:" +
                Environment.NewLine +
                invalidContent;

            message.Content = new StringContent(invalidContent);
            // Exercise system and verify outcome
            parser.Awaiting(p => p.ParseAsync <Model>(null, message))
            .ShouldThrow <JSendParseException>()
            .WithMessage(expectedMessage)
            .WithInnerException <JsonException>();
        }
 public void ThrowsWhenStatusIsNotString(HttpResponseMessage message, DefaultJSendParser parser)
 {
     // Fixture setup
     message.Content = new StringContent(@"
     {
         ""status"": 123,
         ""data"": null
     }");
     // Exercise system and verify outcome
     parser.Awaiting(p => p.ParseAsync<Model>(null, message))
         .ShouldThrow<JSendParseException>()
         .WithInnerException<JsonSchemaException>()
         .WithInnerMessage("Value 123 is not defined in enum.");
 }