Пример #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.");
        }
Пример #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();
        }
Пример #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."
            });
        }
Пример #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();
        }
Пример #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();
        }
Пример #6
0
        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."
            });
        }
Пример #7
0
        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();
        }
Пример #8
0
        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""."
            });
        }
Пример #9
0
        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."
            });
        }
Пример #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)."
            });
        }