Skip to content

Commit 33301b7

Browse files
authored
Merge pull request #65 from mapitman/64-when-ripsharp-starts-up-it-should-detect-that-its-prerequisites-are-not-installed
Check prerequisites on startup
2 parents fce11d7 + 480587c commit 33301b7

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

43 files changed

+262
-198
lines changed

src/RipSharp.Tests/Core/ConfigFileLocatorTests.cs

Lines changed: 1 addition & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,4 @@
1-
using System;
2-
using System.IO;
3-
4-
using AwesomeAssertions;
5-
6-
using Xunit;
7-
8-
namespace BugZapperLabs.RipSharp.Tests.Core;
1+
namespace RipSharp.Tests.Core;
92

103
public class ConfigFileLocatorTests
114
{
Lines changed: 131 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,131 @@
1+
namespace RipSharp.Tests.Core;
2+
3+
public class PrerequisiteCheckerTests
4+
{
5+
[Fact]
6+
public void GetMissingTools_WhenPathIsEmpty_ReturnsAllRequiredTools()
7+
{
8+
var missing = PrerequisiteChecker.GetMissingTools(null, isWindows: false, _ => false);
9+
10+
missing.Should().Contain(PrerequisiteChecker.RequiredTools);
11+
}
12+
13+
[Theory]
14+
[MemberData(nameof(NonWindowsAllPresentCases))]
15+
public void GetMissingTools_WhenNonWindowsPathsContainTools_ReturnsNoneMissing(string pathValue, string[] existingFiles)
16+
{
17+
var missing = PrerequisiteChecker.GetMissingTools(pathValue, isWindows: false, CreateSet(existingFiles).Contains);
18+
19+
missing.Should().BeEmpty();
20+
}
21+
22+
[Theory]
23+
[MemberData(nameof(NonWindowsMissingCases))]
24+
public void GetMissingTools_WhenNonWindowsMissingTool_ReturnsMissingTool(string pathValue, string[] existingFiles, string expectedMissing)
25+
{
26+
var missing = PrerequisiteChecker.GetMissingTools(pathValue, isWindows: false, CreateSet(existingFiles).Contains);
27+
28+
missing.Should().ContainSingle().Which.Should().Be(expectedMissing);
29+
}
30+
31+
[Theory]
32+
[MemberData(nameof(WindowsAllPresentCases))]
33+
public void GetMissingTools_WhenWindowsPathsContainExecutableExtensions_ReturnsNoneMissing(string pathValue, string[] existingFiles)
34+
{
35+
var missing = PrerequisiteChecker.GetMissingTools(pathValue, isWindows: true, CreateSet(existingFiles).Contains);
36+
37+
missing.Should().BeEmpty();
38+
}
39+
40+
[Theory]
41+
[MemberData(nameof(WindowsMissingCases))]
42+
public void GetMissingTools_WhenWindowsMissingTool_ReturnsMissingTool(string pathValue, string[] existingFiles, string expectedMissing)
43+
{
44+
var missing = PrerequisiteChecker.GetMissingTools(pathValue, isWindows: true, CreateSet(existingFiles).Contains);
45+
46+
missing.Should().ContainSingle().Which.Should().Be(expectedMissing);
47+
}
48+
49+
public static IEnumerable<object[]> NonWindowsAllPresentCases()
50+
{
51+
yield return new object[]
52+
{
53+
BuildPath("/usr/local/bin", "/usr/bin"),
54+
new[] { Path.Combine("/usr/bin", "makemkvcon"), Path.Combine("/usr/local/bin", "ffmpeg") }
55+
};
56+
57+
yield return new object[]
58+
{
59+
BuildPath("/usr/bin", "/opt/bin"),
60+
new[] { Path.Combine("/usr/bin", "makemkvcon"), Path.Combine("/opt/bin", "ffmpeg") }
61+
};
62+
63+
yield return new object[]
64+
{
65+
BuildPath("/opt/homebrew/bin", "/usr/local/bin"),
66+
new[] { Path.Combine("/opt/homebrew/bin", "ffmpeg"), Path.Combine("/usr/local/bin", "makemkvcon") }
67+
};
68+
}
69+
70+
public static IEnumerable<object[]> NonWindowsMissingCases()
71+
{
72+
yield return new object[]
73+
{
74+
BuildPath("/usr/bin", "/opt/bin"),
75+
new[] { Path.Combine("/opt/bin", "ffmpeg") },
76+
"makemkvcon"
77+
};
78+
79+
yield return new object[]
80+
{
81+
BuildPath("/usr/bin", "/opt/bin"),
82+
new[] { Path.Combine("/usr/bin", "makemkvcon") },
83+
"ffmpeg"
84+
};
85+
86+
yield return new object[]
87+
{
88+
BuildPath("/opt/homebrew/bin", "/usr/local/bin"),
89+
new[] { Path.Combine("/opt/homebrew/bin", "ffmpeg") },
90+
"makemkvcon"
91+
};
92+
}
93+
94+
public static IEnumerable<object[]> WindowsAllPresentCases()
95+
{
96+
var baseDir = Path.Combine("C_Tools");
97+
yield return new object[]
98+
{
99+
BuildPath(baseDir),
100+
new[] { Path.Combine(baseDir, "makemkvcon.exe"), Path.Combine(baseDir, "ffmpeg.cmd") }
101+
};
102+
}
103+
104+
public static IEnumerable<object[]> WindowsMissingCases()
105+
{
106+
var baseDir = Path.Combine("C_Tools");
107+
yield return new object[]
108+
{
109+
BuildPath(baseDir),
110+
new[] { Path.Combine(baseDir, "makemkvcon.exe") },
111+
"ffmpeg"
112+
};
113+
114+
yield return new object[]
115+
{
116+
BuildPath(baseDir),
117+
new[] { Path.Combine(baseDir, "ffmpeg.exe") },
118+
"makemkvcon"
119+
};
120+
}
121+
122+
private static string BuildPath(params string[] parts)
123+
{
124+
return string.Join(Path.PathSeparator, parts);
125+
}
126+
127+
private static HashSet<string> CreateSet(IEnumerable<string> paths)
128+
{
129+
return new HashSet<string>(paths, StringComparer.OrdinalIgnoreCase);
130+
}
131+
}

src/RipSharp.Tests/Core/RipOptionsTests.cs

Lines changed: 1 addition & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,4 @@
1-
using System;
2-
using System.IO;
3-
4-
using AwesomeAssertions;
5-
6-
using BugZapperLabs.RipSharp;
7-
8-
using Xunit;
9-
10-
namespace BugZapperLabs.RipSharp.Tests.Core;
1+
namespace RipSharp.Tests.Core;
112

123
public class RipOptionsTests
134
{

src/RipSharp.Tests/GlobalUsings.cs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,3 +8,7 @@
88
global using BugZapperLabs.RipSharp.Models;
99
global using BugZapperLabs.RipSharp.Services;
1010
global using BugZapperLabs.RipSharp.Utilities;
11+
12+
global using NSubstitute;
13+
14+
global using Xunit;

src/RipSharp.Tests/MakeMkv/MakeMkvProtocolTests.cs

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,4 @@
1-
using AwesomeAssertions;
2-
3-
using Xunit;
4-
5-
namespace BugZapperLabs.RipSharp.Tests.MakeMkv;
1+
namespace RipSharp.Tests.MakeMkv;
62

73
public class MakeMkvProtocolTests
84
{

src/RipSharp.Tests/Metadata/MetadataServiceTests.cs

Lines changed: 1 addition & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,4 @@
1-
using System;
2-
using System.Collections.Generic;
3-
using System.Threading.Tasks;
4-
5-
using AwesomeAssertions;
6-
7-
using NSubstitute;
8-
9-
using Xunit;
10-
11-
namespace BugZapperLabs.RipSharp.Tests.Metadata;
1+
namespace RipSharp.Tests.Metadata;
122

133
public class MetadataServiceTests : IDisposable
144
{

src/RipSharp.Tests/Metadata/OmdbMetadataProviderTests.cs

Lines changed: 1 addition & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,6 @@
1-
using System;
21
using System.Net;
3-
using System.Net.Http;
4-
using System.Threading;
5-
using System.Threading.Tasks;
62

7-
using AwesomeAssertions;
8-
9-
using NSubstitute;
10-
11-
using Xunit;
12-
13-
namespace BugZapperLabs.RipSharp.Tests.Metadata;
3+
namespace RipSharp.Tests.Metadata;
144

155
public class OmdbMetadataProviderTests
166
{

src/RipSharp.Tests/Metadata/TitleVariationGeneratorEdgeCasesTests.cs

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,4 @@
1-
using System.Collections.Generic;
2-
3-
using Xunit;
4-
5-
namespace BugZapperLabs.RipSharp.Tests.Metadata;
1+
namespace RipSharp.Tests.Metadata;
62

73
public class TitleVariationGeneratorEdgeCasesTests
84
{

src/RipSharp.Tests/Metadata/TitleVariationGeneratorTests.cs

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,4 @@
1-
using System.Collections.Generic;
2-
3-
using Xunit;
4-
5-
namespace BugZapperLabs.RipSharp.Tests.Metadata;
1+
namespace RipSharp.Tests.Metadata;
62

73
public class TitleVariationGeneratorTests
84
{

src/RipSharp.Tests/Metadata/TmdbMetadataProviderTests.cs

Lines changed: 1 addition & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,6 @@
1-
using System;
21
using System.Net;
3-
using System.Net.Http;
4-
using System.Threading;
5-
using System.Threading.Tasks;
62

7-
using AwesomeAssertions;
8-
9-
using NSubstitute;
10-
11-
using Xunit;
12-
13-
namespace BugZapperLabs.RipSharp.Tests.Metadata;
3+
namespace RipSharp.Tests.Metadata;
144

155
public class TmdbMetadataProviderTests
166
{

0 commit comments

Comments
 (0)