コード例 #1
0
        public ProjectValidator()
        {
            RuleFor(project => project.Id).SetValidator(new EntityIdValidator());
            RuleFor(project => project.Name).SetValidator(new ProjectNameValidator());
            RuleFor(project => project.StartDate).SetValidator(new DateAndTimeValidator());
            RuleFor(project => project.ClientId).SetValidator(new EntityIdValidator());

            RuleFor(project => project.Code).SetValidator(new ProjectCodeValidator())
            .DependentRules(() =>
            {
                RuleFor(current => current.Code).Custom((code, context) =>
                {
                    if (context.ParentContext.RootContextData.ContainsKey("project"))
                    {
                        var changedProject = context.ParentContext.RootContextData["project"] as Project;

                        if (code.Equals(changedProject?.Code))
                        {
                            context.AddFailure("O código do novo projeto não pode ser igual ao atual.");
                        }
                    }
                });
            });

            RuleFor(project => project.Budget).SetValidator(new MoneyValidator());
            RuleFor(project => project.Status).SetValidator(new ProjectStatusValidator())
            .When(status => !status.Equals(ProjectStatus.Default()));

            RuleFor(project => project.Owner).SetValidator(new EmailValidator())
            .When(project => !project.Owner.Equals(Email.Empty()));

            RuleFor(project => project.OrderNumber).SetValidator(new ServiceOrderNumberValidator())
            .When(order => !order.OrderNumber.Equals(ServiceOrderNumber.Empty()));
        }
 public static Project.ProjectDetail ToProjectDetail(this UpdateProjectCommand command)
 => new Project.ProjectDetail(
     ProjectName.From(command.Name),
     Money.From(command.Budget),
     Email.From(command.Owner),
     ProjectStatus.From(command.Status),
     ServiceOrderNumber.From(command.OrderNumber)
     );
 private ProjectDetailUpdatedEvent(EntityId id, ProjectName name, Email owner, ProjectStatus status, Money budget, ServiceOrderNumber orderNumber, Version version)
     : base(DateTime.Now, version)
 {
     Id          = id;
     Name        = name;
     Owner       = owner;
     Status      = status;
     OrderNumber = orderNumber;
     Budget      = budget;
 }
コード例 #4
0
 public static Project ToProject(this ProjectState state)
 => Project.From(
     EntityId.From(state.Id),
     ProjectName.From(state.Name),
     ProjectCode.From(state.Code),
     DateAndTime.From(state.StartDate),
     Money.From(state.Budget),
     EntityId.From(state.ClientId),
     Email.From(state.Owner),
     ProjectStatus.From(state.Status),
     ServiceOrderNumber.From(state.OrderNumber),
     Version.From(BitConverter.ToInt32(state.RowVersion)));
コード例 #5
0
 private ProjectAddedEvent(EntityId id, ProjectName name, ProjectCode code, DateAndTime startDate, Money budget, EntityId clientId, Version version)
     : base(DateTime.Now, version)
 {
     Id          = id;
     Code        = code;
     Name        = name;
     Budget      = budget;
     StartDate   = startDate;
     ClientId    = clientId;
     Owner       = Email.Empty();
     Status      = ProjectStatus.Default();
     OrderNumber = ServiceOrderNumber.Empty();
 }
コード例 #6
0
        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);
        }