Skip to content

Commit dbf80f2

Browse files
committed
Fix: BePartialViewResult().Model throws NullReferenceException
In ViewResultBaseAssertions.Model, the subject was being cast to ViewResult. This caused a NullReferenceException when the subject was a PartialViewResult. If the subject is cast to ViewResultBase instead, the exception is avoided.
1 parent fb94cb2 commit dbf80f2

File tree

2 files changed

+77
-7
lines changed

2 files changed

+77
-7
lines changed

src/FluentAssertions.Mvc3/ViewResultBaseAssertions.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -111,7 +111,7 @@ public object Model
111111
{
112112
get
113113
{
114-
var model = (Subject as ViewResult).Model;
114+
var model = (Subject as ViewResultBase).Model;
115115
return model;
116116
}
117117
}

tests/FluentAssertions.Mvc3.Tests/ViewResultAssertions_Tests.cs

Lines changed: 76 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -187,7 +187,7 @@ public void WithViewData_GivenUnexpectedKey_ShouldFail()
187187
}
188188

189189
[Test]
190-
public void Model_GivenExpectedValue_ShouldPass()
190+
public void Model_ForViewResult_GivenExpectedValue_ShouldPass()
191191
{
192192
ActionResult result = new ViewResult
193193
{
@@ -198,7 +198,18 @@ public void Model_GivenExpectedValue_ShouldPass()
198198
}
199199

200200
[Test]
201-
public void Model_GivenUnexpectedValue_ShouldFail()
201+
public void Model_ForPartialViewResult_GivenExpectedValue_ShouldPass()
202+
{
203+
ActionResult result = new PartialViewResult
204+
{
205+
ViewData = new ViewDataDictionary("hello")
206+
};
207+
208+
result.Should().BePartialViewResult().Model.Should().Be("hello");
209+
}
210+
211+
[Test]
212+
public void Model_ForViewResult_GivenUnexpectedValue_ShouldFail()
202213
{
203214
ActionResult result = new ViewResult
204215
{
@@ -210,7 +221,19 @@ public void Model_GivenUnexpectedValue_ShouldFail()
210221
}
211222

212223
[Test]
213-
public void ModelAs_GivenExpectedValue_ShouldPass()
224+
public void Model_ForPartialViewResult_GivenUnexpectedValue_ShouldFail()
225+
{
226+
ActionResult result = new PartialViewResult
227+
{
228+
ViewData = new ViewDataDictionary("hello")
229+
};
230+
231+
Action a = () => result.Should().BePartialViewResult().Model.Should().Be("xyx");
232+
a.ShouldThrow<Exception>();
233+
}
234+
235+
[Test]
236+
public void ModelAs_ForViewResult_GivenExpectedValue_ShouldPass()
214237
{
215238
ActionResult result = new ViewResult
216239
{
@@ -221,7 +244,18 @@ public void ModelAs_GivenExpectedValue_ShouldPass()
221244
}
222245

223246
[Test]
224-
public void ModelAs_GivenUnexpectedValue_ShouldFail()
247+
public void ModelAs_ForPartialViewResult_GivenExpectedValue_ShouldPass()
248+
{
249+
ActionResult result = new PartialViewResult
250+
{
251+
ViewData = new ViewDataDictionary("hello")
252+
};
253+
254+
result.Should().BePartialViewResult().ModelAs<string>().Should().Be("hello");
255+
}
256+
257+
[Test]
258+
public void ModelAs_ForViewResult_GivenUnexpectedValue_ShouldFail()
225259
{
226260
ActionResult result = new ViewResult
227261
{
@@ -233,7 +267,19 @@ public void ModelAs_GivenUnexpectedValue_ShouldFail()
233267
}
234268

235269
[Test]
236-
public void ModelAs_GivenWrongType_ShouldFail()
270+
public void ModelAs_ForPartialViewResult_GivenUnexpectedValue_ShouldFail()
271+
{
272+
ActionResult result = new PartialViewResult
273+
{
274+
ViewData = new ViewDataDictionary("hello")
275+
};
276+
277+
Action a = () => result.Should().BePartialViewResult().ModelAs<string>().Should().Be("xyx");
278+
a.ShouldThrow<Exception>();
279+
}
280+
281+
[Test]
282+
public void ModelAs_ForViewResult_GivenWrongType_ShouldFail()
237283
{
238284
ActionResult result = new ViewResult
239285
{
@@ -245,7 +291,19 @@ public void ModelAs_GivenWrongType_ShouldFail()
245291
}
246292

247293
[Test]
248-
public void ModelAs_Null_ShouldFail()
294+
public void ModelAs_ForPartialViewResult_GivenWrongType_ShouldFail()
295+
{
296+
ActionResult result = new PartialViewResult
297+
{
298+
ViewData = new ViewDataDictionary("hello")
299+
};
300+
301+
Action a = () => result.Should().BePartialViewResult().ModelAs<int>().Should().Be(2);
302+
a.ShouldThrow<Exception>();
303+
}
304+
305+
[Test]
306+
public void ModelAs_ForViewResult_Null_ShouldFail()
249307
{
250308
ActionResult result = new ViewResult();
251309
string failureMessage = FailureMessageHelper.Format(FailureMessages.ViewResultBase_NullModel, typeof(Object).Name);
@@ -256,6 +314,18 @@ public void ModelAs_Null_ShouldFail()
256314
.WithMessage(failureMessage);
257315
}
258316

317+
[Test]
318+
public void ModelAs_ForPartialViewResult_Null_ShouldFail()
319+
{
320+
ActionResult result = new PartialViewResult();
321+
string failureMessage = FailureMessageHelper.Format(FailureMessages.ViewResultBase_NullModel, typeof(Object).Name);
322+
323+
Action a = () => result.Should().BePartialViewResult().ModelAs<Object>();
324+
325+
a.ShouldThrow<Exception>()
326+
.WithMessage(failureMessage);
327+
}
328+
259329
[Test]
260330
public void WithDefaultViewName_GivenExpectedValue_ShouldPass()
261331
{

0 commit comments

Comments
 (0)