Skip to content

Commit 072fa39

Browse files
committed
test(acceptance): verify filter/sort limitations
1 parent 7806cc4 commit 072fa39

File tree

3 files changed

+56
-17
lines changed

3 files changed

+56
-17
lines changed

src/Examples/JsonApiDotNetCoreExample/Models/TodoItem.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ public TodoItem()
2222
[Attr("created-date")]
2323
public DateTime CreatedDate { get; set; }
2424

25-
[Attr("achieved-date")]
25+
[Attr("achieved-date", isFilterable: false, isSortable: false)]
2626
public DateTime? AchievedDate { get; set; }
2727

2828
public int? OwnerId { get; set; }

test/JsonApiDotNetCoreExampleTests/Acceptance/Spec/AttributeFilterTests.cs

Lines changed: 21 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
1-
using System.Linq;
1+
using System;
2+
using System.Linq;
23
using System.Net;
34
using System.Net.Http;
45
using System.Threading.Tasks;
@@ -8,8 +9,6 @@
89
using JsonApiDotNetCoreExample;
910
using JsonApiDotNetCoreExample.Data;
1011
using JsonApiDotNetCoreExample.Models;
11-
using Microsoft.AspNetCore.Hosting;
12-
using Microsoft.AspNetCore.TestHost;
1312
using Newtonsoft.Json;
1413
using Xunit;
1514
using Person = JsonApiDotNetCoreExample.Models.Person;
@@ -44,17 +43,13 @@ public async Task Can_Filter_On_Guid_Properties()
4443
var todoItem = _todoItemFaker.Generate();
4544
context.TodoItems.Add(todoItem);
4645
await context.SaveChangesAsync();
47-
48-
var builder = new WebHostBuilder()
49-
.UseStartup<Startup>();
46+
5047
var httpMethod = new HttpMethod("GET");
5148
var route = $"/api/v1/todo-items?filter[guid-property]={todoItem.GuidProperty}";
52-
var server = new TestServer(builder);
53-
var client = server.CreateClient();
5449
var request = new HttpRequestMessage(httpMethod, route);
5550

5651
// act
57-
var response = await client.SendAsync(request);
52+
var response = await _fixture.Client.SendAsync(request);
5853
var body = await response.Content.ReadAsStringAsync();
5954
var deserializedBody = _fixture
6055
.GetService<IJsonApiDeSerializer>()
@@ -68,7 +63,6 @@ public async Task Can_Filter_On_Guid_Properties()
6863
Assert.Equal(todoItem.GuidProperty, todoItemResponse.GuidProperty);
6964
}
7065

71-
7266
[Fact]
7367
public async Task Can_Filter_On_Related_Attrs()
7468
{
@@ -79,17 +73,13 @@ public async Task Can_Filter_On_Related_Attrs()
7973
todoItem.Owner = person;
8074
context.TodoItems.Add(todoItem);
8175
await context.SaveChangesAsync();
82-
83-
var builder = new WebHostBuilder()
84-
.UseStartup<Startup>();
76+
8577
var httpMethod = new HttpMethod("GET");
8678
var route = $"/api/v1/todo-items?include=owner&filter[owner.first-name]={person.FirstName}";
87-
var server = new TestServer(builder);
88-
var client = server.CreateClient();
8979
var request = new HttpRequestMessage(httpMethod, route);
9080

9181
// act
92-
var response = await client.SendAsync(request);
82+
var response = await _fixture.Client.SendAsync(request);
9383
var body = await response.Content.ReadAsStringAsync();
9484
var documents = JsonConvert.DeserializeObject<Documents>(await response.Content.ReadAsStringAsync());
9585
var included = documents.Included;
@@ -101,5 +91,20 @@ public async Task Can_Filter_On_Related_Attrs()
10191
foreach(var item in included)
10292
Assert.Equal(person.FirstName, item.Attributes["first-name"]);
10393
}
94+
95+
[Fact]
96+
public async Task Cannot_Filter_If_Explicitly_Forbidden()
97+
{
98+
// arrange
99+
var httpMethod = new HttpMethod("GET");
100+
var route = $"/api/v1/todo-items?include=owner&filter[achieved-date]={DateTime.UtcNow.Date}";
101+
var request = new HttpRequestMessage(httpMethod, route);
102+
103+
// act
104+
var response = await _fixture.Client.SendAsync(request);
105+
106+
// assert
107+
Assert.Equal(HttpStatusCode.BadRequest, response.StatusCode);
108+
}
104109
}
105110
}
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
using System.Net;
2+
using System.Net.Http;
3+
using System.Threading.Tasks;
4+
using JsonApiDotNetCoreExample;
5+
using Xunit;
6+
7+
namespace JsonApiDotNetCoreExampleTests.Acceptance.Spec
8+
{
9+
[Collection("WebHostCollection")]
10+
public class AttributeSortTests
11+
{
12+
private TestFixture<Startup> _fixture;
13+
14+
public AttributeSortTests(TestFixture<Startup> fixture)
15+
{
16+
_fixture = fixture;
17+
}
18+
19+
[Fact]
20+
public async Task Cannot_Sort_If_Explicitly_Forbidden()
21+
{
22+
// arrange
23+
var httpMethod = new HttpMethod("GET");
24+
var route = $"/api/v1/todo-items?include=owner&sort=achieved-date";
25+
var request = new HttpRequestMessage(httpMethod, route);
26+
27+
// act
28+
var response = await _fixture.Client.SendAsync(request);
29+
30+
// assert
31+
Assert.Equal(HttpStatusCode.BadRequest, response.StatusCode);
32+
}
33+
}
34+
}

0 commit comments

Comments
 (0)