Skip to content
Draft
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
Original file line number Diff line number Diff line change
Expand Up @@ -47,9 +47,9 @@ public class CompleteInstanceRequest
public class Validator : AbstractValidator<CompleteInstanceRequest>
{
private readonly string _databaseEngine;
public Validator(IOptions<AppSettings> options)
public Validator(IOptionsMonitor<AppSettings> options)
{
_databaseEngine = options.Value.DatabaseEngine ?? throw new NotFoundException<string>("AppSettings", "DatabaseEngine");
_databaseEngine = options.CurrentValue.DatabaseEngine ?? throw new NotFoundException<string>("AppSettings", "DatabaseEngine");

RuleFor(x => x.ConnectionString)
.NotEmpty()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,16 +25,16 @@ public interface ICompleteInstanceCommand
}

public class CompleteInstanceCommand(
IOptions<AppSettings> options,
IOptions<AdminConsoleSettings> adminConsoleOptions,
IOptionsMonitor<AppSettings> options,
IOptionsMonitor<AdminConsoleSettings> adminConsoleOptions,
IOptionsMonitor<TestingSettings> testingSettings,
IUsersContext context,
IQueriesRepository<Instance> instanceQuery,
ICommandRepository<Instance> instanceCommand,
IAdminConsoleTenantsService adminConsoleTenantsService) : ICompleteInstanceCommand
{
private readonly AppSettings _options = options.Value;
private readonly AdminConsoleSettings _adminConsoleOptions = adminConsoleOptions.Value;
private readonly AppSettings _options = options.CurrentValue;
private readonly AdminConsoleSettings _adminConsoleOptions = adminConsoleOptions.CurrentValue;
private readonly TestingSettings _testingSettings = testingSettings.CurrentValue;
private readonly IUsersContext _context = context;
private readonly IQueriesRepository<Instance> _instanceQuery = instanceQuery;
Expand All @@ -54,15 +54,15 @@ public async Task<Instance> Execute(int id, string connectionString)
if (adminConsoleInstance.Status == InstanceStatus.Completed)
return adminConsoleInstance;

var newOdsInstance = InstanceCommon.NewOdsInstance(adminConsoleInstance);
var newOdsInstance = InstanceCommon.NewOdsInstance(adminConsoleInstance);
newOdsInstance.ConnectionString = connectionString;

var apiClientOdsInstance = new ApiClientOdsInstance()
{
ApiClient = newApiClient,
OdsInstance = newOdsInstance
};

_context.ApiClients.Add(newApiClient);
_context.OdsInstances.Add(newOdsInstance);
_context.ApiClientOdsInstances.Add(apiClientOdsInstance);
Expand All @@ -82,7 +82,7 @@ public async Task<Instance> Execute(int id, string connectionString)
await _instanceCommand.UpdateAsync(adminConsoleInstance);
await _instanceCommand.SaveChangesAsync();

_testingSettings.CheckIfHasToThrowException();
_testingSettings.CheckIfHasToThrowException();

scope.Complete();

Expand All @@ -101,8 +101,8 @@ private async Task UpdateOAuthAndResourceUrlForInstanceAsync(Instance instance)
}

string finalUri = discoveryUrl;
if (_options.MultiTenancy && (documentDictionary.TryGetValue("name", out var tenantName) && tenantName is string name)
&& !name.Equals("default")
if (_options.MultiTenancy && (documentDictionary.TryGetValue("name", out var tenantName) && tenantName is string name)
&& !name.Equals("default")
&& !discoveryUrl.Contains(name))
{
var baseUri = new Uri(discoveryUrl);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,12 +23,12 @@ public interface IRenameInstanceCommand
}

public class RenameInstanceCommand(
IOptions<AdminConsoleSettings> adminConsoleOptions,
IOptionsMonitor<AdminConsoleSettings> adminConsoleOptions,
IUsersContext context,
IQueriesRepository<Instance> instanceQuery,
ICommandRepository<Instance> instanceCommand) : IRenameInstanceCommand
{
private readonly AdminConsoleSettings _adminConsoleOptions = adminConsoleOptions.Value;
private readonly AdminConsoleSettings _adminConsoleOptions = adminConsoleOptions.CurrentValue;
private readonly IUsersContext _context = context;
private readonly IQueriesRepository<Instance> _instanceQuery = instanceQuery;
private readonly ICommandRepository<Instance> _instanceCommand = instanceCommand;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,17 +16,17 @@ namespace EdFi.Ods.AdminApi.Common.Infrastructure.MultiTenancy;
public partial class TenantResolverMiddleware(
ITenantConfigurationProvider tenantConfigurationProvider,
IContextProvider<TenantConfiguration> tenantConfigurationContextProvider,
IOptions<AppSettings> options,
IOptions<SwaggerSettings> swaggerOptions) : IMiddleware
IOptionsMonitor<AppSettings> options,
IOptionsMonitor<SwaggerSettings> swaggerOptions) : IMiddleware
{
private readonly ITenantConfigurationProvider _tenantConfigurationProvider = tenantConfigurationProvider;
private readonly IContextProvider<TenantConfiguration> _tenantConfigurationContextProvider = tenantConfigurationContextProvider;
private readonly IOptions<AppSettings> _options = options;
private readonly IOptions<SwaggerSettings> _swaggerOptions = swaggerOptions;
private readonly IOptionsMonitor<AppSettings> _options = options;
private readonly IOptionsMonitor<SwaggerSettings> _swaggerOptions = swaggerOptions;

public async Task InvokeAsync(HttpContext context, RequestDelegate next)
{
var multiTenancyEnabled = _options.Value.MultiTenancy;
var multiTenancyEnabled = _options.CurrentValue.MultiTenancy;
var validationErrorMessage = "Please provide valid tenant id. Tenant id can only contain alphanumeric and -";

if (multiTenancyEnabled)
Expand All @@ -50,9 +50,9 @@ public async Task InvokeAsync(HttpContext context, RequestDelegate next)
ThrowTenantValidationError(validationErrorMessage);
}
}
else if (_swaggerOptions.Value.EnableSwagger && RequestFromSwagger())
else if (_swaggerOptions.CurrentValue.EnableSwagger && RequestFromSwagger())
{
var defaultTenant = _swaggerOptions.Value.DefaultTenant;
var defaultTenant = _swaggerOptions.CurrentValue.DefaultTenant;
if (!string.IsNullOrEmpty(defaultTenant) && IsValidTenantId(defaultTenant))
{
if (!string.IsNullOrEmpty(defaultTenant) &&
Expand All @@ -72,7 +72,7 @@ public async Task InvokeAsync(HttpContext context, RequestDelegate next)
}
else
{
if (_options.Value.EnableAdminConsoleAPI)
if (_options.CurrentValue.EnableAdminConsoleAPI)
{
if (!context.Request.Path.Value!.Contains("adminconsole/tenants") &&
context.Request.Method != "GET" &&
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,15 +19,15 @@ namespace EdFi.Ods.AdminApi.DBTests.Database.CommandTests;
[TestFixture]
internal class AddApiClientCommandTests : PlatformUsersContextTestBase
{
private IOptions<AppSettings> _options { get; set; }
private IOptionsMonitor<AppSettings> _options { get; set; }
private int applicationId { get; set; }

[SetUp]
public virtual async Task SetUp()
{
AppSettings appSettings = new AppSettings();
appSettings.PreventDuplicateApplications = false;
_options = Options.Create(appSettings);
_options = new TestOptionsMonitor(appSettings);
await Task.Yield();

var vendor = new Vendor
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,14 +21,14 @@ namespace EdFi.Ods.AdminApi.DBTests.Database.CommandTests;
[TestFixture]
public class AddApplicationCommandTests : PlatformUsersContextTestBase
{
private IOptions<AppSettings> _options { get; set; }
private IOptionsMonitor<AppSettings> _options { get; set; }

[OneTimeSetUp]
public virtual async Task FixtureSetup()
{
AppSettings appSettings = new AppSettings();
appSettings.PreventDuplicateApplications = false;
_options = Options.Create(appSettings);
_options = new TestOptionsMonitor(appSettings);
await Task.Yield();
}

Expand Down Expand Up @@ -209,7 +209,7 @@ public void ShouldFailToAddDuplicatedApplication()
{
AppSettings appSettings = new AppSettings();
appSettings.PreventDuplicateApplications = true;
IOptions<AppSettings> options = Options.Create(appSettings);
IOptionsMonitor<AppSettings> options = new TestOptionsMonitor(appSettings);
const string OdsInstanceName = "Test Instance";
var vendor = new Vendor
{
Expand Down Expand Up @@ -269,7 +269,7 @@ public void ShouldFailToAddDuplicatedApplicationNullFields()
{
AppSettings appSettings = new AppSettings();
appSettings.PreventDuplicateApplications = true;
IOptions<AppSettings> options = Options.Create(appSettings);
IOptionsMonitor<AppSettings> options = new TestOptionsMonitor(appSettings);
var vendor = new Vendor
{
VendorNamespacePrefixes = new List<VendorNamespacePrefix> { new VendorNamespacePrefix { NamespacePrefix = "http://tests.com" } },
Expand Down Expand Up @@ -312,7 +312,7 @@ public void ShouldExecuteWithDuplicatedNamesDifferentVendor()
{
AppSettings appSettings = new AppSettings();
appSettings.PreventDuplicateApplications = true;
IOptions<AppSettings> options = Options.Create(appSettings);
IOptionsMonitor<AppSettings> options = new TestOptionsMonitor(appSettings);
var vendor = new Vendor
{
VendorNamespacePrefixes = new List<VendorNamespacePrefix> { new VendorNamespacePrefix { NamespacePrefix = "http://tests.com" } },
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,11 +11,9 @@
using EdFi.Ods.AdminApi.Common.Infrastructure;
using EdFi.Ods.AdminApi.Common.Settings;
using EdFi.Ods.AdminApi.Infrastructure.Database.Commands;
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.Options;
using NUnit.Framework;
using Shouldly;
using Profile = EdFi.Admin.DataAccess.Models.Profile;
using VendorUser = EdFi.Admin.DataAccess.Models.User;

namespace EdFi.Ods.AdminApi.DBTests.Database.CommandTests;
Expand All @@ -30,14 +28,14 @@ internal class EditApiClientCommandTests : PlatformUsersContextTestBase
private OdsInstance _odsInstance;
private ApiClientOdsInstance _apiClientOdsInstance;

private IOptions<AppSettings> _options { get; set; }
private IOptionsMonitor<AppSettings> _options { get; set; }

[SetUp]
public virtual async Task SetUp()
{
AppSettings appSettings = new AppSettings();
appSettings.PreventDuplicateApplications = false;
_options = Options.Create(appSettings);
_options = new TestOptionsMonitor(appSettings);
await Task.Yield();
}

Expand Down
Original file line number Diff line number Diff line change
@@ -1,66 +1,66 @@
// SPDX-License-Identifier: Apache-2.0
// Licensed to the Ed-Fi Alliance under one or more agreements.
// The Ed-Fi Alliance licenses this file to you under the Apache License, Version 2.0.
// See the LICENSE and NOTICES files in the project root for more information.

// SPDX-License-Identifier: Apache-2.0
// Licensed to the Ed-Fi Alliance under one or more agreements.
// The Ed-Fi Alliance licenses this file to you under the Apache License, Version 2.0.
// See the LICENSE and NOTICES files in the project root for more information.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using EdFi.Admin.DataAccess.Models;
using EdFi.Ods.AdminApi.Common.Infrastructure;
using EdFi.Ods.AdminApi.Common.Settings;
using EdFi.Ods.AdminApi.Infrastructure.Database.Queries;
using EdFi.Ods.AdminApi.Infrastructure.Database.Queries;
using Microsoft.Extensions.Options;
using NUnit.Framework;
using NUnit.Framework;
using Shouldly;
using VendorUser = EdFi.Admin.DataAccess.Models.User;

using VendorUser = EdFi.Admin.DataAccess.Models.User;


namespace EdFi.Ods.AdminApi.DBTests.Database.QueryTests;

namespace EdFi.Ods.AdminApi.DBTests.Database.QueryTests;

[TestFixture]
public class GetAllApplicationsQueryTests : PlatformUsersContextTestBase
[TestFixture]
public class GetAllApplicationsQueryTests : PlatformUsersContextTestBase
{
private IOptions<AppSettings> _options { get; set; }

[SetUp]
public virtual async Task FixtureSetup()
{
private IOptionsMonitor<AppSettings> _options { get; set; }
[SetUp]
public virtual async Task FixtureSetup()
{
_options = Testing.GetAppSettings();
_options.Value.PreventDuplicateApplications = false;
LoadApplications(3);
await Task.Yield();
_options.CurrentValue.PreventDuplicateApplications = false;
LoadApplications(3);
await Task.Yield();
}

[Test]
public void ShouldGetAllApplications()
[Test]
public void ShouldGetAllApplications()
{
var result = new List<Application>();

Transaction(usersContext =>
{
Transaction(usersContext =>
{
var query = new GetAllApplicationsQuery(usersContext, _options);
result = query.Execute(
new CommonQueryParams(), null, null, null, null).ToList();
new CommonQueryParams(), null, null, null, null).ToList();
});

result.Count.ShouldBeGreaterThan(0);
}

[Test]
public void ShouldGetAllApplications_With_Offset_and_Limit()
[Test]
public void ShouldGetAllApplications_With_Offset_and_Limit()
{
var offset = 1;
var limit = 2;
Transaction(usersContext =>
{
Transaction(usersContext =>
{
var query = new GetAllApplicationsQuery(usersContext, _options);
var result = query.Execute(
new CommonQueryParams(offset, limit), null, null, null, null);

result.Count.ShouldBeGreaterThan(0);
result.Count.ShouldBe(2);
new CommonQueryParams(offset, limit), null, null, null, null);
result.Count.ShouldBeGreaterThan(0);
result.Count.ShouldBe(2);
});
}

Expand Down Expand Up @@ -110,5 +110,5 @@ private void LoadApplications(int count = 1)

Save(odsInstance, vendor, application, apiClient, apiClientOdsIntance);
}
}
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -22,14 +22,14 @@ namespace EdFi.Ods.AdminApi.DBTests.Database.QueryTests;
[TestFixture]
internal class GetApiClientByIdQueryTests : PlatformUsersContextTestBase
{
private IOptions<AppSettings> _options { get; set; }
private IOptionsMonitor<AppSettings> _options { get; set; }
private int secondApiClientId = 0;

[SetUp]
public virtual async Task FixtureSetup()
{
_options = Testing.GetAppSettings();
_options.Value.PreventDuplicateApplications = false;
_options.CurrentValue.PreventDuplicateApplications = false;
LoadApiClients();
await Task.Yield();
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,14 +21,14 @@ namespace EdFi.Ods.AdminApi.DBTests.Database.QueryTests;
[TestFixture]
public class GetApiClientsByApplicationIdQueryTests : PlatformUsersContextTestBase
{
private IOptions<AppSettings> _options { get; set; }
private IOptionsMonitor<AppSettings> _options { get; set; }
private int applicationId = 0;

[SetUp]
public virtual async Task FixtureSetup()
{
_options = Testing.GetAppSettings();
_options.Value.PreventDuplicateApplications = false;
_options.CurrentValue.PreventDuplicateApplications = false;
LoadApiClients();
await Task.Yield();
}
Expand Down
28 changes: 28 additions & 0 deletions Application/EdFi.Ods.AdminApi.DBTests/TestOptionsMonitor.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
// SPDX-License-Identifier: Apache-2.0
// Licensed to the Ed-Fi Alliance under one or more agreements.
// The Ed-Fi Alliance licenses this file to you under the Apache License, Version 2.0.
// See the LICENSE and NOTICES files in the project root for more information.

using System;
using EdFi.Ods.AdminApi.Common.Settings;
using Microsoft.Extensions.Options;

namespace EdFi.Ods.AdminApi.DBTests;

internal class TestOptionsMonitor : IOptionsMonitor<AppSettings>
{
private readonly AppSettings _currentValue;

public TestOptionsMonitor(AppSettings currentValue)
{
_currentValue = currentValue;
}

public AppSettings CurrentValue => _currentValue;

public AppSettings Get(string name)
=> _currentValue;

public IDisposable OnChange(Action<AppSettings, string> listener)
=> null;
}
Loading
Loading