Skip to content

Commit 441f538

Browse files
committed
chore: refactor creatingdata tests
1 parent 1c5517b commit 441f538

File tree

8 files changed

+260
-435
lines changed

8 files changed

+260
-435
lines changed

src/Examples/JsonApiDotNetCoreExample/Models/TodoItemCollection.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,12 +9,12 @@ public class TodoItemCollection : Identifiable<Guid>
99
{
1010
[Attr("name")]
1111
public string Name { get; set; }
12-
public int OwnerId { get; set; }
1312

1413
[HasMany("todo-items")]
1514
public virtual List<TodoItem> TodoItems { get; set; }
1615

1716
[HasOne("owner")]
1817
public virtual Person Owner { get; set; }
18+
public int? OwnerId { get; set; }
1919
}
2020
}

src/JsonApiDotNetCore/Services/EntityResourceService.cs

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -113,9 +113,6 @@ public virtual async Task<IEnumerable<TResource>> GetAsync()
113113
if (ShouldIncludeRelationships())
114114
entities = IncludeRelationships(entities);
115115

116-
if (_options.IncludeTotalRecordCount)
117-
_pageManager.TotalRecords = await _repository.CountAsync(entities);
118-
119116
entities = _repository.Select(entities, _currentRequest.QuerySet?.Fields);
120117

121118
if (!IsNull(_hookExecutor, entities))

test/JsonApiDotNetCoreExampleTests/Acceptance/Spec/CreatingDataTests.cs

Lines changed: 157 additions & 426 deletions
Large diffs are not rendered by default.
Lines changed: 79 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,79 @@
1+
using System;
2+
using System.Linq.Expressions;
3+
using System.Net;
4+
using System.Net.Http;
5+
using System.Net.Http.Headers;
6+
using System.Threading.Tasks;
7+
using JsonApiDotNetCore.Models;
8+
using JsonApiDotNetCore.Serialization.Client;
9+
using JsonApiDotNetCoreExample.Data;
10+
using Microsoft.AspNetCore.Hosting;
11+
using Microsoft.AspNetCore.TestHost;
12+
using Xunit;
13+
14+
namespace JsonApiDotNetCoreExampleTests.Acceptance.Spec
15+
{
16+
public class EndToEndTest
17+
{
18+
public static MediaTypeHeaderValue JsonApiContentType = new MediaTypeHeaderValue("application/vnd.api+json");
19+
private HttpClient _client;
20+
protected TestFixture<TestStartup> _fixture;
21+
protected readonly IResponseDeserializer _deserializer;
22+
public EndToEndTest(TestFixture<TestStartup> fixture)
23+
{
24+
_fixture = fixture;
25+
_deserializer = GetDeserializer();
26+
}
27+
28+
public AppDbContext PrepareTest<TStartup>() where TStartup : class
29+
{
30+
var builder = new WebHostBuilder().UseStartup<TStartup>();
31+
var server = new TestServer(builder);
32+
_client = server.CreateClient();
33+
34+
var dbContext = GetDbContext();
35+
dbContext.RemoveRange(dbContext.TodoItems);
36+
dbContext.RemoveRange(dbContext.TodoItemCollections);
37+
dbContext.RemoveRange(dbContext.PersonRoles);
38+
dbContext.RemoveRange(dbContext.People);
39+
dbContext.SaveChanges();
40+
return dbContext;
41+
}
42+
43+
public AppDbContext GetDbContext()
44+
{
45+
return _fixture.GetService<AppDbContext>();
46+
}
47+
48+
public async Task<(string, HttpResponseMessage)> SendRequest(string method, string route, string content)
49+
{
50+
var request = new HttpRequestMessage(new HttpMethod(method), route);
51+
request.Content = new StringContent(content);
52+
request.Content.Headers.ContentType = JsonApiContentType;
53+
var response = await _client.SendAsync(request);
54+
var body = await response.Content?.ReadAsStringAsync();
55+
return (body, response);
56+
}
57+
58+
public Task<(string, HttpResponseMessage)> Post(string route, string content)
59+
{
60+
return SendRequest("POST", route, content);
61+
}
62+
63+
public IRequestSerializer GetSerializer<TResource>(Expression<Func<TResource, dynamic>> attributes = null, Expression<Func<TResource, dynamic>> relationships = null) where TResource : class, IIdentifiable
64+
{
65+
return _fixture.GetSerializer(attributes, relationships);
66+
}
67+
68+
public IResponseDeserializer GetDeserializer()
69+
{
70+
return _fixture.GetDeserializer();
71+
}
72+
73+
protected void AssertEqualStatusCode(HttpStatusCode expected, HttpResponseMessage response)
74+
{
75+
Assert.True(expected == response.StatusCode, $"Got {response.StatusCode} status code with payload instead of {expected}. Payload: {response.Content.ReadAsStringAsync().Result}");
76+
}
77+
}
78+
79+
}

test/JsonApiDotNetCoreExampleTests/Acceptance/Spec/SparseFieldSetTests.cs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -120,12 +120,13 @@ public async Task Fields_Query_Selects_Sparse_Field_Sets()
120120
public async Task Fields_Query_Selects_All_Fieldset_With_HasOne()
121121
{
122122
// arrange
123+
_dbContext.TodoItems.RemoveRange(_dbContext.TodoItems);
124+
_dbContext.SaveChanges();
123125
var owner = _personFaker.Generate();
124-
var ordinal = _dbContext.TodoItems.Count();
125126
var todoItem = new TodoItem
126127
{
127128
Description = "s",
128-
Ordinal = ordinal,
129+
Ordinal = 123,
129130
CreatedDate = DateTime.Now,
130131
Owner = owner
131132
};

test/JsonApiDotNetCoreExampleTests/Acceptance/Spec/UpdatingDataTests.cs

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ public UpdatingDataTests(TestFixture<TestStartup> fixture)
3131
{
3232
_fixture = fixture;
3333
_context = fixture.GetService<AppDbContext>();
34+
3435
_todoItemFaker = new Faker<TodoItem>()
3536
.RuleFor(t => t.Description, f => f.Lorem.Sentence())
3637
.RuleFor(t => t.Ordinal, f => f.Random.Number())
@@ -119,6 +120,9 @@ public async Task Respond_400_If_IdNotInAttributeList()
119120
public async Task Can_Patch_Entity()
120121
{
121122
// arrange
123+
_context.TodoItems.RemoveRange(_context.TodoItems);
124+
_context.SaveChanges();
125+
122126
var todoItem = _todoItemFaker.Generate();
123127
var person = _personFaker.Generate();
124128
todoItem.Owner = person;
@@ -153,7 +157,6 @@ public async Task Can_Patch_Entity()
153157
var updatedTodoItem = _context.TodoItems.AsNoTracking()
154158
.Include(t => t.Owner)
155159
.SingleOrDefault(t => t.Id == todoItem.Id);
156-
157160
Assert.Equal(person.Id, updatedTodoItem.OwnerId);
158161
Assert.Equal(newTodoItem.Description, updatedTodoItem.Description);
159162
Assert.Equal(newTodoItem.Ordinal, updatedTodoItem.Ordinal);

test/JsonApiDotNetCoreExampleTests/Acceptance/TestFixture.cs

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,9 @@
88
using JsonApiDotNetCore.Serialization.Client;
99
using System.Linq.Expressions;
1010
using JsonApiDotNetCore.Models;
11+
using JsonApiDotNetCore.Builders;
12+
using JsonApiDotNetCoreExampleTests.Helpers.Models;
13+
using JsonApiDotNetCoreExample.Models;
1114

1215
namespace JsonApiDotNetCoreExampleTests.Acceptance
1316
{
@@ -41,7 +44,13 @@ public IRequestSerializer GetSerializer<TResource>(Expression<Func<TResource, dy
4144
}
4245
public IResponseDeserializer GetDeserializer()
4346
{
44-
return GetService<IResponseDeserializer>();
47+
var graph = new ResourceGraphBuilder()
48+
.AddResource<PersonRole>()
49+
.AddResource<Person>()
50+
.AddResource<Passport>()
51+
.AddResource<TodoItemClient>("todo-items")
52+
.AddResource<TodoItemCollectionClient, Guid>().Build();
53+
return new ResponseDeserializer(graph);
4554
}
4655

4756
public T GetService<T>() => (T)_services.GetService(typeof(T));

test/JsonApiDotNetCoreExampleTests/Helpers/Models/TodoItemClient.cs

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,12 @@ public class TodoItemClient : TodoItem
1717
public new string CalculatedValue { get; set; }
1818
}
1919

20-
20+
//[Resource("todo-collections")]
21+
//public class TodoItemCollectionClient : TodoItemCollection
22+
//{
23+
// [HasMany("todo-items")]
24+
// public new List<TodoItemClient> TodoItems { get; set; }
25+
//}
2126

2227
[Resource("todo-collections")]
2328
public class TodoItemCollectionClient : Identifiable<Guid>

0 commit comments

Comments
 (0)