using SmallSoftwareContracts.DataModels; using SmallSoftwareContracts.Exceptions; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace SmallSoftwareTests.DataModelsTests; [TestFixture] internal class SoftwareHistoryDataModelTests { [Test] public void SoftwareIdIsNullOrEmptyTest() { var software = CreateDataModel(null, 10); Assert.That(() => software.Validate(), Throws.TypeOf()); software = CreateDataModel(string.Empty, 10); Assert.That(() => software.Validate(), Throws.TypeOf()); } [Test] public void SoftwareIdIsNotGuidTest() { var software = CreateDataModel("id", 10); Assert.That(() => software.Validate(), Throws.TypeOf()); } [Test] public void OldPriceIsLessOrZeroTest() { var software = CreateDataModel(Guid.NewGuid().ToString(), 0); Assert.That(() => software.Validate(), Throws.TypeOf()); software = CreateDataModel(Guid.NewGuid().ToString(), -10); Assert.That(() => software.Validate(), Throws.TypeOf()); } [Test] public void AllFieldsIsCorrectTest() { var softwareId = Guid.NewGuid().ToString(); var oldPrice = 10; var softwareHistory = CreateDataModel(softwareId, oldPrice); Assert.That(() => softwareHistory.Validate(), Throws.Nothing); Assert.Multiple(() => { Assert.That(softwareHistory.SoftwareId, Is.EqualTo(softwareId)); Assert.That(softwareHistory.OldPrice, Is.EqualTo(oldPrice)); Assert.That(softwareHistory.ChangeDate, Is.LessThan(DateTime.UtcNow)); Assert.That(softwareHistory.ChangeDate, Is.GreaterThan(DateTime.UtcNow.AddMinutes(-1))); }); } private static SoftwareHistoryDataModel CreateDataModel(string? softwareId, double oldPrice) => new(softwareId, oldPrice); }