From b4ce84740a90593d5387ee8b72eececbf51c026a Mon Sep 17 00:00:00 2001 From: Lars Brubaker Date: Tue, 30 Jun 2015 18:49:20 -0700 Subject: [PATCH] Locator is not required. More tests passing. --- PrintLibrary/PrintLibraryWidget.cs | 2 +- PrintLibrary/Provider/LibraryProvider.cs | 2 +- .../Provider/LibraryProviderFileSystem.cs | 16 +- .../Provider/LibraryProviderSelector.cs | 7 +- .../Provider/LibraryProviderSqlite.cs | 14 +- .../MatterControl/LibraryProviderTests.cs | 162 ++++++++++++++---- 6 files changed, 149 insertions(+), 54 deletions(-) diff --git a/PrintLibrary/PrintLibraryWidget.cs b/PrintLibrary/PrintLibraryWidget.cs index 32faa0fc3..e77375d98 100644 --- a/PrintLibrary/PrintLibraryWidget.cs +++ b/PrintLibrary/PrintLibraryWidget.cs @@ -464,7 +464,7 @@ namespace MatterHackers.MatterControl.PrintLibrary public override void OnDragDrop(FileDropEventArgs fileDropEventArgs) { - LibraryDataView.CurrentLibraryProvider.AddFilesToLibrary(fileDropEventArgs.DroppedFiles, LibraryDataView.CurrentLibraryProvider.GetProviderLocator()); + LibraryDataView.CurrentLibraryProvider.AddFilesToLibrary(fileDropEventArgs.DroppedFiles); base.OnDragDrop(fileDropEventArgs); } diff --git a/PrintLibrary/Provider/LibraryProvider.cs b/PrintLibrary/Provider/LibraryProvider.cs index 57b757607..fa5bec44c 100644 --- a/PrintLibrary/Provider/LibraryProvider.cs +++ b/PrintLibrary/Provider/LibraryProvider.cs @@ -98,7 +98,7 @@ namespace MatterHackers.MatterControl.PrintLibrary.Provider public abstract void AddCollectionToLibrary(string collectionName); - public abstract void AddFilesToLibrary(IList files, List providerSavePath, ReportProgressRatio reportProgress = null, RunWorkerCompletedEventHandler callback = null); + public abstract void AddFilesToLibrary(IList files, ReportProgressRatio reportProgress = null, RunWorkerCompletedEventHandler callback = null); public abstract void AddItem(PrintItemWrapper itemToAdd); diff --git a/PrintLibrary/Provider/LibraryProviderFileSystem.cs b/PrintLibrary/Provider/LibraryProviderFileSystem.cs index 796f3360a..70bd0c2e8 100644 --- a/PrintLibrary/Provider/LibraryProviderFileSystem.cs +++ b/PrintLibrary/Provider/LibraryProviderFileSystem.cs @@ -136,23 +136,15 @@ namespace MatterHackers.MatterControl.PrintLibrary.Provider } } - public override void AddFilesToLibrary(IList files, List providerLocator, ReportProgressRatio reportProgress = null, RunWorkerCompletedEventHandler callback = null) + public override void AddFilesToLibrary(IList files, ReportProgressRatio reportProgress = null, RunWorkerCompletedEventHandler callback = null) { - if (providerLocator == null || providerLocator.Count <= 1) - { - string destPath = rootPath; + string destPath = rootPath; - CopyAllFiles(files, destPath); - } - else // we have a path that we need to save to - { - string destPath = GetPathFromLocator(providerLocator); - - CopyAllFiles(files, destPath); - } + CopyAllFiles(files, destPath); GetFilesAndCollectionsInCurrentDirectory(); LibraryProvider.OnDataReloaded(null); + LibraryProvider.OnItemAdded(null); } public override void AddItem(PrintItemWrapper itemToAdd) diff --git a/PrintLibrary/Provider/LibraryProviderSelector.cs b/PrintLibrary/Provider/LibraryProviderSelector.cs index af3f132e0..614664865 100644 --- a/PrintLibrary/Provider/LibraryProviderSelector.cs +++ b/PrintLibrary/Provider/LibraryProviderSelector.cs @@ -143,12 +143,9 @@ namespace MatterHackers.MatterControl.PrintLibrary.Provider throw new NotImplementedException(); } - public override void AddFilesToLibrary(IList files, List providerSavePath, ReportProgressRatio reportProgress = null, RunWorkerCompletedEventHandler callback = null) + public override void AddFilesToLibrary(IList files, ReportProgressRatio reportProgress = null, RunWorkerCompletedEventHandler callback = null) { - List subProviderSavePath; - int libraryProviderToUseIndex = GetProviderIndex(providerSavePath, out subProviderSavePath); - - libraryProviders[libraryProviderToUseIndex].AddFilesToLibrary(files, subProviderSavePath, reportProgress, callback); + throw new NotImplementedException(); } public override void AddItem(PrintItemWrapper itemToAdd) diff --git a/PrintLibrary/Provider/LibraryProviderSqlite.cs b/PrintLibrary/Provider/LibraryProviderSqlite.cs index b62c548f2..84771e574 100644 --- a/PrintLibrary/Provider/LibraryProviderSqlite.cs +++ b/PrintLibrary/Provider/LibraryProviderSqlite.cs @@ -234,10 +234,9 @@ namespace MatterHackers.MatterControl.PrintLibrary.Provider newCollection.ParentCollectionID = baseLibraryCollection.Id; newCollection.Commit(); LoadLibraryItems(); - LibraryProvider.OnDataReloaded(null); } - public override void AddFilesToLibrary(IList files, List providerSavePath = null, ReportProgressRatio reportProgress = null, RunWorkerCompletedEventHandler callback = null) + public override void AddFilesToLibrary(IList files, ReportProgressRatio reportProgress = null, RunWorkerCompletedEventHandler callback = null) { if (files != null && files.Count > 0) { @@ -254,6 +253,12 @@ namespace MatterHackers.MatterControl.PrintLibrary.Provider loadFilesIntoLibraryBackgroundWorker.RunWorkerAsync(files); } + + if (baseLibraryCollection != null) + { + LoadLibraryItems(); + LibraryProvider.OnDataReloaded(null); + } } public override void AddItem(PrintItemWrapper itemToAdd) @@ -279,7 +284,7 @@ namespace MatterHackers.MatterControl.PrintLibrary.Provider printItems.Insert(indexToInsert, item); // Check if the collection we are adding to is the the currently visible collection. List currentDisplayedCollection = GetProviderLocator(); - if (currentDisplayedCollection.Count > 0 && currentDisplayedCollection[1].Key == LibraryProviderSQLite.StaticProviderKey) + if (currentDisplayedCollection.Count > 0 && currentDisplayedCollection[0].Key == LibraryProviderSQLite.StaticProviderKey) { OnItemAdded(new IndexArgs(indexToInsert)); } @@ -328,6 +333,8 @@ namespace MatterHackers.MatterControl.PrintLibrary.Provider { childCollections.AddRange(collections); } + + LibraryProvider.OnDataReloaded(null); } public override void RemoveCollection(PrintItemCollection collectionToRemove) @@ -351,6 +358,7 @@ namespace MatterHackers.MatterControl.PrintLibrary.Provider // and remove it from the data base printItemWrapper.Delete(); + LoadLibraryItems(); OnItemRemoved(new IndexArgs(index)); } diff --git a/Tests/MatterControl.Tests/MatterControl/LibraryProviderTests.cs b/Tests/MatterControl.Tests/MatterControl/LibraryProviderTests.cs index f5375e9ad..2af1a99f5 100644 --- a/Tests/MatterControl.Tests/MatterControl/LibraryProviderTests.cs +++ b/Tests/MatterControl.Tests/MatterControl/LibraryProviderTests.cs @@ -40,6 +40,7 @@ using MatterHackers.MatterControl.PrintQueue; using MatterHackers.MatterControl.DataStorage; using System.IO; using MatterHackers.Agg.PlatformAbstract; +using System.Threading; namespace MatterControl.Tests { @@ -47,7 +48,8 @@ namespace MatterControl.Tests public class LibraryProviderTests { string pathToMesh = Path.Combine("..", "..", "..", "TestData", "TestMeshes", "LibraryProviderData"); - string meshFileName; + string meshFileName = "Box20x20x10.stl"; + string meshPathAndFileName; bool dataReloaded = false; bool itemAdded = false; @@ -65,7 +67,7 @@ namespace MatterControl.Tests [SetUp] public void SetupBeforeTest() { - meshFileName = Path.Combine(pathToMesh, "Box20x20x10.stl"); + meshPathAndFileName = Path.Combine(pathToMesh, meshFileName); dataReloaded = false; itemAdded = false; @@ -85,14 +87,15 @@ namespace MatterControl.Tests [Test, Category("LibraryProviderFileSystem")] public void LibraryProviderFileSystem_NavigationWorking() { + Datastore.Instance.Initialize(); + Thread.Sleep(3000); // wait for the library to finish initializing + LibraryProviderFileSystem testProvider = new LibraryProviderFileSystem(pathToMesh, "TestPath", null); Assert.IsTrue(testProvider.CollectionCount == 0, "Start with a new database for these tests."); Assert.IsTrue(testProvider.ItemCount == 1, "Start with a new database for these tests."); - PrintItemWrapper itemAtRoot = testProvider.GetPrintItemWrapper(0); - List providerLocator = itemAtRoot.PrintItem.GetLibraryProviderLocator(); - Assert.IsTrue(providerLocator.Count == 1); // create a collection and make sure it is on disk + dataReloaded = false; // it has been loaded for the default set of parts string collectionName = "Collection1"; string createdDirectory = Path.Combine(pathToMesh, collectionName); Assert.IsTrue(!Directory.Exists(createdDirectory)); @@ -102,42 +105,137 @@ namespace MatterControl.Tests Assert.IsTrue(dataReloaded == true); Assert.IsTrue(Directory.Exists(createdDirectory)); - dataReloaded = false; - // make sure removing it gets rid of it - Assert.IsTrue(dataReloaded == false); - testProvider.RemoveCollection(testProvider.GetCollectionItem(0)); - Assert.IsTrue(dataReloaded == true); - Assert.IsTrue(!Directory.Exists(createdDirectory)); - - // test GetProviderForItem - } - - [Test, Category("LibraryProviderSqlite")] - public void LibraryProviderSqlite_NavigationWorking() - { - LibraryProviderSQLite testProvider = new LibraryProviderSQLite(null, null); - Assert.IsTrue(testProvider.CollectionCount == 0, "Start with a new database for these tests."); - Assert.IsTrue(testProvider.ItemCount == 1, "Start with a new database for these tests."); PrintItemWrapper itemAtRoot = testProvider.GetPrintItemWrapper(0); List providerLocator = itemAtRoot.PrintItem.GetLibraryProviderLocator(); Assert.IsTrue(providerLocator.Count == 1); - // create a collection and make sure it is on disk - string collectionName = "Collection1"; - //Assert.IsTrue(); // assert that the record does not exist in the DB - Assert.IsTrue(dataReloaded == false); - testProvider.AddCollectionToLibrary(collectionName); - Assert.IsTrue(testProvider.CollectionCount == 1); - Assert.IsTrue(dataReloaded == true); - // Assert.IsTrue(); // assert that the record does exist in the DB - + // add an item works correctly + LibraryProvider subProvider = testProvider.GetProviderForItem(testProvider.GetCollectionItem(0)); + dataReloaded = false; + itemAdded = false; + string subPathAndFile = Path.Combine(createdDirectory, meshFileName); + Assert.IsTrue(!File.Exists(subPathAndFile)); + Assert.IsTrue(dataReloaded == false); + Assert.IsTrue(itemAdded == false); + + // WIP: saving the name incorectly for this location (does not need to be changed). + subProvider.AddFilesToLibrary(new string[] { meshPathAndFileName }); + Thread.Sleep(3000); // wait for the add to finihs + + Assert.IsTrue(subProvider.ItemCount == 1); + Assert.IsTrue(dataReloaded == true); + Assert.IsTrue(itemAdded == true); + Assert.IsTrue(File.Exists(subPathAndFile)); + + // make sure the provider locator is correct + + // remove item works + dataReloaded = false; + Assert.IsTrue(dataReloaded == false); + Assert.IsTrue(itemRemoved == false); + subProvider.RemoveItem(subProvider.GetPrintItemWrapper(0)); + Assert.IsTrue(dataReloaded == true); + Assert.IsTrue(itemRemoved == true); + Assert.IsTrue(!File.Exists(subPathAndFile)); + + // remove collection gets rid of it dataReloaded = false; - // make sure removing it gets rid of it Assert.IsTrue(dataReloaded == false); testProvider.RemoveCollection(testProvider.GetCollectionItem(0)); Assert.IsTrue(dataReloaded == true); Assert.IsTrue(testProvider.CollectionCount == 0); - //Assert.IsTrue(); // assert that the record does not exist in the DB + Assert.IsTrue(!Directory.Exists(createdDirectory)); + } + + private bool NamedCollectionExists(string nameToLookFor) + { + string query = string.Format("SELECT * FROM PrintItemCollection WHERE Name = '{0}' ORDER BY Name ASC;", nameToLookFor); + IEnumerable result = (IEnumerable)Datastore.Instance.dbSQLite.Query(query); + foreach (PrintItemCollection collection in result) + { + if (collection.Name == nameToLookFor) + { + return true; + } + } + + return false; + } + + private bool NamedItemExists(string nameToLookFor) + { + string query = string.Format("SELECT * FROM PrintItem WHERE Name = '{0}' ORDER BY Name ASC;", nameToLookFor); + IEnumerable result = (IEnumerable)Datastore.Instance.dbSQLite.Query(query); + foreach (PrintItem collection in result) + { + if (collection.Name == nameToLookFor) + { + return true; + } + } + + return false; + } + + + [Test, Category("LibraryProviderSqlite")] + public void LibraryProviderSqlite_NavigationWorking() + { + Datastore.Instance.Initialize(); + LibraryProviderSQLite testProvider = new LibraryProviderSQLite(null, null); + Thread.Sleep(3000); // wait for the library to finish initializing + Assert.IsTrue(testProvider.CollectionCount == 0, "Start with a new database for these tests."); + Assert.IsTrue(testProvider.ItemCount == 1, "Start with a new database for these tests."); + + // create a collection and make sure it is on disk + dataReloaded = false; // it has been loaded for the default set of parts + string collectionName = "Collection1"; + Assert.IsTrue(!NamedCollectionExists(collectionName)); // assert that the record does not exist in the DB + Assert.IsTrue(dataReloaded == false); + testProvider.AddCollectionToLibrary(collectionName); + Assert.IsTrue(testProvider.CollectionCount == 1); + Assert.IsTrue(dataReloaded == true); + Assert.IsTrue(NamedCollectionExists(collectionName)); // assert that the record does exist in the DB + + PrintItemWrapper itemAtRoot = testProvider.GetPrintItemWrapper(0); + List providerLocator = itemAtRoot.PrintItem.GetLibraryProviderLocator(); + Assert.IsTrue(providerLocator.Count == 1); + + // add an item works correctly + dataReloaded = false; + itemAdded = false; + Assert.IsTrue(!NamedItemExists(collectionName)); + Assert.IsTrue(dataReloaded == false); + Assert.IsTrue(itemAdded == false); + + testProvider.AddFilesToLibrary(new string[] { meshPathAndFileName }); + Thread.Sleep(3000); // wait for the add to finihs + + Assert.IsTrue(testProvider.ItemCount == 2); + Assert.IsTrue(dataReloaded == true); + Assert.IsTrue(itemAdded == true); + string fileNameWithExtension = Path.GetFileNameWithoutExtension(meshPathAndFileName); + Assert.IsTrue(NamedItemExists(fileNameWithExtension)); + + // make sure the provider locator is correct + + // remove item works + dataReloaded = false; + Assert.IsTrue(dataReloaded == false); + Assert.IsTrue(itemRemoved == false); + testProvider.RemoveItem(testProvider.GetPrintItemWrapper(1)); + Assert.IsTrue(dataReloaded == true); + Assert.IsTrue(itemRemoved == true); + Assert.IsTrue(!NamedItemExists(fileNameWithExtension)); + + // remove collection gets rid of it + dataReloaded = false; + Assert.IsTrue(dataReloaded == false); + testProvider.RemoveCollection(testProvider.GetCollectionItem(0)); + Assert.IsTrue(dataReloaded == true); + Assert.IsTrue(testProvider.CollectionCount == 0); + Assert.IsTrue(!NamedCollectionExists(collectionName)); // assert that the record does not exist in the DB + } } }