public void UpdateAsyncTest_Should_Not_Throw_Exception()
        {
            const string id = "123";
            //arrange
            var mockedRepo = new Mock <IGenericRepository <SubmissionVM> >();
            var mockedServiceBusService = new Mock <IServiceBusService>();
            var mockedJobClient         = new Mock <IBackgroundJobClient>();
            var mockedConfigRepo        = new Mock <IGenericRepository <ConfigVM> >();
            var mockedConfig            = new Mock <IAppConfiguration <ConfigVM> >();
            var mockedAppSettings       = new Mock <IConfiguration>();
            //var mockedIdGenerator = new Mock<IUidGeneratorService>();
            var sut = new SubmissionService(mockedRepo.Object, mockedServiceBusService.Object, mockedJobClient.Object);     //, mockedConfigRepo.Object, mockedConfig.Object, mockedAppSettings.Object);

            var submissionVm = new SubmissionVM {
                Id = id
            };
            var doc = new SubmissionVM();

            mockedRepo.Setup(x => x.UpdateAsync(It.IsAny <string>(), It.IsAny <SubmissionVM>())).ReturnsAsync(doc);
            // Act
            Action action = () => sut.UpdateAsync(id, submissionVm);

            // Assert
            action.Should().NotThrow <Exception>();
        }
        public void SendSubmission_Should_Not_Throw_Exception_When_BackgroundJob_Fails()
        {
            const string id           = "123";
            var          submissionVm = new SubmissionVM {
                Id = id
            };
            var doc = new SubmissionVM();

            //arrange
            var mockedRepo = new Mock <IGenericRepository <SubmissionVM> >();
            var mockedServiceBusService = new Mock <IServiceBusService>();
            var mockedJobClient         = new Mock <IBackgroundJobClient>();
            var sut = new SubmissionService(mockedRepo.Object, mockedServiceBusService.Object, mockedJobClient.Object);

            mockedRepo.Setup(x => x.UpdateAsync(It.IsAny <string>(), It.IsAny <SubmissionVM>())).ReturnsAsync(doc);
            mockedServiceBusService.Setup(b => b.SendMessageAsync(It.IsAny <SubmissionVM>())).Throws(new Exception());

            //Ensure exception created by hangfire
            mockedJobClient.Setup(j => j.Create(It.IsAny <Job>(), It.IsAny <EnqueuedState>())).Throws(new Exception("testing exception"));

            // Act
            Action action = () => sut.SendSubmission(id, submissionVm);

            // Assert
            action.Should().NotThrow <Exception>();
            mockedJobClient.Verify(x => x.Create(
                                       It.Is <Job>(job => job.Method.Name == "SendMessageAsync" && job.Args[0] == submissionVm),
                                       It.IsAny <EnqueuedState>()
                                       ));
        }
        public async void GetByIdAsync_Should_Return_Correct_Data()
        {
            const string id = "123";
            //arrange
            var mockedRepo = new Mock <IGenericRepository <SubmissionVM> >();
            var mockedServiceBusService = new Mock <IServiceBusService>();
            var mockedJobClient         = new Mock <IBackgroundJobClient>();
            var mockedConfigRepo        = new Mock <IGenericRepository <ConfigVM> >();
            var mockedConfig            = new Mock <IAppConfiguration <ConfigVM> >();
            var mockedAppSettings       = new Mock <IConfiguration>();
            //var mockedIdGenerator = new Mock<IUidGeneratorService>();
            var sut = new SubmissionService(mockedRepo.Object, mockedServiceBusService.Object, mockedJobClient.Object);     //, mockedConfigRepo.Object, mockedConfig.Object, mockedAppSettings.Object);

            var submissionVm = new SubmissionVM {
                Id = id
            };
            var doc = new DocumentResponse <SubmissionVM>(submissionVm);

            mockedRepo.Setup(x => x.GetByIdAsync(It.IsAny <string>())).ReturnsAsync(doc);
            //act
            var result = await sut.GetByIdAsync(id);

            //assert
            result.Id.Should().Be(id);
        }
        public string GetUserAnswerFromSession(string questionId)
        {
            SubmissionVM submissionVm = GetSubmissionFromSession() ?? this.GetSubmissionVm();
            var          answer       = submissionVm.Answers.FirstOrDefault(x => x.QuestionId == questionId).AnswerText;

            return(answer);
        }
        private SubmissionVM PopulateSubmission(SubmissionVM submissionVM)
        {
            //Generate the submission in the database
            var submission = _submissionService.CreateAsync(submissionVM).Result;

            // Get the new Id
            var documentId = _cosmosService.GetDocumentId(submission.Id);
            var seed       = _configuration.GetSection("SubmissionDocument").GetValue <int>("DatabaseSeed");

            if (documentId == 0)
            {
                throw new ArgumentOutOfRangeException("documentId");
                //return GetCustomErrorCode(EnumStatusCode.CYASubmissionReferenceNullError, "Error submitting feedback! Null or empty DocumentId");
            }

            var reference = (seed + documentId).ToString();

            // Update GFC Id, this line is needed for the Word Doc
            submission.SubmissionId = reference;

            // Create the Word Doc
            var base64Doc = _documentService.CreateSubmissionDocument(submission);

            // Update our model with the new id and word doc
            submission.SubmissionId     = reference;
            submission.Base64Attachment = base64Doc;
            submission.Status           = SubmissionStatus.Saved.ToString();

            return(submission);
        }
Beispiel #6
0
        /// <summary>
        /// Wrap submissionVM in an Azure message format, then post it to the service bus.
        /// </summary>
        /// <param name="submission">Submission to send to the service bus</param>
        public async Task SendMessageAsync(SubmissionVM submission)
        {
            //If disabled, return false
            if (_enabled)
            {
                //Parse submission to json
                var messageBody = JsonConvert.SerializeObject(submission);

                // Wrap json in a message object
                ServiceBusMessage message = new ServiceBusMessage(messageBody)
                {
                    ContentType = "application/json"
                };

                // send the message
                try
                {
                    await _sender.SendMessageAsync(message);
                }
                catch (Exception ex)
                {
                    //If errors occur, log them but do not stop process or throw error
                    _internalLogger.LogError(ex, "Failed to send message: message content =  {0}", messageBody);
                    // Todo: Throwing this error will enable hangfire retries - to be implemented at a later date.
                    // throw;
                }
            }
            else
            {
                _internalLogger.LogWarning("Submission not sent to Service Bus: Service Bus disabled. GFC id = {0}", submission.Id);
            }
        }
Beispiel #7
0
        //[Authorize(Roles = "Marketing")]
        public ActionResult EditSubmission(int id)
        {
            PostManager repo = new PostManager();

            var response = repo.GetById(id);

            if (!response.Success)
            {
                throw new Exception(response.Message);
            }

            SubmissionVM model = new SubmissionVM();

            model.ResetDropdown();
            model.SubmissionId            = response.Payload.Id.ToString();
            model.SubmissionTitle         = response.Payload.PostTitle;
            model.SubmissionBody          = response.Payload.PostBody;
            model.SubmissionCategoryId    = response.Payload.PostCategory.Id.ToString();
            model.SubmissionImageFileName = response.Payload.PostImageFileName;

            string tags = "";

            foreach (Tag t in response.Payload.PostTags)
            {
                tags += "#" + t.TagName + " ";
            }

            model.SubmissionTags = tags;

            return(View(model));
        }
        public async void FindByAsync_Should_Not_Be_Null()
        {
            const string id = "123";
            //arrange
            var mockedRepo       = new Mock <IGenericRepository <SubmissionVM> >();
            var mockedConfigRepo = new Mock <IGenericRepository <ConfigVM> >();
            var mockedConfig     = new Mock <IAppConfiguration <ConfigVM> >();
            var sut = new SubmissionService(mockedRepo.Object, mockedConfigRepo.Object, mockedConfig.Object);

            var submissionVm = new SubmissionVM {
                Id = id
            };
            var query = new List <SubmissionVM> {
                submissionVm
            }.AsQueryable();

            mockedRepo.Setup(x => x.FindByAsync(m => m.Id == id)).ReturnsAsync(query);
            //act
            var result = await sut.FindByAsync(m => m.Id == id);

            //assert
            var submissionVms = result as SubmissionVM[] ?? result.ToArray();

            submissionVms.ToList().Should().NotBeNull();
        }
Beispiel #9
0
        public async void FindByAsync_Should_Return_Correct_Data()
        {
            const string id = "123";
            //arrange
            var mockedRepo        = new Mock <IGenericRepository <SubmissionVM> >();
            var mockedConfigRepo  = new Mock <IGenericRepository <ConfigVM> >();
            var mockedConfig      = new Mock <IAppConfiguration <ConfigVM> >();
            var mockedAppSettings = new Mock <IConfiguration>();
            //var mockedIdGenerator = new Mock<IUidGeneratorService>();
            var sut = new SubmissionService(mockedRepo.Object, mockedConfigRepo.Object, mockedConfig.Object, mockedAppSettings.Object);

            var submissionVm = new SubmissionVM {
                Id = id
            };
            var query = new List <SubmissionVM> {
                submissionVm
            }.AsQueryable();

            mockedRepo.Setup(x => x.FindByAsync(m => m.Id == id)).ReturnsAsync(query);
            //act
            var result = await sut.FindByAsync(m => m.Id == id);

            //assert
            var submissionVms = result as SubmissionVM[] ?? result.ToArray();

            submissionVms.ToList()[0].Id.Should().Be(id);
        }
Beispiel #10
0
        public ActionResult CreateSubmission(SubmissionVM model)
        {
            var mgr        = new PostManager();
            var catManager = new CategoryManager();
            var sub        = new Post();

            sub.PostTitle         = model.SubmissionTitle;
            sub.PostBody          = model.SubmissionBody;
            sub.PostCategory      = catManager.GetCategoryById(int.Parse(model.SubmissionCategoryId)).Payload;
            sub.PostImageFileName = "placeholder.png";
            sub.PostTags          = new List <Tag>()
            {
                new Tag()
                {
                    TagName = "Test"
                }
            };
            sub.PostState = PostState.Pending;
            sub.Username  = User.Identity.Name;
            var response = mgr.AddPost(sub);

            if (response.Success == false)
            {
                throw new Exception();
            }

            model.ResetDropdown();
            return(View(model));
        }
Beispiel #11
0
        public ActionResult CreateSubmission()
        {
            var model = new SubmissionVM();

            model.ResetDropdown();
            return(View(model));
        }
Beispiel #12
0
        private GenericAttachmentPayload GetGenericAttachmentPayload(SubmissionVM submission)
        {
            var description    = string.Empty;
            var organisationId = string.Empty;

            if (submission.LocationId == "0")
            {
                organisationId = string.Empty;//no location selected
                description    = "(GFC)";
            }
            else
            {
                organisationId = submission.LocationId;
                description    = "(GFC) Location ID: " + submission.LocationId + " Provider ID: " + submission.ProviderId + " Location name: " + submission.LocationName;
            }

            //var submissionNumber = Guid.NewGuid().ToString().Substring(0, 8);//use this for testing because esb rejects duplicate submissionIds
            var submissionNumber = "GFC-" + submission.SubmissionId;
            var filename         = submissionNumber + ".docx";

            var genPayload = new GenericAttachmentPayload
            {
                Payload          = submission.Base64Attachment,
                OrganisationId   = organisationId,
                Description      = description,
                Filename         = filename,
                SubType          = PayloadType.Classified,
                SubmissionNumber = submissionNumber
            };

            return(genPayload);
        }
Beispiel #13
0
        public async Task <int> PostSubmissionAsync(SubmissionVM submissionVm)
        {
            var json       = JsonConvert.SerializeObject(submissionVm);
            var submission = await _submissionRepository.CreateAsync(new Submission { SavedDate = DateTime.Now, SubmissionJson = json });

            return(submission.Id);
        }
Beispiel #14
0
        public void SaveSubmissionIntoSession(SubmissionVM submissionVm)
        {
            var sessionVm = _sessionService.GetUserSessionVars();

            sessionVm.SubmissionVm = submissionVm;
            _sessionService.SetUserSessionVars(sessionVm);
        }
Beispiel #15
0
        private void GetAnswer(Body body, SubmissionVM submissionVm, string questionId)
        {
            var answer = submissionVm.Answers.FirstOrDefault(x => x.QuestionId == questionId);

            if (answer != null)
            {
                GetDataSection(body, answer.Question, SplitOutNewLines(answer.Answer), true);
            }
        }
Beispiel #16
0
        public async Task <string> PostSubmision(SubmissionVM submission, ILogger logger)
        {
            var response = await _esbWrapper.PostSubmission(GetGenericAttachmentPayload(submission), logger);

            if (response.Success && !string.IsNullOrWhiteSpace(response.EnquiryId))
            {
                submission.Status = "Sent";
                var sub = await _repo.UpdateAsync(submission.Id, submission);
            }

            return(response.EnquiryId);
        }
Beispiel #17
0
        public void SaveUserAnswerIntoSession(Question question)
        {
            if (string.IsNullOrEmpty(question.Answer))
            {
                return;
            }
            SubmissionVM submissionVm = GetSubmissionFromSession() ?? this.GetSubmissionVm();

            submissionVm.Answers.FirstOrDefault(x => x.QuestionId == question.QuestionId).AnswerText = question.Answer;

            var usesSessionVm = _sessionService.GetUserSessionVars();

            usesSessionVm.SubmissionVm = submissionVm;
            _sessionService.SetUserSessionVars(usesSessionVm);
        }
Beispiel #18
0
 private void GetHeader(Body body, SubmissionVM submissionVm)
 {
     GetDataSection(body, "Response Id :", new List <string> {
         submissionVm.Id
     }, false);
     GetDataSection(body, "Channel :", new List <string> {
         "GFC"
     }, false);
     GetDataSection(body, "GFC reference number :", new List <string> {
         submissionVm.SubmissionId
     }, false);
     GetDataSection(body, "Completed :", new List <string> {
         GetUkDateStringFromZulu(submissionVm.DateCreated.ToString())
     }, false);
 }
        public async Task <IActionResult> Index(SubmissionVM vm)
        {
            try
            {
                var submissionVm = _submissionService.GetSubmissionFromSession();
                submissionVm.DateCreated = DateTime.Now.ToLongDateString();
                //save to db
                var returnId = await _submissionService.PostSubmissionAsync(submissionVm);

                return(RedirectToAction("Index", "Confirmation", new { id = returnId }));
            }
            catch (Exception e)
            {
                _logger.Log(LogLevel.Error, e.Message, e);
                return(RedirectToAction("ProblemWithService", "Error"));//Todo let middleware deal with errors
            }
        }
        public void SendSubmission_Should_Not_Throw_Exception_When_ServiceBus_Config_Invalid()
        {
            var payload = new SubmissionVM();

            //arrange
            var mockedLogger           = new Mock <ILogger <ServiceBusService> >();
            var mockedServiceBusConfig = new Mock <ServiceBusConfiguration>();

            mockedServiceBusConfig.SetupAllProperties();
            mockedServiceBusConfig.Object.ConnectionString = "";
            mockedServiceBusConfig.Object.QueueName        = "";
            mockedServiceBusConfig.Object.Enabled          = true;

            //act
            Action action = () => new ServiceBusService(mockedServiceBusConfig.Object, mockedLogger.Object);

            //assert
            action.Should().NotThrow <Exception>();
        }
Beispiel #21
0
        /// <summary>
        /// Creates the feedback section
        /// </summary>
        /// <param name="body"></param>
        /// <param name="submissionVm"></param>
        /// <param name="notFoundId"></param>
        private void GetLocation(Body body, SubmissionVM submissionVm, string notFoundId)
        {
            var locationId          = string.Empty;
            var providerId          = string.Empty;
            var location            = string.Empty;
            var locationDescription = string.Empty;
            var locationFound       = false;
            var answer = submissionVm.Answers.FirstOrDefault(x => x.QuestionId == notFoundId);//1

            if (answer == null)
            {
                //location has been selected
                locationId    = submissionVm.LocationId;
                providerId    = submissionVm.ProviderId;
                location      = submissionVm.LocationName;
                locationFound = true;
            }
            else
            {
                //location has not been found
                locationId          = "none";
                providerId          = "none";
                locationDescription = answer.Answer;
            }
            GetDataSection(body, "Location ID :", new List <string> {
                locationId
            }, false);
            GetDataSection(body, "Provider ID :", new List <string> {
                providerId
            }, false);

            if (locationFound)
            {
                GetDataSection(body, "Location name : ", new List <string> {
                    location
                }, false);
            }
            else
            {
                GetDataSection(body, "Location description : ", SplitOutNewLines(locationDescription), true);
            }
        }
Beispiel #22
0
        /// <summary>
        /// Service-level method to send submission to appropriate providers
        /// </summary>
        /// <param name="submissionId">submission Id</param>
        /// <param name="submissionDocument">Submission content</param>
        /// <returns></returns>
        public Task <SubmissionVM> SendSubmission(string submissionId, SubmissionVM submissionDocument)
        {
            //Push cosmosDB submission
            var cosmosSubmission = UpdateAsync(submissionId, submissionDocument);

            //Start hangfire job for service bus submission
            try
            {
                _backgroundJobClient.Enqueue(() => _serviceBusService.SendMessageAsync(submissionDocument));
            }
            catch (Exception e)
            {
                //This exception will be handled further at a future point
                Console.WriteLine("Hangfire exception!");
                Console.WriteLine(e);
            }

            //Return cosmosDB submission
            return(cosmosSubmission);
        }
        public void SendSubmission_Should_Throw_Exception_When_CosmosError()
        {
            const string id           = "123";
            var          submissionVm = new SubmissionVM {
                Id = id
            };

            //arrange
            var mockedRepo = new Mock <IGenericRepository <SubmissionVM> >();
            var mockedServiceBusService = new Mock <IServiceBusService>();
            var mockedJobClient         = new Mock <IBackgroundJobClient>();
            var sut = new SubmissionService(mockedRepo.Object, mockedServiceBusService.Object, mockedJobClient.Object);

            mockedRepo.Setup(x => x.UpdateAsync(It.IsAny <string>(), It.IsAny <SubmissionVM>())).Throws(new Exception());

            // Act
            Action action = () => sut.SendSubmission(id, submissionVm);

            // Assert
            action.Should().Throw <Exception>();
        }
        public void SendSubmission_Should_Not_Throw_Exception()
        {
            var payload = new SubmissionVM();

            //arrange
            var mockedLogger           = new Mock <ILogger <ServiceBusService> >();
            var mockedServiceBusConfig = new Mock <ServiceBusConfiguration>();

            mockedServiceBusConfig.SetupAllProperties();
            mockedServiceBusConfig.Object.ConnectionString = "Endpoint=sb://testLink.servicebus.windows.net/;SharedAccessKeyName=testName;SharedAccessKey=testKey";
            mockedServiceBusConfig.Object.QueueName        = "testQueueName";
            mockedServiceBusConfig.Object.Enabled          = true;

            var sut = new ServiceBusService(mockedServiceBusConfig.Object, mockedLogger.Object);

            //act
            Action action = () => sut.SendMessageAsync(payload);

            //assert
            action.Should().NotThrow <Exception>();
        }
        public async void GetByIdAsync_Should_Not_Be_Null()
        {
            const string id = "123";
            //arrange
            var mockedRepo       = new Mock <IGenericRepository <SubmissionVM> >();
            var mockedConfigRepo = new Mock <IGenericRepository <ConfigVM> >();
            var mockedConfig     = new Mock <IAppConfiguration <ConfigVM> >();
            var sut = new SubmissionService(mockedRepo.Object, mockedConfigRepo.Object, mockedConfig.Object);

            var submissionVm = new SubmissionVM {
                Id = id
            };
            var doc = new DocumentResponse <SubmissionVM>(submissionVm);

            mockedRepo.Setup(x => x.GetByIdAsync(It.IsAny <string>())).ReturnsAsync(doc);
            //act
            var result = await sut.GetByIdAsync(id);

            //assert
            result.Should().NotBeNull();
        }
Beispiel #26
0
        // GET: Admin
        public ActionResult Index()
        {
            using (CarInsuranceEntities4 db = new CarInsuranceEntities4())
            {
                var submission = db.Submits.ToList();

                var submissionVm = new List <SubmissionVM>();

                foreach (var sub in  submission)
                {
                    var subVm = new SubmissionVM();

                    subVm.FirstNameVm    = sub.firstName;
                    subVm.LastNameVm     = sub.lastName;
                    subVm.EmailAddressVm = sub.emailAddress;
                    subVm.QuoteVm        = sub.Quote;
                    submissionVm.Add(subVm);
                }
                return(View(submissionVm));
            }
        }
Beispiel #27
0
        private SubmissionVM GenerateSubmission(FormVM formVm, string gfcReference)
        {
            var submissionVm = new SubmissionVM
            {
                Version      = formVm.Version,
                Id           = Guid.NewGuid().ToString(),
                DateCreated  = new DateTime().GetLocalDateTime(),
                FormName     = formVm.FormName,
                ProviderId   = HttpContext.Session.GetString("ProviderId"),
                LocationId   = HttpContext.Session.GetString("LocationId"),
                LocationName = HttpContext.Session.GetString("LocationName"),
                SubmissionId = gfcReference
            };
            var answers = new List <AnswerVM>();

            var pageHistory = _sessionService.GetNavOrder();

            foreach (var page in formVm.Pages.Where(m => pageHistory.Contains(m.PageId)).OrderBy(m => pageHistory.IndexOf(m.PageId)))
            {
                answers.AddRange(page.Questions.Where(m => !string.IsNullOrEmpty(m.Answer))
                                 .Select(question => new AnswerVM
                {
                    PageId        = page.PageId,
                    QuestionId    = question.QuestionId,
                    Question      = string.IsNullOrEmpty(question.Question) ? page.PageName.StripHtml() : question.Question.StripHtml(),
                    Answer        = question.Answer.StripHtml(),
                    DocumentOrder = question.DocumentOrder
                }));
            }

            submissionVm.Answers = answers;

            submissionVm.Base64Attachment = _documentService.CreateSubmissionDocument(submissionVm);
            submissionVm.Status           = "Saved";

            return(submissionVm);
        }
Beispiel #28
0
        public SubmissionVM GetSubmissionVm(bool useFile = false)
        {
            SubmissionVM submissionVm = null;

            if (useFile)
            {
                using (var r = new StreamReader("Content/submission-schema.json"))
                {
                    var file = r.ReadToEnd();

                    submissionVm = JsonConvert.DeserializeObject <SubmissionVM>(file);
                }
            }
            else
            {
                var schema = _schemaRepository.GetByIdAsync(2).Result;
                if (schema != null)
                {
                    submissionVm = JsonConvert.DeserializeObject <SubmissionVM>(schema.SchemaJson);
                }
            }

            return(submissionVm);
        }
Beispiel #29
0
 public Task <SubmissionVM> UpdateAsync(string id, SubmissionVM item)
 {
     return(_repo.UpdateAsync(id, item));
 }
Beispiel #30
0
 public Task <SubmissionVM> CreateAsync(SubmissionVM item)
 {
     return(_repo.CreateAsync(item));
 }