Ejemplo n.º 1
0
        public void PersonAggregate_Create_HasEmptyAddress()
        {
            var person = PersonAggregate.Create("John", "Smith");

            person.Addresses.Should().NotBeNull();
            person.Addresses.Should().BeEmpty();
        }
Ejemplo n.º 2
0
        public void Address_Create_ValidValues_IsValid()
        {
            var person  = PersonAggregate.Create("John", "Smith");
            var address = Address.Create(person, "Street", "City", "Country", "ZipCode");

            address.IsValid.Should().BeTrue();
        }
Ejemplo n.º 3
0
        static void Main(string[] args)
        {
            PersonAggregate aggregate = new PersonAggregate();

            aggregate.Add(new Person()
            {
                FirstName = "Robert", Height = 168, LastName = "Kanasz"
            });
            aggregate.Add(new Person()
            {
                FirstName = "John", Height = 181, LastName = "Doe"
            });
            aggregate.Add(new Person()
            {
                FirstName = "Jane", Height = 158, LastName = "Doe"
            });

            IPersonIterator iterator = aggregate.GetIterator();

            iterator.Reset();

            while (iterator.MoveNext())
            {
                Console.WriteLine(iterator.Current.FirstName + " " + iterator.Current.LastName);
            }
        }
        public void PersonAggregate_Delete_WithAddresses_WillCascade()
        {
            /// create
            using (DatabaseContext databaseContext = DatabaseTestFactory.GetSession())
            {
                var person = PersonAggregate.Create("John", "Smith");
                person.AddAddress("Street", "City", "Country", "ZipCode");

                databaseContext.Set <PersonAggregate>().Add(person);
                databaseContext.SaveChanges();
            }

            /// delete
            using (DatabaseContext databaseContext = DatabaseTestFactory.GetSession())
            {
                var person = databaseContext.Set <PersonAggregate>().First();

                databaseContext.Set <PersonAggregate>().Remove(person);
                databaseContext.SaveChanges();
            }

            /// verify
            using (DatabaseContext databaseContext = DatabaseTestFactory.GetSession())
            {
                databaseContext.Set <PersonAggregate>().Count().Should().Be(0);
                databaseContext.Set <Address>().Count().Should().Be(0);
            }
        }
Ejemplo n.º 5
0
        public static PersonAggregate Person()
        {
            var person = PersonAggregate.Create("John", "Smith");

            person.AddAddress("Main Street", "New York", "USA", "11100");
            return(person);
        }
Ejemplo n.º 6
0
        public void PersonController_Get_ReturnPersons()
        {
            using (DatabaseContext databaseContext = DatabaseTestFactory.GetSession())
            {
                var person01 = PersonAggregate.Create("John", "Smith");
                var person02 = PersonAggregate.Create("Mary", "Jane");

                databaseContext.Set <PersonAggregate>().AddRange(new[] { person01, person02 });
                databaseContext.SaveChanges();
            }

            using (WebApp.Start <Startup>(url: iisAddress))
            {
                HttpClient client = new HttpClient();
                client.DefaultRequestHeaders.Accept.Add(
                    new MediaTypeWithQualityHeaderValue("application/json"));
                var response = client.GetAsync(String.Format("{0}PersonRead", iisAddress)).Result;
                response.StatusCode.Should().Be(HttpStatusCode.OK);
                var result = response.Content.ReadAsStringAsync().Result;

                Debug.WriteLine(response.Content.ReadAsStringAsync().Result);

                var persons = JsonConvert.DeserializeObject <PersonMessage[]>(result);

                persons.Should()
                .ContainSingle(x => x.FirstName == "John" && x.LastName == "Smith");
                persons.Should()
                .ContainSingle(x => x.FirstName == "Mary" && x.LastName == "Jane");
            }
        }
Ejemplo n.º 7
0
        public void PersonAggregate_Add_InvalidAddress_Fail()
        {
            var person = PersonAggregate.Create("John", "Smith");

            person.AddAddress(string.Empty, string.Empty, string.Empty, string.Empty);

            person.Addresses.Should().BeEmpty();
        }
Ejemplo n.º 8
0
        public void TestInit()
        {
            _bdContext       = BdContextBuilder.CreateInMemoryContext(Guid.NewGuid().ToString());
            _aliveRepository = new AliveRepository(_bdContext);
            _deadRepository  = new DeadRepository(_bdContext);

            _personAggregate = new PersonAggregate(_aliveRepository, _deadRepository, _bdContext);
        }
Ejemplo n.º 9
0
        public Task <Unit> Handle(CreatePersonCommand request, CancellationToken cancellationToken)
        {
            var aggregate = new PersonAggregate(request);

            _personRepository.Save(aggregate);

            return(Unit.Task);
        }
Ejemplo n.º 10
0
        public static Person ToPerson(this PersonAggregate aggregate)
        {
            var dto = aggregate.ConvertTo <Person>();

            dto.Id          = aggregate.Id;
            dto.DisplayName = aggregate.DisplayName?.DisplayName;
            return(dto);
        }
Ejemplo n.º 11
0
        private void Commit(PersonAggregate aggregate)
        {
            var changes = _repository.Save(aggregate);

            foreach (var change in changes)
            {
                _publisher.Publish(change);
            }
        }
Ejemplo n.º 12
0
        public void Handle(RegisterPerson c)
        {
            var aggregate = new PersonAggregate {
                AggregateIdentifier = c.AggregateIdentifier
            };

            aggregate.RegisterPerson(c.FirstName, c.LastName, DateTimeOffset.UtcNow);
            Commit(aggregate);
        }
Ejemplo n.º 13
0
        public void PersonAggregate_Add_ValidAddress_WillContain()
        {
            var person = PersonAggregate.Create("John", "Smith");

            person.AddAddress("Street", "City", "Country", "ZipCode");

            person.Addresses.Should().NotBeEmpty();
            person.Addresses.Count.Should().Be(1);
        }
Ejemplo n.º 14
0
        public static PersonAggregate Create(string id, string name)
        {
            var agg = new PersonAggregate(new PersonAggregateState());

            agg.Create(new RegisterPerson()
            {
                Id = id, Name = name
            });
            return(agg);
        }
Ejemplo n.º 15
0
        public void Constructor_GivenLastName_SetsLastName()
        {
            // Arrange

            // Act
            var sut = new PersonAggregate(_validFirstName, _validLastName);

            // Assert
            Assert.Same(_validLastName, sut.LastName);
        }
Ejemplo n.º 16
0
        public void NewPersonHasNonDefaultId()
        {
            // Arrange

            // Act
            var sut = new PersonAggregate(_validFirstName, _validLastName).Id;

            // Assert
            Assert.NotEqual(default(Guid), sut);
        }
Ejemplo n.º 17
0
        public void Person_IsAssignableFromAggregateRootBase()
        {
            // Arrange

            // Act
            var sut = new PersonAggregate(_validFirstName, _validLastName);

            // Assert
            Assert.IsAssignableFrom <AggregateRootBase>(sut);
        }
Ejemplo n.º 18
0
        public void Constructor_GivenPaddedFirstName_TrimsName(string paddedName)
        {
            // Arrange

            // Act
            var sut = new PersonAggregate(paddedName, _validLastName).FirstName;

            // Assert
            Assert.Equal("Bobby Sue", sut);
        }
Ejemplo n.º 19
0
        public void Constructor_GivenPaddedLastName_TrimsName(string paddedName)
        {
            // Arrange

            // Act
            var sut = new PersonAggregate(_validFirstName, paddedName).LastName;

            // Assert
            Assert.Equal("Giffords", sut);
        }
Ejemplo n.º 20
0
        protected virtual void Add(Person person)
        {
            var aggregate        = new PersonAggregate(person);
            var nameAggregate    = new NameAggregate(person.Name, person.Id);
            var addressAggregate = new AddressAggregate(person.Address, person.Id);

            context.Set <PersonAggregate>().Add(aggregate);
            context.Set <NameAggregate>().Add(nameAggregate);
            context.Set <AddressAggregate>().Add(addressAggregate);
        }
Ejemplo n.º 21
0
        public Task <Unit> Handle(UpdatePersonCommand request, CancellationToken cancellationToken)
        {
            var user      = _personRepository.GetById(request.PersonId);
            var aggregate = new PersonAggregate(user);

            aggregate.UpdatePerson(request);

            _personRepository.Update(aggregate);

            return(Unit.Task);
        }
Ejemplo n.º 22
0
 public void Initialize()
 {
     this.logger            = new Mock <ILogger>();
     this.identifierFactory = new Mock <IIdentifierFactory>();
     this.identifierFactory.Setup(f => f.Create(It.IsAny <IIdentifiableEntity>()))
     .Returns("apersonid".ToIdentifier);
     this.uniqueEmailService = new Mock <IEmailService>();
     this.uniqueEmailService.Setup(ues => ues.EnsureEmailIsUnique(It.IsAny <string>(), It.IsAny <string>()))
     .Returns(true);
     this.aggregate = new PersonAggregate(this.logger.Object, this.identifierFactory.Object,
                                          this.uniqueEmailService.Object);
 }
Ejemplo n.º 23
0
        public void TestTransaction()
        {
            var bdContext       = BdContextBuilder.CreateSqliteContext(Guid.NewGuid().ToString());
            var aliveRepository = new AliveRepository(bdContext);
            var deadRepository  = new DeadRepository(bdContext);

            var personAggregate = new PersonAggregate(aliveRepository, deadRepository, bdContext);

            personAggregate.Kill(12345);

            bdContext.Alive.Count(a => a.Document == 12345).Should().Be(0);
            bdContext.Dead.Count().Should().Be(1);
        }
Ejemplo n.º 24
0
        public Person Create(ICurrentCaller caller, string firstName, string lastName)
        {
            caller.GuardAgainstNull(nameof(caller));

            var person = new PersonAggregate(this.logger, this.idFactory, this.emailService);

            person.SetName(new PersonName(firstName, lastName));

            var created = this.storage.Save(person);

            this.logger.LogInformation("Person {Id} was created by {Caller}", created.Id, caller.Id);

            return(created.ToPerson());
        }
Ejemplo n.º 25
0
        public HttpResponseMessage Post(PersonMessage person)
        {
            using (DatabaseContext databaseContext = new DatabaseContext())
            {
                var personAggregate = PersonAggregate.Create(
                    person.FirstName, person.LastName);
                databaseContext.Set <PersonAggregate>().Add(personAggregate);

                databaseContext.SaveChanges();

                var response = Request.CreateResponse(HttpStatusCode.Created, personAggregate.Id);
                return(response);
            }
        }
Ejemplo n.º 26
0
        public static PersonAggregate CreateWithUncommitedUpdates(string id, int nrOfUpdates)
        {
            var p = new PersonAggregate(new PersonAggregateState());

            p.Create(new RegisterPerson()
            {
                Id = id, Name = "0"
            });
            for (int i = 0; i < nrOfUpdates; i++)
            {
                p.Rename(new RenamePerson()
                {
                    Id = id, Name = $"Name {i + 1}"
                });
            }
            return(p);
        }
Ejemplo n.º 27
0
        public void WhenCreate_ThenReturnsPerson()
        {
            var entity = new PersonAggregate(this.logger.Object, this.idFactory.Object, this.uniqueEmailService.Object);

            this.storage.Setup(s =>
                               s.Save(It.IsAny <PersonAggregate>()))
            .Returns(entity);

            var result = this.personsApplication.Create(this.caller.Object, "afirstname", "alastname");

            result.Id.Should().Be("anid");
            this.storage.Verify(s =>
                                s.Save(It.Is <PersonAggregate>(e =>
                                                               e.Name == new PersonName("afirstname", "alastname") &&
                                                               e.DisplayName == new PersonDisplayName("afirstname")
                                                               )));
        }
Ejemplo n.º 28
0
        public Task <Unit> Handle(UnfollowPersonCommand request, CancellationToken cancellationToken)
        {
            var user     = _personRepository.GetById(request.PersonId);
            var unfollow = _personRepository.GetById(request.UnfollowId);

            if (!user.Following.Contains(unfollow))
            {
                throw new Exception("Esse não está sendo seguido");
            }
            ;
            var aggregate = new PersonAggregate(user);

            aggregate.Unfollow(unfollow);

            _personRepository.Update(aggregate);

            return(Unit.Task);
        }
Ejemplo n.º 29
0
        public Task <Unit> Handle(FollowPersonCommand request, CancellationToken cancellationToken)
        {
            var person = _personRepository.GetById(request.PersonId);
            var follow = _personRepository.GetById(request.FollowId);

            if (person.Following.Contains(follow))
            {
                throw new Exception("Esse usuario já esta sendo seguido");
            }
            ;
            var aggregate = new PersonAggregate(person);

            aggregate.Follow(follow);

            _personRepository.Update(aggregate);

            return(Unit.Task);
        }
Ejemplo n.º 30
0
        public void MustThrowExceptionWhenUserIdIsNotFromUserPost()
        {
            //Given
            var cmd       = Fixture.Create <DeletePost>();
            var person    = Fixture.Create <Person>();
            var aggregate = new PersonAggregate(person);
            var post      = Fixture.Create <Post>();

            cmd.Id      = post.PostId;
            post.Person = person;
            person.Posts.Clear();;
            aggregate.AddPost(post);

            _personRepository.GetAggregateByUserId(_userService.UserId).Returns(aggregate);

            //When and //Then
            Assert.ThrowsAsync <Exception>(() => _sut.Handle(cmd, CancellationToken.None));
        }