Jelajahi Sumber

Added WriterTests

Piotr Czajkowski 7 bulan lalu
induk
melakukan
eb2513b626

+ 10 - 12
ExcelORM/ExcelORM/ExcelWriter.cs

@@ -5,46 +5,44 @@ namespace ExcelORM;
 public class ExcelWriter
 {
     private readonly IXLWorkbook xlWorkbook;
-    public bool WriteHeader { get; set; } = true;
-
     public ExcelWriter(string? path = null)
     {
         xlWorkbook = File.Exists(path) ? new XLWorkbook(path) : new XLWorkbook();
     }
 
-    private static uint GenerateHeader<T>(T value, IXLWorksheet worksheet, uint rowIndex = 1) where T : class, new()
+    private static int GenerateHeader<T>(T value, IXLWorksheet worksheet) where T : class, new()
     {
+        var rowIndex = 1;
         var cellIndex = 1;
         var properties = value.GetType().GetProperties();
         foreach (var property in properties)
         {
             var columnAttribute = property.GetCustomAttributes(typeof(ColumnAttribute), false).FirstOrDefault() as ColumnAttribute;
-            worksheet.Cell((int)rowIndex, cellIndex).Value = columnAttribute is { Names.Length: > 0 } ? columnAttribute.Names.First() : property.Name;
+            worksheet.Cell(rowIndex, cellIndex).Value = columnAttribute is { Names.Length: > 0 } ? columnAttribute.Names.First() : property.Name;
             cellIndex++;
         }
 
         return ++rowIndex;
     }
 
-    public void Write<T>(IEnumerable<T> values, string? worksheetName, bool append = false, uint rowIndex = 1) where T : class, new()
+    public void Write<T>(IEnumerable<T> values, string? worksheetName, bool append = false) where T : class, new()
     {
         var xlWorksheet = xlWorkbook.Worksheets.FirstOrDefault(x => x.Name.Equals(worksheetName, StringComparison.InvariantCultureIgnoreCase));
         xlWorksheet ??= !string.IsNullOrWhiteSpace(worksheetName) ?
             xlWorkbook.AddWorksheet(worksheetName) : xlWorkbook.AddWorksheet();
 
-        Write(values, xlWorksheet, append, rowIndex);
+        Write(values, xlWorksheet, append);
     }
 
-    private void Write<T>(IEnumerable<T> values, IXLWorksheet worksheet, bool append = false, uint rowIndex = 1) where T : class, new()
+    private void Write<T>(IEnumerable<T> values, IXLWorksheet worksheet, bool append = false) where T : class, new()
     {
         var enumerable = values as T[] ?? values.ToArray();
         if (!enumerable.Any()) return;
 
-        rowIndex = append switch
+        var rowIndex = append switch
         {
-            true => (uint)worksheet.LastRowUsed().RowNumber() + 1,
-            false when WriteHeader => GenerateHeader(enumerable.First(), worksheet),
-            _ => rowIndex
+            true => worksheet.LastRowUsed().RowNumber() + 1,
+            false => GenerateHeader(enumerable.First(), worksheet),
         };
 
         foreach (var value in enumerable)
@@ -53,7 +51,7 @@ public class ExcelWriter
             var properties = value.GetType().GetProperties();
             foreach (var property in properties)
             {
-                worksheet.Cell((int)rowIndex, cellIndex).Value = property.GetValue(value) as string;
+                worksheet.Cell(rowIndex, cellIndex).Value = property.GetValue(value) as string;
                 cellIndex++;
             }
 

+ 1 - 11
ExcelORM/ExcelORMTests/ReaderTests.cs

@@ -8,17 +8,7 @@ public class ReaderTests
     private const string HiddenFile = "testFiles/hidden.xlsx";
     private const string FilteredFile = "testFiles/filtered.xlsx";
 
-    private class Test
-    {
-        [Column("First name" )]
-        public string? Name { get; set; }
-
-        [Column("Last name")]
-        public string? Surname { get; set; }
-
-        [Column(new[]{"Occupation", "Job"})]
-        public string? Job { get; set; }
-    }
+    
     
     [Fact]
     public void Read()

+ 15 - 0
ExcelORM/ExcelORMTests/Test.cs

@@ -0,0 +1,15 @@
+using ExcelORM;
+
+namespace ExcelORMTests;
+
+public record Test
+{
+    [Column("First name" )]
+    public string? Name { get; set; }
+
+    [Column("Last name")]
+    public string? Surname { get; set; }
+
+    [Column(new[]{"Occupation", "Job"})]
+    public string? Job { get; set; }
+}

+ 41 - 0
ExcelORM/ExcelORMTests/WriterTests.cs

@@ -0,0 +1,41 @@
+using ExcelORM;
+
+namespace ExcelORMTests;
+
+public class WriterTests
+{
+    private readonly Test[] arrayOfThree = 
+    {
+        new Test { Name = "Bilbo", Surname = "Baggins", Job = "Eater"},
+        new Test { Name = "John", Surname = "McCain", Job = "Policeman"},
+        new Test { Name = "Bruce", Surname = "Lee", Job = "Fighter"}
+    };
+
+    private readonly List<Test> listOfTwo = new()
+    {
+        new Test { Name = "Elon", Surname = "Musk", Job = "Comedian"},
+        new Test { Name = "Donald", Surname = "Trump", Job = "Bankrupter"},
+    };
+
+    [Fact]
+    public void WriteWithAppend()
+    {
+        var testFile = Path.GetRandomFileName();
+        testFile = Path.ChangeExtension(testFile, "xlsx");
+
+        const string worksheetName = "Test";
+        var writer = new ExcelWriter(testFile);
+        writer.Write(arrayOfThree, worksheetName);
+        writer.SaveAs(testFile);
+
+        var reader = new ExcelReader(testFile);
+        Assert.Equal(3, reader.Read<Test>().Count());
+
+        writer.Write(listOfTwo, worksheetName, true);
+        writer.SaveAs(testFile);
+        
+        reader = new ExcelReader(testFile);
+        Assert.Equal(5, reader.Read<Test>(worksheetName).Count());
+        File.Delete(testFile);
+    }
+}