Skip to content

Commit

Permalink
More tests
Browse files Browse the repository at this point in the history
  • Loading branch information
zsrdjan committed May 19, 2024
1 parent a93532f commit 96048c2
Show file tree
Hide file tree
Showing 8 changed files with 148 additions and 74 deletions.
56 changes: 56 additions & 0 deletions test/Fraktalio.FModel.Tests/CombinedDeciderTest.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
using Fraktalio.FModel.Tests.Examples.Numbers;
using Fraktalio.FModel.Tests.Examples.Numbers.Even;
using Fraktalio.FModel.Tests.Examples.Numbers.Odd;
using Fraktalio.FModel.Tests.Extensions;
using EvenNumberCommand = Fraktalio.FModel.Tests.Examples.Numbers.NumberCommand.EvenNumberCommand;
using OddNumberCommand = Fraktalio.FModel.Tests.Examples.Numbers.NumberCommand.OddNumberCommand;


namespace Fraktalio.FModel.Tests;

[Category("unit")]
public class CombinedDeciderTest
{
private readonly EvenNumberDecider _evenDecider = new();
private readonly OddNumberDecider _oddDecider = new();
private Decider<NumberCommand?, Tuple<EvenNumberState, OddNumberState>, NumberEvent?> _combinedDecider = null!;

[SetUp]
public void Setup() =>
_combinedDecider = _evenDecider
.Combine<EvenNumberCommand, EvenNumberState, EvenNumberEvent,
OddNumberCommand, OddNumberState, OddNumberEvent, NumberCommand, NumberEvent>(
_oddDecider);

[Test]
public void GivenEmptyEvents_AddEvenNumber() =>
_combinedDecider
.GivenEvents([],
() => new EvenNumberCommand.AddEvenNumber(Description.Create("2"), Number.Create(2)))
.ThenEvents([new EvenNumberAdded(Description.Create("2"), Number.Create(2))]);

[Test]
public void GivenEmptyState_AddEvenNumber() =>
_combinedDecider
.GivenState(null,
() => new EvenNumberCommand.AddEvenNumber(Description.Create("2"), Number.Create(2)))
.ThenState(Tuple.Create(new EvenNumberState(Description.Create("Initial state + 2"), Number.Create(2)),
_oddDecider.InitialState));

[Test]
public void GivenEvents_AddEvenNumber() =>
_combinedDecider
.GivenEvents(new[] { new EvenNumberAdded(Description.Create("2"), Number.Create(2)) },
() => new EvenNumberCommand.AddEvenNumber(Description.Create("4"), Number.Create(4)))
.ThenEvents([new EvenNumberAdded(Description.Create("4"), Number.Create(6))]);

[Test]
public void GivenState_AddEvenNumber() =>
_combinedDecider
.GivenState(
Tuple.Create(new EvenNumberState(Description.Create("2"), Number.Create(2)),
_oddDecider.InitialState),
() => new EvenNumberCommand.AddEvenNumber(Description.Create("4"), Number.Create(4)))
.ThenState(Tuple.Create(new EvenNumberState(Description.Create("2 + 4"), Number.Create(6)),
_oddDecider.InitialState));
}
66 changes: 56 additions & 10 deletions test/Fraktalio.FModel.Tests/EventSourcedDeciderTest.cs
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,6 @@
using Fraktalio.FModel.Tests.Examples.Numbers.Even;
using Fraktalio.FModel.Tests.Examples.Numbers.Odd;
using Fraktalio.FModel.Tests.Extensions;
using EvenNumberAdded = Fraktalio.FModel.Tests.Examples.Numbers.NumberEvent.EvenNumberEvent.EvenNumberAdded;
using EvenNumberSubtracted = Fraktalio.FModel.Tests.Examples.Numbers.NumberEvent.EvenNumberEvent.EvenNumberSubtracted;
using OddNumberAdded = Fraktalio.FModel.Tests.Examples.Numbers.NumberEvent.OddNumberEvent.OddNumberAdded;
using EvenNumberCommand = Fraktalio.FModel.Tests.Examples.Numbers.NumberCommand.EvenNumberCommand;
using OddNumberCommand = Fraktalio.FModel.Tests.Examples.Numbers.NumberCommand.OddNumberCommand;

Expand All @@ -13,41 +10,90 @@ namespace Fraktalio.FModel.Tests;
[Category("unit")]
public class EventSourcedDeciderTest
{
private readonly EvenNumberDecider _evenNumberDecider = new();
private readonly OddNumberDecider _oddNumberDecider = new();
private readonly EvenNumberDecider _evenDecider = new();
private readonly OddNumberDecider _oddDecider = new();

[Test]
public void GivenEmptyEvents_AddEvenNumber() =>
_evenNumberDecider
_evenDecider
.GivenEvents([],
() => new EvenNumberCommand.AddEvenNumber(Description.Create("2"), Number.Create(2)))
.ThenEvents([new EvenNumberAdded(Description.Create("2"), Number.Create(2))]);

[Test]
public void GivenEvents_AddEvenNumber() =>
_evenNumberDecider
_evenDecider
.GivenEvents(new[] { new EvenNumberAdded(Description.Create("2"), Number.Create(2)) },
() => new EvenNumberCommand.AddEvenNumber(Description.Create("4"), Number.Create(4)))
.ThenEvents([new EvenNumberAdded(Description.Create("4"), Number.Create(6))]);

[Test]
public void GivenEvents_SubtractEvenNumber() =>
_evenNumberDecider
_evenDecider
.GivenEvents(new EvenNumberAdded[] { new(Description.Create("8"), Number.Create(8)) },
() => new EvenNumberCommand.SubtractEvenNumber(Description.Create("2"), Number.Create(2)))
.ThenEvents([new EvenNumberSubtracted(Description.Create("2"), Number.Create(6))]);

[Test]
public void GivenEvents_AddOddNumber() =>
_oddNumberDecider
_oddDecider
.GivenEvents(new OddNumberAdded[] { new(Description.Create("3"), Number.Create(3)) },
() => new OddNumberCommand.AddOddNumber(Description.Create("1"), Number.Create(1)))
.ThenEvents([new OddNumberAdded(Description.Create("1"), Number.Create(4))]);

[Test]
public void GivenEvents_SubtractOddNumber() =>
_oddNumberDecider
_oddDecider
.GivenEvents(new OddNumberAdded[] { new(Description.Create("3"), Number.Create(3)) },
() => new OddNumberCommand.SubtractOddNumber(Description.Create("1"), Number.Create(1)))
.ThenEvents([new OddNumberAdded(Description.Create("1"), Number.Create(2))]);

[Test]
public void GivenEvents_LeftMapOverCommand_AddEvenNumber() =>
_evenDecider.MapLeftOnCommand<int>(cn =>
new EvenNumberCommand.AddEvenNumber(Description.Create(cn.ToString()), Number.Create(cn)))
.GivenEvents([],
() => 2)
.ThenEvents([new EvenNumberAdded(Description.Create("2"), Number.Create(2))]);

[Test]
public void GivenState_LeftMapOverCommand_AddEvenNumber() =>
_evenDecider.MapLeftOnCommand<int>(cn =>
new EvenNumberCommand.AddEvenNumber(Description.Create(cn.ToString()), Number.Create(cn)))
.GivenState(null,
() => 2)
.ThenState(new EvenNumberState(Description.Create("Initial state + 2"), Number.Create(2)));

[Test]
//TODO ID: check if this is correct
public void GivenEmptyEvents_DimapOverEventParameter_AddEvenNumber() =>
_evenDecider.DimapOnEvent<EvenNumberEvent?>(
fl => fl != null ? fl with { Value = fl.Value} : null,
fr => fr != null
? new EvenNumberAdded(Description.Create(fr.Value.Value.ToString()), Number.Create(fr.Value))
: null)
.GivenEvents([], () => new EvenNumberCommand.AddEvenNumber(Description.Create("2"), Number.Create(2)))
.ThenEvents([new EvenNumberAdded(Description.Create("2"), Number.Create(2))]);

[Test]
//TODO ID: check if this is correct
public void GivenEmptyEvents_DimapOverStateParameter_AddEvenNumber() =>
_evenDecider.DimapOnState<EvenNumberState>(
fl => fl with { Value = fl.Value},
fr =>
new EvenNumberState(Description.Create(fr.Value.Value.ToString()), Number.Create(fr.Value))
)
.GivenEvents([], () => new EvenNumberCommand.AddEvenNumber(Description.Create("2"), Number.Create(2)))
.ThenEvents([new EvenNumberAdded(Description.Create("2"), Number.Create(2))]);

[Test]
//TODO ID: check if this is correct
public void GivenEmptyState_DimapOverStateParameter_AddEvenNumber() =>
_evenDecider.DimapOnState<EvenNumberState>(
fl => fl with { Value = fl.Value},
fr =>
new EvenNumberState(Description.Create(fr.Value.Value.ToString()), Number.Create(fr.Value))
)
.GivenState(null, () => new EvenNumberCommand.AddEvenNumber(Description.Create("2"), Number.Create(2)))
.ThenState(new EvenNumberState(Description.Create("2"), Number.Create(2)));
}
9 changes: 3 additions & 6 deletions test/Fraktalio.FModel.Tests/Examples/NumberSagaFactory.cs
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,6 @@

namespace Fraktalio.FModel.Tests.Examples;

using EvenNumberEvent = NumberEvent.EvenNumberEvent;
using EvenNumberAdded = NumberEvent.EvenNumberEvent.EvenNumberAdded;
using OddNumberEvent = NumberEvent.OddNumberEvent;
using OddNumberCommand = NumberCommand.OddNumberCommand;
using EvenNumberCommand = NumberCommand.EvenNumberCommand;

Expand All @@ -30,7 +27,7 @@ public static class NumberSagaFactory
)
},

EvenNumberEvent.EvenNumberSubtracted evenNumberSubtracted =>
EvenNumberSubtracted evenNumberSubtracted =>
[
new OddNumberCommand.SubtractOddNumber(
new Description($"{evenNumberSubtracted.Value.Value - 1}"),
Expand All @@ -53,15 +50,15 @@ public static class NumberSagaFactory
private static Func<OddNumberEvent?, IEnumerable<EvenNumberCommand>> OddNumberSagaReact() =>
numberEvent => numberEvent switch
{
OddNumberEvent.OddNumberAdded oddNumberAdded => new EvenNumberCommand[]
OddNumberAdded oddNumberAdded => new EvenNumberCommand[]
{
new EvenNumberCommand.AddEvenNumber(
new Description($"{oddNumberAdded.Value.Value + 1}"),
new Number(oddNumberAdded.Value.Value + 1)
)
},

OddNumberEvent.OddNumberSubtracted oddNumberSubtracted =>
OddNumberSubtracted oddNumberSubtracted =>
[
new EvenNumberCommand.SubtractEvenNumber(
new Description($"{oddNumberSubtracted.Value.Value - 1}"),
Expand Down
Original file line number Diff line number Diff line change
@@ -1,9 +1,8 @@
using EvenNumberCommand = Fraktalio.FModel.Tests.Examples.Numbers.NumberCommand.EvenNumberCommand;
using EvenNumberEvent = Fraktalio.FModel.Tests.Examples.Numbers.NumberEvent.EvenNumberEvent;

namespace Fraktalio.FModel.Tests.Examples.Numbers.Even;

public class EvenNumberDecider() : Decider<EvenNumberCommand, EvenNumberState, EvenNumberEvent>(
public class EvenNumberDecider() : Decider<EvenNumberCommand?, EvenNumberState, EvenNumberEvent?>(
initialState: new EvenNumberState(Description.Create("Initial state"), Number.Create(0)),
decide: (c, s) =>
{
Expand All @@ -16,12 +15,12 @@ public class EvenNumberDecider() : Decider<EvenNumberCommand, EvenNumberState, E
{
EvenNumberCommand.AddEvenNumber add =>
[
new EvenNumberEvent.EvenNumberAdded(Description.Create(add.Description),
new EvenNumberAdded(Description.Create(add.Description),
Number.Create((int) s.Value + add.Value))
],
EvenNumberCommand.SubtractEvenNumber subtract =>
[
new EvenNumberEvent.EvenNumberSubtracted(Description.Create(subtract.Description),
new EvenNumberSubtracted(Description.Create(subtract.Description),
Number.Create((int) s.Value - subtract.Value))
],
_ => Array.Empty<EvenNumberEvent>()
Expand All @@ -31,9 +30,9 @@ public class EvenNumberDecider() : Decider<EvenNumberCommand, EvenNumberState, E
{
return e switch
{
EvenNumberEvent.EvenNumberAdded added => new EvenNumberState(
EvenNumberAdded added => new EvenNumberState(
Description.Create(s.Description + added.Description), Number.Create(added.Value)),
EvenNumberEvent.EvenNumberSubtracted subtracted => new EvenNumberState(
EvenNumberSubtracted subtracted => new EvenNumberState(
Description.Create(s.Description - subtracted.Description), Number.Create(subtracted.Value)),
_ => s
};
Expand Down
50 changes: 15 additions & 35 deletions test/Fraktalio.FModel.Tests/Examples/Numbers/NumberEvent.cs
Original file line number Diff line number Diff line change
@@ -1,37 +1,17 @@
namespace Fraktalio.FModel.Tests.Examples.Numbers;

public abstract class NumberEvent
{
public abstract Description Description { get; }
public abstract Number Value { get; }

public abstract class EvenNumberEvent : NumberEvent
{
public sealed class EvenNumberAdded(Description description, Number value) : EvenNumberEvent
{
public override Description Description { get; } = description;
public override Number Value { get; } = value;
}

public sealed class EvenNumberSubtracted(Description description, Number value) : EvenNumberEvent
{
public override Description Description { get; } = description;
public override Number Value { get; } = value;
}
}

public abstract class OddNumberEvent : NumberEvent
{
public sealed class OddNumberAdded(Description description, Number value) : OddNumberEvent
{
public override Description Description { get; } = description;
public override Number Value { get; } = value;
}

public sealed class OddNumberSubtracted(Description description, Number value) : OddNumberEvent
{
public override Description Description { get; } = description;
public override Number Value { get; } = value;
}
}
}
public abstract record NumberEvent(Description Description, Number Value);

public abstract record EvenNumberEvent(Description Description, Number Value) : NumberEvent(Description, Value);
public sealed record EvenNumberAdded(Description Description, Number Value) : EvenNumberEvent(Description, Value);

public sealed record EvenNumberSubtracted(Description Description, Number Value) : EvenNumberEvent(Description, Value);


public abstract record OddNumberEvent(Description Description, Number Value) : NumberEvent(Description, Value);

public sealed record OddNumberAdded(Description Description, Number Value) : OddNumberEvent(Description, Value);

public sealed record OddNumberSubtracted(Description Description, Number Value)
: OddNumberEvent(Description, Value);

Original file line number Diff line number Diff line change
@@ -1,9 +1,8 @@
using OddNumberCommand = Fraktalio.FModel.Tests.Examples.Numbers.NumberCommand.OddNumberCommand;
using OddNumberEvent = Fraktalio.FModel.Tests.Examples.Numbers.NumberEvent.OddNumberEvent;

namespace Fraktalio.FModel.Tests.Examples.Numbers.Odd;

public class OddNumberDecider() : Decider<OddNumberCommand, OddNumberState, OddNumberEvent>(
public class OddNumberDecider() : Decider<OddNumberCommand?, OddNumberState, OddNumberEvent?>(
initialState: new OddNumberState(Description.Create("Initial state"), Number.Create(0)),
decide: (c, s) =>
{
Expand All @@ -16,12 +15,12 @@ public class OddNumberDecider() : Decider<OddNumberCommand, OddNumberState, OddN
{
OddNumberCommand.AddOddNumber add =>
[
new OddNumberEvent.OddNumberAdded(Description.Create(add.Description),
new OddNumberAdded(Description.Create(add.Description),
Number.Create((int) s.Value + add.Value))
],
OddNumberCommand.SubtractOddNumber subtract =>
[
new OddNumberEvent.OddNumberSubtracted(Description.Create(subtract.Description),
new OddNumberSubtracted(Description.Create(subtract.Description),
Number.Create((int) s.Value - subtract.Value))
],
_ => Array.Empty<OddNumberEvent>()
Expand All @@ -31,9 +30,9 @@ public class OddNumberDecider() : Decider<OddNumberCommand, OddNumberState, OddN
{
return e switch
{
OddNumberEvent.OddNumberAdded added => new OddNumberState(
OddNumberAdded added => new OddNumberState(
Description.Create(s.Description + added.Description), Number.Create(added.Value)),
OddNumberEvent.OddNumberSubtracted subtracted => new OddNumberState(
OddNumberSubtracted subtracted => new OddNumberState(
Description.Create(s.Description - subtracted.Description), Number.Create(subtracted.Value)),
_ => s
};
Expand Down
5 changes: 1 addition & 4 deletions test/Fraktalio.FModel.Tests/SagaTest.cs
Original file line number Diff line number Diff line change
@@ -1,8 +1,5 @@
using Fraktalio.FModel.Tests.Examples.Numbers;
using Fraktalio.FModel.Tests.Extensions;
using EvenNumberEvent = Fraktalio.FModel.Tests.Examples.Numbers.NumberEvent.EvenNumberEvent;
using EvenNumberAdded = Fraktalio.FModel.Tests.Examples.Numbers.NumberEvent.EvenNumberEvent.EvenNumberAdded;
using OddNumberEvent = Fraktalio.FModel.Tests.Examples.Numbers.NumberEvent.OddNumberEvent;
using OddNumberCommand = Fraktalio.FModel.Tests.Examples.Numbers.NumberCommand.OddNumberCommand;
using EvenNumberCommand = Fraktalio.FModel.Tests.Examples.Numbers.NumberCommand.EvenNumberCommand;
using static Fraktalio.FModel.Tests.Examples.NumberSagaFactory;
Expand Down Expand Up @@ -59,7 +56,7 @@ public void Given_OddNumberAdded_CombinedSaga_CreatesAddEvenNumberCommand()
NumberCommand>(_oddSaga);

combinedSaga.WhenActionResult(
new OddNumberEvent.OddNumberAdded(Description.Create("1"), Number.Create(1)))
new OddNumberAdded(Description.Create("1"), Number.Create(1)))
.ExpectActions(
new EvenNumberCommand.AddEvenNumber(
Description.Create("2"),
Expand Down
14 changes: 7 additions & 7 deletions test/Fraktalio.FModel.Tests/StateStoredDeciderTest.cs
Original file line number Diff line number Diff line change
Expand Up @@ -10,40 +10,40 @@ namespace Fraktalio.FModel.Tests;
[Category("unit")]
public class StateStoredDeciderTest
{
private readonly EvenNumberDecider _evenNumberDecider = new();
private readonly OddNumberDecider _oddNumberDecider = new();
private readonly EvenNumberDecider _evenDecider = new();
private readonly OddNumberDecider _oddDecider = new();

[Test]
public void GivenEmptyState_AddEvenNumber() =>
_evenNumberDecider
_evenDecider
.GivenState(null,
() => new EvenNumberCommand.AddEvenNumber(Description.Create("2"), Number.Create(2)))
.ThenState(new EvenNumberState(Description.Create("Initial state + 2"), Number.Create(2)));

[Test]
public void GivenState_AddEvenNumber() =>
_evenNumberDecider
_evenDecider
.GivenState(new EvenNumberState(Description.Create("2"), Number.Create(2)),
() => new EvenNumberCommand.AddEvenNumber(Description.Create("4"), Number.Create(4)))
.ThenState(new EvenNumberState(Description.Create("2 + 4"), Number.Create(6)));

[Test]
public void GivenState_SubtractEvenNumber() =>
_evenNumberDecider
_evenDecider
.GivenState(new EvenNumberState(Description.Create("8"), Number.Create(8)),
() => new EvenNumberCommand.SubtractEvenNumber(Description.Create("2"), Number.Create(2)))
.ThenState(new EvenNumberState(Description.Create("8 - 2"), Number.Create(6)));

[Test]
public void GivenState_AddOddNumber() =>
_oddNumberDecider
_oddDecider
.GivenState(new OddNumberState(Description.Create("3"), Number.Create(3)),
() => new OddNumberCommand.AddOddNumber(Description.Create("1"), Number.Create(1)))
.ThenState(new OddNumberState(Description.Create("3 + 1"), Number.Create(4)));

[Test]
public void GivenState_SubtractOddNumber() =>
_oddNumberDecider
_oddDecider
.GivenState(new OddNumberState(Description.Create("3"), Number.Create(3)),
() => new OddNumberCommand.SubtractOddNumber(Description.Create("1"), Number.Create(1)))
.ThenState(new OddNumberState(Description.Create("3 - 1"), Number.Create(2)));
Expand Down

0 comments on commit 96048c2

Please sign in to comment.