Skip to content

Commit 3d3105d

Browse files
committed
#283 Initial implementation for without ModelState builder.
1 parent 92ee16b commit 3d3105d

7 files changed

Lines changed: 104 additions & 9 deletions

File tree

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
namespace MyTested.AspNetCore.Mvc.Builders.Contracts.Models
2+
{
3+
public interface IAndWithoutModelStateBuilder : IWithoutModelStateBuilder
4+
{
5+
IWithoutModelStateBuilder AndAlso();
6+
}
7+
}
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
namespace MyTested.AspNetCore.Mvc.Builders.Contracts.Models
2+
{
3+
public interface IWithoutModelStateBuilder
4+
{
5+
IAndWithoutModelStateBuilder WithoutModelState();
6+
7+
IAndWithoutModelStateBuilder WithoutModelState(string key);
8+
}
9+
}
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
namespace MyTested.AspNetCore.Mvc.Builders.Models
2+
{
3+
using Microsoft.AspNetCore.Mvc.ModelBinding;
4+
using MyTested.AspNetCore.Mvc.Internal.TestContexts;
5+
6+
public abstract class BaseModelStateBuilder
7+
{
8+
/// <summary>
9+
/// Abstract <see cref="BaseModelStateBuilder"/> class.
10+
/// </summary>
11+
/// <param name="actionContext"><see cref="ModelStateDictionary"/> to build.</param>
12+
public BaseModelStateBuilder(ActionTestContext actionContext)
13+
=> this.ModelState = actionContext.ModelState;
14+
15+
/// <summary>
16+
/// Gets the <see cref="ModelStateDictionary"/>
17+
/// </summary>
18+
/// <value>The built <see cref="ModelStateDictionary"/></value>
19+
protected ModelStateDictionary ModelState { get; set; }
20+
}
21+
}

src/MyTested.AspNetCore.Mvc.ModelState/Builders/Models/ModelStateBuilder.cs

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -10,20 +10,16 @@
1010
/// <summary>
1111
/// Used for building <see cref="ModelStateDictionary"/>
1212
/// </summary>
13-
public class ModelStateBuilder : IAndModelStateBuilder
13+
public class ModelStateBuilder : BaseModelStateBuilder, IAndModelStateBuilder
1414
{
1515
/// <summary>
1616
/// Initializes a new instance of the <see cref="ModelStateBuilder"/> class.
1717
/// </summary>
1818
/// <param name="actionContext"><see cref="ModelStateDictionary"/> to build.</param>
1919
public ModelStateBuilder(ActionTestContext actionContext)
20-
=> this.ModelState = actionContext.ModelState;
21-
22-
/// <summary>
23-
/// Gets the <see cref="ModelStateDictionary"/>
24-
/// </summary>
25-
/// <value>The built <see cref="ModelStateDictionary"/></value>
26-
protected ModelStateDictionary ModelState { get; set; }
20+
: base(actionContext)
21+
{
22+
}
2723

2824
/// <inheritdoc />
2925
public IAndModelStateBuilder WithError(string key, string errorMessage)
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
namespace MyTested.AspNetCore.Mvc.Builders.Models
2+
{
3+
using MyTested.AspNetCore.Mvc.Builders.Contracts.Models;
4+
using MyTested.AspNetCore.Mvc.Internal.TestContexts;
5+
6+
public class WithoutModelStateBuilder : BaseModelStateBuilder, IAndWithoutModelStateBuilder
7+
{
8+
public WithoutModelStateBuilder(ActionTestContext actionContext)
9+
: base(actionContext)
10+
{
11+
}
12+
13+
public IAndWithoutModelStateBuilder WithoutModelState()
14+
{
15+
this.ModelState.Clear();
16+
return this;
17+
}
18+
19+
public IAndWithoutModelStateBuilder WithoutModelState(string key)
20+
{
21+
if(this.ModelState.ContainsKey(key))
22+
this.ModelState.Remove(key);
23+
24+
return this;
25+
}
26+
27+
public IWithoutModelStateBuilder AndAlso()
28+
=> this;
29+
}
30+
}

src/MyTested.AspNetCore.Mvc.ModelState/ComponentBuilderModelStateExtensions.cs renamed to src/MyTested.AspNetCore.Mvc.ModelState/ComponentBuilderModelStateWithExtensions.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
/// <summary>
1111
/// Contains extension methods for <see cref="IBaseTestBuilderWithComponentBuilder{TBuilder}"/>.
1212
/// </summary>
13-
public static class ComponentBuilderModelStateExtensions
13+
public static class ComponentBuilderModelStateWithExtensions
1414
{
1515
public static TBuilder WithModelState<TBuilder>(
1616
this IBaseTestBuilderWithComponentBuilder<TBuilder> builder,
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
namespace MyTested.AspNetCore.Mvc
2+
{
3+
using System;
4+
using Builders.Base;
5+
using Builders.Contracts.Base;
6+
using Builders.Contracts.Models;
7+
using Builders.Models;
8+
using Internal.TestContexts;
9+
10+
/// <summary>
11+
/// Contains extension methods for <see cref="IBaseTestBuilderWithComponentBuilder{TBuilder}"/>.
12+
/// </summary>
13+
public static class ComponentBuilderModelStateWithoutExtensions
14+
{
15+
public static TBuilder WithoutModelState<TBuilder>(
16+
this IBaseTestBuilderWithComponentBuilder<TBuilder> builder)
17+
where TBuilder : IBaseTestBuilder
18+
=> builder.WithoutModelState(state => state.WithoutModelState());
19+
20+
public static TBuilder WithoutModelState<TBuilder>(
21+
this IBaseTestBuilderWithComponentBuilder<TBuilder> builder,
22+
Action<IWithoutModelStateBuilder> modelStateTestBuilder)
23+
where TBuilder : IBaseTestBuilder
24+
{
25+
var actualBuilder = (BaseTestBuilderWithComponentBuilder<TBuilder>)builder;
26+
27+
modelStateTestBuilder(new WithoutModelStateBuilder(actualBuilder.TestContext as ActionTestContext));
28+
29+
return actualBuilder.Builder;
30+
}
31+
}
32+
}

0 commit comments

Comments
 (0)