using FiscalFlow.Core.Entities; using Xunit; using FluentAssertions; namespace FiscalFlow.UnitTests.Domain; public class InvoiceTests { [Fact] public void Create_ShouldInitializeInvoiceWithCorrectValues() { var connectionId = Guid.NewGuid(); var invoice = Invoice.Create( connectionId, "fortnox", "test.pdf", "/path/to/file", 1024, "hash123"); invoice.ConnectionId.Should().Be(connectionId); invoice.Provider.Should().Be("fortnox"); invoice.OriginalFilename.Should().Be("test.pdf"); invoice.StoragePath.Should().Be("/path/to/file"); invoice.FileSize.Should().Be(1024); invoice.FileHash.Should().Be("hash123"); invoice.Status.Should().Be(InvoiceStatus.Uploading); } [Fact] public void SetExtractionData_ShouldUpdateExtractionFields() { var invoice = CreateTestInvoice(); var extractionData = "{\"test\": \"data\"}"; invoice.SetExtractionData( extractionData, 0.95m, "Test Supplier", "556677-8899", "INV-001", new DateTime(2024, 1, 15), new DateTime(2024, 2, 15), 1250.00m, 250.00m, 25, "123456789", "123-4567", null, "SEK"); invoice.ExtractionData.Should().Be(extractionData); invoice.ExtractionConfidence.Should().Be(0.95m); invoice.ExtractedSupplierName.Should().Be("Test Supplier"); invoice.ExtractedSupplierOrgNumber.Should().Be("556677-8899"); invoice.ExtractedInvoiceNumber.Should().Be("INV-001"); invoice.ExtractedAmountTotal.Should().Be(1250.00m); invoice.ExtractedAmountVat.Should().Be(250.00m); invoice.ExtractedVatRate.Should().Be(25); invoice.ExtractedOcrNumber.Should().Be("123456789"); invoice.ExtractedBankgiro.Should().Be("123-4567"); invoice.ExtractedCurrency.Should().Be("SEK"); invoice.Status.Should().Be(InvoiceStatus.Preview); } [Fact] public void SetStatus_Imported_ShouldSetProcessedAt() { var invoice = CreateTestInvoice(); invoice.SetStatus(InvoiceStatus.Imported); invoice.Status.Should().Be(InvoiceStatus.Imported); invoice.ProcessedAt.Should().NotBeNull(); } [Fact] public void SetError_ShouldSetErrorFieldsAndStatus() { var invoice = CreateTestInvoice(); invoice.SetError("INVALID_FILE", "File format not supported"); invoice.ErrorCode.Should().Be("INVALID_FILE"); invoice.ErrorMessage.Should().Be("File format not supported"); invoice.Status.Should().Be(InvoiceStatus.Failed); } private static Invoice CreateTestInvoice() { return Invoice.Create( Guid.NewGuid(), "fortnox", "test.pdf", "/path/to/file"); } }