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; }
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)));
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(); }
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); }