datapipeline 3.0.0: transform, Parallelmodus, chained und String-Bedingungen entfernt
This commit is contained in:
+21
-15
@@ -4,16 +4,22 @@ require_relative '../test_helper'
|
||||
class ChainedTest < PipelineTest
|
||||
ROWS = [{ 'a' => 1 }, { 'a' => 2 }, { 'a' => 3 }].freeze
|
||||
|
||||
def test_chained_transform_gets_previous_output
|
||||
out = output(ROWS) { chained; transform { |r| r.merge('b' => 1) }; transform { |r| r.merge('c' => 2) } }
|
||||
def test_each_step_gets_the_previous_output
|
||||
out = output(ROWS) { map { |r| r.merge('b' => 1) }; map { |r| r.merge('c' => 2) } }
|
||||
assert_equal ROWS.map { |r| r.merge('b' => 1, 'c' => 2) }, out
|
||||
end
|
||||
|
||||
def test_one_to_many_then_index
|
||||
out = output(ROWS) { chained; transform { |r| [r, r] }; transform { |r, i| r.merge('i' => i) } }
|
||||
out = output(ROWS) { map { |r| [r, r] }; map { |r, ctx| r.merge('i' => ctx.index) } }
|
||||
assert_equal (0...6).to_a, out.map { |r| r['i'] }
|
||||
end
|
||||
|
||||
def test_nil_and_empty_array_drop_rows
|
||||
assert_equal [{ 'a' => 1 }], output(ROWS) { map { |r| r['a'] == 1 ? r : nil } }
|
||||
assert_equal ROWS, output(ROWS) { map { |r| [r, nil] } }
|
||||
assert_equal [], output(ROWS) { map { [] } }
|
||||
end
|
||||
|
||||
def test_map_and_filter
|
||||
out = output(ROWS) do
|
||||
map { |r| r.merge('d' => r['a'] * 2) }
|
||||
@@ -23,12 +29,6 @@ class ChainedTest < PipelineTest
|
||||
assert_equal [{ 'a' => 2, 'd' => 4, 'i' => 0 }, { 'a' => 3, 'd' => 6, 'i' => 1 }], out
|
||||
end
|
||||
|
||||
def test_map_turns_chaining_on_for_transform
|
||||
out = output(ROWS) { transform { |r| r.merge('b' => 1) }; map { |r| r.merge('c' => 1) } }
|
||||
assert_equal 3, out.size
|
||||
assert(out.all? { |r| r['b'] && r['c'] })
|
||||
end
|
||||
|
||||
def test_header_and_trailer_with_context
|
||||
out = output(ROWS) do
|
||||
header { |c| { 'H' => c.read, 'W' => c.written } }
|
||||
@@ -41,9 +41,14 @@ class ChainedTest < PipelineTest
|
||||
assert_equal 6, out.size
|
||||
end
|
||||
|
||||
def test_edge_order_follows_registration
|
||||
out = output(ROWS) { header { { 'h' => 1 } }; transform(processing: :prepend) { { 'p' => 1 } }; map { |r| r } }
|
||||
assert_equal [{ 'h' => 1 }, { 'p' => 1 }], out.first(2)
|
||||
def test_several_headers_and_trailers_in_registration_order
|
||||
out = output(ROWS) { header { { 'h' => 1 } }; trailer { { 't' => 1 } }; header { { 'h' => 2 } }; trailer { { 't' => 2 } } }
|
||||
assert_equal [{ 'h' => 1 }, { 'h' => 2 }, *ROWS, { 't' => 1 }, { 't' => 2 }], out
|
||||
end
|
||||
|
||||
def test_stable_order_of_many_steps
|
||||
out = output(ROWS) { 20.times { |k| map { |r| r.merge("k#{k}" => k) } } }
|
||||
assert_equal (0...20).to_a, out.first.values.drop(1)
|
||||
end
|
||||
|
||||
def test_header_and_trailer_nil_and_arrays
|
||||
@@ -51,12 +56,13 @@ class ChainedTest < PipelineTest
|
||||
assert_equal ROWS + [{ 'x' => 1 }, { 'y' => 2 }], out
|
||||
end
|
||||
|
||||
def test_condition_on_map
|
||||
def test_condition_on_map_and_filter
|
||||
assert_equal [{ 'a' => 1 }], output(ROWS) { map(condition: ->(r) { r['a'] == 1 }) { |r| r } }
|
||||
assert_equal [{ 'a' => 3 }], output(ROWS) { filter(condition: ->(r) { r['a'] > 1 }) { |r| r['a'] == 3 } }
|
||||
end
|
||||
|
||||
def test_chained_false
|
||||
assert_equal 6, output(ROWS) { chained false; transform { |r| r }; transform { |r| r } }.size
|
||||
def test_condition_must_be_a_lambda
|
||||
assert_includes assert_raises(ArgumentError) { output(ROWS) { map(condition: "row['a'] == 1") { |r| r } } }.message, 'lambda'
|
||||
end
|
||||
|
||||
def test_csv_end_to_end
|
||||
|
||||
Reference in New Issue
Block a user