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
|
|
@ -1,4 +1,4 @@
|
|||
using ModuleCore.Calendar;
|
||||
using ModuleCore.Calendar;
|
||||
using ModuleTests.Calendar.TestData;
|
||||
using System.Globalization;
|
||||
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
using System.Text;
|
||||
using System.Text;
|
||||
using ModuleCore.Calendar;
|
||||
|
||||
namespace ModuleTests.Calendar;
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
┌─────────────────────────────────────────┐
|
||||
┌─────────────────────────────────────────┐
|
||||
│ June 2026 │
|
||||
├─────┬─────┬─────┬─────┬─────┬─────┬─────┤
|
||||
│ Mon │ Tue │ Wed │ Thu │ Fri │ Sat │ Sun │
|
||||
|
|
@ -1,4 +1,4 @@
|
|||
┌─────────────────────────────────────────┐
|
||||
┌─────────────────────────────────────────┐
|
||||
│ July 2026 │
|
||||
├─────┬─────┬─────┬─────┬─────┬─────┬─────┤
|
||||
│ Mon │ Tue │ Wed │ Thu │ Fri │ Sat │ Sun │
|
||||
|
|
@ -1,4 +1,4 @@
|
|||
┌─────────────────────────────────────────┐
|
||||
┌─────────────────────────────────────────┐
|
||||
│ August 2026 │
|
||||
├─────┬─────┬─────┬─────┬─────┬─────┬─────┤
|
||||
│ Mon │ Tue │ Wed │ Thu │ Fri │ Sat │ Sun │
|
||||
|
|
@ -1,4 +1,4 @@
|
|||
┌──────────────────────────────────┐
|
||||
┌──────────────────────────────────┐
|
||||
│ srpen 2026 │
|
||||
├────┬────┬────┬────┬────┬────┬────┤
|
||||
│ po │ út │ st │ čt │ pá │ so │ ne │
|
||||
|
|
@ -1,4 +1,4 @@
|
|||
┌─────────────────────────────────────────┐
|
||||
┌─────────────────────────────────────────┐
|
||||
│ august 2026 │
|
||||
├─────┬─────┬─────┬─────┬─────┬─────┬─────┤
|
||||
│ man │ tir │ ons │ tor │ fre │ lør │ søn │
|
||||
|
|
@ -1,4 +1,4 @@
|
|||
┌─────────────────────────────────────────┐
|
||||
┌─────────────────────────────────────────┐
|
||||
│ August 2026 │
|
||||
├─────┬─────┬─────┬─────┬─────┬─────┬─────┤
|
||||
│ Mon │ Tue │ Wed │ Thu │ Fri │ Sat │ Sun │
|
||||
|
|
@ -1,4 +1,4 @@
|
|||
┌────────────────────────────────────────────────┐
|
||||
┌────────────────────────────────────────────────┐
|
||||
│ agosto 2026 │
|
||||
├──────┬──────┬──────┬──────┬──────┬──────┬──────┤
|
||||
│ lun. │ mar. │ mié. │ jue. │ vie. │ sáb. │ dom. │
|
||||
|
|
@ -1,4 +1,4 @@
|
|||
┌────────────────────────────────────────────────┐
|
||||
┌────────────────────────────────────────────────┐
|
||||
│ août 2026 │
|
||||
├──────┬──────┬──────┬──────┬──────┬──────┬──────┤
|
||||
│ lun. │ mar. │ mer. │ jeu. │ ven. │ sam. │ dim. │
|
||||
|
|
@ -1,4 +1,4 @@
|
|||
┌──────────────────────────────────┐
|
||||
┌──────────────────────────────────┐
|
||||
│ augustus 2026 │
|
||||
├────┬────┬────┬────┬────┬────┬────┤
|
||||
│ ma │ di │ wo │ do │ vr │ za │ zo │
|
||||
|
|
@ -1,4 +1,4 @@
|
|||
┌───────────────────────────────────────────────────────┐
|
||||
┌───────────────────────────────────────────────────────┐
|
||||
│ ఆగస్టు 2026 │
|
||||
├───────┬───────┬───────┬───────┬───────┬───────┬───────┤
|
||||
│ సోమ │ మంగళ │ బుధ │ గురు │ శుక్ర │ శని │ ఆది │
|
||||
|
|
@ -1,4 +1,4 @@
|
|||
┌─────────────────────────────────────────┐
|
||||
┌─────────────────────────────────────────┐
|
||||
│ August 2026 │
|
||||
├─────┬─────┬─────┬─────┬─────┬─────┬─────┤
|
||||
│ Mon │ Tue │ Wed │ Thu │ Fri │ Sat │ Sun │
|
||||
|
|
@ -1,4 +1,4 @@
|
|||
Double-wide characters will display incorrectly but still tested until rendering can be improved
|
||||
Double-wide characters will display incorrectly but still tested until rendering can be improved
|
||||
┌─────────────────────────────────────────┐
|
||||
│ August 2026 │
|
||||
├─────┬─────┬─────┬─────┬─────┬─────┬─────┤
|
||||
|
|
@ -1,4 +1,4 @@
|
|||
Emojis will display incorrectly in text but output correctly in terminals with UTF-8 encoding.
|
||||
Emojis will display incorrectly in text but output correctly in terminals with UTF-8 encoding.
|
||||
┌─────────────────────────────────────────┐
|
||||
│ August 2026 │
|
||||
├─────┬─────┬─────┬─────┬─────┬─────┬─────┤
|
||||
|
|
@ -1,4 +1,4 @@
|
|||
┌──────────────────────────────────────────────────────────────┐
|
||||
┌──────────────────────────────────────────────────────────────┐
|
||||
│ August 2026 │
|
||||
├────────┬────────┬────────┬────────┬────────┬────────┬────────┤
|
||||
│ Mon │ Tue │ Wed │ Thu │ Fri │ Sat │ Sun │
|
||||
|
|
@ -1,4 +1,4 @@
|
|||
┌─────────────────────────────────────────┐
|
||||
┌─────────────────────────────────────────┐
|
||||
│ August 2026 │
|
||||
├─────┬─────┬─────┬─────┬─────┬─────┬─────┤
|
||||
│ Mon │ Tue │ Wed │ Thu │ Fri │ Sat │ Sun │
|
||||
|
|
@ -1,4 +1,4 @@
|
|||
Start Day: Sunday
|
||||
Start Day: Sunday
|
||||
┌─────────────────────────────────────────┐
|
||||
│ August 2026 │
|
||||
├─────┬─────┬─────┬─────┬─────┬─────┬─────┤
|
||||
|
|
@ -1,4 +1,4 @@
|
|||
using System.Text;
|
||||
using System.Text;
|
||||
using ModuleCore.Calendar;
|
||||
|
||||
namespace ModuleTests.Calendar;
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
namespace ModuleTests.Calendar.TestData;
|
||||
namespace ModuleTests.Calendar.TestData;
|
||||
|
||||
public class CalendarTestDates : TestDataEnumerator<DateTime>
|
||||
{
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
namespace ModuleTests.Calendar.TestData;
|
||||
namespace ModuleTests.Calendar.TestData;
|
||||
|
||||
public class CultureCodeTestData : TestDataEnumerator<string>
|
||||
{
|
||||
|
|
|
|||
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();
|
||||
}
|
||||
}
|
||||
|
|
@ -1,4 +1,4 @@
|
|||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
|
||||
<PropertyGroup>
|
||||
<TargetFramework>net10.0</TargetFramework>
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
namespace ModuleTests;
|
||||
namespace ModuleTests;
|
||||
|
||||
public class TestConstants
|
||||
{
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
using System.Collections;
|
||||
using System.Collections;
|
||||
|
||||
namespace ModuleTests;
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue