summaryrefslogtreecommitdiff
path: root/testrig/teststructs.go
diff options
context:
space:
mode:
Diffstat (limited to 'testrig/teststructs.go')
-rw-r--r--testrig/teststructs.go121
1 files changed, 121 insertions, 0 deletions
diff --git a/testrig/teststructs.go b/testrig/teststructs.go
new file mode 100644
index 000000000..b88e37d55
--- /dev/null
+++ b/testrig/teststructs.go
@@ -0,0 +1,121 @@
+// 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 testrig
+
+import (
+ "github.com/superseriousbusiness/gotosocial/internal/cleaner"
+ "github.com/superseriousbusiness/gotosocial/internal/email"
+ "github.com/superseriousbusiness/gotosocial/internal/filter/interaction"
+ "github.com/superseriousbusiness/gotosocial/internal/filter/visibility"
+ "github.com/superseriousbusiness/gotosocial/internal/processing"
+ "github.com/superseriousbusiness/gotosocial/internal/processing/common"
+ "github.com/superseriousbusiness/gotosocial/internal/state"
+ "github.com/superseriousbusiness/gotosocial/internal/typeutils"
+)
+
+// TestStructs encapsulates structs needed to
+// run one test independently. Each test should
+// call SetupTestStructs to get a new TestStructs,
+// and defer TearDownTestStructs to close it when
+// the test is complete. The reason for doing things
+// this way here is to prevent the tests in a
+// package from overwriting one another's processors
+// and worker queues, which was causing issues
+// when running all tests at once.
+type TestStructs struct {
+ State *state.State
+ Common *common.Processor
+ Processor *processing.Processor
+ HTTPClient *MockHTTPClient
+ TypeConverter *typeutils.Converter
+ EmailSender email.Sender
+}
+
+func SetupTestStructs(
+ rMediaPath string,
+ rTemplatePath string,
+) *TestStructs {
+ state := state.State{}
+
+ state.Caches.Init()
+
+ db := NewTestDB(&state)
+ state.DB = db
+
+ storage := NewInMemoryStorage()
+ state.Storage = storage
+ typeconverter := typeutils.NewConverter(&state)
+ visFilter := visibility.NewFilter(&state)
+ intFilter := interaction.NewFilter(&state)
+
+ StartTimelines(
+ &state,
+ visFilter,
+ typeconverter,
+ )
+
+ httpClient := NewMockHTTPClient(nil, rMediaPath)
+ httpClient.TestRemotePeople = NewTestFediPeople()
+ httpClient.TestRemoteStatuses = NewTestFediStatuses()
+
+ transportController := NewTestTransportController(&state, httpClient)
+ mediaManager := NewTestMediaManager(&state)
+ federator := NewTestFederator(&state, transportController, mediaManager)
+ oauthServer := NewTestOauthServer(db)
+ emailSender := NewEmailSender(rTemplatePath, nil)
+
+ common := common.New(
+ &state,
+ mediaManager,
+ typeconverter,
+ federator,
+ visFilter,
+ )
+
+ processor := processing.NewProcessor(
+ cleaner.New(&state),
+ typeconverter,
+ federator,
+ oauthServer,
+ mediaManager,
+ &state,
+ emailSender,
+ visFilter,
+ intFilter,
+ )
+
+ StartWorkers(&state, processor.Workers())
+
+ StandardDBSetup(db, nil)
+ StandardStorageSetup(storage, rMediaPath)
+
+ return &TestStructs{
+ State: &state,
+ Common: &common,
+ Processor: processor,
+ HTTPClient: httpClient,
+ TypeConverter: typeconverter,
+ EmailSender: emailSender,
+ }
+}
+
+func TearDownTestStructs(testStructs *TestStructs) {
+ StandardDBTeardown(testStructs.State.DB)
+ StandardStorageTeardown(testStructs.State.Storage)
+ StopWorkers(testStructs.State)
+}