Comments (3)
So the first one seems relatively straight forward to resolve from what I can see here. The CategoryCreated event should have a categoryId, so you test it like this:
public function test_adding_a_person_to_an_event_with_category()
{
$categoryId = uuid();
$this->given(
new EventStarted(),
new CategoryCreated($categoryId)
)->when(
new AddPerson($this->aggregateRootId, $categoryId), // <- what is $categoryId?
)->then(
new PersonAdded(),
);
}
The trick for this to always have deterministic identifiers. Your command to create the category should contain the ID to create it and the corresponding event should have to ID for future reference. For the other case, you've got two models that interact with each other. For this, you can use a process manager that listens to events from one aggregate and act on the other. Process managers are explained in the docs and are basically just consumers of messages that, instead of accumulating state, act. So to test this you have your first aggregate, test it in isolation. Test the process manager (only needs to forward the calls) and then test the person aggregate. You shouldn't want to capture this in one test because it's a different unit of isolation. Let me know if this helps, if not we can discuss further.
from eventsauce.
The first one makes sense that way.
On the last one; I've discussed it with my team too, that it makes sense to be able to test each aggregate in isolation. However, due to invariants being as much as across the entire domain, we were confused with how to split up the aggregates and how to test these.
Thank you for you quick response @frankdejonge, we'll explore this and report back with our solution.
from eventsauce.
Closing this for inactivity, can be re-opened later if needed.
from eventsauce.
Related Issues (20)
- Doctrine MessageRepository appears to have no upgrade path HOT 13
- Message::withHeader() no longer allows array value HOT 2
- Doubt about aggregate root version HOT 4
- Isn't replaying domain message events by default slow as hell HOT 15
- Examples of persisting snapshots to a database HOT 2
- Aggregate root HOT 3
- Projections
- Structure table
- Suggest snapshotting change HOT 2
- AggregateRootBehaviour should have a template on AggregateRootId HOT 3
- Use lambdas insterad of command objects? HOT 4
- DefaultHeadersDecorator order parameters deprecated HOT 6
- Move all tests to separate folder tests HOT 2
- Reconstituting a specific version HOT 8
- Missing "id" reference in docs HOT 1
- DoctrineOutboxRepository reserved words escaping HOT 1
- Type mismatched... Expected `AggregateRootId` found `AggregateRootIdType` HOT 1
- Storing messages in MongoDB HOT 2
- Help needed... Preconditions are not working in test scenarios HOT 2
- Your inputs on this would be very helpful
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from eventsauce.