139 lines
4.6 KiB
C#
139 lines
4.6 KiB
C#
using e_suite.Database.Core.Tables.Sequences;
|
|
using e_suite.Modules.SequenceManager;
|
|
using e_suite.UnitTestCore;
|
|
using eSuite.Core.Sequences;
|
|
using NUnit.Framework;
|
|
using System.Globalization;
|
|
|
|
namespace SequenceManager.UnitTests;
|
|
|
|
[TestFixture]
|
|
public class SequenceNumberBuilderUnitTests : TestBase
|
|
{
|
|
[SetUp]
|
|
public override async Task Setup()
|
|
{
|
|
await base.Setup();
|
|
}
|
|
|
|
[TestCase("Order [0000]", $"Order 0001", 0, 1)]
|
|
[TestCase("Order [0000]", $"Order 0100", 99, 1)]
|
|
[TestCase("Order [0000]", $"Order 0000", 1, -1)]
|
|
[TestCase("Order [0000]", $"Order -0001", 0, -1)]
|
|
[TestCase("Order [0]", $"Order 999999999", 999999998, 1)]
|
|
[TestCase("Order [0]", $"Order 1", 0, 1)]
|
|
[TestCase("Order [0]", $"Order 10", 9, 1)]
|
|
public void GetNextSequenceNumber_ValueSeededAndIncrementSet_GeneratesNextSequenceNumber(string pattern, string expectedResult, long seed, long increment)
|
|
{
|
|
_fakeClock.DateTime = new DateTimeOffset(2022, 10, 15, 17, 23, 52, TimeSpan.Zero);
|
|
|
|
// Arrange
|
|
var sequence = new Sequence
|
|
{
|
|
Id = 555,
|
|
Guid = Guid.NewGuid(),
|
|
Increment = increment,
|
|
Name = "Sequence name",
|
|
Pattern = pattern,
|
|
Rollover = Rollover.Continuous,
|
|
Deleted = false,
|
|
Seed = seed
|
|
};
|
|
|
|
// Act
|
|
var sequenceNumber = SequenceNumberBuilder.GetNextSequenceNumber(sequence, _fakeClock);
|
|
|
|
// Assert
|
|
Assert.That(sequenceNumber, !Is.Null);
|
|
Assert.That(sequenceNumber, Is.EqualTo(expectedResult));
|
|
}
|
|
|
|
|
|
[Test]
|
|
public void GetNextSequenceNumber_PatternIncludesDate_DateIncludedInGeneratedSequence()
|
|
{
|
|
// Arrange
|
|
_fakeClock.DateTime = new DateTimeOffset(2022, 10, 15, 17, 23, 52, TimeSpan.Zero);
|
|
|
|
var sequence = new Sequence
|
|
{
|
|
Id = 555,
|
|
Guid = Guid.NewGuid(),
|
|
Increment = 1,
|
|
Name = "Sequence name",
|
|
Pattern = "Order [0] from {DD}-{MM}-{YYYY}",
|
|
Rollover = Rollover.Continuous,
|
|
Deleted = false,
|
|
Seed = 0
|
|
};
|
|
|
|
// Act
|
|
var sequenceNumber = SequenceNumberBuilder.GetNextSequenceNumber(sequence, _fakeClock);
|
|
|
|
// Assert
|
|
Assert.That(sequenceNumber, !Is.Null);
|
|
Assert.That(sequenceNumber, Is.EqualTo($"Order 1 from {_fakeClock.DateTime.Day}-{_fakeClock.DateTime.Month}-{_fakeClock.DateTime.Year}"));
|
|
}
|
|
|
|
[TestCase(Rollover.Day, "20/09/2022", "21/09/2022")]
|
|
[TestCase(Rollover.Month, "05/01/2022", "01/02/2022")]
|
|
[TestCase(Rollover.Year, "05/01/2020", "01/01/2021")]
|
|
public void GetNextSequenceNumber_RollOverSet_ValueResetsToOneAtRollover(Rollover rolloverType, string lastIssueDate, string issueDate)
|
|
{
|
|
// Arrange
|
|
var formats = new[]{ "dd/MM/yyyy" };
|
|
_fakeClock.DateTime = DateTimeOffset.ParseExact(issueDate, formats, CultureInfo.InvariantCulture.DateTimeFormat, DateTimeStyles.None);
|
|
|
|
var sequence = new Sequence
|
|
{
|
|
Id = 555,
|
|
Guid = Guid.NewGuid(),
|
|
Increment = 1,
|
|
Name = "Sequence name",
|
|
Pattern = "Order [0]",
|
|
Rollover = rolloverType,
|
|
Deleted = false,
|
|
Seed = 0,
|
|
LastIssueDate = DateTime.ParseExact(lastIssueDate, "dd/mm/yyyy", CultureInfo.InvariantCulture),
|
|
LastIssueValue = 999
|
|
};
|
|
|
|
// Act
|
|
var sequenceNumber = SequenceNumberBuilder.GetNextSequenceNumber(sequence, _fakeClock);
|
|
|
|
// Assert
|
|
Assert.That(sequenceNumber, !Is.Null);
|
|
Assert.That(sequenceNumber, Is.EqualTo("Order 1"));
|
|
}
|
|
|
|
[TestCase(Rollover.Continuous)]
|
|
[TestCase(Rollover.Day)]
|
|
[TestCase(Rollover.Month)]
|
|
[TestCase(Rollover.Year)]
|
|
public void GetNextSequenceNumber_NotRollingOver_IssuesNextValueCorrectly(Rollover rolloverType)
|
|
{
|
|
// Arrange
|
|
_fakeClock.DateTime = new DateTimeOffset(2022, 10, 15, 17, 23, 52, TimeSpan.Zero);
|
|
|
|
var sequence = new Sequence
|
|
{
|
|
Id = 555,
|
|
Guid = Guid.NewGuid(),
|
|
Increment = 1,
|
|
Name = "Sequence name",
|
|
Pattern = "Order [0]",
|
|
Rollover = rolloverType,
|
|
Deleted = false,
|
|
Seed = 0,
|
|
LastIssueDate = _fakeClock.DateTime,
|
|
LastIssueValue = 998
|
|
};
|
|
|
|
// Act
|
|
var sequenceNumber = SequenceNumberBuilder.GetNextSequenceNumber(sequence, _fakeClock);
|
|
|
|
// Assert
|
|
Assert.That(sequenceNumber, !Is.Null);
|
|
Assert.That(sequenceNumber, Is.EqualTo("Order 999"));
|
|
}
|
|
} |