github.com/k0marov/go-socnet@v0.0.0-20220715154813-90d07867c782/features/posts/domain/validators/validators_test.go (about) 1 package validators_test 2 3 import ( 4 "github.com/k0marov/go-socnet/core/general/client_errors" 5 "github.com/k0marov/go-socnet/core/general/image_decoder" 6 . "github.com/k0marov/go-socnet/core/helpers/test_helpers" 7 "reflect" 8 "strings" 9 "testing" 10 11 "github.com/k0marov/go-socnet/features/posts/domain/validators" 12 "github.com/k0marov/go-socnet/features/posts/domain/values" 13 ) 14 15 func TestPostValidator(t *testing.T) { 16 t.Run("Text validation", func(t *testing.T) { 17 decoder := func([]byte) (image_decoder.Image, error) { 18 return image_decoder.Image{Height: 123, Width: 345}, nil 19 } 20 cases := []struct { 21 text string 22 expectedErr error 23 }{ 24 {"", nil}, 25 {"some short text", nil}, 26 {strings.Repeat("looong", 300), client_errors.TextTooLong}, 27 } 28 for _, testCase := range cases { 29 t.Run(testCase.text, func(t *testing.T) { 30 newPost := values.NewPostData{ 31 Author: RandomString(), 32 Text: testCase.text, 33 Images: nil, 34 } 35 gotErr, ok := validators.NewPostValidator(decoder)(newPost) 36 if testCase.expectedErr == nil { 37 AssertError(t, gotErr, client_errors.ClientError{}) 38 Assert(t, ok, true, "returned 'ok' value") 39 } else { 40 AssertError(t, gotErr, testCase.expectedErr) 41 Assert(t, ok, false, "returned 'ok' value") 42 } 43 }) 44 } 45 }) 46 t.Run("Images validation", func(t *testing.T) { 47 newPost := values.NewPostData{ 48 Author: RandomString(), 49 Text: "", 50 Images: []values.PostImageFile{{RandomFileData(), 1}, {RandomFileData(), 2}}, 51 } 52 isCorrectImage := func(image []byte) bool { 53 for _, postImage := range newPost.Images { 54 if reflect.DeepEqual(postImage.File.Value(), image) { 55 return true 56 } 57 } 58 return false 59 } 60 t.Run("happy case", func(t *testing.T) { 61 imagesChecked := 0 62 decoder := func(image []byte) (image_decoder.Image, error) { 63 if isCorrectImage(image) { 64 imagesChecked++ 65 return image_decoder.Image{Height: 420, Width: 840}, nil 66 } 67 panic("unexpected args") 68 } 69 clientErr, ok := validators.NewPostValidator(decoder)(newPost) 70 Assert(t, ok, true, "ok is true") 71 AssertError(t, clientErr, client_errors.ClientError{}) 72 Assert(t, imagesChecked, len(newPost.Images), "amount of checked images") 73 }) 74 t.Run("error case", func(t *testing.T) { 75 decoder := func([]byte) (image_decoder.Image, error) { 76 return image_decoder.Image{}, RandomError() 77 } 78 clientErr, ok := validators.NewPostValidator(decoder)(newPost) 79 Assert(t, ok, false, "ok is false") 80 AssertError(t, clientErr, client_errors.InvalidImage) 81 }) 82 }) 83 }