| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778 |
- using RackPeek.Domain.Git;
- using RackPeek.Domain.Git.UseCases;
- namespace Tests.Git;
- public sealed class AddRemoteUseCaseTests : IDisposable {
- private readonly string _tempDir;
- private readonly IGitRepository _repo;
- private readonly AddRemoteUseCase _useCase;
- public AddRemoteUseCaseTests() {
- _tempDir = Path.Combine(
- Path.GetTempPath(),
- "rackpeek-add-remote-tests",
- Guid.NewGuid().ToString());
- Directory.CreateDirectory(_tempDir);
- _repo = new LibGit2GitRepository(
- _tempDir,
- new TokenCredentialsProvider("test", "test-token"));
- _useCase = new AddRemoteUseCase(_repo);
- }
- public void Dispose() {
- try {
- if (Directory.Exists(_tempDir))
- Directory.Delete(_tempDir, true);
- }
- catch {
- // ignore cleanup issues
- }
- }
- [Theory]
- [InlineData("https://github.com/youruser/rackpeek-config.git")]
- [InlineData("https://gitea.example.com/youruser/rackpeek-config.git")]
- [InlineData("https://gitlab.example.com/youruser/rackpeek-config.git")]
- public async Task Accepts_Documented_HTTPS_Examples(string url) {
- // The doc lists these three URL shapes as supported. Use case must
- // not reject them as malformed — a fetch failure (no real remote) is
- // acceptable but "Only HTTPS URLs are supported" is not.
- var error = await _useCase.ExecuteAsync(url);
- Assert.DoesNotContain("Only HTTPS URLs are supported", error ?? string.Empty);
- Assert.DoesNotContain("Git is not available", error ?? string.Empty);
- }
- [Theory]
- [InlineData("http://github.com/u/r.git")]
- [InlineData("ssh://git@github.com/u/r.git")]
- [InlineData("git@github.com:u/r.git")]
- [InlineData("file:///tmp/repo")]
- public async Task Rejects_Non_HTTPS_URLs(string url) {
- // Doc: "RackPeek does not use any host-specific APIs; the integration
- // is plain git over HTTPS." Only HTTPS is supported on purpose — SSH
- // would need a different credentials flow we don't offer.
- var error = await _useCase.ExecuteAsync(url);
- Assert.Equal("Only HTTPS URLs are supported.", error);
- }
- [Fact]
- public async Task Rejects_Empty_URL() {
- var error = await _useCase.ExecuteAsync(" ");
- Assert.Equal("URL is required.", error);
- }
- [Fact]
- public async Task Rejects_When_Remote_Already_Configured() {
- await _useCase.ExecuteAsync("https://example.com/first.git");
- var error = await _useCase.ExecuteAsync("https://example.com/second.git");
- Assert.Equal("Remote already configured.", error);
- }
- }
|