public void Validate_CandidateIsInvalid_HasError()
        {
            var request = new TeachingEventAddAttendee
            {
                FirstName = null,
            };

            var result = _validator.TestValidate(request);

            result.ShouldHaveValidationErrorFor("Candidate.FirstName");
        }
예제 #2
0
        public void Validate_ConsiderationJourneyStageIdIsNullWhenNotSigningUpToMailingList_HasNoError()
        {
            var request = new TeachingEventAddAttendee()
            {
                SubscribeToMailingList = false, ConsiderationJourneyStageId = null
            };

            var result = _validator.TestValidate(request);

            result.ShouldNotHaveValidationErrorFor(request => request.ConsiderationJourneyStageId);
        }
        public void Validate_DegreeStatusIdIsNullWhenSigningUpToMailingList_HasError()
        {
            var request = new TeachingEventAddAttendee()
            {
                SubscribeToMailingList = true, DegreeStatusId = null
            };

            var result = _validator.TestValidate(request);

            result.ShouldHaveValidationErrorFor(request => request.DegreeStatusId);
        }
        public void Validate_PreferredTeachingSubjectIdIsNullWhenNotSigningUpToMailingList_HasNoError()
        {
            var request = new TeachingEventAddAttendee()
            {
                SubscribeToMailingList = false, PreferredTeachingSubjectId = null
            };

            var result = _validator.TestValidate(request);

            result.ShouldNotHaveValidationErrorFor(request => request.PreferredTeachingSubjectId);
        }
예제 #5
0
        public void Candidate_MapsCorrectly()
        {
            var request = new TeachingEventAddAttendee()
            {
                EventId                     = Guid.NewGuid(),
                CandidateId                 = Guid.NewGuid(),
                QualificationId             = Guid.NewGuid(),
                PreferredTeachingSubjectId  = Guid.NewGuid(),
                AcceptedPolicyId            = Guid.NewGuid(),
                DegreeStatusId              = 1,
                ConsiderationJourneyStageId = 1,
                Email                  = "*****@*****.**",
                FirstName              = "John",
                LastName               = "Doe",
                Telephone              = "1234567",
                AddressPostcode        = "KY11 9YU",
                SubscribeToMailingList = true,
            };

            var candidate = request.Candidate;

            candidate.Id.Should().Equals(request.CandidateId);
            candidate.ConsiderationJourneyStageId.Should().Be(request.ConsiderationJourneyStageId);
            candidate.PreferredTeachingSubjectId.Should().Be(request.PreferredTeachingSubjectId);

            candidate.Email.Should().Be(request.Email);
            candidate.FirstName.Should().Be(request.FirstName);
            candidate.LastName.Should().Be(request.LastName);
            candidate.AddressPostcode.Should().Be(request.AddressPostcode);
            candidate.Telephone.Should().Be(request.Telephone);
            candidate.ChannelId.Should().BeNull();
            candidate.OptOutOfSms.Should().BeFalse();
            candidate.DoNotBulkEmail.Should().BeFalse();
            candidate.DoNotEmail.Should().BeFalse();
            candidate.DoNotBulkPostalMail.Should().BeTrue();
            candidate.DoNotPostalMail.Should().BeTrue();
            candidate.DoNotSendMm.Should().BeFalse();

            candidate.PrivacyPolicy.AcceptedPolicyId.Should().Be((Guid)request.AcceptedPolicyId);
            candidate.PrivacyPolicy.AcceptedAt.Should().BeCloseTo(DateTime.UtcNow);

            candidate.HasEventsSubscription.Should().BeTrue();
            candidate.HasMailingListSubscription.Should().BeTrue();

            candidate.TeachingEventRegistrations.First().EventId.Should().Equals(request.EventId);
            candidate.TeachingEventRegistrations.First().ChannelId.Should().Be((int)TeachingEventRegistration.Channel.Event);
            candidate.TeachingEventRegistrations.First().IsCancelled.Should().BeFalse();
            candidate.TeachingEventRegistrations.First().RegistrationNotificationSeen.Should().BeFalse();

            candidate.Qualifications.First().DegreeStatusId.Should().Be(request.DegreeStatusId);
            candidate.Qualifications.First().TypeId.Should().Be((int)CandidateQualification.DegreeType.Degree);
            candidate.Qualifications.First().Id.Should().Be(request.QualificationId);
        }
        public IActionResult AddAttendee(
            [FromBody, SwaggerRequestBody("Attendee to add to the teaching event.", Required = true)] TeachingEventAddAttendee request)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest(this.ModelState));
            }

            string json = request.Candidate.SerializeChangeTracked();

            _jobClient.Enqueue <UpsertCandidateJob>((x) => x.Run(json, null));

            return(NoContent());
        }
        public void AddAttendee_InvalidRequest_RespondsWithValidationErrors()
        {
            var request = new TeachingEventAddAttendee()
            {
                EventId = Guid.NewGuid(), FirstName = null
            };

            _controller.ModelState.AddModelError("FirstName", "First name must be specified.");

            var response = _controller.AddAttendee(request);

            var badRequest = response.Should().BeOfType <BadRequestObjectResult>().Subject;
            var errors     = badRequest.Value.Should().BeOfType <SerializableError>().Subject;

            errors.Should().ContainKey("FirstName").WhichValue.Should().BeOfType <string[]>().Which.Should().Contain("First name must be specified.");
        }
예제 #8
0
        public IActionResult AddAttendee(
            [FromBody, SwaggerRequestBody("Attendee to add to the teaching event.", Required = true)] TeachingEventAddAttendee request)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest(this.ModelState));
            }

            // This is the only way we can mock/freeze the current date/time
            // in contract tests (there's no other way to inject it into this class).
            request.DateTimeProvider = _dateTime;
            string json = request.Candidate.SerializeChangeTracked();

            _jobClient.Enqueue <UpsertCandidateJob>((x) => x.Run(json, null));

            return(NoContent());
        }
        public void AddAttendee_ValidRequest_EnqueuesJobRespondsWithNoContent()
        {
            var teachingEvent = new TeachingEvent()
            {
                Id = Guid.NewGuid()
            };
            var request = new TeachingEventAddAttendee()
            {
                EventId = (Guid)teachingEvent.Id, Email = "*****@*****.**", FirstName = "John", LastName = "Doe"
            };

            var response = _controller.AddAttendee(request);

            response.Should().BeOfType <NoContentResult>();
            _mockJobClient.Verify(x => x.Create(
                                      It.Is <Job>(job => job.Type == typeof(UpsertCandidateJob) && job.Method.Name == "Run" &&
                                                  IsMatch(request.Candidate, (string)job.Args[0])),
                                      It.IsAny <EnqueuedState>()));
        }