Skip to content

Commit

Permalink
Add Unit Test for OutboxTableConfig overriding support. Enhanced Outb…
Browse files Browse the repository at this point in the history
…oxTableConfig class properties to be virtual for easier overriding.
  • Loading branch information
cajuncoding committed Aug 17, 2022
1 parent 7a4bbf1 commit b11d6e4
Show file tree
Hide file tree
Showing 3 changed files with 63 additions and 10 deletions.
20 changes: 10 additions & 10 deletions SqlTransactionalOutbox.Common/OutboxTableConfig.cs
Original file line number Diff line number Diff line change
Expand Up @@ -10,18 +10,18 @@ public class OutboxTableConfig : ISqlTransactionalOutboxTableConfig
public const string DefaultTransactionalOutboxTableName = "TransactionalOutboxQueue";
public const string DefaultPKeyFieldName = "Id";

public string TransactionalOutboxSchemaName { get; } = DefaultTransactionalOutboxSchemaName;
public string TransactionalOutboxTableName { get; } = DefaultTransactionalOutboxTableName;
public virtual string TransactionalOutboxSchemaName { get; } = DefaultTransactionalOutboxSchemaName;
public virtual string TransactionalOutboxTableName { get; } = DefaultTransactionalOutboxTableName;

//NOTE: The PKey Field is only used for Sql Server specific resolution of DateTime sort collisions & Sorting,
// but is otherwise not needed for Outbox Item Model.
public string PKeyFieldName { get; } = DefaultPKeyFieldName;
public string UniqueIdentifierFieldName { get; } = nameof(OutboxProcessingItem<Guid>.UniqueIdentifier);
public string FifoGroupingIdentifier { get; } = nameof(OutboxProcessingItem<Guid>.FifoGroupingIdentifier);
public string StatusFieldName { get; } = nameof(OutboxProcessingItem<Guid>.Status);
public string PublishTargetFieldName { get; } = nameof(OutboxProcessingItem<Guid>.PublishTarget);
public string PayloadFieldName { get; } = nameof(OutboxProcessingItem<Guid>.Payload);
public string PublishAttemptsFieldName { get; } = nameof(OutboxProcessingItem<Guid>.PublishAttempts);
public string CreatedDateTimeUtcFieldName { get; } = nameof(OutboxProcessingItem<Guid>.CreatedDateTimeUtc);
public virtual string PKeyFieldName { get; } = DefaultPKeyFieldName;
public virtual string UniqueIdentifierFieldName { get; } = nameof(OutboxProcessingItem<Guid>.UniqueIdentifier);
public virtual string FifoGroupingIdentifier { get; } = nameof(OutboxProcessingItem<Guid>.FifoGroupingIdentifier);
public virtual string StatusFieldName { get; } = nameof(OutboxProcessingItem<Guid>.Status);
public virtual string PublishTargetFieldName { get; } = nameof(OutboxProcessingItem<Guid>.PublishTarget);
public virtual string PayloadFieldName { get; } = nameof(OutboxProcessingItem<Guid>.Payload);
public virtual string PublishAttemptsFieldName { get; } = nameof(OutboxProcessingItem<Guid>.PublishAttempts);
public virtual string CreatedDateTimeUtcFieldName { get; } = nameof(OutboxProcessingItem<Guid>.CreatedDateTimeUtc);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace SqlTransactionalOutbox.IntegrationTests.ConfigurationTests
{
public class CustomSchemaNameOutboxTableConfig : OutboxTableConfig, ISqlTransactionalOutboxTableConfig
{
public CustomSchemaNameOutboxTableConfig(string customOutboxSchemaName)
{
TransactionalOutboxSchemaName = customOutboxSchemaName;
}

public new string TransactionalOutboxSchemaName { get; }
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
using System;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using SqlTransactionalOutbox.IntegrationTests.ConfigurationTests;

namespace SqlTransactionalOutbox.IntegrationTests
{
[TestClass]
public class OutboxTableConfigTests
{
public TestContext TestContext { get; set; }

[TestMethod]
public void TestCustomOutboxTableConfigOverrides()
{
const string CustomSchemaName = "sqloutbox";
var defaultTableConfig = new OutboxTableConfig();
var customSchemaTableConfig = new CustomSchemaNameOutboxTableConfig(CustomSchemaName);

//Validate Class references
Assert.AreEqual(CustomSchemaName, customSchemaTableConfig.TransactionalOutboxSchemaName);
Assert.AreEqual(OutboxTableConfig.DefaultTransactionalOutboxSchemaName, defaultTableConfig.TransactionalOutboxSchemaName);
Assert.AreNotEqual(defaultTableConfig.TransactionalOutboxSchemaName, customSchemaTableConfig.TransactionalOutboxSchemaName);
Assert.AreEqual(defaultTableConfig.TransactionalOutboxTableName, customSchemaTableConfig.TransactionalOutboxTableName);

//Validate Interface Cast references

var defaultTableConfigAsInterface = (ISqlTransactionalOutboxTableConfig)defaultTableConfig;
var customOutboxTableConfigAsInterface = (ISqlTransactionalOutboxTableConfig)customSchemaTableConfig;
Assert.AreEqual(CustomSchemaName, customOutboxTableConfigAsInterface.TransactionalOutboxSchemaName);
Assert.AreEqual(OutboxTableConfig.DefaultTransactionalOutboxSchemaName, defaultTableConfigAsInterface.TransactionalOutboxSchemaName);
Assert.AreNotEqual(defaultTableConfigAsInterface.TransactionalOutboxSchemaName, customOutboxTableConfigAsInterface.TransactionalOutboxSchemaName);
Assert.AreEqual(defaultTableConfigAsInterface.TransactionalOutboxTableName, customOutboxTableConfigAsInterface.TransactionalOutboxTableName);
}
}
}

0 comments on commit b11d6e4

Please sign in to comment.