public async Task SubmitDraw_Succeeds_ReturnsSuccess()
        {
            // Arrange
            var serialNumber = SerialNumber.CreateNewSerialNumber(Guid.NewGuid().ToString());
            var emailStr     = $"{Guid.NewGuid().ToString()}@{Guid.NewGuid().ToString()}.com";
            var dto          = new SubmitDrawRequest
            {
                FirstName    = Guid.NewGuid().ToString(),
                LastName     = Guid.NewGuid().ToString(),
                EmailAddress = emailStr,
                SerialNumber = serialNumber.Serial,
            };

            var email = new EmailAddress(emailStr);

            serialNumberRepositoryMock.Setup(x => x.GetSerialNumber(serialNumber.Serial))
            .ReturnsAsync(() => serialNumber);

            drawSubmissionsServiceMock.Setup(x => x.Submit(It.IsAny <string>(), It.IsAny <string>(), It.IsAny <EmailAddress>(), It.IsAny <SerialNumber>()))
            .ReturnsAsync(() => new DrawSubmission(dto.FirstName, dto.LastName, email, serialNumber));

            // Act
            var response = await sut.SubmitDraw(dto);

            // Assert
            Assert.IsInstanceOf <OkObjectResult>(response);

            var payload      = (response as OkObjectResult).Value;
            var typedPayLoad = payload as DrawSubmissionListingDto;

            Assert.That(typedPayLoad.FirstName, Is.EqualTo(dto.FirstName));
            Assert.That(typedPayLoad.LastName, Is.EqualTo(dto.LastName));
            Assert.That(typedPayLoad.SerialNumber, Is.EqualTo(dto.SerialNumber));
            Assert.That(typedPayLoad.EmailAddress, Is.EqualTo(dto.EmailAddress));
        }
        public async Task <IActionResult> SubmitDraw([FromBody] SubmitDrawRequest request)
        {
            var serialNumber = await _serialNumberRepository.GetSerialNumber(request.SerialNumber);

            if (serialNumber == null)
            {
                return(BadRequest());
            }

            var submission = await _submissionService.Submit(request.FirstName, request.LastName, new EmailAddress(request.EmailAddress),
                                                             serialNumber);

            var dto = submission.ToDto(includeSerial: true);

            return(new OkObjectResult(dto));
        }