Skip to content

Commit 211c0e5

Browse files
committed
test(meta): test total records count
1 parent a90e828 commit 211c0e5

File tree

4 files changed

+113
-10
lines changed

4 files changed

+113
-10
lines changed

src/JsonApiDotNetCore/Builders/DocumentBuilder.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,7 @@ private Dictionary<string, object> _getMeta(IIdentifiable entity)
6262
if (entity == null) return null;
6363

6464
var meta = new Dictionary<string, object>();
65-
var metaEntity = (IHasMeta)entity;
65+
var metaEntity = entity as IHasMeta;
6666

6767
if(metaEntity != null)
6868
meta = metaEntity.GetMeta(_jsonApiContext);

src/JsonApiDotNetCoreExample/Startup.cs

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ namespace JsonApiDotNetCoreExample
1515
{
1616
public class Startup
1717
{
18-
private readonly IConfiguration _config;
18+
public readonly IConfiguration Config;
1919

2020
public Startup(IHostingEnvironment env)
2121
{
@@ -25,10 +25,10 @@ public Startup(IHostingEnvironment env)
2525
.AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true)
2626
.AddEnvironmentVariables();
2727

28-
_config = builder.Build();
28+
Config = builder.Build();
2929
}
3030

31-
public IServiceProvider ConfigureServices(IServiceCollection services)
31+
public virtual IServiceProvider ConfigureServices(IServiceCollection services)
3232
{
3333
var loggerFactory = new LoggerFactory();
3434
loggerFactory
@@ -37,7 +37,7 @@ public IServiceProvider ConfigureServices(IServiceCollection services)
3737

3838
services.AddDbContext<AppDbContext>(options =>
3939
{
40-
options.UseNpgsql(_getDbConnectionString());
40+
options.UseNpgsql(GetDbConnectionString());
4141
}, ServiceLifetime.Transient);
4242

4343
services.AddJsonApi<AppDbContext>(opt =>
@@ -46,7 +46,7 @@ public IServiceProvider ConfigureServices(IServiceCollection services)
4646
opt.DefaultPageSize = 5;
4747
});
4848

49-
services.AddDocumentationConfiguration(_config);
49+
services.AddDocumentationConfiguration(Config);
5050

5151
var provider = services.BuildServiceProvider();
5252
var appContext = provider.GetRequiredService<AppDbContext>();
@@ -55,25 +55,25 @@ public IServiceProvider ConfigureServices(IServiceCollection services)
5555
return provider;
5656
}
5757

58-
public void Configure(
58+
public virtual void Configure(
5959
IApplicationBuilder app,
6060
IHostingEnvironment env,
6161
ILoggerFactory loggerFactory,
6262
AppDbContext context)
6363
{
6464
context.Database.Migrate();
6565

66-
loggerFactory.AddConsole(_config.GetSection("Logging"));
66+
loggerFactory.AddConsole(Config.GetSection("Logging"));
6767
loggerFactory.AddDebug();
6868

6969
app.UseDocs();
7070

7171
app.UseJsonApi();
7272
}
7373

74-
private string _getDbConnectionString()
74+
public string GetDbConnectionString()
7575
{
76-
return _config["Data:DefaultConnection"];
76+
return Config["Data:DefaultConnection"];
7777
}
7878
}
7979
}
Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
using System.Net;
2+
using System.Net.Http;
3+
using System.Threading.Tasks;
4+
using DotNetCoreDocs;
5+
using DotNetCoreDocs.Writers;
6+
using JsonApiDotNetCoreExample;
7+
using Microsoft.AspNetCore.Hosting;
8+
using Microsoft.AspNetCore.TestHost;
9+
using Newtonsoft.Json;
10+
using Xunit;
11+
using JsonApiDotNetCore.Models;
12+
using JsonApiDotNetCoreExample.Data;
13+
using System.Linq;
14+
using JsonApiDotNetCoreExampleTests.Startups;
15+
16+
namespace JsonApiDotNetCoreExampleTests.Acceptance.Spec.DocumentTests
17+
{
18+
[Collection("WebHostCollection")]
19+
public class Meta
20+
{
21+
private DocsFixture<Startup, JsonDocWriter> _fixture;
22+
private AppDbContext _context;
23+
public Meta(DocsFixture<Startup, JsonDocWriter> fixture)
24+
{
25+
_fixture = fixture;
26+
_context = fixture.GetService<AppDbContext>();
27+
}
28+
29+
[Fact]
30+
public async Task Total_Record_Count_Included()
31+
{
32+
// arrange
33+
var expectedCount = _context.TodoItems.Count();
34+
var builder = new WebHostBuilder()
35+
.UseStartup<MetaStartup>();
36+
37+
var httpMethod = new HttpMethod("GET");
38+
var route = $"/api/v1/todo-items";
39+
40+
var server = new TestServer(builder);
41+
var client = server.CreateClient();
42+
var request = new HttpRequestMessage(httpMethod, route);
43+
44+
// act
45+
var response = await client.SendAsync(request);
46+
var documents = JsonConvert.DeserializeObject<Documents>(await response.Content.ReadAsStringAsync());
47+
48+
// assert
49+
Assert.Equal(HttpStatusCode.OK, response.StatusCode);
50+
Assert.NotNull(documents.Meta);
51+
Assert.Equal((long)expectedCount, (long)documents.Meta["total-records"]);
52+
}
53+
}
54+
}
Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
using Microsoft.AspNetCore.Builder;
2+
using Microsoft.AspNetCore.Hosting;
3+
using Microsoft.Extensions.Configuration;
4+
using Microsoft.Extensions.DependencyInjection;
5+
using Microsoft.Extensions.Logging;
6+
using JsonApiDotNetCore.Routing;
7+
using JsonApiDotNetCoreExample.Data;
8+
using Microsoft.EntityFrameworkCore;
9+
using JsonApiDotNetCore.Extensions;
10+
using DotNetCoreDocs.Configuration;
11+
using DotNetCoreDocs.Middleware;
12+
using System;
13+
using JsonApiDotNetCoreExample;
14+
15+
namespace JsonApiDotNetCoreExampleTests.Startups
16+
{
17+
public class MetaStartup : Startup
18+
{
19+
public MetaStartup(IHostingEnvironment env)
20+
: base (env)
21+
{ }
22+
23+
public override IServiceProvider ConfigureServices(IServiceCollection services)
24+
{
25+
var loggerFactory = new LoggerFactory();
26+
27+
loggerFactory
28+
.AddConsole(LogLevel.Trace);
29+
30+
services.AddSingleton<ILoggerFactory>(loggerFactory);
31+
32+
services.AddDbContext<AppDbContext>(options =>
33+
{
34+
options.UseNpgsql(GetDbConnectionString());
35+
}, ServiceLifetime.Transient);
36+
37+
services.AddJsonApi<AppDbContext>(opt =>
38+
{
39+
opt.Namespace = "api/v1";
40+
opt.DefaultPageSize = 5;
41+
opt.IncludeTotalRecordCount = true;
42+
});
43+
44+
services.AddDocumentationConfiguration(Config);
45+
46+
return services.BuildServiceProvider();
47+
}
48+
}
49+
}

0 commit comments

Comments
 (0)