Beispiel #1
0
        public void AddAddress_Should_ReturnFail_When_AddressExists()
        {
            var line     = string.Join(string.Empty, _fixture.CreateMany <char>(100));
            var postCode = string.Join(string.Empty, _fixture.CreateMany <char>(10));
            var number   = Math.Abs(_fixture.Create <int>());

            var user = _fixture.Build <User>()
                       .With(x => x.Addresses, new List <Address>
            {
                _fixture.Build <Address>()
                .With(x => x.Line, line)
                .With(x => x.Number, number)
                .With(x => x.PostCode, postCode)
                .Create()
            })
                       .Create();

            var root = new UserAggregationRoot(new UserState(user),
                                               Enumerable.Empty <IAggregationRootInterceptor <UserState, Guid> >(),
                                               Substitute.For <ILogger <UserAggregationRoot> >());
            var result = root.AddAddress(line, number, postCode);

            result.Should().NotBeNull();
            result.Should().BeEquivalentTo(DomainError.AddressError.AddressAlreadyExist);
        }
Beispiel #2
0
        public void AddPhone_Should_ReturnFail_When_NumberIsNull(string number)
        {
            var user = _fixture.Create <User>();

            var root = new UserAggregationRoot(new UserState(user),
                                               Enumerable.Empty <IAggregationRootInterceptor <UserState, Guid> >(),
                                               Substitute.For <ILogger <UserAggregationRoot> >());
            var result = root.AddPhone(number);

            result.Should().NotBeNull();
            result.Should().BeEquivalentTo(DomainError.PhoneError.MissingNumber);
        }
Beispiel #3
0
        public void Update_Should_ReturnFail_When_LastNamesIsMissing(string lastName)
        {
            var firstName = _fixture.Create <string>().Substring(0, 20);
            var years     = DateTime.Now.Subtract(TimeSpan.FromDays(365 * 20));

            var root = new UserAggregationRoot(new UserState(new User()),
                                               Enumerable.Empty <IAggregationRootInterceptor <UserState, Guid> >(),
                                               Substitute.For <ILogger <UserAggregationRoot> >());
            var result = root.Update(firstName, lastName, years);

            result.Should().NotBeNull();
            result.Should().BeEquivalentTo(DomainError.UserError.MissingLastNames);
        }
Beispiel #4
0
        public void RemoveAddress_Should_ReturnAddressNotFound_When_AddressDoesNotExist()
        {
            var user = _fixture.Create <User>();

            var root = new UserAggregationRoot(new UserState(user),
                                               Enumerable.Empty <IAggregationRootInterceptor <UserState, Guid> >(),
                                               Substitute.For <ILogger <UserAggregationRoot> >());

            var result = root.RemoveAddress(_fixture.Create <Guid>());

            result.Should().NotBeNull();
            result.Should().BeEquivalentTo(DomainError.AddressError.AddressNotFound);
        }
Beispiel #5
0
        public void AddPhone_Should_ReturnOk()
        {
            var user   = _fixture.Create <User>();
            var number = string.Join(string.Empty, _fixture.CreateMany <char>(14));

            var root = new UserAggregationRoot(new UserState(user),
                                               Enumerable.Empty <IAggregationRootInterceptor <UserState, Guid> >(),
                                               Substitute.For <ILogger <UserAggregationRoot> >());
            var result = root.AddPhone(number);

            result.Should().NotBeNull();
            result.Should().BeEquivalentTo(Result.Ok());
        }
Beispiel #6
0
        public void Update_Should_ReturnFail_When_FirstNameIsInvalid()
        {
            var firstName = string.Join(string.Empty, _fixture.CreateMany <char>(101));
            var lastName  = _fixture.Create <string>();
            var years     = DateTime.Now.Subtract(TimeSpan.FromDays(365 * 20));

            var root = new UserAggregationRoot(new UserState(new User()),
                                               Enumerable.Empty <IAggregationRootInterceptor <UserState, Guid> >(),
                                               Substitute.For <ILogger <UserAggregationRoot> >());
            var result = root.Update(firstName, lastName, years);

            result.Should().NotBeNull();
            result.Should().BeEquivalentTo(DomainError.UserError.InvalidFirstName);
        }
Beispiel #7
0
        public void Create_Should_ReturnOk()
        {
            var email     = $"{_fixture.Create<string>()}@example.com";
            var firstName = _fixture.Create <string>().Substring(0, 20);
            var lastName  = _fixture.Create <string>();
            var years     = DateTime.Now.Subtract(TimeSpan.FromDays(365 * 20));

            var root = new UserAggregationRoot(new UserState(new User()),
                                               Enumerable.Empty <IAggregationRootInterceptor <UserState, Guid> >(),
                                               Substitute.For <ILogger <UserAggregationRoot> >());
            var result = root.Create(email, firstName, lastName, years);

            result.Should().NotBeNull();
            result.Should().BeEquivalentTo(Result.Ok());
        }
Beispiel #8
0
        public void AddAddress_Should_ReturnFail_When_PostCodeIsMissing(string postCode)
        {
            var user = _fixture.Create <User>();

            var line   = string.Join(string.Empty, _fixture.CreateMany <char>(100));
            var number = Math.Abs(_fixture.Create <int>());

            var root = new UserAggregationRoot(new UserState(user),
                                               Enumerable.Empty <IAggregationRootInterceptor <UserState, Guid> >(),
                                               Substitute.For <ILogger <UserAggregationRoot> >());
            var result = root.AddAddress(line, number, postCode);

            result.Should().NotBeNull();
            result.Should().BeEquivalentTo(DomainError.AddressError.MissingPostCode);
        }
        protected override ExecutionResult ExecuteCommand(RemoveUserCommand command)
        {
            var user      = _userDb.Repository.Get(EntityId.From(command.Id));
            var agg       = UserAggregationRoot.ReconstructFrom(user);
            var isSucceed = false;

            if (agg.ValidationResults.IsValid)
            {
                agg.Remove();

                _userDb.Repository.Remove(agg.GetChange());
                _userDb.SaveChanges();
                agg.GetEvents().ToImmutableList().ForEach(ev => Publisher.Publish(ev));
                isSucceed = true;
            }

            return(new ExecutionResult(isSucceed, agg.ValidationResults.Errors.ToImmutableList()));
        }
Beispiel #10
0
        public void user_aggregate_create()
        {
            var fixture = new Fixture();

            fixture.Register <EntityId>(() => EntityId.From(fixture.Create <Guid>()));
            fixture.Register <Name>(() => Name.From(fixture.Create <string>()));
            fixture.Register <SocialSecurityId>(() => SocialSecurityId.From(fixture.Create <string>()));
            fixture.Register <Email>(() => Email.From(string.Format($"{fixture.Create<string>()}@teste.com")));

            fixture.Register <UserAggregationRoot>(
                () => UserAggregationRoot.CreateFrom(fixture.Create <Name>(),
                                                     fixture.Create <SocialSecurityId>(),
                                                     fixture.Create <Email>()));

            var agg = fixture.Create <UserAggregationRoot>();

            Assert.True(agg.ValidationResults.IsValid);
        }
Beispiel #11
0
        public void AddPhone_Should_ReturnFail_When_NumberAlreadyAdded()
        {
            var number = string.Join(string.Empty, _fixture.CreateMany <char>(14));
            var user   = _fixture.Build <User>()
                         .With(x => x.Phones, new HashSet <Phone>
            {
                new Phone
                {
                    Number = number
                }
            })
                         .Create();

            var root = new UserAggregationRoot(new UserState(user),
                                               Enumerable.Empty <IAggregationRootInterceptor <UserState, Guid> >(),
                                               Substitute.For <ILogger <UserAggregationRoot> >());
            var result = root.AddPhone(number);

            result.Should().NotBeNull();
            result.Should().BeEquivalentTo(DomainError.PhoneError.NumberAlreadyExist);
        }
Beispiel #12
0
        protected override async Task <CommandResult <Guid> > ExecuteCommand(AddUserCommand command, CancellationToken cancellationToken)
        {
            var agg = UserAggregationRoot.CreateFrom(command.Name);

            var isSucceed = false;
            var okId      = Guid.Empty;

            if (agg.IsValid)
            {
                _dbSession.Repository.Add(agg.GetChange());

                await _dbSession.SaveChangesAsync();

                agg.GetEvents().ToImmutableList()
                .ForEach(ev => Publisher.Publish(ev));

                isSucceed = true;
                okId      = agg.GetChange().Identity.Value;
            }

            return(await Task.FromResult(new CommandResult <Guid>(isSucceed, okId, agg.Failures)));
        }
Beispiel #13
0
        public void RemovePhone_Should_ReturnOk()
        {
            var number = _fixture.Create <string>();
            var user   = _fixture.Build <User>()
                         .With(x => x.Phones, new HashSet <Phone>
            {
                new Phone
                {
                    Number = number
                }
            })
                         .Create();


            var root = new UserAggregationRoot(new UserState(user),
                                               Enumerable.Empty <IAggregationRootInterceptor <UserState, Guid> >(),
                                               Substitute.For <ILogger <UserAggregationRoot> >());
            var result = root.RemovePhone(number);

            result.Should().NotBeNull();
            result.Should().BeEquivalentTo(Result.Ok());
        }
Beispiel #14
0
        public void RemoveAddress_Should_ReturnOk()
        {
            var addressId = _fixture.Create <Guid>();

            var user = _fixture.Build <User>()
                       .With(x => x.Addresses, new List <Address>
            {
                new Address
                {
                    Id = addressId
                }
            })
                       .Create();

            var root = new UserAggregationRoot(new UserState(user),
                                               Enumerable.Empty <IAggregationRootInterceptor <UserState, Guid> >(),
                                               Substitute.For <ILogger <UserAggregationRoot> >());

            var result = root.RemoveAddress(addressId);

            result.Should().NotBeNull();
            result.Should().BeEquivalentTo(Result.Ok());
        }
Beispiel #15
0
        protected override CommandResult <Guid> ExecuteCommand(AddUserCommand command)
        {
            var agg = UserAggregationRoot.CreateFrom(
                Name.From(command.Name),
                SocialSecurityId.From(command.Cnpj),
                Email.From(command.CommercialEmail));

            var isSucceed = false;
            var okId      = Guid.Empty;

            if (agg.ValidationResults.IsValid)
            {
                _dbSession.Repository.Add(agg.GetChange());
                _dbSession.SaveChanges();

                agg.GetEvents().ToImmutableList()
                .ForEach(ev => Publisher.Publish(ev));

                isSucceed = true;
                okId      = agg.GetChange().Id.Value;
            }

            return(new CommandResult <Guid>(isSucceed, okId, agg.ValidationResults.Errors.ToImmutableList()));
        }