mirror of
https://github.com/superseriousbusiness/gotosocial.git
synced 2025-12-30 00:26:15 -06:00
start with export/import code
This commit is contained in:
parent
a027da0ac9
commit
2ec36349c7
12 changed files with 460 additions and 6 deletions
39
internal/trans/exporter.go
Normal file
39
internal/trans/exporter.go
Normal file
|
|
@ -0,0 +1,39 @@
|
||||||
|
/*
|
||||||
|
GoToSocial
|
||||||
|
Copyright (C) 2021 GoToSocial Authors admin@gotosocial.org
|
||||||
|
|
||||||
|
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 trans
|
||||||
|
|
||||||
|
import (
|
||||||
|
"context"
|
||||||
|
|
||||||
|
"github.com/superseriousbusiness/gotosocial/internal/db"
|
||||||
|
)
|
||||||
|
|
||||||
|
type Exporter interface {
|
||||||
|
ExportMinimal(ctx context.Context, path string) error
|
||||||
|
}
|
||||||
|
|
||||||
|
type exporter struct {
|
||||||
|
db db.DB
|
||||||
|
}
|
||||||
|
|
||||||
|
func NewExporter(db db.DB) Exporter {
|
||||||
|
return &exporter{
|
||||||
|
db: db,
|
||||||
|
}
|
||||||
|
}
|
||||||
63
internal/trans/exportminimal.go
Normal file
63
internal/trans/exportminimal.go
Normal file
|
|
@ -0,0 +1,63 @@
|
||||||
|
/*
|
||||||
|
GoToSocial
|
||||||
|
Copyright (C) 2021 GoToSocial Authors admin@gotosocial.org
|
||||||
|
|
||||||
|
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 trans
|
||||||
|
|
||||||
|
import (
|
||||||
|
"bufio"
|
||||||
|
"context"
|
||||||
|
"encoding/json"
|
||||||
|
"fmt"
|
||||||
|
"os"
|
||||||
|
|
||||||
|
"github.com/superseriousbusiness/gotosocial/internal/db"
|
||||||
|
transmodel "github.com/superseriousbusiness/gotosocial/internal/trans/model"
|
||||||
|
)
|
||||||
|
|
||||||
|
func (e *exporter) ExportMinimal(ctx context.Context, path string) error {
|
||||||
|
f, err := os.Create(path)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
w := bufio.NewWriter(f)
|
||||||
|
encoder := json.NewEncoder(w)
|
||||||
|
|
||||||
|
accounts := []*transmodel.Account{}
|
||||||
|
if err := e.db.GetWhere(ctx, []db.Where{{Key: "domain", Value: nil}}, &accounts); err != nil {
|
||||||
|
return fmt.Errorf("error selecting accounts: %s", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
for _, a := range accounts {
|
||||||
|
encoder.Encode(a)
|
||||||
|
}
|
||||||
|
|
||||||
|
return neatClose(w, f)
|
||||||
|
}
|
||||||
|
|
||||||
|
func neatClose(w *bufio.Writer, f *os.File) error {
|
||||||
|
if err := w.Flush(); err != nil {
|
||||||
|
return fmt.Errorf("error flushing writer: %s", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
if err := f.Close(); err != nil {
|
||||||
|
return fmt.Errorf("error closing file: %s", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
54
internal/trans/exportminimal_test.go
Normal file
54
internal/trans/exportminimal_test.go
Normal file
|
|
@ -0,0 +1,54 @@
|
||||||
|
/*
|
||||||
|
GoToSocial
|
||||||
|
Copyright (C) 2021 GoToSocial Authors admin@gotosocial.org
|
||||||
|
|
||||||
|
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 trans_test
|
||||||
|
|
||||||
|
import (
|
||||||
|
"context"
|
||||||
|
"fmt"
|
||||||
|
"os"
|
||||||
|
"testing"
|
||||||
|
|
||||||
|
"github.com/google/uuid"
|
||||||
|
"github.com/stretchr/testify/suite"
|
||||||
|
"github.com/superseriousbusiness/gotosocial/internal/trans"
|
||||||
|
)
|
||||||
|
|
||||||
|
type ExportMinimalTestSuite struct {
|
||||||
|
TransTestSuite
|
||||||
|
}
|
||||||
|
|
||||||
|
func (suite *ExportMinimalTestSuite) TestExportMinimalOK() {
|
||||||
|
// use a temporary file path that will be cleaned when the test is closed
|
||||||
|
tempFilePath := fmt.Sprintf("%s/%s", suite.T().TempDir(), uuid.NewString())
|
||||||
|
|
||||||
|
// export to the tempFilePath
|
||||||
|
exporter := trans.NewExporter(suite.db)
|
||||||
|
err := exporter.ExportMinimal(context.Background(), tempFilePath)
|
||||||
|
suite.NoError(err)
|
||||||
|
|
||||||
|
// we should have some bytes in that file now
|
||||||
|
b, err := os.ReadFile(tempFilePath)
|
||||||
|
suite.NoError(err)
|
||||||
|
suite.NotEmpty(b)
|
||||||
|
suite.T().Log(string(b))
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestExportMinimalTestSuite(t *testing.T) {
|
||||||
|
suite.Run(t, &ExportMinimalTestSuite{})
|
||||||
|
}
|
||||||
48
internal/trans/model/account.go
Normal file
48
internal/trans/model/account.go
Normal file
|
|
@ -0,0 +1,48 @@
|
||||||
|
/*
|
||||||
|
GoToSocial
|
||||||
|
Copyright (C) 2021 GoToSocial Authors admin@gotosocial.org
|
||||||
|
|
||||||
|
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 trans
|
||||||
|
|
||||||
|
import (
|
||||||
|
"crypto/rsa"
|
||||||
|
"time"
|
||||||
|
)
|
||||||
|
|
||||||
|
// Account represents the minimum viable representation of an account for export/import.
|
||||||
|
type Account struct {
|
||||||
|
ID string `json:"id"`
|
||||||
|
CreatedAt *time.Time `json:"created_at"`
|
||||||
|
UpdatedAt *time.Time `json:"updated_at"`
|
||||||
|
Username string `json:"username"`
|
||||||
|
Domain string `json:"domain,omitempty"`
|
||||||
|
Locked bool `json:"locked"`
|
||||||
|
Language string `json:"language,omitempty"`
|
||||||
|
URI string `json:"uri"`
|
||||||
|
URL string `json:"url"`
|
||||||
|
InboxURI string `json:"inbox_uri"`
|
||||||
|
OutboxURI string `json:"outbox_uri"`
|
||||||
|
FollowingURI string `json:"following_uri"`
|
||||||
|
FollowersURI string `json:"followers_uri"`
|
||||||
|
FeaturedCollectionURI string `json:"featured_collection_uri"`
|
||||||
|
ActorType string `json:"actor_type"`
|
||||||
|
PrivateKey *rsa.PrivateKey `json:"private_key,omitempty"`
|
||||||
|
PublicKey *rsa.PublicKey `json:"public_key"`
|
||||||
|
PublicKeyURI string `json:"public_key_uri"`
|
||||||
|
SuspendedAt *time.Time `json:"suspended_at,omitempty"`
|
||||||
|
SuspensionOrigin string `json:"suspension_origin,omitempty"`
|
||||||
|
}
|
||||||
57
internal/trans/model/account_test.go
Normal file
57
internal/trans/model/account_test.go
Normal file
|
|
@ -0,0 +1,57 @@
|
||||||
|
/*
|
||||||
|
GoToSocial
|
||||||
|
Copyright (C) 2021 GoToSocial Authors admin@gotosocial.org
|
||||||
|
|
||||||
|
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 trans_test
|
||||||
|
|
||||||
|
import (
|
||||||
|
"context"
|
||||||
|
"encoding/json"
|
||||||
|
"testing"
|
||||||
|
|
||||||
|
"github.com/stretchr/testify/suite"
|
||||||
|
trans "github.com/superseriousbusiness/gotosocial/internal/trans/model"
|
||||||
|
)
|
||||||
|
|
||||||
|
type AccountTestSuite struct {
|
||||||
|
ModelTestSuite
|
||||||
|
}
|
||||||
|
|
||||||
|
func (suite *AccountTestSuite) TestAccountsIdempotent() {
|
||||||
|
// we should be able to get all accounts with the simple trans.Account struct
|
||||||
|
accounts := []*trans.Account{}
|
||||||
|
err := suite.db.GetAll(context.Background(), &accounts)
|
||||||
|
suite.NoError(err)
|
||||||
|
suite.NotEmpty(accounts)
|
||||||
|
|
||||||
|
// we should be able to marshal the accounts to json with no problems
|
||||||
|
b, err := json.Marshal(&accounts)
|
||||||
|
suite.NoError(err)
|
||||||
|
suite.NotNil(b)
|
||||||
|
suite.T().Log(string(b))
|
||||||
|
|
||||||
|
// the json should be idempotent
|
||||||
|
mAccounts := []*trans.Account{}
|
||||||
|
err = json.Unmarshal(b, &mAccounts)
|
||||||
|
suite.NoError(err)
|
||||||
|
suite.NotEmpty(mAccounts)
|
||||||
|
suite.EqualValues(accounts, mAccounts)
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestAccountTestSuite(t *testing.T) {
|
||||||
|
suite.Run(t, &AccountTestSuite{})
|
||||||
|
}
|
||||||
30
internal/trans/model/block.go
Normal file
30
internal/trans/model/block.go
Normal file
|
|
@ -0,0 +1,30 @@
|
||||||
|
/*
|
||||||
|
GoToSocial
|
||||||
|
Copyright (C) 2021 GoToSocial Authors admin@gotosocial.org
|
||||||
|
|
||||||
|
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 trans
|
||||||
|
|
||||||
|
import "time"
|
||||||
|
|
||||||
|
type Block struct {
|
||||||
|
ID string `json:"id"`
|
||||||
|
CreatedAt time.Time `json:"created_at"`
|
||||||
|
UpdatedAt time.Time `json:"updated_at"`
|
||||||
|
URI string `json:"uri"`
|
||||||
|
AccountID string `json:"account_id"`
|
||||||
|
TargetAccountID string `json:"target_account_id"`
|
||||||
|
}
|
||||||
57
internal/trans/model/block_test.go
Normal file
57
internal/trans/model/block_test.go
Normal file
|
|
@ -0,0 +1,57 @@
|
||||||
|
/*
|
||||||
|
GoToSocial
|
||||||
|
Copyright (C) 2021 GoToSocial Authors admin@gotosocial.org
|
||||||
|
|
||||||
|
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 trans_test
|
||||||
|
|
||||||
|
import (
|
||||||
|
"context"
|
||||||
|
"encoding/json"
|
||||||
|
"testing"
|
||||||
|
|
||||||
|
"github.com/stretchr/testify/suite"
|
||||||
|
trans "github.com/superseriousbusiness/gotosocial/internal/trans/model"
|
||||||
|
)
|
||||||
|
|
||||||
|
type BlockTestSuite struct {
|
||||||
|
ModelTestSuite
|
||||||
|
}
|
||||||
|
|
||||||
|
func (suite *AccountTestSuite) TestBlocksIdempotent() {
|
||||||
|
// we should be able to get all blocks with the simple trans.Block struct
|
||||||
|
blocks := []*trans.Block{}
|
||||||
|
err := suite.db.GetAll(context.Background(), &blocks)
|
||||||
|
suite.NoError(err)
|
||||||
|
suite.NotEmpty(blocks)
|
||||||
|
|
||||||
|
// we should be able to marshal the blocks to json with no problems
|
||||||
|
b, err := json.Marshal(&blocks)
|
||||||
|
suite.NoError(err)
|
||||||
|
suite.NotNil(b)
|
||||||
|
suite.T().Log(string(b))
|
||||||
|
|
||||||
|
// the json should be idempotent
|
||||||
|
mBlocks := []*trans.Block{}
|
||||||
|
err = json.Unmarshal(b, &mBlocks)
|
||||||
|
suite.NoError(err)
|
||||||
|
suite.NotEmpty(mBlocks)
|
||||||
|
suite.EqualValues(blocks, mBlocks)
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestBlockTestSuite(t *testing.T) {
|
||||||
|
suite.Run(t, &BlockTestSuite{})
|
||||||
|
}
|
||||||
3
internal/trans/model/domainblock.go
Normal file
3
internal/trans/model/domainblock.go
Normal file
|
|
@ -0,0 +1,3 @@
|
||||||
|
package trans
|
||||||
|
|
||||||
|
|
||||||
39
internal/trans/model/model_test.go
Normal file
39
internal/trans/model/model_test.go
Normal file
|
|
@ -0,0 +1,39 @@
|
||||||
|
/*
|
||||||
|
GoToSocial
|
||||||
|
Copyright (C) 2021 GoToSocial Authors admin@gotosocial.org
|
||||||
|
|
||||||
|
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 trans_test
|
||||||
|
|
||||||
|
import (
|
||||||
|
"github.com/stretchr/testify/suite"
|
||||||
|
"github.com/superseriousbusiness/gotosocial/internal/db"
|
||||||
|
"github.com/superseriousbusiness/gotosocial/testrig"
|
||||||
|
)
|
||||||
|
|
||||||
|
type ModelTestSuite struct {
|
||||||
|
suite.Suite
|
||||||
|
db db.DB
|
||||||
|
}
|
||||||
|
|
||||||
|
func (suite *ModelTestSuite) SetupTest() {
|
||||||
|
suite.db = testrig.NewTestDB()
|
||||||
|
testrig.StandardDBSetup(suite.db, nil)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (suite *ModelTestSuite) TearDownTest() {
|
||||||
|
testrig.StandardDBTeardown(suite.db)
|
||||||
|
}
|
||||||
39
internal/trans/trans_test.go
Normal file
39
internal/trans/trans_test.go
Normal file
|
|
@ -0,0 +1,39 @@
|
||||||
|
/*
|
||||||
|
GoToSocial
|
||||||
|
Copyright (C) 2021 GoToSocial Authors admin@gotosocial.org
|
||||||
|
|
||||||
|
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 trans_test
|
||||||
|
|
||||||
|
import (
|
||||||
|
"github.com/stretchr/testify/suite"
|
||||||
|
"github.com/superseriousbusiness/gotosocial/internal/db"
|
||||||
|
"github.com/superseriousbusiness/gotosocial/testrig"
|
||||||
|
)
|
||||||
|
|
||||||
|
type TransTestSuite struct {
|
||||||
|
suite.Suite
|
||||||
|
db db.DB
|
||||||
|
}
|
||||||
|
|
||||||
|
func (suite *TransTestSuite) SetupTest() {
|
||||||
|
suite.db = testrig.NewTestDB()
|
||||||
|
testrig.StandardDBSetup(suite.db, nil)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (suite *TransTestSuite) TearDownTest() {
|
||||||
|
testrig.StandardDBTeardown(suite.db)
|
||||||
|
}
|
||||||
|
|
@ -72,6 +72,16 @@ func NewTestDB() db.DB {
|
||||||
return testDB
|
return testDB
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// CreateTestTables creates prerequisite test tables in the database, but doesn't populate them.
|
||||||
|
func CreateTestTables(db db.DB) {
|
||||||
|
ctx := context.Background()
|
||||||
|
for _, m := range testModels {
|
||||||
|
if err := db.CreateTable(ctx, m); err != nil {
|
||||||
|
logrus.Panicf("error creating table for %+v: %s", m, err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// StandardDBSetup populates a given db with all the necessary tables/models for perfoming tests.
|
// StandardDBSetup populates a given db with all the necessary tables/models for perfoming tests.
|
||||||
//
|
//
|
||||||
// The accounts parameter is provided in case the db should be populated with a certain set of accounts.
|
// The accounts parameter is provided in case the db should be populated with a certain set of accounts.
|
||||||
|
|
@ -85,13 +95,9 @@ func StandardDBSetup(db db.DB, accounts map[string]*gtsmodel.Account) {
|
||||||
logrus.Panic("db setup: db was nil")
|
logrus.Panic("db setup: db was nil")
|
||||||
}
|
}
|
||||||
|
|
||||||
ctx := context.Background()
|
CreateTestTables(db)
|
||||||
|
|
||||||
for _, m := range testModels {
|
ctx := context.Background()
|
||||||
if err := db.CreateTable(ctx, m); err != nil {
|
|
||||||
logrus.Panicf("error creating table for %+v: %s", m, err)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
for _, v := range NewTestTokens() {
|
for _, v := range NewTestTokens() {
|
||||||
if err := db.Put(ctx, v); err != nil {
|
if err := db.Put(ctx, v); err != nil {
|
||||||
|
|
@ -111,6 +117,12 @@ func StandardDBSetup(db db.DB, accounts map[string]*gtsmodel.Account) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
for _, v := range NewTestBlocks() {
|
||||||
|
if err := db.Put(ctx, v); err != nil {
|
||||||
|
logrus.Panic(err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
for _, v := range NewTestUsers() {
|
for _, v := range NewTestUsers() {
|
||||||
if err := db.Put(ctx, v); err != nil {
|
if err := db.Put(ctx, v); err != nil {
|
||||||
logrus.Panic(err)
|
logrus.Panic(err)
|
||||||
|
|
|
||||||
|
|
@ -1215,6 +1215,19 @@ func NewTestFollows() map[string]*gtsmodel.Follow {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func NewTestBlocks() map[string]*gtsmodel.Block {
|
||||||
|
return map[string]*gtsmodel.Block{
|
||||||
|
"local_account_2_block_remote_account_1": {
|
||||||
|
ID: "01FEXXET6XXMF7G2V3ASZP3YQW",
|
||||||
|
CreatedAt: time.Now().Add(-1 * time.Hour),
|
||||||
|
UpdatedAt: time.Now().Add(-1 * time.Hour),
|
||||||
|
URI: "http://localhost:8080/users/1happyturtle/blocks/01FEXXET6XXMF7G2V3ASZP3YQW",
|
||||||
|
AccountID: "01F8MH5NBDF2MV7CTC4Q5128HF",
|
||||||
|
TargetAccountID: "01F8MH5ZK5VRH73AKHQM6Y9VNX",
|
||||||
|
},
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// ActivityWithSignature wraps a pub.Activity along with its signature headers, for testing.
|
// ActivityWithSignature wraps a pub.Activity along with its signature headers, for testing.
|
||||||
type ActivityWithSignature struct {
|
type ActivityWithSignature struct {
|
||||||
Activity pub.Activity
|
Activity pub.Activity
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue