From d637f290a90d99735849c0d91b23d7af6ea6531a Mon Sep 17 00:00:00 2001 From: Sean Gilbert Date: Sun, 17 Feb 2013 08:36:34 -0500 Subject: [PATCH 1/2] Added support for testing ViewBag and ViewData using WithViewBag and WithViewData + added unit tests. --- .../TestStack.FluentMVCTesting.Mvc3.csproj | 3 + .../packages.config | 1 + .../ViewResultTestTests.cs | 70 ++++++++++++++++++- .../TestStack.FluentMVCTesting.csproj | 3 + TestStack.FluentMvcTesting/ViewResultTest.cs | 32 +++++++++ TestStack.FluentMvcTesting/packages.config | 1 + 6 files changed, 109 insertions(+), 1 deletion(-) diff --git a/TestStack.FluentMVCTesting.Mvc3/TestStack.FluentMVCTesting.Mvc3.csproj b/TestStack.FluentMVCTesting.Mvc3/TestStack.FluentMVCTesting.Mvc3.csproj index c283c51..929dbf9 100644 --- a/TestStack.FluentMVCTesting.Mvc3/TestStack.FluentMVCTesting.Mvc3.csproj +++ b/TestStack.FluentMVCTesting.Mvc3/TestStack.FluentMVCTesting.Mvc3.csproj @@ -36,6 +36,9 @@ false + + ..\packages\ImpromptuInterface.6.0.6\lib\net40\ImpromptuInterface.dll + True ..\packages\Microsoft.Web.Infrastructure.1.0.0.0\lib\net40\Microsoft.Web.Infrastructure.dll diff --git a/TestStack.FluentMVCTesting.Mvc3/packages.config b/TestStack.FluentMVCTesting.Mvc3/packages.config index cc65639..e71cd69 100644 --- a/TestStack.FluentMVCTesting.Mvc3/packages.config +++ b/TestStack.FluentMVCTesting.Mvc3/packages.config @@ -1,5 +1,6 @@  + diff --git a/TestStack.FluentMVCTesting.Tests/ViewResultTestTests.cs b/TestStack.FluentMVCTesting.Tests/ViewResultTestTests.cs index 56ee166..95a7eb3 100644 --- a/TestStack.FluentMVCTesting.Tests/ViewResultTestTests.cs +++ b/TestStack.FluentMVCTesting.Tests/ViewResultTestTests.cs @@ -1,4 +1,9 @@ -using System.Web.Mvc; +// + +using System; +using System.Collections.Generic; +using System.Web.Mvc; +// using NUnit.Framework; namespace TestStack.FluentMVCTesting.Tests @@ -19,6 +24,69 @@ public void Setup() _viewResultTest = new ViewResultTest(_viewResult, new ViewTestController()); } + [Test] + public void Check_string_message_key_on_viewbag() + { + _viewResult.ViewBag.Message = "Hello View Data Message"; + Assert.That(_viewResultTest.WithViewBag("Message"), Is.EqualTo("Hello View Data Message")); + } + + [Test] + public void Check_int_message_key_on_viewbag() + { + _viewResult.ViewBag.Page = 1; + Assert.That(_viewResultTest.WithViewBag("Page"), Is.EqualTo(1)); + } + + [Test] + public void Check_wrong_message_member_name_passed_missing_member_message_for_viewbag() + { + _viewResult.ViewBag.Message = "Hello View Data Message"; + + var exception = Assert.Throws(() => + _viewResultTest.WithViewBag("Message2") + ); + + Assert.That(exception.Message, Is.EqualTo("Member 'ViewBag.Message2' not found.")); + } + + + [Test] + public void Check_string_message_key_on_viewdata() + { + _viewResult.ViewData["Message"] = "Hello View Data Message"; + Assert.That(_viewResultTest.WithViewData("Message"), Is.EqualTo("Hello View Data Message")); + } + + [Test] + public void Check_int_message_key_on_viewdata() + { + _viewResult.ViewData["Page"] = 1; + Assert.That(_viewResultTest.WithViewData("Page"), Is.EqualTo(1)); + } + + [Test] + public void Check_wrong_message_key_passed_missing_message_key_for_viewdata() + { + _viewResult.ViewData["Message"] = "Hello View Data Message"; + + var exception = Assert.Throws(() => + _viewResultTest.WithViewData("Message2") + ); + + Assert.That(exception.Message, Is.EqualTo("Exception with ViewData, 'Message2' key not found")); + } + + [Test] + public void Check_row_count_zero_for_viewdata() + { + var exception = Assert.Throws(() => + _viewResultTest.WithViewData("Message") + ); + + Assert.That(exception.Message, Is.EqualTo("Exception with ViewData, 'Message' key not found")); + } + [Test] public void Check_the_type_of_model() { diff --git a/TestStack.FluentMvcTesting/TestStack.FluentMVCTesting.csproj b/TestStack.FluentMvcTesting/TestStack.FluentMVCTesting.csproj index ef5626b..2999c4d 100644 --- a/TestStack.FluentMvcTesting/TestStack.FluentMVCTesting.csproj +++ b/TestStack.FluentMvcTesting/TestStack.FluentMVCTesting.csproj @@ -36,6 +36,9 @@ false + + ..\packages\ImpromptuInterface.6.0.6\lib\net40\ImpromptuInterface.dll + True ..\packages\Microsoft.Web.Infrastructure.1.0.0.0\lib\net40\Microsoft.Web.Infrastructure.dll diff --git a/TestStack.FluentMvcTesting/ViewResultTest.cs b/TestStack.FluentMvcTesting/ViewResultTest.cs index 3f13236..fd42776 100644 --- a/TestStack.FluentMvcTesting/ViewResultTest.cs +++ b/TestStack.FluentMvcTesting/ViewResultTest.cs @@ -1,5 +1,10 @@ +// using System; +using System.Collections.Generic; using System.Web.Mvc; +using System.Linq; +// +using ImpromptuInterface; namespace TestStack.FluentMVCTesting { @@ -13,6 +18,33 @@ public ViewResultTest(ViewResultBase viewResult, Controller controller) _viewResult = viewResult; _controller = controller; } + + public TMember WithViewBag(string psMemberName) + { + TMember member = default(TMember); + var target = _viewResult.ViewBag; + + IEnumerable memberNames = Impromptu.GetMemberNames(_viewResult.ViewBag, true); + if ( !memberNames.Contains(psMemberName) ) + throw new MissingMemberException("ViewBag",psMemberName); + + member = Impromptu.InvokeGet(target, psMemberName); + + return member; + } + public TProperty WithViewData(string psKeyName) + { + if (_viewResult.ViewData == null || _viewResult.ViewData.Count <= 0 || !_viewResult.ViewData.ContainsKey(psKeyName)) + throw new KeyNotFoundException(string.Format("Exception with ViewData, '{0}' key not found",psKeyName)); + + var target = _viewResult.ViewData; + TProperty propertyValue = default(TProperty); + + if (target != null) + propertyValue = (TProperty)target[psKeyName]; + + return propertyValue; + } public ModelTest WithModel() where TModel : class { diff --git a/TestStack.FluentMvcTesting/packages.config b/TestStack.FluentMvcTesting/packages.config index 8fb83ab..cd28967 100644 --- a/TestStack.FluentMvcTesting/packages.config +++ b/TestStack.FluentMvcTesting/packages.config @@ -1,5 +1,6 @@  + From d09ee7cfa6a637db724601f1afae0d13a5aea58d Mon Sep 17 00:00:00 2001 From: Sean Gilbert Date: Sun, 17 Feb 2013 08:41:02 -0500 Subject: [PATCH 2/2] Added spacer between namespaces to make it more readible. --- .../ControllerExtensionsTests.cs | 4 +++- .../ControllerResultTestTests.cs | 5 ++++- TestStack.FluentMVCTesting.Tests/ModelErrorTestTests.cs | 5 ++++- TestStack.FluentMVCTesting.Tests/ModelTestTests.cs | 3 ++- TestStack.FluentMVCTesting.Tests/ViewResultTestTests.cs | 1 - TestStack.FluentMvcTesting/ControllerExtensions.cs | 3 ++- TestStack.FluentMvcTesting/ControllerResultTest.cs | 1 + TestStack.FluentMvcTesting/Exceptions.cs | 3 ++- TestStack.FluentMvcTesting/ModelErrorTest.cs | 1 + TestStack.FluentMvcTesting/ModelTest.cs | 1 + 10 files changed, 20 insertions(+), 7 deletions(-) diff --git a/TestStack.FluentMVCTesting.Tests/ControllerExtensionsTests.cs b/TestStack.FluentMVCTesting.Tests/ControllerExtensionsTests.cs index 685aa3e..5d92c58 100644 --- a/TestStack.FluentMVCTesting.Tests/ControllerExtensionsTests.cs +++ b/TestStack.FluentMVCTesting.Tests/ControllerExtensionsTests.cs @@ -1,4 +1,6 @@ -using NUnit.Framework; +// +using NUnit.Framework; +// using TestStack.FluentMVCTesting.Tests.TestControllers; namespace TestStack.FluentMVCTesting.Tests diff --git a/TestStack.FluentMVCTesting.Tests/ControllerResultTestTests.cs b/TestStack.FluentMVCTesting.Tests/ControllerResultTestTests.cs index 50b9456..43ccaf5 100644 --- a/TestStack.FluentMVCTesting.Tests/ControllerResultTestTests.cs +++ b/TestStack.FluentMVCTesting.Tests/ControllerResultTestTests.cs @@ -1,9 +1,12 @@ -using System; +// +using System; using System.Collections.Generic; using System.Linq.Expressions; using System.Net; using System.Web.Mvc; +// using NUnit.Framework; +// using TestStack.FluentMVCTesting.Tests.TestControllers; namespace TestStack.FluentMVCTesting.Tests diff --git a/TestStack.FluentMVCTesting.Tests/ModelErrorTestTests.cs b/TestStack.FluentMVCTesting.Tests/ModelErrorTestTests.cs index ee173c5..4778372 100644 --- a/TestStack.FluentMVCTesting.Tests/ModelErrorTestTests.cs +++ b/TestStack.FluentMVCTesting.Tests/ModelErrorTestTests.cs @@ -1,8 +1,11 @@ -using System; +using System;// + using System.Collections.Generic; using System.Linq.Expressions; using System.Web.Mvc; +// using NSubstitute; +// using NUnit.Framework; namespace TestStack.FluentMVCTesting.Tests diff --git a/TestStack.FluentMVCTesting.Tests/ModelTestTests.cs b/TestStack.FluentMVCTesting.Tests/ModelTestTests.cs index 9c28537..52299d4 100644 --- a/TestStack.FluentMVCTesting.Tests/ModelTestTests.cs +++ b/TestStack.FluentMVCTesting.Tests/ModelTestTests.cs @@ -1,4 +1,5 @@ -using NUnit.Framework; +// +using NUnit.Framework; namespace TestStack.FluentMVCTesting.Tests { diff --git a/TestStack.FluentMVCTesting.Tests/ViewResultTestTests.cs b/TestStack.FluentMVCTesting.Tests/ViewResultTestTests.cs index 95a7eb3..77d265f 100644 --- a/TestStack.FluentMVCTesting.Tests/ViewResultTestTests.cs +++ b/TestStack.FluentMVCTesting.Tests/ViewResultTestTests.cs @@ -1,5 +1,4 @@ // - using System; using System.Collections.Generic; using System.Web.Mvc; diff --git a/TestStack.FluentMvcTesting/ControllerExtensions.cs b/TestStack.FluentMvcTesting/ControllerExtensions.cs index e1c223c..6bbeba3 100644 --- a/TestStack.FluentMvcTesting/ControllerExtensions.cs +++ b/TestStack.FluentMvcTesting/ControllerExtensions.cs @@ -1,4 +1,5 @@ -using System; +// +using System; using System.Linq.Expressions; using System.Web.Mvc; diff --git a/TestStack.FluentMvcTesting/ControllerResultTest.cs b/TestStack.FluentMvcTesting/ControllerResultTest.cs index e6b97e2..95fba15 100644 --- a/TestStack.FluentMvcTesting/ControllerResultTest.cs +++ b/TestStack.FluentMvcTesting/ControllerResultTest.cs @@ -1,3 +1,4 @@ +// using System; using System.Linq.Expressions; using System.Net; diff --git a/TestStack.FluentMvcTesting/Exceptions.cs b/TestStack.FluentMvcTesting/Exceptions.cs index 6230617..56d58e6 100644 --- a/TestStack.FluentMvcTesting/Exceptions.cs +++ b/TestStack.FluentMvcTesting/Exceptions.cs @@ -1,4 +1,5 @@ -using System; +// +using System; namespace TestStack.FluentMVCTesting { diff --git a/TestStack.FluentMvcTesting/ModelErrorTest.cs b/TestStack.FluentMvcTesting/ModelErrorTest.cs index b8bc717..3812266 100644 --- a/TestStack.FluentMvcTesting/ModelErrorTest.cs +++ b/TestStack.FluentMvcTesting/ModelErrorTest.cs @@ -1,3 +1,4 @@ +// using System; using System.Collections.Generic; using System.Linq; diff --git a/TestStack.FluentMvcTesting/ModelTest.cs b/TestStack.FluentMvcTesting/ModelTest.cs index 992ac7c..a25fb7e 100644 --- a/TestStack.FluentMvcTesting/ModelTest.cs +++ b/TestStack.FluentMvcTesting/ModelTest.cs @@ -1,3 +1,4 @@ +// using System; using System.Linq.Expressions; using System.Web.Mvc;