Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 4 additions & 4 deletions test/OpenApiTests/AttributeTypes/TypeContainer.cs
Original file line number Diff line number Diff line change
Expand Up @@ -128,7 +128,7 @@ public sealed class TypeContainer : Identifiable<long>
public char? TestNullableChar { get; set; }

[Attr]
public required string TestString { get; set; }
public string TestString { get; set; } = null!;

[Attr]
public string? TestNullableString { get; set; }
Expand Down Expand Up @@ -186,13 +186,13 @@ public sealed class TypeContainer : Identifiable<long>
public Guid? TestNullableGuid { get; set; }

[Attr]
public required Uri TestUri { get; set; }
public Uri TestUri { get; set; } = null!;

[Attr]
public Uri? TestNullableUri { get; set; }

[Attr]
public required IPAddress TestIPAddress { get; set; }
public IPAddress TestIPAddress { get; set; } = null!;

[Attr]
public IPAddress? TestNullableIPAddress { get; set; }
Expand All @@ -204,7 +204,7 @@ public sealed class TypeContainer : Identifiable<long>
public IPNetwork? TestNullableIPNetwork { get; set; }

[Attr]
public required Version TestVersion { get; set; }
public Version TestVersion { get; set; } = null!;

[Attr]
public Version? TestNullableVersion { get; set; }
Expand Down
22 changes: 22 additions & 0 deletions test/OpenApiTests/Meta/JigsawPuzzle.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
using JetBrains.Annotations;
using JsonApiDotNetCore.Resources;
using JsonApiDotNetCore.Resources.Annotations;

namespace OpenApiTests.Meta;

[UsedImplicitly(ImplicitUseTargetFlags.Members)]
[Resource(ControllerNamespace = "OpenApiTests.Meta")]
public sealed class JigsawPuzzle : Identifiable<long>
{
[Attr]
public string Title { get; set; } = null!;

[HasOne]
public JigsawPuzzlePicture FrontPicture { get; set; } = null!;

[HasOne]
public JigsawPuzzlePicture? BackPicture { get; set; }

[HasMany]
public ISet<JigsawPuzzlePiece> Pieces { get; set; } = new HashSet<JigsawPuzzlePiece>();
}
13 changes: 13 additions & 0 deletions test/OpenApiTests/Meta/JigsawPuzzlePicture.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
using JetBrains.Annotations;
using JsonApiDotNetCore.Resources;
using JsonApiDotNetCore.Resources.Annotations;

namespace OpenApiTests.Meta;

[UsedImplicitly(ImplicitUseTargetFlags.Members)]
[Resource(ControllerNamespace = "OpenApiTests.Meta")]
public sealed class JigsawPuzzlePicture : Identifiable<long>
{
[Attr]
public string ImageUrl { get; set; } = null!;
}
16 changes: 16 additions & 0 deletions test/OpenApiTests/Meta/JigsawPuzzlePiece.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
using JetBrains.Annotations;
using JsonApiDotNetCore.Resources;
using JsonApiDotNetCore.Resources.Annotations;

namespace OpenApiTests.Meta;

[UsedImplicitly(ImplicitUseTargetFlags.Members)]
[Resource(ControllerNamespace = "OpenApiTests.Meta")]
public sealed class JigsawPuzzlePiece : Identifiable<long>
{
[Attr]
public string ImageUrl { get; set; } = null!;

[HasOne]
public JigsawPuzzle Puzzle { get; set; } = null!;
}
12 changes: 12 additions & 0 deletions test/OpenApiTests/Meta/MetaDbContext.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
using JetBrains.Annotations;
using Microsoft.EntityFrameworkCore;
using TestBuildingBlocks;

namespace OpenApiTests.Meta;

[UsedImplicitly(ImplicitUseTargetFlags.Members)]
public sealed class MetaDbContext(DbContextOptions<MetaDbContext> options)
: TestableDbContext(options)
{
public DbSet<JigsawPuzzle> Puzzles => Set<JigsawPuzzle>();
}
103 changes: 103 additions & 0 deletions test/OpenApiTests/Meta/MetaTests.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,103 @@
using System.Text.Json;
using JsonApiDotNetCore.Configuration;
using Microsoft.Extensions.DependencyInjection;
using TestBuildingBlocks;
using Xunit;
using Xunit.Abstractions;

namespace OpenApiTests.Meta;

public sealed class MetaTests : IClassFixture<OpenApiTestContext<OpenApiStartup<MetaDbContext>, MetaDbContext>>
{
private readonly OpenApiTestContext<OpenApiStartup<MetaDbContext>, MetaDbContext> _testContext;

public MetaTests(OpenApiTestContext<OpenApiStartup<MetaDbContext>, MetaDbContext> testContext, ITestOutputHelper testOutputHelper)
{
_testContext = testContext;

testContext.UseController<JigsawPuzzlesController>();
testContext.UseController<JigsawPuzzlePicturesController>();
testContext.UseController<JigsawPuzzlePiecesController>();
testContext.UseController<OperationsController>();

testContext.SetTestOutputHelper(testOutputHelper);

var options = (JsonApiOptions)testContext.Factory.Services.GetRequiredService<IJsonApiOptions>();
options.IncludeJsonApiVersion = true;
}

[Fact]
public async Task Includes_meta_definition()
{
// Act
JsonElement document = await _testContext.GetSwaggerDocumentAsync();

// Assert
document.Should().ContainPath("components.schemas.meta").With(metaElement =>
{
metaElement.Should().BeJson("""
{
"type": "object",
"additionalProperties": {
"nullable": true
}
}
""");
});
}

[Theory]
[InlineData("atomicOperation")]
[InlineData("atomicResult")]
[InlineData("createJigsawPuzzlePictureRequestDocument")]
[InlineData("createJigsawPuzzlePieceRequestDocument")]
[InlineData("createJigsawPuzzleRequestDocument")]
[InlineData("errorObject")]
[InlineData("errorResponseDocument")]
[InlineData("identifierInRequest")]
[InlineData("jigsawPuzzleCollectionResponseDocument")]
[InlineData("jigsawPuzzleIdentifierInResponse")]
[InlineData("jigsawPuzzleIdentifierResponseDocument")]
[InlineData("jigsawPuzzlePictureCollectionResponseDocument")]
[InlineData("jigsawPuzzlePictureIdentifierInResponse")]
[InlineData("jigsawPuzzlePictureIdentifierResponseDocument")]
[InlineData("jigsawPuzzlePieceCollectionResponseDocument")]
[InlineData("jigsawPuzzlePieceIdentifierCollectionResponseDocument")]
[InlineData("jigsawPuzzlePieceIdentifierInResponse")]
[InlineData("jsonapi")]
[InlineData("nullableJigsawPuzzlePictureIdentifierResponseDocument")]
[InlineData("nullableSecondaryJigsawPuzzlePictureResponseDocument")]
[InlineData("nullableToOneJigsawPuzzlePictureInRequest")]
[InlineData("nullableToOneJigsawPuzzlePictureInResponse")]
[InlineData("operationsRequestDocument")]
[InlineData("operationsResponseDocument")]
[InlineData("primaryJigsawPuzzlePictureResponseDocument")]
[InlineData("primaryJigsawPuzzlePieceResponseDocument")]
[InlineData("primaryJigsawPuzzleResponseDocument")]
[InlineData("resourceInCreateRequest")]
[InlineData("resourceInResponse")]
[InlineData("resourceInUpdateRequest")]
[InlineData("secondaryJigsawPuzzlePictureResponseDocument")]
[InlineData("secondaryJigsawPuzzleResponseDocument")]
[InlineData("toManyJigsawPuzzlePieceInRequest")]
[InlineData("toManyJigsawPuzzlePieceInResponse")]
[InlineData("toOneJigsawPuzzleInRequest")]
[InlineData("toOneJigsawPuzzleInResponse")]
[InlineData("toOneJigsawPuzzlePictureInRequest")]
[InlineData("toOneJigsawPuzzlePictureInResponse")]
[InlineData("updateJigsawPuzzlePictureRequestDocument")]
[InlineData("updateJigsawPuzzlePieceRequestDocument")]
[InlineData("updateJigsawPuzzleRequestDocument")]
public async Task Includes_meta_property(string schemaId)
{
// Act
JsonElement document = await _testContext.GetSwaggerDocumentAsync();

// Assert
document.Should().ContainPath($"components.schemas.{schemaId}.properties").With(propertiesElement =>
{
JsonElement metaElement = propertiesElement.Should().ContainPath("meta.allOf[0]");
metaElement.Should().HaveProperty("$ref", "#/components/schemas/meta");
});
}
}
13 changes: 13 additions & 0 deletions test/OpenApiTests/Meta/OperationsController.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
using JsonApiDotNetCore.AtomicOperations;
using JsonApiDotNetCore.Configuration;
using JsonApiDotNetCore.Controllers;
using JsonApiDotNetCore.Middleware;
using JsonApiDotNetCore.Resources;
using Microsoft.Extensions.Logging;

namespace OpenApiTests.Meta;

public sealed class OperationsController(
IJsonApiOptions options, IResourceGraph resourceGraph, ILoggerFactory loggerFactory, IOperationsProcessor processor, IJsonApiRequest request,
ITargetedFields targetedFields, IAtomicOperationFilter operationFilter)
: JsonApiOperationsController(options, resourceGraph, loggerFactory, processor, request, targetedFields, operationFilter);
2 changes: 1 addition & 1 deletion test/OpenApiTests/OpenApiTests.csproj
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
<Project Sdk="Microsoft.NET.Sdk">
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFrameworks>net10.0;net9.0;net8.0</TargetFrameworks>
<GenerateDocumentationFile>True</GenerateDocumentationFile>
Expand Down
Loading