diff options
Diffstat (limited to 'internal/db/bundb')
| -rw-r--r-- | internal/db/bundb/admin.go | 13 | ||||
| -rw-r--r-- | internal/db/bundb/admin_test.go | 56 | 
2 files changed, 63 insertions, 6 deletions
| diff --git a/internal/db/bundb/admin.go b/internal/db/bundb/admin.go index 4381c1de8..accdf7e53 100644 --- a/internal/db/bundb/admin.go +++ b/internal/db/bundb/admin.go @@ -178,18 +178,19 @@ func (a *adminDB) NewSignup(ctx context.Context, username string, reason string,  func (a *adminDB) CreateInstanceAccount(ctx context.Context) db.Error {  	username := a.config.Host -	// check if instance account already exists -	existsQ := a.conn. +	q := a.conn.  		NewSelect().  		Model(>smodel.Account{}).  		Where("username = ?", username).  		WhereGroup(" AND ", whereEmptyOrNull("domain")) -	count, err := existsQ.Count(ctx) -	if err != nil && count == 1 { + +	exists, err := a.conn.Exists(ctx, q) +	if err != nil { +		return err +	} +	if exists {  		logrus.Infof("instance account %s already exists", username)  		return nil -	} else if err != sql.ErrNoRows { -		return a.conn.ProcessError(err)  	}  	key, err := rsa.GenerateKey(rand.Reader, 2048) diff --git a/internal/db/bundb/admin_test.go b/internal/db/bundb/admin_test.go new file mode 100644 index 000000000..a4c380c03 --- /dev/null +++ b/internal/db/bundb/admin_test.go @@ -0,0 +1,56 @@ +/* +   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 bundb_test + +import ( +	"context" +	"testing" + +	"github.com/stretchr/testify/suite" +	"github.com/superseriousbusiness/gotosocial/testrig" +) + +type AdminTestSuite struct { +	BunDBStandardTestSuite +} + +func (suite *AdminTestSuite) TestCreateInstanceAccount() { +	// we need to take an empty db for this... +	testrig.StandardDBTeardown(suite.db) +	// ...with tables created but no data +	testrig.CreateTestTables(suite.db) + +	// make sure there's no instance account in the db yet +	acct, err := suite.db.GetInstanceAccount(context.Background(), suite.config.Host) +	suite.Error(err) +	suite.Nil(acct) + +	// create it +	err = suite.db.CreateInstanceAccount(context.Background()) +	suite.NoError(err) + +	// and now check it exists +	acct, err = suite.db.GetInstanceAccount(context.Background(), suite.config.Host) +	suite.NoError(err) +	suite.NotNil(acct) +} + +func TestAdminTestSuite(t *testing.T) { +	suite.Run(t, new(AdminTestSuite)) +} | 
