github.com/k0marov/go-socnet@v0.0.0-20220715154813-90d07867c782/core/abstract/likeable/service/service_test.go (about) 1 package service_test 2 3 import ( 4 "github.com/k0marov/go-socnet/core/abstract/likeable/service" 5 "github.com/k0marov/go-socnet/core/general/core_values" 6 . "github.com/k0marov/go-socnet/core/helpers/test_helpers" 7 "testing" 8 ) 9 10 func TestLikeToggler(t *testing.T) { 11 target := RandomId() 12 caller := RandomId() 13 t.Run("target is not already liked - like it", func(t *testing.T) { 14 checkLiked := func(string, core_values.UserId) (bool, error) { 15 return false, nil 16 } 17 t.Run("happy case", func(t *testing.T) { 18 like := func(targetId string, liker core_values.UserId) error { 19 if targetId == target && liker == caller { 20 return nil 21 } 22 panic("unexpected args") 23 } 24 err := service.NewLikeToggler(checkLiked, like, nil)(target, caller) 25 AssertNoError(t, err) 26 }) 27 t.Run("error case - liking throws", func(t *testing.T) { 28 like := func(string, core_values.UserId) error { 29 return RandomError() 30 } 31 err := service.NewLikeToggler(checkLiked, like, nil)(target, caller) 32 AssertSomeError(t, err) 33 }) 34 }) 35 t.Run("target is already liked - unlike it", func(t *testing.T) { 36 checkLiked := func(string, core_values.UserId) (bool, error) { 37 return true, nil 38 } 39 t.Run("happy case", func(t *testing.T) { 40 unlike := func(targetId string, unliker core_values.UserId) error { 41 if targetId == target && unliker == caller { 42 return nil 43 } 44 panic("unexpected args") 45 } 46 err := service.NewLikeToggler(checkLiked, nil, unlike)(target, caller) 47 AssertNoError(t, err) 48 }) 49 t.Run("error case - unliking throws", func(t *testing.T) { 50 unlike := func(string, core_values.UserId) error { 51 return RandomError() 52 } 53 err := service.NewLikeToggler(checkLiked, nil, unlike)(target, caller) 54 AssertSomeError(t, err) 55 }) 56 }) 57 t.Run("checking if target is liked throws", func(t *testing.T) { 58 likeChecker := func(targetId string, liker core_values.UserId) (bool, error) { 59 if targetId == target && liker == caller { 60 return false, RandomError() 61 } 62 panic("unexpected args") 63 } 64 err := service.NewLikeToggler(likeChecker, nil, nil)(target, caller) 65 AssertSomeError(t, err) 66 }) 67 }