summaryrefslogtreecommitdiff
path: root/internal/validate
diff options
context:
space:
mode:
authorLibravatar Daenney <daenney@users.noreply.github.com>2023-08-06 12:22:40 +0200
committerLibravatar GitHub <noreply@github.com>2023-08-06 12:22:40 +0200
commitc1375ca5c1d5a8a645151cedfced5a336f6b7467 (patch)
treec3cc68d992811de674458e646af16f4659926ec7 /internal/validate
parent[bugfix] update cache library with nil ptr fix (#2070) (diff)
downloadgotosocial-c1375ca5c1d5a8a645151cedfced5a336f6b7467.tar.xz
[chore] Remove go-playground/validator (#2069)
* [chore] Remove go-playground/validator It turns out we're not actually using the validator code. This is a remnant from when we intended to use it, but the presence of it and its struct tags creates the illusion we're validating a lot of things we're not. It resulted in some confusion when we were trying to figure out language valdiation. Remove all this code, so that only the validation functions from the validate package we actually use remain. I'm not touching the struct tags in the migrations in order to avoid things potentially thinking migrations need to be re-run. * [chore] Bring back a struct tag on api The validate on internal/api is Gin doing form validation, not the validator from go-playground/validator.
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))
-}