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