flamingo.me/flamingo-commerce/v3@v3.11.0/search/application/searchService_test.go (about)

     1  package application
     2  
     3  import (
     4  	"reflect"
     5  	"testing"
     6  
     7  	"flamingo.me/flamingo-commerce/v3/search/domain"
     8  )
     9  
    10  func TestBuildFilters(t *testing.T) {
    11  	type args struct {
    12  		request         SearchRequest
    13  		defaultPageSize int
    14  	}
    15  	tests := []struct {
    16  		name string
    17  		args args
    18  		want []domain.Filter
    19  	}{
    20  		{
    21  			name: "default page size",
    22  			args: args{
    23  				request: SearchRequest{
    24  					AdditionalFilter: []domain.Filter{domain.NewKeyValueFilter("key", []string{"value1", "value2"})},
    25  					Page:             3,
    26  					SortBy:           "price",
    27  					SortDirection:    "desc",
    28  					Query:            "query",
    29  				},
    30  				defaultPageSize: 15,
    31  			},
    32  			want: []domain.Filter{
    33  				domain.NewQueryFilter("query"),
    34  				domain.NewPaginationPageFilter(3),
    35  				domain.NewPaginationPageSizeFilter(15),
    36  				domain.NewSortFilter("price", "desc"),
    37  				domain.NewKeyValueFilter("key", []string{"value1", "value2"}),
    38  			},
    39  		},
    40  		{
    41  			name: "given page size",
    42  			args: args{
    43  				request: SearchRequest{
    44  					AdditionalFilter: []domain.Filter{domain.NewKeyValueFilter("key", []string{"value1", "value2"})},
    45  
    46  					Page:          3,
    47  					PageSize:      33,
    48  					SortBy:        "price",
    49  					SortDirection: "desc",
    50  					Query:         "query",
    51  				},
    52  				defaultPageSize: 15,
    53  			},
    54  			want: []domain.Filter{
    55  				domain.NewQueryFilter("query"),
    56  				domain.NewPaginationPageFilter(3),
    57  				domain.NewPaginationPageSizeFilter(33),
    58  				domain.NewSortFilter("price", "desc"),
    59  				domain.NewKeyValueFilter("key", []string{"value1", "value2"}),
    60  			},
    61  		},
    62  	}
    63  	for _, tt := range tests {
    64  		t.Run(tt.name, func(t *testing.T) {
    65  			got := BuildFilters(tt.args.request, tt.args.defaultPageSize)
    66  			for i, want := range tt.want {
    67  				if len(got) <= i {
    68  					t.Fatalf("too few entries in filter: want %d, got %d", len(tt.want), len(got))
    69  				}
    70  				if !reflect.DeepEqual(got[i], want) {
    71  					t.Errorf("BuildFilters() = %#v, want %#v", got[i], want)
    72  				}
    73  			}
    74  		})
    75  	}
    76  }