public void GetThuriaDataModelColumnName_GivenDataModel_ShouldReturnExpectedAttribute(string propertyName, bool isAttributeSet,
                                                                                              string columnName   = null, string columnAlias  = null,
                                                                                              bool isInsertColumn = true, bool isUpdateColumn = true)
        {
            //---------------Set up test pack-------------------
            var dataModel = new ThuriaTestDataModel();
            //---------------Assert Precondition----------------
            //---------------Execute Test ----------------------
            var columnAttribute = dataModel.GetThuriaDataModelColumnName(propertyName);

            //---------------Test Result -----------------------
            columnAttribute.Should().NotBeNull();

            if (isAttributeSet)
            {
                columnAttribute.ColumnName.Should().Be(columnName);
                columnAttribute.Alias.Should().Be(columnAlias);
                columnAttribute.IsInsertColumn.Should().Be(isInsertColumn);
                columnAttribute.IsUpdateColumn.Should().Be(isUpdateColumn);
            }
            else
            {
                columnAttribute.ColumnName.Should().Be(propertyName);
                columnAttribute.Alias.Should().BeNullOrEmpty();
                columnAttribute.IsInsertColumn.Should().BeTrue();
                columnAttribute.IsUpdateColumn.Should().BeTrue();
            }
        }
        public void GetThuriaDataModelTableName_GivenDataModelWithTableAttributeSet_ShouldReturnNameSpecifiedInAttribute()
        {
            //---------------Set up test pack-------------------
            var dataModel = new ThuriaTestDataModel();
            //---------------Assert Precondition----------------
            //---------------Execute Test ----------------------
            var tableName = dataModel.GetThuriaDataModelTableName();

            //---------------Test Result -----------------------
            tableName.Should().Be("ThuriaTestOne");
        }
        public void GetThuriaDataModelColumnName_GivenPropertyDoesNotExist_ShouldThrowException()
        {
            //---------------Set up test pack-------------------
            var propertyName = "InvalidProperty";
            var dataModel    = new ThuriaTestDataModel();
            //---------------Assert Precondition----------------
            //---------------Execute Test ----------------------
            var exception = Assert.Throws <Exception>(() => dataModel.GetThuriaDataModelColumnName(propertyName));

            //---------------Test Result -----------------------
            exception.Message.Should().Be($"Property {propertyName} does not exist on {dataModel.GetType().FullName}");
        }
        public void GetThuriaDataModelRelationships_GivenDataModelWithRelationships_ShouldReturnListOfRelationships()
        {
            //---------------Set up test pack-------------------
            var dataModel = new ThuriaTestDataModel();
            //---------------Assert Precondition----------------
            //---------------Execute Test ----------------------
            var modelRelationships = dataModel.GetThuriaDataModelRelationships();
            //---------------Test Result -----------------------
            var thuriaRelationshipAttributes = modelRelationships.ToList();

            thuriaRelationshipAttributes.Should().NotBeNull();
            thuriaRelationshipAttributes.Count.Should().Be(2);
        }
        public void GetThuriaDataModelPrimaryKey_GivenDataModelWithPrimaryKey_ShouldReturnExpectedColumnAttribute()
        {
            //---------------Set up test pack-------------------
            var dataModel = new ThuriaTestDataModel();
            //---------------Assert Precondition----------------
            //---------------Execute Test ----------------------
            var primaryKey = dataModel.GetThuriaDataModelPrimaryKey();

            //---------------Test Result -----------------------
            primaryKey.Should().NotBeNull();
            primaryKey.ColumnName.Should().Be("Id");
            primaryKey.PropertyName.Should().Be("Id");
        }
        public void GetThuriaDataModelConditions_GivenDataModelWithConditions_ShouldReturnAllExpectedConditions(DbContextAction DbContextAction, int noOfExpectedConditions)
        {
            //---------------Set up test pack-------------------
            var dataModel = new ThuriaTestDataModel
            {
                Id           = Guid.NewGuid(),
                Name         = RandomValueGenerator.CreateRandomString(),
                Description  = RandomValueGenerator.CreateRandomString(),
                ModifiedDate = RandomValueGenerator.CreateRandomDate(),
                IsActive     = true
            };
            //---------------Assert Precondition----------------
            //---------------Execute Test ----------------------
            var allConditions = dataModel.GetThuriaDataModelConditions(DbContextAction);
            //---------------Test Result -----------------------
            var dataModelConditions = allConditions.ToList();

            dataModelConditions.Should().NotBeNull();
            dataModelConditions.Count.Should().Be(noOfExpectedConditions);
        }
        public void GetThuriaDataModelColumns_ShouldReturnTheExpectedColumnAttributes(DbContextAction DbContextAction, string columnName, string propertyName, bool isExpectedInList = true)
        {
            //---------------Set up test pack-------------------
            var dataModel = new ThuriaTestDataModel();
            //---------------Assert Precondition----------------
            //---------------Execute Test ----------------------
            var dataModelColumns = dataModel.GetThuriaDataModelColumns(DbContextAction);
            //---------------Test Result -----------------------
            var columnAttributes = dataModelColumns.ToList();

            columnAttributes.Should().NotBeNull();

            if (isExpectedInList)
            {
                columnAttributes.Should().Contain(attribute => attribute.ColumnName == columnName);
                columnAttributes.Should().Contain(attribute => attribute.PropertyName == propertyName);
            }
            else
            {
                columnAttributes.Should().NotContain(attribute => attribute.ColumnName == columnName);
                columnAttributes.Should().NotContain(attribute => attribute.PropertyName == propertyName);
            }
        }
        public void GetThuriaPopulatedRelationshipMetadata_GivenDataModelWithRelationships_ShouldReturnListOfRelationships()
        {
            //---------------Set up test pack-------------------
            var dataModel = new ThuriaTestDataModel
            {
                Id                   = Guid.NewGuid(),
                Name                 = RandomValueGenerator.CreateRandomString(),
                Description          = RandomValueGenerator.CreateRandomString(),
                ModifiedDate         = RandomValueGenerator.CreateRandomDate(),
                IsActive             = true,
                ForeignTestDataModel = new ThuriaForeignTestDataModel(),
                AllForeignTests      = new List <ThuriaForeignTestDataModel> {
                    new ThuriaForeignTestDataModel()
                }
            };
            //---------------Assert Precondition----------------
            //---------------Execute Test ----------------------
            var modelRelationships = dataModel.GetThuriaPopulatedRelationshipMetadata();
            //---------------Test Result -----------------------
            var thuriaRelationshipAttributes = modelRelationships.ToList();

            thuriaRelationshipAttributes.Should().NotBeNull();
            thuriaRelationshipAttributes.Count.Should().Be(2);
        }