public void WhenQueryingForQuestionnareTemplates_ThenProvidesQuestionnaireTemplateResult() { AsyncResult<IEnumerable<QuestionnaireTemplate>> ar = null; QuestionnaireTemplate[] suppliedQuestionnaire = new[] { new QuestionnaireTemplate() }; var serviceMock = new MockQuestionnaireService(); serviceMock.HandleBeginGetQuestionnaireTemplates = (r) => ar = r; var repository = new QuestionnaireRepository(serviceMock); IOperationResult<IEnumerable<QuestionnaireTemplate>> getResult = null; repository.GetQuestionnaireTemplatesAsync((result) => getResult = result); serviceMock.ProceedGetQuestionnaireTemplates(ar, suppliedQuestionnaire); EnqueueConditional(() => getResult != null); EnqueueCallback(() => { Assert.AreSame(suppliedQuestionnaire.ElementAt(0), getResult.Result.ElementAt(0)); }); EnqueueTestComplete(); }
public void WhenQueryingForQuestionnaireTemplates_ThenInvokesCallback() { AsyncResult<IEnumerable<QuestionnaireTemplate>> ar = null; var serviceMock = new MockQuestionnaireService(); serviceMock.HandleBeginGetQuestionnaireTemplates = (r) => ar = r; var repository = new QuestionnaireRepository(serviceMock); bool calledBack = false; repository.GetQuestionnaireTemplatesAsync((result) => { calledBack = true; }); serviceMock.ProceedGetQuestionnaireTemplates(ar, new[] { new QuestionnaireTemplate() }); EnqueueConditional(() => calledBack); EnqueueCallback(() => { Assert.IsTrue(calledBack); }); EnqueueTestComplete(); }
public void WhenQueryingForQuestionnaires_ThenPostsCallingThreadsSyncContext() { var mockAsyncResult = new Mock<IAsyncResult>(); var mockService = new Mock<IQuestionnaireService>(); mockService .Setup(s => s.BeginGetQuestionnaireTemplates(It.IsAny<AsyncCallback>(), It.IsAny<object>())) .Returns(mockAsyncResult.Object) .Callback<AsyncCallback, object>((c, o) => { System.Threading.ThreadPool.QueueUserWorkItem( (state) => { c(mockAsyncResult.Object); }); }); mockService .Setup(s => s.EndGetQuestionnaireTemplates(It.IsAny<IAsyncResult>())) .Returns(new[] { new QuestionnaireTemplate() }); var repository = new QuestionnaireRepository(mockService.Object); int callingThreadId = System.Threading.Thread.CurrentThread.ManagedThreadId; int calledBackThreadId = 0; IOperationResult<IEnumerable<QuestionnaireTemplate>> getResult = null; repository.GetQuestionnaireTemplatesAsync((r) => { getResult = r; calledBackThreadId = System.Threading.Thread.CurrentThread.ManagedThreadId; } ); EnqueueConditional(() => getResult != null); EnqueueCallback(() => { Assert.AreEqual(callingThreadId, calledBackThreadId); }); EnqueueTestComplete(); }
public void WhenServiceThrowsAnError_ThenErrorIsCaptured() { var mockAsyncResult = new Mock<IAsyncResult>(); var mockService = new Mock<IQuestionnaireService>(); mockService .Setup(s => s.BeginGetQuestionnaireTemplates(It.IsAny<AsyncCallback>(), It.IsAny<object>())) .Returns(mockAsyncResult.Object) .Callback<AsyncCallback, object>((c, o) => { c(mockAsyncResult.Object); }); mockService .Setup(s => s.EndGetQuestionnaireTemplates(It.IsAny<IAsyncResult>())) .Throws(new NotImplementedException("TestException")); var repository = new QuestionnaireRepository(mockService.Object); IOperationResult<IEnumerable<QuestionnaireTemplate>> getResult = null; repository.GetQuestionnaireTemplatesAsync((r) => { getResult = r; }); EnqueueConditional(() => getResult != null); EnqueueCallback(() => { Assert.IsInstanceOfType(getResult.Error, typeof(NotImplementedException)); }); EnqueueTestComplete(); }