Skip to content

Commit

Permalink
Ported existing tests from #846 to verify they still work against the…
Browse files Browse the repository at this point in the history
… new implementation in #1142
  • Loading branch information
Bart Koelman committed Mar 31, 2022
1 parent d12eec7 commit 2621afd
Show file tree
Hide file tree
Showing 12 changed files with 543 additions and 0 deletions.
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 JsonApiDotNetCoreTests.IntegrationTests.LegacyResourceInheritance.Models;

[UsedImplicitly(ImplicitUseTargetFlags.Members)]
[Resource(ControllerNamespace = "JsonApiDotNetCoreTests.IntegrationTests.LegacyResourceInheritance")]
public abstract class Animal : Identifiable<long>
{
[Attr]
public bool Feline { get; set; }

[Attr]
public bool IsDomesticated { get; set; }
}
Original file line number Diff line number Diff line change
@@ -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; }
}
Original file line number Diff line number Diff line change
@@ -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;
}
}
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 JsonApiDotNetCoreTests.IntegrationTests.LegacyResourceInheritance.Models;

[UsedImplicitly(ImplicitUseTargetFlags.Members)]
[Resource(ControllerNamespace = "JsonApiDotNetCoreTests.IntegrationTests.LegacyResourceInheritance")]
public abstract class Content : Identifiable<long>
{
[HasMany]
public List<Person> Author { get; set; } = new();
}
Original file line number Diff line number Diff line change
@@ -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; }
}
Original file line number Diff line number Diff line change
@@ -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; }
}
Original file line number Diff line number Diff line change
@@ -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; }
}
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 JsonApiDotNetCoreTests.IntegrationTests.LegacyResourceInheritance.Models;

[UsedImplicitly(ImplicitUseTargetFlags.Members)]
[Resource(ControllerNamespace = "JsonApiDotNetCoreTests.IntegrationTests.LegacyResourceInheritance")]
public abstract class Person : Identifiable<long>
{
[Attr]
public bool Retired { get; set; }

[HasOne]
public Animal? Pet { get; set; }

[HasMany]
public List<Person> Parents { get; set; } = new();

[HasMany]
public List<Content> FavoriteContent { get; set; } = new();
}
Original file line number Diff line number Diff line change
@@ -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; }
}
Original file line number Diff line number Diff line change
@@ -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<Person> People => Set<Person>();
public DbSet<Cat> Cats => Set<Cat>();
public DbSet<Dog> Dogs => Set<Dog>();
public DbSet<Female> Females => Set<Female>();
public DbSet<Male> Males => Set<Male>();
public DbSet<Book> FictionBooks => Set<Book>();
public DbSet<Video> NonFictionBooks => Set<Video>();

public ResourceInheritanceDbContext(DbContextOptions<ResourceInheritanceDbContext> options)
: base(options)
{
}

protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<Person>()
.ToTable("Persons")
.HasDiscriminator<int>("Type")
.HasValue<Male>(1)
.HasValue<Female>(2);

modelBuilder.Entity<Animal>()
.ToTable("Animals")
.HasDiscriminator<int>("Type")
.HasValue<Cat>(1)
.HasValue<Dog>(2);

modelBuilder.Entity<Content>()
.ToTable("Books")
.HasDiscriminator<int>("Type")
.HasValue<Video>(1)
.HasValue<Book>(2);
}
}
Loading

0 comments on commit 2621afd

Please sign in to comment.