- adds GitRepoRegistration cmdlets - adds basic tests for GitRepoRegistration implementations - adds initial build project and scripts Refs: #5, #6
150 lines
No EOL
4.7 KiB
C#
150 lines
No EOL
4.7 KiB
C#
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();
|
|
}
|
|
}
|
|
} |