From 2621afd020063a68e201c31d862464f70c517202 Mon Sep 17 00:00:00 2001 From: Bart Koelman Date: Thu, 31 Mar 2022 13:24:04 +0200 Subject: [PATCH 1/2] Ported existing tests from #846 to verify they still work against the new implementation in #1142 --- .../Models/Animal.cs | 16 + .../LegacyResourceInheritance/Models/Book.cs | 12 + .../LegacyResourceInheritance/Models/Cat.cs | 17 + .../Models/Content.cs | 13 + .../LegacyResourceInheritance/Models/Dog.cs | 12 + .../Models/Female.cs | 12 + .../LegacyResourceInheritance/Models/Male.cs | 12 + .../Models/Person.cs | 22 ++ .../LegacyResourceInheritance/Models/Video.cs | 12 + .../ResourceInheritanceDbContext.cs | 45 +++ .../ResourceInheritanceTests.cs | 362 ++++++++++++++++++ .../TestBuildingBlocks/DbContextExtensions.cs | 8 + 12 files changed, 543 insertions(+) create mode 100644 test/JsonApiDotNetCoreTests/IntegrationTests/LegacyResourceInheritance/Models/Animal.cs create mode 100644 test/JsonApiDotNetCoreTests/IntegrationTests/LegacyResourceInheritance/Models/Book.cs create mode 100644 test/JsonApiDotNetCoreTests/IntegrationTests/LegacyResourceInheritance/Models/Cat.cs create mode 100644 test/JsonApiDotNetCoreTests/IntegrationTests/LegacyResourceInheritance/Models/Content.cs create mode 100644 test/JsonApiDotNetCoreTests/IntegrationTests/LegacyResourceInheritance/Models/Dog.cs create mode 100644 test/JsonApiDotNetCoreTests/IntegrationTests/LegacyResourceInheritance/Models/Female.cs create mode 100644 test/JsonApiDotNetCoreTests/IntegrationTests/LegacyResourceInheritance/Models/Male.cs create mode 100644 test/JsonApiDotNetCoreTests/IntegrationTests/LegacyResourceInheritance/Models/Person.cs create mode 100644 test/JsonApiDotNetCoreTests/IntegrationTests/LegacyResourceInheritance/Models/Video.cs create mode 100644 test/JsonApiDotNetCoreTests/IntegrationTests/LegacyResourceInheritance/ResourceInheritanceDbContext.cs create mode 100644 test/JsonApiDotNetCoreTests/IntegrationTests/LegacyResourceInheritance/ResourceInheritanceTests.cs diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/LegacyResourceInheritance/Models/Animal.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/LegacyResourceInheritance/Models/Animal.cs new file mode 100644 index 0000000000..d7c6fbc494 --- /dev/null +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/LegacyResourceInheritance/Models/Animal.cs @@ -0,0 +1,16 @@ +using JetBrains.Annotations; +using JsonApiDotNetCore.Resources; +using JsonApiDotNetCore.Resources.Annotations; + +namespace JsonApiDotNetCoreTests.IntegrationTests.LegacyResourceInheritance.Models; + +[UsedImplicitly(ImplicitUseTargetFlags.Members)] +[Resource(ControllerNamespace = "JsonApiDotNetCoreTests.IntegrationTests.LegacyResourceInheritance")] +public abstract class Animal : Identifiable +{ + [Attr] + public bool Feline { get; set; } + + [Attr] + public bool IsDomesticated { get; set; } +} diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/LegacyResourceInheritance/Models/Book.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/LegacyResourceInheritance/Models/Book.cs new file mode 100644 index 0000000000..a8f8657793 --- /dev/null +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/LegacyResourceInheritance/Models/Book.cs @@ -0,0 +1,12 @@ +using JetBrains.Annotations; +using JsonApiDotNetCore.Resources.Annotations; + +namespace JsonApiDotNetCoreTests.IntegrationTests.LegacyResourceInheritance.Models; + +[UsedImplicitly(ImplicitUseTargetFlags.Members)] +[Resource(ControllerNamespace = "JsonApiDotNetCoreTests.IntegrationTests.LegacyResourceInheritance")] +public sealed class Book : Content +{ + [Attr] + public int PageCount { get; set; } +} diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/LegacyResourceInheritance/Models/Cat.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/LegacyResourceInheritance/Models/Cat.cs new file mode 100644 index 0000000000..d0ed803ccb --- /dev/null +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/LegacyResourceInheritance/Models/Cat.cs @@ -0,0 +1,17 @@ +using JetBrains.Annotations; +using JsonApiDotNetCore.Resources.Annotations; + +namespace JsonApiDotNetCoreTests.IntegrationTests.LegacyResourceInheritance.Models; + +[Resource(ControllerNamespace = "JsonApiDotNetCoreTests.IntegrationTests.LegacyResourceInheritance")] +[UsedImplicitly(ImplicitUseTargetFlags.Members)] +public sealed class Cat : Animal +{ + [Attr] + public bool ScaredOfDogs { get; set; } + + public Cat() + { + Feline = true; + } +} diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/LegacyResourceInheritance/Models/Content.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/LegacyResourceInheritance/Models/Content.cs new file mode 100644 index 0000000000..49876b745d --- /dev/null +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/LegacyResourceInheritance/Models/Content.cs @@ -0,0 +1,13 @@ +using JetBrains.Annotations; +using JsonApiDotNetCore.Resources; +using JsonApiDotNetCore.Resources.Annotations; + +namespace JsonApiDotNetCoreTests.IntegrationTests.LegacyResourceInheritance.Models; + +[UsedImplicitly(ImplicitUseTargetFlags.Members)] +[Resource(ControllerNamespace = "JsonApiDotNetCoreTests.IntegrationTests.LegacyResourceInheritance")] +public abstract class Content : Identifiable +{ + [HasMany] + public List Author { get; set; } = new(); +} diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/LegacyResourceInheritance/Models/Dog.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/LegacyResourceInheritance/Models/Dog.cs new file mode 100644 index 0000000000..86b2e12786 --- /dev/null +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/LegacyResourceInheritance/Models/Dog.cs @@ -0,0 +1,12 @@ +using JetBrains.Annotations; +using JsonApiDotNetCore.Resources.Annotations; + +namespace JsonApiDotNetCoreTests.IntegrationTests.LegacyResourceInheritance.Models; + +[UsedImplicitly(ImplicitUseTargetFlags.Members)] +[Resource(ControllerNamespace = "JsonApiDotNetCoreTests.IntegrationTests.LegacyResourceInheritance")] +public sealed class Dog : Animal +{ + [Attr] + public bool RespondsToName { get; set; } +} diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/LegacyResourceInheritance/Models/Female.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/LegacyResourceInheritance/Models/Female.cs new file mode 100644 index 0000000000..6fe24968de --- /dev/null +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/LegacyResourceInheritance/Models/Female.cs @@ -0,0 +1,12 @@ +using JetBrains.Annotations; +using JsonApiDotNetCore.Resources.Annotations; + +namespace JsonApiDotNetCoreTests.IntegrationTests.LegacyResourceInheritance.Models; + +[UsedImplicitly(ImplicitUseTargetFlags.Members)] +[Resource(ControllerNamespace = "JsonApiDotNetCoreTests.IntegrationTests.LegacyResourceInheritance")] +public sealed class Female : Person +{ + [Attr] + public bool IsPregnant { get; set; } +} diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/LegacyResourceInheritance/Models/Male.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/LegacyResourceInheritance/Models/Male.cs new file mode 100644 index 0000000000..ed85c419b0 --- /dev/null +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/LegacyResourceInheritance/Models/Male.cs @@ -0,0 +1,12 @@ +using JetBrains.Annotations; +using JsonApiDotNetCore.Resources.Annotations; + +namespace JsonApiDotNetCoreTests.IntegrationTests.LegacyResourceInheritance.Models; + +[UsedImplicitly(ImplicitUseTargetFlags.Members)] +[Resource(ControllerNamespace = "JsonApiDotNetCoreTests.IntegrationTests.LegacyResourceInheritance")] +public sealed class Male : Person +{ + [Attr] + public bool HasBeard { get; set; } +} diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/LegacyResourceInheritance/Models/Person.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/LegacyResourceInheritance/Models/Person.cs new file mode 100644 index 0000000000..e248d1f330 --- /dev/null +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/LegacyResourceInheritance/Models/Person.cs @@ -0,0 +1,22 @@ +using JetBrains.Annotations; +using JsonApiDotNetCore.Resources; +using JsonApiDotNetCore.Resources.Annotations; + +namespace JsonApiDotNetCoreTests.IntegrationTests.LegacyResourceInheritance.Models; + +[UsedImplicitly(ImplicitUseTargetFlags.Members)] +[Resource(ControllerNamespace = "JsonApiDotNetCoreTests.IntegrationTests.LegacyResourceInheritance")] +public abstract class Person : Identifiable +{ + [Attr] + public bool Retired { get; set; } + + [HasOne] + public Animal? Pet { get; set; } + + [HasMany] + public List Parents { get; set; } = new(); + + [HasMany] + public List FavoriteContent { get; set; } = new(); +} diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/LegacyResourceInheritance/Models/Video.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/LegacyResourceInheritance/Models/Video.cs new file mode 100644 index 0000000000..31f8e8fd7f --- /dev/null +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/LegacyResourceInheritance/Models/Video.cs @@ -0,0 +1,12 @@ +using JetBrains.Annotations; +using JsonApiDotNetCore.Resources.Annotations; + +namespace JsonApiDotNetCoreTests.IntegrationTests.LegacyResourceInheritance.Models; + +[UsedImplicitly(ImplicitUseTargetFlags.Members)] +[Resource(ControllerNamespace = "JsonApiDotNetCoreTests.IntegrationTests.LegacyResourceInheritance")] +public sealed class Video : Content +{ + [Attr] + public int Duration { get; set; } +} diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/LegacyResourceInheritance/ResourceInheritanceDbContext.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/LegacyResourceInheritance/ResourceInheritanceDbContext.cs new file mode 100644 index 0000000000..8ffb825572 --- /dev/null +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/LegacyResourceInheritance/ResourceInheritanceDbContext.cs @@ -0,0 +1,45 @@ +using JetBrains.Annotations; +using JsonApiDotNetCoreTests.IntegrationTests.LegacyResourceInheritance.Models; +using Microsoft.EntityFrameworkCore; + +// @formatter:wrap_chained_method_calls chop_always + +namespace JsonApiDotNetCoreTests.IntegrationTests.LegacyResourceInheritance; + +[UsedImplicitly(ImplicitUseTargetFlags.Members)] +public sealed class ResourceInheritanceDbContext : DbContext +{ + public DbSet People => Set(); + public DbSet Cats => Set(); + public DbSet Dogs => Set(); + public DbSet Females => Set(); + public DbSet Males => Set(); + public DbSet FictionBooks => Set(); + public DbSet