Skip to content

Commit 54a023f

Browse files
committed
Add models and adjusted models in OpenAPI document tests such that i reflect features that were covered in the private repository
1 parent 1c099e7 commit 54a023f

11 files changed

+1459
-393
lines changed

src/JsonApiDotNetCore.OpenApi/JsonApiActionDescriptorCollectionProvider.cs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -100,7 +100,6 @@ private static IList<ActionDescriptor> AddJsonApiMetadataToAction(ActionDescript
100100

101101
private static void UpdateProducesResponseTypeAttribute(ActionDescriptor endpoint, Type responseTypeToSet)
102102
{
103-
// TODO: is this check really adding anything? is the "else" ever hit, and if so, is that even meaningful?
104103
if (ProducesJsonApiResponseBody(endpoint))
105104
{
106105
var producesResponse = endpoint.GetFilterMetadata<ProducesResponseTypeAttribute>();

src/JsonApiDotNetCore.OpenApi/ServiceCollectionExtensions.cs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@
77
using Microsoft.AspNetCore.Mvc.ApiExplorer;
88
using Microsoft.AspNetCore.Mvc.Infrastructure;
99
using Microsoft.Extensions.DependencyInjection;
10-
using Microsoft.OpenApi.Models;
1110
using Newtonsoft.Json.Serialization;
1211
using Swashbuckle.AspNetCore.Swagger;
1312
using Swashbuckle.AspNetCore.SwaggerGen;

test/OpenApiTests/AircraftType.cs

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
namespace OpenApiTests
2+
{
3+
public enum AircraftType
4+
{
5+
Turboprops,
6+
LightJet,
7+
MidSizeJet,
8+
JumboJet
9+
}
10+
}

test/OpenApiTests/Airplane.cs

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,13 +7,22 @@
77
namespace OpenApiTests
88
{
99
[UsedImplicitly(ImplicitUseTargetFlags.Members)]
10-
public sealed class Airplane : Identifiable
10+
public sealed class Airplane : Identifiable<string>
1111
{
12-
[Attr]
12+
[Attr(Capabilities = AttrCapabilities.AllowView | AttrCapabilities.AllowCreate)]
1313
public int SeatingCapacity { get; set; }
1414

15-
[Attr]
16-
public DateTimeOffset ManufacturedAt { get; set; }
15+
[Attr(Capabilities = AttrCapabilities.AllowView | AttrCapabilities.AllowCreate)]
16+
public long SerialNumber { get; set; }
17+
18+
[Attr(PublicName = "airplane-type", Capabilities = AttrCapabilities.AllowView | AttrCapabilities.AllowCreate)]
19+
public AircraftType AircraftType { get; set; }
20+
21+
[Attr(Capabilities = AttrCapabilities.AllowView | AttrCapabilities.AllowCreate)]
22+
public DateTime ManufacturedAt { get; set; }
23+
24+
[Attr(Capabilities = AttrCapabilities.AllowView | AttrCapabilities.AllowChange)]
25+
public DateTime? LastServicedAt { get; set; }
1726

1827
[HasMany]
1928
public ISet<Flight> Flights { get; set; }

test/OpenApiTests/AirplanesController.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,9 @@
55

66
namespace OpenApiTests
77
{
8-
public sealed class AirplanesController : JsonApiController<Airplane>
8+
public sealed class AirplanesController : JsonApiController<Airplane, string>
99
{
10-
public AirplanesController(IJsonApiOptions options, ILoggerFactory loggerFactory, IResourceService<Airplane> resourceService)
10+
public AirplanesController(IJsonApiOptions options, ILoggerFactory loggerFactory, IResourceService<Airplane, string> resourceService)
1111
: base(options, loggerFactory, resourceService)
1212
{
1313
}

test/OpenApiTests/Flight.cs

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
using System;
2+
using System.Collections.Generic;
23
using JetBrains.Annotations;
34
using JsonApiDotNetCore.Resources;
45
using JsonApiDotNetCore.Resources.Annotations;
@@ -8,10 +9,19 @@ namespace OpenApiTests
89
[UsedImplicitly(ImplicitUseTargetFlags.Members)]
910
public sealed class Flight : Identifiable
1011
{
11-
[Attr]
12+
[Attr(Capabilities = AttrCapabilities.AllowView | AttrCapabilities.AllowCreate)]
1213
public string Destination { get; set; }
1314

14-
[Attr]
15+
[Attr(Capabilities = AttrCapabilities.AllowView | AttrCapabilities.AllowCreate | AttrCapabilities.AllowChange)]
1516
public DateTimeOffset DepartsAt { get; set; }
17+
18+
[HasOne]
19+
public Airplane ServicingAirplane { get; set; }
20+
21+
[HasMany(PublicName = "flight-attendants")]
22+
public ISet<FlightAttendant> CabinPersonnel { get; set; }
23+
24+
[HasOne]
25+
public FlightAttendant Purser { get; set; }
1626
}
1727
}

test/OpenApiTests/FlightAttendant.cs

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
using System.Collections.Generic;
2+
using System.ComponentModel.DataAnnotations;
3+
using JetBrains.Annotations;
4+
using JsonApiDotNetCore.Resources;
5+
using JsonApiDotNetCore.Resources.Annotations;
6+
7+
namespace OpenApiTests
8+
{
9+
[UsedImplicitly(ImplicitUseTargetFlags.Members)]
10+
public sealed class FlightAttendant : Identifiable<long>
11+
{
12+
[Attr(Capabilities = AttrCapabilities.AllowView | AttrCapabilities.AllowFilter)]
13+
public override long Id { get; set; }
14+
15+
[Attr(Capabilities = AttrCapabilities.None)]
16+
public FlightAttendantExpertise ExpertiseLevel { get; set; }
17+
18+
[Attr(PublicName = "document-number", Capabilities = AttrCapabilities.AllowCreate | AttrCapabilities.AllowChange)]
19+
[Required]
20+
[MaxLength(9)]
21+
public string PassportNumber { get; set; }
22+
23+
[Attr(Capabilities = AttrCapabilities.All)]
24+
[Required]
25+
[EmailAddress]
26+
public string EmailAddress { get; set; }
27+
28+
[Attr(Capabilities = AttrCapabilities.All)]
29+
[Required]
30+
[Url]
31+
public string ProfileImageUrl { get; set; }
32+
33+
[Attr(Capabilities = AttrCapabilities.All)]
34+
public ICollection<string> DestinationPreferences { get; set; }
35+
36+
[HasMany]
37+
public ISet<Flight> Flights { get; set; }
38+
39+
[HasOne]
40+
public Flight PurserOnFlight { get; set; }
41+
}
42+
}
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
namespace OpenApiTests
2+
{
3+
public enum FlightAttendantExpertise
4+
{
5+
Junior,
6+
Intermediate,
7+
Senior,
8+
Purser
9+
}
10+
}

test/OpenApiTests/OpenApiDbContext.cs

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,36 @@
11
using JetBrains.Annotations;
22
using Microsoft.EntityFrameworkCore;
33

4+
// @formatter:wrap_chained_method_calls chop_always
5+
// @formatter:keep_existing_linebreaks true
6+
47
namespace OpenApiTests
58
{
69
[UsedImplicitly(ImplicitUseTargetFlags.Members)]
710
public sealed class OpenApiDbContext : DbContext
811
{
912
public DbSet<Airplane> Airplanes { get; set; }
1013
public DbSet<Flight> Flights { get; set; }
14+
public DbSet<FlightAttendant> FlightAttendants { get; set; }
1115

1216
public OpenApiDbContext(DbContextOptions<OpenApiDbContext> options)
1317
: base(options)
1418
{
1519
}
20+
21+
protected override void OnModelCreating(ModelBuilder builder)
22+
{
23+
builder.Entity<Flight>()
24+
.HasMany(flight => flight.CabinPersonnel)
25+
.WithMany(flightAttendant => flightAttendant.Flights);
26+
27+
builder.Entity<FlightAttendant>()
28+
.Ignore(flightAttendant => flightAttendant.DestinationPreferences);
29+
30+
builder.Entity<Flight>()
31+
.HasOne(flight => flight.Purser)
32+
.WithOne(flightAttendant => flightAttendant.PurserOnFlight)
33+
.HasForeignKey<Flight>("PurserId");
34+
}
1635
}
1736
}

test/OpenApiTests/OpenApiStartup.cs

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,12 @@
11
using JsonApiDotNetCore.Configuration;
22
using JsonApiDotNetCore.OpenApi;
3+
using JsonApiDotNetCore.Resources.Annotations;
34
using Microsoft.AspNetCore.Builder;
45
using Microsoft.AspNetCore.Hosting;
56
using Microsoft.EntityFrameworkCore;
67
using Microsoft.Extensions.DependencyInjection;
78
using Microsoft.Extensions.Logging;
9+
using Newtonsoft.Json.Serialization;
810
using TestBuildingBlocks;
911

1012
namespace OpenApiTests
@@ -21,6 +23,24 @@ public override void ConfigureServices(IServiceCollection services)
2123
services.AddOpenApi(mvcBuilder);
2224
}
2325

26+
protected override void SetJsonApiOptions(JsonApiOptions options)
27+
{
28+
base.SetJsonApiOptions(options);
29+
30+
options.Namespace = "api/v1";
31+
options.DefaultPageSize = new PageSize(10);
32+
options.MaximumPageSize = new PageSize(100);
33+
options.MaximumPageNumber = new PageNumber(50);
34+
options.IncludeTotalResourceCount = true;
35+
options.ValidateModelState = true;
36+
options.DefaultAttrCapabilities = AttrCapabilities.AllowView;
37+
38+
options.SerializerSettings.ContractResolver = new DefaultContractResolver
39+
{
40+
NamingStrategy = new KebabCaseNamingStrategy()
41+
};
42+
}
43+
2444
public override void Configure(IApplicationBuilder app, IWebHostEnvironment environment, ILoggerFactory loggerFactory)
2545
{
2646
app.UseRouting();

0 commit comments

Comments
 (0)