Skip to content

Commit 0536950

Browse files
committed
#283 Adding WithoutData and WithoutSet for the database context builder.
Adding tests for WithoutData method. Not including tests for WithoutSet.
1 parent 468442e commit 0536950

File tree

5 files changed

+414
-28
lines changed

5 files changed

+414
-28
lines changed

src/MyTested.AspNetCore.Mvc.EntityFrameworkCore/Builders/Contracts/Data/IDbContextBuilder.cs

Lines changed: 75 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,13 @@ public interface IDbContextBuilder
1616
/// <returns>The same <see cref="DbContext"/> builder.</returns>
1717
IAndDbContextBuilder WithEntities(IEnumerable<object> entities);
1818

19+
/// <summary>
20+
/// Remove values from the registered <see cref="DbContext"/>.
21+
/// </summary>
22+
/// <param name="entities">Values to remove from the registered <see cref="DbContext"/>.</param>
23+
/// <returns>The same <see cref="DbContext"/> builder.</returns>
24+
IAndDbContextBuilder WithoutEntities(IEnumerable<object> entities);
25+
1926
/// <summary>
2027
/// Sets initial values to the provided <see cref="DbContext"/>.
2128
/// </summary>
@@ -24,14 +31,30 @@ public interface IDbContextBuilder
2431
/// <returns>The same <see cref="DbContext"/> builder.</returns>
2532
IAndDbContextBuilder WithEntities<TDbContext>(IEnumerable<object> entities)
2633
where TDbContext : DbContext;
27-
34+
35+
/// <summary>
36+
/// Remove values from the registered <see cref="DbContext"/>.
37+
/// </summary>
38+
/// <typeparam name="TDbContext">Type of <see cref="DbContext"/> to set up.</typeparam>
39+
/// <param name="entities">Values to remove from the registered <see cref="DbContext"/>.</param>
40+
/// <returns>The same <see cref="DbContext"/> builder.</returns>
41+
IAndDbContextBuilder WithoutEntities<TDbContext>(IEnumerable<object> entities)
42+
where TDbContext : DbContext;
43+
2844
/// <summary>
2945
/// Sets initial values to the registered <see cref="DbContext"/>.
3046
/// </summary>
3147
/// <param name="entities">Initial values to add to the registered <see cref="DbContext"/>.</param>
3248
/// <returns>The same <see cref="DbContext"/> builder.</returns>
3349
IAndDbContextBuilder WithEntities(params object[] entities);
3450

51+
/// <summary>
52+
/// Remove values from the registered <see cref="DbContext"/>.
53+
/// </summary>
54+
/// <param name="entities">Values to remove from the registered <see cref="DbContext"/>.</param>
55+
/// <returns>The same <see cref="DbContext"/> builder.</returns>
56+
IAndDbContextBuilder WithoutEntities(params object[] entities);
57+
3558
/// <summary>
3659
/// Sets initial values to the provided <see cref="DbContext"/>.
3760
/// </summary>
@@ -41,13 +64,29 @@ IAndDbContextBuilder WithEntities<TDbContext>(IEnumerable<object> entities)
4164
IAndDbContextBuilder WithEntities<TDbContext>(params object[] entities)
4265
where TDbContext : DbContext;
4366

67+
/// <summary>
68+
/// Remove values from the provided <see cref="DbContext"/>.
69+
/// </summary>
70+
/// <typeparam name="TDbContext">Type of <see cref="DbContext"/> to set up.</typeparam>
71+
/// <param name="entities">Values to remove from the provided <see cref="DbContext"/>.</param>
72+
/// <returns>The same <see cref="DbContext"/> builder.</returns>
73+
IAndDbContextBuilder WithoutEntities<TDbContext>(params object[] entities)
74+
where TDbContext : DbContext;
75+
4476
/// <summary>
4577
/// Sets initial values to the registered <see cref="DbContext"/>.
4678
/// </summary>
4779
/// <param name="dbContextSetup">Action setting the <see cref="DbContext"/>.</param>
4880
/// <returns>The same <see cref="DbContext"/> builder.</returns>
4981
IAndDbContextBuilder WithEntities(Action<DbContext> dbContextSetup);
5082

83+
/// <summary>
84+
/// Remove values from the registered <see cref="DbContext"/>.
85+
/// </summary>
86+
/// <param name="dbContextSetup">Action setting the <see cref="DbContext"/>.</param>
87+
/// <returns>The same <see cref="DbContext"/> builder.</returns>
88+
IAndDbContextBuilder WithoutEntities(Action<DbContext> dbContextSetup);
89+
5190
/// <summary>
5291
/// Sets initial values to the provided <see cref="DbContext"/>.
5392
/// </summary>
@@ -57,6 +96,21 @@ IAndDbContextBuilder WithEntities<TDbContext>(params object[] entities)
5796
IAndDbContextBuilder WithEntities<TDbContext>(Action<TDbContext> dbContextSetup)
5897
where TDbContext : DbContext;
5998

99+
/// <summary>
100+
/// Remove values from the provided <see cref="DbContext"/>.
101+
/// </summary>
102+
/// <typeparam name="TDbContext">Type of <see cref="DbContext"/> to set up.</typeparam>
103+
/// <param name="dbContextSetup">Action setting the <see cref="DbContext"/>.</param>
104+
/// <returns>The same <see cref="DbContext"/> builder.</returns>
105+
IAndDbContextBuilder WithoutEntities<TDbContext>(Action<TDbContext> dbContextSetup)
106+
where TDbContext : DbContext;
107+
108+
/// <summary>
109+
/// Wipe the whole database data, returning it to a clean state.
110+
/// </summary>
111+
/// <returns>The same <see cref="DbContext"/> builder.</returns>
112+
IAndDbContextBuilder WipeDatabase();
113+
60114
/// <summary>
61115
/// Sets initial values to the provided <see cref="DbContext"/> entity.
62116
/// </summary>
@@ -66,6 +120,15 @@ IAndDbContextBuilder WithEntities<TDbContext>(Action<TDbContext> dbContextSetup)
66120
IAndDbContextBuilder WithSet<TEntity>(Action<DbSet<TEntity>> entitySetup)
67121
where TEntity : class;
68122

123+
/// <summary>
124+
/// Remove values from the provided <see cref="DbContext"/> entity.
125+
/// </summary>
126+
/// <typeparam name="TEntity">Type of entity to remove.</typeparam>
127+
/// <param name="entitySetup">Action setting the <see cref="DbContext"/> entity.</param>
128+
/// <returns>The same <see cref="DbContext"/> builder.</returns>
129+
IAndDbContextBuilder WithoutSet<TEntity>(Action<DbSet<TEntity>> entitySetup)
130+
where TEntity : class;
131+
69132
/// <summary>
70133
/// Sets initial values to the provided <see cref="DbContext"/> entity.
71134
/// </summary>
@@ -76,5 +139,16 @@ IAndDbContextBuilder WithSet<TEntity>(Action<DbSet<TEntity>> entitySetup)
76139
IAndDbContextBuilder WithSet<TDbContext, TEntity>(Action<DbSet<TEntity>> entitySetup)
77140
where TDbContext : DbContext
78141
where TEntity : class;
142+
143+
/// <summary>
144+
/// Remove values from the provided <see cref="DbContext"/> entity.
145+
/// </summary>
146+
/// <typeparam name="TDbContext">Type of <see cref="DbContext"/> to remove values from.</typeparam>
147+
/// <typeparam name="TEntity">Type of entity to remove.</typeparam>
148+
/// <param name="entitySetup">Action setting the <see cref="DbContext"/> entity.</param>
149+
/// <returns>The same <see cref="DbContext"/> builder.</returns>
150+
IAndDbContextBuilder WithoutSet<TDbContext, TEntity>(Action<DbSet<TEntity>> entitySetup)
151+
where TDbContext : DbContext
152+
where TEntity : class;
79153
}
80154
}

src/MyTested.AspNetCore.Mvc.EntityFrameworkCore/Builders/Data/DbContextBuilder.cs

Lines changed: 60 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ public IAndDbContextBuilder WithEntities(IEnumerable<object> entities)
2828
=> this.WithEntities(dbContext => dbContext.AddRange(entities));
2929

3030
/// <inheritdoc />
31-
public IAndDbContextBuilder WithEntities<TDbContext>(IEnumerable<object> entities)
31+
public IAndDbContextBuilder WithEntities<TDbContext>(IEnumerable<object> entities)
3232
where TDbContext : DbContext
3333
=> this.WithEntities<TDbContext>(dbContext => dbContext.AddRange(entities));
3434

@@ -42,7 +42,7 @@ public IAndDbContextBuilder WithEntities<TDbContext>(params object[] entities)
4242
=> this.WithEntities<TDbContext>(entities.AsEnumerable());
4343

4444
/// <inheritdoc />
45-
public IAndDbContextBuilder WithEntities(Action<DbContext> dbContextSetup)
45+
public IAndDbContextBuilder WithEntities(Action<DbContext> dbContextSetup)
4646
=> this.WithEntities<DbContext>(dbContextSetup);
4747

4848
/// <inheritdoc />
@@ -60,7 +60,7 @@ public IAndDbContextBuilder WithEntities<TDbContext>(Action<TDbContext> dbContex
6060

6161
/// <inheritdoc />
6262
public IAndDbContextBuilder WithSet<TEntity>(Action<DbSet<TEntity>> entitySetup)
63-
where TEntity : class
63+
where TEntity : class
6464
=> this.WithSet<DbContext, TEntity>(entitySetup);
6565

6666
/// <inheritdoc />
@@ -79,5 +79,62 @@ public IAndDbContextBuilder WithSet<TDbContext, TEntity>(Action<DbSet<TEntity>>
7979

8080
/// <inheritdoc />
8181
public IDbContextBuilder AndAlso() => this;
82+
83+
/// <inheritdoc />
84+
public IAndDbContextBuilder WithoutEntities(IEnumerable<object> entities)
85+
=> this.WithoutEntities(dbContext => dbContext.RemoveRange(entities));
86+
87+
/// <inheritdoc />
88+
public IAndDbContextBuilder WithoutEntities<TDbContext>(IEnumerable<object> entities)
89+
where TDbContext : DbContext
90+
=> this.WithoutEntities<TDbContext>(dbContext => dbContext.RemoveRange(entities));
91+
92+
/// <inheritdoc />
93+
public IAndDbContextBuilder WithoutEntities(params object[] entities)
94+
=> this.WithoutEntities(entities.AsEnumerable());
95+
96+
/// <inheritdoc />
97+
public IAndDbContextBuilder WithoutEntities<TDbContext>(params object[] entities)
98+
where TDbContext : DbContext
99+
=> this.WithoutEntities<TDbContext>(entities.AsEnumerable());
100+
101+
/// <inheritdoc />
102+
public IAndDbContextBuilder WithoutEntities(Action<DbContext> dbContextSetup)
103+
=> this.WithoutEntities<DbContext>(dbContextSetup);
104+
105+
/// <inheritdoc />
106+
public IAndDbContextBuilder WipeDatabase()
107+
=> this.WithEntities<DbContext>(dbContext => dbContext.Database.EnsureDeleted());
108+
109+
/// <inheritdoc />
110+
public IAndDbContextBuilder WithoutEntities<TDbContext>(Action<TDbContext> dbContextSetup) where TDbContext : DbContext
111+
{
112+
CommonValidator.CheckForNullReference(dbContextSetup, nameof(dbContextSetup));
113+
114+
var dbContext = this.TestContext.GetDbContext<TDbContext>();
115+
dbContextSetup(dbContext);
116+
dbContext.SaveChanges();
117+
118+
return this;
119+
}
120+
121+
/// <inheritdoc />
122+
public IAndDbContextBuilder WithoutSet<TEntity>(Action<DbSet<TEntity>> entitySetup)
123+
where TEntity : class
124+
=> this.WithoutSet<DbContext, TEntity>(entitySetup);
125+
126+
/// <inheritdoc />
127+
public IAndDbContextBuilder WithoutSet<TDbContext, TEntity>(Action<DbSet<TEntity>> entitySetup)
128+
where TDbContext : DbContext
129+
where TEntity : class
130+
{
131+
CommonValidator.CheckForNullReference(entitySetup, nameof(entitySetup));
132+
133+
var dbContext = this.TestContext.GetDbContext<TDbContext>();
134+
entitySetup(dbContext.Set<TEntity>());
135+
dbContext.SaveChanges();
136+
137+
return this;
138+
}
82139
}
83140
}

src/MyTested.AspNetCore.Mvc.EntityFrameworkCore/ComponentBuilderEntityFrameworkCoreExtensions.cs

Lines changed: 75 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -73,5 +73,80 @@ public static TBuilder WithData<TBuilder>(
7373

7474
return actualBuilder.Builder;
7575
}
76+
77+
/// <summary>
78+
/// Remove values from the <see cref="Microsoft.EntityFrameworkCore.DbContext"/> on the tested component.
79+
/// </summary>
80+
/// <typeparam name="TBuilder">Class representing ASP.NET Core MVC test builder.</typeparam>
81+
/// <param name="builder">
82+
/// Instance of <see cref="IBaseTestBuilderWithComponentBuilder{TBuilder}"/> type.
83+
/// </param>
84+
/// <param name="entities">
85+
/// Remove values from the registered <see cref="Microsoft.EntityFrameworkCore.DbContext"/>.
86+
/// </param>
87+
/// <returns>The same component builder.</returns>
88+
public static TBuilder WithoutData<TBuilder>(
89+
this IBaseTestBuilderWithComponentBuilder<TBuilder> builder,
90+
IEnumerable<object> entities)
91+
where TBuilder : IBaseTestBuilder
92+
=> builder
93+
.WithoutData(data => data
94+
.WithoutEntities(entities));
95+
96+
/// <summary>
97+
/// Remove values from the <see cref="Microsoft.EntityFrameworkCore.DbContext"/> on the tested component.
98+
/// </summary>
99+
/// <typeparam name="TBuilder">Class representing ASP.NET Core MVC test builder.</typeparam>
100+
/// <param name="builder">
101+
/// Instance of <see cref="IBaseTestBuilderWithComponentBuilder{TBuilder}"/> type.
102+
/// </param>
103+
/// <param name="entities">
104+
/// Remove values from the registered <see cref="Microsoft.EntityFrameworkCore.DbContext"/>.
105+
/// </param>
106+
/// <returns>The same component builder.</returns>
107+
public static TBuilder WithoutData<TBuilder>(
108+
this IBaseTestBuilderWithComponentBuilder<TBuilder> builder,
109+
params object[] entities)
110+
where TBuilder : IBaseTestBuilder
111+
=> builder
112+
.WithoutData(data => data
113+
.WithoutEntities(entities));
114+
115+
/// <summary>
116+
/// Wipes all tables from <see cref="Microsoft.EntityFrameworkCore.DbContext"/> on the tested component.
117+
/// </summary>
118+
/// <typeparam name="TBuilder">Class representing ASP.NET Core MVC test builder.</typeparam>
119+
/// <param name="builder">
120+
/// Instance of <see cref="IBaseTestBuilderWithComponentBuilder{TBuilder}"/> type.
121+
/// </param>
122+
/// <returns>The same component builder.</returns>
123+
public static TBuilder WithoutData<TBuilder>(
124+
this IBaseTestBuilderWithComponentBuilder<TBuilder> builder)
125+
where TBuilder : IBaseTestBuilder
126+
=> builder
127+
.WithoutData(data => data
128+
.WipeDatabase());
129+
130+
/// <summary>
131+
/// Remove values from the <see cref="Microsoft.EntityFrameworkCore.DbContext"/> on the tested component or wipes all tables from it.
132+
/// </summary>
133+
/// <typeparam name="TBuilder">Class representing ASP.NET Core MVC test builder.</typeparam>
134+
/// <param name="builder">
135+
/// Instance of <see cref="IBaseTestBuilderWithComponentBuilder{TBuilder}"/> type.
136+
/// </param>
137+
/// <param name="dbContextBuilder">
138+
/// Action setting the <see cref="Microsoft.EntityFrameworkCore.DbContext"/> by using <see cref="IDbContextBuilder"/>.</param>
139+
/// <returns></returns>
140+
public static TBuilder WithoutData<TBuilder>(
141+
this IBaseTestBuilderWithComponentBuilder<TBuilder> builder,
142+
Action<IDbContextBuilder> dbContextBuilder)
143+
where TBuilder : IBaseTestBuilder
144+
{
145+
var actualBuilder = (BaseTestBuilderWithComponentBuilder<TBuilder>)builder;
146+
147+
dbContextBuilder(new DbContextBuilder(actualBuilder.TestContext));
148+
149+
return actualBuilder.Builder;
150+
}
76151
}
77152
}

0 commit comments

Comments
 (0)