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"); } }
//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"); }