public async Task RegisterAsyncNewTest()
        {
            //arrange 
            var dbConnection = new UnitTestDbConnection();
            Database.SetInitializer(new CreateFreshDbInitializer());
            var ssb = new SceneSettingBuilder(dbConnection);

            var sceneSetting = new SceneSetting
            {
                Name = "Unit Test Scene Setting",
                UniqueIdentifier = "SCENE_SETTING1"
            };

            //act
            var result = await ssb.RegisterAsync(sceneSetting, CancellationToken.None);

            SceneSetting setting;
            using (var context = new ZvsContext(dbConnection))
            {
                setting =
                    await
                        context.SceneSettings.FirstOrDefaultAsync(
                            o => o.UniqueIdentifier == sceneSetting.UniqueIdentifier);

            }

            //assert 
            Console.WriteLine(result.Message);
            Assert.IsFalse(result.HasError, result.Message);
            Assert.IsNotNull(setting, "Expected new scene setting saved to DB");
        }
        public async Task<Result> RegisterAsync(SceneSetting sceneSetting, CancellationToken cancellationToken)
        {
            if (sceneSetting == null)
                return Result.ReportError("sceneSetting is null");

            using (var context = new ZvsContext(EntityContextConnection))
            {
                var existingSetting = await context.SceneSettings
                    .Include(o => o.Options)
                    .FirstOrDefaultAsync(s => s.UniqueIdentifier == sceneSetting.UniqueIdentifier, cancellationToken);

                var changed = false;
                if (existingSetting == null)
                {
                    context.SceneSettings.Add(sceneSetting);
                    changed = true;
                }
                else
                {
                    //Update
                    PropertyChangedEventHandler handler = (s, a) => changed = true;
                    existingSetting.PropertyChanged += handler;

                    existingSetting.Name = sceneSetting.Name;
                    existingSetting.Description = sceneSetting.Description;
                    existingSetting.ValueType = sceneSetting.ValueType;
                    existingSetting.Value = sceneSetting.Value;

                    existingSetting.PropertyChanged -= handler;

                    var added = sceneSetting.Options.Where(option => existingSetting.Options.All(o => o.Name != option.Name)).ToList();
                    foreach (var option in added)
                    {
                        existingSetting.Options.Add(option);
                        changed = true;
                    }

                    var removed = existingSetting.Options.Where(option => sceneSetting.Options.All(o => o.Name != option.Name)).ToList();
                    foreach (var option in removed)
                    {
                        context.SceneSettingOptions.Local.Remove(option);
                        changed = true;
                    }
                }

                if (changed)
                    return await context.TrySaveChangesAsync(cancellationToken);

                return Result.ReportSuccess("Nothing to update");
            }
        }
Esempio n. 3
0
        //TODO: MOve to extension method...
        public async static Task<string> GetPropertyValueAsync(ZvsContext Context, Scene scene, string scenePropertyUniqueIdentifier)
        {
            //Find the property
            SceneSetting property = await Context.SceneSettings.FirstOrDefaultAsync(p => p.UniqueIdentifier == scenePropertyUniqueIdentifier);
            
            if (property == null)
                return string.Empty;

            Scene s2 = await Context.Scenes.Include(o=> o.SettingValues).FirstOrDefaultAsync(o => o.Id == scene.Id);

            if (s2 == null)
                return string.Empty;

            SceneSettingValue spv = s2.SettingValues.FirstOrDefault(o => o.SceneSetting == property);
                
            //Check to see if the property has been set yet, otherwise return the default value for this property.
            if (spv != null)
                return spv.Value;

            return property.Value; //default value
        }
        public async Task RegisterAsyncOptionRemoveTest()
        {
            //arrange 
            var dbConnection = new UnitTestDbConnection();
            Database.SetInitializer(new CreateFreshDbInitializer());
            var ssb = new SceneSettingBuilder(dbConnection);

            var sceneSetting = new SceneSetting
            {
                Name = "Unit Test Scene Setting",
                UniqueIdentifier = "SCENE_SETTING1",

            };

            var option1 = new SceneSettingOption
            {
                Name = "Option 1"
            };
            var option2 = new SceneSettingOption
            {
                Name = "Option 2"
            };
            sceneSetting.Options.Add(option1);
            sceneSetting.Options.Add(option2);

            using (var context = new ZvsContext(dbConnection))
            {
                context.SceneSettings.Add(sceneSetting);
                await context.SaveChangesAsync();
            }
            
            sceneSetting.Options.Remove(option2);

            //act
            var result = await ssb.RegisterAsync(sceneSetting, CancellationToken.None);

            SceneSetting setting;
            using (var context = new ZvsContext(dbConnection))
            {
                setting = await context.SceneSettings
                        .Include(o => o.Options)
                        .FirstOrDefaultAsync(o => o.UniqueIdentifier == sceneSetting.UniqueIdentifier);

            }

            //assert 
            Console.WriteLine(result.Message);
            Assert.IsFalse(result.HasError, result.Message);
            Assert.IsNotNull(setting, "Expected new scene setting saved to DB");
            Assert.IsTrue(setting.Options.Count == 1, "Expected 1 option!");
            Assert.IsTrue(setting.Options[0].Name == option1.Name);
        }
        public async Task RegisterAsyncUpdateTest()
        {
            //arrange 
            var dbConnection = new StubIEntityContextConnection { NameOrConnectionStringGet = () => "ssb-RegisterAsyncUpdateTest" };
            Database.SetInitializer(new CreateFreshDbInitializer());
            var ssb = new SceneSettingBuilder(dbConnection);

            var sceneSetting = new SceneSetting
            {
                Name = "Unit Test Scene Setting",
                UniqueIdentifier = "SCENE_SETTING1"
            };

            using (var context = new ZvsContext(dbConnection))
            {
                context.SceneSettings.Add(sceneSetting);
                await context.SaveChangesAsync();
            }

            sceneSetting.Name = "New Name";

            //act
            var result = await ssb.RegisterAsync(sceneSetting, CancellationToken.None);

            SceneSetting setting;
            using (var context = new ZvsContext(dbConnection))
            {
                setting =
                    await
                        context.SceneSettings.FirstOrDefaultAsync(
                            o => o.UniqueIdentifier == sceneSetting.UniqueIdentifier);

            }

            //assert 
            Console.WriteLine(result.Message);
            Assert.IsFalse(result.HasError, result.Message);
            Assert.IsNotNull(setting, "Expected new scene setting saved to DB");
            Assert.IsTrue(setting.Name == "New Name");
        }