The following migration steps were removed: - `MigrateTrashUpdaterAppDataDir` - `MigrateTrashYml`pull/201/head
parent
21a63ab8e1
commit
5609853321
@ -1,78 +0,0 @@
|
||||
using System.IO.Abstractions;
|
||||
using Recyclarr.Cli.Migration.Steps;
|
||||
using Recyclarr.TestLibrary.AutoFixture;
|
||||
using Recyclarr.TrashLib.TestLibrary;
|
||||
|
||||
namespace Recyclarr.Cli.Tests.Migration.Steps;
|
||||
|
||||
[TestFixture]
|
||||
[Parallelizable(ParallelScope.All)]
|
||||
public class MigrateTrashUpdaterAppDataDirTest
|
||||
{
|
||||
[Test, AutoMockData]
|
||||
public void Migration_check_returns_true_if_trash_updater_dir_exists(
|
||||
[Frozen(Matching.ImplementedInterfaces)] TestAppPaths paths,
|
||||
MigrateTrashUpdaterAppDataDir sut)
|
||||
{
|
||||
paths.AppDataDirectory.Parent.SubDirectory("trash-updater").Create();
|
||||
sut.CheckIfNeeded().Should().BeTrue();
|
||||
}
|
||||
|
||||
[Test, AutoMockData]
|
||||
public void Migration_check_returns_false_if_trash_updater_dir_doesnt_exists(
|
||||
MigrateTrashUpdaterAppDataDir sut)
|
||||
{
|
||||
sut.CheckIfNeeded().Should().BeFalse();
|
||||
}
|
||||
|
||||
[Test, AutoMockData]
|
||||
public void Migration_throws_if_recyclarr_yml_already_exists(
|
||||
[Frozen(Matching.ImplementedInterfaces)] MockFileSystem fs,
|
||||
[Frozen(Matching.ImplementedInterfaces)] TestAppPaths paths,
|
||||
MigrateTrashUpdaterAppDataDir sut)
|
||||
{
|
||||
fs.AddEmptyFile(sut.OldPath.File("recyclarr.yml"));
|
||||
fs.AddEmptyFile(sut.NewPath.File("recyclarr.yml"));
|
||||
|
||||
var act = () => sut.Execute(null);
|
||||
|
||||
act.Should().Throw<IOException>();
|
||||
}
|
||||
|
||||
[Test, AutoMockData]
|
||||
public void Migration_success(
|
||||
[Frozen(Matching.ImplementedInterfaces)] MockFileSystem fs,
|
||||
[Frozen(Matching.ImplementedInterfaces)] TestAppPaths paths,
|
||||
MigrateTrashUpdaterAppDataDir sut)
|
||||
{
|
||||
// Add file instead of directory since the migration step only operates on files
|
||||
var baseDir = sut.OldPath;
|
||||
fs.AddEmptyFile(baseDir.File("settings.yml"));
|
||||
fs.AddEmptyFile(baseDir.File("recyclarr.yml"));
|
||||
fs.AddEmptyFile(baseDir.File("this-gets-ignored.yml"));
|
||||
fs.AddDirectory(baseDir.SubDirectory("repo"));
|
||||
fs.AddDirectory(baseDir.SubDirectory("cache"));
|
||||
fs.AddEmptyFile(baseDir.File("cache/sonarr/test.txt"));
|
||||
|
||||
sut.Execute(null);
|
||||
|
||||
var expectedBase = sut.NewPath;
|
||||
|
||||
fs.AllDirectories.Should().NotContain(x => x.Contains("trash-updater"));
|
||||
fs.AllFiles.Should().BeEquivalentTo(
|
||||
expectedBase.File("settings.yml").FullName,
|
||||
expectedBase.File("recyclarr.yml").FullName,
|
||||
expectedBase.SubDirectory("cache").SubDirectory("sonarr").File("test.txt").FullName);
|
||||
}
|
||||
|
||||
[Test, AutoMockData]
|
||||
public void No_exception_if_source_files_do_not_exist(
|
||||
[Frozen(Matching.ImplementedInterfaces)] MockFileSystem fs,
|
||||
[Frozen(Matching.ImplementedInterfaces)] TestAppPaths paths,
|
||||
MigrateTrashUpdaterAppDataDir sut)
|
||||
{
|
||||
var act = () => sut.Execute(null);
|
||||
|
||||
act.Should().NotThrow();
|
||||
}
|
||||
}
|
@ -1,57 +0,0 @@
|
||||
using System.Text.RegularExpressions;
|
||||
using Recyclarr.Cli.Migration.Steps;
|
||||
using Recyclarr.TestLibrary.AutoFixture;
|
||||
|
||||
namespace Recyclarr.Cli.Tests.Migration.Steps;
|
||||
|
||||
[TestFixture]
|
||||
[Parallelizable(ParallelScope.All)]
|
||||
public partial class MigrateTrashYmlTest
|
||||
{
|
||||
private static readonly string BasePath = AppContext.BaseDirectory;
|
||||
|
||||
[Test, AutoMockData]
|
||||
public void Migration_check_returns_true_if_trash_yml_exists(
|
||||
[Frozen(Matching.ImplementedInterfaces)] MockFileSystem fs,
|
||||
MigrateTrashYml sut)
|
||||
{
|
||||
fs.AddFile(Path.Combine(BasePath, "trash.yml"), new MockFileData(""));
|
||||
sut.CheckIfNeeded().Should().BeTrue();
|
||||
}
|
||||
|
||||
[Test, AutoMockData]
|
||||
public void Migration_check_returns_false_if_trash_yml_doesnt_exists(
|
||||
[Frozen(Matching.ImplementedInterfaces)] MockFileSystem fs,
|
||||
MigrateTrashYml sut)
|
||||
{
|
||||
sut.CheckIfNeeded().Should().BeFalse();
|
||||
}
|
||||
|
||||
[Test, AutoMockData]
|
||||
public void Migration_throws_if_recyclarr_yml_already_exists(
|
||||
[Frozen(Matching.ImplementedInterfaces)] MockFileSystem fs,
|
||||
MigrateTrashYml sut)
|
||||
{
|
||||
fs.AddFile(Path.Combine(BasePath, "recyclarr.yml"), new MockFileData(""));
|
||||
|
||||
var act = () => sut.Execute(null);
|
||||
|
||||
act.Should().Throw<IOException>();
|
||||
}
|
||||
|
||||
[Test, AutoMockData]
|
||||
public void Migration_success(
|
||||
[Frozen(Matching.ImplementedInterfaces)] MockFileSystem fs,
|
||||
MigrateTrashYml sut)
|
||||
{
|
||||
const string expectedData = "fake contents";
|
||||
fs.AddFile(Path.Combine(BasePath, "trash.yml"), expectedData);
|
||||
|
||||
sut.Execute(null);
|
||||
|
||||
fs.AllFiles.Should().ContainSingle(x => RecyclarrYmlRegex().IsMatch(x));
|
||||
}
|
||||
|
||||
[GeneratedRegex("[/\\\\]recyclarr\\.yml$", RegexOptions.None, 1000)]
|
||||
private static partial Regex RecyclarrYmlRegex();
|
||||
}
|
@ -1,87 +0,0 @@
|
||||
using System.IO.Abstractions;
|
||||
using JetBrains.Annotations;
|
||||
using Recyclarr.Common.Extensions;
|
||||
using Recyclarr.TrashLib.Startup;
|
||||
using Spectre.Console;
|
||||
|
||||
namespace Recyclarr.Cli.Migration.Steps;
|
||||
|
||||
/// <remarks>
|
||||
/// Implemented on 4/30/2022.
|
||||
/// </remarks>
|
||||
[UsedImplicitly]
|
||||
public class MigrateTrashUpdaterAppDataDir : IMigrationStep
|
||||
{
|
||||
private readonly IFileSystem _fs;
|
||||
private readonly IAppPaths _paths;
|
||||
|
||||
public int Order => 20;
|
||||
public bool Required => true;
|
||||
|
||||
public string Description
|
||||
=> $"Merge files from old app data directory `{OldPath}` into `{NewPath}` and delete old directory";
|
||||
|
||||
public IReadOnlyCollection<string> Remediation => new[]
|
||||
{
|
||||
$"Check if `{NewPath}` already exists. If so, manually copy all files from `{OldPath}` and delete it to fix the error.",
|
||||
$"Ensure Recyclarr has permission to recursively delete {OldPath}",
|
||||
$"Ensure Recyclarr has permission to create and move files into {NewPath}"
|
||||
};
|
||||
|
||||
public MigrateTrashUpdaterAppDataDir(IFileSystem fs, IAppPaths paths)
|
||||
{
|
||||
_fs = fs;
|
||||
_paths = paths;
|
||||
}
|
||||
|
||||
public IDirectoryInfo NewPath
|
||||
{
|
||||
get
|
||||
{
|
||||
// Will be something like `/home/user/.config/recyclarr`.
|
||||
var path = _paths.AppDataDirectory;
|
||||
path.Refresh();
|
||||
return path;
|
||||
}
|
||||
}
|
||||
|
||||
public IDirectoryInfo OldPath => NewPath.Parent.SubDirectory("trash-updater");
|
||||
|
||||
public bool CheckIfNeeded()
|
||||
{
|
||||
return OldPath.Exists;
|
||||
}
|
||||
|
||||
public void Execute(IAnsiConsole? console)
|
||||
{
|
||||
MoveDirectory("cache", console);
|
||||
MoveFile("recyclarr.yml");
|
||||
MoveFile("settings.yml");
|
||||
|
||||
if (OldPath.Exists)
|
||||
{
|
||||
OldPath.Delete(true);
|
||||
}
|
||||
}
|
||||
|
||||
private void MoveDirectory(string directory, IAnsiConsole? console)
|
||||
{
|
||||
var oldPath = OldPath.SubDirectory(directory);
|
||||
if (oldPath.Exists)
|
||||
{
|
||||
_fs.MergeDirectory(
|
||||
oldPath,
|
||||
NewPath.SubDirectory(directory),
|
||||
console);
|
||||
}
|
||||
}
|
||||
|
||||
private void MoveFile(string file)
|
||||
{
|
||||
var recyclarrYaml = OldPath.File(file);
|
||||
if (recyclarrYaml.Exists)
|
||||
{
|
||||
recyclarrYaml.MoveTo(NewPath.File(file).FullName);
|
||||
}
|
||||
}
|
||||
}
|
@ -1,46 +0,0 @@
|
||||
using System.IO.Abstractions;
|
||||
using JetBrains.Annotations;
|
||||
using Spectre.Console;
|
||||
|
||||
namespace Recyclarr.Cli.Migration.Steps;
|
||||
|
||||
/// <remarks>
|
||||
/// Implemented on 4/30/2022.
|
||||
/// </remarks>
|
||||
[UsedImplicitly]
|
||||
public class MigrateTrashYml : IMigrationStep
|
||||
{
|
||||
private readonly IFileSystem _fileSystem;
|
||||
private readonly string _oldConfigPath = Path.Combine(AppContext.BaseDirectory, "trash.yml");
|
||||
|
||||
// Do not use AppPaths class here since that may change yet again in the future and break this migration step.
|
||||
private readonly string _newConfigPath = Path.Combine(AppContext.BaseDirectory, "recyclarr.yml");
|
||||
|
||||
public int Order => 10;
|
||||
public string Description { get; }
|
||||
public IReadOnlyCollection<string> Remediation { get; }
|
||||
public bool Required => true;
|
||||
|
||||
public MigrateTrashYml(IFileSystem fileSystem)
|
||||
{
|
||||
_fileSystem = fileSystem;
|
||||
Remediation = new[]
|
||||
{
|
||||
$"Check if `{_newConfigPath}` already exists. If so, manually copy the data you want and then delete `{_oldConfigPath}` to fix the error.",
|
||||
$"Ensure Recyclarr has permission to delete {_oldConfigPath}",
|
||||
$"Ensure Recyclarr has permission to create {_newConfigPath}"
|
||||
};
|
||||
|
||||
Description = $"Rename default YAML config from `{_oldConfigPath}` to `{_newConfigPath}`";
|
||||
}
|
||||
|
||||
public bool CheckIfNeeded()
|
||||
{
|
||||
return _fileSystem.File.Exists(_oldConfigPath);
|
||||
}
|
||||
|
||||
public void Execute(IAnsiConsole? console)
|
||||
{
|
||||
_fileSystem.File.Move(_oldConfigPath, _newConfigPath);
|
||||
}
|
||||
}
|
Loading…
Reference in new issue