public void StandardListUpdateTest()
        {
            using (var temp = TempDirectory.Create())
            {
                var db = new GameDatabase(temp.TempPath);
                db.OpenDatabase();
                var cats = new List <Category>
                {
                    new Category("Test1"),
                    new Category("Test2"),
                    new Category("Test3")
                };

                db.Categories.Add(cats);
                var vm = new DatabaseFieldsManagerViewModel(db, new Mock <IWindowFactory>().Object, null, null);
                vm.EditingCategories[0].Name = "Test4";
                vm.EditingCategories.Add(new Category("Test5"));
                vm.EditingCategories.Add(new Category("Test6"));
                vm.EditingCategories.RemoveAt(2);
                vm.SaveChanges();

                Assert.AreEqual(4, db.Categories.Count);
                Assert.AreEqual("Test4", db.Categories[cats[0].Id].Name);
                Assert.IsNotNull(db.Categories.First(a => a.Name == "Test2"));
                Assert.IsNotNull(db.Categories.First(a => a.Name == "Test5"));
                Assert.IsNotNull(db.Categories.First(a => a.Name == "Test6"));
            }
        }
        public void PlatformsUpdateTest()
        {
            using (var temp = TempDirectory.Create())
            {
                var db = new GameDatabase(temp.TempPath);
                db.OpenDatabase();
                db.Platforms.Remove(db.Platforms);

                var plats = new List <Platform>
                {
                    new Platform("Test1"),
                    new Platform("Test2"),
                    new Platform("Test3")
                };

                db.Platforms.Add(plats);
                var vm = new DatabaseFieldsManagerViewModel(db, new Mock <IWindowFactory>().Object, null, null);
                vm.EditingPlatforms[0].Name = "Test4";
                vm.EditingPlatforms.Add(new Platform("Test5"));
                vm.EditingPlatforms.Add(new Platform("Test6"));
                vm.EditingPlatforms.RemoveAt(2);
                vm.SaveChanges();

                Assert.AreEqual(4, db.Platforms.Count);
                Assert.AreEqual("Test4", db.Platforms[plats[0].Id].Name);
                Assert.IsNotNull(db.Platforms.First(a => a.Name == "Test2"));
                Assert.IsNotNull(db.Platforms.First(a => a.Name == "Test5"));
                Assert.IsNotNull(db.Platforms.First(a => a.Name == "Test6"));

                // TODO add file test
            }
        }
        public void RemoveUnsusedTest()
        {
            using (var temp = TempDirectory.Create())
                using (var db = new GameDatabase(temp.TempPath))
                {
                    db.OpenDatabase();
                    db.Platforms.Remove(db.Platforms);

                    var plats = new List <Platform>
                    {
                        new Platform("Test1"),
                        new Platform("Test2"),
                        new Platform("Test3")
                    };

                    var features = new List <GameFeature>
                    {
                        new GameFeature("Feature1"),
                        new GameFeature("Feature2"),
                        new GameFeature("Feature3"),
                        new GameFeature("Feature4")
                    };

                    var companies = new List <Company>
                    {
                        new Company("Comp1"),
                        new Company("Comp2"),
                        new Company("Comp3"),
                        new Company("Comp4"),
                        new Company("Comp5")
                    };

                    db.Features.Add(features);
                    db.Platforms.Add(plats);
                    db.Companies.Add(companies);
                    db.Games.Add(new Game("game1")
                    {
                        PlatformIds = new List <Guid> {
                            plats[1].Id
                        },
                        FeatureIds = new List <Guid> {
                            features[0].Id, features[3].Id
                        },
                        PublisherIds = new List <Guid> {
                            companies[3].Id
                        }
                    });

                    db.Games.Add(new Game("game2")
                    {
                        DeveloperIds = new List <Guid> {
                            companies[0].Id
                        },
                        PublisherIds = new List <Guid> {
                            companies[1].Id
                        }
                    });

                    db.Games.Add(new Game("game3"));

                    var detectedUnused = false;
                    var dialogs        = new Mock <IDialogsFactory>();
                    dialogs.Setup(a => a.ShowMessage(It.IsAny <string>(), It.IsAny <string>(), It.IsAny <MessageBoxButton>(), It.IsAny <MessageBoxImage>())).
                    Callback <string, string, MessageBoxButton, MessageBoxImage>((a, b, c, d) =>
                    {
                        detectedUnused = a.Contains("2");
                    }).Returns(MessageBoxResult.Yes);

                    var vm = new DatabaseFieldsManagerViewModel(db, new Mock <IWindowFactory>().Object, dialogs.Object, new TestResourceProvider());
                    vm.RemoveUnusedPlatformsCommand.Execute(null);
                    Assert.IsTrue(detectedUnused);

                    detectedUnused = false;
                    vm.RemoveUnusedFeaturesCommand.Execute(null);
                    Assert.IsTrue(detectedUnused);

                    detectedUnused = false;
                    vm.RemoveUnusedCompaniesCommand.Execute(null);
                    Assert.IsTrue(detectedUnused);

                    vm.RemoveUnusedSourcesCommand.Execute(null);
                    vm.SaveChanges();

                    Assert.AreEqual(1, db.Platforms.Count);
                    Assert.IsNotNull(db.Platforms[plats[1].Id]);

                    Assert.AreEqual(2, db.Features.Count);
                    Assert.IsNotNull(db.Features[features[0].Id]);
                    Assert.IsNotNull(db.Features[features[3].Id]);

                    Assert.AreEqual(3, db.Companies.Count);
                    Assert.IsNotNull(db.Companies[companies[0].Id]);
                    Assert.IsNotNull(db.Companies[companies[1].Id]);
                    Assert.IsNotNull(db.Companies[companies[3].Id]);
                }
        }