Files
ColaFlow/colaflow-api/tests/Modules/Identity/ColaFlow.Modules.Identity.Domain.Tests/ValueObjects/TenantSlugTests.cs
Yaojia Wang 1f66b25f30
Some checks failed
Code Coverage / Generate Coverage Report (push) Has been cancelled
Tests / Run Tests (9.0.x) (push) Has been cancelled
Tests / Docker Build Test (push) Has been cancelled
Tests / Test Summary (push) Has been cancelled
In progress
2025-11-03 14:00:24 +01:00

74 lines
1.8 KiB
C#

using ColaFlow.Modules.Identity.Domain.Aggregates.Tenants;
using FluentAssertions;
using Xunit;
namespace ColaFlow.Modules.Identity.Domain.Tests.ValueObjects;
public sealed class TenantSlugTests
{
[Theory]
[InlineData("acme")]
[InlineData("beta-corp")]
[InlineData("test-123")]
[InlineData("abc")]
public void Create_ShouldSucceed_ForValidSlug(string slug)
{
// Act
var tenantSlug = TenantSlug.Create(slug);
// Assert
tenantSlug.Value.Should().Be(slug);
}
[Theory]
[InlineData("")]
[InlineData(" ")]
[InlineData("ab")] // Too short
[InlineData("www")] // Reserved
[InlineData("api")] // Reserved
[InlineData("admin")] // Reserved
[InlineData("acme_corp")] // Underscore
[InlineData("acme corp")] // Space
[InlineData("-acme")] // Starts with hyphen
[InlineData("acme-")] // Ends with hyphen
[InlineData("acme--corp")] // Double hyphen
public void Create_ShouldThrow_ForInvalidSlug(string slug)
{
// Act & Assert
var act = () => TenantSlug.Create(slug);
act.Should().Throw<ArgumentException>();
}
[Fact]
public void Create_ShouldConvertToLowerCase()
{
// Act
var tenantSlug = TenantSlug.Create("AcmeCorp");
// Assert
tenantSlug.Value.Should().Be("acmecorp");
}
[Fact]
public void Create_ShouldTrimWhitespace()
{
// Act
var tenantSlug = TenantSlug.Create(" acme ");
// Assert
tenantSlug.Value.Should().Be("acme");
}
[Fact]
public void Create_ShouldThrow_ForTooLongSlug()
{
// Arrange
var longSlug = new string('a', 51);
// Act & Assert
var act = () => TenantSlug.Create(longSlug);
act.Should().Throw<ArgumentException>()
.WithMessage("*cannot exceed 50 characters*");
}
}