summaryrefslogtreecommitdiff
path: root/internal/validate
diff options
context:
space:
mode:
Diffstat (limited to 'internal/validate')
-rw-r--r--internal/validate/account_test.go343
-rw-r--r--internal/validate/application_test.go132
-rw-r--r--internal/validate/block_test.go115
-rw-r--r--internal/validate/client_test.go101
-rw-r--r--internal/validate/domainblock_test.go122
-rw-r--r--internal/validate/emaildomainblock_test.go96
-rw-r--r--internal/validate/emoji_test.go195
-rw-r--r--internal/validate/follow_test.go87
-rw-r--r--internal/validate/followrequest_test.go87
-rw-r--r--internal/validate/instance_test.go145
-rw-r--r--internal/validate/mediaattachment_test.go230
-rw-r--r--internal/validate/mention_test.go101
-rw-r--r--internal/validate/notification_test.go97
-rw-r--r--internal/validate/routersession_test.go87
-rw-r--r--internal/validate/status_test.go160
-rw-r--r--internal/validate/statusbookmark_test.go87
-rw-r--r--internal/validate/statusfave_test.go100
-rw-r--r--internal/validate/statusmute_test.go87
-rw-r--r--internal/validate/structvalidation.go67
-rw-r--r--internal/validate/structvalidation_test.go70
-rw-r--r--internal/validate/token_test.go98
-rw-r--r--internal/validate/user_test.go134
22 files changed, 0 insertions, 2741 deletions
diff --git a/internal/validate/account_test.go b/internal/validate/account_test.go
deleted file mode 100644
index 57f0f4900..000000000
--- a/internal/validate/account_test.go
+++ /dev/null
@@ -1,343 +0,0 @@
-// 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 validate_test
-
-import (
- "crypto/rand"
- "crypto/rsa"
- "testing"
- "time"
-
- "github.com/stretchr/testify/suite"
- "github.com/superseriousbusiness/gotosocial/internal/ap"
- "github.com/superseriousbusiness/gotosocial/internal/gtsmodel"
- "github.com/superseriousbusiness/gotosocial/internal/validate"
- "github.com/superseriousbusiness/gotosocial/testrig"
-)
-
-func happyAccount() *gtsmodel.Account {
- priv, err := rsa.GenerateKey(rand.Reader, 2048)
- if err != nil {
- panic(err)
- }
- pub := &priv.PublicKey
-
- return &gtsmodel.Account{
- ID: "01F8MH1H7YV1Z7D2C8K2730QBF",
- CreatedAt: time.Now().Add(-48 * time.Hour),
- UpdatedAt: time.Now().Add(-48 * time.Hour),
- Username: "the_mighty_zork",
- Domain: "",
- AvatarMediaAttachmentID: "01F8MH58A357CV5K7R7TJMSH6S",
- AvatarMediaAttachment: nil,
- AvatarRemoteURL: "",
- HeaderMediaAttachmentID: "01PFPMWK2FF0D9WMHEJHR07C3Q",
- HeaderMediaAttachment: nil,
- HeaderRemoteURL: "",
- DisplayName: "original zork (he/they)",
- Fields: []*gtsmodel.Field{},
- Note: "hey yo this is my profile!",
- Memorial: testrig.FalseBool(),
- AlsoKnownAs: "",
- MovedToAccountID: "",
- Bot: testrig.FalseBool(),
- Reason: "I wanna be on this damned webbed site so bad! Please! Wow",
- Locked: testrig.FalseBool(),
- Discoverable: testrig.TrueBool(),
- Privacy: gtsmodel.VisibilityPublic,
- Sensitive: testrig.FalseBool(),
- Language: "en",
- StatusContentType: "text/plain",
- URI: "http://localhost:8080/users/the_mighty_zork",
- URL: "http://localhost:8080/@the_mighty_zork",
- FetchedAt: time.Time{},
- InboxURI: "http://localhost:8080/users/the_mighty_zork/inbox",
- OutboxURI: "http://localhost:8080/users/the_mighty_zork/outbox",
- FollowersURI: "http://localhost:8080/users/the_mighty_zork/followers",
- FollowingURI: "http://localhost:8080/users/the_mighty_zork/following",
- FeaturedCollectionURI: "http://localhost:8080/users/the_mighty_zork/collections/featured",
- ActorType: ap.ActorPerson,
- PrivateKey: priv,
- PublicKey: pub,
- PublicKeyURI: "http://localhost:8080/users/the_mighty_zork#main-key",
- SensitizedAt: time.Time{},
- SilencedAt: time.Time{},
- SuspendedAt: time.Time{},
- HideCollections: testrig.FalseBool(),
- SuspensionOrigin: "",
- }
-}
-
-type AccountValidateTestSuite struct {
- suite.Suite
-}
-
-func (suite *AccountValidateTestSuite) TestValidateAccountHappyPath() {
- // no problem here
- a := happyAccount()
- err := validate.Struct(*a)
- suite.NoError(err)
-}
-
-// ID must be set and be valid ULID
-func (suite *AccountValidateTestSuite) TestValidateAccountBadID() {
- a := happyAccount()
-
- a.ID = ""
- err := validate.Struct(*a)
- suite.EqualError(err, "Key: 'Account.ID' Error:Field validation for 'ID' failed on the 'required' tag")
-
- a.ID = "01FE96W293ZPRG9FQQP48HK8N001FE96W32AT24VYBGM12WN3GKB"
- err = validate.Struct(*a)
- suite.EqualError(err, "Key: 'Account.ID' Error:Field validation for 'ID' failed on the 'ulid' tag")
-}
-
-// CreatedAt can be set or not -- it will be set in the database anyway
-func (suite *AccountValidateTestSuite) TestValidateAccountNoCreatedAt() {
- a := happyAccount()
-
- a.CreatedAt = time.Time{}
- err := validate.Struct(*a)
- suite.NoError(err)
-}
-
-// FetchedAt must be defined if remote account
-func (suite *AccountValidateTestSuite) TestValidateAccountNoWebfingeredAt() {
- a := happyAccount()
-
- a.Domain = "example.org"
- a.FetchedAt = time.Time{}
- err := validate.Struct(*a)
- suite.EqualError(err, "Key: 'Account.FetchedAt' Error:Field validation for 'FetchedAt' failed on the 'required_with' tag")
-}
-
-// Username must be set
-func (suite *AccountValidateTestSuite) TestValidateAccountUsername() {
- a := happyAccount()
-
- a.Username = ""
- err := validate.Struct(*a)
- suite.EqualError(err, "Key: 'Account.Username' Error:Field validation for 'Username' failed on the 'required' tag")
-}
-
-// Domain must be either empty (for local accounts) or proper fqdn (for remote accounts)
-func (suite *AccountValidateTestSuite) TestValidateAccountDomain() {
- a := happyAccount()
- a.FetchedAt = time.Now()
-
- a.Domain = ""
- err := validate.Struct(*a)
- suite.NoError(err)
-
- a.Domain = "localhost:8080"
- err = validate.Struct(*a)
- suite.EqualError(err, "Key: 'Account.Domain' Error:Field validation for 'Domain' failed on the 'fqdn' tag")
-
- a.Domain = "ahhhhh"
- err = validate.Struct(*a)
- suite.EqualError(err, "Key: 'Account.Domain' Error:Field validation for 'Domain' failed on the 'fqdn' tag")
-
- a.Domain = "https://www.example.org"
- err = validate.Struct(*a)
- suite.EqualError(err, "Key: 'Account.Domain' Error:Field validation for 'Domain' failed on the 'fqdn' tag")
-
- a.Domain = "example.org:8080"
- err = validate.Struct(*a)
- suite.EqualError(err, "Key: 'Account.Domain' Error:Field validation for 'Domain' failed on the 'fqdn' tag")
-
- a.Domain = "example.org"
- err = validate.Struct(*a)
- suite.NoError(err)
-}
-
-// Attachment IDs must either be not set, or must be valid ULID
-func (suite *AccountValidateTestSuite) TestValidateAttachmentIDs() {
- a := happyAccount()
-
- a.AvatarMediaAttachmentID = ""
- a.HeaderMediaAttachmentID = ""
- err := validate.Struct(*a)
- suite.NoError(err)
-
- a.AvatarMediaAttachmentID = "01FE96W293ZPRG9FQQP48HK8N001FE96W32AT24VYBGM12WN3GKB"
- a.HeaderMediaAttachmentID = "aaaa"
- err = validate.Struct(*a)
- suite.EqualError(err, "Key: 'Account.AvatarMediaAttachmentID' Error:Field validation for 'AvatarMediaAttachmentID' failed on the 'ulid' tag\nKey: 'Account.HeaderMediaAttachmentID' Error:Field validation for 'HeaderMediaAttachmentID' failed on the 'ulid' tag")
-}
-
-// Attachment remote URLs must either not be set, or be valid URLs
-func (suite *AccountValidateTestSuite) TestValidateAttachmentRemoteURLs() {
- a := happyAccount()
-
- a.AvatarRemoteURL = ""
- a.HeaderRemoteURL = ""
- err := validate.Struct(*a)
- suite.NoError(err)
-
- a.AvatarRemoteURL = "-------------"
- a.HeaderRemoteURL = "https://valid-url.com"
- err = validate.Struct(*a)
- suite.EqualError(err, "Key: 'Account.AvatarRemoteURL' Error:Field validation for 'AvatarRemoteURL' failed on the 'url' tag")
-
- a.AvatarRemoteURL = "https://valid-url.com"
- a.HeaderRemoteURL = ""
- err = validate.Struct(*a)
- suite.NoError(err)
-}
-
-// Default privacy must be set if account is local
-func (suite *AccountValidateTestSuite) TestValidatePrivacy() {
- a := happyAccount()
- a.FetchedAt = time.Now()
-
- a.Privacy = ""
- err := validate.Struct(*a)
- suite.EqualError(err, "Key: 'Account.Privacy' Error:Field validation for 'Privacy' failed on the 'required_without' tag")
-
- a.Privacy = "not valid"
- err = validate.Struct(*a)
- suite.EqualError(err, "Key: 'Account.Privacy' Error:Field validation for 'Privacy' failed on the 'oneof' tag")
-
- a.Privacy = gtsmodel.VisibilityFollowersOnly
- err = validate.Struct(*a)
- suite.NoError(err)
-
- a.Privacy = ""
- a.Domain = "example.org"
- err = validate.Struct(*a)
- suite.NoError(err)
-
- a.Privacy = "invalid"
- err = validate.Struct(*a)
- suite.EqualError(err, "Key: 'Account.Privacy' Error:Field validation for 'Privacy' failed on the 'oneof' tag")
-}
-
-// If set, language must be a valid language
-func (suite *AccountValidateTestSuite) TestValidateLanguage() {
- a := happyAccount()
-
- a.Language = ""
- err := validate.Struct(*a)
- suite.NoError(err)
-
- a.Language = "not valid"
- err = validate.Struct(*a)
- suite.EqualError(err, "Key: 'Account.Language' Error:Field validation for 'Language' failed on the 'bcp47_language_tag' tag")
-
- a.Language = "en-uk"
- err = validate.Struct(*a)
- suite.NoError(err)
-}
-
-// Account URI must be set and must be valid
-func (suite *AccountValidateTestSuite) TestValidateAccountURI() {
- a := happyAccount()
-
- a.URI = "invalid-uri"
- err := validate.Struct(*a)
- suite.EqualError(err, "Key: 'Account.URI' Error:Field validation for 'URI' failed on the 'url' tag")
-
- a.URI = ""
- err = validate.Struct(*a)
- suite.EqualError(err, "Key: 'Account.URI' Error:Field validation for 'URI' failed on the 'required' tag")
-}
-
-// ActivityPub URIs must be set on account if it's local
-func (suite *AccountValidateTestSuite) TestValidateAccountURIs() {
- a := happyAccount()
- a.FetchedAt = time.Now()
-
- a.InboxURI = "invalid-uri"
- a.OutboxURI = "invalid-uri"
- a.FollowersURI = "invalid-uri"
- a.FollowingURI = "invalid-uri"
- a.FeaturedCollectionURI = "invalid-uri"
- a.PublicKeyURI = "invalid-uri"
- err := validate.Struct(*a)
- suite.EqualError(err, "Key: 'Account.InboxURI' Error:Field validation for 'InboxURI' failed on the 'url' tag\nKey: 'Account.OutboxURI' Error:Field validation for 'OutboxURI' failed on the 'url' tag\nKey: 'Account.FollowingURI' Error:Field validation for 'FollowingURI' failed on the 'url' tag\nKey: 'Account.FollowersURI' Error:Field validation for 'FollowersURI' failed on the 'url' tag\nKey: 'Account.FeaturedCollectionURI' Error:Field validation for 'FeaturedCollectionURI' failed on the 'url' tag\nKey: 'Account.PublicKeyURI' Error:Field validation for 'PublicKeyURI' failed on the 'url' tag")
-
- a.InboxURI = ""
- a.OutboxURI = ""
- a.FollowersURI = ""
- a.FollowingURI = ""
- a.FeaturedCollectionURI = ""
- a.PublicKeyURI = ""
- err = validate.Struct(*a)
- suite.EqualError(err, "Key: 'Account.InboxURI' Error:Field validation for 'InboxURI' failed on the 'required_without' tag\nKey: 'Account.OutboxURI' Error:Field validation for 'OutboxURI' failed on the 'required_without' tag\nKey: 'Account.FollowingURI' Error:Field validation for 'FollowingURI' failed on the 'required_without' tag\nKey: 'Account.FollowersURI' Error:Field validation for 'FollowersURI' failed on the 'required_without' tag\nKey: 'Account.FeaturedCollectionURI' Error:Field validation for 'FeaturedCollectionURI' failed on the 'required_without' tag\nKey: 'Account.PublicKeyURI' Error:Field validation for 'PublicKeyURI' failed on the 'required' tag")
-
- a.Domain = "example.org"
- err = validate.Struct(*a)
- suite.EqualError(err, "Key: 'Account.PublicKeyURI' Error:Field validation for 'PublicKeyURI' failed on the 'required' tag")
-
- a.InboxURI = "invalid-uri"
- a.OutboxURI = "invalid-uri"
- a.FollowersURI = "invalid-uri"
- a.FollowingURI = "invalid-uri"
- a.FeaturedCollectionURI = "invalid-uri"
- a.PublicKeyURI = "invalid-uri"
- err = validate.Struct(*a)
- suite.EqualError(err, "Key: 'Account.InboxURI' Error:Field validation for 'InboxURI' failed on the 'url' tag\nKey: 'Account.OutboxURI' Error:Field validation for 'OutboxURI' failed on the 'url' tag\nKey: 'Account.FollowingURI' Error:Field validation for 'FollowingURI' failed on the 'url' tag\nKey: 'Account.FollowersURI' Error:Field validation for 'FollowersURI' failed on the 'url' tag\nKey: 'Account.FeaturedCollectionURI' Error:Field validation for 'FeaturedCollectionURI' failed on the 'url' tag\nKey: 'Account.PublicKeyURI' Error:Field validation for 'PublicKeyURI' failed on the 'url' tag")
-}
-
-// Actor type must be set and valid
-func (suite *AccountValidateTestSuite) TestValidateActorType() {
- a := happyAccount()
-
- a.ActorType = ""
- err := validate.Struct(*a)
- suite.EqualError(err, "Key: 'Account.ActorType' Error:Field validation for 'ActorType' failed on the 'oneof' tag")
-
- a.ActorType = "not valid"
- err = validate.Struct(*a)
- suite.EqualError(err, "Key: 'Account.ActorType' Error:Field validation for 'ActorType' failed on the 'oneof' tag")
-
- a.ActorType = ap.ActivityArrive
- err = validate.Struct(*a)
- suite.EqualError(err, "Key: 'Account.ActorType' Error:Field validation for 'ActorType' failed on the 'oneof' tag")
-
- a.ActorType = ap.ActorOrganization
- err = validate.Struct(*a)
- suite.NoError(err)
-}
-
-// Private key must be set on local accounts
-func (suite *AccountValidateTestSuite) TestValidatePrivateKey() {
- a := happyAccount()
- a.FetchedAt = time.Now()
-
- a.PrivateKey = nil
- err := validate.Struct(*a)
- suite.EqualError(err, "Key: 'Account.PrivateKey' Error:Field validation for 'PrivateKey' failed on the 'required_without' tag")
-
- a.Domain = "example.org"
- err = validate.Struct(*a)
- suite.NoError(err)
-}
-
-// Public key must be set
-func (suite *AccountValidateTestSuite) TestValidatePublicKey() {
- a := happyAccount()
-
- a.PublicKey = nil
- err := validate.Struct(*a)
- suite.EqualError(err, "Key: 'Account.PublicKey' Error:Field validation for 'PublicKey' failed on the 'required' tag")
-}
-
-func TestAccountValidateTestSuite(t *testing.T) {
- suite.Run(t, new(AccountValidateTestSuite))
-}
diff --git a/internal/validate/application_test.go b/internal/validate/application_test.go
deleted file mode 100644
index 86c53a615..000000000
--- a/internal/validate/application_test.go
+++ /dev/null
@@ -1,132 +0,0 @@
-// 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 validate_test
-
-import (
- "testing"
- "time"
-
- "github.com/stretchr/testify/suite"
- "github.com/superseriousbusiness/gotosocial/internal/gtsmodel"
- "github.com/superseriousbusiness/gotosocial/internal/validate"
-)
-
-func happyApplication() *gtsmodel.Application {
- return &gtsmodel.Application{
- ID: "01FE91RJR88PSEEE30EV35QR8N",
- CreatedAt: time.Now(),
- UpdatedAt: time.Now(),
- Name: "Tusky",
- Website: "https://tusky.app",
- RedirectURI: "oauth2redirect://com.keylesspalace.tusky/",
- ClientID: "01FEEDMF6C0QD589MRK7919Z0R",
- ClientSecret: "bd740cf1-024a-4e4d-8c39-866538f52fe6",
- Scopes: "read write follow",
- }
-}
-
-type ApplicationValidateTestSuite struct {
- suite.Suite
-}
-
-func (suite *ApplicationValidateTestSuite) TestValidateApplicationHappyPath() {
- // no problem here
- a := happyApplication()
- err := validate.Struct(a)
- suite.NoError(err)
-}
-
-func (suite *ApplicationValidateTestSuite) TestValidateApplicationBadID() {
- a := happyApplication()
-
- a.ID = ""
- err := validate.Struct(a)
- suite.EqualError(err, "Key: 'Application.ID' Error:Field validation for 'ID' failed on the 'required' tag")
-
- a.ID = "01FE96W293ZPRG9FQQP48HK8N001FE96W32AT24VYBGM12WN3GKB"
- err = validate.Struct(a)
- suite.EqualError(err, "Key: 'Application.ID' Error:Field validation for 'ID' failed on the 'ulid' tag")
-}
-
-func (suite *ApplicationValidateTestSuite) TestValidateApplicationNoCreatedAt() {
- a := happyApplication()
-
- a.CreatedAt = time.Time{}
- err := validate.Struct(a)
- suite.NoError(err)
-}
-
-func (suite *ApplicationValidateTestSuite) TestValidateApplicationName() {
- a := happyApplication()
-
- a.Name = ""
- err := validate.Struct(a)
- suite.EqualError(err, "Key: 'Application.Name' Error:Field validation for 'Name' failed on the 'required' tag")
-}
-
-func (suite *ApplicationValidateTestSuite) TestValidateApplicationWebsite() {
- a := happyApplication()
-
- a.Website = "invalid-website"
- err := validate.Struct(a)
- suite.EqualError(err, "Key: 'Application.Website' Error:Field validation for 'Website' failed on the 'url' tag")
-
- a.Website = ""
- err = validate.Struct(a)
- suite.NoError(err)
-}
-
-func (suite *ApplicationValidateTestSuite) TestValidateApplicationRedirectURI() {
- a := happyApplication()
-
- a.RedirectURI = "invalid-uri"
- err := validate.Struct(a)
- suite.EqualError(err, "Key: 'Application.RedirectURI' Error:Field validation for 'RedirectURI' failed on the 'uri' tag")
-
- a.RedirectURI = ""
- err = validate.Struct(a)
- suite.EqualError(err, "Key: 'Application.RedirectURI' Error:Field validation for 'RedirectURI' failed on the 'required' tag")
-
- a.RedirectURI = "urn:ietf:wg:oauth:2.0:oob"
- err = validate.Struct(a)
- suite.NoError(err)
-}
-
-func (suite *ApplicationValidateTestSuite) TestValidateApplicationClientSecret() {
- a := happyApplication()
-
- a.ClientSecret = "invalid-uuid"
- err := validate.Struct(a)
- suite.EqualError(err, "Key: 'Application.ClientSecret' Error:Field validation for 'ClientSecret' failed on the 'uuid' tag")
-
- a.ClientSecret = ""
- err = validate.Struct(a)
- suite.EqualError(err, "Key: 'Application.ClientSecret' Error:Field validation for 'ClientSecret' failed on the 'required' tag")
-}
-
-func (suite *ApplicationValidateTestSuite) TestValidateApplicationScopes() {
- a := happyApplication()
-
- a.Scopes = ""
- err := validate.Struct(a)
- suite.EqualError(err, "Key: 'Application.Scopes' Error:Field validation for 'Scopes' failed on the 'required' tag")
-}
-
-func TestApplicationValidateTestSuite(t *testing.T) {
- suite.Run(t, new(ApplicationValidateTestSuite))
-}
diff --git a/internal/validate/block_test.go b/internal/validate/block_test.go
deleted file mode 100644
index 96e206140..000000000
--- a/internal/validate/block_test.go
+++ /dev/null
@@ -1,115 +0,0 @@
-// 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 validate_test
-
-import (
- "testing"
- "time"
-
- "github.com/stretchr/testify/suite"
- "github.com/superseriousbusiness/gotosocial/internal/gtsmodel"
- "github.com/superseriousbusiness/gotosocial/internal/validate"
-)
-
-func happyBlock() *gtsmodel.Block {
- return &gtsmodel.Block{
- ID: "01FE91RJR88PSEEE30EV35QR8N",
- CreatedAt: time.Now(),
- UpdatedAt: time.Now(),
- URI: "https://example.org/accounts/someone/blocks/01FE91RJR88PSEEE30EV35QR8N",
- AccountID: "01FEED79PRMVWPRMFHFQM8MJQN",
- Account: nil,
- TargetAccountID: "01FEEDMF6C0QD589MRK7919Z0R",
- TargetAccount: nil,
- }
-}
-
-type BlockValidateTestSuite struct {
- suite.Suite
-}
-
-func (suite *BlockValidateTestSuite) TestValidateBlockHappyPath() {
- // no problem here
- b := happyBlock()
- err := validate.Struct(b)
- suite.NoError(err)
-}
-
-func (suite *BlockValidateTestSuite) TestValidateBlockBadID() {
- b := happyBlock()
-
- b.ID = ""
- err := validate.Struct(b)
- suite.EqualError(err, "Key: 'Block.ID' Error:Field validation for 'ID' failed on the 'required' tag")
-
- b.ID = "01FE96W293ZPRG9FQQP48HK8N001FE96W32AT24VYBGM12WN3GKB"
- err = validate.Struct(b)
- suite.EqualError(err, "Key: 'Block.ID' Error:Field validation for 'ID' failed on the 'ulid' tag")
-}
-
-func (suite *BlockValidateTestSuite) TestValidateBlockNoCreatedAt() {
- b := happyBlock()
-
- b.CreatedAt = time.Time{}
- err := validate.Struct(b)
- suite.NoError(err)
-}
-
-func (suite *BlockValidateTestSuite) TestValidateBlockCreatedByAccountID() {
- b := happyBlock()
-
- b.AccountID = ""
- err := validate.Struct(b)
- suite.EqualError(err, "Key: 'Block.AccountID' Error:Field validation for 'AccountID' failed on the 'required' tag")
-
- b.AccountID = "this-is-not-a-valid-ulid"
- err = validate.Struct(b)
- suite.EqualError(err, "Key: 'Block.AccountID' Error:Field validation for 'AccountID' failed on the 'ulid' tag")
-}
-
-func (suite *BlockValidateTestSuite) TestValidateBlockTargetAccountID() {
- b := happyBlock()
-
- b.TargetAccountID = "invalid-ulid"
- err := validate.Struct(b)
- suite.EqualError(err, "Key: 'Block.TargetAccountID' Error:Field validation for 'TargetAccountID' failed on the 'ulid' tag")
-
- b.TargetAccountID = "01FEEDHX4G7EGHF5GD9E82Y51Q"
- err = validate.Struct(b)
- suite.NoError(err)
-
- b.TargetAccountID = ""
- err = validate.Struct(b)
- suite.EqualError(err, "Key: 'Block.TargetAccountID' Error:Field validation for 'TargetAccountID' failed on the 'required' tag")
-}
-
-func (suite *BlockValidateTestSuite) TestValidateBlockURI() {
- b := happyBlock()
-
- b.URI = "invalid-uri"
- err := validate.Struct(b)
- suite.EqualError(err, "Key: 'Block.URI' Error:Field validation for 'URI' failed on the 'url' tag")
-
- b.URI = ""
- err = validate.Struct(b)
- suite.EqualError(err, "Key: 'Block.URI' Error:Field validation for 'URI' failed on the 'required' tag")
-}
-
-func TestBlockValidateTestSuite(t *testing.T) {
- suite.Run(t, new(BlockValidateTestSuite))
-}
diff --git a/internal/validate/client_test.go b/internal/validate/client_test.go
deleted file mode 100644
index ee8f0e66e..000000000
--- a/internal/validate/client_test.go
+++ /dev/null
@@ -1,101 +0,0 @@
-// 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 validate_test
-
-import (
- "testing"
- "time"
-
- "github.com/stretchr/testify/suite"
- "github.com/superseriousbusiness/gotosocial/internal/gtsmodel"
- "github.com/superseriousbusiness/gotosocial/internal/validate"
-)
-
-func happyClient() *gtsmodel.Client {
- return &gtsmodel.Client{
- ID: "01FE91RJR88PSEEE30EV35QR8N",
- CreatedAt: time.Now(),
- UpdatedAt: time.Now(),
- Secret: "bd740cf1-024a-4e4d-8c39-866538f52fe6",
- Domain: "oauth2redirect://com.keylesspalace.tusky/",
- UserID: "01FEEDMF6C0QD589MRK7919Z0R",
- }
-}
-
-type ClientValidateTestSuite struct {
- suite.Suite
-}
-
-func (suite *ClientValidateTestSuite) TestValidateClientHappyPath() {
- // no problem here
- c := happyClient()
- err := validate.Struct(c)
- suite.NoError(err)
-}
-
-func (suite *ClientValidateTestSuite) TestValidateClientBadID() {
- c := happyClient()
-
- c.ID = ""
- err := validate.Struct(c)
- suite.EqualError(err, "Key: 'Client.ID' Error:Field validation for 'ID' failed on the 'required' tag")
-
- c.ID = "01FE96W293ZPRG9FQQP48HK8N001FE96W32AT24VYBGM12WN3GKB"
- err = validate.Struct(c)
- suite.EqualError(err, "Key: 'Client.ID' Error:Field validation for 'ID' failed on the 'ulid' tag")
-}
-
-func (suite *ClientValidateTestSuite) TestValidateClientNoCreatedAt() {
- c := happyClient()
-
- c.CreatedAt = time.Time{}
- err := validate.Struct(c)
- suite.NoError(err)
-}
-
-func (suite *ClientValidateTestSuite) TestValidateClientDomain() {
- c := happyClient()
-
- c.Domain = "invalid-uri"
- err := validate.Struct(c)
- suite.EqualError(err, "Key: 'Client.Domain' Error:Field validation for 'Domain' failed on the 'uri' tag")
-
- c.Domain = ""
- err = validate.Struct(c)
- suite.EqualError(err, "Key: 'Client.Domain' Error:Field validation for 'Domain' failed on the 'required' tag")
-
- c.Domain = "urn:ietf:wg:oauth:2.0:oob"
- err = validate.Struct(c)
- suite.NoError(err)
-}
-
-func (suite *ClientValidateTestSuite) TestValidateSecret() {
- c := happyClient()
-
- c.Secret = "invalid-uuid"
- err := validate.Struct(c)
- suite.EqualError(err, "Key: 'Client.Secret' Error:Field validation for 'Secret' failed on the 'uuid' tag")
-
- c.Secret = ""
- err = validate.Struct(c)
- suite.EqualError(err, "Key: 'Client.Secret' Error:Field validation for 'Secret' failed on the 'required' tag")
-}
-
-func TestClientValidateTestSuite(t *testing.T) {
- suite.Run(t, new(ClientValidateTestSuite))
-}
diff --git a/internal/validate/domainblock_test.go b/internal/validate/domainblock_test.go
deleted file mode 100644
index f6504d1f3..000000000
--- a/internal/validate/domainblock_test.go
+++ /dev/null
@@ -1,122 +0,0 @@
-// 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 validate_test
-
-import (
- "testing"
- "time"
-
- "github.com/stretchr/testify/suite"
- "github.com/superseriousbusiness/gotosocial/internal/gtsmodel"
- "github.com/superseriousbusiness/gotosocial/internal/validate"
- "github.com/superseriousbusiness/gotosocial/testrig"
-)
-
-func happyDomainBlock() *gtsmodel.DomainBlock {
- return &gtsmodel.DomainBlock{
- ID: "01FE91RJR88PSEEE30EV35QR8N",
- CreatedAt: time.Now(),
- UpdatedAt: time.Now(),
- Domain: "baddudes.suck",
- CreatedByAccountID: "01FEED79PRMVWPRMFHFQM8MJQN",
- PrivateComment: "we don't like em",
- PublicComment: "poo poo dudes",
- Obfuscate: testrig.FalseBool(),
- SubscriptionID: "",
- }
-}
-
-type DomainBlockValidateTestSuite struct {
- suite.Suite
-}
-
-func (suite *DomainBlockValidateTestSuite) TestValidateDomainBlockHappyPath() {
- // no problem here
- d := happyDomainBlock()
- err := validate.Struct(d)
- suite.NoError(err)
-}
-
-func (suite *DomainBlockValidateTestSuite) TestValidateDomainBlockBadID() {
- d := happyDomainBlock()
-
- d.ID = ""
- err := validate.Struct(d)
- suite.EqualError(err, "Key: 'DomainBlock.ID' Error:Field validation for 'ID' failed on the 'required' tag")
-
- d.ID = "01FE96W293ZPRG9FQQP48HK8N001FE96W32AT24VYBGM12WN3GKB"
- err = validate.Struct(d)
- suite.EqualError(err, "Key: 'DomainBlock.ID' Error:Field validation for 'ID' failed on the 'ulid' tag")
-}
-
-func (suite *DomainBlockValidateTestSuite) TestValidateDomainBlockNoCreatedAt() {
- d := happyDomainBlock()
-
- d.CreatedAt = time.Time{}
- err := validate.Struct(d)
- suite.NoError(err)
-}
-
-func (suite *DomainBlockValidateTestSuite) TestValidateDomainBlockBadDomain() {
- d := happyDomainBlock()
-
- d.Domain = ""
- err := validate.Struct(d)
- suite.EqualError(err, "Key: 'DomainBlock.Domain' Error:Field validation for 'Domain' failed on the 'required' tag")
-
- d.Domain = "this-is-not-a-valid-domain"
- err = validate.Struct(d)
- suite.EqualError(err, "Key: 'DomainBlock.Domain' Error:Field validation for 'Domain' failed on the 'fqdn' tag")
-}
-
-func (suite *DomainBlockValidateTestSuite) TestValidateDomainBlockCreatedByAccountID() {
- d := happyDomainBlock()
-
- d.CreatedByAccountID = ""
- err := validate.Struct(d)
- suite.EqualError(err, "Key: 'DomainBlock.CreatedByAccountID' Error:Field validation for 'CreatedByAccountID' failed on the 'required' tag")
-
- d.CreatedByAccountID = "this-is-not-a-valid-ulid"
- err = validate.Struct(d)
- suite.EqualError(err, "Key: 'DomainBlock.CreatedByAccountID' Error:Field validation for 'CreatedByAccountID' failed on the 'ulid' tag")
-}
-
-func (suite *DomainBlockValidateTestSuite) TestValidateDomainBlockComments() {
- d := happyDomainBlock()
-
- d.PrivateComment = ""
- d.PublicComment = ""
- err := validate.Struct(d)
- suite.NoError(err)
-}
-
-func (suite *DomainBlockValidateTestSuite) TestValidateDomainSubscriptionID() {
- d := happyDomainBlock()
-
- d.SubscriptionID = "invalid-ulid"
- err := validate.Struct(d)
- suite.EqualError(err, "Key: 'DomainBlock.SubscriptionID' Error:Field validation for 'SubscriptionID' failed on the 'ulid' tag")
-
- d.SubscriptionID = "01FEEDHX4G7EGHF5GD9E82Y51Q"
- err = validate.Struct(d)
- suite.NoError(err)
-}
-
-func TestDomainBlockValidateTestSuite(t *testing.T) {
- suite.Run(t, new(DomainBlockValidateTestSuite))
-}
diff --git a/internal/validate/emaildomainblock_test.go b/internal/validate/emaildomainblock_test.go
deleted file mode 100644
index 2aac0d72c..000000000
--- a/internal/validate/emaildomainblock_test.go
+++ /dev/null
@@ -1,96 +0,0 @@
-// 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 validate_test
-
-import (
- "testing"
- "time"
-
- "github.com/stretchr/testify/suite"
- "github.com/superseriousbusiness/gotosocial/internal/gtsmodel"
- "github.com/superseriousbusiness/gotosocial/internal/validate"
-)
-
-func happyEmailDomainBlock() *gtsmodel.EmailDomainBlock {
- return &gtsmodel.EmailDomainBlock{
- ID: "01FE91RJR88PSEEE30EV35QR8N",
- CreatedAt: time.Now(),
- UpdatedAt: time.Now(),
- Domain: "baddudes.suck",
- CreatedByAccountID: "01FEED79PRMVWPRMFHFQM8MJQN",
- }
-}
-
-type EmailDomainBlockValidateTestSuite struct {
- suite.Suite
-}
-
-func (suite *EmailDomainBlockValidateTestSuite) TestValidateEmailDomainBlockHappyPath() {
- // no problem here
- e := happyEmailDomainBlock()
- err := validate.Struct(e)
- suite.NoError(err)
-}
-
-func (suite *EmailDomainBlockValidateTestSuite) TestValidateEmailDomainBlockBadID() {
- e := happyEmailDomainBlock()
-
- e.ID = ""
- err := validate.Struct(e)
- suite.EqualError(err, "Key: 'EmailDomainBlock.ID' Error:Field validation for 'ID' failed on the 'required' tag")
-
- e.ID = "01FE96W293ZPRG9FQQP48HK8N001FE96W32AT24VYBGM12WN3GKB"
- err = validate.Struct(e)
- suite.EqualError(err, "Key: 'EmailDomainBlock.ID' Error:Field validation for 'ID' failed on the 'ulid' tag")
-}
-
-func (suite *EmailDomainBlockValidateTestSuite) TestValidateEmailDomainBlockNoCreatedAt() {
- e := happyEmailDomainBlock()
-
- e.CreatedAt = time.Time{}
- err := validate.Struct(e)
- suite.NoError(err)
-}
-
-func (suite *EmailDomainBlockValidateTestSuite) TestValidateEmailDomainBlockBadDomain() {
- e := happyEmailDomainBlock()
-
- e.Domain = ""
- err := validate.Struct(e)
- suite.EqualError(err, "Key: 'EmailDomainBlock.Domain' Error:Field validation for 'Domain' failed on the 'required' tag")
-
- e.Domain = "this-is-not-a-valid-domain"
- err = validate.Struct(e)
- suite.EqualError(err, "Key: 'EmailDomainBlock.Domain' Error:Field validation for 'Domain' failed on the 'fqdn' tag")
-}
-
-func (suite *EmailDomainBlockValidateTestSuite) TestValidateEmailDomainBlockCreatedByAccountID() {
- e := happyEmailDomainBlock()
-
- e.CreatedByAccountID = ""
- err := validate.Struct(e)
- suite.EqualError(err, "Key: 'EmailDomainBlock.CreatedByAccountID' Error:Field validation for 'CreatedByAccountID' failed on the 'required' tag")
-
- e.CreatedByAccountID = "this-is-not-a-valid-ulid"
- err = validate.Struct(e)
- suite.EqualError(err, "Key: 'EmailDomainBlock.CreatedByAccountID' Error:Field validation for 'CreatedByAccountID' failed on the 'ulid' tag")
-}
-
-func TestEmailDomainBlockValidateTestSuite(t *testing.T) {
- suite.Run(t, new(EmailDomainBlockValidateTestSuite))
-}
diff --git a/internal/validate/emoji_test.go b/internal/validate/emoji_test.go
deleted file mode 100644
index 9192cb1fc..000000000
--- a/internal/validate/emoji_test.go
+++ /dev/null
@@ -1,195 +0,0 @@
-// 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 validate_test
-
-import (
- "os"
- "testing"
- "time"
-
- "github.com/stretchr/testify/suite"
- "github.com/superseriousbusiness/gotosocial/internal/gtsmodel"
- "github.com/superseriousbusiness/gotosocial/internal/validate"
- "github.com/superseriousbusiness/gotosocial/testrig"
-)
-
-func happyEmoji() *gtsmodel.Emoji {
- // the file validator actually runs os.Stat on given paths, so we need to just create small
- // temp files for both the main attachment file and the thumbnail
-
- imageFile, err := os.CreateTemp("", "gts_test_emoji")
- if err != nil {
- panic(err)
- }
- if _, err := imageFile.WriteString("main"); err != nil {
- panic(err)
- }
- imagePath := imageFile.Name()
- if err := imageFile.Close(); err != nil {
- panic(err)
- }
-
- staticFile, err := os.CreateTemp("", "gts_test_emoji_static")
- if err != nil {
- panic(err)
- }
- if _, err := staticFile.WriteString("thumbnail"); err != nil {
- panic(err)
- }
- imageStaticPath := staticFile.Name()
- if err := staticFile.Close(); err != nil {
- panic(err)
- }
-
- return &gtsmodel.Emoji{
- ID: "01F8MH6NEM8D7527KZAECTCR76",
- CreatedAt: time.Now().Add(-71 * time.Hour),
- UpdatedAt: time.Now().Add(-71 * time.Hour),
- Shortcode: "blob_test",
- Domain: "example.org",
- ImageRemoteURL: "https://example.org/emojis/blob_test.gif",
- ImageStaticRemoteURL: "https://example.org/emojis/blob_test.png",
- ImageURL: "",
- ImageStaticURL: "",
- ImagePath: imagePath,
- ImageStaticPath: imageStaticPath,
- ImageContentType: "image/gif",
- ImageStaticContentType: "image/png",
- ImageFileSize: 1024,
- ImageStaticFileSize: 256,
- ImageUpdatedAt: time.Now(),
- Disabled: testrig.FalseBool(),
- URI: "https://example.org/emojis/blob_test",
- VisibleInPicker: testrig.TrueBool(),
- CategoryID: "01FEE47ZH70PWDSEAVBRFNX325",
- }
-}
-
-type EmojiValidateTestSuite struct {
- suite.Suite
-}
-
-func (suite *EmojiValidateTestSuite) TestValidateEmojiHappyPath() {
- // no problem here
- m := happyEmoji()
- err := validate.Struct(*m)
- suite.NoError(err)
-}
-
-func (suite *EmojiValidateTestSuite) TestValidateEmojiBadFilePaths() {
- e := happyEmoji()
-
- e.ImagePath = "/tmp/nonexistent/file/for/gotosocial/test"
- err := validate.Struct(e)
- suite.EqualError(err, "Key: 'Emoji.ImagePath' Error:Field validation for 'ImagePath' failed on the 'file' tag")
-
- e.ImagePath = ""
- err = validate.Struct(e)
- suite.EqualError(err, "Key: 'Emoji.ImagePath' Error:Field validation for 'ImagePath' failed on the 'required' tag")
-
- e.ImagePath = "???????????thisnot a valid path####"
- err = validate.Struct(e)
- suite.EqualError(err, "Key: 'Emoji.ImagePath' Error:Field validation for 'ImagePath' failed on the 'file' tag")
-
- e.ImageStaticPath = "/tmp/nonexistent/file/for/gotosocial/test"
- err = validate.Struct(e)
- suite.EqualError(err, "Key: 'Emoji.ImagePath' Error:Field validation for 'ImagePath' failed on the 'file' tag\nKey: 'Emoji.ImageStaticPath' Error:Field validation for 'ImageStaticPath' failed on the 'file' tag")
-
- e.ImageStaticPath = ""
- err = validate.Struct(e)
- suite.EqualError(err, "Key: 'Emoji.ImagePath' Error:Field validation for 'ImagePath' failed on the 'file' tag\nKey: 'Emoji.ImageStaticPath' Error:Field validation for 'ImageStaticPath' failed on the 'required' tag")
-
- e.ImageStaticPath = "???????????thisnot a valid path####"
- err = validate.Struct(e)
- suite.EqualError(err, "Key: 'Emoji.ImagePath' Error:Field validation for 'ImagePath' failed on the 'file' tag\nKey: 'Emoji.ImageStaticPath' Error:Field validation for 'ImageStaticPath' failed on the 'file' tag")
-}
-
-func (suite *EmojiValidateTestSuite) TestValidateEmojiURI() {
- e := happyEmoji()
-
- e.URI = "aaaaaaaaaa"
- err := validate.Struct(e)
- suite.EqualError(err, "Key: 'Emoji.URI' Error:Field validation for 'URI' failed on the 'url' tag")
-
- e.URI = ""
- err = validate.Struct(e)
- suite.EqualError(err, "Key: 'Emoji.URI' Error:Field validation for 'URI' failed on the 'url' tag")
-}
-
-func (suite *EmojiValidateTestSuite) TestValidateEmojiURLCombos() {
- e := happyEmoji()
-
- e.ImageRemoteURL = ""
- err := validate.Struct(e)
- suite.EqualError(err, "Key: 'Emoji.ImageRemoteURL' Error:Field validation for 'ImageRemoteURL' failed on the 'required_without' tag\nKey: 'Emoji.ImageURL' Error:Field validation for 'ImageURL' failed on the 'required_without' tag")
-
- e.ImageURL = "https://whatever.org"
- err = validate.Struct(e)
- suite.NoError(err)
-
- e.ImageStaticRemoteURL = ""
- err = validate.Struct(e)
- suite.EqualError(err, "Key: 'Emoji.ImageStaticRemoteURL' Error:Field validation for 'ImageStaticRemoteURL' failed on the 'required_without' tag\nKey: 'Emoji.ImageStaticURL' Error:Field validation for 'ImageStaticURL' failed on the 'required_without' tag")
-
- e.ImageStaticURL = "https://whatever.org"
- err = validate.Struct(e)
- suite.NoError(err)
-
- e.ImageURL = ""
- e.ImageStaticURL = ""
- e.ImageRemoteURL = ""
- e.ImageStaticRemoteURL = ""
- err = validate.Struct(e)
- suite.EqualError(err, "Key: 'Emoji.ImageRemoteURL' Error:Field validation for 'ImageRemoteURL' failed on the 'required_without' tag\nKey: 'Emoji.ImageStaticRemoteURL' Error:Field validation for 'ImageStaticRemoteURL' failed on the 'required_without' tag\nKey: 'Emoji.ImageURL' Error:Field validation for 'ImageURL' failed on the 'required_without' tag\nKey: 'Emoji.ImageStaticURL' Error:Field validation for 'ImageStaticURL' failed on the 'required_without' tag")
-}
-
-func (suite *EmojiValidateTestSuite) TestValidateFileSize() {
- e := happyEmoji()
-
- e.ImageFileSize = 0
- err := validate.Struct(e)
- suite.EqualError(err, "Key: 'Emoji.ImageFileSize' Error:Field validation for 'ImageFileSize' failed on the 'required' tag")
-
- e.ImageStaticFileSize = 0
- err = validate.Struct(e)
- suite.EqualError(err, "Key: 'Emoji.ImageFileSize' Error:Field validation for 'ImageFileSize' failed on the 'required' tag\nKey: 'Emoji.ImageStaticFileSize' Error:Field validation for 'ImageStaticFileSize' failed on the 'required' tag")
-
- e.ImageFileSize = -1
- err = validate.Struct(e)
- suite.EqualError(err, "Key: 'Emoji.ImageFileSize' Error:Field validation for 'ImageFileSize' failed on the 'min' tag\nKey: 'Emoji.ImageStaticFileSize' Error:Field validation for 'ImageStaticFileSize' failed on the 'required' tag")
-
- e.ImageStaticFileSize = -1
- err = validate.Struct(e)
- suite.EqualError(err, "Key: 'Emoji.ImageFileSize' Error:Field validation for 'ImageFileSize' failed on the 'min' tag\nKey: 'Emoji.ImageStaticFileSize' Error:Field validation for 'ImageStaticFileSize' failed on the 'min' tag")
-}
-
-func (suite *EmojiValidateTestSuite) TestValidateDomain() {
- e := happyEmoji()
-
- e.Domain = ""
- err := validate.Struct(e)
- suite.EqualError(err, "Key: 'Emoji.ImageURL' Error:Field validation for 'ImageURL' failed on the 'required_without' tag\nKey: 'Emoji.ImageStaticURL' Error:Field validation for 'ImageStaticURL' failed on the 'required_without' tag")
-
- e.Domain = "aaaaaaaaa"
- err = validate.Struct(e)
- suite.EqualError(err, "Key: 'Emoji.Domain' Error:Field validation for 'Domain' failed on the 'fqdn' tag")
-}
-
-func TestEmojiValidateTestSuite(t *testing.T) {
- suite.Run(t, new(EmojiValidateTestSuite))
-}
diff --git a/internal/validate/follow_test.go b/internal/validate/follow_test.go
deleted file mode 100644
index 2128be4aa..000000000
--- a/internal/validate/follow_test.go
+++ /dev/null
@@ -1,87 +0,0 @@
-// 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 validate_test
-
-import (
- "testing"
- "time"
-
- "github.com/stretchr/testify/suite"
- "github.com/superseriousbusiness/gotosocial/internal/gtsmodel"
- "github.com/superseriousbusiness/gotosocial/internal/validate"
-)
-
-func happyFollow() *gtsmodel.Follow {
- return &gtsmodel.Follow{
- ID: "01FE91RJR88PSEEE30EV35QR8N",
- CreatedAt: time.Now(),
- UpdatedAt: time.Now(),
- AccountID: "01FE96MAE58MXCE5C4SSMEMCEK",
- Account: nil,
- TargetAccountID: "01FE96MXRHWZHKC0WH5FT82H1A",
- TargetAccount: nil,
- URI: "https://example.org/users/user1/activity/follow/01FE91RJR88PSEEE30EV35QR8N",
- }
-}
-
-type FollowValidateTestSuite struct {
- suite.Suite
-}
-
-func (suite *FollowValidateTestSuite) TestValidateFollowHappyPath() {
- // no problem here
- f := happyFollow()
- err := validate.Struct(f)
- suite.NoError(err)
-}
-
-func (suite *FollowValidateTestSuite) TestValidateFollowBadID() {
- f := happyFollow()
-
- f.ID = ""
- err := validate.Struct(f)
- suite.EqualError(err, "Key: 'Follow.ID' Error:Field validation for 'ID' failed on the 'required' tag")
-
- f.ID = "01FE96W293ZPRG9FQQP48HK8N001FE96W32AT24VYBGM12WN3GKB"
- err = validate.Struct(f)
- suite.EqualError(err, "Key: 'Follow.ID' Error:Field validation for 'ID' failed on the 'ulid' tag")
-}
-
-func (suite *FollowValidateTestSuite) TestValidateFollowNoCreatedAt() {
- f := happyFollow()
-
- f.CreatedAt = time.Time{}
- err := validate.Struct(f)
- suite.NoError(err)
-}
-
-func (suite *FollowValidateTestSuite) TestValidateFollowNoURI() {
- f := happyFollow()
-
- f.URI = ""
- err := validate.Struct(f)
- suite.EqualError(err, "Key: 'Follow.URI' Error:Field validation for 'URI' failed on the 'required' tag")
-
- f.URI = "this-is-not-a-valid-url"
- err = validate.Struct(f)
- suite.EqualError(err, "Key: 'Follow.URI' Error:Field validation for 'URI' failed on the 'url' tag")
-}
-
-func TestFollowValidateTestSuite(t *testing.T) {
- suite.Run(t, new(FollowValidateTestSuite))
-}
diff --git a/internal/validate/followrequest_test.go b/internal/validate/followrequest_test.go
deleted file mode 100644
index 0c3d883bb..000000000
--- a/internal/validate/followrequest_test.go
+++ /dev/null
@@ -1,87 +0,0 @@
-// 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 validate_test
-
-import (
- "testing"
- "time"
-
- "github.com/stretchr/testify/suite"
- "github.com/superseriousbusiness/gotosocial/internal/gtsmodel"
- "github.com/superseriousbusiness/gotosocial/internal/validate"
-)
-
-func happyFollowRequest() *gtsmodel.FollowRequest {
- return &gtsmodel.FollowRequest{
- ID: "01FE91RJR88PSEEE30EV35QR8N",
- CreatedAt: time.Now(),
- UpdatedAt: time.Now(),
- AccountID: "01FE96MAE58MXCE5C4SSMEMCEK",
- Account: nil,
- TargetAccountID: "01FE96MXRHWZHKC0WH5FT82H1A",
- TargetAccount: nil,
- URI: "https://example.org/users/user1/activity/follow/01FE91RJR88PSEEE30EV35QR8N",
- }
-}
-
-type FollowRequestValidateTestSuite struct {
- suite.Suite
-}
-
-func (suite *FollowRequestValidateTestSuite) TestValidateFollowRequestHappyPath() {
- // no problem here
- f := happyFollowRequest()
- err := validate.Struct(f)
- suite.NoError(err)
-}
-
-func (suite *FollowRequestValidateTestSuite) TestValidateFollowRequestBadID() {
- f := happyFollowRequest()
-
- f.ID = ""
- err := validate.Struct(f)
- suite.EqualError(err, "Key: 'FollowRequest.ID' Error:Field validation for 'ID' failed on the 'required' tag")
-
- f.ID = "01FE96W293ZPRG9FQQP48HK8N001FE96W32AT24VYBGM12WN3GKB"
- err = validate.Struct(f)
- suite.EqualError(err, "Key: 'FollowRequest.ID' Error:Field validation for 'ID' failed on the 'ulid' tag")
-}
-
-func (suite *FollowRequestValidateTestSuite) TestValidateFollowRequestNoCreatedAt() {
- f := happyFollowRequest()
-
- f.CreatedAt = time.Time{}
- err := validate.Struct(f)
- suite.NoError(err)
-}
-
-func (suite *FollowRequestValidateTestSuite) TestValidateFollowRequestNoURI() {
- f := happyFollowRequest()
-
- f.URI = ""
- err := validate.Struct(f)
- suite.EqualError(err, "Key: 'FollowRequest.URI' Error:Field validation for 'URI' failed on the 'required' tag")
-
- f.URI = "this-is-not-a-valid-url"
- err = validate.Struct(f)
- suite.EqualError(err, "Key: 'FollowRequest.URI' Error:Field validation for 'URI' failed on the 'url' tag")
-}
-
-func TestFollowRequestValidateTestSuite(t *testing.T) {
- suite.Run(t, new(FollowRequestValidateTestSuite))
-}
diff --git a/internal/validate/instance_test.go b/internal/validate/instance_test.go
deleted file mode 100644
index 38c68a616..000000000
--- a/internal/validate/instance_test.go
+++ /dev/null
@@ -1,145 +0,0 @@
-// 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 validate_test
-
-import (
- "testing"
- "time"
-
- "github.com/stretchr/testify/suite"
- "github.com/superseriousbusiness/gotosocial/internal/gtsmodel"
- "github.com/superseriousbusiness/gotosocial/internal/validate"
-)
-
-func happyInstance() *gtsmodel.Instance {
- return &gtsmodel.Instance{
- ID: "01FE91RJR88PSEEE30EV35QR8N",
- CreatedAt: time.Now(),
- UpdatedAt: time.Now(),
- Domain: "example.org",
- Title: "Example Instance",
- URI: "https://example.org",
- SuspendedAt: time.Time{},
- DomainBlockID: "",
- DomainBlock: nil,
- ShortDescription: "This is a description for the example/testing instance.",
- Description: "This is a way longer description for the example/testing instance!",
- Terms: "Don't be a knobhead.",
- ContactEmail: "admin@example.org",
- ContactAccountUsername: "admin",
- ContactAccountID: "01FEE20H5QWHJDEXAEE9G96PR0",
- ContactAccount: nil,
- Reputation: 420,
- Version: "gotosocial 0.1.0",
- }
-}
-
-type InstanceValidateTestSuite struct {
- suite.Suite
-}
-
-func (suite *InstanceValidateTestSuite) TestValidateInstanceHappyPath() {
- // no problem here
- m := happyInstance()
- err := validate.Struct(*m)
- suite.NoError(err)
-}
-
-func (suite *InstanceValidateTestSuite) TestValidateInstanceBadID() {
- m := happyInstance()
-
- m.ID = ""
- err := validate.Struct(*m)
- suite.EqualError(err, "Key: 'Instance.ID' Error:Field validation for 'ID' failed on the 'required' tag")
-
- m.ID = "01FE96W293ZPRG9FQQP48HK8N001FE96W32AT24VYBGM12WN3GKB"
- err = validate.Struct(*m)
- suite.EqualError(err, "Key: 'Instance.ID' Error:Field validation for 'ID' failed on the 'ulid' tag")
-}
-
-func (suite *InstanceValidateTestSuite) TestValidateInstanceAccountURI() {
- i := happyInstance()
-
- i.URI = ""
- err := validate.Struct(i)
- suite.EqualError(err, "Key: 'Instance.URI' Error:Field validation for 'URI' failed on the 'required' tag")
-
- i.URI = "---------------------------"
- err = validate.Struct(i)
- suite.EqualError(err, "Key: 'Instance.URI' Error:Field validation for 'URI' failed on the 'url' tag")
-}
-
-func (suite *InstanceValidateTestSuite) TestValidateInstanceDodgyAccountID() {
- i := happyInstance()
-
- i.ContactAccountID = "9HZJ76B6VXSKF"
- err := validate.Struct(i)
- suite.EqualError(err, "Key: 'Instance.ContactAccountID' Error:Field validation for 'ContactAccountID' failed on the 'ulid' tag")
-
- i.ContactAccountID = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa!!!!!!!!!!!!"
- err = validate.Struct(i)
- suite.EqualError(err, "Key: 'Instance.ContactAccountID' Error:Field validation for 'ContactAccountID' failed on the 'ulid' tag")
-
- i.ContactAccountID = ""
- err = validate.Struct(i)
- suite.EqualError(err, "Key: 'Instance.ContactAccountID' Error:Field validation for 'ContactAccountID' failed on the 'required_with' tag")
-
- i.ContactAccountUsername = ""
- err = validate.Struct(i)
- suite.NoError(err)
-}
-
-func (suite *InstanceValidateTestSuite) TestValidateInstanceDomain() {
- i := happyInstance()
-
- i.Domain = "poopoo"
- err := validate.Struct(i)
- suite.EqualError(err, "Key: 'Instance.Domain' Error:Field validation for 'Domain' failed on the 'fqdn' tag")
-
- i.Domain = ""
- err = validate.Struct(i)
- suite.EqualError(err, "Key: 'Instance.Domain' Error:Field validation for 'Domain' failed on the 'required' tag")
-
- i.Domain = "https://aaaaaaaaaaaaah.org"
- err = validate.Struct(i)
- suite.EqualError(err, "Key: 'Instance.Domain' Error:Field validation for 'Domain' failed on the 'fqdn' tag")
-}
-
-func (suite *InstanceValidateTestSuite) TestValidateInstanceContactEmail() {
- i := happyInstance()
-
- i.ContactEmail = "poopoo"
- err := validate.Struct(i)
- suite.EqualError(err, "Key: 'Instance.ContactEmail' Error:Field validation for 'ContactEmail' failed on the 'email' tag")
-
- i.ContactEmail = ""
- err = validate.Struct(i)
- suite.NoError(err)
-}
-
-func (suite *InstanceValidateTestSuite) TestValidateInstanceNoCreatedAt() {
- i := happyInstance()
-
- i.CreatedAt = time.Time{}
- err := validate.Struct(i)
- suite.NoError(err)
-}
-
-func TestInstanceValidateTestSuite(t *testing.T) {
- suite.Run(t, new(InstanceValidateTestSuite))
-}
diff --git a/internal/validate/mediaattachment_test.go b/internal/validate/mediaattachment_test.go
deleted file mode 100644
index 1021319f2..000000000
--- a/internal/validate/mediaattachment_test.go
+++ /dev/null
@@ -1,230 +0,0 @@
-// 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 validate_test
-
-import (
- "os"
- "testing"
- "time"
-
- "github.com/stretchr/testify/suite"
- "github.com/superseriousbusiness/gotosocial/internal/gtsmodel"
- "github.com/superseriousbusiness/gotosocial/internal/validate"
- "github.com/superseriousbusiness/gotosocial/testrig"
-)
-
-func happyMediaAttachment() *gtsmodel.MediaAttachment {
- // the file validator actually runs os.Stat on given paths, so we need to just create small
- // temp files for both the main attachment file and the thumbnail
-
- mainFile, err := os.CreateTemp("", "gts_test_mainfile")
- if err != nil {
- panic(err)
- }
- if _, err := mainFile.WriteString("main"); err != nil {
- panic(err)
- }
- mainPath := mainFile.Name()
- if err := mainFile.Close(); err != nil {
- panic(err)
- }
-
- thumbnailFile, err := os.CreateTemp("", "gts_test_thumbnail")
- if err != nil {
- panic(err)
- }
- if _, err := thumbnailFile.WriteString("thumbnail"); err != nil {
- panic(err)
- }
- thumbnailPath := thumbnailFile.Name()
- if err := thumbnailFile.Close(); err != nil {
- panic(err)
- }
-
- return &gtsmodel.MediaAttachment{
- ID: "01F8MH6NEM8D7527KZAECTCR76",
- CreatedAt: time.Now().Add(-71 * time.Hour),
- UpdatedAt: time.Now().Add(-71 * time.Hour),
- StatusID: "01F8MH75CBF9JFX4ZAD54N0W0R",
- URL: "http://localhost:8080/fileserver/01F8MH17FWEB39HZJ76B6VXSKF/attachment/original/01F8MH6NEM8D7527KZAECTCR76.jpg",
- RemoteURL: "",
- Type: gtsmodel.FileTypeImage,
- FileMeta: gtsmodel.FileMeta{
- Original: gtsmodel.Original{
- Width: 1200,
- Height: 630,
- Size: 756000,
- Aspect: 1.9047619047619047,
- },
- Small: gtsmodel.Small{
- Width: 256,
- Height: 134,
- Size: 34304,
- Aspect: 1.9104477611940298,
- },
- },
- AccountID: "01F8MH17FWEB39HZJ76B6VXSKF",
- Description: "Black and white image of some 50's style text saying: Welcome On Board",
- ScheduledStatusID: "",
- Blurhash: "LNJRdVM{00Rj%Mayt7j[4nWBofRj",
- Processing: 2,
- File: gtsmodel.File{
- Path: mainPath,
- ContentType: "image/jpeg",
- FileSize: 62529,
- UpdatedAt: time.Now().Add(-71 * time.Hour),
- },
- Thumbnail: gtsmodel.Thumbnail{
- Path: thumbnailPath,
- ContentType: "image/jpeg",
- FileSize: 6872,
- UpdatedAt: time.Now().Add(-71 * time.Hour),
- URL: "http://localhost:8080/fileserver/01F8MH17FWEB39HZJ76B6VXSKF/attachment/small/01F8MH6NEM8D7527KZAECTCR76.jpg",
- RemoteURL: "",
- },
- Avatar: testrig.FalseBool(),
- Header: testrig.FalseBool(),
- }
-}
-
-type MediaAttachmentValidateTestSuite struct {
- suite.Suite
-}
-
-func (suite *MediaAttachmentValidateTestSuite) TestValidateMediaAttachmentHappyPath() {
- // no problem here
- m := happyMediaAttachment()
- err := validate.Struct(m)
- suite.NoError(err)
-}
-
-func (suite *MediaAttachmentValidateTestSuite) TestValidateMediaAttachmentBadFilePaths() {
- m := happyMediaAttachment()
-
- m.File.Path = "/tmp/nonexistent/file/for/gotosocial/test"
- err := validate.Struct(m)
- suite.EqualError(err, "Key: 'MediaAttachment.File.Path' Error:Field validation for 'Path' failed on the 'file' tag")
-
- m.File.Path = ""
- err = validate.Struct(m)
- suite.EqualError(err, "Key: 'MediaAttachment.File.Path' Error:Field validation for 'Path' failed on the 'required' tag")
-
- m.File.Path = "???????????thisnot a valid path####"
- err = validate.Struct(m)
- suite.EqualError(err, "Key: 'MediaAttachment.File.Path' Error:Field validation for 'Path' failed on the 'file' tag")
-
- m.Thumbnail.Path = "/tmp/nonexistent/file/for/gotosocial/test"
- err = validate.Struct(m)
- suite.EqualError(err, "Key: 'MediaAttachment.File.Path' Error:Field validation for 'Path' failed on the 'file' tag\nKey: 'MediaAttachment.Thumbnail.Path' Error:Field validation for 'Path' failed on the 'file' tag")
-
- m.Thumbnail.Path = ""
- err = validate.Struct(m)
- suite.EqualError(err, "Key: 'MediaAttachment.File.Path' Error:Field validation for 'Path' failed on the 'file' tag\nKey: 'MediaAttachment.Thumbnail.Path' Error:Field validation for 'Path' failed on the 'required' tag")
-
- m.Thumbnail.Path = "???????????thisnot a valid path####"
- err = validate.Struct(m)
- suite.EqualError(err, "Key: 'MediaAttachment.File.Path' Error:Field validation for 'Path' failed on the 'file' tag\nKey: 'MediaAttachment.Thumbnail.Path' Error:Field validation for 'Path' failed on the 'file' tag")
-}
-
-func (suite *MediaAttachmentValidateTestSuite) TestValidateMediaAttachmentBadType() {
- m := happyMediaAttachment()
-
- m.Type = ""
- err := validate.Struct(m)
- suite.EqualError(err, "Key: 'MediaAttachment.Type' Error:Field validation for 'Type' failed on the 'oneof' tag")
-
- m.Type = "Not Supported"
- err = validate.Struct(m)
- suite.EqualError(err, "Key: 'MediaAttachment.Type' Error:Field validation for 'Type' failed on the 'oneof' tag")
-}
-
-func (suite *MediaAttachmentValidateTestSuite) TestValidateMediaAttachmentBadFileMeta() {
- m := happyMediaAttachment()
-
- m.FileMeta.Original.Aspect = 0
- err := validate.Struct(m)
- suite.EqualError(err, "Key: 'MediaAttachment.FileMeta.Original.Aspect' Error:Field validation for 'Aspect' failed on the 'required_with' tag")
-
- m.FileMeta.Original.Height = 0
- err = validate.Struct(m)
- suite.EqualError(err, "Key: 'MediaAttachment.FileMeta.Original.Height' Error:Field validation for 'Height' failed on the 'required_with' tag\nKey: 'MediaAttachment.FileMeta.Original.Aspect' Error:Field validation for 'Aspect' failed on the 'required_with' tag")
-
- m.FileMeta.Original = gtsmodel.Original{}
- err = validate.Struct(m)
- suite.NoError(err)
-
- m.FileMeta.Focus.X = 3.6
- err = validate.Struct(m)
- suite.EqualError(err, "Key: 'MediaAttachment.FileMeta.Focus.X' Error:Field validation for 'X' failed on the 'max' tag")
-
- m.FileMeta.Focus.Y = -50
- err = validate.Struct(m)
- suite.EqualError(err, "Key: 'MediaAttachment.FileMeta.Focus.X' Error:Field validation for 'X' failed on the 'max' tag\nKey: 'MediaAttachment.FileMeta.Focus.Y' Error:Field validation for 'Y' failed on the 'min' tag")
-}
-
-func (suite *MediaAttachmentValidateTestSuite) TestValidateMediaAttachmentBadURLCombos() {
- m := happyMediaAttachment()
-
- m.URL = "aaaaaaaaaa"
- err := validate.Struct(m)
- suite.EqualError(err, "Key: 'MediaAttachment.URL' Error:Field validation for 'URL' failed on the 'url' tag")
-
- m.URL = ""
- err = validate.Struct(m)
- suite.EqualError(err, "Key: 'MediaAttachment.URL' Error:Field validation for 'URL' failed on the 'required_without' tag\nKey: 'MediaAttachment.RemoteURL' Error:Field validation for 'RemoteURL' failed on the 'required_without' tag")
-
- m.RemoteURL = "oooooooooo"
- err = validate.Struct(m)
- suite.EqualError(err, "Key: 'MediaAttachment.RemoteURL' Error:Field validation for 'RemoteURL' failed on the 'url' tag")
-
- m.RemoteURL = "https://a-valid-url.gay"
- err = validate.Struct(m)
- suite.NoError(err)
-}
-
-func (suite *MediaAttachmentValidateTestSuite) TestValidateMediaAttachmentBlurhash() {
- m := happyMediaAttachment()
-
- m.Blurhash = ""
- err := validate.Struct(m)
- suite.EqualError(err, "Key: 'MediaAttachment.Blurhash' Error:Field validation for 'Blurhash' failed on the 'required_if' tag")
-
- m.Type = gtsmodel.FileTypeAudio
- err = validate.Struct(m)
- suite.NoError(err)
-
- m.Blurhash = "some_blurhash"
- err = validate.Struct(m)
- suite.NoError(err)
-}
-
-func (suite *MediaAttachmentValidateTestSuite) TestValidateMediaAttachmentProcessing() {
- m := happyMediaAttachment()
-
- m.Processing = 420
- err := validate.Struct(m)
- suite.EqualError(err, "Key: 'MediaAttachment.Processing' Error:Field validation for 'Processing' failed on the 'oneof' tag")
-
- m.Processing = -5
- err = validate.Struct(m)
- suite.EqualError(err, "Key: 'MediaAttachment.Processing' Error:Field validation for 'Processing' failed on the 'oneof' tag")
-}
-
-func TestMediaAttachmentValidateTestSuite(t *testing.T) {
- suite.Run(t, new(MediaAttachmentValidateTestSuite))
-}
diff --git a/internal/validate/mention_test.go b/internal/validate/mention_test.go
deleted file mode 100644
index 52513bd8c..000000000
--- a/internal/validate/mention_test.go
+++ /dev/null
@@ -1,101 +0,0 @@
-// 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 validate_test
-
-import (
- "testing"
- "time"
-
- "github.com/stretchr/testify/suite"
- "github.com/superseriousbusiness/gotosocial/internal/gtsmodel"
- "github.com/superseriousbusiness/gotosocial/internal/validate"
-)
-
-func happyMention() *gtsmodel.Mention {
- return &gtsmodel.Mention{
- ID: "01FE91RJR88PSEEE30EV35QR8N",
- CreatedAt: time.Now(),
- UpdatedAt: time.Now(),
- OriginAccountID: "01FE96MAE58MXCE5C4SSMEMCEK",
- OriginAccountURI: "https://some-instance/accounts/bleepbloop",
- OriginAccount: nil,
- TargetAccountID: "01FE96MXRHWZHKC0WH5FT82H1A",
- TargetAccount: nil,
- StatusID: "01FE96NBPNJNY26730FT6GZTFE",
- Status: nil,
- }
-}
-
-type MentionValidateTestSuite struct {
- suite.Suite
-}
-
-func (suite *MentionValidateTestSuite) TestValidateMentionHappyPath() {
- // no problem here
- m := happyMention()
- err := validate.Struct(m)
- suite.NoError(err)
-}
-
-func (suite *MentionValidateTestSuite) TestValidateMentionBadID() {
- m := happyMention()
-
- m.ID = ""
- err := validate.Struct(m)
- suite.EqualError(err, "Key: 'Mention.ID' Error:Field validation for 'ID' failed on the 'required' tag")
-
- m.ID = "01FE96W293ZPRG9FQQP48HK8N001FE96W32AT24VYBGM12WN3GKB"
- err = validate.Struct(m)
- suite.EqualError(err, "Key: 'Mention.ID' Error:Field validation for 'ID' failed on the 'ulid' tag")
-}
-
-func (suite *MentionValidateTestSuite) TestValidateMentionAccountURI() {
- m := happyMention()
-
- m.OriginAccountURI = ""
- err := validate.Struct(m)
- suite.EqualError(err, "Key: 'Mention.OriginAccountURI' Error:Field validation for 'OriginAccountURI' failed on the 'url' tag")
-
- m.OriginAccountURI = "---------------------------"
- err = validate.Struct(m)
- suite.EqualError(err, "Key: 'Mention.OriginAccountURI' Error:Field validation for 'OriginAccountURI' failed on the 'url' tag")
-}
-
-func (suite *MentionValidateTestSuite) TestValidateMentionDodgyStatusID() {
- m := happyMention()
-
- m.StatusID = "9HZJ76B6VXSKF"
- err := validate.Struct(m)
- suite.EqualError(err, "Key: 'Mention.StatusID' Error:Field validation for 'StatusID' failed on the 'ulid' tag")
-
- m.StatusID = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa!!!!!!!!!!!!"
- err = validate.Struct(m)
- suite.EqualError(err, "Key: 'Mention.StatusID' Error:Field validation for 'StatusID' failed on the 'ulid' tag")
-}
-
-func (suite *MentionValidateTestSuite) TestValidateMentionNoCreatedAt() {
- m := happyMention()
-
- m.CreatedAt = time.Time{}
- err := validate.Struct(m)
- suite.NoError(err)
-}
-
-func TestMentionValidateTestSuite(t *testing.T) {
- suite.Run(t, new(MentionValidateTestSuite))
-}
diff --git a/internal/validate/notification_test.go b/internal/validate/notification_test.go
deleted file mode 100644
index a76b8bf58..000000000
--- a/internal/validate/notification_test.go
+++ /dev/null
@@ -1,97 +0,0 @@
-// 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 validate_test
-
-import (
- "testing"
- "time"
-
- "github.com/stretchr/testify/suite"
- "github.com/superseriousbusiness/gotosocial/internal/gtsmodel"
- "github.com/superseriousbusiness/gotosocial/internal/validate"
-)
-
-func happyNotification() *gtsmodel.Notification {
- return &gtsmodel.Notification{
- ID: "01FE91RJR88PSEEE30EV35QR8N",
- CreatedAt: time.Now(),
- NotificationType: gtsmodel.NotificationFave,
- OriginAccountID: "01FE96MAE58MXCE5C4SSMEMCEK",
- OriginAccount: nil,
- TargetAccountID: "01FE96MXRHWZHKC0WH5FT82H1A",
- TargetAccount: nil,
- StatusID: "01FE96NBPNJNY26730FT6GZTFE",
- Status: nil,
- }
-}
-
-type NotificationValidateTestSuite struct {
- suite.Suite
-}
-
-func (suite *NotificationValidateTestSuite) TestValidateNotificationHappyPath() {
- // no problem here
- n := happyNotification()
- err := validate.Struct(n)
- suite.NoError(err)
-}
-
-func (suite *NotificationValidateTestSuite) TestValidateNotificationBadID() {
- n := happyNotification()
-
- n.ID = ""
- err := validate.Struct(n)
- suite.EqualError(err, "Key: 'Notification.ID' Error:Field validation for 'ID' failed on the 'required' tag")
-
- n.ID = "01FE96W293ZPRG9FQQP48HK8N001FE96W32AT24VYBGM12WN3GKB"
- err = validate.Struct(n)
- suite.EqualError(err, "Key: 'Notification.ID' Error:Field validation for 'ID' failed on the 'ulid' tag")
-}
-
-func (suite *NotificationValidateTestSuite) TestValidateNotificationStatusID() {
- n := happyNotification()
-
- n.StatusID = ""
- err := validate.Struct(n)
- suite.EqualError(err, "Key: 'Notification.StatusID' Error:Field validation for 'StatusID' failed on the 'required_if' tag")
-
- n.StatusID = "9HZJ76B6VXSKF"
- err = validate.Struct(n)
- suite.EqualError(err, "Key: 'Notification.StatusID' Error:Field validation for 'StatusID' failed on the 'ulid' tag")
-
- n.StatusID = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa!!!!!!!!!!!!"
- err = validate.Struct(n)
- suite.EqualError(err, "Key: 'Notification.StatusID' Error:Field validation for 'StatusID' failed on the 'ulid' tag")
-
- n.StatusID = ""
- n.NotificationType = gtsmodel.NotificationFollowRequest
- err = validate.Struct(n)
- suite.NoError(err)
-}
-
-func (suite *NotificationValidateTestSuite) TestValidateNotificationNoCreatedAt() {
- n := happyNotification()
-
- n.CreatedAt = time.Time{}
- err := validate.Struct(n)
- suite.NoError(err)
-}
-
-func TestNotificationValidateTestSuite(t *testing.T) {
- suite.Run(t, new(NotificationValidateTestSuite))
-}
diff --git a/internal/validate/routersession_test.go b/internal/validate/routersession_test.go
deleted file mode 100644
index f9dc49e40..000000000
--- a/internal/validate/routersession_test.go
+++ /dev/null
@@ -1,87 +0,0 @@
-// 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 validate_test
-
-import (
- "testing"
-
- "github.com/stretchr/testify/suite"
- "github.com/superseriousbusiness/gotosocial/internal/gtsmodel"
- "github.com/superseriousbusiness/gotosocial/internal/validate"
-)
-
-func happyRouterSession() *gtsmodel.RouterSession {
- return &gtsmodel.RouterSession{
- ID: "01FE91RJR88PSEEE30EV35QR8N",
- Auth: []byte("12345678901234567890123456789012"),
- Crypt: []byte("12345678901234567890123456789012"),
- }
-}
-
-type RouterSessionValidateTestSuite struct {
- suite.Suite
-}
-
-func (suite *RouterSessionValidateTestSuite) TestValidateRouterSessionHappyPath() {
- // no problem here
- r := happyRouterSession()
- err := validate.Struct(r)
- suite.NoError(err)
-}
-
-func (suite *RouterSessionValidateTestSuite) TestValidateRouterSessionAuth() {
- r := happyRouterSession()
-
- // remove auth struct
- r.Auth = nil
- err := validate.Struct(r)
- suite.EqualError(err, "Key: 'RouterSession.Auth' Error:Field validation for 'Auth' failed on the 'required' tag")
-
- // auth bytes too long
- r.Auth = []byte("1234567890123456789012345678901234567890")
- err = validate.Struct(r)
- suite.EqualError(err, "Key: 'RouterSession.Auth' Error:Field validation for 'Auth' failed on the 'len' tag")
-
- // auth bytes too short
- r.Auth = []byte("12345678901")
- err = validate.Struct(r)
- suite.EqualError(err, "Key: 'RouterSession.Auth' Error:Field validation for 'Auth' failed on the 'len' tag")
-}
-
-func (suite *RouterSessionValidateTestSuite) TestValidateRouterSessionCrypt() {
- r := happyRouterSession()
-
- // remove crypt struct
- r.Crypt = nil
- err := validate.Struct(r)
- suite.EqualError(err, "Key: 'RouterSession.Crypt' Error:Field validation for 'Crypt' failed on the 'required' tag")
-
- // crypt bytes too long
- r.Crypt = []byte("1234567890123456789012345678901234567890")
- err = validate.Struct(r)
- suite.EqualError(err, "Key: 'RouterSession.Crypt' Error:Field validation for 'Crypt' failed on the 'len' tag")
-
- // crypt bytes too short
- r.Crypt = []byte("12345678901")
- err = validate.Struct(r)
- suite.EqualError(err, "Key: 'RouterSession.Crypt' Error:Field validation for 'Crypt' failed on the 'len' tag")
-}
-
-func TestRouterSessionValidateTestSuite(t *testing.T) {
- suite.Run(t, new(RouterSessionValidateTestSuite))
-}
diff --git a/internal/validate/status_test.go b/internal/validate/status_test.go
deleted file mode 100644
index db0cd8fda..000000000
--- a/internal/validate/status_test.go
+++ /dev/null
@@ -1,160 +0,0 @@
-// 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 validate_test
-
-import (
- "testing"
- "time"
-
- "github.com/stretchr/testify/suite"
- "github.com/superseriousbusiness/gotosocial/internal/ap"
- "github.com/superseriousbusiness/gotosocial/internal/gtsmodel"
- "github.com/superseriousbusiness/gotosocial/internal/validate"
- "github.com/superseriousbusiness/gotosocial/testrig"
-)
-
-func happyStatus() *gtsmodel.Status {
- return &gtsmodel.Status{
- ID: "01FEBBH6NYDG87NK6A6EC543ED",
- CreatedAt: time.Now(),
- UpdatedAt: time.Now(),
- URI: "https://example.org/users/test_user/statuses/01FEBBH6NYDG87NK6A6EC543ED",
- URL: "https://example.org/@test_user/01FEBBH6NYDG87NK6A6EC543ED",
- Content: "<p>Test status! #hello</p>",
- AttachmentIDs: []string{"01FEBBKZBY9H5FEP3PHVVAAGN1", "01FEBBM7S2R4WT6WWW22KN1PWE"},
- Attachments: nil,
- TagIDs: []string{"01FEBBNBMBSN1FESMZ1TCXNWYP"},
- Tags: nil,
- MentionIDs: nil,
- Mentions: nil,
- EmojiIDs: nil,
- Emojis: nil,
- Local: testrig.TrueBool(),
- AccountID: "01FEBBQ4KEP3824WW61MF52638",
- Account: nil,
- AccountURI: "https://example.org/users/test_user",
- InReplyToID: "",
- InReplyToURI: "",
- InReplyToAccountID: "",
- InReplyTo: nil,
- InReplyToAccount: nil,
- BoostOfID: "",
- BoostOfAccountID: "",
- BoostOf: nil,
- BoostOfAccount: nil,
- ContentWarning: "hello world test post",
- Visibility: gtsmodel.VisibilityPublic,
- Sensitive: testrig.FalseBool(),
- Language: "en",
- CreatedWithApplicationID: "01FEBBZHF4GFVRXSJVXD0JTZZ2",
- CreatedWithApplication: nil,
- Federated: testrig.TrueBool(),
- Boostable: testrig.TrueBool(),
- Replyable: testrig.TrueBool(),
- Likeable: testrig.TrueBool(),
- ActivityStreamsType: ap.ObjectNote,
- Text: "Test status! #hello",
- }
-}
-
-type StatusValidateTestSuite struct {
- suite.Suite
-}
-
-func (suite *StatusValidateTestSuite) TestValidateStatusHappyPath() {
- // no problem here
- s := happyStatus()
- err := validate.Struct(s)
- suite.NoError(err)
-}
-
-func (suite *StatusValidateTestSuite) TestValidateStatusBadID() {
- s := happyStatus()
-
- s.ID = ""
- err := validate.Struct(s)
- suite.EqualError(err, "Key: 'Status.ID' Error:Field validation for 'ID' failed on the 'required' tag")
-
- s.ID = "01FE96W293ZPRG9FQQP48HK8N001FE96W32AT24VYBGM12WN3GKB"
- err = validate.Struct(s)
- suite.EqualError(err, "Key: 'Status.ID' Error:Field validation for 'ID' failed on the 'ulid' tag")
-}
-
-func (suite *StatusValidateTestSuite) TestValidateStatusAttachmentIDs() {
- s := happyStatus()
-
- s.AttachmentIDs[0] = ""
- err := validate.Struct(s)
- suite.EqualError(err, "Key: 'Status.AttachmentIDs[0]' Error:Field validation for 'AttachmentIDs[0]' failed on the 'ulid' tag")
-
- s.AttachmentIDs[0] = "01FE96W293ZPRG9FQQP48HK8N001FE96W32AT24VYBGM12WN3GKB"
- err = validate.Struct(s)
- suite.EqualError(err, "Key: 'Status.AttachmentIDs[0]' Error:Field validation for 'AttachmentIDs[0]' failed on the 'ulid' tag")
-
- s.AttachmentIDs[1] = ""
- err = validate.Struct(s)
- suite.EqualError(err, "Key: 'Status.AttachmentIDs[0]' Error:Field validation for 'AttachmentIDs[0]' failed on the 'ulid' tag\nKey: 'Status.AttachmentIDs[1]' Error:Field validation for 'AttachmentIDs[1]' failed on the 'ulid' tag")
-
- s.AttachmentIDs = []string{}
- err = validate.Struct(s)
- suite.NoError(err)
-
- s.AttachmentIDs = nil
- err = validate.Struct(s)
- suite.NoError(err)
-}
-
-func (suite *StatusValidateTestSuite) TestStatusApplicationID() {
- s := happyStatus()
-
- s.CreatedWithApplicationID = ""
- err := validate.Struct(s)
- suite.EqualError(err, "Key: 'Status.CreatedWithApplicationID' Error:Field validation for 'CreatedWithApplicationID' failed on the 'required_if' tag")
-
- s.Local = testrig.FalseBool()
- err = validate.Struct(s)
- suite.NoError(err)
-}
-
-func (suite *StatusValidateTestSuite) TestValidateStatusReplyFields() {
- s := happyStatus()
-
- s.InReplyToAccountID = "01FEBCTP6DN7961PN81C3DVM4N "
- err := validate.Struct(s)
- suite.EqualError(err, "Key: 'Status.InReplyToID' Error:Field validation for 'InReplyToID' failed on the 'required_with' tag\nKey: 'Status.InReplyToURI' Error:Field validation for 'InReplyToURI' failed on the 'required_with' tag\nKey: 'Status.InReplyToAccountID' Error:Field validation for 'InReplyToAccountID' failed on the 'ulid' tag")
-
- s.InReplyToAccountID = "01FEBCTP6DN7961PN81C3DVM4N"
- err = validate.Struct(s)
- suite.EqualError(err, "Key: 'Status.InReplyToID' Error:Field validation for 'InReplyToID' failed on the 'required_with' tag\nKey: 'Status.InReplyToURI' Error:Field validation for 'InReplyToURI' failed on the 'required_with' tag")
-
- s.InReplyToURI = "https://example.org/users/mmbop/statuses/aaaaaaaa"
- err = validate.Struct(s)
- suite.EqualError(err, "Key: 'Status.InReplyToID' Error:Field validation for 'InReplyToID' failed on the 'required_with' tag")
-
- s.InReplyToID = "not a valid ulid"
- err = validate.Struct(s)
- suite.EqualError(err, "Key: 'Status.InReplyToID' Error:Field validation for 'InReplyToID' failed on the 'ulid' tag")
-
- s.InReplyToID = "01FEBD07E72DEY6YB9K10ZA6ST"
- err = validate.Struct(s)
- suite.NoError(err)
-}
-
-func TestStatusValidateTestSuite(t *testing.T) {
- suite.Run(t, new(StatusValidateTestSuite))
-}
diff --git a/internal/validate/statusbookmark_test.go b/internal/validate/statusbookmark_test.go
deleted file mode 100644
index 3be9e56ed..000000000
--- a/internal/validate/statusbookmark_test.go
+++ /dev/null
@@ -1,87 +0,0 @@
-// 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 validate_test
-
-import (
- "testing"
- "time"
-
- "github.com/stretchr/testify/suite"
- "github.com/superseriousbusiness/gotosocial/internal/gtsmodel"
- "github.com/superseriousbusiness/gotosocial/internal/validate"
-)
-
-func happyStatusBookmark() *gtsmodel.StatusBookmark {
- return &gtsmodel.StatusBookmark{
- ID: "01FE91RJR88PSEEE30EV35QR8N",
- CreatedAt: time.Now(),
- AccountID: "01FE96MAE58MXCE5C4SSMEMCEK",
- Account: nil,
- TargetAccountID: "01FE96MXRHWZHKC0WH5FT82H1A",
- TargetAccount: nil,
- StatusID: "01FE96NBPNJNY26730FT6GZTFE",
- Status: nil,
- }
-}
-
-type StatusBookmarkValidateTestSuite struct {
- suite.Suite
-}
-
-func (suite *StatusBookmarkValidateTestSuite) TestValidateStatusBookmarkHappyPath() {
- // no problem here
- s := happyStatusBookmark()
- err := validate.Struct(s)
- suite.NoError(err)
-}
-
-func (suite *StatusBookmarkValidateTestSuite) TestValidateStatusBookmarkBadID() {
- s := happyStatusBookmark()
-
- s.ID = ""
- err := validate.Struct(s)
- suite.EqualError(err, "Key: 'StatusBookmark.ID' Error:Field validation for 'ID' failed on the 'required' tag")
-
- s.ID = "01FE96W293ZPRG9FQQP48HK8N001FE96W32AT24VYBGM12WN3GKB"
- err = validate.Struct(s)
- suite.EqualError(err, "Key: 'StatusBookmark.ID' Error:Field validation for 'ID' failed on the 'ulid' tag")
-}
-
-func (suite *StatusBookmarkValidateTestSuite) TestValidateStatusBookmarkDodgyStatusID() {
- s := happyStatusBookmark()
-
- s.StatusID = "9HZJ76B6VXSKF"
- err := validate.Struct(s)
- suite.EqualError(err, "Key: 'StatusBookmark.StatusID' Error:Field validation for 'StatusID' failed on the 'ulid' tag")
-
- s.StatusID = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa!!!!!!!!!!!!"
- err = validate.Struct(s)
- suite.EqualError(err, "Key: 'StatusBookmark.StatusID' Error:Field validation for 'StatusID' failed on the 'ulid' tag")
-}
-
-func (suite *StatusBookmarkValidateTestSuite) TestValidateStatusBookmarkNoCreatedAt() {
- s := happyStatusBookmark()
-
- s.CreatedAt = time.Time{}
- err := validate.Struct(s)
- suite.NoError(err)
-}
-
-func TestStatusBookmarkValidateTestSuite(t *testing.T) {
- suite.Run(t, new(StatusBookmarkValidateTestSuite))
-}
diff --git a/internal/validate/statusfave_test.go b/internal/validate/statusfave_test.go
deleted file mode 100644
index e864e39f2..000000000
--- a/internal/validate/statusfave_test.go
+++ /dev/null
@@ -1,100 +0,0 @@
-// 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 validate_test
-
-import (
- "testing"
- "time"
-
- "github.com/stretchr/testify/suite"
- "github.com/superseriousbusiness/gotosocial/internal/gtsmodel"
- "github.com/superseriousbusiness/gotosocial/internal/validate"
-)
-
-func happyStatusFave() *gtsmodel.StatusFave {
- return &gtsmodel.StatusFave{
- ID: "01FE91RJR88PSEEE30EV35QR8N",
- CreatedAt: time.Now(),
- AccountID: "01FE96MAE58MXCE5C4SSMEMCEK",
- Account: nil,
- TargetAccountID: "01FE96MXRHWZHKC0WH5FT82H1A",
- TargetAccount: nil,
- StatusID: "01FE96NBPNJNY26730FT6GZTFE",
- Status: nil,
- URI: "https://example.org/users/user1/activity/faves/01FE91RJR88PSEEE30EV35QR8N",
- }
-}
-
-type StatusFaveValidateTestSuite struct {
- suite.Suite
-}
-
-func (suite *StatusFaveValidateTestSuite) TestValidateStatusFaveHappyPath() {
- // no problem here
- f := happyStatusFave()
- err := validate.Struct(f)
- suite.NoError(err)
-}
-
-func (suite *StatusFaveValidateTestSuite) TestValidateStatusFaveBadID() {
- f := happyStatusFave()
-
- f.ID = ""
- err := validate.Struct(f)
- suite.EqualError(err, "Key: 'StatusFave.ID' Error:Field validation for 'ID' failed on the 'required' tag")
-
- f.ID = "01FE96W293ZPRG9FQQP48HK8N001FE96W32AT24VYBGM12WN3GKB"
- err = validate.Struct(f)
- suite.EqualError(err, "Key: 'StatusFave.ID' Error:Field validation for 'ID' failed on the 'ulid' tag")
-}
-
-func (suite *StatusFaveValidateTestSuite) TestValidateStatusFaveDodgyStatusID() {
- f := happyStatusFave()
-
- f.StatusID = "9HZJ76B6VXSKF"
- err := validate.Struct(f)
- suite.EqualError(err, "Key: 'StatusFave.StatusID' Error:Field validation for 'StatusID' failed on the 'ulid' tag")
-
- f.StatusID = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa!!!!!!!!!!!!"
- err = validate.Struct(f)
- suite.EqualError(err, "Key: 'StatusFave.StatusID' Error:Field validation for 'StatusID' failed on the 'ulid' tag")
-}
-
-func (suite *StatusFaveValidateTestSuite) TestValidateStatusFaveNoCreatedAt() {
- f := happyStatusFave()
-
- f.CreatedAt = time.Time{}
- err := validate.Struct(f)
- suite.NoError(err)
-}
-
-func (suite *StatusFaveValidateTestSuite) TestValidateStatusFaveNoURI() {
- f := happyStatusFave()
-
- f.URI = ""
- err := validate.Struct(f)
- suite.EqualError(err, "Key: 'StatusFave.URI' Error:Field validation for 'URI' failed on the 'required' tag")
-
- f.URI = "this-is-not-a-valid-url"
- err = validate.Struct(f)
- suite.EqualError(err, "Key: 'StatusFave.URI' Error:Field validation for 'URI' failed on the 'url' tag")
-}
-
-func TestStatusFaveValidateTestSuite(t *testing.T) {
- suite.Run(t, new(StatusFaveValidateTestSuite))
-}
diff --git a/internal/validate/statusmute_test.go b/internal/validate/statusmute_test.go
deleted file mode 100644
index 20358bb23..000000000
--- a/internal/validate/statusmute_test.go
+++ /dev/null
@@ -1,87 +0,0 @@
-// 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 validate_test
-
-import (
- "testing"
- "time"
-
- "github.com/stretchr/testify/suite"
- "github.com/superseriousbusiness/gotosocial/internal/gtsmodel"
- "github.com/superseriousbusiness/gotosocial/internal/validate"
-)
-
-func happyStatusMute() *gtsmodel.StatusMute {
- return &gtsmodel.StatusMute{
- ID: "01FE91RJR88PSEEE30EV35QR8N",
- CreatedAt: time.Now(),
- AccountID: "01FE96MAE58MXCE5C4SSMEMCEK",
- Account: nil,
- TargetAccountID: "01FE96MXRHWZHKC0WH5FT82H1A",
- TargetAccount: nil,
- StatusID: "01FE96NBPNJNY26730FT6GZTFE",
- Status: nil,
- }
-}
-
-type StatusMuteValidateTestSuite struct {
- suite.Suite
-}
-
-func (suite *StatusMuteValidateTestSuite) TestValidateStatusMuteHappyPath() {
- // no problem here
- m := happyStatusMute()
- err := validate.Struct(m)
- suite.NoError(err)
-}
-
-func (suite *StatusMuteValidateTestSuite) TestValidateStatusMuteBadID() {
- m := happyStatusMute()
-
- m.ID = ""
- err := validate.Struct(m)
- suite.EqualError(err, "Key: 'StatusMute.ID' Error:Field validation for 'ID' failed on the 'required' tag")
-
- m.ID = "01FE96W293ZPRG9FQQP48HK8N001FE96W32AT24VYBGM12WN3GKB"
- err = validate.Struct(m)
- suite.EqualError(err, "Key: 'StatusMute.ID' Error:Field validation for 'ID' failed on the 'ulid' tag")
-}
-
-func (suite *StatusMuteValidateTestSuite) TestValidateStatusMuteDodgyStatusID() {
- m := happyStatusMute()
-
- m.StatusID = "9HZJ76B6VXSKF"
- err := validate.Struct(m)
- suite.EqualError(err, "Key: 'StatusMute.StatusID' Error:Field validation for 'StatusID' failed on the 'ulid' tag")
-
- m.StatusID = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa!!!!!!!!!!!!"
- err = validate.Struct(m)
- suite.EqualError(err, "Key: 'StatusMute.StatusID' Error:Field validation for 'StatusID' failed on the 'ulid' tag")
-}
-
-func (suite *StatusMuteValidateTestSuite) TestValidateStatusMuteNoCreatedAt() {
- m := happyStatusMute()
-
- m.CreatedAt = time.Time{}
- err := validate.Struct(m)
- suite.NoError(err)
-}
-
-func TestStatusMuteValidateTestSuite(t *testing.T) {
- suite.Run(t, new(StatusMuteValidateTestSuite))
-}
diff --git a/internal/validate/structvalidation.go b/internal/validate/structvalidation.go
deleted file mode 100644
index 573e79fd2..000000000
--- a/internal/validate/structvalidation.go
+++ /dev/null
@@ -1,67 +0,0 @@
-// 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 validate
-
-import (
- "reflect"
-
- "github.com/go-playground/validator/v10"
- "github.com/superseriousbusiness/gotosocial/internal/regexes"
-)
-
-var v *validator.Validate
-
-func ulidValidator(fl validator.FieldLevel) bool {
- field := fl.Field()
-
- switch field.Kind() {
- case reflect.String:
- return regexes.ULID.MatchString(field.String())
- default:
- return false
- }
-}
-
-func init() {
- v = validator.New()
- if err := v.RegisterValidation("ulid", ulidValidator); err != nil {
- panic(err)
- }
-}
-
-// Struct validates the passed struct, returning validator.ValidationErrors if invalid, or nil if OK.
-func Struct(s interface{}) error {
- return processValidationError(v.Struct(s))
-}
-
-func processValidationError(err error) error {
- if err == nil {
- return nil
- }
-
- if ive, ok := err.(*validator.InvalidValidationError); ok {
- panic(ive)
- }
-
- valErr, ok := err.(validator.ValidationErrors)
- if !ok {
- panic("*validator.InvalidValidationError could not be coerced to validator.ValidationErrors")
- }
-
- return valErr
-}
diff --git a/internal/validate/structvalidation_test.go b/internal/validate/structvalidation_test.go
deleted file mode 100644
index f8ad514cf..000000000
--- a/internal/validate/structvalidation_test.go
+++ /dev/null
@@ -1,70 +0,0 @@
-// 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 validate_test
-
-import (
- "testing"
-
- "github.com/stretchr/testify/suite"
- "github.com/superseriousbusiness/gotosocial/internal/gtsmodel"
- "github.com/superseriousbusiness/gotosocial/internal/validate"
-)
-
-type ValidateTestSuite struct {
- suite.Suite
-}
-
-func (suite *ValidateTestSuite) TestValidateNilPointer() {
- var nilUser *gtsmodel.User
- suite.Panics(func() {
- validate.Struct(nilUser)
- })
-}
-
-func (suite *ValidateTestSuite) TestValidatePointer() {
- user := &gtsmodel.User{}
- err := validate.Struct(user)
- suite.EqualError(err, "Key: 'User.ID' Error:Field validation for 'ID' failed on the 'required' tag\nKey: 'User.AccountID' Error:Field validation for 'AccountID' failed on the 'required' tag\nKey: 'User.EncryptedPassword' Error:Field validation for 'EncryptedPassword' failed on the 'required' tag\nKey: 'User.UnconfirmedEmail' Error:Field validation for 'UnconfirmedEmail' failed on the 'required_without' tag")
-}
-
-func (suite *ValidateTestSuite) TestValidateNil() {
- suite.Panics(func() {
- validate.Struct(nil)
- })
-}
-
-func (suite *ValidateTestSuite) TestValidateWeirdULID() {
- type a struct {
- ID bool `validate:"required,ulid"`
- }
-
- err := validate.Struct(a{ID: true})
- suite.Error(err)
-}
-
-func (suite *ValidateTestSuite) TestValidateNotStruct() {
- type aaaaaaa string
- aaaaaa := aaaaaaa("aaaa")
- suite.Panics(func() {
- validate.Struct(aaaaaa)
- })
-}
-
-func TestValidateTestSuite(t *testing.T) {
- suite.Run(t, new(ValidateTestSuite))
-}
diff --git a/internal/validate/token_test.go b/internal/validate/token_test.go
deleted file mode 100644
index 2ff0e0721..000000000
--- a/internal/validate/token_test.go
+++ /dev/null
@@ -1,98 +0,0 @@
-// 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 validate_test
-
-import (
- "testing"
- "time"
-
- "github.com/stretchr/testify/suite"
- "github.com/superseriousbusiness/gotosocial/internal/gtsmodel"
- "github.com/superseriousbusiness/gotosocial/internal/validate"
-)
-
-func happyToken() *gtsmodel.Token {
- return &gtsmodel.Token{
- ID: "01FE91RJR88PSEEE30EV35QR8N",
- CreatedAt: time.Now(),
- UpdatedAt: time.Now(),
- ClientID: "01FEEDMF6C0QD589MRK7919Z0R",
- UserID: "01FEK0BFJKYXB4Y51RBQ7P5P79",
- RedirectURI: "oauth2redirect://com.keylesspalace.tusky/",
- Scope: "read write follow",
- }
-}
-
-type TokenValidateTestSuite struct {
- suite.Suite
-}
-
-func (suite *TokenValidateTestSuite) TestValidateTokenHappyPath() {
- // no problem here
- t := happyToken()
- err := validate.Struct(t)
- suite.NoError(err)
-}
-
-func (suite *TokenValidateTestSuite) TestValidateTokenBadID() {
- t := happyToken()
-
- t.ID = ""
- err := validate.Struct(t)
- suite.EqualError(err, "Key: 'Token.ID' Error:Field validation for 'ID' failed on the 'required' tag")
-
- t.ID = "01FE96W293ZPRG9FQQP48HK8N001FE96W32AT24VYBGM12WN3GKB"
- err = validate.Struct(t)
- suite.EqualError(err, "Key: 'Token.ID' Error:Field validation for 'ID' failed on the 'ulid' tag")
-}
-
-func (suite *TokenValidateTestSuite) TestValidateTokenNoCreatedAt() {
- t := happyToken()
-
- t.CreatedAt = time.Time{}
- err := validate.Struct(t)
- suite.NoError(err)
-}
-
-func (suite *TokenValidateTestSuite) TestValidateTokenRedirectURI() {
- t := happyToken()
-
- t.RedirectURI = "invalid-uri"
- err := validate.Struct(t)
- suite.EqualError(err, "Key: 'Token.RedirectURI' Error:Field validation for 'RedirectURI' failed on the 'uri' tag")
-
- t.RedirectURI = ""
- err = validate.Struct(t)
- suite.EqualError(err, "Key: 'Token.RedirectURI' Error:Field validation for 'RedirectURI' failed on the 'required' tag")
-
- t.RedirectURI = "urn:ietf:wg:oauth:2.0:oob"
- err = validate.Struct(t)
- suite.NoError(err)
-}
-
-func (suite *TokenValidateTestSuite) TestValidateTokenScope() {
- t := happyToken()
-
- t.Scope = ""
- err := validate.Struct(t)
- suite.EqualError(err, "Key: 'Token.Scope' Error:Field validation for 'Scope' failed on the 'required' tag")
-}
-
-func TestTokenValidateTestSuite(t *testing.T) {
- suite.Run(t, new(TokenValidateTestSuite))
-}
diff --git a/internal/validate/user_test.go b/internal/validate/user_test.go
deleted file mode 100644
index f61ff6e2f..000000000
--- a/internal/validate/user_test.go
+++ /dev/null
@@ -1,134 +0,0 @@
-// 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 validate_test
-
-import (
- "net"
- "testing"
- "time"
-
- "github.com/stretchr/testify/suite"
- "github.com/superseriousbusiness/gotosocial/internal/gtsmodel"
- "github.com/superseriousbusiness/gotosocial/internal/validate"
- "github.com/superseriousbusiness/gotosocial/testrig"
-)
-
-func happyUser() *gtsmodel.User {
- return &gtsmodel.User{
- ID: "01FE8TTK9F34BR0KG7639AJQTX",
- Email: "whatever@example.org",
- AccountID: "01FE8TWA7CN8J7237K5DFS1RY5",
- Account: nil,
- EncryptedPassword: "$2y$10$tkRapNGW.RWkEuCMWdgArunABFvsPGRvFQY3OibfSJo0RDL3z8WfC",
- CreatedAt: time.Now(),
- UpdatedAt: time.Now(),
- SignUpIP: net.ParseIP("128.64.32.16"),
- CurrentSignInAt: time.Now(),
- CurrentSignInIP: net.ParseIP("128.64.32.16"),
- LastSignInAt: time.Now(),
- LastSignInIP: net.ParseIP("128.64.32.16"),
- SignInCount: 0,
- InviteID: "",
- ChosenLanguages: []string{},
- FilteredLanguages: []string{},
- Locale: "en",
- CreatedByApplicationID: "01FE8Y5EHMWCA1MHMTNHRVZ1X4",
- CreatedByApplication: nil,
- LastEmailedAt: time.Now(),
- ConfirmationToken: "",
- ConfirmedAt: time.Now(),
- ConfirmationSentAt: time.Time{},
- UnconfirmedEmail: "",
- Moderator: testrig.FalseBool(),
- Admin: testrig.FalseBool(),
- Disabled: testrig.FalseBool(),
- Approved: testrig.TrueBool(),
- }
-}
-
-type UserValidateTestSuite struct {
- suite.Suite
-}
-
-func (suite *UserValidateTestSuite) TestValidateUserHappyPath() {
- // no problem here
- u := happyUser()
- err := validate.Struct(u)
- suite.NoError(err)
-}
-
-func (suite *UserValidateTestSuite) TestValidateUserNoID() {
- // user has no id set
- u := happyUser()
- u.ID = ""
-
- err := validate.Struct(u)
- suite.EqualError(err, "Key: 'User.ID' Error:Field validation for 'ID' failed on the 'required' tag")
-}
-
-func (suite *UserValidateTestSuite) TestValidateUserNoEmail() {
- // user has no email or unconfirmed email set
- u := happyUser()
- u.Email = ""
-
- err := validate.Struct(u)
- suite.EqualError(err, "Key: 'User.Email' Error:Field validation for 'Email' failed on the 'required_with' tag\nKey: 'User.UnconfirmedEmail' Error:Field validation for 'UnconfirmedEmail' failed on the 'required_without' tag")
-}
-
-func (suite *UserValidateTestSuite) TestValidateUserOnlyUnconfirmedEmail() {
- // user has only UnconfirmedEmail but ConfirmedAt is set
- u := happyUser()
- u.Email = ""
- u.UnconfirmedEmail = "whatever@example.org"
-
- err := validate.Struct(u)
- suite.EqualError(err, "Key: 'User.Email' Error:Field validation for 'Email' failed on the 'required_with' tag")
-}
-
-func (suite *UserValidateTestSuite) TestValidateUserOnlyUnconfirmedEmailOK() {
- // user has only UnconfirmedEmail and ConfirmedAt is not set
- u := happyUser()
- u.Email = ""
- u.UnconfirmedEmail = "whatever@example.org"
- u.ConfirmedAt = time.Time{}
-
- err := validate.Struct(u)
- suite.NoError(err)
-}
-
-func (suite *UserValidateTestSuite) TestValidateUserNoConfirmedAt() {
- // user has Email but no ConfirmedAt
- u := happyUser()
- u.ConfirmedAt = time.Time{}
-
- err := validate.Struct(u)
- suite.EqualError(err, "Key: 'User.ConfirmedAt' Error:Field validation for 'ConfirmedAt' failed on the 'required_with' tag")
-}
-
-func (suite *UserValidateTestSuite) TestValidateUserUnlikelySignInCount() {
- // user has Email but no ConfirmedAt
- u := happyUser()
- u.SignInCount = -69
-
- err := validate.Struct(u)
- suite.EqualError(err, "Key: 'User.SignInCount' Error:Field validation for 'SignInCount' failed on the 'min' tag")
-}
-
-func TestUserValidateTestSuite(t *testing.T) {
- suite.Run(t, new(UserValidateTestSuite))
-}