public ActionResult Display(string tenant, string surveySlug, SurveyAnswer contentModel) { var surveyAnswer = this.CallGetSurveyAndCreateSurveyAnswer(tenant, surveySlug); if (surveyAnswer == null) { return this.View(new TenantPageViewData<SurveyAnswer>(surveyAnswer)); } if (surveyAnswer.QuestionAnswers.Count != contentModel.QuestionAnswers.Count) { throw new ArgumentException("The survey answers received have different amount of questions than the survey to be filled."); } for (int i = 0; i < surveyAnswer.QuestionAnswers.Count; i++) { surveyAnswer.QuestionAnswers[i].Answer = contentModel.QuestionAnswers[i].Answer; } if (!this.ModelState.IsValid) { var model = new TenantPageViewData<SurveyAnswer>(surveyAnswer); model.Title = surveyAnswer.Title; return this.View(model); } this.surveyAnswerStore.SaveSurveyAnswer(surveyAnswer); return this.RedirectToAction("ThankYou"); }
public void AddNewAnswerCallsMergeWith1AsTotalAnswers() { var surveyAnswersSummary = new StubSurveyAnswersSummary(); var surveyAnswer = new SurveyAnswer(); surveyAnswersSummary.AddNewAnswer(surveyAnswer); Assert.AreEqual(1, surveyAnswersSummary.MergeParameter.TotalAnswers); }
public virtual void AddNewAnswer(SurveyAnswer surveyAnswer) { if (surveyAnswer == null) { return; } var newSurveyAnswersSummary = new SurveyAnswersSummary(surveyAnswer.Tenant, surveyAnswer.SlugName) { TotalAnswers = 1 }; foreach (var questionAnswer in surveyAnswer.QuestionAnswers) { var questionAnswersSummary = new QuestionAnswersSummary { QuestionType = questionAnswer.QuestionType, QuestionText = questionAnswer.QuestionText, PossibleAnswers = questionAnswer.PossibleAnswers }; newSurveyAnswersSummary.QuestionAnswersSummaries.Add(questionAnswersSummary); switch (questionAnswer.QuestionType) { case QuestionType.SimpleText: var words = questionAnswer.Answer.Split(new[] { ' ' }, StringSplitOptions.RemoveEmptyEntries); var wordCounts = new Dictionary <string, int>(); var stemmedWords = words.Where(w => !WordCloudFiltering.IsStopWord(w)) .Select(w => Regex.Replace(w, @"[^a-z0-9]", string.Empty, System.Text.RegularExpressions.RegexOptions.IgnoreCase)) .Where(w => !WordCloudFiltering.IsNumber(w)); stemmedWords.GroupBy(w => w, w => w).ToList() .ForEach(g => wordCounts.Add(g.Key, g.Count())); questionAnswersSummary.AnswersSummary = new JavaScriptSerializer().Serialize(wordCounts); break; case QuestionType.MultipleChoice: var choiceCounts = new Dictionary <string, int> { { questionAnswer.Answer, 1 } }; questionAnswersSummary.AnswersSummary = new JavaScriptSerializer().Serialize(choiceCounts); break; case QuestionType.FiveStars: var answer = double.Parse(questionAnswer.Answer); questionAnswersSummary.AnswersSummary = answer.ToString("F", CultureInfo.InvariantCulture); break; default: throw new ArgumentOutOfRangeException(); } } this.MergeWith(newSurveyAnswersSummary); }
public virtual void AddNewAnswer(SurveyAnswer surveyAnswer) { if (surveyAnswer == null) { return; } var newSurveyAnswersSummary = new SurveyAnswersSummary(surveyAnswer.Tenant, surveyAnswer.SlugName) { TotalAnswers = 1 }; foreach (var questionAnswer in surveyAnswer.QuestionAnswers) { var questionAnswersSummary = new QuestionAnswersSummary { QuestionType = questionAnswer.QuestionType, QuestionText = questionAnswer.QuestionText, PossibleAnswers = questionAnswer.PossibleAnswers }; newSurveyAnswersSummary.QuestionAnswersSummaries.Add(questionAnswersSummary); switch (questionAnswer.QuestionType) { case QuestionType.SimpleText: var wordCounts = new Dictionary <string, int>(); GetStemmedWordsGroups(questionAnswer.Answer.Split(new[] { ' ' }, StringSplitOptions.RemoveEmptyEntries)) .ToList() .ForEach(g => wordCounts.Add(g.Key, g.Count())); questionAnswersSummary.AnswersSummary = new JavaScriptSerializer().Serialize(wordCounts); break; case QuestionType.MultipleChoice: var choiceCounts = new Dictionary <string, int> { { questionAnswer.Answer, 1 } }; questionAnswersSummary.AnswersSummary = new JavaScriptSerializer().Serialize(choiceCounts); break; case QuestionType.FiveStars: var answer = double.Parse(questionAnswer.Answer); questionAnswersSummary.AnswersSummary = answer.ToString("F", CultureInfo.InvariantCulture); break; default: throw new ArgumentOutOfRangeException(); } } this.MergeWith(newSurveyAnswersSummary); }
public void SaveAndDelete() { var account = CloudConfiguration.GetStorageAccount("DataConnectionString"); var surveyAnswerStorage = new EntitiesBlobContainer<SurveyAnswer>(account, SurveyAnswersContainer); var surveyAnswerId = new Guid("{A0E27D4B-4CD9-43B0-B29E-FE61096A529A}").ToString(); var expectedSurveyAnswer = new SurveyAnswer { Tenant = "tenant", Title = "title", SlugName = "slugname" }; surveyAnswerStorage.Save(surveyAnswerId, expectedSurveyAnswer); SurveyAnswer savedSurveyAnswer = surveyAnswerStorage.Get(surveyAnswerId); Assert.IsNotNull(savedSurveyAnswer); surveyAnswerStorage.Delete(surveyAnswerId); SurveyAnswer deletedSurveyAnswer = surveyAnswerStorage.Get(surveyAnswerId); Assert.IsNull(deletedSurveyAnswer); }
public void AddNew5StarsAnswerCallsMergeWithNewSummary() { var surveyAnswersSummary = new StubSurveyAnswersSummary(); var questionAnswer = new QuestionAnswer { QuestionType = QuestionType.FiveStars, QuestionText = "5 stars", Answer = "1" }; var surveyAnswer = new SurveyAnswer(); surveyAnswer.QuestionAnswers.Add(questionAnswer); surveyAnswersSummary.AddNewAnswer(surveyAnswer); var questionAnswersSummary = surveyAnswersSummary.MergeParameter.QuestionAnswersSummaries.First(); Assert.AreEqual("5 stars", questionAnswersSummary.QuestionText); Assert.AreEqual(QuestionType.FiveStars, questionAnswersSummary.QuestionType); Assert.AreEqual("1.00", questionAnswersSummary.AnswersSummary); }
public void AddNewMultipleChoiceAnswerCallsMergeWithNewSummary() { var surveyAnswersSummary = new StubSurveyAnswersSummary(); var questionAnswer = new QuestionAnswer { QuestionType = QuestionType.MultipleChoice, QuestionText = "multiple choice", Answer = "choice 1", PossibleAnswers = "possible answers" }; var surveyAnswer = new SurveyAnswer(); surveyAnswer.QuestionAnswers.Add(questionAnswer); surveyAnswersSummary.AddNewAnswer(surveyAnswer); var questionAnswersSummary = surveyAnswersSummary.MergeParameter.QuestionAnswersSummaries.First(); Assert.AreEqual("multiple choice", questionAnswersSummary.QuestionText); Assert.AreEqual("possible answers", questionAnswersSummary.PossibleAnswers); Assert.AreEqual(QuestionType.MultipleChoice, questionAnswersSummary.QuestionType); var actualSummary = new JavaScriptSerializer().Deserialize<Dictionary<string, int>>(questionAnswersSummary.AnswersSummary); Assert.AreEqual(1, actualSummary.Keys.Count); Assert.AreEqual(1, actualSummary["choice 1"]); }
public void RunAddsTheSurveyAnswerToTheSummary() { var mockTenantSurveyProcessingInfo = new Mock<TenantSurveyProcessingInfo>("tenant", "slug-name"); var mockTenantSurveyProcessingInfoObj = mockTenantSurveyProcessingInfo.Object; var mockTenantSurveyProcessingInfoCache = new Mock<IDictionary<string, TenantSurveyProcessingInfo>>(); var mockSurveyAnswerStore = new Mock<ISurveyAnswerStore>(); var command = new UpdatingSurveyResultsSummaryCommand(mockTenantSurveyProcessingInfoCache.Object, mockSurveyAnswerStore.Object, new Mock<ISurveyAnswersSummaryStore>().Object); mockTenantSurveyProcessingInfoCache.Setup(c => c.ContainsKey("tenant-slug-name")).Returns(true); mockTenantSurveyProcessingInfoCache.Setup(c => c["tenant-slug-name"]).Returns(mockTenantSurveyProcessingInfoObj); var surveyAnswer = new SurveyAnswer() { Tenant = "tenant", SlugName = "slug-name" }; mockSurveyAnswerStore.Setup(r => r.GetSurveyAnswer(It.IsAny<string>(), It.IsAny<string>(), It.IsAny<string>())).Returns(surveyAnswer); var message = new SurveyAnswerStoredMessage { Tenant = "tenant", SurveySlugName = "slug-name", AppendedToAnswers = true }; command.Run(message); Assert.AreEqual(1, mockTenantSurveyProcessingInfoObj.AnswersSummary.TotalAnswers); }
public void SaveAndGet() { var account = CloudConfiguration.GetStorageAccount("DataConnectionString"); var surveyAnswerStorage = new EntitiesBlobContainer<SurveyAnswer>(account, SurveyAnswersContainer); var surveyAnswerId = new Guid("{DB0298D2-432B-41A7-B80F-7E7A025FA267}").ToString(); var expectedSurveyAnswer = new SurveyAnswer { Tenant = "tenant", Title = "title", SlugName = "slugname" }; var question1 = new QuestionAnswer { QuestionText = "text 1", QuestionType = QuestionType.SimpleText, PossibleAnswers = string.Empty }; var question2 = new QuestionAnswer { QuestionText = "text 2", QuestionType = QuestionType.MultipleChoice, PossibleAnswers = "answer 1\nanswer2" }; var question3 = new QuestionAnswer { QuestionText = "text 3", QuestionType = QuestionType.FiveStars, PossibleAnswers = string.Empty }; (expectedSurveyAnswer.QuestionAnswers as List<QuestionAnswer>).AddRange(new[] { question1, question2, question3 }); surveyAnswerStorage.Save(surveyAnswerId, expectedSurveyAnswer); SurveyAnswer actualSurveyAnswer = surveyAnswerStorage.Get(surveyAnswerId); Assert.AreEqual(expectedSurveyAnswer.Tenant, actualSurveyAnswer.Tenant); Assert.AreEqual(expectedSurveyAnswer.Title, actualSurveyAnswer.Title); Assert.AreEqual(expectedSurveyAnswer.SlugName, actualSurveyAnswer.SlugName); Assert.AreEqual(3, actualSurveyAnswer.QuestionAnswers.Count); var actualQuestionAnswer1 = actualSurveyAnswer.QuestionAnswers.SingleOrDefault(q => q.QuestionText == "text 1" && q.QuestionType == QuestionType.SimpleText && q.PossibleAnswers == string.Empty); Assert.IsNotNull(actualQuestionAnswer1); var actualQuestionAnswer2 = actualSurveyAnswer.QuestionAnswers.SingleOrDefault(q => q.QuestionText == "text 2" && q.QuestionType == QuestionType.MultipleChoice && q.PossibleAnswers == "answer 1\nanswer2"); Assert.IsNotNull(actualQuestionAnswer2); var actualQuestionAnswer3 = actualSurveyAnswer.QuestionAnswers.SingleOrDefault(q => q.QuestionText == "text 3" && q.QuestionType == QuestionType.FiveStars && q.PossibleAnswers == string.Empty); Assert.IsNotNull(actualQuestionAnswer3); }
public void DisplayWhenPostReturnsSurveyTitleAsTitleInTheModelWhenModelIsNotValid() { var mockSurveyStore = new Mock<ISurveyStore>(); var survey = new Survey { Title = "title", Questions = new List<Question>(new[] { new Question() }) }; mockSurveyStore.Setup(r => r.GetSurveyByTenantAndSlugName(It.IsAny<string>(), It.IsAny<string>(), It.IsAny<bool>())) .Returns(survey); var surveyAnswer = new SurveyAnswer { QuestionAnswers = new List<QuestionAnswer>(new[] { new QuestionAnswer() }) }; using (var controller = new SurveysController(mockSurveyStore.Object, default(ISurveyAnswerStore))) { controller.ModelState.AddModelError("error for test", "invalid model state"); var result = controller.Display(string.Empty, string.Empty, surveyAnswer) as ViewResult; var model = result.ViewData.Model as TenantMasterPageViewData; Assert.AreSame("title", model.Title); } }
public void SaveSurveyAnswer(SurveyAnswer surveyAnswer) { var tenant = this.tenantStore.GetTenant(surveyAnswer.Tenant); if (tenant != null) { var surveyAnswerBlobContainer = this.surveyAnswerContainerFactory.Create(surveyAnswer.Tenant, surveyAnswer.SlugName); surveyAnswer.CreatedOn = DateTime.UtcNow; var blobId = Guid.NewGuid().ToString(); surveyAnswerBlobContainer.Save(blobId, surveyAnswer); (SubscriptionKind.Premium.Equals(tenant.SubscriptionKind) ? this.premiumSurveyAnswerStoredQueue : this.standardSurveyAnswerStoredQueue) .AddMessage(new SurveyAnswerStoredMessage { SurveyAnswerBlobId = blobId, Tenant = surveyAnswer.Tenant, SurveySlugName = surveyAnswer.SlugName }); } }
public void DisplayWhenPostThrowsIfSaveSurveyAnswersReadFromSurveyStoreHaveDifferentCountToTheSurveyAnswerParameter() { var surveyWith1Question = new Survey { Questions = new List<Question>(new[] { new Question() }) }; var mockSurveyStore = new Mock<ISurveyStore>(); mockSurveyStore.Setup(r => r.GetSurveyByTenantAndSlugName(It.IsAny<string>(), It.IsAny<string>(), It.IsAny<bool>())) .Returns(surveyWith1Question); var surveyAnswerWithoutQuestions = new SurveyAnswer(); using (var controller = new SurveysController(mockSurveyStore.Object, default(ISurveyAnswerStore))) { controller.Display(string.Empty, string.Empty, surveyAnswerWithoutQuestions); } }
public void GetSurveyAnswerReturnsAnswerObtainedFromBlobContainer() { var mockSurveyAnswerBlobContainer = new Mock<IAzureBlobContainer<SurveyAnswer>>(); var mockSurveyContainerFactory = new Mock<ISurveyAnswerContainerFactory>(); var store = new SurveyAnswerStore( new Mock<ITenantStore>().Object, mockSurveyContainerFactory.Object, new Mock<IAzureQueue<SurveyAnswerStoredMessage>>().Object, new Mock<IAzureQueue<SurveyAnswerStoredMessage>>().Object, new Mock<IAzureBlobContainer<List<string>>>().Object); mockSurveyContainerFactory.Setup(f => f.Create(It.IsAny<string>(), It.IsAny<string>())) .Returns(mockSurveyAnswerBlobContainer.Object); var surveyAnswer = new SurveyAnswer(); mockSurveyAnswerBlobContainer.Setup(c => c.Get(It.IsAny<string>())) .Returns(surveyAnswer); var actualSurveyAnswer = store.GetSurveyAnswer("tenant", "slug-name", string.Empty); Assert.AreSame(surveyAnswer, actualSurveyAnswer); }
private SurveyAnswer CallGetSurveyAndCreateSurveyAnswer(string tenantName, string surveySlug) { try { var survey = this.surveyStore.GetSurveyByTenantAndSlugName(tenantName, surveySlug, true); if (survey == null) { TraceHelper.TraceInformation("wrong tenant/request pair requested: {0}/{1}", tenantName, surveySlug); return null; } var surveyAnswer = new SurveyAnswer { Title = survey.Title, SlugName = surveySlug, Tenant = tenantName }; foreach (var question in survey.Questions) { surveyAnswer.QuestionAnswers.Add(new QuestionAnswer { QuestionText = question.Text, QuestionType = question.Type, PossibleAnswers = question.PossibleAnswers }); } return surveyAnswer; } catch (Exception ex) { TraceHelper.TraceWarning(ex.TraceInformation()); return null; } }
public void DisplayWhenPostReturnsModelWithTheAnswersReadFromTheParameterWhenModelIsNotValid() { var mockSurveyStore = new Mock<ISurveyStore>(); var survey = new Survey { Questions = new List<Question>(new[] { new Question() }) }; mockSurveyStore.Setup(r => r.GetSurveyByTenantAndSlugName(It.IsAny<string>(), It.IsAny<string>(), It.IsAny<bool>())) .Returns(survey); var surveyAnswer = new SurveyAnswer { QuestionAnswers = new List<QuestionAnswer>(new[] { new QuestionAnswer { Answer = "answer" } }) }; using (var controller = new SurveysController(mockSurveyStore.Object, default(ISurveyAnswerStore))) { controller.ModelState.AddModelError("error for test", "invalid model state"); var result = controller.Display(string.Empty, string.Empty, surveyAnswer) as ViewResult; var model = result.ViewData.Model as TenantPageViewData<SurveyAnswer>; Assert.AreEqual("answer", model.ContentModel.QuestionAnswers.First().Answer); } }
public void SaveSurveyAnswerCreatesBlobContainerForGivenTenantAndSurvey() { var mockTenantStore = new Mock<ITenantStore>(); var mockSurveyContainerFactory = new Mock<ISurveyAnswerContainerFactory>(); var store = new SurveyAnswerStore( mockTenantStore.Object, mockSurveyContainerFactory.Object, new Mock<IAzureQueue<SurveyAnswerStoredMessage>>().Object, null, new Mock<IAzureBlobContainer<List<string>>>().Object); mockTenantStore.Setup(t => t.GetTenant("tenant")).Returns(new Tenant()); mockSurveyContainerFactory.Setup(f => f.Create(It.IsAny<string>(), It.IsAny<string>())) .Returns(new Mock<IAzureBlobContainer<SurveyAnswer>>().Object); var surveyAnswer = new SurveyAnswer { Tenant = "tenant", SlugName = "slug-name" }; store.SaveSurveyAnswer(surveyAnswer); mockTenantStore.Verify(t => t.GetTenant("tenant")); mockSurveyContainerFactory.Verify(f => f.Create("tenant", "slug-name")); }
public void SaveSurveyAnswerSavesAnswerInBlobContainer() { var mockSurveyAnswerBlobContainer = new Mock<IAzureBlobContainer<SurveyAnswer>>(); var mockTenantStore = new Mock<ITenantStore>(); var mockSurveyContainerFactory = new Mock<ISurveyAnswerContainerFactory>(); var store = new SurveyAnswerStore( mockTenantStore.Object, mockSurveyContainerFactory.Object, new Mock<IAzureQueue<SurveyAnswerStoredMessage>>().Object, null, new Mock<IAzureBlobContainer<List<string>>>().Object); mockTenantStore.Setup(t => t.GetTenant(It.IsAny<string>())).Returns(new Tenant()); mockSurveyContainerFactory.Setup(f => f.Create(It.IsAny<string>(), It.IsAny<string>())) .Returns(mockSurveyAnswerBlobContainer.Object); var surveyAnswer = new SurveyAnswer(); store.SaveSurveyAnswer(surveyAnswer); mockTenantStore.Verify(t => t.GetTenant(It.IsAny<string>())); mockSurveyAnswerBlobContainer.Verify(c => c.Save(It.IsAny<string>(), It.Is<SurveyAnswer>(a => a == surveyAnswer))); }
public void BrowseResponsesSetsTheAnswerFromTheStoreInTheModel() { var mockSurveyAnswerStore = new Mock<ISurveyAnswerStore>(); var surveyAnswer = new SurveyAnswer(); mockSurveyAnswerStore.Setup(r => r.GetSurveyAnswerBrowsingContext(It.IsAny<string>(), It.IsAny<string>(), It.IsAny<string>())) .Returns(new SurveyAnswerBrowsingContext { PreviousId = string.Empty, NextId = string.Empty }); mockSurveyAnswerStore.Setup(r => r.GetSurveyAnswer("tenant", "survey-slug", "answer id")) .Returns(surveyAnswer); using (var controller = new SurveysController(null, mockSurveyAnswerStore.Object, null, null, null, null)) { var result = controller.BrowseResponses("tenant", "survey-slug", "answer id") as ViewResult; var model = result.ViewData.Model as TenantPageViewData<BrowseResponseModel>; Assert.AreSame(surveyAnswer, model.ContentModel.SurveyAnswer); } }
public void DisplayWhenPostCallsSaveSurveyAnswerFromSurveyAnswerStoreWithQuestionTypeReadFromTheSurveyWhenModelIsValid() { var survey = new Survey { Questions = new List<Question>( new[] { new Question { Type = QuestionType.SimpleText }, }) }; var mockSurveyStore = new Mock<ISurveyStore>(); mockSurveyStore.Setup(r => r.GetSurveyByTenantAndSlugName(It.IsAny<string>(), It.IsAny<string>(), It.IsAny<bool>())) .Returns(survey); var mockSurveyAnswerStore = new Mock<ISurveyAnswerStore>(); var surveyAnswer = new SurveyAnswer { QuestionAnswers = new List<QuestionAnswer>(new[] { new QuestionAnswer() }) }; using (var controller = new SurveysController(mockSurveyStore.Object, mockSurveyAnswerStore.Object)) { controller.Display(string.Empty, string.Empty, surveyAnswer); } mockSurveyAnswerStore.Verify( r => r.SaveSurveyAnswer( It.Is<SurveyAnswer>(sa => QuestionType.SimpleText == sa.QuestionAnswers[0].QuestionType)), Times.Once()); }