Skip to content

Commit b11d6e4

Browse files
committed
Add Unit Test for OutboxTableConfig overriding support. Enhanced OutboxTableConfig class properties to be virtual for easier overriding.
1 parent 7a4bbf1 commit b11d6e4

File tree

3 files changed

+63
-10
lines changed

3 files changed

+63
-10
lines changed

SqlTransactionalOutbox.Common/OutboxTableConfig.cs

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -10,18 +10,18 @@ public class OutboxTableConfig : ISqlTransactionalOutboxTableConfig
1010
public const string DefaultTransactionalOutboxTableName = "TransactionalOutboxQueue";
1111
public const string DefaultPKeyFieldName = "Id";
1212

13-
public string TransactionalOutboxSchemaName { get; } = DefaultTransactionalOutboxSchemaName;
14-
public string TransactionalOutboxTableName { get; } = DefaultTransactionalOutboxTableName;
13+
public virtual string TransactionalOutboxSchemaName { get; } = DefaultTransactionalOutboxSchemaName;
14+
public virtual string TransactionalOutboxTableName { get; } = DefaultTransactionalOutboxTableName;
1515

1616
//NOTE: The PKey Field is only used for Sql Server specific resolution of DateTime sort collisions & Sorting,
1717
// but is otherwise not needed for Outbox Item Model.
18-
public string PKeyFieldName { get; } = DefaultPKeyFieldName;
19-
public string UniqueIdentifierFieldName { get; } = nameof(OutboxProcessingItem<Guid>.UniqueIdentifier);
20-
public string FifoGroupingIdentifier { get; } = nameof(OutboxProcessingItem<Guid>.FifoGroupingIdentifier);
21-
public string StatusFieldName { get; } = nameof(OutboxProcessingItem<Guid>.Status);
22-
public string PublishTargetFieldName { get; } = nameof(OutboxProcessingItem<Guid>.PublishTarget);
23-
public string PayloadFieldName { get; } = nameof(OutboxProcessingItem<Guid>.Payload);
24-
public string PublishAttemptsFieldName { get; } = nameof(OutboxProcessingItem<Guid>.PublishAttempts);
25-
public string CreatedDateTimeUtcFieldName { get; } = nameof(OutboxProcessingItem<Guid>.CreatedDateTimeUtc);
18+
public virtual string PKeyFieldName { get; } = DefaultPKeyFieldName;
19+
public virtual string UniqueIdentifierFieldName { get; } = nameof(OutboxProcessingItem<Guid>.UniqueIdentifier);
20+
public virtual string FifoGroupingIdentifier { get; } = nameof(OutboxProcessingItem<Guid>.FifoGroupingIdentifier);
21+
public virtual string StatusFieldName { get; } = nameof(OutboxProcessingItem<Guid>.Status);
22+
public virtual string PublishTargetFieldName { get; } = nameof(OutboxProcessingItem<Guid>.PublishTarget);
23+
public virtual string PayloadFieldName { get; } = nameof(OutboxProcessingItem<Guid>.Payload);
24+
public virtual string PublishAttemptsFieldName { get; } = nameof(OutboxProcessingItem<Guid>.PublishAttempts);
25+
public virtual string CreatedDateTimeUtcFieldName { get; } = nameof(OutboxProcessingItem<Guid>.CreatedDateTimeUtc);
2626
}
2727
}
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
using System;
2+
using System.Collections.Generic;
3+
using System.Linq;
4+
using System.Text;
5+
using System.Threading.Tasks;
6+
7+
namespace SqlTransactionalOutbox.IntegrationTests.ConfigurationTests
8+
{
9+
public class CustomSchemaNameOutboxTableConfig : OutboxTableConfig, ISqlTransactionalOutboxTableConfig
10+
{
11+
public CustomSchemaNameOutboxTableConfig(string customOutboxSchemaName)
12+
{
13+
TransactionalOutboxSchemaName = customOutboxSchemaName;
14+
}
15+
16+
public new string TransactionalOutboxSchemaName { get; }
17+
}
18+
}
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
using System;
2+
using Microsoft.VisualStudio.TestTools.UnitTesting;
3+
using SqlTransactionalOutbox.IntegrationTests.ConfigurationTests;
4+
5+
namespace SqlTransactionalOutbox.IntegrationTests
6+
{
7+
[TestClass]
8+
public class OutboxTableConfigTests
9+
{
10+
public TestContext TestContext { get; set; }
11+
12+
[TestMethod]
13+
public void TestCustomOutboxTableConfigOverrides()
14+
{
15+
const string CustomSchemaName = "sqloutbox";
16+
var defaultTableConfig = new OutboxTableConfig();
17+
var customSchemaTableConfig = new CustomSchemaNameOutboxTableConfig(CustomSchemaName);
18+
19+
//Validate Class references
20+
Assert.AreEqual(CustomSchemaName, customSchemaTableConfig.TransactionalOutboxSchemaName);
21+
Assert.AreEqual(OutboxTableConfig.DefaultTransactionalOutboxSchemaName, defaultTableConfig.TransactionalOutboxSchemaName);
22+
Assert.AreNotEqual(defaultTableConfig.TransactionalOutboxSchemaName, customSchemaTableConfig.TransactionalOutboxSchemaName);
23+
Assert.AreEqual(defaultTableConfig.TransactionalOutboxTableName, customSchemaTableConfig.TransactionalOutboxTableName);
24+
25+
//Validate Interface Cast references
26+
27+
var defaultTableConfigAsInterface = (ISqlTransactionalOutboxTableConfig)defaultTableConfig;
28+
var customOutboxTableConfigAsInterface = (ISqlTransactionalOutboxTableConfig)customSchemaTableConfig;
29+
Assert.AreEqual(CustomSchemaName, customOutboxTableConfigAsInterface.TransactionalOutboxSchemaName);
30+
Assert.AreEqual(OutboxTableConfig.DefaultTransactionalOutboxSchemaName, defaultTableConfigAsInterface.TransactionalOutboxSchemaName);
31+
Assert.AreNotEqual(defaultTableConfigAsInterface.TransactionalOutboxSchemaName, customOutboxTableConfigAsInterface.TransactionalOutboxSchemaName);
32+
Assert.AreEqual(defaultTableConfigAsInterface.TransactionalOutboxTableName, customOutboxTableConfigAsInterface.TransactionalOutboxTableName);
33+
}
34+
}
35+
}

0 commit comments

Comments
 (0)