From 0c2d9249ae0598f0972800892129957f38929972 Mon Sep 17 00:00:00 2001 From: WolfieLeader Date: Thu, 19 Mar 2026 03:00:51 +0200 Subject: [PATCH] Add tests for Version, Let, Unset, Upsert, Invalidate These public DB methods had only example tests but no suite test coverage with assertions. Follows the existing testify/suite pattern in db_test.go. Coverage for the main package increases from 57.7% to 58.6%. Info() is excluded due to a nil pointer dereference when the RPC returns a null result (db.go:152 dereferences *info.Result without a nil check). This will be reported separately as a bug. --- db_test.go | 68 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 68 insertions(+) diff --git a/db_test.go b/db_test.go index 6122cff..0e08f0f 100644 --- a/db_test.go +++ b/db_test.go @@ -527,6 +527,74 @@ func (s *SurrealDBTestSuite) TestQueryRaw() { s.Require().NoError(err) } +func (s *SurrealDBTestSuite) TestVersion() { + s.Run("returns version data", func() { + ver, err := s.db.Version(context.Background()) + s.Require().NoError(err) + s.Require().NotNil(ver) + }) +} + +func (s *SurrealDBTestSuite) TestLetUnset() { + s.Run("let sets variable readable via query", func() { + err := s.db.Let(context.Background(), "testvar", "hello") + s.Require().NoError(err) + + result, err := surrealdb.Query[string](context.Background(), s.db, "RETURN $testvar", nil) + s.Require().NoError(err) + s.Require().NotNil(result) + s.Equal("hello", (*result)[0].Result) + }) + + s.Run("unset removes variable", func() { + err := s.db.Let(context.Background(), "testvar2", "world") + s.Require().NoError(err) + + err = s.db.Unset(context.Background(), "testvar2") + s.Require().NoError(err) + + result, err := surrealdb.Query[any](context.Background(), s.db, "RETURN $testvar2", nil) + s.Require().NoError(err) + s.Require().NotNil(result) + s.Nil((*result)[0].Result) + }) +} + +func (s *SurrealDBTestSuite) TestUpsert() { + s.Run("creates record if not exists", func() { + user, err := surrealdb.Upsert[testUser](context.Background(), s.db, + models.NewRecordID("users", "upsert1"), + testUser{Username: "upsert_user", Password: "pass"}) + s.Require().NoError(err) + s.Require().NotNil(user) + s.Equal("upsert_user", user.Username) + }) + + s.Run("updates record if exists", func() { + _, err := surrealdb.Upsert[testUser](context.Background(), s.db, + models.NewRecordID("users", "upsert2"), + testUser{Username: "original", Password: "pass"}) + s.Require().NoError(err) + + user, err := surrealdb.Upsert[testUser](context.Background(), s.db, + models.NewRecordID("users", "upsert2"), + testUser{Username: "updated", Password: "pass"}) + s.Require().NoError(err) + s.Require().NotNil(user) + s.Equal("updated", user.Username) + }) +} + +func (s *SurrealDBTestSuite) TestInvalidate() { + s.Run("invalidates session", func() { + err := s.db.Invalidate(context.Background()) + s.Require().NoError(err) + + // Re-sign in so other tests are not affected + _ = signIn(s) + }) +} + func (s *SurrealDBTestSuite) TestRPCError() { s.Run("Test valid query", func() { _, err := surrealdb.Query[[]testUser](context.Background(), s.db, "SELECT * FROM users", map[string]any{})