diff --git a/register_test.go b/register_test.go new file mode 100644 index 0000000..64a1acd --- /dev/null +++ b/register_test.go @@ -0,0 +1,15 @@ +package sql + +import ( + "testing" + + "github.com/grafana/xk6-sql/sql" + "github.com/stretchr/testify/require" + "go.k6.io/k6/ext" +) + +func Test_register(t *testing.T) { + t.Parallel() + + require.Contains(t, ext.Get(ext.JSExtension), sql.ImportPath) +} diff --git a/sql/sql_internal_test.go b/sql/sql_internal_test.go new file mode 100644 index 0000000..05765a5 --- /dev/null +++ b/sql/sql_internal_test.go @@ -0,0 +1,28 @@ +package sql + +import ( + "testing" + + "github.com/grafana/sobek" + "github.com/stretchr/testify/require" +) + +func TestOpen(t *testing.T) { //nolint: paralleltest + mod := New().NewModuleInstance(nil).(*module) + + driver := RegisterDriver("ramsql") + require.NotNil(t, driver) + + db, err := mod.Open(driver, "") + + require.NoError(t, err) + require.NotNil(t, db) + + _, err = mod.Open(sobek.New().ToValue("foo"), "testdb") // not a Symbol + + require.Error(t, err) + + _, err = mod.Open(sobek.NewSymbol("ramsql"), "testdb") // not a registered Symbol + + require.Error(t, err) +} diff --git a/sqltest/sqltest_test.go b/sqltest/sqltest_test.go new file mode 100644 index 0000000..d29e4de --- /dev/null +++ b/sqltest/sqltest_test.go @@ -0,0 +1,22 @@ +package sqltest_test + +import ( + _ "embed" + "testing" + + "github.com/grafana/xk6-sql/sql" + "github.com/grafana/xk6-sql/sqltest" + + _ "github.com/proullon/ramsql/driver" +) + +//go:embed testdata/script.js +var script string + +func TestRunScript(t *testing.T) { + t.Parallel() + + sql.RegisterModule("ramsql") + + sqltest.RunScript(t, "ramsql", "testdb", script) +} diff --git a/sqltest/testdata/script.js b/sqltest/testdata/script.js new file mode 100644 index 0000000..90d0a15 --- /dev/null +++ b/sqltest/testdata/script.js @@ -0,0 +1,24 @@ +const db = sql.open(driver, connection); + +db.exec("CREATE TABLE test_table (id integer PRIMARY KEY AUTOINCREMENT, name varchar NOT NULL, value varchar);"); + +for (let i = 0; i < 5; i++) { + db.exec("INSERT INTO test_table (name, value) VALUES ('name-" + i + "', 'value-" + i + "');"); +} + +let all_rows = db.query("SELECT * FROM test_table;"); +if (all_rows.length != 5) { + throw new Error("Expected all five rows to be returned; got " + all_rows.length); +} + +let one_row = db.query("SELECT * FROM test_table WHERE name = $1;", "name-2"); +if (one_row.length != 1) { + throw new Error("Expected single row to be returned; got " + one_row.length); +} + +let no_rows = db.query("SELECT * FROM test_table WHERE name = $1;", "bogus-name"); +if (no_rows.length != 0) { + throw new Error("Expected no rows to be returned; got " + no_rows.length); +} + +db.close();