public void EditAsync_CoOwnerIncludesMysteryPerson_ThrowsException() { var tyler = new ApplicationUser() { UserName = "******" }; var survey = new Survey() { Owner = tyler }; var newValues = new SurveyEditViewModel() { SharedUsers = new[] { "Shannon", "Bill" } }; var dbMock = new Mock <IApplicationDBContext>(); var surveyDataMock = new Mock <DbSet <Survey> >().SetupData(new[] { survey }); dbMock.SetupGet(d => d.Surveys).Returns(surveyDataMock.Object); var usersMock = new Mock <DbSet <ApplicationUser> >().SetupData(new[] { tyler }); dbMock.SetupGet(d => d.Users).Returns(usersMock.Object); var subject = new SurveyService(dbMock.Object); var ex = Helpers.Catch <SurveyException>(() => { subject.EditAsync(survey, newValues).Wait(); }); Assert.AreEqual("Unknown users: Shannon, Bill. Please make sure these users have signed into Mood before.", ex.Message); Assert.AreEqual(0, survey.SharedUsers.Count); dbMock.Verify(d => d.SaveChangesAsync(), Times.Never); }
public async Task <ActionResult> Edit(string id, [System.Web.Http.FromBody] SurveyEditViewModel editDetails) { var survey = await surveys.FindAsync(id); if (survey == null) { return(HttpNotFound()); } bool isCoAdmin = survey.SharedUsers.Select(u => u.UserName).Contains(security.UserName); if (survey.Owner.UserName != security.UserName && !isCoAdmin) { return(new HttpStatusCodeResult(HttpStatusCode.Forbidden)); } if (isCoAdmin) // "reset" the incoming co-admins field, only owners should be able to change that { editDetails.SharedUsers = survey.SharedUsers.Select(u => u.UserName); } try { await surveys.EditAsync(survey, editDetails); } catch (SurveyException e) { return(Json(new { error = e.Message })); } return(Json(new { success = "saved" })); }
public void EditAsync_CoOwnerIncludesPerson_AddsPerson() { var tyler = new ApplicationUser() { UserName = "******" }; var shannon = new ApplicationUser() { UserName = "******" }; var survey = new Survey() { Owner = tyler }; var newValues = new SurveyEditViewModel() { SharedUsers = new[] { "Shannon" } }; var dbMock = new Mock <IApplicationDBContext>(); var surveyDataMock = new Mock <DbSet <Survey> >().SetupData(new[] { survey }); dbMock.SetupGet(d => d.Surveys).Returns(surveyDataMock.Object); var usersMock = new Mock <DbSet <ApplicationUser> >().SetupData(new[] { tyler, shannon }); dbMock.SetupGet(d => d.Users).Returns(usersMock.Object); var subject = new SurveyService(dbMock.Object); subject.EditAsync(survey, newValues).Wait(); Assert.AreEqual(1, survey.SharedUsers.Count); dbMock.Verify(d => d.SaveChangesAsync()); }
public void Edit_ServiceOK_ReturnsSuccessJson() { var id = Guid.NewGuid(); var survey = new Survey() { Id = id, Owner = new ApplicationUser() { UserName = "******" } }; var newData = new SurveyEditViewModel() { }; var dbMock = new Mock <IApplicationDBContext>(); var surveysMock = new Mock <ISurveyService>(); surveysMock.Setup(s => s.FindAsync(id.ToString())).ReturnsAsync(survey); var securityMock = new Mock <ISecurity>(); securityMock.SetupGet(s => s.UserName).Returns("Tyler"); var subject = new SurveyController(dbMock.Object, surveysMock.Object, securityMock.Object); var result = subject.Edit(id.ToString(), newData).Result; surveysMock.Verify(s => s.EditAsync(survey, newData)); Assert.IsInstanceOfType(result, typeof(JsonResult)); dynamic jsonData = (result as JsonResult).Data; Assert.IsNotNull(jsonData.success); }
public void EditAsync_CoOwnerIncludesOwner_ThrowsException() { var tyler = new ApplicationUser() { UserName = "******" }; var survey = new Survey() { Owner = tyler }; var newValues = new SurveyEditViewModel() { SharedUsers = new[] { "Tyler" } }; var dbMock = new Mock <IApplicationDBContext>(); var surveyDataMock = new Mock <DbSet <Survey> >().SetupData(new[] { survey }); dbMock.SetupGet(d => d.Surveys).Returns(surveyDataMock.Object); var usersMock = new Mock <DbSet <ApplicationUser> >().SetupData(new[] { tyler }); dbMock.SetupGet(d => d.Users).Returns(usersMock.Object); var subject = new SurveyService(dbMock.Object); var ex = Helpers.Catch <SurveyException>(() => { subject.EditAsync(survey, newValues).Wait(); }); Assert.AreEqual("You cannot be a co-admin on a survey you own.", ex.Message); Assert.AreEqual(0, survey.SharedUsers.Count); dbMock.Verify(d => d.SaveChangesAsync(), Times.Never); }
public void EditAsync_NewNameIsWhitespace_ThrowsException() { var survey = new Survey() { Name = "oldName" }; var newValues = new SurveyEditViewModel() { Name = "\n \t" }; var dbMock = new Mock <IApplicationDBContext>(); var surveyDataMock = new Mock <DbSet <Survey> >().SetupData(new[] { survey }); dbMock.SetupGet(d => d.Surveys).Returns(surveyDataMock.Object); var subject = new SurveyService(dbMock.Object); var ex = Helpers.Catch <SurveyException>(() => { subject.EditAsync(survey, newValues).Wait(); }); Assert.AreEqual("Name must not be whitespace", ex.Message); Assert.AreEqual("oldName", survey.Name); dbMock.Verify(d => d.SaveChangesAsync(), Times.Never); }
public void Edit_ServiceException_ReturnsErrorJson() { var id = Guid.NewGuid(); var survey = new Survey() { Id = id, Owner = new ApplicationUser() { UserName = "******" } }; var newData = new SurveyEditViewModel() { }; var error = "Bad data!"; var dbMock = new Mock <IApplicationDBContext>(); var surveysMock = new Mock <ISurveyService>(); surveysMock.Setup(s => s.FindAsync(id.ToString())).ReturnsAsync(survey); surveysMock.Setup(s => s.EditAsync(survey, newData)).Throws(new SurveyException(error)); var securityMock = new Mock <ISecurity>(); securityMock.SetupGet(s => s.UserName).Returns("Tyler"); var subject = new SurveyController(dbMock.Object, surveysMock.Object, securityMock.Object); var result = subject.Edit(id.ToString(), newData).Result; Assert.IsInstanceOfType(result, typeof(JsonResult)); dynamic jsonData = (result as JsonResult).Data; Assert.AreEqual(error, jsonData.error); }
public ActionResult EditOld(int id) { var model = new SurveyEditViewModel { CategoryId = id }; return(View("~/Views/Admin/Survey/Edit.cshtml", model)); }
public async Task EditAsync(Survey survey, SurveyEditViewModel newValues) { if (survey == null) { throw new ArgumentNullException(nameof(survey)); } if (newValues == null) { throw new ArgumentNullException(nameof(newValues)); } // Handle the co-admins if (newValues.SharedUsers.Any()) { var unknownUsers = newValues.SharedUsers.Except(await db.Users.Select(u => u.UserName).ToListAsync()); if (unknownUsers.Any()) { throw new SurveyException($"Unknown users: {unknownUsers.Aggregate((s1, s2) => s1 + ", " + s2)}. Please make sure these users have signed into Mood before."); } if (newValues.SharedUsers.Contains(survey.Owner.UserName)) { throw new SurveyException("You cannot be a co-admin on a survey you own."); } survey.SharedUsers = await db.Users.Where(u => newValues.SharedUsers.Contains(u.UserName)).ToListAsync(); } else { survey.SharedUsers.Clear(); } // Handle the name string newName = null; if (newValues.Name != null) { newName = newValues.Name.Trim(); if (String.IsNullOrWhiteSpace(newName)) { throw new SurveyException("Name must not be whitespace"); } var blockingSurvey = await FindAsync(newName); if (blockingSurvey != null && blockingSurvey != survey) { throw new SurveyException("That name is already taken"); } } survey.Name = newName; survey.PublicResults = newValues.PublicResults; await db.SaveChangesAsync(); }
public void Edit_UserIsCoOwner_ResetsCoOwnersArgAndReturnsSuccessJson() { var id = Guid.NewGuid(); var survey = new Survey() { Id = id, Owner = new ApplicationUser() { UserName = "******" }, SharedUsers = new[] { new ApplicationUser() { UserName = "******" } } }; var newData = new SurveyEditViewModel() { SharedUsers = new[] { "Shannon", "Bill" } }; var dbMock = new Mock <IApplicationDBContext>(); var surveysMock = new Mock <ISurveyService>(); surveysMock.Setup(s => s.FindAsync(id.ToString())).ReturnsAsync(survey); var securityMock = new Mock <ISecurity>(); securityMock.SetupGet(s => s.UserName).Returns("Shannon"); var subject = new SurveyController(dbMock.Object, surveysMock.Object, securityMock.Object); var result = subject.Edit(id.ToString(), newData).Result; surveysMock.Verify(s => s.EditAsync(survey, It.Is <SurveyEditViewModel>(vm => vm == newData && vm.SharedUsers.Count() == 1 && vm.SharedUsers.First() == "Shannon"))); Assert.IsInstanceOfType(result, typeof(JsonResult)); dynamic jsonData = (result as JsonResult).Data; Assert.IsNotNull(jsonData.success); }
public void EditAsync_NewPublicResultsValue_UpdatesPublicResults() { var survey = new Survey() { PublicResults = false }; var newValues = new SurveyEditViewModel() { PublicResults = true }; var dbMock = new Mock <IApplicationDBContext>(); var subject = new SurveyService(dbMock.Object); subject.EditAsync(survey, newValues).Wait(); Assert.AreEqual(true, survey.PublicResults); dbMock.Verify(d => d.SaveChangesAsync()); }
public ActionResult Edit(SurveyEditViewModel model) { if (!ModelState.IsValid) { return(View("~/Views/Admin/Survey/Edit.cshtml", model)); } this.surveyService.Remove(model.CategoryId); byte[] fileBytes = new byte[model.SurveyFile.ContentLength]; var data = model.SurveyFile.InputStream.Read(fileBytes, 0, Convert.ToInt32(model.SurveyFile.ContentLength)); var stream = model.SurveyFile.InputStream; var survey = this.surveyService.Create(stream); this.modelContext.Surveys.AddRange(survey); this.modelContext.SaveChanges(); return(RedirectToAction("Index", "../Admin/Evaluation")); }
public void EditAsync_NewNameIsNull_NullsTheName() { var survey = new Survey() { Name = "oldName" }; var newValues = new SurveyEditViewModel() { Name = null }; var dbMock = new Mock <IApplicationDBContext>(); var surveyDataMock = new Mock <DbSet <Survey> >().SetupData(new[] { survey }); dbMock.SetupGet(d => d.Surveys).Returns(surveyDataMock.Object); var subject = new SurveyService(dbMock.Object); subject.EditAsync(survey, newValues).Wait(); Assert.IsNull(survey.Name); dbMock.Verify(d => d.SaveChangesAsync()); }