Skip to content
Open
Show file tree
Hide file tree
Changes from 3 commits
Commits
Show all changes
32 commits
Select commit Hold shift + click to select a range
eab2698
Fix #3267: Warn when dab validate finds zero entities in the config
aaronburtle Mar 23, 2026
e2849f8
Add test for #3267: Verify warning when zero entities defined
aaronburtle Mar 23, 2026
0459fb3
Merge branch 'main' into dev/aaronburtle/warn-zero-entities-validate
aaronburtle Mar 23, 2026
447b0da
Fix zero-entities check: use .Entities.Count, .Autoentities.Count, an…
aaronburtle Mar 23, 2026
ff044ed
Consolidate TryGetConfig to a single call in IsConfigValid
aaronburtle Mar 23, 2026
c62ed09
Merge branch 'main' into dev/aaronburtle/warn-zero-entities-validate
aaronburtle Mar 26, 2026
346f079
Merge branch 'main' into dev/aaronburtle/warn-zero-entities-validate
aaronburtle Mar 27, 2026
94aa01d
Merge branch 'main' into dev/aaronburtle/warn-zero-entities-validate
anushakolan Mar 31, 2026
57c15ed
Merge branch 'main' into dev/aaronburtle/warn-zero-entities-validate
aaronburtle Apr 3, 2026
d402495
address comments
aaronburtle Apr 6, 2026
ef7df09
Merge branch 'dev/aaronburtle/warn-zero-entities-validate' of github.…
aaronburtle Apr 6, 2026
4f93225
new validation logic
aaronburtle Apr 6, 2026
535b209
Merge branch 'main' into dev/aaronburtle/warn-zero-entities-validate
aaronburtle Apr 7, 2026
d99a098
cleanup
aaronburtle Apr 7, 2026
26be2f9
Merge branch 'dev/aaronburtle/warn-zero-entities-validate' of github.…
aaronburtle Apr 7, 2026
f33b77b
use child configs instead of new metadata class
aaronburtle Apr 7, 2026
06c131e
better tests
aaronburtle Apr 7, 2026
8fee9c0
format
aaronburtle Apr 7, 2026
88f7eae
Merge branch 'main' into dev/aaronburtle/warn-zero-entities-validate
aaronburtle Apr 7, 2026
8e76209
fix tests
aaronburtle Apr 8, 2026
d8c7569
Merge remote-tracking branch 'origin/main' into dev/aaronburtle/warn-…
aaronburtle Apr 27, 2026
5c93d5e
...
aaronburtle Apr 27, 2026
eb0d335
fix tests to match new logic, correct isValidateOnly logic
aaronburtle Apr 28, 2026
09bcd9e
fix test conflict
aaronburtle Apr 28, 2026
c5d5288
format
aaronburtle Apr 28, 2026
9b4edcb
format
aaronburtle Apr 28, 2026
c091e61
Merge branch 'main' into dev/aaronburtle/warn-zero-entities-validate
aaronburtle Apr 28, 2026
1817254
Merge branch 'main' into dev/aaronburtle/warn-zero-entities-validate
aaronburtle Apr 28, 2026
57fc4fd
Merge branch 'main' into dev/aaronburtle/warn-zero-entities-validate
aaronburtle Apr 29, 2026
8b25cae
add test gap coverage
aaronburtle Apr 29, 2026
a279947
address comments
aaronburtle Apr 30, 2026
7ecad1c
Merge branch 'main' into dev/aaronburtle/warn-zero-entities-validate
aaronburtle Apr 30, 2026
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
25 changes: 25 additions & 0 deletions src/Cli.Tests/ValidateConfigTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -359,4 +359,29 @@ private async Task ValidatePropertyOptionsFails(ConfigureOptions options)
JsonSchemaValidationResult result = await validator.ValidateConfigSchema(config, TEST_RUNTIME_CONFIG_FILE, mockLoggerFactory.Object);
Assert.IsFalse(result.IsValid);
}

/// <summary>
/// Validates that WarnIfNoEntitiesDefined logs a warning when the config has
/// an empty entities collection and no autoentities or data-source-files.
/// This calls the extracted method directly, avoiding any DB connection.
/// </summary>
[TestMethod]
public void TestValidateWarnsOnZeroEntities()
Comment thread
aaronburtle marked this conversation as resolved.
Outdated
{
Assert.IsTrue(RuntimeConfigLoader.TryParseConfig(INITIAL_CONFIG, out RuntimeConfig? config));

Mock<ILogger<ConfigGenerator>> mockLogger = new();
SetLoggerForCliConfigGenerator(mockLogger.Object);

ConfigGenerator.WarnIfNoEntitiesDefined(config!);
Comment thread
aaronburtle marked this conversation as resolved.
Outdated

mockLogger.Verify(
x => x.Log(
LogLevel.Warning,
It.IsAny<EventId>(),
It.Is<It.IsAnyType>((v, t) => v.ToString()!.Contains("No entities are defined in this configuration.")),
It.IsAny<Exception?>(),
It.IsAny<Func<It.IsAnyType, Exception?, string>>()),
Times.Once);
}
}
29 changes: 24 additions & 5 deletions src/Cli/ConfigGenerator.cs
Original file line number Diff line number Diff line change
Expand Up @@ -2648,15 +2648,21 @@ public static bool IsConfigValid(ValidateOptions options, FileSystemRuntimeConfi

bool isValid = runtimeConfigValidator.TryValidateConfig(runtimeConfigFile, LoggerFactoryForCli).Result;

// Run config-structure warnings regardless of validation outcome.
if (runtimeConfigProvider.TryGetConfig(out RuntimeConfig? config) && config is not null)
{
WarnIfNoEntitiesDefined(config);
Comment thread
aaronburtle marked this conversation as resolved.
Outdated
}

// Additional validation: warn if fields are missing and MCP is enabled
if (isValid)
{
if (runtimeConfigProvider.TryGetConfig(out RuntimeConfig? config) && config is not null)
if (runtimeConfigProvider.TryGetConfig(out RuntimeConfig? validatedConfig) && validatedConfig is not null)
{
Comment thread
aaronburtle marked this conversation as resolved.
Outdated
bool mcpEnabled = config.Runtime?.Mcp?.Enabled == true;
bool mcpEnabled = validatedConfig.Runtime?.Mcp?.Enabled == true;
if (mcpEnabled)
{
foreach (KeyValuePair<string, Entity> entity in config.Entities)
foreach (KeyValuePair<string, Entity> entity in validatedConfig.Entities)
{
if (entity.Value.Fields == null || !entity.Value.Fields.Any())
{
Expand All @@ -2667,9 +2673,9 @@ public static bool IsConfigValid(ValidateOptions options, FileSystemRuntimeConfi
}

// Warn if Unauthenticated provider is used with authenticated or custom roles
if (config.Runtime?.Host?.Authentication?.IsUnauthenticatedAuthenticationProvider() == true)
if (validatedConfig.Runtime?.Host?.Authentication?.IsUnauthenticatedAuthenticationProvider() == true)
{
bool hasNonAnonymousRoles = config.Entities
bool hasNonAnonymousRoles = validatedConfig.Entities
.Where(e => e.Value.Permissions is not null)
.SelectMany(e => e.Value.Permissions!)
.Any(p => !p.Role.Equals("anonymous", StringComparison.OrdinalIgnoreCase));
Expand Down Expand Up @@ -3622,5 +3628,18 @@ private static bool ValidateFields(

return true;
}

/// <summary>
/// Logs a warning if no entities, autoentities, or data-source-files are configured.
/// </summary>
internal static void WarnIfNoEntitiesDefined(RuntimeConfig config)
{
if (config.Entities.Count() == 0
&& (config.Autoentities is null || config.Autoentities.Count() == 0)
&& config.DataSourceFiles is null)
{
Comment thread
aaronburtle marked this conversation as resolved.
Outdated
_logger.LogWarning("No entities are defined in this configuration.");
}
}
}
}
Loading