github.com/k0marov/go-socnet@v0.0.0-20220715154813-90d07867c782/core/abstract/deletable/store/sql_db/sql_db_test.go (about)

     1  package sql_db_test
     2  
     3  import (
     4  	"github.com/jmoiron/sqlx"
     5  	"github.com/k0marov/go-socnet/core/abstract/deletable/store/sql_db"
     6  	"github.com/k0marov/go-socnet/core/abstract/table_name"
     7  	. "github.com/k0marov/go-socnet/core/helpers/test_helpers"
     8  	_ "github.com/mattn/go-sqlite3"
     9  	"testing"
    10  )
    11  
    12  var targetTblName = table_name.NewTableName("Target")
    13  
    14  func TestSqlDB_ErrorHandling(t *testing.T) {
    15  	db := OpenSqliteDB(t)
    16  	sqlDB := setupSqlDB(t, db)
    17  	db.Close() // this will make all calls to db throw
    18  	t.Run("Delete", func(t *testing.T) {
    19  		err := sqlDB.Delete(RandomId())
    20  		AssertSomeError(t, err)
    21  	})
    22  }
    23  
    24  func TestSqlDB_Injection(t *testing.T) {
    25  	db := OpenSqliteDB(t)
    26  	_, err := sql_db.NewSqlDB(db, table_name.NewTableName("'; DROP TABLE Students; --"))
    27  	AssertSomeError(t, err)
    28  }
    29  
    30  func TestSqlDB(t *testing.T) {
    31  	db := OpenSqliteDB(t)
    32  	sqlDB := setupSqlDB(t, db)
    33  
    34  	targetTable, err := targetTblName.Value()
    35  	AssertNoError(t, err)
    36  
    37  	targetId := createTargetEntity(t, db)
    38  	err = sqlDB.Delete(targetId)
    39  	AssertNoError(t, err)
    40  
    41  	row := db.QueryRow(`
    42  		SELECT EXISTS(SELECT 1 FROM `+targetTable+` WHERE id = ?); 
    43      `, targetId)
    44  	var stillExists bool
    45  	row.Scan(&stillExists)
    46  
    47  	Assert(t, stillExists, false, "target still exists in db")
    48  }
    49  
    50  func setupSqlDB(t testing.TB, db *sqlx.DB) *sql_db.SqlDB {
    51  	t.Helper()
    52  	targetTable, err := targetTblName.Value()
    53  	AssertNoError(t, err)
    54  	_, err = db.Exec(`
    55  		CREATE TABLE IF NOT EXISTS ` + targetTable + `(
    56  		    id INTEGER PRIMARY KEY 
    57  		)
    58      `)
    59  	AssertNoError(t, err)
    60  	sqlDB, err := sql_db.NewSqlDB(db, targetTblName)
    61  	AssertNoError(t, err)
    62  	return sqlDB
    63  }
    64  
    65  func createTargetEntity(t testing.TB, db *sqlx.DB) (id string) {
    66  	t.Helper()
    67  	targetTable, err := targetTblName.Value()
    68  	AssertNoError(t, err)
    69  	id = RandomId()
    70  	_, err = db.Exec(`
    71  		INSERT INTO `+targetTable+`(id) VALUES (?)
    72      `, id)
    73  	AssertNoError(t, err)
    74  	return
    75  }