feat: Add GitRepoRegistration cmdlets (#5)
- adds GitRepoRegistration cmdlets - adds basic tests for GitRepoRegistration implementations - adds initial build project and scripts Refs: #5, #6
This commit is contained in:
parent
3547e32b6e
commit
5c09b7c5a8
66 changed files with 1619 additions and 142 deletions
150
tests/ModuleTests/Git/AddRegistrationTests.cs
Normal file
150
tests/ModuleTests/Git/AddRegistrationTests.cs
Normal file
|
|
@ -0,0 +1,150 @@
|
|||
using System.Text;
|
||||
using ModuleCore.Git;
|
||||
using ModuleTests.Git.TestData;
|
||||
|
||||
namespace ModuleTests.Git;
|
||||
|
||||
// TODO: [#12] GitRepoRegistration tests should reset database at start of each test
|
||||
public class AddRegistrationTests
|
||||
{
|
||||
private static readonly VerifySettings Settings;
|
||||
|
||||
static AddRegistrationTests()
|
||||
{
|
||||
Settings = new VerifySettings();
|
||||
var testBaseDirectory = Path.Join(TestConstants.SnapshotFolderName, nameof(AddRegistrationTests));
|
||||
|
||||
Settings.UseDirectory(testBaseDirectory);
|
||||
Settings.DisableDiff();
|
||||
}
|
||||
|
||||
[Theory]
|
||||
[ClassData(typeof(AddRegistrationTestData))]
|
||||
public Task BasicRepoRegistration((int testId, string path) testData)
|
||||
{
|
||||
Settings.UseFileName($"{nameof(BasicRepoRegistration)}_{testData.testId}");
|
||||
var gitManager = GitRepoRegistrationManager.InternalFreshInstance(nameof(BasicRepoRegistration));
|
||||
|
||||
try
|
||||
{
|
||||
var repoRegistration = gitManager.RegisterRepo("Test:/some/test/repo", testData.path);
|
||||
var sb = new StringBuilder();
|
||||
sb.AppendLine($"Attempted to register: {testData.path}")
|
||||
.AppendLine($"Registration result: {repoRegistration}");
|
||||
|
||||
return Verify(sb, Settings);
|
||||
}
|
||||
finally
|
||||
{
|
||||
gitManager.DeleteDatabase();
|
||||
}
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void RepoRegistrationWithEmptyName()
|
||||
{
|
||||
Settings.UseFileName(nameof(RepoRegistrationWithEmptyName));
|
||||
var gitManager = GitRepoRegistrationManager.InternalFreshInstance(nameof(RepoRegistrationWithEmptyName));
|
||||
var testRepoAbsolutePath = "Test:/some/test/repo";
|
||||
|
||||
try
|
||||
{
|
||||
var emptyName = gitManager.RegisterRepo(testRepoAbsolutePath, "");
|
||||
|
||||
Assert.Equal("repo", emptyName);
|
||||
}
|
||||
finally
|
||||
{
|
||||
gitManager.DeleteDatabase();
|
||||
}
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void RepoRegistrationWithNullName()
|
||||
{
|
||||
Settings.UseFileName(nameof(RepoRegistrationWithNullName));
|
||||
var gitManager = GitRepoRegistrationManager.InternalFreshInstance(nameof(RepoRegistrationWithNullName));
|
||||
var testRepoAbsolutePath = "Test:/some/test/repo";
|
||||
try
|
||||
{
|
||||
// Name is technically not-nullable, but string is a reference type so null can be passed in so we should test
|
||||
// it regardless
|
||||
var nullName = gitManager.RegisterRepo(testRepoAbsolutePath, null!);
|
||||
|
||||
Assert.Equal("repo", nullName);
|
||||
}
|
||||
finally
|
||||
{
|
||||
gitManager.DeleteDatabase();
|
||||
}
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void RepoRegistrationWithWhitespaceName()
|
||||
{
|
||||
Settings.UseFileName(nameof(RepoRegistrationWithWhitespaceName));
|
||||
|
||||
var gitManager = GitRepoRegistrationManager.InternalFreshInstance(nameof(RepoRegistrationWithWhitespaceName));
|
||||
var testRepoAbsolutePath = "Test:/some/test/repo";
|
||||
try
|
||||
{
|
||||
var whitespaceName = gitManager.RegisterRepo(testRepoAbsolutePath, " ");
|
||||
|
||||
Assert.Equal("repo", whitespaceName);
|
||||
}
|
||||
finally
|
||||
{
|
||||
gitManager.DeleteDatabase();
|
||||
}
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void DuplicateRepoRegistrationShouldFail()
|
||||
{
|
||||
Settings.UseFileName(nameof(RepoRegistrationWithWhitespaceName));
|
||||
var gitManager = GitRepoRegistrationManager.InternalFreshInstance(nameof(RepoRegistrationWithWhitespaceName));
|
||||
var testRepoAbsolutePath = "Test:/some/test/repo";
|
||||
string[] paths = ["test", "nested", "path"];
|
||||
var names = (NormalSeparator: string.Join(Path.DirectorySeparatorChar, paths), AltSeparator: string.Join(Path.AltDirectorySeparatorChar, paths));
|
||||
|
||||
try
|
||||
{
|
||||
var firstRegistration = gitManager.RegisterRepo(testRepoAbsolutePath, names.NormalSeparator);
|
||||
var secondRegistration = gitManager.RegisterRepo(testRepoAbsolutePath, Path.Combine(paths[..1]));
|
||||
|
||||
Assert.Equal(Path.Combine(paths), firstRegistration);
|
||||
Assert.Equal(Path.Combine(paths[..1]), secondRegistration);
|
||||
|
||||
Assert.Throws<Exception>(() => gitManager.RegisterRepo(testRepoAbsolutePath, Path.Combine(paths[..1])));
|
||||
}
|
||||
finally
|
||||
{
|
||||
gitManager.DeleteDatabase();
|
||||
}
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void DuplicateRepoRegistrationDifferentSlashShouldNotFail()
|
||||
{
|
||||
Settings.UseFileName(nameof(RepoRegistrationWithWhitespaceName));
|
||||
var gitManager = GitRepoRegistrationManager.InternalFreshInstance(nameof(RepoRegistrationWithWhitespaceName));
|
||||
var testRepoAbsolutePath = "Test:/some/test/repo";
|
||||
string[] paths = ["test", "nested", "path"];
|
||||
var names = (NormalSeparator: string.Join(Path.DirectorySeparatorChar, paths), AltSeparator: string.Join(Path.AltDirectorySeparatorChar, paths));
|
||||
|
||||
try
|
||||
{
|
||||
var firstRegistration = gitManager.RegisterRepo(testRepoAbsolutePath, names.NormalSeparator);
|
||||
var secondRegistration = gitManager.RegisterRepo(testRepoAbsolutePath, Path.Combine(paths[..1]));
|
||||
var differentPathSeparatorRegistration = gitManager.RegisterRepo(testRepoAbsolutePath, names.AltSeparator);
|
||||
|
||||
Assert.Equal(Path.Combine(paths), firstRegistration);
|
||||
Assert.Equal(Path.Combine(paths[..1]), secondRegistration);
|
||||
Assert.Equal(names.AltSeparator, differentPathSeparatorRegistration);
|
||||
}
|
||||
finally
|
||||
{
|
||||
gitManager.DeleteDatabase();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,2 @@
|
|||
Attempted to register: test
|
||||
Registration result: test
|
||||
|
|
@ -0,0 +1,2 @@
|
|||
Attempted to register: test\path
|
||||
Registration result: test\path
|
||||
|
|
@ -0,0 +1,2 @@
|
|||
Attempted to register: other/path
|
||||
Registration result: other/path
|
||||
18
tests/ModuleTests/Git/TestData/AddRegistrationTestData.cs
Normal file
18
tests/ModuleTests/Git/TestData/AddRegistrationTestData.cs
Normal file
|
|
@ -0,0 +1,18 @@
|
|||
using System.Linq;
|
||||
|
||||
namespace ModuleTests.Git.TestData;
|
||||
|
||||
public class AddRegistrationTestData : TestDataEnumerator<(int testId, string path)>
|
||||
{
|
||||
public AddRegistrationTestData()
|
||||
{
|
||||
Data = new List<string>()
|
||||
{
|
||||
"test",
|
||||
$"test{Path.DirectorySeparatorChar}path",
|
||||
$"other{Path.AltDirectorySeparatorChar}path"
|
||||
}
|
||||
.Select((x, i) => (i, x))
|
||||
.ToList();
|
||||
}
|
||||
}
|
||||
Loading…
Reference in a new issue