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 }