refactor: Create app data subdirectories on startup

pull/76/head
Robert Dailey 3 years ago
parent a1f07c4ad0
commit 23c6871d41

@ -1,5 +1,7 @@
using System.IO.Abstractions.TestingHelpers;
using AutoFixture.NUnit3; using AutoFixture.NUnit3;
using Common; using Common;
using FluentAssertions;
using NSubstitute; using NSubstitute;
using NUnit.Framework; using NUnit.Framework;
using Recyclarr.Command; using Recyclarr.Command;
@ -17,6 +19,7 @@ public class InitializeAppDataPathTest
public void Use_default_app_data_if_not_specified( public void Use_default_app_data_if_not_specified(
[Frozen] IEnvironment env, [Frozen] IEnvironment env,
[Frozen] IAppPaths paths, [Frozen] IAppPaths paths,
[Frozen(Matching.ImplementedInterfaces)] MockFileSystem fs,
SonarrCommand cmd, SonarrCommand cmd,
InitializeAppDataPath sut) InitializeAppDataPath sut)
{ {
@ -26,7 +29,7 @@ public class InitializeAppDataPathTest
sut.Initialize(cmd); sut.Initialize(cmd);
env.Received().GetFolderPath(Environment.SpecialFolder.ApplicationData, Environment.SpecialFolderOption.Create); env.Received().GetFolderPath(Environment.SpecialFolder.ApplicationData, Environment.SpecialFolderOption.Create);
paths.Received().SetAppDataPath("app_data"); paths.Received().SetAppDataPath(fs.Path.Combine("app_data", "recyclarr"));
} }
[Test, AutoMockData] [Test, AutoMockData]
@ -39,4 +42,25 @@ public class InitializeAppDataPathTest
sut.Initialize(cmd); sut.Initialize(cmd);
paths.Received().SetAppDataPath("path"); paths.Received().SetAppDataPath("path");
} }
[Test, AutoMockData]
public void All_directories_are_created(
[Frozen] IEnvironment env,
[Frozen] IAppPaths paths,
[Frozen(Matching.ImplementedInterfaces)] MockFileSystem fs,
SonarrCommand cmd,
InitializeAppDataPath sut)
{
sut.Initialize(cmd);
var expectedDirs = new[]
{
paths.LogDirectory,
paths.RepoDirectory,
paths.CacheDirectory
};
fs.AllDirectories.Select(x => fs.Path.GetFileName(x))
.Should().IntersectWith(expectedDirs);
}
} }

@ -36,14 +36,22 @@ public class InitializeAppDataPath : IServiceInitializer
// Set app data path to application directory value (e.g. `$HOME/.config` on Linux) and ensure it is // Set app data path to application directory value (e.g. `$HOME/.config` on Linux) and ensure it is
// created. // created.
_paths.SetAppDataPath(_env.GetFolderPath(Environment.SpecialFolder.ApplicationData, var appData = _env.GetFolderPath(
Environment.SpecialFolderOption.Create)); Environment.SpecialFolder.ApplicationData,
Environment.SpecialFolderOption.Create);
return; _paths.SetAppDataPath(_fs.Path.Combine(appData, "recyclarr"));
}
else
{
// Ensure user-specified app data directory is created and use it.
_fs.Directory.CreateDirectory(cmd.AppDataDirectory);
_paths.SetAppDataPath(cmd.AppDataDirectory);
} }
// Ensure user-specified app data directory is created and use it. // Initialize other directories used throughout the application
_fs.Directory.CreateDirectory(cmd.AppDataDirectory); _fs.Directory.CreateDirectory(_paths.RepoDirectory);
_paths.SetAppDataPath(cmd.AppDataDirectory); _fs.Directory.CreateDirectory(_paths.CacheDirectory);
_fs.Directory.CreateDirectory(_paths.LogDirectory);
} }
} }

Loading…
Cancel
Save