github.com/k0marov/go-socnet@v0.0.0-20220715154813-90d07867c782/core/abstract/recommendable/service/service_test.go (about)

     1  package service_test
     2  
     3  import (
     4  	"github.com/k0marov/go-socnet/core/abstract/recommendable/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 TestRecsGetter(t *testing.T) {
    11  	target := RandomId()
    12  	count := 5
    13  	recs := []string{RandomId(), RandomId(), RandomId(), RandomId(), RandomId()}
    14  	t.Run("error case - storeRecsGetter throws", func(t *testing.T) {
    15  		storeRecsGetter := func(core_values.UserId, int) ([]string, error) {
    16  			return nil, RandomError()
    17  		}
    18  		_, gotErr := service.NewRecsGetter(storeRecsGetter, nil)(target, count)
    19  		AssertSomeError(t, gotErr)
    20  	})
    21  	t.Run("happy case - storeRecsGetter returns enough recs", func(t *testing.T) {
    22  		storeRecsGetter := func(targetId core_values.UserId, gotCount int) ([]string, error) {
    23  			if targetId == target && gotCount == count {
    24  				return recs, nil
    25  			}
    26  			panic("unexpected args")
    27  		}
    28  		got, err := service.NewRecsGetter(storeRecsGetter, nil)(target, count)
    29  		AssertNoError(t, err)
    30  		Assert(t, got, recs, "returned recommendations")
    31  	})
    32  	t.Run("storeRecsGetter returns not enough recs", func(t *testing.T) {
    33  		returnedRecs := recs[:2]
    34  		storeRecsGetter := func(core_values.UserId, int) ([]string, error) {
    35  			return returnedRecs, nil
    36  		}
    37  		t.Run("happy case", func(t *testing.T) {
    38  			randomRecs := recs[2:]
    39  			randomRecsGetter := func(gotCount int) ([]string, error) {
    40  				if gotCount == count-2 {
    41  					return randomRecs, nil
    42  				}
    43  				panic("unexpected")
    44  			}
    45  			got, err := service.NewRecsGetter(storeRecsGetter, randomRecsGetter)(target, count)
    46  			AssertNoError(t, err)
    47  			Assert(t, got, recs, "merged recommendations")
    48  		})
    49  		t.Run("error case - getting random recs throws", func(t *testing.T) {
    50  			randomRecsGetter := func(int) ([]string, error) {
    51  				return nil, RandomError()
    52  			}
    53  			_, err := service.NewRecsGetter(storeRecsGetter, randomRecsGetter)(target, count)
    54  			AssertSomeError(t, err)
    55  		})
    56  	})
    57  }