func TestLeftOverwritesRight(t *testing.T) { expected := []optimus.Row{ {"header1": "value3", "header2": "value2", "header3": "value1"}, } leftTable := slice.New([]optimus.Row{ {"header1": "value1", "header2": "value2"}, }) rightTable := slice.New([]optimus.Row{ {"header3": "value1", "header1": "value3"}, }) combinedTable := optimus.Transform(leftTable, Join(rightTable, "header1", "header3", JoinType.Inner)) rows := tests.HasRows(t, combinedTable, 1) assert.Equal(t, expected, rows) }
func TestJoinOneToNone(t *testing.T) { expected := []optimus.Row{ {"header1": "value3", "header2": "value4", "header3": "value3", "header4": "value8"}, {"header1": "value5", "header2": "value6", "header3": "value5", "header4": "value9"}, } leftTable := slice.New(defaultInput()) rightTable := slice.New([]optimus.Row{ // 'value1' in left table maps to no rows in the right table {"header3": "valueNoMatch", "header4": "value7"}, {"header3": "value3", "header4": "value8"}, {"header3": "value5", "header4": "value9"}, }) combinedTable := optimus.Transform(leftTable, Join(rightTable, "header1", "header3", JoinType.Inner)) rows := tests.HasRows(t, combinedTable, 2) assert.Equal(t, expected, rows) }
func TestJoinOneToMany(t *testing.T) { expected := []optimus.Row{ {"header1": "value1", "header2": "value2", "header3": "value1", "header4": "value8"}, {"header1": "value1", "header2": "value2", "header3": "value1", "header4": "value9"}, } leftTable := slice.New([]optimus.Row{ {"header1": "value1", "header2": "value2"}, }) rightTable := slice.New([]optimus.Row{ // 'value1' in left table maps to two rows in the right table {"header3": "value1", "header4": "value8"}, {"header3": "value1", "header4": "value9"}, }) combinedTable := optimus.Transform(leftTable, Join(rightTable, "header1", "header3", JoinType.Inner)) rows := tests.HasRows(t, combinedTable, 2) assert.Equal(t, expected, rows) }
func TestRightTableTransformError(t *testing.T) { leftTable := slice.New([]optimus.Row{ {"header1": "value1", "header2": "value2"}, }) rightTable := slice.New([]optimus.Row{{"": ""}}) // Returns an error immediately rightTable = optimus.Transform(rightTable, TableTransform(func(row optimus.Row, out chan<- optimus.Row) error { return errors.New("some error") })) combinedTable := optimus.Transform(leftTable, Join(rightTable, "header1", "header3", JoinType.Inner)) // Should receive no rows here because the first response was an error. tests.Consumed(t, combinedTable) // Should receive no rows here because the the transform should have consumed // all the rows. tests.Consumed(t, rightTable) if combinedTable.Err() == nil { t.Fatal("Expected RightTable to report an error") } }
// Test that chaining together multiple transforms behaves as expected func TestChaining(t *testing.T) { input := []optimus.Row{ {"header1": "value1", "header2": "value2"}, {"header1": "value3", "header2": "value4"}, {"header1": "value5", "header2": "value6"}, } expected := []optimus.Row{ {"header4": "value1"}, {"header4": "value3"}, {"header4": "value5"}, } table := slice.New(input) transformedTable := New(table).Fieldmap( map[string][]string{"header1": {"header3"}}).Fieldmap(map[string][]string{"header3": {"header4"}}).Table() rows := tests.HasRows(t, transformedTable, 3) assert.Equal(t, expected, rows) }
"gopkg.in/azylman/optimus.v1/sources/infinite" "gopkg.in/azylman/optimus.v1/sources/slice" "gopkg.in/azylman/optimus.v1/tests" "testing" ) var defaultInput = func() []optimus.Row { return []optimus.Row{ {"header1": "value1", "header2": "value2"}, {"header1": "value3", "header2": "value4"}, {"header1": "value5", "header2": "value6"}, } } var defaultSource = func() optimus.Table { return slice.New(defaultInput()) } var transformEqualities = []tests.TableCompareConfig{ { Name: "Fieldmap", Actual: func(optimus.Table, interface{}) optimus.Table { return optimus.Transform(defaultSource(), Fieldmap(map[string][]string{"header1": {"header4"}})) }, Expected: func(optimus.Table, interface{}) optimus.Table { return slice.New([]optimus.Row{ {"header4": "value1"}, {"header4": "value3"}, {"header4": "value5"}, }) },
"gopkg.in/azylman/optimus.v1/sources/slice" "gopkg.in/azylman/optimus.v1/tests" "gopkg.in/azylman/optimus.v1/transforms" "testing" ) var defaultInput = func() []optimus.Row { return []optimus.Row{ {"header1": "value1", "header2": "value2"}, {"header1": "value3", "header2": "value4"}, {"header1": "value5", "header2": "value6"}, } } var defaultSource = func() optimus.Table { return slice.New(defaultInput()) } var errorTransform = func(msg string) func(optimus.Row) (optimus.Row, error) { return func(optimus.Row) (optimus.Row, error) { return nil, errors.New(msg) } } // Test that chaining together multiple transforms behaves as expected func TestChaining(t *testing.T) { input := []optimus.Row{ {"header1": "value1", "header2": "value2"}, {"header1": "value3", "header2": "value4"}, {"header1": "value5", "header2": "value6"}, }