github.com/neugram/ng@v0.0.0-20180309130942-d472ff93d872/frame/sqlframe/sqlframe_test.go (about)

     1  // Copyright 2015 The Neugram Authors. All rights reserved.
     2  // Use of this source code is governed by a BSD-style
     3  // license that can be found in the LICENSE file.
     4  
     5  package sqlframe
     6  
     7  import (
     8  	"database/sql"
     9  	"io/ioutil"
    10  	"os"
    11  	"testing"
    12  
    13  	_ "github.com/mattn/go-sqlite3"
    14  	"neugram.io/ng/frame/internal/frametest"
    15  )
    16  
    17  func createDB(t *testing.T) (db *sql.DB, cleanup func()) {
    18  	dbfile, err := ioutil.TempFile("", "sqlframe-sqlite-")
    19  	if err != nil {
    20  		t.Fatal(err)
    21  	}
    22  	dbfile.Close()
    23  	os.Remove(dbfile.Name())
    24  
    25  	db, err = sql.Open("sqlite3", dbfile.Name())
    26  	if err != nil {
    27  		t.Fatal(err)
    28  	}
    29  
    30  	return db, func() {
    31  		db.Close()
    32  		os.Remove(dbfile.Name())
    33  	}
    34  }
    35  
    36  func TestLoadPresidents(t *testing.T) {
    37  	db, cleanup := createDB(t)
    38  	defer cleanup()
    39  
    40  	txt := `
    41  	create table Presidents (
    42  		ID integer not null primary key,
    43  		Name text,
    44  		Term1 int,
    45  		Term2 int
    46  	);`
    47  	if _, err := db.Exec(txt); err != nil {
    48  		t.Fatal(err)
    49  	}
    50  	f, err := Load(db, "Presidents")
    51  	if err != nil {
    52  		t.Fatal(err)
    53  	}
    54  	frametest.LoadPresidents(t, f)
    55  }
    56  
    57  func TestLoadPresidentsNoPK(t *testing.T) {
    58  	db, cleanup := createDB(t)
    59  	defer cleanup()
    60  
    61  	txt := `
    62  	create table Presidents (
    63  		ID integer,
    64  		Name text,
    65  		Term1 int,
    66  		Term2 int
    67  	);`
    68  	if _, err := db.Exec(txt); err != nil {
    69  		t.Fatal(err)
    70  	}
    71  	f, err := Load(db, "Presidents")
    72  	if err != nil {
    73  		t.Fatal(err)
    74  	}
    75  	frametest.LoadPresidents(t, f)
    76  }
    77  
    78  // TODO wrap sqlframe in dummy frame, use default impls.
    79  // func TestLoadPresidentsNoSpec(t *testing.T)