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  }