-
Notifications
You must be signed in to change notification settings - Fork 21
Expand file tree
/
Copy pathModelTest.cs
More file actions
53 lines (46 loc) · 2.64 KB
/
ModelTest.cs
File metadata and controls
53 lines (46 loc) · 2.64 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
using System;
using System.Linq.Expressions;
using System.Web.Mvc;
namespace TestStack.FluentMVCTesting
{
public interface IModelTest<TModel>
{
IModelErrorTest<TModel> AndModelErrorFor<TAttribute>(Expression<Func<TModel, TAttribute>> memberWithError);
IModelTest<TModel> AndNoModelErrorFor<TAttribute>(Expression<Func<TModel, TAttribute>> memberWithNoError);
IModelErrorTest<TModel> AndModelError(string errorKey);
void AndNoModelErrors();
}
public class ModelTest<TModel> : IModelTest<TModel>
{
private readonly Controller _controller;
public ModelTest(Controller controller)
{
_controller = controller;
}
public IModelErrorTest<TModel> AndModelErrorFor<TAttribute>(Expression<Func<TModel, TAttribute>> memberWithError)
{
var member = ((MemberExpression)memberWithError.Body).Member.Name;
if (!_controller.ModelState.ContainsKey(member) || _controller.ModelState[member].Errors.Count == 0)
throw new ViewResultModelAssertionException(string.Format("Expected controller '{0}' to have a model error for member '{1}', but none found.", _controller.GetType().Name, member));
return new ModelErrorTest<TModel>(this, member, _controller.ModelState[member].Errors);
}
public IModelTest<TModel> AndNoModelErrorFor<TAttribute>(Expression<Func<TModel, TAttribute>> memberWithNoError)
{
var member = ((MemberExpression)memberWithNoError.Body).Member.Name;
if (_controller.ModelState.ContainsKey(member))
throw new ViewResultModelAssertionException(string.Format("Expected controller '{0}' to have no model errors for member '{1}', but found some.", _controller.GetType().Name, member));
return this;
}
public IModelErrorTest<TModel> AndModelError(string errorKey)
{
if (!_controller.ModelState.ContainsKey(errorKey) || _controller.ModelState[errorKey].Errors.Count == 0)
throw new ViewResultModelAssertionException(string.Format("Expected controller '{0}' to have a model error against key '{1}', but none found.", _controller.GetType().Name, errorKey));
return new ModelErrorTest<TModel>(this, errorKey, _controller.ModelState[errorKey].Errors);
}
public void AndNoModelErrors()
{
if (!_controller.ModelState.IsValid)
throw new ViewResultModelAssertionException(string.Format("Expected controller '{0}' to have no model errors, but it had some.", _controller.GetType().Name));
}
}
}