Test Data
Sample streams and test data included in the package.
The Streams Testing package includes a rich set of sample data based on the Star Wars universe. This data provides realistic examples for testing and learning Streams concepts.
Available Streams
The package includes these pre-configured streams:
Films
Stream: films
Entries: 7 Star Wars films
Key Field: episode_id
$films = Streams::entries('films')->get();
// Returns 7 film entries
Example Entry
{
"episode_id": 1,
"title": "A New Hope",
"director": "George Lucas",
"producer": "Gary Kurtz, Rick McCallum",
"release_date": "1977-05-25",
"opening_crawl": "It is a period of civil war..."
}
Fields
episode_id(integer) - Unique episode numbertitle(string) - Film titledirector(string) - Director nameproducer(string) - Producer namesrelease_date(datetime) - Release dateopening_crawl(text) - Opening textcreated(datetime) - Creation timestampedited(datetime) - Last edit timestamp
People
Stream: people
Entries: Multiple characters
Key Field: id
$characters = Streams::entries('people')
->where('homeworld', 'Tatooine')
->get();
Example Entry
{
"id": 1,
"name": "Luke Skywalker",
"height": "172",
"mass": "77",
"hair_color": "blond",
"eye_color": "blue",
"birth_year": "19BBY",
"gender": "male",
"homeworld": "Tatooine"
}
Planets
Stream: planets
Entries: Various planets
Key Field: id
$planets = Streams::entries('planets')
->where('climate', 'like', '%arid%')
->get();
Example Entry
{
"id": 1,
"name": "Tatooine",
"rotation_period": "23",
"orbital_period": "304",
"diameter": "10465",
"climate": "arid",
"gravity": "1 standard",
"terrain": "desert",
"population": "200000"
}
Species
Stream: species
Entries: Various species
Key Field: id
$species = Streams::entries('species')
->where('classification', 'mammal')
->get();
Starships
Stream: starships
Entries: Various starships
Key Field: id
$starships = Streams::entries('starships')
->where('manufacturer', 'like', '%Incom%')
->get();
Vehicles
Stream: vehicles
Entries: Various vehicles
Key Field: id
$vehicles = Streams::entries('vehicles')
->orderBy('cost_in_credits', 'desc')
->get();
Files
Stream: files
Entries: File handling examples
Key Field: id
$files = Streams::entries('files')->get();
Using Test Data
Querying Data
public function test_query_films_by_director()
{
$films = Streams::entries('films')
->where('director', 'George Lucas')
->get();
$this->assertGreaterThan(0, $films->count());
}
Accessing Relationships
public function test_character_homeworld()
{
$luke = Streams::entries('people')
->where('name', 'Luke Skywalker')
->first();
$this->assertEquals('Tatooine', $luke->homeworld);
}
Counting Entries
public function test_all_films_present()
{
$count = Streams::entries('films')->count();
$this->assertEquals(7, $count);
}
Sorting Data
public function test_films_chronological_order()
{
$films = Streams::entries('films')
->orderBy('release_date')
->get();
$this->assertEquals('A New Hope', $films->first()->title);
}
Data Management
Automatic Restoration
The test data is automatically restored after each test. The TestCase handles this in the tearDown() method:
protected function tearDown(): void
{
$this->restoreStreamsData();
parent::tearDown();
}
This ensures:
- Each test starts with clean data
- Tests don't interfere with each other
- You can modify data without permanent changes
Manual Restoration
If needed, you can manually restore data:
public function test_with_manual_restore()
{
// Modify some data
Streams::make('films')->create([...]);
// Manually restore
$this->restoreStreamsData();
// Data is back to original state
$this->assertCount(7, Streams::entries('films')->get());
}
Data Location
Test data is stored in:
- Active:
vendor/streams/testing/laravel/streams/ - Backup:
vendor/streams/testing/laravel/streams.bak/
Custom Test Data
Adding Your Own Streams
Create custom stream definitions in your test setup:
protected function setUp(): void
{
parent::setUp();
// Define a custom stream for testing
Streams::build([
'id' => 'custom_products',
'name' => 'Products',
'source' => [
'type' => 'file',
'format' => 'json',
],
'fields' => [
'id' => 'integer',
'name' => 'string',
'price' => 'decimal',
],
])->save();
}
Loading Custom Fixtures
Load your own test data:
public function test_with_custom_data()
{
$products = [
['id' => 1, 'name' => 'Widget', 'price' => 9.99],
['id' => 2, 'name' => 'Gadget', 'price' => 19.99],
];
foreach ($products as $product) {
Streams::make('custom_products')->create($product);
}
$this->assertCount(2, Streams::entries('custom_products')->get());
}
Best Practices
1. Don't Rely on Specific IDs
IDs may change. Use attributes instead:
// Bad
$film = Streams::entries('films')->find(1);
// Good
$film = Streams::entries('films')
->where('title', 'A New Hope')
->first();
2. Use Factories for Complex Data
Create factories for reusable test data:
class TestHelpers
{
public static function createFilm($attributes = [])
{
return Streams::make('films')->create(array_merge([
'title' => 'Test Film',
'director' => 'Test Director',
'release_date' => now(),
], $attributes));
}
}
3. Test Data Integrity
Verify expected data exists:
protected function setUp(): void
{
parent::setUp();
$this->assertGreaterThan(0, Streams::entries('films')->count(),
'Test data not loaded properly');
}