github.com/andrewrech/ih-abstract@v0.0.0-20210322142951-2fec1c8d0f38/connect_test.go (about)

     1  package main
     2  
     3  import (
     4  	"database/sql/driver"
     5  	"fmt"
     6  	"log"
     7  	"os"
     8  	"sync/atomic"
     9  	"testing"
    10  
    11  	"github.com/DATA-DOG/go-sqlmock"
    12  	"github.com/google/go-cmp/cmp"
    13  )
    14  
    15  func TestDBLive(t *testing.T) {
    16  	var config string
    17  	var present bool
    18  
    19  	if config, present = os.LookupEnv("IH_ABSTRACT_TEST_CONFIG"); !present {
    20  		t.Skip("IH_ABSTRACT_TEST_CONFIG is unset, skipping connection test")
    21  	}
    22  
    23  	db, err := connect(config)
    24  	if err != nil {
    25  		log.Fatalln(err)
    26  	}
    27  
    28  	defer db.Close()
    29  
    30  	r := DB(config, db)
    31  
    32  	var counter int64
    33  	for range r.out {
    34  		counter++
    35  	}
    36  
    37  	t.Run("Read 5 records from live database", func(t *testing.T) {
    38  		if counter != 5 {
    39  			t.Fatalf("failed to read 5 records from live Immune Health SQL database")
    40  		}
    41  	})
    42  
    43  	<-r.done
    44  }
    45  
    46  func TestDBMock(t *testing.T) {
    47  	db, mock, err := sqlmock.New()
    48  	if err != nil {
    49  		fmt.Println("failed to open sqlmock database:", err)
    50  	}
    51  	defer db.Close()
    52  
    53  	in := helperTestReader(TestFile)
    54  
    55  	h := helperCorrectHeader()
    56  
    57  	rows := sqlmock.NewRows(h)
    58  
    59  	entry := make([]driver.Value, len(h))
    60  
    61  	for l := range in {
    62  		for i := range l {
    63  			entry[i] = driver.Value(l[i])
    64  		}
    65  
    66  		rows.AddRow(entry...)
    67  	}
    68  
    69  	// run SQL test
    70  	query := "SELECT"
    71  	mock.ExpectQuery(query).WillReturnRows(rows)
    72  
    73  	r := DB("ih-abstract.yml", db)
    74  
    75  	var counter int64
    76  
    77  	for range r.out {
    78  		atomic.AddInt64(&counter, 1)
    79  	}
    80  
    81  	<-r.done
    82  
    83  	t.Run("Read from mock SQL", func(t *testing.T) {
    84  		diff := cmp.Diff(int64(12), counter)
    85  		if diff != "" {
    86  			t.Fatalf(diff)
    87  		}
    88  	})
    89  }