diff --git a/src/Recyclarr.Tests/Command/Initialization/Init/InitializeAppDataPathTest.cs b/src/Recyclarr.Tests/Command/Initialization/Init/InitializeAppDataPathTest.cs index 9142513e..870a3c8e 100644 --- a/src/Recyclarr.Tests/Command/Initialization/Init/InitializeAppDataPathTest.cs +++ b/src/Recyclarr.Tests/Command/Initialization/Init/InitializeAppDataPathTest.cs @@ -1,5 +1,7 @@ +using System.IO.Abstractions.TestingHelpers; using AutoFixture.NUnit3; using Common; +using FluentAssertions; using NSubstitute; using NUnit.Framework; using Recyclarr.Command; @@ -17,6 +19,7 @@ public class InitializeAppDataPathTest public void Use_default_app_data_if_not_specified( [Frozen] IEnvironment env, [Frozen] IAppPaths paths, + [Frozen(Matching.ImplementedInterfaces)] MockFileSystem fs, SonarrCommand cmd, InitializeAppDataPath sut) { @@ -26,7 +29,7 @@ public class InitializeAppDataPathTest sut.Initialize(cmd); 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] @@ -39,4 +42,25 @@ public class InitializeAppDataPathTest sut.Initialize(cmd); 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); + } } diff --git a/src/Recyclarr/Command/Initialization/Init/InitializeAppDataPath.cs b/src/Recyclarr/Command/Initialization/Init/InitializeAppDataPath.cs index 7d1adc4a..83418c06 100644 --- a/src/Recyclarr/Command/Initialization/Init/InitializeAppDataPath.cs +++ b/src/Recyclarr/Command/Initialization/Init/InitializeAppDataPath.cs @@ -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 // created. - _paths.SetAppDataPath(_env.GetFolderPath(Environment.SpecialFolder.ApplicationData, - Environment.SpecialFolderOption.Create)); + var appData = _env.GetFolderPath( + 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. - _fs.Directory.CreateDirectory(cmd.AppDataDirectory); - _paths.SetAppDataPath(cmd.AppDataDirectory); + // Initialize other directories used throughout the application + _fs.Directory.CreateDirectory(_paths.RepoDirectory); + _fs.Directory.CreateDirectory(_paths.CacheDirectory); + _fs.Directory.CreateDirectory(_paths.LogDirectory); } }