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("LocationName", ""); return View(model).WithError("Debe seleccionar una Localidad."); } 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() { 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>"); }
// 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 async Task<ActionResult> New(NewJobOpportunityViewModel model, bool captchaValid) { if (!ModelState.IsValid) { LoadLocations(model); ViewBag.ErrorMessage = "Han ocurrido errores de validación que no permiten continuar el proceso"; return View(model); } 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) { @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) { 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."); } if (!string.IsNullOrWhiteSpace(model.CompanyLogoUrl) && !UrlHelperExtensions.IsImageAvailable(model.CompanyLogoUrl)) { return View(model).WithError("La url del logo debe ser a una imagen en formato png o jpg"); } var jobOpportunity = model.ToEntity(); var userId = User.Identity.GetUserId(); _jobOpportunityService.CreateNewJobOpportunity(jobOpportunity, userId); await _twitterService.PostNewJobOpportunity(jobOpportunity, Url).ConfigureAwait(false); return RedirectToAction(nameof(Detail), new { id = UrlHelperExtensions.SeoUrl(jobOpportunity.Id, jobOpportunity.Title) }); }
private void LoadLocations(NewJobOpportunityViewModel viewModel) { var locations = _locationService.GetAllLocations(); viewModel.Locations = locations.ToSelectList(x => x.Id, x => x.Name); }
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 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 }; _jobOpportunityService.WhenForAnyArgs(x => x.CreateNewJobOpportunity(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))); 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); 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); }
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); 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); }
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); }