Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 7 additions & 0 deletions src/BloomExe/web/controllers/PageTemplatesApi.cs
Original file line number Diff line number Diff line change
Expand Up @@ -139,6 +139,13 @@ IEnumerable<string> collections
return collections
.Distinct() //seems to be needed in case a shortcut points to a folder that's already in the list.
.SelectMany(ProjectContext.SafeGetDirectories) // get all the (book) folders in those collections
// A folder can go away between being listed above and being looked at below --
Comment thread
JohnThomson marked this conversation as resolved.
// a sync client (Dropbox etc.), an antivirus tool, or the user can delete one
// while we are part way through a collection. FindBookHtmlInFolder throws for a
// folder that does not exist (that check is there for the save path, where a
// missing book folder really is the user's problem), and one such folder would
// otherwise abort the whole scan. Skipping it is all we want here. (BL-16661)
.Where(Directory.Exists)
.Select(BookStorage.FindBookHtmlInFolder); // and get the book from each
}

Expand Down
24 changes: 14 additions & 10 deletions src/BloomTests/Spreadsheet/SpreadsheetAudioImportTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ public class SpreadsheetAudioImportTests
{
private HtmlDom _dom;

private TemporaryFolder _testFolder;
private TemporaryFolder _bookFolder;
private TemporaryFolder _otherAudioFolder;
private ProgressSpy _progressSpy;
Expand All @@ -36,13 +37,14 @@ public async Task OneTimeSetUp()
var testAudioPath = SIL.IO.FileLocationUtilities.GetDirectoryDistributedWithApplication(
"src/BloomTests/Spreadsheet/testAudio/"
);
_bookFolder = new TemporaryFolder("SpreadsheetAudioImportTests");
_spreadsheetFolder = new TemporaryFolder("SpreadsheetAudioImportDest");
_testFolder = SpreadsheetTestFolders.MakeFolderFor(this);
_bookFolder = new TemporaryFolder(_testFolder, "Book");
_spreadsheetFolder = new TemporaryFolder(_testFolder, "Dest");
var spreadsheetAudioPath = Path.Combine(_spreadsheetFolder.FolderPath, "audio");
Directory.CreateDirectory(spreadsheetAudioPath);
// A place to put audio that is not in the spreadsheet folder so we can test absolute path import.
// Also gives us more choices of non-conflicting audio files.
_otherAudioFolder = new TemporaryFolder("other audio folder");
_otherAudioFolder = new TemporaryFolder(_testFolder, "other audio folder");
var audioFilePaths = Directory.EnumerateFiles(testAudioPath).ToArray();
foreach (var audioFilePath in audioFilePaths)
{
Expand Down Expand Up @@ -360,8 +362,8 @@ public async Task OneTimeSetUp()
[OneTimeTearDown]
public void OneTimeTearDown()
{
_bookFolder?.Dispose();
_otherAudioFolder.Dispose();
// This also removes the folders nested inside it.
_testFolder?.Dispose();
}

[TestCase(0, "i9c7f4e02-4685-48fc-8653-71d88f218706", "div")]
Expand Down Expand Up @@ -810,6 +812,7 @@ class SpreadsheetAudioImportModifyTests
{
private HtmlDom _dom;

private TemporaryFolder _testFolder;
private TemporaryFolder _bookFolder;
private TemporaryFolder _otherAudioFolder;
private ProgressSpy _progressSpy;
Expand Down Expand Up @@ -864,13 +867,14 @@ public async Task OneTimeSetUp()
var testAudioPath = SIL.IO.FileLocationUtilities.GetDirectoryDistributedWithApplication(
"src/BloomTests/Spreadsheet/testAudio/"
);
_bookFolder = new TemporaryFolder("SpreadsheetAudioImportModifyTests");
_spreadsheetFolder = new TemporaryFolder("SpreadsheetAudioImportModifyDest");
_testFolder = SpreadsheetTestFolders.MakeFolderFor(this);
_bookFolder = new TemporaryFolder(_testFolder, "Book");
_spreadsheetFolder = new TemporaryFolder(_testFolder, "Dest");
var spreadsheetAudioPath = Path.Combine(_spreadsheetFolder.FolderPath, "audio");
Directory.CreateDirectory(spreadsheetAudioPath);
// A place to put audio that is not in the spreadsheet folder so we can test absolute path import.
// Also gives us more choices of non-conflicting audio files.
_otherAudioFolder = new TemporaryFolder("other audio folder");
_otherAudioFolder = new TemporaryFolder(_testFolder, "other audio folder");
var audioFilePaths = Directory.EnumerateFiles(testAudioPath).ToArray();
foreach (var audioFilePath in audioFilePaths)
{
Expand Down Expand Up @@ -1072,8 +1076,8 @@ public async Task OneTimeSetUp()
[OneTimeTearDown]
public void OneTimeTearDown()
{
_bookFolder?.Dispose();
_otherAudioFolder.Dispose();
// This also removes the folders nested inside it.
_testFolder?.Dispose();
}

[TestCase(4)]
Expand Down
12 changes: 8 additions & 4 deletions src/BloomTests/Spreadsheet/SpreadsheetAudioTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@ public class SpreadsheetAudioTestsBase
protected IEnumerable<SpreadsheetRow> AllRows;
protected List<ContentRow> PageContentRows;
protected SpreadsheetExporter _exporter;
protected TemporaryFolder _testFolder;
protected TemporaryFolder _spreadsheetFolder;
protected TemporaryFolder _bookFolder;
protected ProgressSpy _progressSpy;
Expand Down Expand Up @@ -126,8 +127,11 @@ protected void Setup(string pagesContent, string titleOverride = null)
StartOfFile.Replace("{0}", title) + pagesContent + EndOfFile,
true
);
_spreadsheetFolder = new TemporaryFolder("SpreadsheetImagesTests");
_bookFolder = new TemporaryFolder("SpreadsheetImagesTests_Book");
// Named after the actual (subclass) fixture, so that the several fixtures sharing
// this base class each get folders of their own.
_testFolder = SpreadsheetTestFolders.MakeFolderFor(this);
_spreadsheetFolder = new TemporaryFolder(_testFolder, "Spreadsheet");
_bookFolder = new TemporaryFolder(_testFolder, "Book");
var mockLangDisplayNameResolver = new Mock<ILanguageDisplayNameResolver>();
mockLangDisplayNameResolver
.Setup(x => x.GetLanguageDisplayName("en"))
Expand Down Expand Up @@ -169,8 +173,8 @@ protected void Setup(string pagesContent, string titleOverride = null)

protected void TearDown()
{
_spreadsheetFolder?.Dispose();
_bookFolder?.Dispose();
// This also removes the folders nested inside it.
_testFolder?.Dispose();
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -233,6 +233,7 @@ Quiz Page
private List<ContentRow> _rows;
private List<ContentRow> _pageContentRows;

private TemporaryFolder _testFolder;
private TemporaryFolder _spreadsheetFolder;
private TemporaryFolder _bookFolder;
private ProgressSpy _progressSpy;
Expand All @@ -242,8 +243,9 @@ public void OneTimeSetUp()
{
var dom = new HtmlDom(videoAndWidgetBook, true);

_spreadsheetFolder = new TemporaryFolder("SpreadsheetVideoWidgetsTests");
_bookFolder = new TemporaryFolder("SpreadsheetVideoWidgetsTests_Book");
_testFolder = SpreadsheetTestFolders.MakeFolderFor(this);
_spreadsheetFolder = new TemporaryFolder(_testFolder, "Spreadsheet");
_bookFolder = new TemporaryFolder(_testFolder, "Book");

var mockLangDisplayNameResolver = new Mock<ILanguageDisplayNameResolver>();
mockLangDisplayNameResolver
Expand Down Expand Up @@ -292,8 +294,8 @@ public void OneTimeSetUp()
[OneTimeTearDown]
public void OneTimeTearDown()
{
_spreadsheetFolder?.Dispose();
_bookFolder?.Dispose();
// This also removes the folders nested inside it.
_testFolder?.Dispose();
}

[Test]
Expand Down
20 changes: 14 additions & 6 deletions src/BloomTests/Spreadsheet/SpreadsheetExporterTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -73,6 +73,7 @@ public class SpreadsheetExporterTests
private List<ContentRow> _rows;
private List<ContentRow> _pageContentRows;

private TemporaryFolder _testFolder;
private TemporaryFolder _spreadsheetFolder;
private TemporaryFolder _bookFolder;
private ProgressSpy _progressSpy;
Expand All @@ -82,8 +83,9 @@ public void OneTimeSetUp()
{
var dom = new HtmlDom(bookHtml, true);

_spreadsheetFolder = new TemporaryFolder("SpreadsheetExporterTests");
_bookFolder = new TemporaryFolder("SpreadsheetExporterTests_Book");
_testFolder = SpreadsheetTestFolders.MakeFolderFor(this);
_spreadsheetFolder = new TemporaryFolder(_testFolder, "Spreadsheet");
_bookFolder = new TemporaryFolder(_testFolder, "Book");

var mockLangDisplayNameResolver = new Mock<ILanguageDisplayNameResolver>();
mockLangDisplayNameResolver
Expand Down Expand Up @@ -119,8 +121,8 @@ public void OneTimeSetUp()
[OneTimeTearDown]
public void OneTimeTearDown()
{
_spreadsheetFolder?.Dispose();
_bookFolder?.Dispose();
// This also removes the folders nested inside it.
_testFolder?.Dispose();
}

[Test]
Expand Down Expand Up @@ -276,9 +278,15 @@ private static string ExportSingleEnglishContentCellText(string editableInnerXml
.Returns("English");
var exporter = new SpreadsheetExporter(mockLangDisplayNameResolver.Object);

using (var bookFolder = new TemporaryFolder("SpreadsheetExporterTests_NormBook"))
using (var sheetFolder = new TemporaryFolder("SpreadsheetExporterTests_NormSheet"))
// This method is static, so it can't use the fixture's own folder.
using (
var testFolder = SpreadsheetTestFolders.MakeFolderNamed(
"SpreadsheetExporterTests_Norm"
)
)
{
var bookFolder = new TemporaryFolder(testFolder, "Book");
var sheetFolder = new TemporaryFolder(testFolder, "Sheet");
var sheet = exporter.ExportToFolder(
dom,
bookFolder.FolderPath,
Expand Down
18 changes: 10 additions & 8 deletions src/BloomTests/Spreadsheet/SpreadsheetImagesTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -218,6 +218,7 @@ Image on Bottom
private List<ContentRow> _rowsFromExport;
private InternalSpreadsheet _sheetFromFile;
private List<ContentRow> _rowsFromFile;
private TemporaryFolder _testFolder;
private TemporaryFolder _spreadsheetFolder;
private TemporaryFolder _bookFolder;
private ProgressSpy _progressSpy;
Expand All @@ -227,8 +228,9 @@ public void OneTimeSetUp()
{
var dom = new HtmlDom(imageBook, true);

_spreadsheetFolder = new TemporaryFolder("SpreadsheetImagesTests");
_bookFolder = new TemporaryFolder("SpreadsheetImagesTests_Book");
_testFolder = SpreadsheetTestFolders.MakeFolderFor(this);
_spreadsheetFolder = new TemporaryFolder(_testFolder, "Spreadsheet");
_bookFolder = new TemporaryFolder(_testFolder, "Book");

var mockLangDisplayNameResolver = new Mock<ILanguageDisplayNameResolver>();
mockLangDisplayNameResolver
Expand Down Expand Up @@ -274,8 +276,8 @@ var name in new[]
[OneTimeTearDown]
public void OneTimeTearDown()
{
_spreadsheetFolder?.Dispose();
_bookFolder?.Dispose();
// This also removes the folders nested inside it.
_testFolder?.Dispose();
}

void SetupFor(string source)
Expand Down Expand Up @@ -558,8 +560,8 @@ public void displayThumbnail_svg_svgErrorMessage(string source)
[Test]
public void Export_ImagesWithConflictingNames_AllEmbeddedWithoutError()
{
using (var bookFolder = new TemporaryFolder("SpreadsheetImageConflict_Book"))
using (var outputFolder = new TemporaryFolder("SpreadsheetImageConflict_Out"))
using (var bookFolder = new TemporaryFolder(_testFolder, "ImageConflict_Book"))
using (var outputFolder = new TemporaryFolder(_testFolder, "ImageConflict_Out"))
{
// Copy one known-good image to three names that collide once the extension is dropped.
var sourceImage = Path.Combine(
Expand Down Expand Up @@ -693,8 +695,8 @@ var row in sheetFromFile.ContentRows.Where(r =>
[Test]
public void Export_SmallImage_RowNotSizedFromOversizedTarget()
{
using (var bookFolder = new TemporaryFolder("SmallImageRowHeight_Book"))
using (var outputFolder = new TemporaryFolder("SmallImageRowHeight_Out"))
using (var bookFolder = new TemporaryFolder(_testFolder, "SmallImageRowHeight_Book"))
using (var outputFolder = new TemporaryFolder(_testFolder, "SmallImageRowHeight_Out"))
{
var sourceImage = Path.Combine(
SIL.IO.FileLocationUtilities.GetDirectoryDistributedWithApplication(
Expand Down
Loading