Still working on getting client credential flow complete, most of the request works but still working on generating the JWT.
This commit is contained in:
parent
1a8c63808a
commit
8782ef39c6
80 changed files with 1331 additions and 414 deletions
|
|
@ -1,5 +1,9 @@
|
|||
using IdentityShroud.Api;
|
||||
using IdentityShroud.Core.Contracts;
|
||||
using IdentityShroud.Core.EFCore;
|
||||
using IdentityShroud.Core.Model;
|
||||
using IdentityShroud.Core.Security;
|
||||
using IdentityShroud.Core.Security.Keys;
|
||||
using IdentityShroud.Core.Services;
|
||||
using IdentityShroud.Core.Tests.Fixtures;
|
||||
using IdentityShroud.TestUtils.Substitutes;
|
||||
|
|
@ -7,6 +11,29 @@ using Microsoft.EntityFrameworkCore;
|
|||
|
||||
namespace IdentityShroud.Core.Tests.Services;
|
||||
|
||||
public static class RealmDekBuilder
|
||||
{
|
||||
public static RealmDek DefaultActive() =>
|
||||
new()
|
||||
{
|
||||
Id = DekId.NewId(),
|
||||
Active = true,
|
||||
Algorithm = KeyType.AES,
|
||||
KeyData = new EncryptedDek(KekId.NewId(),
|
||||
[
|
||||
0
|
||||
])
|
||||
};
|
||||
}
|
||||
|
||||
public static class ClientCreateRequestBuilder
|
||||
{
|
||||
public static ClientCreateRequest Default() => new(
|
||||
"test-client",
|
||||
"Test Client",
|
||||
"A test client");
|
||||
}
|
||||
|
||||
public class ClientServiceTests : IClassFixture<DbFixture>
|
||||
{
|
||||
private readonly DbFixture _dbFixture;
|
||||
|
|
@ -34,15 +61,28 @@ public class ClientServiceTests : IClassFixture<DbFixture>
|
|||
{
|
||||
if (!db.Realms.Any(r => r.Id == _realmId))
|
||||
{
|
||||
db.Realms.Add(new() { Id = _realmId, Slug = "test-realm", Name = "Test Realm" });
|
||||
db.Realms.Add(new()
|
||||
{
|
||||
Id = _realmId,
|
||||
Slug = "test-realm",
|
||||
Name = "Test Realm",
|
||||
DataEncryptionKeys = [ RealmDekBuilder.DefaultActive(), ],
|
||||
});
|
||||
|
||||
db.SaveChanges();
|
||||
}
|
||||
}
|
||||
|
||||
private ClientService CreateSut(Db db) => new(db,
|
||||
_dataEncryptionService,
|
||||
new ClientCreateRequestValidator(),
|
||||
_clock);
|
||||
|
||||
|
||||
[Theory]
|
||||
[InlineData(false)]
|
||||
[InlineData(true)]
|
||||
public async Task Create(bool allowClientCredentialsFlow)
|
||||
public async Task Create(bool withSecret)
|
||||
{
|
||||
// Setup
|
||||
DateTime now = DateTime.UtcNow;
|
||||
|
|
@ -52,15 +92,13 @@ public class ClientServiceTests : IClassFixture<DbFixture>
|
|||
await using (var db = _dbFixture.CreateDbContext())
|
||||
{
|
||||
// Act
|
||||
ClientService sut = new(db, _dataEncryptionService, _clock);
|
||||
ClientService sut = CreateSut(db);
|
||||
var response = await sut.Create(
|
||||
_realmId,
|
||||
new ClientCreateRequest
|
||||
ClientCreateRequestBuilder.Default() with
|
||||
{
|
||||
ClientId = "test-client",
|
||||
Name = "Test Client",
|
||||
Description = "A test client",
|
||||
AllowClientCredentialsFlow = allowClientCredentialsFlow,
|
||||
Confidential = withSecret,
|
||||
GenerateSecret = withSecret,
|
||||
},
|
||||
TestContext.Current.CancellationToken);
|
||||
|
||||
|
|
@ -70,7 +108,7 @@ public class ClientServiceTests : IClassFixture<DbFixture>
|
|||
Assert.Equal("test-client", val.ClientId);
|
||||
Assert.Equal("Test Client", val.Name);
|
||||
Assert.Equal("A test client", val.Description);
|
||||
Assert.Equal(allowClientCredentialsFlow, val.AllowClientCredentialsFlow);
|
||||
Assert.Equal(withSecret, val.Confidential);
|
||||
Assert.Equal(now, val.CreatedAt);
|
||||
}
|
||||
|
||||
|
|
@ -80,7 +118,7 @@ public class ClientServiceTests : IClassFixture<DbFixture>
|
|||
.Include(e => e.Secrets)
|
||||
.SingleAsync(e => e.Id == val.Id, TestContext.Current.CancellationToken);
|
||||
|
||||
if (allowClientCredentialsFlow)
|
||||
if (withSecret)
|
||||
Assert.Single(dbRecord.Secrets);
|
||||
else
|
||||
Assert.Empty(dbRecord.Secrets);
|
||||
|
|
@ -108,7 +146,7 @@ public class ClientServiceTests : IClassFixture<DbFixture>
|
|||
|
||||
await using var actContext = _dbFixture.CreateDbContext();
|
||||
// Act
|
||||
ClientService sut = new(actContext, _dataEncryptionService, _clock);
|
||||
ClientService sut = CreateSut(actContext);
|
||||
Client? result = await sut.GetByClientId(_realmId, clientId, TestContext.Current.CancellationToken);
|
||||
|
||||
// Verify
|
||||
|
|
@ -143,7 +181,7 @@ public class ClientServiceTests : IClassFixture<DbFixture>
|
|||
|
||||
await using var actContext = _dbFixture.CreateDbContext();
|
||||
// Act
|
||||
ClientService sut = new(actContext, _dataEncryptionService, _clock);
|
||||
ClientService sut = CreateSut(actContext);
|
||||
Client? result = await sut.FindById(_realmId, searchId, TestContext.Current.CancellationToken);
|
||||
|
||||
// Verify
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue