Frontend gaps fill work. Testing fixes work. Auditing in progress.
This commit is contained in:
@@ -0,0 +1,276 @@
|
||||
// <copyright file="ScmEventMapperTests.cs" company="Stella Operations">
|
||||
// Copyright (c) Stella Operations. Licensed under AGPL-3.0-or-later.
|
||||
// </copyright>
|
||||
|
||||
using System.Text.Json;
|
||||
using StellaOps.Signals.Scm.Models;
|
||||
using StellaOps.Signals.Scm.Webhooks;
|
||||
using Xunit;
|
||||
|
||||
namespace StellaOps.Signals.Tests.Scm;
|
||||
|
||||
/// <summary>
|
||||
/// Unit tests for SCM event mappers.
|
||||
/// @sprint SPRINT_20251229_013_SIGNALS_scm_ci_connectors
|
||||
/// </summary>
|
||||
public sealed class ScmEventMapperTests
|
||||
{
|
||||
#region GitHub Event Mapper Tests
|
||||
|
||||
[Fact]
|
||||
public void GitHubMapper_PushEvent_MapsCorrectly()
|
||||
{
|
||||
// Arrange
|
||||
var mapper = new GitHubEventMapper();
|
||||
var payload = CreateGitHubPushPayload();
|
||||
|
||||
// Act
|
||||
var result = mapper.Map("push", "delivery-123", payload);
|
||||
|
||||
// Assert
|
||||
Assert.NotNull(result);
|
||||
Assert.Equal(ScmProvider.GitHub, result.Provider);
|
||||
Assert.Equal(ScmEventType.Push, result.EventType);
|
||||
Assert.Equal("delivery-123", result.EventId);
|
||||
Assert.Equal("refs/heads/main", result.Ref);
|
||||
Assert.NotNull(result.Repository);
|
||||
Assert.Equal("owner/repo", result.Repository.FullName);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void GitHubMapper_PullRequestMergedEvent_MapsCorrectly()
|
||||
{
|
||||
// Arrange
|
||||
var mapper = new GitHubEventMapper();
|
||||
var payload = CreateGitHubPrMergedPayload();
|
||||
|
||||
// Act
|
||||
var result = mapper.Map("pull_request", "delivery-456", payload);
|
||||
|
||||
// Assert
|
||||
Assert.NotNull(result);
|
||||
Assert.Equal(ScmProvider.GitHub, result.Provider);
|
||||
Assert.Equal(ScmEventType.PullRequestMerged, result.EventType);
|
||||
Assert.NotNull(result.PullRequest);
|
||||
Assert.Equal(42, result.PullRequest.Number);
|
||||
Assert.Equal("closed", result.PullRequest.State);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void GitHubMapper_ReleaseEvent_MapsCorrectly()
|
||||
{
|
||||
// Arrange
|
||||
var mapper = new GitHubEventMapper();
|
||||
var payload = CreateGitHubReleasePayload();
|
||||
|
||||
// Act
|
||||
var result = mapper.Map("release", "delivery-789", payload);
|
||||
|
||||
// Assert
|
||||
Assert.NotNull(result);
|
||||
Assert.Equal(ScmProvider.GitHub, result.Provider);
|
||||
Assert.Equal(ScmEventType.ReleasePublished, result.EventType);
|
||||
Assert.NotNull(result.Release);
|
||||
Assert.Equal("v1.0.0", result.Release.TagName);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void GitHubMapper_UnknownEvent_ReturnsUnknownType()
|
||||
{
|
||||
// Arrange
|
||||
var mapper = new GitHubEventMapper();
|
||||
var payload = JsonSerializer.SerializeToElement(new { });
|
||||
|
||||
// Act
|
||||
var result = mapper.Map("unknown_event", "delivery-000", payload);
|
||||
|
||||
// Assert
|
||||
Assert.NotNull(result);
|
||||
Assert.Equal(ScmEventType.Unknown, result.EventType);
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region GitLab Event Mapper Tests
|
||||
|
||||
[Fact]
|
||||
public void GitLabMapper_PushEvent_MapsCorrectly()
|
||||
{
|
||||
// Arrange
|
||||
var mapper = new GitLabEventMapper();
|
||||
var payload = CreateGitLabPushPayload();
|
||||
|
||||
// Act
|
||||
var result = mapper.Map("Push Hook", "delivery-123", payload);
|
||||
|
||||
// Assert
|
||||
Assert.NotNull(result);
|
||||
Assert.Equal(ScmProvider.GitLab, result.Provider);
|
||||
Assert.Equal(ScmEventType.Push, result.EventType);
|
||||
Assert.Equal("refs/heads/main", result.Ref);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void GitLabMapper_MergeRequestEvent_MapsCorrectly()
|
||||
{
|
||||
// Arrange
|
||||
var mapper = new GitLabEventMapper();
|
||||
var payload = CreateGitLabMrMergedPayload();
|
||||
|
||||
// Act
|
||||
var result = mapper.Map("Merge Request Hook", "delivery-456", payload);
|
||||
|
||||
// Assert
|
||||
Assert.NotNull(result);
|
||||
Assert.Equal(ScmProvider.GitLab, result.Provider);
|
||||
Assert.Equal(ScmEventType.PullRequestMerged, result.EventType);
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region Gitea Event Mapper Tests
|
||||
|
||||
[Fact]
|
||||
public void GiteaMapper_PushEvent_MapsCorrectly()
|
||||
{
|
||||
// Arrange
|
||||
var mapper = new GiteaEventMapper();
|
||||
var payload = CreateGiteaPushPayload();
|
||||
|
||||
// Act
|
||||
var result = mapper.Map("push", "delivery-123", payload);
|
||||
|
||||
// Assert
|
||||
Assert.NotNull(result);
|
||||
Assert.Equal(ScmProvider.Gitea, result.Provider);
|
||||
Assert.Equal(ScmEventType.Push, result.EventType);
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region Helper Methods
|
||||
|
||||
private static JsonElement CreateGitHubPushPayload()
|
||||
{
|
||||
var payload = new
|
||||
{
|
||||
@ref = "refs/heads/main",
|
||||
after = "abc123def456",
|
||||
repository = new
|
||||
{
|
||||
id = 12345,
|
||||
full_name = "owner/repo",
|
||||
clone_url = "https://github.com/owner/repo.git"
|
||||
},
|
||||
sender = new
|
||||
{
|
||||
login = "testuser",
|
||||
id = 1
|
||||
}
|
||||
};
|
||||
return JsonSerializer.SerializeToElement(payload);
|
||||
}
|
||||
|
||||
private static JsonElement CreateGitHubPrMergedPayload()
|
||||
{
|
||||
var payload = new
|
||||
{
|
||||
action = "closed",
|
||||
pull_request = new
|
||||
{
|
||||
number = 42,
|
||||
merged = true,
|
||||
title = "Test PR",
|
||||
head = new { sha = "abc123" },
|
||||
@base = new { @ref = "main" }
|
||||
},
|
||||
repository = new
|
||||
{
|
||||
id = 12345,
|
||||
full_name = "owner/repo"
|
||||
}
|
||||
};
|
||||
return JsonSerializer.SerializeToElement(payload);
|
||||
}
|
||||
|
||||
private static JsonElement CreateGitHubReleasePayload()
|
||||
{
|
||||
var payload = new
|
||||
{
|
||||
action = "published",
|
||||
release = new
|
||||
{
|
||||
tag_name = "v1.0.0",
|
||||
name = "Release 1.0.0",
|
||||
draft = false,
|
||||
prerelease = false
|
||||
},
|
||||
repository = new
|
||||
{
|
||||
id = 12345,
|
||||
full_name = "owner/repo"
|
||||
}
|
||||
};
|
||||
return JsonSerializer.SerializeToElement(payload);
|
||||
}
|
||||
|
||||
private static JsonElement CreateGitLabPushPayload()
|
||||
{
|
||||
var payload = new
|
||||
{
|
||||
@ref = "refs/heads/main",
|
||||
after = "abc123def456",
|
||||
project = new
|
||||
{
|
||||
id = 12345,
|
||||
path_with_namespace = "group/project",
|
||||
git_http_url = "https://gitlab.com/group/project.git"
|
||||
},
|
||||
user_name = "testuser"
|
||||
};
|
||||
return JsonSerializer.SerializeToElement(payload);
|
||||
}
|
||||
|
||||
private static JsonElement CreateGitLabMrMergedPayload()
|
||||
{
|
||||
var payload = new
|
||||
{
|
||||
object_kind = "merge_request",
|
||||
object_attributes = new
|
||||
{
|
||||
iid = 42,
|
||||
state = "merged",
|
||||
action = "merge",
|
||||
title = "Test MR"
|
||||
},
|
||||
project = new
|
||||
{
|
||||
id = 12345,
|
||||
path_with_namespace = "group/project"
|
||||
}
|
||||
};
|
||||
return JsonSerializer.SerializeToElement(payload);
|
||||
}
|
||||
|
||||
private static JsonElement CreateGiteaPushPayload()
|
||||
{
|
||||
var payload = new
|
||||
{
|
||||
@ref = "refs/heads/main",
|
||||
after = "abc123def456",
|
||||
repository = new
|
||||
{
|
||||
id = 12345,
|
||||
full_name = "owner/repo",
|
||||
clone_url = "https://gitea.example.com/owner/repo.git"
|
||||
},
|
||||
sender = new
|
||||
{
|
||||
login = "testuser"
|
||||
}
|
||||
};
|
||||
return JsonSerializer.SerializeToElement(payload);
|
||||
}
|
||||
|
||||
#endregion
|
||||
}
|
||||
Reference in New Issue
Block a user