public void Edit_CanGetSurvey()
        {
            var dbsetMock = new Mock<IDbSet<Survey>>();
            dbsetMock.Setup(d => d.Find(4)).Returns(new Survey() { SurveyID = 4, SubDomain = "Test", FormHash = "Something" });
            var contextMock = new Mock<ISurveyOrDieContext>();
            contextMock.Setup(c => c.Surveys).Returns(dbsetMock.Object);

            var cont = new SurveyController(contextMock.Object, null);

            ActionResult res = cont.Edit(4);
            Survey retSurv = (res as ViewResult).Model as Survey;
            Assert.IsNotNull(retSurv);
            Assert.AreEqual(4, retSurv.SurveyID);
            Assert.AreEqual("Test", retSurv.SubDomain);
        }
        public void Process_CanProcess()
        {
            var dbsetMock = new Mock<IDbSet<Survey>>();
            dbsetMock.Setup(d => d.Find(4)).Returns(new Survey() { SurveyID = 4, SubDomain = "wibble", FormHash = "zzxyy", ApiKey="2222-3333" });
            var contextMock = new Mock<ISurveyOrDieContext>();
            contextMock.Setup(c => c.Surveys).Returns(dbsetMock.Object);

            var wufooApiMock = new Mock<WufooApi>("one", "two");
            wufooApiMock.Setup(d => d.PutWebHook("zzxyy", It.IsAny<string>(), It.IsAny<string>())).Returns(new WufooApi.WebHookResult() { Hash = "tthh" });
            List<WufooApi.Field> pretendFieldList = new List<WufooApi.Field>();
            pretendFieldList.Add(new WufooApi.Field() { ID = "field1", Title = "something" });
            pretendFieldList.Add(new WufooApi.Field() { ID = "field4", Title = "hidden" });
            wufooApiMock.Setup(d => d.GetFields("zzxyy")).Returns(pretendFieldList);
            var wufooFactoryMock = new Mock<WufooApiFactory>();
            wufooFactoryMock.Setup(d => d.Make("wibble", "2222-3333")).Returns(wufooApiMock.Object);

            var cont = new SurveyController(contextMock.Object, wufooFactoryMock.Object);

            ActionResult res = cont.Process(4);

            int? returnedId = (res as JsonResult).Data as int?;
            Assert.IsTrue(returnedId.HasValue);
            Assert.AreEqual(4, returnedId.Value);

            wufooApiMock.VerifyAll();
        }
        public void Process_DetectsApiFailure()
        {
            var dbsetMock = new Mock<IDbSet<Survey>>();
            dbsetMock.Setup(d => d.Find(4)).Returns(new Survey() { SurveyID = 4, SubDomain = "wibble", FormHash = "zzxyy", ApiKey = "2222-3333" });
            var contextMock = new Mock<ISurveyOrDieContext>();
            contextMock.Setup(c => c.Surveys).Returns(dbsetMock.Object);

            var wufooApiMock = new Mock<WufooApi>("one", "two");
            wufooApiMock.Setup(d => d.PutWebHook("zzxyy", It.IsAny<string>(), It.IsAny<string>())).Returns( (WufooApi.WebHookResult)null);
            var wufooFactoryMock = new Mock<WufooApiFactory>();
            wufooFactoryMock.Setup(d => d.Make("wibble", "2222-3333")).Returns(wufooApiMock.Object);

            var cont = new SurveyController(contextMock.Object, wufooFactoryMock.Object);
            bool expectedErrorFound = false;
            try
            {
                ActionResult res = cont.Process(4);
            }
            catch (ApplicationException appex)
            {
                if (appex.Message.StartsWith("Process action failed to put web hook"))
                    expectedErrorFound = true;
            }

            Assert.IsTrue(expectedErrorFound);
            wufooApiMock.VerifyAll();
        }