package main
import (
"reflect"
"slices"
"testing"
"time"
)
func TestCreateNewReturn(t *testing.T) {
dm := &Datamap{
ID: 1,
Name: "test name",
Description: "test description",
Created: time.Now(),
DMLs: []DatamapLine{
{
ID: 1,
Key: "test key",
Sheet: "test sheet",
DataType: "test datatype",
CellRef: "test cellref",
},
},
}
// Call NewReturn with an empty []ReturnLine slice
rt, err := NewReturn("test name", dm, []ReturnLine{})
if err == nil {
t.Error("Expected an error when passing an empty []ReturnLine slice")
}
// Check if the error message is as expected
expectedErrorMsg := "ReturnLines must contain at least one ReturnLine"
if err != nil && err.Error() != expectedErrorMsg {
t.Errorf("Unexpected error message. Expected: %s, Got: %s", expectedErrorMsg, err.Error())
}
// Check if the returned Return struct is nil
if rt != nil {
t.Error("Expected a nil Return struct when an error occurs")
}
}
func TestNewReturnLine(t *testing.T) {
rl, err := NewReturnLine("stabs", "C1", "Knocker")
if err != nil {
t.Fatal(err)
}
if rl == nil {
t.Errorf("NewReturnLine() returned nil")
}
if rl.Sheet != "stabs" {
t.Errorf("NewReturnLine() returned wrong sheet")
}
}
func TestReturnLineCellRefFormat(t *testing.T) {
_, err := NewReturnLine("stabs", "CC", "Knocker")
if err != nil {
if err.Error() != "cellRef must be A1 format" {
t.Errorf("NewReturnLine() returned wrong error")
}
}
}
func TestValidateInputs(t *testing.T) {
// Happy path
err := validateInputs("Sheet1", "A1", "value")
if err != nil {
t.Errorf("validateInputs failed: %v", err)
}
// Missing sheet
err = validateInputs("", "A1", "value")
if err == nil {
t.Error("Expected error for missing sheet")
}
if err.Error() != "sheet parameter is required" {
t.Error("Expected error for missing sheet")
}
// Missing cellRef
err = validateInputs("Sheet1", "", "value")
if err == nil {
t.Error("cellRef parameter is required")
}
// Missing value
err = validateInputs("Sheet1", "A1", "")
if err == nil {
t.Error("value parameter is required")
}
}
func TestHelper_validateSpreadsheetCell(t *testing.T) {
if validateSpreadsheetCell("19") != false {
t.Errorf("Helper.validateSpreadsheetCell() did not return false")
}
if validateSpreadsheetCell("1") != false {
t.Errorf("Helper.validateSpreadsheetCell() did not return false")
}
if validateSpreadsheetCell("A10") != true {
t.Errorf("Helper.validateSpreadsheetCell() did not return true")
}
}
func TestParseXLSX(t *testing.T) {
tests := []struct {
name string
filePath string
dm *Datamap
want *Return
wantErr bool
}{
{
name: "Valid_Excel_file",
filePath: "../../testdata/valid_excel.xlsx",
dm: &Datamap{
DMLs: []DatamapLine{
{Sheet: "Sheet1", CellRef: "A1"},
{Sheet: "Sheet1", CellRef: "B1"},
{Sheet: "Sheet2", CellRef: "C1"},
},
},
want: &Return{
Name: "valid_excel.xlsx",
ReturnLines: []ReturnLine{
{Sheet: "Sheet1", CellRef: "A1", Value: "Value 1"},
{Sheet: "Sheet1", CellRef: "B1", Value: "Value 2"},
{Sheet: "Sheet2", CellRef: "C1", Value: "Value 3"},
},
},
wantErr: false,
},
// Add more test cases as needed
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
got, err := ParseXLSX(tt.filePath, tt.dm)
if (err != nil) != tt.wantErr {
t.Errorf("ParseXLSX() error = %v, wantErr %v", err, tt.wantErr)
return
}
if !reflect.DeepEqual(got.Name, tt.want.Name) {
t.Errorf("ParseXLSX() FileName = %v, want %v", got.Name, tt.want.Name)
}
if len(got.ReturnLines) != len(tt.want.ReturnLines) {
t.Errorf("ParseXLSX() ReturnLines length = %v, want %v", len(got.ReturnLines), len(tt.want.ReturnLines))
return
}
for i := range got.ReturnLines {
if got.ReturnLines[i].Sheet != tt.want.ReturnLines[i].Sheet {
t.Errorf("ParseXLSX() ReturnLines[%d].Sheet = %v, want %v", i, got.ReturnLines[i].Sheet, tt.want.ReturnLines[i].Sheet)
}
if got.ReturnLines[i].CellRef != tt.want.ReturnLines[i].CellRef {
t.Errorf("ParseXLSX() ReturnLines[%d].CellRef = %v, want %v", i, got.ReturnLines[i].CellRef, tt.want.ReturnLines[i].CellRef)
}
if got.ReturnLines[i].Value != tt.want.ReturnLines[i].Value {
t.Errorf("ParseXLSX() ReturnLines[%d].Value = %v, want %v", i, got.ReturnLines[i].Value, tt.want.ReturnLines[i].Value)
}
}
})
}
}
func TestPrepareFiles(t *testing.T) {
fp := NewDirectoryFilePackage("../../testdata")
files, err := fp.Prepare()
if err != nil {
t.Error(err)
}
t.Log(files)
if !slices.Contains(files, "../../testdata/valid_excel.xlsx") {
t.Errorf("Prepare() did not return ../../testdata/valid_excel.xlsx")
}
}