Пример #1
0
        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);
        }
Пример #2
0
        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" }));
        }
Пример #3
0
        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());
        }
Пример #4
0
        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);
        }
Пример #5
0
        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);
        }
Пример #6
0
        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);
        }
Пример #7
0
        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);
        }
Пример #8
0
        public ActionResult EditOld(int id)
        {
            var model = new SurveyEditViewModel
            {
                CategoryId = id
            };

            return(View("~/Views/Admin/Survey/Edit.cshtml", model));
        }
Пример #9
0
        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();
        }
Пример #10
0
        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);
        }
Пример #11
0
        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());
        }
Пример #12
0
        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"));
        }
Пример #13
0
        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());
        }