2023-03-12 16:00:57 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								// 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/>.  
						 
					
						
							
								
									
										
										
										
											2021-09-01 11:45:01 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2021-09-01 18:29:25 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								package  validate_test  
						 
					
						
							
								
									
										
										
										
											2021-08-29 16:52:23 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								import  (  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									"net" 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									"testing" 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									"time" 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									"github.com/stretchr/testify/suite" 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									"github.com/superseriousbusiness/gotosocial/internal/gtsmodel" 
							 
						 
					
						
							
								
									
										
										
										
											2021-09-01 18:29:25 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									"github.com/superseriousbusiness/gotosocial/internal/validate" 
							 
						 
					
						
							
								
									
										
										
										
											2022-08-15 12:35:05 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									"github.com/superseriousbusiness/gotosocial/testrig" 
							 
						 
					
						
							
								
									
										
										
										
											2021-08-29 16:52:23 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								)  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								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 ( ) , 
							 
						 
					
						
							
								
									
										
										
										
											2021-08-30 13:38:06 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										ConfirmationSentAt :      time . Time { } , 
							 
						 
					
						
							
								
									
										
										
										
											2021-08-29 16:52:23 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
										UnconfirmedEmail :        "" , 
							 
						 
					
						
							
								
									
										
										
										
											2022-08-15 12:35:05 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										Moderator :               testrig . FalseBool ( ) , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										Admin :                   testrig . FalseBool ( ) , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										Disabled :                testrig . FalseBool ( ) , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										Approved :                testrig . TrueBool ( ) , 
							 
						 
					
						
							
								
									
										
										
										
											2021-08-29 16:52:23 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
									} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								type  UserValidateTestSuite  struct  {  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									suite . Suite 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								func  ( suite  * UserValidateTestSuite )  TestValidateUserHappyPath ( )  {  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									// no problem here 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									u  :=  happyUser ( ) 
							 
						 
					
						
							
								
									
										
										
										
											2021-09-03 10:30:40 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									err  :=  validate . Struct ( u ) 
							 
						 
					
						
							
								
									
										
										
										
											2021-08-29 16:52:23 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
									suite . NoError ( err ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								func  ( suite  * UserValidateTestSuite )  TestValidateUserNoID ( )  {  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									// user has no id set 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									u  :=  happyUser ( ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									u . ID  =  "" 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2021-09-03 10:30:40 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									err  :=  validate . Struct ( u ) 
							 
						 
					
						
							
								
									
										
										
										
											2021-08-29 16:52:23 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
									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  =  "" 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2021-09-03 10:30:40 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									err  :=  validate . Struct ( u ) 
							 
						 
					
						
							
								
									
										
										
										
											2021-08-29 16:52:23 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
									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" 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2021-09-03 10:30:40 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									err  :=  validate . Struct ( u ) 
							 
						 
					
						
							
								
									
										
										
										
											2021-08-29 16:52:23 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
									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 { } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2021-09-03 10:30:40 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									err  :=  validate . Struct ( u ) 
							 
						 
					
						
							
								
									
										
										
										
											2021-08-29 16:52:23 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
									suite . NoError ( err ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								func  ( suite  * UserValidateTestSuite )  TestValidateUserNoConfirmedAt ( )  {  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									// user has Email but no ConfirmedAt 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									u  :=  happyUser ( ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									u . ConfirmedAt  =  time . Time { } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2021-09-03 10:30:40 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									err  :=  validate . Struct ( u ) 
							 
						 
					
						
							
								
									
										
										
										
											2021-08-29 16:52:23 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
									suite . EqualError ( err ,  "Key: 'User.ConfirmedAt' Error:Field validation for 'ConfirmedAt' failed on the 'required_with' tag" ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2021-09-03 10:30:40 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								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" ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2021-08-29 16:52:23 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								func  TestUserValidateTestSuite ( t  * testing . T )  {  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									suite . Run ( t ,  new ( UserValidateTestSuite ) ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}