public void LoadSubfoldersTest() { const string topFolderName = "LoadSubfoldersTest"; const string subFolderName1 = "sub1"; const string subFolderName2 = "sub2"; IFolder topFolder = CreateNewTestFolder(topFolderName); IFolder sub1 = topFolder.CreateSubfolder(subFolderName1); IFolder sub2 = topFolder.CreateSubfolder(subFolderName2); Assert.AreEqual(2, topFolder.SubFolders.Count); Assert.IsNull(sub1.Properties.DisplayName, "Display name must be null after creation"); IRepository repoStandalone = GetStandaloneRepository(); IFolder sub1Alt = repoStandalone.RootFolder.GetDescendant(sub1.LogicalPath, false); const string newDisplayName1 = "newDisplayName1"; sub1Alt.Properties.DisplayName = newDisplayName1; // check that instances are preserved topFolder.LoadSubfolders(true, false, false); Assert.AreEqual(2, topFolder.SubFolders.Count); Assert.AreSame(sub1, topFolder.GetSubFolder(subFolderName1), "Existing folder instance not preserved"); Assert.AreSame(sub2, topFolder.GetSubFolder(subFolderName2), "Existing folder instance not preserved"); Assert.IsNull(sub1.Properties.DisplayName, "Contents refreshed "); // check that missing folder is purged sub1Alt.Delete(true, true); Assert.Throws(Is.InstanceOf <InvalidOperationException>(), () => sub1Alt.Delete(true, true)); topFolder.LoadSubfolders(true, false, false); Assert.AreEqual(1, topFolder.SubFolders.Count); Assert.AreSame(sub2, topFolder.GetSubFolder(subFolderName2), "Existing folder instance not preserved"); Assert.IsTrue(sub1.IsDetached, "Purged subfolder must be detached after reloading"); // check that subfolders are unloaded topFolder.UnloadSubfolders(); Assert.IsFalse(topFolder.SubfoldersLoaded); // now check that with reload OFF folders are reloaded topFolder.LoadSubfolders(reloadIfLoaded: false, recursive: false, refreshContent: false); Assert.AreEqual(1, topFolder.SubFolders.Count); // recreating previously deleted folder sub1 = topFolder.CreateSubfolder(subFolderName1); Assert.IsNull(sub1.Properties.DisplayName, "Display name must be null after creation"); // note that tis is required to make sure data folders are loaded to check refreshContent option later Assert.IsNull(sub1.GetDataFileIterator(false).Seek(DateTime.MinValue)); repoStandalone.RootFolder.UnloadSubfolders(); sub1Alt = repoStandalone.RootFolder.GetDescendant(sub1.LogicalPath, false); sub1Alt.Properties.Description = newDisplayName1; using (var writer = sub1Alt.GetWriter()) { writer.Write(TestDataItem.GetTestItem(2)); } topFolder.LoadSubfolders(reloadIfLoaded: false, recursive: false, refreshContent: false); Assert.IsNull(sub1.Properties.Description, "Did not ask for content refreshing"); Assert.IsNull(sub1.GetDataFileIterator(false).Seek(DateTime.MinValue)); topFolder.LoadSubfolders(reloadIfLoaded: true, recursive: false, refreshContent: true); Assert.AreEqual(newDisplayName1, sub1.Properties.Description, "Did ask for content to be refreshed"); Assert.IsNotNull(sub1.GetDataFileIterator(false).Seek(DateTime.MinValue)); }