diff --git a/backend/tests/Squidex.Data.Tests/EntityFramework/Domain/Users/EFOpenIddictTests.cs b/backend/tests/Squidex.Data.Tests/EntityFramework/Domain/Users/EFOpenIddictTests.cs new file mode 100644 index 000000000..bd7fc633f --- /dev/null +++ b/backend/tests/Squidex.Data.Tests/EntityFramework/Domain/Users/EFOpenIddictTests.cs @@ -0,0 +1,51 @@ +// ========================================================================== +// Squidex Headless CMS +// ========================================================================== +// Copyright (c) Squidex UG (haftungsbeschraenkt) +// All rights reserved. Licensed under the MIT license. +// ========================================================================== + +using Microsoft.EntityFrameworkCore; +using OpenIddict.EntityFrameworkCore.Models; +using Squidex.EntityFramework.TestHelpers; +using Squidex.Infrastructure; +using static OpenIddict.Abstractions.OpenIddictConstants; + +namespace Squidex.EntityFramework.Domain.Users; + +public abstract class EFOpenIddictTests(ISqlFixture fixture) + where TContext : DbContext, IDbContextWithDialect +{ + [Fact] + public async Task Should_allow_openiddict_tokens_without_application() + { + await using var dbContext = await fixture.DbContextFactory.CreateDbContextAsync(); + + var authorization = new OpenIddictEntityFrameworkCoreAuthorization + { + Id = Guid.NewGuid().ToString(), + ApplicationId = null, + CreationDate = DateTime.UtcNow, + Status = Statuses.Valid, + Subject = "admin@squidex.io", + Type = AuthorizationTypes.Permanent, + }; + + var token = new OpenIddictEntityFrameworkCoreToken + { + Id = Guid.NewGuid().ToString(), + ApplicationId = null, + Authorization = authorization, + CreationDate = DateTime.UtcNow, + ExpirationDate = DateTime.UtcNow.AddMinutes(5), + Status = Statuses.Valid, + Subject = "admin@squidex.io", + Type = "authorization_code", + }; + + dbContext.Set().Add(authorization); + dbContext.Set().Add(token); + + await dbContext.SaveChangesAsync(); + } +}