package dirtoexcel_test import ( "fmt" "os" "path" "testing" "github.com/matryer/is" "github.com/xuri/excelize/v2" "go.xsfx.dev/amseltools/internal/dirtoexcel" ) func TestCreate(t *testing.T) { type want struct { Company string Value string } tables := []struct { name string files []string sheets map[string][]want }{ { "00", []string{ "amazon_foo_12.34_bar.jpg", "bma-zon_12.34_bar.jpg", "aldi_10.98.jpg", "aldi_10.00.jpg", "edeka_10.11.jpg", "casa espana_20221216_62.19.jpg", "1und1_202302011_61.97_BAR.jpg", }, map[string][]want{ "Food": { { "ALDI", "20.98", }, { "EDEKA", "10.11", }, }, "NonFood": { { "AMAZON", "12.34", }, }, "Other": { { "1UND1", "61.97", }, { "BMA-ZON", "12.34", }, { "CASA ESPANA", "62.19", }, }, }, }, } is := is.New(t) for _, tt := range tables { tt := tt t.Run(tt.name, func(t *testing.T) { dir := t.TempDir() for _, i := range tt.files { _, err := os.Create(path.Join(dir, i)) is.NoErr(err) } outfile := path.Join(dir, "foo.xlsx") // Create the excel. err := dirtoexcel.Create(outfile, dir) is.NoErr(err) // NOTE: Uncomment this to view excel file. // // eFile, err := os.ReadFile(outfile) // is.NoErr(err) // // err = os.WriteFile(path.Join("/home/marv/wip/amseltools", "foo.xlsx"), eFile, 0o644) // is.NoErr(err) // Read the excel. f, err := excelize.OpenFile(outfile) is.NoErr(err) defer func() { err := f.Close() is.NoErr(err) }() for name, values := range tt.sheets { for i, j := range values { company, err := f.GetCellValue(name, fmt.Sprintf("A%d", i+1)) is.NoErr(err) is.Equal(j.Company, company) value, err := f.GetCellValue(name, fmt.Sprintf("B%d", i+1)) is.NoErr(err) is.Equal(j.Value, value) } } }) } } func TestCategoriesInsert(t *testing.T) { is := is.New(t) m := dirtoexcel.Categories{} err := m.Insert("amazon", "11.11") is.NoErr(err) is.Equal(dirtoexcel.Categories{"NonFood": []dirtoexcel.Value{{"AMAZON", 11.11}}}, m) } func TestCalcAndSort(t *testing.T) { tables := []struct { name string input dirtoexcel.Values expected dirtoexcel.Values }{ { "00", dirtoexcel.Values{ dirtoexcel.Value{Company: "BAR", Value: 3}, dirtoexcel.Value{Company: "ALDI", Value: 1}, dirtoexcel.Value{Company: "ALDI", Value: 2}, }, dirtoexcel.Values{ dirtoexcel.Value{Company: "ALDI", Value: 3}, dirtoexcel.Value{Company: "BAR", Value: 3}, }, }, } is := is.New(t) for _, tt := range tables { tt := tt t.Run(tt.name, func(t *testing.T) { is.Equal(dirtoexcel.CalcAndSort(tt.input), tt.expected) }) } }