public async Task <ActionResult> New(NewJobOpportunityViewModel model, bool captchaValid) { if (!ModelState.IsValid) { return(View(model) .WithError("Han ocurrido errores de validación que no permiten continuar el proceso")); } if (string.IsNullOrWhiteSpace(model.LocationPlaceId)) { ModelState.AddModelError(nameof(model.LocationName), ""); return(View(model).WithError("Debe seleccionar una Localidad.")); } var jobOpportunity = model.ToEntity(); var userId = User.Identity.GetUserId(); _jobOpportunityService.CreateNewJobOpportunity(jobOpportunity, userId); await _twitterService.PostNewJobOpportunity(jobOpportunity).ConfigureAwait(false); return(RedirectToAction(nameof(Detail), new { id = UrlHelperExtensions.SeoUrl(jobOpportunity.Id, jobOpportunity.Title) })); }
public ActionResult New() { var viewModel = new NewJobOpportunityViewModel(); return(View(viewModel) .WithInfo("Prueba nuestro nuevo proceso guiado de creación de posiciones haciendo <b><a href='" + Url.Action("Wizard") + "'>click aquí</a></b>")); }
public async Task New_POST_ValidModel_CreatesJob_PostsTweet_RedirectsToDetail() { // Arrange var model = new NewJobOpportunityViewModel { Title = "myTitle", Category = JobCategory.MobileDevelopment, Description = "My description", CompanyName = "Company", CompanyUrl = "http://example.com", CompanyLogoUrl = "http://example.com/logo.png", CompanyEmail = "*****@*****.**", IsRemote = true, LocationName = "My location", LocationPlaceId = "123", LocationLatitude = "18.3939393", LocationLongitude = "-69.22222", JobType = JobType.FullTime }; _sut.ControllerContext = GenerateControllerContext(_sut); _jobOpportunityService.WhenForAnyArgs(x => x.CreateNewJobOpportunity(null, null)) .Do(x => { x.Arg <JobOpportunity>().Id = 1; }); // Act var result = (RedirectToRouteResult)await _sut.New(model, false); // Assert _jobOpportunityService.Received(1).CreateNewJobOpportunity( Arg.Do <JobOpportunity>(entity => VerifyGeneratedJobOpportunityEntity(model, entity)), null); await _twitterService.Received(1).PostNewJobOpportunity( Arg.Do <JobOpportunity>(entity => VerifyGeneratedJobOpportunityEntity(model, entity))); result.RouteValues["action"].Should().Be(nameof(_sut.Detail)); result.RouteValues["id"].Should().Be(UrlHelperExtensions.SeoUrl(1, "myTitle")); }
public async Task New_POST_LocationPlaceIdNullOrWhitespace_ReturnsViewWithError( [Values(null, "", " ")] string placeId ) { // Arrange var model = new NewJobOpportunityViewModel { LocationPlaceId = placeId }; // Act var result = (AlertDecoratorResult)await _sut.New(model, false); // Assert _jobOpportunityService.DidNotReceiveWithAnyArgs().CreateNewJobOpportunity(null, string.Empty); await _twitterService.DidNotReceiveWithAnyArgs().PostNewJobOpportunity(null); _sut.ModelState.IsValid.Should().BeFalse(); _sut.ModelState.Should().ContainKey(nameof(model.LocationName)); result.AlertClass.Should().Be("alert-danger"); result.Message.Should().Be("Debe seleccionar una Localidad."); var innerResult = (ViewResult)result.InnerResult; innerResult.ViewName.Should().BeEmpty(); innerResult.Model.Should().BeSameAs(model); }
// GET: /JobOpportunity/New public ActionResult New() { var viewModel = new NewJobOpportunityViewModel(); viewModel.Locations = _locationRepository.GetAllLocations(); return(View("New", viewModel)); }
// GET: /JobOpportunity/New public ActionResult New() { var viewModel = new NewJobOpportunityViewModel(); LoadLocations(viewModel); return(View(viewModel)); }
public ActionResult New(NewJobOpportunityViewModel model) { if (!ModelState.IsValid) { LoadLocations(model); ViewBag.ErrorMessage = "Han ocurrido errores de validación que no permiten continuar el proceso"; return(View(model)); } _jobOpportunityService.CreateNewJobOpportunity(model.ToEntity()); return(RedirectToAction("Index")); }
public ActionResult New(NewJobOpportunityViewModel job) { if (!ModelState.IsValid) { @ViewBag.ErrorMessage = "Han ocurrido errores de validación que no permiten continuar el proceso"; return(View(job)); } _databaseContext.JobOpportunities.Add(job.ToEntity()); _databaseContext.SaveChanges(); return(RedirectToAction("Index")); }
public async Task <ActionResult> New(NewJobOpportunityViewModel model, bool captchaValid) { if (!ModelState.IsValid) { LoadLocations(model); return(View(model).WithError("Han ocurrido errores de validación que no permiten continuar el proceso")); } var jobOpportunity = model.ToEntity(); _jobOpportunityService.CreateNewJobOpportunity(jobOpportunity); await _twitterService.PostNewJobOpportunity(jobOpportunity); return(RedirectToAction("detail", new { id = UrlHelperExtensions.SeoUrl(jobOpportunity.Id, jobOpportunity.Title) })); }
public ActionResult New(NewJobOpportunityViewModel job) { if (!ModelState.IsValid) { job.Locations = _locationRepository.GetAllLocations(); ViewBag.ErrorMessage = "Han ocurrido errores de validación que no permiten continuar el proceso"; return(View(job)); } _locationRepository.Add(new Location { Name = "Las Guaranas" }); _jobRepository.Add(job.ToEntity()); _uow.SaveChanges(); return(RedirectToAction("Index")); }
private static void VerifyGeneratedJobOpportunityEntity( NewJobOpportunityViewModel model, JobOpportunity entity) { entity.Title.Should().Be(model.Title); entity.Category.Should().Be(model.Category); entity.Description.Should().Be(model.Description); entity.CompanyName.Should().Be(model.CompanyName); entity.CompanyUrl.Should().Be(model.CompanyUrl); entity.CompanyLogoUrl.Should().Be(model.CompanyLogoUrl); entity.CompanyEmail.Should().Be(model.CompanyEmail); entity.PublishedDate.Should().BeCloseTo(DateTime.Now); entity.IsRemote.Should().Be(model.IsRemote); entity.JobType.Should().Be(model.JobType); entity.JobOpportunityLocation.Should().Match <JobOpportunityLocation>(x => x.Latitude == model.LocationLatitude && x.Longitude == model.LocationLongitude && x.Name == model.LocationName && x.PlaceId == model.LocationPlaceId ); }
public void New_GET_ReturnsView_WithEmptyModel() { // Arrange var model = new NewJobOpportunityViewModel(); _sut.Url = Substitute.For <UrlHelper>(); _sut.Url.Action("Wizard").Returns("/jobs/wizard"); // Act var result = (AlertDecoratorResult)_sut.New(); // Assert result.AlertClass.Should().Be("alert-info"); result.Message.Should().Be( "Prueba nuestro nuevo proceso guiado de creación de posiciones haciendo " + "<b><a href='/jobs/wizard'>click aquí</a></b>"); var viewResult = (ViewResult)result.InnerResult; viewResult.ViewName.Should().BeEmpty(); ((NewJobOpportunityViewModel)viewResult.Model).ShouldBeEquivalentTo(model); }
public async Task New_POST_ModelStateInvalid_ReturnsViewWithError() { // Arrange var model = new NewJobOpportunityViewModel(); _sut.ModelState.AddModelError("", ""); // Act var result = (AlertDecoratorResult)await _sut.New(model, false); // Assert _jobOpportunityService.DidNotReceiveWithAnyArgs().CreateNewJobOpportunity(null, string.Empty); await _twitterService.DidNotReceiveWithAnyArgs().PostNewJobOpportunity(null); _sut.ModelState.IsValid.Should().BeFalse(); result.AlertClass.Should().Be("alert-danger"); result.Message.Should().Be("Han ocurrido errores de validación que no permiten continuar el proceso"); var innerResult = (ViewResult)result.InnerResult; innerResult.ViewName.Should().BeEmpty(); innerResult.Model.Should().BeSameAs(model); }
private void LoadLocations(NewJobOpportunityViewModel viewModel) { var locations = _locationService.GetAllLocations(); viewModel.Locations = locations.ToSelectList(x => x.Id, x => x.Name); }