Skip to content
Merged
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
Add tests.
  • Loading branch information
fiseni committed Jun 12, 2025
commit 6222fbf519720fe69a7f453c5f9d0085ef686d4f
102 changes: 102 additions & 0 deletions tests/Ardalis.Specification.Tests/Internals/OneOrManyTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -97,6 +97,82 @@ public void Add_DoesNothing_GivenInvalidState()
value.Should().BeEquivalentTo(new string[] { "foo", "bar" });
}

[Fact]
public void AddSorted_CreatesSingleItem_GivenEmptyStruct()
{
var oneOrMany = new OneOrMany<string>();
oneOrMany.AddSorted("foo", Comparer<string>.Default);

var value = Accessors.ValueOf(ref oneOrMany);
value.Should().BeOfType<string>();
value.Should().Be("foo");
}

[Fact]
public void AddSorted_InsertsInPosition_GivenSingleItem()
{
var oneOrMany = new OneOrMany<string>();
Accessors.ValueOf(ref oneOrMany) = "foo";

oneOrMany.AddSorted("bar", Comparer<string>.Default);

var value = Accessors.ValueOf(ref oneOrMany);
value.Should().BeOfType<List<string>>();
value.Should().BeEquivalentTo(new List<string> { "bar", "foo" });
}

[Fact]
public void AddSorted_AddsToTheEnd_GivenSingleItem()
{
var oneOrMany = new OneOrMany<string>();
Accessors.ValueOf(ref oneOrMany) = "bar";

oneOrMany.AddSorted("foo", Comparer<string>.Default);

var value = Accessors.ValueOf(ref oneOrMany);
value.Should().BeOfType<List<string>>();
value.Should().BeEquivalentTo(new List<string> { "bar", "foo" });
}

[Fact]
public void AddSorted_InsertsInPosition_GivenTwoItems()
{
var oneOrMany = new OneOrMany<string>();
Accessors.ValueOf(ref oneOrMany) = new List<string> { "bar", "foo" };

oneOrMany.AddSorted("baz", Comparer<string>.Default);

var value = Accessors.ValueOf(ref oneOrMany);
value.Should().BeOfType<List<string>>();
value.Should().BeEquivalentTo(new List<string> { "bar", "baz", "foo" });
}

[Fact]
public void AddSorted_AddsToTheEnd_GivenTwoItems()
{
var oneOrMany = new OneOrMany<string>();
Accessors.ValueOf(ref oneOrMany) = new List<string> { "bar", "baz" };

oneOrMany.AddSorted("foo", Comparer<string>.Default);

var value = Accessors.ValueOf(ref oneOrMany);
value.Should().BeOfType<List<string>>();
value.Should().BeEquivalentTo(new List<string> { "bar", "baz", "foo" });
}

[Fact]
public void AddSorted_DoesNothing_GivenInvalidState()
{
var oneOrMany = new OneOrMany<string>();
Accessors.ValueOf(ref oneOrMany) = new string[] { "foo", "bar" };

oneOrMany.AddSorted("baz", Comparer<string>.Default);

var value = Accessors.ValueOf(ref oneOrMany);
value.Should().BeOfType<string[]>();
value.Should().BeEquivalentTo(new string[] { "foo", "bar" });
}

[Fact]
public void Single_ReturnsSingleItem_GivenSingleItem()
{
Expand Down Expand Up @@ -125,6 +201,32 @@ public void Single_Throws_GivenMultipleItems()
action.Should().Throw<InvalidOperationException>();
}

[Fact]
public void SingleOrDefault_ReturnsSingleItem_GivenSingleItem()
{
var oneOrMany = new OneOrMany<string>();
Accessors.ValueOf(ref oneOrMany) = "foo";

oneOrMany.SingleOrDefault.Should().Be("foo");
}

[Fact]
public void SingleOrDefault_ReturnsDefault_GivenEmptyStruct()
{
var oneOrMany = new OneOrMany<string>();

oneOrMany.SingleOrDefault.Should().BeNull();
}

[Fact]
public void SingleOrDefault_ReturnsDefault_GivenMultipleItems()
{
var oneOrMany = new OneOrMany<string>();
Accessors.ValueOf(ref oneOrMany) = new string[] { "foo", "bar" };

oneOrMany.SingleOrDefault.Should().BeNull();
}

[Fact]
public void Values_ReturnsEmpty_GivenEmptyStruct()
{
Expand Down