Introduced some unit testing. Cleaned up some classes in Beam. Overhauled source link generation.

This commit is contained in:
2025-05-10 17:20:33 +03:00
parent bfdcdb1f3b
commit a086cfa02b
23 changed files with 386 additions and 185 deletions
+92
View File
@@ -0,0 +1,92 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Beam.Tests {
public class SouceLinkBuilder {
[Fact]
public void ShouldConstruct_NoErrors() {
_ = new SourceLinkBuilder("example.com");
}
[Fact]
public void ShouldBuild_NoErrors() {
_ = new SourceLinkBuilder("example.com").Build();
}
[Fact]
public void ShouldBuild_Correctly() {
var k = new SourceLinkBuilder("example.com");
Assert.NotNull(k);
var link = k.Build();
Assert.Equal("https://example.com/", link.Link.ToString()); // trailing slash for RFC standardization stuff
}
[Fact]
public void ShouldBuild_SegmentAddsCorrectly() {
var k = new SourceLinkBuilder("example.com");
Assert.NotNull(k);
k.AddSegment("folder1");
var link = k.Build();
Assert.Equal("https://example.com/folder1", link.Link.ToString());
}
[Fact]
public void ShouldThrow_EmptySegmentsDisallowed() {
var k = new SourceLinkBuilder("example.com");
Assert.NotNull(k);
Assert.Throws<ArgumentException>(() => {
k.AddSegment("");
});
}
[Theory]
[InlineData("folder1", "folder2", "folder3")]
[InlineData("f1", "f5", "f6")]
public void ShouldBuild_MultipleSegmentsCorrect(params string[] segments) {
var k = new SourceLinkBuilder("example.com");
Assert.NotNull(k);
foreach (var segment in segments) {
k.AddSegment(segment);
}
StringBuilder builder = new();
builder.Append("https://example.com/");
foreach(var segment in segments) {
builder.Append(segment + "/");
}
// Remove trailing slash
builder.Remove(builder.Length - 1, 1);
var link = k.Build();
Assert.Equal(builder.ToString(), link.Link.ToString());
}
[Fact]
public void ShouldBuild_SingleParameterCorrect() {
var k = new SourceLinkBuilder("example.com");
Assert.NotNull(k);
k.AddSegment("f1");
k.AddParameters(0, "?q=");
var link = k.Build("foo");
Assert.Equal("https://example.com/f1?q=foo", link.Link.ToString());
}
[Fact]
public void ShouldBuild_MultiParameterCorrect() {
var k = new SourceLinkBuilder("example.com");
Assert.NotNull(k);
k.AddSegment("f1");
k.AddParameters(0, "?q=", "?m=");
var link = k.Build("foo", "bar");
Assert.Equal("https://example.com/f1?q=foo?m=bar", link.Link.ToString());
}
[Fact]
public void ShouldBuild_MultiParameterCorrectWithSuffix() {
var k = new SourceLinkBuilder("example.com");
Assert.NotNull(k);
k.AddSegment("f1", "&");
k.AddParameters(0, "?q=", "?m=");
var link = k.Build("foo", "bar");
Assert.Equal("https://example.com/f1?q=foo&?m=bar", link.Link.ToString());
}
}
}