aboutsummaryrefslogblamecommitdiffstats
path: root/datamaps/reader_test.go
blob: e214930fd570e4df713d4b16c6695f9675afab27 (plain) (tree)


























































































































































































































































                                                                                                                                  
package datamaps

import (
	"os"
	"testing"
)

func TestReadDML(t *testing.T) {
	d, _ := ReadDML("testdata/datamap.csv")
	cases := []struct {
		idx int
		val string
	}{
		{0, "Project/Programme Name"},
		{1, "Department"},
		{2, "Delivery Body"},
	}

	for _, c := range cases {
		if got := d[c.idx].Key; got != c.val {
			t.Errorf("The test expected %s, got %s.", c.val, d[c.idx].Key)
		}
	}
}

func TestNoFileReturnsError(t *testing.T) {
	// this file does not exist
	_, err := ReadDML("/home/bobbins.csv")
	// if we get no error, something has gone wrong

	if err == nil {
		t.Errorf("Should have thrown error %s", err)
	}
}

func TestBadDMLLine(t *testing.T) {
	_, err := ReadDML("/home/lemon/code/python/bcompiler-engine/tests/resources/datamap_empty_cols.csv")

	if err == nil {
		t.Errorf("No error so test failed.")
	}
}

func TestGetSheetsFromDM(t *testing.T) {
	slice, _ := ReadDML("testdata/datamap.csv")
	sheetNames := getSheetNames(slice)

	if len(sheetNames) != 15 {
		t.Errorf("The test expected 14 sheets in slice, got %d.",
			len(sheetNames))
	}
}

func TestReadXLSX(t *testing.T) {
	d := ReadXLSX("testdata/test_template.xlsx")
	cases := []struct {
		sheet, cellref, val string
	}{
		{"Summary", "A2", "Date:"},
		{"Summary", "IG10", "botticelli"},
		{"Another Sheet", "F5", "4.2"},
		{"Another Sheet", "J22", "18"},
	}

	for _, c := range cases {
		got := d[c.sheet][c.cellref].Value
		if got != c.val {
			t.Errorf("The test expected %s in %s sheet to be %s "+
				" - instead it is %s.", c.cellref, c.sheet, c.val, d[c.sheet][c.cellref].Value)
		}
	}
}

// func TestExtractWithDBDatamap(t *testing.T) {
// 	// setup - we need the datamap in the test database
// 	db, err := setupDB("./testdata/test.db")
// defer func() {
// 	db.Close()
// 	os.Remove("./testdata/test.db")
// }()

// 	if err != nil {
// 		t.Fatal("Expected to be able to set up the database.")
// 	}

// 	opts := Options{
// 		DBPath: "./testdata/test.db",
// 		DMName: "First Datamap",
// 		DMPath: "./testdata/datamap.csv",
// 	}

// 	if err := DatamapToDB(&opts); err != nil {
// 		t.Errorf("Unable to write datamap to database file because %v.", err)
// 	}

// 	d := extractDBDatamap("First Datamap", "testdata/test_template.xlsx")
// }

func TestDMLSliceFromDatabase(t *testing.T) {
	// setup - we need the datamap in the test database
	db, err := setupDB("./testdata/test.db")
	defer func() {
		db.Close()
		os.Remove("./testdata/test.db")
	}()

	if err != nil {
		t.Fatal("Expected to be able to set up the database.")
	}

	opts := Options{
		DBPath: "./testdata/test.db",
		DMName: "First Datamap",
		DMPath: "./testdata/datamap.csv",
	}

	if err := DatamapToDB(&opts); err != nil {
		t.Errorf("Unable to write datamap to database file because %v.", err)
	}

	cases := []struct {
		index int
		key   string
	}{
		{0, "Project/Programme Name"},
		{1, "Department"},
		{2, "Delivery Body"},
		{3, "Stoogge value"},
		{4, "DRRDD - IPA ID Number"},
		{5, "Controls Project ID number"},
		{6, "Jokey Entry"},
		{7, "Parrots Name"},
	}

	data, _ := DatamapFromDB("First Datamap", db)

	for _, c := range cases {
		got := data[c.index].Key
		if got != c.key {
			t.Errorf("The test expected %s but got %s\n", c.key, data[c.index].Key)
		}
	}

	if data[0].Key != "Project/Programme Name" {
		t.Errorf("expected to see Project/Programme Name and got %q\n", data[0])
	}
}

func TestExtractUsingDBDM(t *testing.T) {
	// setup - we need the datamap in the test database
	db, err := setupDB("./testdata/test.db")
	defer func() {
		db.Close()
		os.Remove("./testdata/test.db")
	}()

	if err != nil {
		t.Fatal("Expected to be able to set up the database.")
	}

	opts := Options{
		DBPath: "./testdata/test.db",
		DMName: "First Datamap",
		DMPath: "./testdata/datamap_matches_test_template.csv",
	}

	if err := DatamapToDB(&opts); err != nil {
		t.Errorf("Unable to write datamap to database file because %v.", err)
	}

	d, _ := ExtractDBDatamap("First Datamap", "testdata/test_template.xlsx", db)
	cases := []struct {
		sheet, cellref, val string
	}{
		{"Introduction", "C9", "Test Department"},
		{"Introduction", "J9", "Greedy Parrots"},
		{"Introduction", "A1", "10"},
		{"Introduction", "C22", "VUNT"},
	}

	for _, c := range cases {
		got := d[c.sheet][c.cellref].Value
		if got != c.val {
			t.Errorf("test_template.xlsx: The test expected %s in %s sheet to be %s "+
				"- instead it is %s.", c.sheet, c.cellref, c.val,
				d[c.sheet][c.cellref].Value)
		}
	}
}

func TestExtract(t *testing.T) {
	d := extract("testdata/datamap.csv", "testdata/test_template.xlsx")
	cases := []struct {
		sheet, cellref, val string
	}{
		{"Introduction", "C9", "Test Department"},
		{"Introduction", "J9", "Greedy Parrots"},
		{"Introduction", "A1", "10"},
		{"Introduction", "C22", "VUNT"},
	}

	for _, c := range cases {
		got := d[c.sheet][c.cellref].Value
		if got != c.val {
			t.Errorf("The test expected %s in %s sheet to be %s "+
				"- instead it is %s.", c.sheet, c.cellref, c.val,
				d[c.sheet][c.cellref].Value)
		}
	}

	if d["Another Sheet"]["E26"].Value != "Integer:" {
		t.Errorf("Expected E26 in Another Sheet sheet to be Integer: - instead it is %s", d["Another Sheet"]["E26"].Value)
	}
}

// func TestGetTargetFiles(t *testing.T) {
// 	// This is not a suitable test for parameterisation, but doing it this way anyway.
// 	type args struct {
// 		path string
// 	}
// 	tests := []struct {
// 		name    string
// 		args    args
// 		want    []string
// 		wantErr bool
// 	}{
// 		{"Get files in testdata",
// 			args{"./testdata/"},
// 			[]string{
// 				"testdata/test_template.xlsm",
// 				"testdata/test_template.xlsx",
// 				"testdata/test_template2.xlsx",
// 				"testdata/test_template3.xlsx",
// 			},
// 			false,
// 		},
// 	}
// 	for _, tt := range tests {
// 		t.Log("Running the test")
// 		t.Run(tt.name, func(t *testing.T) {
// 			got, err := getTargetFiles(tt.args.path)
// 			if (err != nil) != tt.wantErr {
// 				t.Errorf("getTargetFiles() error = %v, wantErr %v", err, tt.wantErr)
// 				return
// 			}
// 			if !reflect.DeepEqual(got, tt.want) {
// 				t.Errorf("getTargetFiles() = %v, want %v", got, tt.want)
// 			}
// 		})
// 	}
// }