using AIStudio.Provider; using AIStudio.Settings; using AIStudio.Settings.DataModel; using AIStudio.Tools.Services; using AIStudio.Tools.Validation; namespace AIStudio.Tests.Settings; /// /// Checks which provider confidence levels a mailbox may require, and which providers may read it. /// /// /// For the other data sources, NONE means that any provider may read them, and UNTRUSTED or UNKNOWN /// let even a provider through which nobody rated. A mailbox gets none of that: it requires a level /// from very low to high, and without one, no provider may read it, however the level got there. /// [TestFixture] public sealed class MailboxConfidenceTests { private static readonly ConfidenceLevel[] MAILBOX_LEVELS = [ConfidenceLevel.VERY_LOW, ConfidenceLevel.LOW, ConfidenceLevel.MODERATE, ConfidenceLevel.MEDIUM, ConfidenceLevel.HIGH]; private static readonly ConfidenceLevel[] FORBIDDEN_LEVELS = [ConfidenceLevel.NONE, ConfidenceLevel.UNTRUSTED, ConfidenceLevel.UNKNOWN]; [Test] public void TheChoiceOffersTheLevelsFromVeryLowToHigh() { var offeredLevels = ConfigurationSelectDataFactory.GetMailboxConfidenceLevelsData().Select(option => option.Value); Assert.That(offeredLevels, Is.EqualTo(MAILBOX_LEVELS)); } [Test] public void EveryLevelIsEitherAllowedOrForbidden() { // // A level added to ConfidenceLevel later has to be placed on purpose, rather than slip into // the mailboxes, or out of them, by its value. // Assert.That(Enum.GetValues(), Is.EquivalentTo(MAILBOX_LEVELS.Concat(FORBIDDEN_LEVELS))); } [TestCaseSource(nameof(FORBIDDEN_LEVELS))] public void AMailboxWithAForbiddenLevelIsClosedToEveryProvider(ConfidenceLevel mailboxLevel) { var admittedLevels = Enum.GetValues().Where(providerLevel => providerLevel.AllowsMailboxConfidenceLevel(mailboxLevel)); Assert.That(admittedLevels, Is.Empty); } [TestCaseSource(nameof(MAILBOX_LEVELS))] public void AProviderHasToMeetTheLevelOfTheMailbox(ConfidenceLevel mailboxLevel) { var admittedLevels = Enum.GetValues().Where(providerLevel => providerLevel.AllowsMailboxConfidenceLevel(mailboxLevel)); Assert.That(admittedLevels, Is.EqualTo(MAILBOX_LEVELS.Where(level => level >= mailboxLevel))); } [TestCaseSource(nameof(FORBIDDEN_LEVELS))] public void NoEmbeddingProviderIndexesAMailboxWithAForbiddenLevel(ConfidenceLevel mailboxLevel) { var mailbox = new DataSourceMailbox { ConfidenceLevel = mailboxLevel }; Assert.That(DataSourceEmbeddingService.AllowsEmbedding(mailbox, ConfidenceLevel.HIGH), Is.False, "The indexing run asked the rule of the other data sources, which lets every provider read a source without a level."); } [Test] public void AFolderWithoutALevelStaysOpenToEveryEmbeddingProvider() { var directory = new DataSourceLocalDirectory { ConfidenceLevel = ConfidenceLevel.NONE }; Assert.That(DataSourceEmbeddingService.AllowsEmbedding(directory, ConfidenceLevel.UNTRUSTED), Is.True, "The stricter rule of the mailboxes reached the other data sources."); } [TestCaseSource(nameof(FORBIDDEN_LEVELS))] public void TheDialogRejectsAForbiddenLevel(ConfidenceLevel level) { Assert.That(new DataSourceValidation().ValidateMailboxConfidenceLevel(level), Is.Not.Null); } [TestCaseSource(nameof(MAILBOX_LEVELS))] public void TheDialogAcceptsAnAllowedLevel(ConfidenceLevel level) { Assert.That(new DataSourceValidation().ValidateMailboxConfidenceLevel(level), Is.Null); } }