示例#1
0
        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;
 }