예제 #1
0
        private IHttpActionResult CreateDonorForAuthenticatedUser(string authToken, CreateDonorDTO dto)
        {
            try
            {
                var donor = _donorService.GetContactDonorForAuthenticatedUser(authToken);
                donor = _donorService.CreateOrUpdateContactDonor(donor, string.Empty, string.Empty, string.Empty, string.Empty, dto.stripe_token_id, DateTime.Now);

                var response = new DonorDTO
                {
                    Id             = donor.DonorId,
                    ProcessorId    = donor.ProcessorId,
                    RegisteredUser = true,
                    Email          = donor.Email
                };

                return(Ok(response));
            }
            catch (PaymentProcessorException e)
            {
                return(e.GetStripeResult());
            }
            catch (Exception exception)
            {
                var apiError = new ApiErrorDto("Donor Post Failed", exception);
                throw new HttpResponseException(apiError.HttpResponseMessage);
            }
        }
예제 #2
0
        public void TestCreateDonorForAuthenticatedUserStripeUpdateThrowsStripeException()
        {
            var dto = new CreateDonorDTO
            {
                email_address   = "*****@*****.**",
                stripe_token_id = "456"
            };

            var contactDonor = new MpContactDonor
            {
                DonorId        = 123,
                ContactId      = 789,
                Email          = "*****@*****.**",
                ProcessorId    = "102030",
                RegisteredUser = true,
            };

            var stripeException = new PaymentProcessorException(HttpStatusCode.PaymentRequired, "auxMessage", "type", "message", "code", "decline", "param");

            _donorService.Setup(mocked => mocked.GetContactDonorForAuthenticatedUser(It.IsAny <string>())).Returns(contactDonor);
            _donorService.Setup(
                (mocked => mocked.CreateOrUpdateContactDonor(contactDonor, string.Empty, string.Empty, string.Empty, String.Empty, "456", It.IsAny <DateTime>())))
            .Throws(stripeException);

            var response = _fixture.Post(dto);

            Assert.AreEqual(typeof(RestHttpActionResult <PaymentProcessorErrorResponse>), response.GetType());

            _donorService.VerifyAll();
            _paymentService.VerifyAll();
        }
예제 #3
0
        public void ShouldThrowExceptionWhenDonorLookupFails()
        {
            _fixture.Request.Headers.Authorization = null;

            var createDonorDto = new CreateDonorDTO
            {
                stripe_token_id = "tok_test",
                email_address   = "*****@*****.**"
            };

            var lookupException = new Exception("Danger, Will Robinson!");

            _donorService.Setup(mocked => mocked.GetContactDonorForEmail(createDonorDto.email_address)).Throws(lookupException);

            try
            {
                _fixture.Post(createDonorDto);
                Assert.Fail("Expected exception was not thrown");
            }
            catch (Exception e)
            {
                Assert.AreEqual(typeof(HttpResponseException), e.GetType());
            }

            _donorService.VerifyAll();
        }
예제 #4
0
        public IActionResult Create([FromBody] CreateDonorDTO createDonor)
        {
            var donorId = _donorAppService.Create(createDonor);

            return(new ObjectResult(donorId)
            {
                StatusCode = (int)HttpStatusCode.Created
            });
        }
예제 #5
0
        private IHttpActionResult CreateDonorForUnauthenticatedUser(CreateDonorDTO dto)
        {
            MpContactDonor donor;

            try
            {
                donor = _donorService.GetContactDonorForEmail(dto.email_address);
            }
            catch (Exception e)
            {
                var msg = "Error getting donor for email " + dto.email_address;
                logger.Error(msg, e);
                var apiError = new ApiErrorDto(msg, e);
                throw new HttpResponseException(apiError.HttpResponseMessage);
            }
            int existingDonorId =
                (donor == null) ?
                0 :
                donor.DonorId;

            try
            {
                donor = _donorService.CreateOrUpdateContactDonor(donor, String.Empty, dto.first_name, dto.last_name, dto.email_address, dto.stripe_token_id, DateTime.Now);
            }
            catch (PaymentProcessorException e)
            {
                return(e.GetStripeResult());
            }
            catch (Exception e)
            {
                var msg = "Error creating donor for email " + dto.email_address;
                logger.Error(msg, e);
                var apiError = new ApiErrorDto(msg, e);
                throw new HttpResponseException(apiError.HttpResponseMessage);
            }

            var responseBody = new DonorDTO
            {
                Id             = donor.DonorId,
                ProcessorId    = donor.ProcessorId,
                RegisteredUser = false,
                Email          = donor.Email
            };

            // HTTP StatusCode should be 201 (Created) if we created a donor, or 200 (Ok) if returning an existing donor
            var statusCode =
                (existingDonorId == donor.DonorId) ?
                HttpStatusCode.OK :
                HttpStatusCode.Created;

            return(ResponseMessage(Request.CreateResponse(statusCode, responseBody)));
        }
예제 #6
0
        public void ShouldPostToSuccessfullyReturnExistingGuestDonor()
        {
            _fixture.Request.Headers.Authorization = null;

            var createDonorDto = new CreateDonorDTO
            {
                stripe_token_id = "tok_test",
                email_address   = "*****@*****.**",
                first_name      = "",
                last_name       = ""
            };

            var lookupDonor = new MpContactDonor
            {
                ContactId   = 8675309,
                DonorId     = 90210,
                ProcessorId = "jenny_ive_got_your_number"
            };

            var createDonor = new MpContactDonor
            {
                ContactId   = 8675309,
                DonorId     = 90210,
                ProcessorId = "jenny_ive_got_your_number"
            };

            _donorService.Setup(mocked => mocked.GetContactDonorForEmail(createDonorDto.email_address)).Returns(lookupDonor);
            _donorService.Setup(mocked => mocked.CreateOrUpdateContactDonor(It.Is <MpContactDonor>(d => d == lookupDonor), string.Empty, string.Empty, string.Empty, createDonorDto.email_address, createDonorDto.stripe_token_id, It.IsAny <DateTime>())).Returns(createDonor);

            IHttpActionResult result = _fixture.Post(createDonorDto);

            _donorService.VerifyAll();

            Assert.IsNotNull(result);
            Assert.IsInstanceOf(typeof(ResponseMessageResult), result);
            Assert.NotNull(((ResponseMessageResult)result).Response);
            Assert.AreEqual(HttpStatusCode.OK, ((ResponseMessageResult)result).Response.StatusCode);
            var content = ((ResponseMessageResult)result).Response.Content;

            Assert.NotNull(content);
            Assert.IsInstanceOf(typeof(ObjectContent <DonorDTO>), content);
            var responseDto = (DonorDTO)((ObjectContent)content).Value;

            Assert.AreEqual(90210, responseDto.Id);
            Assert.AreEqual("jenny_ive_got_your_number", responseDto.ProcessorId);
        }
예제 #7
0
        public int Create(CreateDonorDTO createDonor)
        {
            DateTime parsedBirthDate = DateTime.Parse(createDonor.BirthDate);
            DateTime createdAt       = DateTime.UtcNow;
            Donor    donor           = new Donor(createDonor.FirstName,
                                                 createDonor.LastName,
                                                 parsedBirthDate,
                                                 createDonor.RegistrationId,
                                                 createdAt,
                                                 createDonor.Username,
                                                 createDonor.Password,
                                                 createDonor.Gender,
                                                 createDonor.BloodType
                                                 );

            return(_donorRepository.Create(donor));
        }
예제 #8
0
        public void ShouldPostToSuccessfullyCreateAuthenticatedDonor()
        {
            var createDonorDto = new CreateDonorDTO
            {
                stripe_token_id = "tok_test"
            };

            _donorService.Setup(mocked => mocked.GetContactDonorForAuthenticatedUser(It.IsAny <string>())).Returns((MpContactDonor)null);
            _donorService.Setup(mocked => mocked.CreateOrUpdateContactDonor(null, string.Empty, string.Empty, string.Empty, string.Empty, "tok_test", It.IsAny <DateTime>())).Returns(_donor);

            IHttpActionResult result = _fixture.Post(createDonorDto);

            Assert.IsNotNull(result);
            Assert.IsInstanceOf(typeof(OkNegotiatedContentResult <DonorDTO>), result);
            var okResult = (OkNegotiatedContentResult <DonorDTO>)result;

            Assert.AreEqual(DonorId, okResult.Content.Id);
            Assert.AreEqual(ProcessorId, okResult.Content.ProcessorId);
        }
예제 #9
0
        public void ShouldThrowExceptionWhenDonorCreationFails()
        {
            _fixture.Request.Headers.Authorization = null;

            var createDonorDto = new CreateDonorDTO
            {
                stripe_token_id = "tok_test",
                email_address   = "*****@*****.**",
                first_name      = "",
                last_name       = ""
            };

            var lookupDonor = new MpContactDonor
            {
                ContactId   = 8675309,
                DonorId     = 90210,
                ProcessorId = "jenny_ive_got_your_number"
            };

            var createException = new Exception("Danger, Will Robinson!");

            _donorService.Setup(mocked => mocked.GetContactDonorForEmail(createDonorDto.email_address)).Returns(lookupDonor);
            _donorService.Setup(mocked => mocked.CreateOrUpdateContactDonor(It.Is <MpContactDonor>(d => d == lookupDonor), string.Empty, string.Empty, string.Empty, createDonorDto.email_address, createDonorDto.stripe_token_id, It.IsAny <DateTime>())).Throws(createException);

            try
            {
                _fixture.Post(createDonorDto);
                Assert.Fail("Expected exception was not thrown");
            }
            catch (Exception e)
            {
                Assert.AreEqual(typeof(HttpResponseException), e.GetType());
            }

            _donorService.VerifyAll();
        }
예제 #10
0
 public IHttpActionResult Post([FromBody] CreateDonorDTO dto)
 {
     return(Authorized(token => CreateDonorForAuthenticatedUser(token, dto), () => CreateDonorForUnauthenticatedUser(dto)));
 }