summaryrefslogtreecommitdiff
path: root/internal/db/bundb/application_test.go
diff options
context:
space:
mode:
authorLibravatar kim <89579420+NyaaaWhatsUpDoc@users.noreply.github.com>2023-08-10 15:08:41 +0100
committerLibravatar GitHub <noreply@github.com>2023-08-10 15:08:41 +0100
commit91cbcd589e7c4ab87e5994e4d0276ea1248dc5c2 (patch)
treea6b12c30168eb5fed4267dcb6a1f385b86afdcdf /internal/db/bundb/application_test.go
parent[feature] List replies policy, refactor async workers (#2087) (diff)
downloadgotosocial-91cbcd589e7c4ab87e5994e4d0276ea1248dc5c2.tar.xz
[performance] remove last of relational queries to instead rely on caches (#2091)
Diffstat (limited to 'internal/db/bundb/application_test.go')
-rw-r--r--internal/db/bundb/application_test.go128
1 files changed, 128 insertions, 0 deletions
diff --git a/internal/db/bundb/application_test.go b/internal/db/bundb/application_test.go
new file mode 100644
index 000000000..d2ab05ebd
--- /dev/null
+++ b/internal/db/bundb/application_test.go
@@ -0,0 +1,128 @@
+// GoToSocial
+// Copyright (C) GoToSocial Authors admin@gotosocial.org
+// SPDX-License-Identifier: AGPL-3.0-or-later
+//
+// This program is free software: you can redistribute it and/or modify
+// it under the terms of the GNU Affero General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU Affero General Public License for more details.
+//
+// You should have received a copy of the GNU Affero General Public License
+// along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+package bundb_test
+
+import (
+ "context"
+ "errors"
+ "reflect"
+ "testing"
+ "time"
+
+ "github.com/stretchr/testify/suite"
+ "github.com/superseriousbusiness/gotosocial/internal/db"
+ "github.com/superseriousbusiness/gotosocial/internal/gtsmodel"
+)
+
+type ApplicationTestSuite struct {
+ BunDBStandardTestSuite
+}
+
+func (suite *ApplicationTestSuite) TestGetApplicationBy() {
+ t := suite.T()
+
+ // Create a new context for this test.
+ ctx, cncl := context.WithCancel(context.Background())
+ defer cncl()
+
+ // Sentinel error to mark avoiding a test case.
+ sentinelErr := errors.New("sentinel")
+
+ // isEqual checks if 2 application models are equal.
+ isEqual := func(a1, a2 gtsmodel.Application) bool {
+ // Clear database-set fields.
+ a1.CreatedAt = time.Time{}
+ a2.CreatedAt = time.Time{}
+ a1.UpdatedAt = time.Time{}
+ a2.UpdatedAt = time.Time{}
+
+ return reflect.DeepEqual(a1, a2)
+ }
+
+ for _, app := range suite.testApplications {
+ for lookup, dbfunc := range map[string]func() (*gtsmodel.Application, error){
+ "id": func() (*gtsmodel.Application, error) {
+ return suite.db.GetApplicationByID(ctx, app.ID)
+ },
+
+ "client_id": func() (*gtsmodel.Application, error) {
+ return suite.db.GetApplicationByClientID(ctx, app.ClientID)
+ },
+ } {
+ // Clear database caches.
+ suite.state.Caches.Init()
+
+ t.Logf("checking database lookup %q", lookup)
+
+ // Perform database function.
+ checkApp, err := dbfunc()
+ if err != nil {
+ if err == sentinelErr {
+ continue
+ }
+
+ t.Errorf("error encountered for database lookup %q: %v", lookup, err)
+ continue
+ }
+
+ // Check received application data.
+ if !isEqual(*checkApp, *app) {
+ t.Errorf("application does not contain expected data: %+v", checkApp)
+ continue
+ }
+ }
+ }
+}
+
+func (suite *ApplicationTestSuite) TestDeleteApplicationBy() {
+ t := suite.T()
+
+ // Create a new context for this test.
+ ctx, cncl := context.WithCancel(context.Background())
+ defer cncl()
+
+ for _, app := range suite.testApplications {
+ for lookup, dbfunc := range map[string]func() error{
+ "client_id": func() error {
+ return suite.db.DeleteApplicationByClientID(ctx, app.ClientID)
+ },
+ } {
+ // Clear database caches.
+ suite.state.Caches.Init()
+
+ t.Logf("checking database lookup %q", lookup)
+
+ // Perform database function.
+ err := dbfunc()
+ if err != nil {
+ t.Errorf("error encountered for database lookup %q: %v", lookup, err)
+ continue
+ }
+
+ // Ensure this application has been deleted and cache cleared.
+ if _, err := suite.db.GetApplicationByID(ctx, app.ID); err != db.ErrNoEntries {
+ t.Errorf("application does not appear to have been deleted %q: %v", lookup, err)
+ continue
+ }
+ }
+ }
+}
+
+func TestApplicationTestSuite(t *testing.T) {
+ suite.Run(t, new(ApplicationTestSuite))
+}