Exemplo n.º 1
0
        public async Task FindByAttributeValueAsync_ReturnsAllStatesByProjectId(
            [Frozen] ProjectId projectId,
            IFixture fixture,
            TodoTaskId[] ids)
        {
            // arrange
            const string attributeName = "TaskProjectId";
            var          states        = new Dictionary <TodoTaskId, (AggregateVersion, TodoTask.AggregateState)>();

            foreach (var id in ids)
            {
                var state = fixture.Create <TodoTask.AggregateState>();
                state.Mutate(new TodoTaskCreated(projectId, id));
                var version = AggregateVersion.Emtpy;
                states[id] = (version, state);

                await _stateStorage.PersistAsync(
                    id,
                    state,
                    version,
                    new Dictionary <string, object> {
                    { attributeName, projectId }
                },
                    CancellationToken.None);
            }

            // act
            var query       = new FindByAttributeValueStateQuery(attributeName, projectId, ids.Length);
            var queryResult =
                await _stateStorage.FindByAttributeValueAsync <TodoTask.AggregateState>(query, CancellationToken.None);

            // assert
            foreach (var id in ids)
            {
                var(actualVersion, actualState)     = states[id];
                var(restoredVersion, restoredState) = queryResult.States[id];

                Assert.Equal(AggregateVersion.Emtpy.Increment(), restoredVersion);
                Assert.Equal(actualState.ProjectId, restoredState.ProjectId);
                Assert.Equal(actualState.TaskState, restoredState.TaskState);
            }
        }
Exemplo n.º 2
0
        protected async Task <RepositoryQueryResult <TAggregateRoot> > FindByAttributeValueAsync(
            FindByAttributeValueStateQuery query, CancellationToken cancellationToken)
        {
            Require.NotNull(query, nameof(query));

            var queryResult = await _stateStorage.FindByAttributeValueAsync <TAggregateState>(query, cancellationToken);

            var items = new List <TAggregateRoot>(queryResult.States.Count);

            foreach (var restoredState in queryResult.States)
            {
                var id = (TEntityId)Activator.CreateInstance(typeof(TEntityId), restoredState.Key);
                var(version, state) = restoredState.Value;

                items.Add(CreateAggregateInstance(id, version, state));
            }

            return(new RepositoryQueryResult <TAggregateRoot>(items, queryResult.PaginationToken));
        }