public async Task NewValidation() { //test 1, create initial table using (var database = await CreateRepositoryWithSourceTable()) { var dbConnection = await database.DbContext.DexihConnections.SingleOrDefaultAsync(c => c.Name == "source" && c.IsValid); var lookupColumn = await database.DbContext.DexihTableColumns.FirstAsync(); var validation = new DexihColumnValidation() { Name = "new validation", HubKey = dbConnection.HubKey, AllowDbNull = true, CleanAction = ECleanAction.DefaultValue, DataType = ETypeCode.String, CleanValue = "default", Description = "validation description", InvalidAction = EInvalidAction.Clean, ListOfValues = new [] { "abc", "ndef", "nhij" }, ListOfNotValues = new [] { "jkl", "nnmo", "npqr" }, LookupIsValid = true, LookupMultipleRecords = true, MaxLength = 10, MaxValue = 20, MinLength = 30, MinValue = 40, PatternMatch = "pattern", RegexMatch = "regex", LookupColumnKey = lookupColumn.Key }; var saveResult = await database.SaveColumnValidation(dbConnection.HubKey, validation, CancellationToken.None); Assert.NotNull(saveResult); // lookup the validation and check savde was correctly. var validation2 = saveResult; var validation3 = await database.DbContext.DexihColumnValidations.SingleAsync(c => c.Key == validation2.Key && c.IsValid); Assert.Equal("new validation", validation3.Name); Assert.Equal(dbConnection.HubKey, validation3.HubKey); Assert.True(validation3.AllowDbNull); Assert.Equal(ECleanAction.DefaultValue, validation3.CleanAction); Assert.Equal(ETypeCode.String, validation3.DataType); Assert.Equal("default", validation3.CleanValue); Assert.Equal("validation description", validation3.Description); Assert.Equal(EInvalidAction.Clean, validation3.InvalidAction); Assert.Equal(new [] { "abc", "ndef", "nhij" }, validation3.ListOfValues); Assert.Equal(new [] { "jkl", "nnmo", "npqr" }, validation3.ListOfNotValues); Assert.True(validation3.LookupIsValid); Assert.True(validation3.LookupMultipleRecords); Assert.Equal(10, validation3.MaxLength); Assert.Equal(20, validation3.MaxValue); Assert.Equal(30, validation3.MinLength); Assert.Equal(40, validation3.MinValue); Assert.Equal("pattern", validation3.PatternMatch); Assert.Equal("regex", validation3.RegexMatch); Assert.Equal(lookupColumn.Key, validation3.LookupColumnKey); //test2: update the fileformat, and check update has succeeded. validation3.Name = "updated validation"; var saveResult2 = await database.SaveColumnValidation(dbConnection.HubKey, validation3, CancellationToken.None); Assert.NotNull(saveResult2); var validation4 = await database.DbContext.DexihColumnValidations.SingleAsync(c => c.Key == validation2.Key && c.IsValid); Assert.Equal("updated validation", validation4.Name); //test3: create a new table with the same name. save should fail var duplicate = new DexihColumnValidation() { Name = "updated validation", HubKey = dbConnection.HubKey, DataType = ETypeCode.String, }; Assert.Throws <AggregateException>(() => database.SaveColumnValidation(dbConnection.HubKey, duplicate, CancellationToken.None).Result); // test4: delete the fileformat. var deleteReturn = await database.DeleteColumnValidations(dbConnection.HubKey, new[] { validation3.Key }, CancellationToken.None); Assert.NotNull(deleteReturn); // check the fileformat is deleted var validation5 = await database.DbContext.DexihColumnValidations.SingleOrDefaultAsync(c => c.Key == validation3.Key && c.IsValid); Assert.Null(validation5); //test 5: create a new valiation with the same name as the deleted one. save should succeed var saveResult3 = await database.SaveColumnValidation(dbConnection.HubKey, duplicate, CancellationToken.None); Assert.NotNull(saveResult3); } }
public ColumnValidationRun(TransformSettings transformSettings, DexihColumnValidation columnValidation, DexihHub hub) { ColumnValidation = columnValidation; Hub = hub; _transformSettings = transformSettings; }