public void AddConsultant_LastMissionNeedToBeFalse() { // Arrange var context = InitializeContext(); var consultant = fixture.Build <Consultant>().With(x => x.Id, 21).With(x => x.Experience, Experience.Medior).Create(); var mission = fixture.Build <Mission>().With(x => x.Id, 11).With(x => x.ExperienceRequired, Experience.Junior).With(x => x.MaximumRate, 1000).Create(); var addConsultant = new AddConsultantRequest { ConsultantId = 21, MissionId = 11, JobName = "Java Dev", Rate = 400.00 }; var consultantMissions = new List <ConsultantMission> { new ConsultantMission { IsActive = true }, new ConsultantMission { IsActive = false } }; consultant.ConsultantMissions = consultantMissions; mission.ConsultantMissions = consultantMissions; context.Consultants.Add(consultant); context.Missions.Add(mission); context.SaveChanges(); InjectClassFor(context); // Act var result = ClassUnderTest.AddConsultant(addConsultant); // Assert result.Consultant.ConsultantMissions.Where(x => x.IsActive).Count().Should().Be(1); }
public void AddConsultant_ExperienceNotValidExcpetion() { // Arrange var context = InitializeContext(); var consultant = fixture.Build <Consultant>().With(x => x.Id, 10).With(x => x.Experience, Experience.Medior).Create(); var mission = fixture.Build <Mission>().With(x => x.Id, 1).With(x => x.ExperienceRequired, Experience.Senior).With(x => x.MaximumRate, 1000).Create(); var addConsultant = new AddConsultantRequest { ConsultantId = 10, MissionId = 1, JobName = "Java Dev", Rate = 400.00 }; context.Consultants.Add(consultant); context.Missions.Add(mission); context.SaveChanges(); InjectClassFor(context); // Act Action action = () => ClassUnderTest.AddConsultant(addConsultant); // Assert action.Should().ThrowExactly <NotValidException>().WithMessage(ErrorVariable.ExperienceMinimumRequired); }
public ActionResult AddConsultant([FromRoute] int missionId, [FromBody] AddConsultantRequest consultant) { consultant.MissionId = missionId; var consultantMissionModel = _missionService.AddConsultant(consultant); return(Ok(consultantMissionModel)); }
public void AddConsultant_JobNameNotValidExcpetion() { // Arrange var addConsultant = new AddConsultantRequest(); // Act Action action = () => ClassUnderTest.AddConsultant(addConsultant); // Assert action.Should().ThrowExactly <NotValidException>().WithMessage(ErrorVariable.JobnameNotExist); }
public void AddConsultant_RateNotValidExcpetion() { // Arrange var addConsultant = new AddConsultantRequest { ConsultantId = 1, MissionId = 1, JobName = "Dev Lead" }; // Act Action action = () => ClassUnderTest.AddConsultant(addConsultant); // Assert action.Should().ThrowExactly <NotValidException>().WithMessage(ErrorVariable.RateIsNotCompleted); }
public void AddConsultant_MissionNotValidExcpetion() { // Arrange var context = InitializeContext(); var consultant = fixture.Build <Consultant>().With(x => x.Id, 1).Create(); var addConsultant = new AddConsultantRequest { ConsultantId = 1, MissionId = 20, JobName = "Java Dev", Rate = 400.00 }; context.Consultants.Add(consultant); context.SaveChanges(); InjectClassFor(context); // Act Action action = () => ClassUnderTest.AddConsultant(addConsultant); // Assert action.Should().ThrowExactly <NotValidException>().WithMessage(ErrorVariable.MissioNotExist); }
public void AddConsultant_IsValid() { // Arrange var context = InitializeContext(); var consultant = fixture.Build <Consultant>().With(x => x.Id, 40).With(x => x.Experience, Experience.Medior).Create(); var mission = fixture.Build <Mission>().With(x => x.Id, 40).With(x => x.ExperienceRequired, Experience.Junior).With(x => x.MaximumRate, 1000).Create(); var consultantMissions = new List <ConsultantMission> { new ConsultantMission { IsActive = true }, new ConsultantMission { IsActive = false } }; var addConsultant = new AddConsultantRequest { ConsultantId = 40, MissionId = 40, JobName = "Dev Lead", Rate = 400.00 }; consultant.ConsultantMissions = consultantMissions; mission.ConsultantMissions = consultantMissions; context.Consultants.Add(consultant); context.Missions.Add(mission); context.SaveChanges(); InjectClassFor(context); // Act var result = ClassUnderTest.AddConsultant(addConsultant); // Assert result.ConsultantId.Should().Be(40); result.MissionId.Should().Be(40); result.IsActive.Should().Be(true); result.Rate.Should().Be(400.00); }
public ConsultantMission AddConsultant(AddConsultantRequest consultant) { if (consultant.JobName == null) { throw new NotValidException(ErrorVariable.JobnameNotExist); } if (consultant.Rate == default) { throw new NotValidException(ErrorVariable.RateIsNotCompleted); } var mission = _consultingContext.Missions.FirstOrDefault(e => e.Id == consultant.MissionId); if (mission == null) { throw new NotValidException(ErrorVariable.MissioNotExist); } var consult = _consultingContext.Consultants.FirstOrDefault(e => e.Id == consultant.ConsultantId); if (consult == null) { throw new NotValidException(ErrorVariable.ConsultantNotExist); } if (mission.ExperienceRequired > consult.Experience) { throw new NotValidException(ErrorVariable.ExperienceMinimumRequired); } var commissions = new Dictionary <Experience, double> { [Experience.Junior] = 1.15, [Experience.Medior] = 1.10, [Experience.Senior] = 1.05 }; if (mission.MaximumRate < (consultant.Rate * commissions.GetValueOrDefault(consult.Experience))) { throw new NotValidException(ErrorVariable.RateMaximumRequired); } var lastMissionConsult = _consultingContext.ConsultantMissions .Where(e => e.ConsultantId == consultant.ConsultantId) .SingleOrDefault(e => e.IsActive); if (lastMissionConsult != null) { lastMissionConsult.IsActive = false; } var newConsultantMission = new ConsultantMission { ConsultantId = consultant.ConsultantId, MissionId = consultant.MissionId, IsActive = true, JobName = consultant.JobName, Rate = consultant.Rate }; _consultingContext.ConsultantMissions.Add(newConsultantMission); _consultingContext.SaveChanges(); return(newConsultantMission); }