Example #1
0
        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)
            }));
        }
Example #2
0
        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"));
        }
Example #8
0
        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);
        }