flamingo.me/flamingo-commerce/v3@v3.11.0/category/infrastructure/fake/category_service_test.go (about)

     1  package fake_test
     2  
     3  import (
     4  	"context"
     5  	"testing"
     6  
     7  	"flamingo.me/flamingo/v3/framework/flamingo"
     8  	"github.com/stretchr/testify/assert"
     9  
    10  	"flamingo.me/flamingo-commerce/v3/category/domain"
    11  	"flamingo.me/flamingo-commerce/v3/category/infrastructure/fake"
    12  )
    13  
    14  func TestCategoryService_Tree(t *testing.T) {
    15  	service := &fake.CategoryService{}
    16  	service.Inject(flamingo.NullLogger{}, nil)
    17  
    18  	t.Run("category not found", func(t *testing.T) {
    19  		_, err := service.Tree(context.Background(), "not-found")
    20  		if assert.NotNil(t, err) {
    21  			assert.Equal(t, err, domain.ErrNotFound)
    22  		}
    23  	})
    24  	t.Run("empty category should return all", func(t *testing.T) {
    25  		tree, err := service.Tree(context.Background(), "")
    26  		if assert.Nil(t, err) {
    27  			assert.Equal(t, "", tree.Code())
    28  			assert.Equal(t, true, tree.Active())
    29  			if assert.Equal(t, len(tree.SubTrees()), 2) {
    30  				electronicsTree := tree.SubTrees()[0]
    31  				assert.Equal(t, "electronics", electronicsTree.Code())
    32  				clothingTree := tree.SubTrees()[1]
    33  				assert.Equal(t, "clothing", clothingTree.Code())
    34  			}
    35  		}
    36  	})
    37  	t.Run("category electronics", func(t *testing.T) {
    38  		tree, err := service.Tree(context.Background(), "electronics")
    39  		if assert.Nil(t, err) {
    40  			assert.Equal(t, "electronics", tree.Code())
    41  			assert.Equal(t, true, tree.Active())
    42  		}
    43  	})
    44  	t.Run("category headphones", func(t *testing.T) {
    45  		tree, err := service.Tree(context.Background(), "headphones")
    46  		if assert.Nil(t, err) {
    47  			assert.Equal(t, "electronics", tree.Code())
    48  			assert.Equal(t, true, tree.Active())
    49  
    50  			if assert.Equal(t, len(tree.SubTrees()), 3) {
    51  				headphonesTree := tree.SubTrees()[1]
    52  				assert.Equal(t, true, headphonesTree.Active())
    53  			}
    54  		}
    55  	})
    56  	t.Run("category headphone_accessories", func(t *testing.T) {
    57  		tree, err := service.Tree(context.Background(), "headphone_accessories")
    58  		if assert.Nil(t, err) {
    59  			assert.Equal(t, "electronics", tree.Code())
    60  			assert.Equal(t, true, tree.Active())
    61  
    62  			if assert.Equal(t, 3, len(tree.SubTrees())) {
    63  				headphonesTree := tree.SubTrees()[1]
    64  				assert.Equal(t, true, headphonesTree.Active())
    65  				if assert.Equal(t, 1, len(headphonesTree.SubTrees())) {
    66  					accessoriesTree := headphonesTree.SubTrees()[0]
    67  					assert.Equal(t, true, accessoriesTree.Active())
    68  				}
    69  			}
    70  		}
    71  	})
    72  	t.Run("category clothing", func(t *testing.T) {
    73  		tree, err := service.Tree(context.Background(), "clothing")
    74  		if assert.Nil(t, err) {
    75  			assert.Equal(t, "clothing", tree.Code())
    76  			assert.Equal(t, true, tree.Active())
    77  		}
    78  	})
    79  	t.Run("category jumpsuits", func(t *testing.T) {
    80  		tree, err := service.Tree(context.Background(), "jumpsuits")
    81  		if assert.Nil(t, err) {
    82  			assert.Equal(t, "clothing", tree.Code())
    83  			assert.Equal(t, true, tree.Active())
    84  
    85  			if assert.Equal(t, 1, len(tree.SubTrees())) {
    86  				jumpsuitsTree := tree.SubTrees()[0]
    87  				assert.Equal(t, true, jumpsuitsTree.Active())
    88  			}
    89  		}
    90  	})
    91  }
    92  
    93  func TestCategoryService_Get(t *testing.T) {
    94  	service := &fake.CategoryService{}
    95  	service.Inject(flamingo.NullLogger{}, nil)
    96  
    97  	t.Run("category not found", func(t *testing.T) {
    98  		_, err := service.Get(context.Background(), "not-found")
    99  		if assert.NotNil(t, err) {
   100  			assert.Equal(t, err, domain.ErrNotFound)
   101  		}
   102  	})
   103  	t.Run("category electronics", func(t *testing.T) {
   104  		category, err := service.Get(context.Background(), "electronics")
   105  		if assert.Nil(t, err) {
   106  			assert.Equal(t, "electronics", category.Code())
   107  			assert.True(t, category.Promoted())
   108  			assert.Equal(t, "promotion", category.CategoryType())
   109  			assert.Equal(t, 1, len(category.Media()))
   110  			assert.Equal(t, "Promotion", category.Attributes().Get("promo").Label)
   111  
   112  			if categoryData, ok := category.(domain.CategoryData); ok {
   113  				assert.Equal(t, "application/pdf", categoryData.Promotion.LinkType)
   114  				assert.Equal(t, "blank", categoryData.Promotion.LinkTarget)
   115  				assert.Equal(t, 1, len(categoryData.Promotion.Media))
   116  			}
   117  		}
   118  	})
   119  	t.Run("category headphones", func(t *testing.T) {
   120  		category, err := service.Get(context.Background(), "headphones")
   121  		if assert.Nil(t, err) {
   122  			assert.Equal(t, "headphones", category.Code())
   123  			assert.Equal(t, 0, len(category.Media()))
   124  		}
   125  	})
   126  	t.Run("category headphone_accessories", func(t *testing.T) {
   127  		category, err := service.Get(context.Background(), "headphone_accessories")
   128  		if assert.Nil(t, err) {
   129  			assert.Equal(t, "headphone_accessories", category.Code())
   130  			assert.Equal(t, 0, len(category.Media()))
   131  		}
   132  	})
   133  	t.Run("category clothing", func(t *testing.T) {
   134  		category, err := service.Get(context.Background(), "clothing")
   135  		if assert.Nil(t, err) {
   136  			assert.Equal(t, "clothing", category.Code())
   137  			assert.Equal(t, 0, len(category.Media()))
   138  		}
   139  	})
   140  	t.Run("category jumpsuits", func(t *testing.T) {
   141  		category, err := service.Get(context.Background(), "jumpsuits")
   142  		if assert.Nil(t, err) {
   143  			assert.Equal(t, "jumpsuits", category.Code())
   144  			assert.Equal(t, 0, len(category.Media()))
   145  		}
   146  	})
   147  }