Skip to content

Commit edcb182

Browse files
authored
added raw data generator methods to fake extractors (#1858)
1 parent c0afa1e commit edcb182

2 files changed

Lines changed: 91 additions & 64 deletions

File tree

src/core/etl/tests/Flow/ETL/Tests/Double/FakeRandomOrdersExtractor.php

Lines changed: 53 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,14 @@
44

55
namespace Flow\ETL\Tests\Double;
66

7-
use function Flow\ETL\DSL\{array_to_rows, datetime_schema, float_schema, list_schema, schema, string_schema, structure_schema, uuid_schema};
7+
use function Flow\ETL\DSL\{array_to_rows,
8+
datetime_schema,
9+
float_schema,
10+
list_schema,
11+
schema,
12+
string_schema,
13+
structure_schema,
14+
uuid_schema};
815
use function Flow\Types\DSL\{type_float, type_integer, type_list, type_string, type_structure};
916
use Faker\Factory;
1017
use Flow\ETL\{Extractor, FlowContext, Schema};
@@ -47,6 +54,16 @@ public static function schema() : Schema
4754
}
4855

4956
public function extract(FlowContext $context) : \Generator
57+
{
58+
foreach ($this->rawData() as $row) {
59+
yield array_to_rows($row, schema: self::schema());
60+
}
61+
}
62+
63+
/**
64+
* @return \Generator<array<string, mixed>>
65+
*/
66+
public function rawData() : \Generator
5067
{
5168
$faker = Factory::create();
5269

@@ -69,45 +86,48 @@ public function extract(FlowContext $context) : \Generator
6986
for ($i = 0; $i < $this->count; $i++) {
7087

7188
$createdAt = \DateTimeImmutable::createFromMutable($faker->dateTimeThisYear);
72-
$cancelledAt = \random_int(1, 10) === 1 ? $createdAt->modify('+' . $faker->numberBetween(1, 5) . ' hours') : null;
89+
$cancelledAt = \random_int(1, 10) === 1 ? $createdAt->modify('+' . $faker->numberBetween(
90+
1,
91+
5
92+
) . ' hours') : null;
7393

7494
if ($cancelledAt) {
7595
$updatedAt = $cancelledAt;
7696
} else {
77-
$updatedAt = \random_int(1, 3) === 1 ? $createdAt->modify('+' . $faker->numberBetween(1, 3) . ' days') : null;
97+
$updatedAt = \random_int(1, 3) === 1 ? $createdAt->modify('+' . $faker->numberBetween(
98+
1,
99+
3
100+
) . ' days') : null;
78101
}
79102

80-
yield array_to_rows(
81-
[
82-
'order_id' => $faker->uuid,
83-
'seller_id' => $sellers[\random_int(0, \count($sellers) - 1)],
84-
'created_at' => $createdAt,
85-
'updated_at' => $updatedAt,
86-
'cancelled_at' => $cancelledAt,
87-
'discount' => \random_int(0, 1) === 1 ? $faker->randomFloat(2, 0, 50) : null,
88-
'email' => $faker->email,
89-
'customer' => $faker->firstName . ' ' . $faker->lastName,
90-
'address' => [
91-
'street' => $faker->streetAddress,
92-
'city' => $faker->city,
93-
'zip' => $faker->postcode,
94-
'country' => $faker->country,
95-
],
96-
'notes' => \array_map(
97-
static fn ($i) => $faker->sentence,
98-
\range(1, $faker->numberBetween(1, 5))
99-
),
100-
'items' => \array_map(
101-
static fn (int $index) => [
102-
'sku' => $skus[$skuIndex = $faker->numberBetween(1, 4)]['sku'],
103-
'quantity' => $faker->numberBetween(1, 10),
104-
'price' => $skus[$skuIndex]['price'],
105-
],
106-
\range(1, $faker->numberBetween(1, 4))
107-
),
103+
yield [
104+
'order_id' => $faker->uuid,
105+
'seller_id' => $sellers[\random_int(0, \count($sellers) - 1)],
106+
'created_at' => $createdAt,
107+
'updated_at' => $updatedAt,
108+
'cancelled_at' => $cancelledAt,
109+
'discount' => \random_int(0, 1) === 1 ? $faker->randomFloat(2, 0, 50) : null,
110+
'email' => $faker->email,
111+
'customer' => $faker->firstName . ' ' . $faker->lastName,
112+
'address' => [
113+
'street' => $faker->streetAddress,
114+
'city' => $faker->city,
115+
'zip' => $faker->postcode,
116+
'country' => $faker->country,
108117
],
109-
schema: self::schema()
110-
);
118+
'notes' => \array_map(
119+
static fn ($i) => $faker->sentence,
120+
\range(1, $faker->numberBetween(1, 5))
121+
),
122+
'items' => \array_map(
123+
static fn (int $index) => [
124+
'sku' => $skus[$skuIndex = $faker->numberBetween(1, 4)]['sku'],
125+
'quantity' => $faker->numberBetween(1, 10),
126+
'price' => $skus[$skuIndex]['price'],
127+
],
128+
\range(1, $faker->numberBetween(1, 4))
129+
),
130+
];
111131
}
112132
}
113133
}

src/core/etl/tests/Flow/ETL/Tests/Double/FakeStaticOrdersExtractor.php

Lines changed: 38 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,16 @@ public static function schema() : Schema
4444
}
4545

4646
public function extract(FlowContext $context) : \Generator
47+
{
48+
foreach ($this->rawData() as $row) {
49+
yield array_to_rows($row, schema: self::schema());
50+
}
51+
}
52+
53+
/**
54+
* @return \Generator<array<string, mixed>>
55+
*/
56+
public function rawData() : \Generator
4757
{
4858
$skus = [
4959
['sku' => 'SKU_0001', 'name' => 'Product 1', 'price' => 0.14],
@@ -54,40 +64,37 @@ public function extract(FlowContext $context) : \Generator
5464
];
5565

5666
for ($i = 0; $i < $this->count; $i++) {
57-
yield array_to_rows(
58-
[
59-
'order_id' => '254d61c5-22c8-4407-83a2-76f1cab53af2',
60-
'created_at' => new \DateTimeImmutable('2025-01-01 12:00:00'),
61-
'updated_at' => \random_int(0, 1) === 1 ? new \DateTimeImmutable('2025-01-01 12:10:00') : null,
62-
'discount' => \random_int(0, 1) === 1 ? 24.4 : null,
63-
'email' => 'user-' . $i . '@example.com',
64-
'customer' => 'John Doe ' . $i,
65-
'address' => [
66-
'street' => '123 Main St, Apt ' . $i,
67-
'city' => 'City ',
68-
'zip' => '12345-' . $i,
69-
'country' => 'PL',
70-
],
71-
'notes' => [
72-
'Note 1 for order ' . $i,
73-
'Note 2 for order ' . $i,
74-
'Note 3 for order ' . $i,
67+
yield [
68+
'order_id' => '254d61c5-22c8-4407-83a2-76f1cab53af2',
69+
'created_at' => new \DateTimeImmutable('2025-01-01 12:00:00'),
70+
'updated_at' => \random_int(0, 1) === 1 ? new \DateTimeImmutable('2025-01-01 12:10:00') : null,
71+
'discount' => \random_int(0, 1) === 1 ? 24.4 : null,
72+
'email' => 'user-' . $i . '@example.com',
73+
'customer' => 'John Doe ' . $i,
74+
'address' => [
75+
'street' => '123 Main St, Apt ' . $i,
76+
'city' => 'City ',
77+
'zip' => '12345-' . $i,
78+
'country' => 'PL',
79+
],
80+
'notes' => [
81+
'Note 1 for order ' . $i,
82+
'Note 2 for order ' . $i,
83+
'Note 3 for order ' . $i,
84+
],
85+
'items' => [
86+
[
87+
'sku' => $skus[0]['sku'],
88+
'quantity' => 1,
89+
'price' => $skus[0]['price'],
7590
],
76-
'items' => [
77-
[
78-
'sku' => $skus[0]['sku'],
79-
'quantity' => 1,
80-
'price' => $skus[0]['price'],
81-
],
82-
[
83-
'sku' => $skus[1]['sku'],
84-
'quantity' => 2,
85-
'price' => $skus[1]['price'],
86-
],
91+
[
92+
'sku' => $skus[1]['sku'],
93+
'quantity' => 2,
94+
'price' => $skus[1]['price'],
8795
],
8896
],
89-
schema: self::schema()
90-
);
97+
];
9198
}
9299
}
93100
}

0 commit comments

Comments
 (0)