From 047e5dddbb6f2985c2f957f5edb1c69f3d96dc63 Mon Sep 17 00:00:00 2001 From: "F. DeWayne Lane" Date: Wed, 20 May 2020 07:13:17 -0400 Subject: [PATCH 1/4] Fixed: RelativeLinks --- src/Examples/GettingStarted/Startup.cs | 11 +++++++---- .../Serialization/Server/Builders/LinkBuilder.cs | 2 +- 2 files changed, 8 insertions(+), 5 deletions(-) diff --git a/src/Examples/GettingStarted/Startup.cs b/src/Examples/GettingStarted/Startup.cs index 5a59ba2514..c5a6b5204b 100644 --- a/src/Examples/GettingStarted/Startup.cs +++ b/src/Examples/GettingStarted/Startup.cs @@ -9,17 +9,20 @@ namespace GettingStarted { public sealed class Startup { - // This method gets called by the runtime. Use this method to add services to the container. + // This method gets called by the runtime. Use this method to add services to the container. public void ConfigureServices(IServiceCollection services) { services.AddDbContext( options => options.UseSqlite("Data Source=sample.db")); - services.AddJsonApi( - options => options.Namespace = "api"); + services.AddJsonApi(options => + { + options.Namespace = "api"; + //options.RelativeLinks = true; + }); } - // This method gets called by the runtime. Use this method to configure the HTTP request pipeline. + // This method gets called by the runtime. Use this method to configure the HTTP request pipeline. public void Configure(IApplicationBuilder app, SampleDbContext context) { context.Database.EnsureDeleted(); diff --git a/src/JsonApiDotNetCore/Serialization/Server/Builders/LinkBuilder.cs b/src/JsonApiDotNetCore/Serialization/Server/Builders/LinkBuilder.cs index 140f3e31b9..27b2b362e5 100644 --- a/src/JsonApiDotNetCore/Serialization/Server/Builders/LinkBuilder.cs +++ b/src/JsonApiDotNetCore/Serialization/Server/Builders/LinkBuilder.cs @@ -226,7 +226,7 @@ protected string GetBasePath() { if (_options.RelativeLinks) { - return string.Empty; + return $"/{_currentRequest.BasePath}"; } return _currentRequest.BasePath; From 3e7b6587e3300980a7f48cc746eb93328777efa9 Mon Sep 17 00:00:00 2001 From: "F. DeWayne Lane" Date: Thu, 21 May 2020 10:11:55 -0400 Subject: [PATCH 2/4] test: added tests for RelativeLinks true/false --- src/Examples/GettingStarted/Startup.cs | 7 +- .../Acceptance/Spec/DocumentTests/Links.cs | 91 +++++++++++++++++++ 2 files changed, 93 insertions(+), 5 deletions(-) create mode 100644 test/JsonApiDotNetCoreExampleTests/Acceptance/Spec/DocumentTests/Links.cs diff --git a/src/Examples/GettingStarted/Startup.cs b/src/Examples/GettingStarted/Startup.cs index c5a6b5204b..2560e8d6f0 100644 --- a/src/Examples/GettingStarted/Startup.cs +++ b/src/Examples/GettingStarted/Startup.cs @@ -15,11 +15,8 @@ public void ConfigureServices(IServiceCollection services) services.AddDbContext( options => options.UseSqlite("Data Source=sample.db")); - services.AddJsonApi(options => - { - options.Namespace = "api"; - //options.RelativeLinks = true; - }); + services.AddJsonApi( + options => options.Namespace = "api"); } // This method gets called by the runtime. Use this method to configure the HTTP request pipeline. diff --git a/test/JsonApiDotNetCoreExampleTests/Acceptance/Spec/DocumentTests/Links.cs b/test/JsonApiDotNetCoreExampleTests/Acceptance/Spec/DocumentTests/Links.cs new file mode 100644 index 0000000000..290d1bf2b7 --- /dev/null +++ b/test/JsonApiDotNetCoreExampleTests/Acceptance/Spec/DocumentTests/Links.cs @@ -0,0 +1,91 @@ +using System.Net; +using System.Net.Http; +using System.Threading.Tasks; +using JsonApiDotNetCore.Models; +using JsonApiDotNetCoreExample.Models; +using Newtonsoft.Json; +using Xunit; +using Person = JsonApiDotNetCoreExample.Models.Person; +using JsonApiDotNetCore.Configuration; + +namespace JsonApiDotNetCoreExampleTests.Acceptance.Spec.DocumentTests +{ + public sealed class Links : FunctionalTestCollection + { + public Links(StandardApplicationFactory factory) : base(factory) { } + + [Fact] + public async Task GET_RelativeLinks_True_Returns_RelativeLinks() + { + // Arrange + var person = new Person + { + Id = 123, + FirstName = "John", + LastName = "Doe", + Age = 57, + Gender = Gender.Male, + Category = "Family" + }; + + _dbContext.People.RemoveRange(_dbContext.People); + _dbContext.People.Add(person); + _dbContext.SaveChanges(); + + var httpMethod = new HttpMethod("GET"); + var route = $"http://localhost/api/v1/people/{person.Id}"; + + var request = new HttpRequestMessage(httpMethod, route); + + var options = (JsonApiOptions) _factory.GetService(); + options.RelativeLinks = true; + + // Act + var response = await _factory.Client.SendAsync(request); + var responseString = await response.Content.ReadAsStringAsync(); + var document = JsonConvert.DeserializeObject(responseString); + var expectedOwnerSelfLink = $"/api/v1/people/{person.Id}"; + + // Assert + Assert.Equal(HttpStatusCode.OK, response.StatusCode); + Assert.Equal(expectedOwnerSelfLink, document.Links.Self); + } + + [Fact] + public async Task GET_RelativeLinks_False_Returns_HostsLinks() + { + // Arrange + var person = new Person + { + Id = 123, + FirstName = "John", + LastName = "Doe", + Age = 57, + Gender = Gender.Male, + Category = "Family" + }; + + _dbContext.People.RemoveRange(_dbContext.People); + _dbContext.People.Add(person); + _dbContext.SaveChanges(); + + var httpMethod = new HttpMethod("GET"); + var route = $"http://localhost/api/v1/people/{person.Id}"; + + var request = new HttpRequestMessage(httpMethod, route); + + var options = (JsonApiOptions) _factory.GetService(); + options.RelativeLinks = false; + + // Act + var response = await _factory.Client.SendAsync(request); + var responseString = await response.Content.ReadAsStringAsync(); + var document = JsonConvert.DeserializeObject(responseString); + var expectedOwnerSelfLink = $"http://localhost/api/v1/people/{person.Id}"; + + // Assert + Assert.Equal(HttpStatusCode.OK, response.StatusCode); + Assert.Equal(expectedOwnerSelfLink, document.Links.Self); + } + } +} \ No newline at end of file From cf3e0e83c37ee057c724f1d303baf28df0213cdf Mon Sep 17 00:00:00 2001 From: Bart Koelman Date: Fri, 22 May 2020 15:13:37 +0200 Subject: [PATCH 3/4] Added tests for relative/absolute paths with/without namespace --- .../Startups/NoNamespaceStartup.cs | 23 +++++ .../Middleware/JsonApiMiddleware.cs | 35 ++++--- .../Server/Builders/LinkBuilder.cs | 20 +--- .../LinkTestsWithNamespaceTests.cs | 68 ++++++++++++++ .../LinkTestsWithoutNamespaceTests.cs | 68 ++++++++++++++ .../Acceptance/Spec/DocumentTests/Links.cs | 91 ------------------- .../NoNamespaceApplicationFactory.cs | 13 +++ 7 files changed, 200 insertions(+), 118 deletions(-) create mode 100644 src/Examples/JsonApiDotNetCoreExample/Startups/NoNamespaceStartup.cs create mode 100644 test/JsonApiDotNetCoreExampleTests/Acceptance/Spec/DocumentTests/LinkTestsWithNamespaceTests.cs create mode 100644 test/JsonApiDotNetCoreExampleTests/Acceptance/Spec/DocumentTests/LinkTestsWithoutNamespaceTests.cs delete mode 100644 test/JsonApiDotNetCoreExampleTests/Acceptance/Spec/DocumentTests/Links.cs create mode 100644 test/JsonApiDotNetCoreExampleTests/Factories/NoNamespaceApplicationFactory.cs diff --git a/src/Examples/JsonApiDotNetCoreExample/Startups/NoNamespaceStartup.cs b/src/Examples/JsonApiDotNetCoreExample/Startups/NoNamespaceStartup.cs new file mode 100644 index 0000000000..a6fade4548 --- /dev/null +++ b/src/Examples/JsonApiDotNetCoreExample/Startups/NoNamespaceStartup.cs @@ -0,0 +1,23 @@ +using JsonApiDotNetCore.Configuration; +using Microsoft.AspNetCore.Hosting; + +namespace JsonApiDotNetCoreExample.Startups +{ + /// + /// This should be in JsonApiDotNetCoreExampleTests project but changes in .net core 3.0 + /// do no longer allow that. See https://github.com/aspnet/AspNetCore/issues/15373. + /// + public class NoNamespaceStartup : TestStartup + { + public NoNamespaceStartup(IWebHostEnvironment env) : base(env) + { + } + + protected override void ConfigureJsonApiOptions(JsonApiOptions options) + { + base.ConfigureJsonApiOptions(options); + + options.Namespace = null; + } + } +} diff --git a/src/JsonApiDotNetCore/Middleware/JsonApiMiddleware.cs b/src/JsonApiDotNetCore/Middleware/JsonApiMiddleware.cs index d2952010e2..c4106c91b9 100644 --- a/src/JsonApiDotNetCore/Middleware/JsonApiMiddleware.cs +++ b/src/JsonApiDotNetCore/Middleware/JsonApiMiddleware.cs @@ -3,6 +3,7 @@ using System.Linq; using System.Net; using System.Net.Http.Headers; +using System.Text; using System.Threading.Tasks; using JsonApiDotNetCore.Configuration; using JsonApiDotNetCore.Extensions; @@ -29,11 +30,11 @@ public JsonApiMiddleware(RequestDelegate next) _next = next; } - public async Task Invoke(HttpContext httpContext, - IControllerResourceMapping controllerResourceMapping, - IJsonApiOptions options, - ICurrentRequest currentRequest, - IResourceGraph resourceGraph) + public async Task Invoke(HttpContext httpContext, + IControllerResourceMapping controllerResourceMapping, + IJsonApiOptions options, + ICurrentRequest currentRequest, + IResourceGraph resourceGraph) { var routeValues = httpContext.GetRouteData().Values; @@ -171,18 +172,28 @@ private static string GetBaseId(RouteValueDictionary routeValues) private static string GetBasePath(string resourceName, IJsonApiOptions options, HttpRequest httpRequest) { - if (options.RelativeLinks) + var builder = new StringBuilder(); + + if (!options.RelativeLinks) { - return options.Namespace; + builder.Append(httpRequest.Scheme); + builder.Append("://"); + builder.Append(httpRequest.Host); } - var customRoute = GetCustomRoute(httpRequest.Path.Value, resourceName, options.Namespace); - var toReturn = $"{httpRequest.Scheme}://{httpRequest.Host}/{options.Namespace}"; - if (customRoute != null) + string customRoute = GetCustomRoute(httpRequest.Path.Value, resourceName, options.Namespace); + if (!string.IsNullOrEmpty(customRoute)) + { + builder.Append('/'); + builder.Append(customRoute); + } + else if (!string.IsNullOrEmpty(options.Namespace)) { - toReturn += $"/{customRoute}"; + builder.Append('/'); + builder.Append(options.Namespace); } - return toReturn; + + return builder.ToString(); } private static string GetCustomRoute(string path, string resourceName, string apiNamespace) diff --git a/src/JsonApiDotNetCore/Serialization/Server/Builders/LinkBuilder.cs b/src/JsonApiDotNetCore/Serialization/Server/Builders/LinkBuilder.cs index 27b2b362e5..9cd27888a9 100644 --- a/src/JsonApiDotNetCore/Serialization/Server/Builders/LinkBuilder.cs +++ b/src/JsonApiDotNetCore/Serialization/Server/Builders/LinkBuilder.cs @@ -92,7 +92,7 @@ private void SetPageLinks(ResourceContext resourceContext, TopLevelLinks links) private string GetSelfTopLevelLink(ResourceContext resourceContext) { var builder = new StringBuilder(); - builder.Append(GetBasePath()); + builder.Append(_currentRequest.BasePath); builder.Append("/"); builder.Append(resourceContext.ResourceName); @@ -127,7 +127,7 @@ private string GetPageLink(ResourceContext resourceContext, int pageOffset, int parameters["page[number]"] = pageOffset.ToString(); }); - return $"{GetBasePath()}/{resourceContext.ResourceName}" + queryString; + return $"{_currentRequest.BasePath}/{resourceContext.ResourceName}" + queryString; } private string BuildQueryString(Action> updateAction) @@ -175,17 +175,17 @@ public RelationshipLinks GetRelationshipLinks(RelationshipAttribute relationship private string GetSelfRelationshipLink(string parent, string parentId, string navigation) { - return $"{GetBasePath()}/{parent}/{parentId}/relationships/{navigation}"; + return $"{_currentRequest.BasePath}/{parent}/{parentId}/relationships/{navigation}"; } private string GetSelfResourceLink(string resource, string resourceId) { - return $"{GetBasePath()}/{resource}/{resourceId}"; + return $"{_currentRequest.BasePath}/{resource}/{resourceId}"; } private string GetRelatedRelationshipLink(string parent, string parentId, string navigation) { - return $"{GetBasePath()}/{parent}/{parentId}/{navigation}"; + return $"{_currentRequest.BasePath}/{parent}/{parentId}/{navigation}"; } /// @@ -221,15 +221,5 @@ private bool ShouldAddRelationshipLink(ResourceContext resourceContext, Relation return _options.RelationshipLinks.HasFlag(link); } - - protected string GetBasePath() - { - if (_options.RelativeLinks) - { - return $"/{_currentRequest.BasePath}"; - } - - return _currentRequest.BasePath; - } } } diff --git a/test/JsonApiDotNetCoreExampleTests/Acceptance/Spec/DocumentTests/LinkTestsWithNamespaceTests.cs b/test/JsonApiDotNetCoreExampleTests/Acceptance/Spec/DocumentTests/LinkTestsWithNamespaceTests.cs new file mode 100644 index 0000000000..8543cb55e9 --- /dev/null +++ b/test/JsonApiDotNetCoreExampleTests/Acceptance/Spec/DocumentTests/LinkTestsWithNamespaceTests.cs @@ -0,0 +1,68 @@ +using System.Net; +using System.Net.Http; +using System.Threading.Tasks; +using JsonApiDotNetCore.Configuration; +using JsonApiDotNetCore.Models; +using JsonApiDotNetCoreExample.Models; +using Newtonsoft.Json; +using Xunit; + +namespace JsonApiDotNetCoreExampleTests.Acceptance.Spec.DocumentTests +{ + public sealed class LinkTestsWithNamespaceTests : FunctionalTestCollection + { + public LinkTestsWithNamespaceTests(StandardApplicationFactory factory) : base(factory) + { + } + + [Fact] + public async Task GET_RelativeLinks_True_With_Namespace_Returns_RelativeLinks() + { + // Arrange + var person = new Person(); + + _dbContext.People.Add(person); + _dbContext.SaveChanges(); + + var route = "/api/v1/people/" + person.StringId; + var request = new HttpRequestMessage(HttpMethod.Get, route); + + var options = (JsonApiOptions) _factory.GetService(); + options.RelativeLinks = true; + + // Act + var response = await _factory.Client.SendAsync(request); + var responseString = await response.Content.ReadAsStringAsync(); + var document = JsonConvert.DeserializeObject(responseString); + + // Assert + Assert.Equal(HttpStatusCode.OK, response.StatusCode); + Assert.Equal("/api/v1/people/" + person.StringId, document.Links.Self); + } + + [Fact] + public async Task GET_RelativeLinks_False_With_Namespace_Returns_AbsoluteLinks() + { + // Arrange + var person = new Person(); + + _dbContext.People.Add(person); + _dbContext.SaveChanges(); + + var route = "/api/v1/people/" + person.StringId; + var request = new HttpRequestMessage(HttpMethod.Get, route); + + var options = (JsonApiOptions) _factory.GetService(); + options.RelativeLinks = false; + + // Act + var response = await _factory.Client.SendAsync(request); + var responseString = await response.Content.ReadAsStringAsync(); + var document = JsonConvert.DeserializeObject(responseString); + + // Assert + Assert.Equal(HttpStatusCode.OK, response.StatusCode); + Assert.Equal($"http://localhost/api/v1/people/" + person.StringId, document.Links.Self); + } + } +} diff --git a/test/JsonApiDotNetCoreExampleTests/Acceptance/Spec/DocumentTests/LinkTestsWithoutNamespaceTests.cs b/test/JsonApiDotNetCoreExampleTests/Acceptance/Spec/DocumentTests/LinkTestsWithoutNamespaceTests.cs new file mode 100644 index 0000000000..6776ad4853 --- /dev/null +++ b/test/JsonApiDotNetCoreExampleTests/Acceptance/Spec/DocumentTests/LinkTestsWithoutNamespaceTests.cs @@ -0,0 +1,68 @@ +using System.Net; +using System.Net.Http; +using System.Threading.Tasks; +using JsonApiDotNetCore.Models; +using Newtonsoft.Json; +using Xunit; +using JsonApiDotNetCore.Configuration; +using JsonApiDotNetCoreExample.Models; + +namespace JsonApiDotNetCoreExampleTests.Acceptance.Spec.DocumentTests +{ + public sealed class LinkTestsWithoutNamespaceTests : FunctionalTestCollection + { + public LinkTestsWithoutNamespaceTests(NoNamespaceApplicationFactory factory) : base(factory) + { + } + + [Fact] + public async Task GET_RelativeLinks_True_Without_Namespace_Returns_RelativeLinks() + { + // Arrange + var person = new Person(); + + _dbContext.People.Add(person); + _dbContext.SaveChanges(); + + var route = "/people/" + person.StringId; + var request = new HttpRequestMessage(HttpMethod.Get, route); + + var options = (JsonApiOptions) _factory.GetService(); + options.RelativeLinks = true; + + // Act + var response = await _factory.Client.SendAsync(request); + var responseString = await response.Content.ReadAsStringAsync(); + var document = JsonConvert.DeserializeObject(responseString); + + // Assert + Assert.Equal(HttpStatusCode.OK, response.StatusCode); + Assert.Equal("/people/" + person.StringId, document.Links.Self); + } + + [Fact] + public async Task GET_RelativeLinks_False_Without_Namespace_Returns_AbsoluteLinks() + { + // Arrange + var person = new Person(); + + _dbContext.People.Add(person); + _dbContext.SaveChanges(); + + var route = "/people/" + person.StringId; + var request = new HttpRequestMessage(HttpMethod.Get, route); + + var options = (JsonApiOptions) _factory.GetService(); + options.RelativeLinks = false; + + // Act + var response = await _factory.Client.SendAsync(request); + var responseString = await response.Content.ReadAsStringAsync(); + var document = JsonConvert.DeserializeObject(responseString); + + // Assert + Assert.Equal(HttpStatusCode.OK, response.StatusCode); + Assert.Equal($"http://localhost/people/" + person.StringId, document.Links.Self); + } + } +} diff --git a/test/JsonApiDotNetCoreExampleTests/Acceptance/Spec/DocumentTests/Links.cs b/test/JsonApiDotNetCoreExampleTests/Acceptance/Spec/DocumentTests/Links.cs deleted file mode 100644 index 290d1bf2b7..0000000000 --- a/test/JsonApiDotNetCoreExampleTests/Acceptance/Spec/DocumentTests/Links.cs +++ /dev/null @@ -1,91 +0,0 @@ -using System.Net; -using System.Net.Http; -using System.Threading.Tasks; -using JsonApiDotNetCore.Models; -using JsonApiDotNetCoreExample.Models; -using Newtonsoft.Json; -using Xunit; -using Person = JsonApiDotNetCoreExample.Models.Person; -using JsonApiDotNetCore.Configuration; - -namespace JsonApiDotNetCoreExampleTests.Acceptance.Spec.DocumentTests -{ - public sealed class Links : FunctionalTestCollection - { - public Links(StandardApplicationFactory factory) : base(factory) { } - - [Fact] - public async Task GET_RelativeLinks_True_Returns_RelativeLinks() - { - // Arrange - var person = new Person - { - Id = 123, - FirstName = "John", - LastName = "Doe", - Age = 57, - Gender = Gender.Male, - Category = "Family" - }; - - _dbContext.People.RemoveRange(_dbContext.People); - _dbContext.People.Add(person); - _dbContext.SaveChanges(); - - var httpMethod = new HttpMethod("GET"); - var route = $"http://localhost/api/v1/people/{person.Id}"; - - var request = new HttpRequestMessage(httpMethod, route); - - var options = (JsonApiOptions) _factory.GetService(); - options.RelativeLinks = true; - - // Act - var response = await _factory.Client.SendAsync(request); - var responseString = await response.Content.ReadAsStringAsync(); - var document = JsonConvert.DeserializeObject(responseString); - var expectedOwnerSelfLink = $"/api/v1/people/{person.Id}"; - - // Assert - Assert.Equal(HttpStatusCode.OK, response.StatusCode); - Assert.Equal(expectedOwnerSelfLink, document.Links.Self); - } - - [Fact] - public async Task GET_RelativeLinks_False_Returns_HostsLinks() - { - // Arrange - var person = new Person - { - Id = 123, - FirstName = "John", - LastName = "Doe", - Age = 57, - Gender = Gender.Male, - Category = "Family" - }; - - _dbContext.People.RemoveRange(_dbContext.People); - _dbContext.People.Add(person); - _dbContext.SaveChanges(); - - var httpMethod = new HttpMethod("GET"); - var route = $"http://localhost/api/v1/people/{person.Id}"; - - var request = new HttpRequestMessage(httpMethod, route); - - var options = (JsonApiOptions) _factory.GetService(); - options.RelativeLinks = false; - - // Act - var response = await _factory.Client.SendAsync(request); - var responseString = await response.Content.ReadAsStringAsync(); - var document = JsonConvert.DeserializeObject(responseString); - var expectedOwnerSelfLink = $"http://localhost/api/v1/people/{person.Id}"; - - // Assert - Assert.Equal(HttpStatusCode.OK, response.StatusCode); - Assert.Equal(expectedOwnerSelfLink, document.Links.Self); - } - } -} \ No newline at end of file diff --git a/test/JsonApiDotNetCoreExampleTests/Factories/NoNamespaceApplicationFactory.cs b/test/JsonApiDotNetCoreExampleTests/Factories/NoNamespaceApplicationFactory.cs new file mode 100644 index 0000000000..e13326ffcf --- /dev/null +++ b/test/JsonApiDotNetCoreExampleTests/Factories/NoNamespaceApplicationFactory.cs @@ -0,0 +1,13 @@ +using JsonApiDotNetCoreExample.Startups; +using Microsoft.AspNetCore.Hosting; + +namespace JsonApiDotNetCoreExampleTests +{ + public class NoNamespaceApplicationFactory : CustomApplicationFactoryBase + { + protected override void ConfigureWebHost(IWebHostBuilder builder) + { + builder.UseStartup(); + } + } +} From 82be49ee2e22cdf333bbae13ced50fd4ab58a5b0 Mon Sep 17 00:00:00 2001 From: Bart Koelman Date: Fri, 22 May 2020 15:20:07 +0200 Subject: [PATCH 4/4] Fixed test names --- ...kTestsWithNamespaceTests.cs => LinksWithNamespaceTests.cs} | 4 ++-- ...WithoutNamespaceTests.cs => LinksWithoutNamespaceTests.cs} | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) rename test/JsonApiDotNetCoreExampleTests/Acceptance/Spec/DocumentTests/{LinkTestsWithNamespaceTests.cs => LinksWithNamespaceTests.cs} (91%) rename test/JsonApiDotNetCoreExampleTests/Acceptance/Spec/DocumentTests/{LinkTestsWithoutNamespaceTests.cs => LinksWithoutNamespaceTests.cs} (91%) diff --git a/test/JsonApiDotNetCoreExampleTests/Acceptance/Spec/DocumentTests/LinkTestsWithNamespaceTests.cs b/test/JsonApiDotNetCoreExampleTests/Acceptance/Spec/DocumentTests/LinksWithNamespaceTests.cs similarity index 91% rename from test/JsonApiDotNetCoreExampleTests/Acceptance/Spec/DocumentTests/LinkTestsWithNamespaceTests.cs rename to test/JsonApiDotNetCoreExampleTests/Acceptance/Spec/DocumentTests/LinksWithNamespaceTests.cs index 8543cb55e9..d3944d2464 100644 --- a/test/JsonApiDotNetCoreExampleTests/Acceptance/Spec/DocumentTests/LinkTestsWithNamespaceTests.cs +++ b/test/JsonApiDotNetCoreExampleTests/Acceptance/Spec/DocumentTests/LinksWithNamespaceTests.cs @@ -9,9 +9,9 @@ namespace JsonApiDotNetCoreExampleTests.Acceptance.Spec.DocumentTests { - public sealed class LinkTestsWithNamespaceTests : FunctionalTestCollection + public sealed class LinksWithNamespaceTests : FunctionalTestCollection { - public LinkTestsWithNamespaceTests(StandardApplicationFactory factory) : base(factory) + public LinksWithNamespaceTests(StandardApplicationFactory factory) : base(factory) { } diff --git a/test/JsonApiDotNetCoreExampleTests/Acceptance/Spec/DocumentTests/LinkTestsWithoutNamespaceTests.cs b/test/JsonApiDotNetCoreExampleTests/Acceptance/Spec/DocumentTests/LinksWithoutNamespaceTests.cs similarity index 91% rename from test/JsonApiDotNetCoreExampleTests/Acceptance/Spec/DocumentTests/LinkTestsWithoutNamespaceTests.cs rename to test/JsonApiDotNetCoreExampleTests/Acceptance/Spec/DocumentTests/LinksWithoutNamespaceTests.cs index 6776ad4853..d3914c2e12 100644 --- a/test/JsonApiDotNetCoreExampleTests/Acceptance/Spec/DocumentTests/LinkTestsWithoutNamespaceTests.cs +++ b/test/JsonApiDotNetCoreExampleTests/Acceptance/Spec/DocumentTests/LinksWithoutNamespaceTests.cs @@ -9,9 +9,9 @@ namespace JsonApiDotNetCoreExampleTests.Acceptance.Spec.DocumentTests { - public sealed class LinkTestsWithoutNamespaceTests : FunctionalTestCollection + public sealed class LinksWithoutNamespaceTests : FunctionalTestCollection { - public LinkTestsWithoutNamespaceTests(NoNamespaceApplicationFactory factory) : base(factory) + public LinksWithoutNamespaceTests(NoNamespaceApplicationFactory factory) : base(factory) { }