Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
C
CleanArchitecture
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
tsai
CleanArchitecture
Commits
36d11177
Unverified
Commit
36d11177
authored
Mar 06, 2019
by
Steve Smith
Committed by
GitHub
Mar 06, 2019
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Adding Info endpoint and Organizing Tests (#55)
* Add info endpoint and reorg tests. * Cleaning up test names
parent
52fd87f3
Changes
14
Hide whitespace changes
Inline
Side-by-side
Showing
14 changed files
with
204 additions
and
14 deletions
+204
-14
CleanArchitecture.Infrastructure.csproj
...re.Infrastructure/CleanArchitecture.Infrastructure.csproj
+1
-1
BaseApiController.cs
src/CleanArchitecture.Web/Api/BaseApiController.cs
+10
-0
MetaController.cs
src/CleanArchitecture.Web/Api/MetaController.cs
+19
-0
ToDoItemsController.cs
src/CleanArchitecture.Web/Api/ToDoItemsController.cs
+1
-3
CleanArchitecture.Web.csproj
src/CleanArchitecture.Web/CleanArchitecture.Web.csproj
+1
-1
CleanArchitecture.Tests.csproj
tests/CleanArchitecture.Tests/CleanArchitecture.Tests.csproj
+4
-1
ToDoItemMarkComplete.cs
...nArchitecture.Tests/Core/Entities/ToDoItemMarkComplete.cs
+3
-3
BaseEfRepoTestFixture.cs
...hitecture.Tests/Integration/Data/BaseEfRepoTestFixture.cs
+41
-0
EfRepositoryAdd.cs
...eanArchitecture.Tests/Integration/Data/EfRepositoryAdd.cs
+24
-0
EfRepositoryDelete.cs
...Architecture.Tests/Integration/Data/EfRepositoryDelete.cs
+26
-0
EfRepositoryUpdate.cs
...Architecture.Tests/Integration/Data/EfRepositoryUpdate.cs
+42
-0
ApiToDoItemsControllerList.cs
...e.Tests/Integration/Web/Api/ApiToDoItemsControllerList.cs
+1
-2
MetaControllerInfo.cs
...hitecture.Tests/Integration/Web/Api/MetaControllerInfo.cs
+28
-0
HomeControllerIndex.cs
...Architecture.Tests/Integration/Web/HomeControllerIndex.cs
+3
-3
No files found.
src/CleanArchitecture.Infrastructure/CleanArchitecture.Infrastructure.csproj
View file @
36d11177
...
...
@@ -11,7 +11,7 @@
<ItemGroup>
<PackageReference Include="Autofac" Version="4.8.1" />
<PackageReference Include="Microsoft.AspNetCore.App"
Version="2.1.5"
/>
<PackageReference Include="Microsoft.AspNetCore.App" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="2.1.4" PrivateAssets="all">
<IncludeAssets>runtime; build; native; contentfiles; analyzers</IncludeAssets>
</PackageReference>
...
...
src/CleanArchitecture.Web/Api/BaseApiController.cs
0 → 100644
View file @
36d11177
using
Microsoft.AspNetCore.Mvc
;
namespace
CleanArchitecture.Web.Api
{
[
Route
(
"api/[controller]"
)]
[
ApiController
]
public
abstract
class
BaseApiController
:
Controller
{
}
}
src/CleanArchitecture.Web/Api/MetaController.cs
0 → 100644
View file @
36d11177
using
Microsoft.AspNetCore.Mvc
;
using
System.Diagnostics
;
namespace
CleanArchitecture.Web.Api
{
public
class
MetaController
:
BaseApiController
{
[
HttpGet
(
"/info"
)]
public
ActionResult
<
string
>
Info
()
{
var
assembly
=
typeof
(
Startup
).
Assembly
;
var
creationDate
=
System
.
IO
.
File
.
GetCreationTime
(
assembly
.
Location
);
var
version
=
FileVersionInfo
.
GetVersionInfo
(
assembly
.
Location
).
ProductVersion
;
return
Ok
(
$"Version:
{
version
}
, Last Updated:
{
creationDate
}
"
);
}
}
}
src/CleanArchitecture.Web/Api/ToDoItemsController.cs
View file @
36d11177
...
...
@@ -7,9 +7,7 @@ using System.Linq;
namespace
CleanArchitecture.Web.Api
{
[
Route
(
"api/[controller]"
)]
[
ValidateModel
]
public
class
ToDoItemsController
:
Controller
public
class
ToDoItemsController
:
BaseApiController
{
private
readonly
IRepository
_repository
;
...
...
src/CleanArchitecture.Web/CleanArchitecture.Web.csproj
View file @
36d11177
...
...
@@ -22,7 +22,7 @@
<PackageReference Include="Autofac" Version="4.8.1" />
<PackageReference Include="Autofac.Extensions.DependencyInjection" Version="4.3.0" />
<PackageReference Include="Dapper" Version="1.50.5" />
<PackageReference Include="Microsoft.AspNetCore.App"
Version="2.1.5"
/>
<PackageReference Include="Microsoft.AspNetCore.App" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="2.1.4" PrivateAssets="all">
<IncludeAssets>runtime; build; native; contentfiles; analyzers</IncludeAssets>
</PackageReference>
...
...
tests/CleanArchitecture.Tests/CleanArchitecture.Tests.csproj
View file @
36d11177
...
...
@@ -27,7 +27,10 @@
</ItemGroup>
<ItemGroup>
<PackageReference Include="Microsoft.AspNetCore.Mvc" Version="2.1.3" />
<PackageReference Include="Microsoft.AspNetCore.App" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="2.1.4" PrivateAssets="all">
<IncludeAssets>runtime; build; native; contentfiles; analyzers</IncludeAssets>
</PackageReference>
<PackageReference Include="Microsoft.AspNetCore.Mvc.Testing" Version="2.1.3" />
<PackageReference Include="Microsoft.AspNetCore.TestHost" Version="2.1.1" />
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="15.9.0" />
...
...
tests/CleanArchitecture.Tests/Core/Entities/ToDoItemMarkComplete
Should
.cs
→
tests/CleanArchitecture.Tests/Core/Entities/ToDoItemMarkComplete.cs
View file @
36d11177
...
...
@@ -4,10 +4,10 @@ using Xunit;
namespace
CleanArchitecture.Tests.Core.Entities
{
public
class
ToDoItemMarkComplete
Should
public
class
ToDoItemMarkComplete
{
[
Fact
]
public
void
SetIsDoneToTrue
()
public
void
Set
s
IsDoneToTrue
()
{
var
item
=
new
ToDoItemBuilder
().
Build
();
...
...
@@ -17,7 +17,7 @@ namespace CleanArchitecture.Tests.Core.Entities
}
[
Fact
]
public
void
RaiseToDoItemCompletedEvent
()
public
void
Raise
s
ToDoItemCompletedEvent
()
{
var
item
=
new
ToDoItemBuilder
().
Build
();
...
...
tests/CleanArchitecture.Tests/Integration/Data/BaseEfRepoTestFixture.cs
0 → 100644
View file @
36d11177
using
CleanArchitecture.Core.Interfaces
;
using
CleanArchitecture.Infrastructure.Data
;
using
Microsoft.EntityFrameworkCore
;
using
Microsoft.Extensions.DependencyInjection
;
using
Moq
;
namespace
CleanArchitecture.Tests.Integration.Data
{
public
abstract
class
BaseEfRepoTestFixture
{
protected
AppDbContext
_dbContext
;
protected
static
DbContextOptions
<
AppDbContext
>
CreateNewContextOptions
()
{
// Create a fresh service provider, and therefore a fresh
// InMemory database instance.
var
serviceProvider
=
new
ServiceCollection
()
.
AddEntityFrameworkInMemoryDatabase
()
.
BuildServiceProvider
();
// Create a new options instance telling the context to use an
// InMemory database and the new service provider.
var
builder
=
new
DbContextOptionsBuilder
<
AppDbContext
>();
builder
.
UseInMemoryDatabase
(
"cleanarchitecture"
)
.
UseInternalServiceProvider
(
serviceProvider
);
return
builder
.
Options
;
}
protected
EfRepository
GetRepository
()
{
var
options
=
CreateNewContextOptions
();
var
mockDispatcher
=
new
Mock
<
IDomainEventDispatcher
>();
_dbContext
=
new
AppDbContext
(
options
,
mockDispatcher
.
Object
);
return
new
EfRepository
(
_dbContext
);
}
}
}
tests/CleanArchitecture.Tests/Integration/Data/EfRepositoryAdd.cs
0 → 100644
View file @
36d11177
using
CleanArchitecture.Core.Entities
;
using
System.Linq
;
using
Xunit
;
namespace
CleanArchitecture.Tests.Integration.Data
{
public
class
EfRepositoryAdd
:
BaseEfRepoTestFixture
{
[
Fact
]
public
void
AddsItemAndSetsId
()
{
var
repository
=
GetRepository
();
var
item
=
new
ToDoItemBuilder
().
Build
();
repository
.
Add
(
item
);
var
newItem
=
repository
.
List
<
ToDoItem
>().
FirstOrDefault
();
Assert
.
Equal
(
item
,
newItem
);
Assert
.
True
(
newItem
?.
Id
>
0
);
}
}
}
tests/CleanArchitecture.Tests/Integration/Data/EfRepositoryDelete.cs
0 → 100644
View file @
36d11177
using
CleanArchitecture.Core.Entities
;
using
System
;
using
Xunit
;
namespace
CleanArchitecture.Tests.Integration.Data
{
public
class
EfRepositoryDelete
:
BaseEfRepoTestFixture
{
[
Fact
]
public
void
DeletesItemAfterAddingIt
()
{
// add an item
var
repository
=
GetRepository
();
var
initialTitle
=
Guid
.
NewGuid
().
ToString
();
var
item
=
new
ToDoItemBuilder
().
Title
(
initialTitle
).
Build
();
repository
.
Add
(
item
);
// delete the item
repository
.
Delete
(
item
);
// verify it's no longer there
Assert
.
DoesNotContain
(
repository
.
List
<
ToDoItem
>(),
i
=>
i
.
Title
==
initialTitle
);
}
}
}
tests/CleanArchitecture.Tests/Integration/Data/EfRepository
Should
.cs
→
tests/CleanArchitecture.Tests/Integration/Data/EfRepository
Update
.cs
View file @
36d11177
using
CleanArchitecture.Core.Entities
;
using
CleanArchitecture.Core.Interfaces
;
using
CleanArchitecture.Infrastructure.Data
;
using
Microsoft.EntityFrameworkCore
;
using
Microsoft.Extensions.DependencyInjection
;
using
Moq
;
using
System
;
using
System.Linq
;
using
Xunit
;
namespace
CleanArchitecture.Tests.Integration.Data
{
public
class
EfRepository
Should
public
class
EfRepository
Update
:
BaseEfRepoTestFixture
{
private
AppDbContext
_dbContext
;
private
static
DbContextOptions
<
AppDbContext
>
CreateNewContextOptions
()
{
// Create a fresh service provider, and therefore a fresh
// InMemory database instance.
var
serviceProvider
=
new
ServiceCollection
()
.
AddEntityFrameworkInMemoryDatabase
()
.
BuildServiceProvider
();
// Create a new options instance telling the context to use an
// InMemory database and the new service provider.
var
builder
=
new
DbContextOptionsBuilder
<
AppDbContext
>();
builder
.
UseInMemoryDatabase
(
"cleanarchitecture"
)
.
UseInternalServiceProvider
(
serviceProvider
);
return
builder
.
Options
;
}
[
Fact
]
public
void
AddItemAndSetId
()
{
var
repository
=
GetRepository
();
var
item
=
new
ToDoItemBuilder
().
Build
();
repository
.
Add
(
item
);
var
newItem
=
repository
.
List
<
ToDoItem
>().
FirstOrDefault
();
Assert
.
Equal
(
item
,
newItem
);
Assert
.
True
(
newItem
?.
Id
>
0
);
}
[
Fact
]
public
void
UpdateItemAfterAddingIt
()
public
void
Update
s
ItemAfterAddingIt
()
{
// add an item
var
repository
=
GetRepository
();
...
...
@@ -75,31 +38,5 @@ namespace CleanArchitecture.Tests.Integration.Data
Assert
.
NotEqual
(
item
.
Title
,
updatedItem
.
Title
);
Assert
.
Equal
(
newItem
.
Id
,
updatedItem
.
Id
);
}
[
Fact
]
public
void
DeleteItemAfterAddingIt
()
{
// add an item
var
repository
=
GetRepository
();
var
initialTitle
=
Guid
.
NewGuid
().
ToString
();
var
item
=
new
ToDoItemBuilder
().
Title
(
initialTitle
).
Build
();
repository
.
Add
(
item
);
// delete the item
repository
.
Delete
(
item
);
// verify it's no longer there
Assert
.
DoesNotContain
(
repository
.
List
<
ToDoItem
>(),
i
=>
i
.
Title
==
initialTitle
);
}
private
EfRepository
GetRepository
()
{
var
options
=
CreateNewContextOptions
();
var
mockDispatcher
=
new
Mock
<
IDomainEventDispatcher
>();
_dbContext
=
new
AppDbContext
(
options
,
mockDispatcher
.
Object
);
return
new
EfRepository
(
_dbContext
);
}
}
}
tests/CleanArchitecture.Tests/Integration/Web/Api
ToDoItemsControllerListShould
.cs
→
tests/CleanArchitecture.Tests/Integration/Web/Api
/ApiToDoItemsControllerList
.cs
View file @
36d11177
...
...
@@ -7,9 +7,8 @@ using System.Net.Http;
using
System.Threading.Tasks
;
using
Xunit
;
namespace
CleanArchitecture.Tests.Integration.Web
namespace
CleanArchitecture.Tests.Integration.Web
.Api
{
public
class
ApiToDoItemsControllerList
:
IClassFixture
<
CustomWebApplicationFactory
<
Startup
>>
{
private
readonly
HttpClient
_client
;
...
...
tests/CleanArchitecture.Tests/Integration/Web/Api/MetaControllerInfo.cs
0 → 100644
View file @
36d11177
using
CleanArchitecture.Web
;
using
System.Net.Http
;
using
System.Threading.Tasks
;
using
Xunit
;
namespace
CleanArchitecture.Tests.Integration.Web.Api
{
public
class
MetaControllerInfo
:
IClassFixture
<
CustomWebApplicationFactory
<
Startup
>>
{
private
readonly
HttpClient
_client
;
public
MetaControllerInfo
(
CustomWebApplicationFactory
<
Startup
>
factory
)
{
_client
=
factory
.
CreateClient
();
}
[
Fact
]
public
async
Task
ReturnsVersionAndLastUpdateDate
()
{
var
response
=
await
_client
.
GetAsync
(
"/info"
);
response
.
EnsureSuccessStatusCode
();
var
stringResponse
=
await
response
.
Content
.
ReadAsStringAsync
();
Assert
.
Contains
(
"Version"
,
stringResponse
);
Assert
.
Contains
(
"Last Updated"
,
stringResponse
);
}
}
}
tests/CleanArchitecture.Tests/Integration/Web/HomeControllerIndex
Should
.cs
→
tests/CleanArchitecture.Tests/Integration/Web/HomeControllerIndex.cs
View file @
36d11177
...
...
@@ -5,17 +5,17 @@ using Xunit;
namespace
CleanArchitecture.Tests.Integration.Web
{
public
class
HomeControllerIndex
Should
:
IClassFixture
<
CustomWebApplicationFactory
<
Startup
>>
public
class
HomeControllerIndex
:
IClassFixture
<
CustomWebApplicationFactory
<
Startup
>>
{
private
readonly
HttpClient
_client
;
public
HomeControllerIndex
Should
(
CustomWebApplicationFactory
<
Startup
>
factory
)
public
HomeControllerIndex
(
CustomWebApplicationFactory
<
Startup
>
factory
)
{
_client
=
factory
.
CreateClient
();
}
[
Fact
]
public
async
Task
ReturnViewWithCorrectMessage
()
public
async
Task
Return
s
ViewWithCorrectMessage
()
{
HttpResponseMessage
response
=
await
_client
.
GetAsync
(
"/"
);
response
.
EnsureSuccessStatusCode
();
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment