Beispiel #1
0
        public async Task ShouldBeInvalidWhenDeprecationDateIsPassed()
        {
            var addedContract = await AlreadyInDatabaseContract(x =>
            {
                x.ContractString  = SampleContractString;
                x.DeprecationDate = DateTime.Today.AddDays(-2);
            });

            var query = new TestMessage.Query
            {
                ContractId    = addedContract.Id,
                VersionNumber = addedContract.VersionNumber
            };
            var contract = await Send(query);

            const string sampleMessage = "{\"id\": \"a21b2109-bd23-4205-ba53-b8df0fdd36bf\", \"Timestamp\": \"2019-07-23\",\"Name\":\"Saagar\",\"Age\":\"26\"}";

            var command = new TestMessage.Command()
            {
                ContractId    = contract.ContractId,
                VersionNumber = contract.VersionNumber,
                SampleMessage = sampleMessage
            };

            var result = await Send(command);

            result.IsValid.ShouldBeFalse();
            result.MessageErrors.Single().ShouldBe("This contract has been deprecated. Please check for a new version.");
        }
Beispiel #2
0
        public async Task ShouldBeValidWhenMessageMatchesContractWithDeprecationDate()
        {
            var addedContract = await AlreadyInDatabaseContract(x =>
            {
                x.ContractString  = SampleContractString;
                x.DeprecationDate = DateTime.Today.AddDays(5);
            });

            var query = new TestMessage.Query()
            {
                ContractId    = addedContract.Id,
                VersionNumber = addedContract.VersionNumber
            };
            var contract = await Send(query);

            const string sampleMessage = "{\"id\": \"a21b2109-bd23-4205-ba53-b8df0fdd36bf\", \"Timestamp\": \"2019-07-23\",\"Name\":\"Saagar\",\"Age\":\"26\"}";

            var command = new TestMessage.Command()
            {
                ContractId    = contract.ContractId,
                VersionNumber = contract.VersionNumber,
                SampleMessage = sampleMessage
            };

            var result = await Send(command);

            result.IsValid.ShouldBeTrue();
            result.WarningMessage.ShouldBe($"This contract will be deprecated on {DateTime.Today.AddDays(5)}, please check for a new version.");
            result.MessageErrors.ShouldBeEmpty();
        }
Beispiel #3
0
        public async Task ShouldBeInvalidWhenMessageDoesNotMatchContract()
        {
            var addedContract = await AlreadyInDatabaseContract(x => x.ContractString = SampleContractString);

            var query = new TestMessage.Query()
            {
                ContractId    = addedContract.Id,
                VersionNumber = addedContract.VersionNumber
            };
            var contract = await Send(query);

            const string sampleMessage = "{\"FirstName\":\"Saagar\",\"Age\":\"26\"}";

            var command = new TestMessage.Command()
            {
                ContractId    = contract.ContractId,
                VersionNumber = contract.VersionNumber,
                SampleMessage = sampleMessage
            };

            var result = await Send(command);

            result.IsValid.ShouldBeFalse();
            result.MessageErrors.ShouldBe(new List <string>()
            {
                "Message property \"FirstName\" is not part of the contract.",
                "Message is missing expected property \"Id\".",
                "Message is missing expected property \"Name\".",
                "Message is missing expected property \"Timestamp\".",
                "The schema for \"FirstName\" was not found in the contract definition."
            });
        }
Beispiel #4
0
        public async Task ShouldBeValidWhenMessageMatchesContract()
        {
            var addedContract = await AlreadyInDatabaseContract(x => x.ContractString = SampleContractString);

            var query = new TestMessage.Query()
            {
                ContractId    = addedContract.Id,
                VersionNumber = addedContract.VersionNumber
            };
            var contract = await Send(query);

            const string sampleMessage = "{\"id\": \"a21b2109-bd23-4205-ba53-b8df0fdd36bf\", \"Timestamp\": \"2019-07-23\",\"Name\":\"Saagar\",\"Age\":\"26\"}";

            var command = new TestMessage.Command()
            {
                ContractId    = contract.ContractId,
                VersionNumber = contract.VersionNumber,
                SampleMessage = sampleMessage
            };

            var result = await Send(command);

            result.IsValid.ShouldBeTrue();
            result.MessageErrors.ShouldBeEmpty();
        }
Beispiel #5
0
        public async Task ShouldBeValidWhenMessageWithArrayMatchesContract()
        {
            var contractString = @"{
                    ""Contract"": {
                        ""type"": ""object"",
                        ""properties"": {
                            ""Id"": {
                                ""$ref"": ""#/Guid""
                            },
                            ""Timestamp"": {
                                ""type"": ""string"",
                                ""format"": ""date-time"",
                                ""example"": ""2019-05-12T18:14:29Z""
                            },
                            ""Name"": {
                                ""type"": ""string"",
                                ""example"": ""John Doe""
                            },
                            ""Age"": {
                                ""type"": ""integer"",
                                ""format"": ""int32"",
                                ""example"": ""30""
                            },
                            ""StringList"": {
                                ""type"": ""array"",
                                ""items"": {
                                    ""type"": ""string""
                                },
                                ""example"": [""Item1"", ""Item2""]
                           },
                        }
                    },
                    ""Guid"": {
                        ""type"": ""string""
                    }
                }";

            var addedContract = await AlreadyInDatabaseContract(x => x.ContractString = contractString);

            var query = new TestMessage.Query()
            {
                ContractId    = addedContract.Id,
                VersionNumber = addedContract.VersionNumber
            };
            var contract = await Send(query);

            const string sampleMessage = "{\"id\": \"a21b2109-bd23-4205-ba53-b8df0fdd36bf\", \"Timestamp\": \"2019-07-23\",\"Name\":\"Saagar\",\"Age\":\"26\",\"StringList\": [\"Item1\",\"Item2\"]}";

            var command = new TestMessage.Command()
            {
                ContractId    = contract.ContractId,
                VersionNumber = contract.VersionNumber,
                SampleMessage = sampleMessage
            };

            var result = await Send(command);

            result.IsValid.ShouldBeTrue();
            result.MessageErrors.ShouldBeEmpty();
        }
        public async Task ShouldBeInvalidWhenMessageWithObjectsMatchesSubsetContract()
        {
            var addedContract = await AlreadyInDatabaseContract(x => x.ContractString = SampleContractStringWithObject);

            var query = new TestMessage.Query
            {
                ContractId    = addedContract.Id,
                VersionNumber = addedContract.VersionNumber
            };
            var contract = await Send(query);

            // Not including "Age" field
            // Not including "Fullname => Lastname" field
            const string sampleMessage = @"{""Fullname"": {""Firstname"": ""sample string""}, ""Id"": ""01234567-abcd-0123-abcd-0123456789ab"", ""Timestamp"": ""2019-01-01T18:14:29Z""}";

            var command = new TestMessage.Command
            {
                ContractId    = contract.ContractId,
                VersionNumber = contract.VersionNumber,
                SampleMessage = sampleMessage
            };

            var result = await Send(command);

            const string separator = TesterService.ParentOfSymbol;

            result.IsValid.ShouldBeFalse();
            result.MessageErrors.ShouldBe(new List <string>
            {
                @"Message is missing expected property ""Age"".",
                $@"The value for field ""Fullname{separator}Lastname"" was not found."
            });
        }
        public async Task ShouldBeValidWhenMessageWithObjectsMatchesSubsetContract()
        {
            var addedContract = await AlreadyInDatabaseContract(x => x.ContractString = SampleContractStringWithObject);

            var query = new TestMessage.Query
            {
                ContractId    = addedContract.Id,
                VersionNumber = addedContract.VersionNumber
            };
            var contract = await Send(query);

            // Not including "Age" field
            // Not including "Fullname => Lastname" field
            const string sampleMessage = @"{""Fullname"": {""Firstname"": ""sample string""}, ""Id"": ""01234567-abcd-0123-abcd-0123456789ab"", ""Timestamp"": ""2019-01-01T18:14:29Z""}";

            var command = new TestMessage.Command
            {
                ContractId    = contract.ContractId,
                VersionNumber = contract.VersionNumber,
                SampleMessage = sampleMessage,
                AllowSubset   = true
            };

            var result = await Send(command);

            result.IsValid.ShouldBeTrue();
            result.MessageErrors.ShouldBeEmpty();
        }
        public async Task ShouldBeInvalidWhenMessageMatchesSubsetContract()
        {
            var addedContract = await AlreadyInDatabaseContract(x => x.ContractString = SampleContractString);

            var query = new TestMessage.Query
            {
                ContractId    = addedContract.Id,
                VersionNumber = addedContract.VersionNumber
            };
            var contract = await Send(query);

            // Not including "Age" field
            const string sampleMessage = "{\"id\": \"a21b2109-bd23-4205-ba53-b8df0fdd36bf\", \"Timestamp\": \"2019-07-23\",\"Name\":\"Saagar\"}";

            var command = new TestMessage.Command
            {
                ContractId    = contract.ContractId,
                VersionNumber = contract.VersionNumber,
                SampleMessage = sampleMessage
            };

            var result = await Send(command);

            result.IsValid.ShouldBeFalse();
            result.MessageErrors.ShouldBe(new List <string>
            {
                @"Message is missing expected property ""Age""."
            });
        }
        public async Task ShouldBeInvalidWhenMessageIsInvalidWithFutureDeprecationDate()
        {
            var addedContract = await AlreadyInDatabaseContract(x =>
            {
                x.ContractString  = SampleContractString;
                x.DeprecationDate = DateTime.Today.AddDays(5);
            });

            var query = new TestMessage.Query
            {
                ContractId    = addedContract.Id,
                VersionNumber = addedContract.VersionNumber
            };
            var contract = await Send(query);

            const string sampleMessage = "{\"FirstName\":\"Saagar\",\"Age\":\"26\"}";

            var command = new TestMessage.Command
            {
                ContractId    = contract.ContractId,
                VersionNumber = contract.VersionNumber,
                SampleMessage = sampleMessage
            };

            var result = await Send(command);

            result.IsValid.ShouldBeFalse();
            result.DeprecationWarningMessage.ShouldBe($"This contract will be deprecated on {DateTime.Today.AddDays(5)}, please check for a new version.");
            result.MessageErrors.ShouldBe(new List <string>
            {
                "Message is missing expected property \"Id\".",
                "Message is missing expected property \"Name\".",
                "Message is missing expected property \"Timestamp\"."
            });

            result.Warnings.ShouldBe(new List <string>
            {
                "Message property \"FirstName\" is not part of the contract."
            });
        }
Beispiel #10
0
        public async Task ShouldBeValidWhenMessageWithNestedArrayDoesNotMatchContract()
        {
            var contractString = @"{
                    ""Contract"": {
                        ""type"": ""object"",
                        ""properties"": {
                            ""Id"": {
                                ""$ref"": ""#/Guid""
                            },
                            ""Timestamp"": {
                                ""type"": ""string"",
                                ""format"": ""date-time"",
                                ""example"": ""2019-05-12T18:14:29Z""
                            },
                            ""Name"": {
                                ""type"": ""string"",
                                ""example"": ""John Doe""
                            },
                            ""Age"": {
                                ""type"": ""integer"",
                                ""format"": ""int32"",
                                ""example"": ""30""
                            },
                            ""LevelOne"": {
                                ""type"": ""object"",
                                ""properties"": {
                                    ""LevelTwo"": {
                                        ""type"": ""object"",
                                        ""properties"": {
                                            ""LevelThree"": {
                                                ""type"": ""array"",
                                                ""items"": {
                                                    ""type"": ""integer""
                                                },
                                                ""example"": [1, 2]
                                            }
                                        }
                                    }
                                }
                            }
                        }
                    },
                    ""Guid"": {
                        ""type"": ""string""
                    }
                }";

            var addedContract = await AlreadyInDatabaseContract(x => x.ContractString = contractString);

            var query = new TestMessage.Query()
            {
                ContractId    = addedContract.Id,
                VersionNumber = addedContract.VersionNumber
            };
            var contract = await Send(query);

            const string sampleMessage = "{\"id\": \"a21b2109-bd23-4205-ba53-b8df0fdd36bf\", \"Timestamp\": \"2019-07-23\",\"Name\":\"Saagar\",\"Age\":\"26\",\"LevelOne\":{\"LevelTwo\":{\"LevelThree\":[\"string123\"]}}}";

            var command = new TestMessage.Command()
            {
                ContractId    = contract.ContractId,
                VersionNumber = contract.VersionNumber,
                SampleMessage = sampleMessage
            };

            var result = await Send(command);

            result.IsValid.ShouldBeFalse();
            result.MessageErrors.ShouldBe(new List <string>()
            {
                "An item in the Items array for LevelOne-->LevelTwo-->LevelThree does not match the required data type (integer)."
            });
        }