Add channel test providers for Email, Slack, Teams, and Webhook
- Implemented EmailChannelTestProvider to generate email preview payloads. - Implemented SlackChannelTestProvider to create Slack message previews. - Implemented TeamsChannelTestProvider for generating Teams Adaptive Card previews. - Implemented WebhookChannelTestProvider to create webhook payloads. - Added INotifyChannelTestProvider interface for channel-specific preview generation. - Created ChannelTestPreviewContracts for request and response models. - Developed NotifyChannelTestService to handle test send requests and generate previews. - Added rate limit policies for test sends and delivery history. - Implemented unit tests for service registration and binding. - Updated project files to include necessary dependencies and configurations.
This commit is contained in:
		@@ -215,15 +215,59 @@ public sealed class MongoMigrationRunnerTests
 | 
			
		||||
 | 
			
		||||
            Assert.DoesNotContain(indexList, x => x["name"].AsString == "gridfs_files_expiresAt_ttl");
 | 
			
		||||
        }
 | 
			
		||||
        finally
 | 
			
		||||
        {
 | 
			
		||||
            await _fixture.Client.DropDatabaseAsync(databaseName);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private sealed class TestMigration : IMongoMigration
 | 
			
		||||
    {
 | 
			
		||||
        public int ApplyCount { get; private set; }
 | 
			
		||||
        finally
 | 
			
		||||
        {
 | 
			
		||||
            await _fixture.Client.DropDatabaseAsync(databaseName);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    [Fact]
 | 
			
		||||
    public async Task EnsureAdvisoryEventCollectionsMigration_CreatesIndexes()
 | 
			
		||||
    {
 | 
			
		||||
        var databaseName = $"concelier-advisory-events-{Guid.NewGuid():N}";
 | 
			
		||||
        var database = _fixture.Client.GetDatabase(databaseName);
 | 
			
		||||
        await database.CreateCollectionAsync(MongoStorageDefaults.Collections.AdvisoryStatements);
 | 
			
		||||
        await database.CreateCollectionAsync(MongoStorageDefaults.Collections.AdvisoryConflicts);
 | 
			
		||||
        await database.CreateCollectionAsync(MongoStorageDefaults.Collections.Migrations);
 | 
			
		||||
 | 
			
		||||
        try
 | 
			
		||||
        {
 | 
			
		||||
            var migration = new EnsureAdvisoryEventCollectionsMigration();
 | 
			
		||||
            var runner = new MongoMigrationRunner(
 | 
			
		||||
                database,
 | 
			
		||||
                new IMongoMigration[] { migration },
 | 
			
		||||
                NullLogger<MongoMigrationRunner>.Instance,
 | 
			
		||||
                TimeProvider.System);
 | 
			
		||||
 | 
			
		||||
            await runner.RunAsync(CancellationToken.None);
 | 
			
		||||
 | 
			
		||||
            var statementIndexes = await database
 | 
			
		||||
                .GetCollection<BsonDocument>(MongoStorageDefaults.Collections.AdvisoryStatements)
 | 
			
		||||
                .Indexes
 | 
			
		||||
                .ListAsync();
 | 
			
		||||
            var statementIndexNames = (await statementIndexes.ToListAsync()).Select(x => x["name"].AsString).ToArray();
 | 
			
		||||
 | 
			
		||||
            Assert.Contains("advisory_statements_vulnerability_asof_desc", statementIndexNames);
 | 
			
		||||
            Assert.Contains("advisory_statements_statementHash_unique", statementIndexNames);
 | 
			
		||||
 | 
			
		||||
            var conflictIndexes = await database
 | 
			
		||||
                .GetCollection<BsonDocument>(MongoStorageDefaults.Collections.AdvisoryConflicts)
 | 
			
		||||
                .Indexes
 | 
			
		||||
                .ListAsync();
 | 
			
		||||
            var conflictIndexNames = (await conflictIndexes.ToListAsync()).Select(x => x["name"].AsString).ToArray();
 | 
			
		||||
 | 
			
		||||
            Assert.Contains("advisory_conflicts_vulnerability_asof_desc", conflictIndexNames);
 | 
			
		||||
            Assert.Contains("advisory_conflicts_conflictHash_unique", conflictIndexNames);
 | 
			
		||||
        }
 | 
			
		||||
        finally
 | 
			
		||||
        {
 | 
			
		||||
            await _fixture.Client.DropDatabaseAsync(databaseName);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private sealed class TestMigration : IMongoMigration
 | 
			
		||||
    {
 | 
			
		||||
        public int ApplyCount { get; private set; }
 | 
			
		||||
 | 
			
		||||
        public string Id => "999_test";
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user