Skip to content

Commit

Permalink
完成NewMerger方法的单元测试
Browse files Browse the repository at this point in the history
  • Loading branch information
longyue0521 committed Jun 14, 2024
1 parent ee4c64e commit 220a591
Show file tree
Hide file tree
Showing 4 changed files with 103 additions and 29 deletions.
2 changes: 1 addition & 1 deletion internal/merger/factory/factory.go
Original file line number Diff line number Diff line change
Expand Up @@ -250,7 +250,7 @@ func newDistinctMerger(_, target QuerySpec) (merger.Merger, error) {
}
sortColumns = s
}
return distinctmerger.NewDistinctMerger(target.Select, sortColumns)
return distinctmerger.NewMerger(target.Select, sortColumns)
}

func newOrderByMerger(origin, target QuerySpec) (merger.Merger, error) {
Expand Down
9 changes: 5 additions & 4 deletions internal/merger/internal/distinctmerger/distinct_merger.go
Original file line number Diff line number Diff line change
Expand Up @@ -40,10 +40,10 @@ type Merger struct {
columnNames []string
}

func NewDistinctMerger(distinctCols []merger.ColumnInfo, sortColumns merger.SortColumns) (*Merger, error) {
func NewMerger(distinctCols []merger.ColumnInfo, sortColumns merger.SortColumns) (*Merger, error) {

if len(distinctCols) == 0 {
return nil, errs.ErrDistinctColsIsNull
return nil, fmt.Errorf("%w", errs.ErrDistinctColsIsNull)
}

if sortColumns.IsZeroValue() {
Expand All @@ -65,7 +65,7 @@ func NewDistinctMerger(distinctCols []merger.ColumnInfo, sortColumns merger.Sort
name := col.SelectName()
_, ok := distinctSet[name]
if ok {
return nil, errs.ErrDistinctColsRepeated
return nil, fmt.Errorf("%w", errs.ErrDistinctColsRepeated)
} else {
distinctSet[name] = struct{}{}
}
Expand All @@ -78,7 +78,7 @@ func NewDistinctMerger(distinctCols []merger.ColumnInfo, sortColumns merger.Sort
for i := 0; i < sortColumns.Len(); i++ {
val := sortColumns.Get(i)
if _, ok := distinctSet[val.SelectName()]; !ok {
return nil, errs.ErrSortColListNotContainDistinctCol
return nil, fmt.Errorf("%w", errs.ErrSortColListNotContainDistinctCol)
}
}
return &Merger{
Expand Down Expand Up @@ -109,6 +109,7 @@ func (m *Merger) Merge(ctx context.Context, results []rows.Rows) (rows.Rows, err
}
return m.initRows(results)
}

func (m *Merger) checkColumns(rows rows.Rows) error {
if rows == nil {
return errs.ErrMergerRowsIsNull
Expand Down
119 changes: 96 additions & 23 deletions internal/merger/internal/distinctmerger/distinct_merger_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -33,24 +33,25 @@ import (

var mockErr = errors.New("mock error")

func TestMerger_NewMerge(t *testing.T) {
t.Skip()
func TestMerger_NewMerger(t *testing.T) {
testcases := []struct {
name string
sortColsFunc func(t *testing.T) merger.SortColumns
distinctCols []merger.ColumnInfo
wantErr error
}{
{
name: "Valid case",
name: "应该返回merger_去重列不为空且不含重复列_排序列表与去重列相同",
sortColsFunc: func(t *testing.T) merger.SortColumns {
t.Helper()
columns := []merger.ColumnInfo{
{
Index: 0,
Name: "column1",
Order: merger.OrderASC,
},
{
Index: 1,
Name: "column2",
Order: merger.OrderDESC,
},
Expand All @@ -66,7 +67,40 @@ func TestMerger_NewMerge(t *testing.T) {
wantErr: nil,
},
{
name: "重复的去重列",
name: "应该返回merger_去重列不为空且不含重复列_排序列表是去重列的子集",
sortColsFunc: func(t *testing.T) merger.SortColumns {
t.Helper()
columns := []merger.ColumnInfo{
{
Index: 1,
Name: "column2",
Order: merger.OrderDESC,
},
}
s, err := merger.NewSortColumns(columns...)
require.NoError(t, err)
return s
},
distinctCols: []merger.ColumnInfo{
{Index: 0, Name: "column1"},
{Index: 1, Name: "column2"},
},
wantErr: nil,
},
{
name: "应该返回merger_去重列不为空且不含重复列_排序列为空",
sortColsFunc: func(t *testing.T) merger.SortColumns {
t.Helper()
return merger.SortColumns{}
},
distinctCols: []merger.ColumnInfo{
{Index: 0, Name: "column1"},
{Index: 1, Name: "column2"},
},
wantErr: nil,
},
{
name: "应该返回错误_去重列表有重复列",
sortColsFunc: func(t *testing.T) merger.SortColumns {
t.Helper()
columns := []merger.ColumnInfo{
Expand All @@ -85,24 +119,63 @@ func TestMerger_NewMerge(t *testing.T) {
},
distinctCols: []merger.ColumnInfo{
{Index: 0, Name: "column1"},
{Index: 1, Name: "column2"},
{Index: 0, Name: "column1"},
},
wantErr: errs.ErrDistinctColsRepeated,
},
{
name: "空的排序列和空的去重列",
name: "应该返回错误_去重列表为空",
sortColsFunc: func(t *testing.T) merger.SortColumns {
return merger.SortColumns{}
t.Helper()
columns := []merger.ColumnInfo{
{
Index: 0,
Name: "column1",
Order: merger.OrderASC,
},
{
Index: 1,
Name: "column2",
Order: merger.OrderDESC,
},
}
s, err := merger.NewSortColumns(columns...)
require.NoError(t, err)
return s
},
distinctCols: []merger.ColumnInfo{},
wantErr: errs.ErrDistinctColsIsNull,
},
{
name: "应该返回错误_排序列表包含不在去重列表中的列",
sortColsFunc: func(t *testing.T) merger.SortColumns {
t.Helper()
columns := []merger.ColumnInfo{
{
Index: 1,
Name: "column2",
Order: merger.OrderDESC,
},
}
s, err := merger.NewSortColumns(columns...)
require.NoError(t, err)
return s
},
distinctCols: []merger.ColumnInfo{
{
Index: 0,
Name: "column1",
Order: merger.OrderASC,
},
},
wantErr: errs.ErrSortColListNotContainDistinctCol,
},
}

for _, tc := range testcases {
t.Run(tc.name, func(t *testing.T) {
m, err := NewDistinctMerger(tc.distinctCols, tc.sortColsFunc(t))
assert.Equal(t, tc.wantErr, err)
m, err := NewMerger(tc.distinctCols, tc.sortColsFunc(t))
assert.ErrorIs(t, err, tc.wantErr)
if err != nil {
return
}
Expand Down Expand Up @@ -171,7 +244,7 @@ func (ms *DistinctMergerSuite) TestOrderByMerger_Merge() {
Order: merger.OrderASC,
})
require.NoError(ms.T(), err)
return NewDistinctMerger([]merger.ColumnInfo{
return NewMerger([]merger.ColumnInfo{
{Index: 0, Name: "id"},
{Index: 2, Name: "name"},
{Index: 3, Name: "address"},
Expand Down Expand Up @@ -203,7 +276,7 @@ func (ms *DistinctMergerSuite) TestOrderByMerger_Merge() {
Order: merger.OrderASC,
})
require.NoError(ms.T(), err)
return NewDistinctMerger([]merger.ColumnInfo{
return NewMerger([]merger.ColumnInfo{
{Index: 0, Name: "id"},
{Index: 2, Name: "name"},
{Index: 3, Name: "address"},
Expand Down Expand Up @@ -239,7 +312,7 @@ func (ms *DistinctMergerSuite) TestOrderByMerger_Merge() {
Order: merger.OrderASC,
})
require.NoError(ms.T(), err)
return NewDistinctMerger([]merger.ColumnInfo{
return NewMerger([]merger.ColumnInfo{
{Index: 0, Name: "id"},
{Index: 2, Name: "name"},
{Index: 3, Name: "address"},
Expand All @@ -259,7 +332,7 @@ func (ms *DistinctMergerSuite) TestOrderByMerger_Merge() {
Order: merger.OrderASC,
})
require.NoError(ms.T(), err)
return NewDistinctMerger([]merger.ColumnInfo{
return NewMerger([]merger.ColumnInfo{
{Index: 0, Name: "id"},
{Index: 2, Name: "name"},
{Index: 3, Name: "address"},
Expand All @@ -281,7 +354,7 @@ func (ms *DistinctMergerSuite) TestOrderByMerger_Merge() {
Order: merger.OrderASC,
})
require.NoError(ms.T(), err)
return NewDistinctMerger([]merger.ColumnInfo{
return NewMerger([]merger.ColumnInfo{
{Index: 0, Name: "id"},
{Index: 2, Name: "name"},
{Index: 3, Name: "address"},
Expand Down Expand Up @@ -313,7 +386,7 @@ func (ms *DistinctMergerSuite) TestOrderByMerger_Merge() {
Order: merger.OrderASC,
})
require.NoError(ms.T(), err)
return NewDistinctMerger([]merger.ColumnInfo{
return NewMerger([]merger.ColumnInfo{
{Index: 0, Name: "id"},
{Index: 1, Name: "name"},
{Index: 2, Name: "address"},
Expand Down Expand Up @@ -658,7 +731,7 @@ func (ms *DistinctMergerSuite) TestOrderByRows_NextAndScan() {
}
for _, tc := range testcases {
ms.T().Run(tc.name, func(t *testing.T) {
m, err := NewDistinctMerger(tc.distinctColumns, tc.sortColumnsFunc(t))
m, err := NewMerger(tc.distinctColumns, tc.sortColumnsFunc(t))
require.NoError(t, err)
rows, err := m.Merge(context.Background(), tc.sqlRows())
require.NoError(t, err)
Expand Down Expand Up @@ -724,7 +797,7 @@ func (ms *DistinctMergerSuite) TestOrderByRows_NotHaveOrderBy() {
}
for _, tc := range testcases {
ms.T().Run(tc.name, func(t *testing.T) {
m, err := NewDistinctMerger(tc.distinctColumns, merger.SortColumns{})
m, err := NewMerger(tc.distinctColumns, merger.SortColumns{})
require.NoError(t, err)
rows, err := m.Merge(context.Background(), tc.sqlRows())
require.NoError(t, err)
Expand Down Expand Up @@ -791,7 +864,7 @@ func (ms *DistinctMergerSuite) TestOrderByRows_NextAndErr() {
for _, tc := range testcases {
ms.T().Run(tc.name, func(t *testing.T) {
sortColumns := tc.sortColumnsFunc(t)
m, err := NewDistinctMerger(tc.distinctColumns, sortColumns)
m, err := NewMerger(tc.distinctColumns, sortColumns)
require.NoError(t, err)
rows, err := m.Merge(context.Background(), tc.rowsList())
require.NoError(t, err)
Expand All @@ -813,7 +886,7 @@ func (ms *DistinctMergerSuite) TestOrderByRows_Columns() {
Order: merger.OrderDESC,
})
require.NoError(ms.T(), err)
m, err := NewDistinctMerger([]merger.ColumnInfo{
m, err := NewMerger([]merger.ColumnInfo{
{
Index: 0, Name: "id",
},
Expand Down Expand Up @@ -861,7 +934,7 @@ func (ms *DistinctMergerSuite) TestOrderByRows_Close() {
Order: merger.OrderDESC,
})
require.NoError(ms.T(), err)
m, err := NewDistinctMerger([]merger.ColumnInfo{
m, err := NewMerger([]merger.ColumnInfo{
{
Index: 0, Name: "id",
},
Expand Down Expand Up @@ -921,7 +994,7 @@ func (ms *DistinctMergerSuite) TestOrderByRows_Scan() {
Order: merger.OrderDESC,
})
require.NoError(t, err)
m, err := NewDistinctMerger([]merger.ColumnInfo{
m, err := NewMerger([]merger.ColumnInfo{
{
Index: 0, Name: "id",
},
Expand Down Expand Up @@ -951,7 +1024,7 @@ func (ms *DistinctMergerSuite) TestOrderByRows_Scan() {
Order: merger.OrderDESC,
})
require.NoError(t, err)
m, err := NewDistinctMerger([]merger.ColumnInfo{
m, err := NewMerger([]merger.ColumnInfo{
{
Index: 0, Name: "id",
},
Expand Down Expand Up @@ -1125,7 +1198,7 @@ func (ms *NullableOrderByMergerSuite) TestRows_Nullable() {
ms.T().Run(tc.name, func(t *testing.T) {
sortCols, err := merger.NewSortColumns(tc.sortColumns...)
require.NoError(t, err)
m, err := NewDistinctMerger(tc.DistinctCols, sortCols)
m, err := NewMerger(tc.DistinctCols, sortCols)
require.NoError(t, err)
rows, err := m.Merge(context.Background(), tc.rowsList())
require.NoError(t, err)
Expand Down
2 changes: 1 addition & 1 deletion internal/merger/internal/errs/error.go
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ var (
ErrMergerNotFound = errors.New("merger: merger未找到")

ErrDistinctColsRepeated = errors.New("merger: 去重列重复")
ErrSortColListNotContainDistinctCol = errors.New("merger: 排序列里面不包含去重列")
ErrSortColListNotContainDistinctCol = errors.New("merger: 排序列里包含不在去重列表中的列")
ErrDistinctColsNotInCols = errors.New("merger:去重列不在数据库字段集合里面")
ErrDistinctColsIsNull = errors.New("merger:去重列为空")
ErrDistinctMultiSortCols = errors.New("merger:传入多组SortCols")
Expand Down

0 comments on commit 220a591

Please sign in to comment.