public void user_project_command_failed()
        {
            //given
            var fixture = new Fixture().Customize(new AutoNSubstituteCustomization {
                ConfigureMembers = true
            });

            fixture.Customizations.Add(new RandomNumericSequenceGenerator(long.MinValue, -1));
            fixture.Register <Money>(() => Money.From(fixture.Create <Decimal>()));

            fixture.Register <EntityId>(() => EntityId.Empty());
            fixture.Register <ProjectName>(() => ProjectName.Empty());
            fixture.Register <ProjectCode>(() => ProjectCode.Empty());
            fixture.Register <DateAndTime>(() => DateAndTime.Empty());
            fixture.Register <Money>(() => fixture.Create <Money>());

            var command = new AddProjectCommand();

            var mediator  = fixture.Create <IMediator>();
            var logger    = fixture.Create <ILogger <AddProjectCommandHandler> >();
            var projectDb = fixture.Create <IDbSession <IProjectRepository> >();
            var userDb    = fixture.Create <IDbSession <IUserRepository> >();

            // when
            var handler = new AddProjectCommandHandler(logger, mediator, projectDb, userDb);

            var result = handler.Execute(command);

            // then
            Assert.True(!result.IsSucceed && result.Violations.Count == 4);
        }
        public void project_add_command_succed()
        {
            var fixture = new Fixture().Customize(new AutoNSubstituteCustomization {
                ConfigureMembers = true
            });

            fixture.Register <EntityId>(() => EntityId.From(fixture.Create <Guid>()));
            fixture.Register <ProjectName>(() => ProjectName.From(fixture.Create <string>()));
            fixture.Register <ProjectCode>(() => ProjectCode.From(fixture.Create <string>()));
            fixture.Register <DateAndTime>(() => DateAndTime.From(fixture.Create <DateTime>()));
            fixture.Register <ProjectStatus>(() => ProjectStatus.Default());
            fixture.Register <ServiceOrderNumber>(() => ServiceOrderNumber.Empty());
            fixture.Register <Email>(() => Email.From(string.Format($"{fixture.Create<string>()}@teste.com")));
            fixture.Register <Project>(() => Project.NewRequest(fixture.Create <EntityId>(),
                                                                fixture.Create <ProjectName>(), fixture.Create <ProjectCode>(),
                                                                fixture.Create <DateAndTime>(), fixture.Create <Money>(), fixture.Create <EntityId>()));
            fixture.Register <User>(() => User.From(fixture.Create <EntityId>(),
                                                    fixture.Create <Name>(), fixture.Create <SocialSecurityId>(),
                                                    fixture.Create <Email>(), fixture.Create <Version>()));

            var finalProject = fixture.Create <Project>();
            var finalClient  = fixture.Create <User>();

            var command = fixture.Build <AddProjectCommand>()
                          .With(project => project.Name, finalProject.Name.Value)
                          .With(project => project.Code, finalProject.Code.Value)
                          .With(project => project.Budget, finalProject.Budget.Value)
                          .With(project => project.ClientId, finalProject.ClientId.Value)
                          .With(project => project.StartDate, finalProject.StartDate.Value)
                          .Create();

            var mediator  = fixture.Create <IMediator>();
            var logger    = fixture.Create <ILogger <AddProjectCommandHandler> >();
            var projectDb = fixture.Create <IDbSession <IProjectRepository> >();
            var userDb    = fixture.Create <IDbSession <IUserRepository> >();
            var handler   = new AddProjectCommandHandler(logger, mediator, projectDb, userDb);

            var result = handler.Execute(command);

            userDb.Received().Repository.Get(finalProject.ClientId).Returns(finalClient);
            projectDb.Received().Repository.Add(finalProject);
            projectDb.Received().SaveChanges();
            mediator.Received(1).Publish(Arg.Any <ProjectAddedEvent>());

            Assert.True(result.IsSucceed);
        }