All checks were successful
Branch Build / build-test-deploy (push) Successful in 47s
173 lines
5.8 KiB
C#
173 lines
5.8 KiB
C#
using System;
|
|
|
|
namespace FritzCallMonitor.Tests
|
|
{
|
|
[TestClass]
|
|
public class CallMonitorEventArgsTest
|
|
{
|
|
private string _dateOffset;
|
|
|
|
private readonly DateTime _now = new(2025, 8, 25, 20, 15, 30, DateTimeKind.Local);
|
|
|
|
[TestInitialize]
|
|
public void Initialize()
|
|
{
|
|
var offset = TimeZoneInfo.Local.GetUtcOffset(_now);
|
|
_dateOffset = offset < TimeSpan.Zero
|
|
? "-" + offset.ToString("hh\\:mm")
|
|
: "+" + offset.ToString("hh\\:mm");
|
|
}
|
|
|
|
[TestMethod]
|
|
public void ShouldParseRingEvent()
|
|
{
|
|
// Arrange
|
|
string line = $"{_now:dd.MM.yy HH:mm:ss};RING;2;012345678901;9876543;SIP0;";
|
|
var result = CallMonitorEventArgs.Parse(line);
|
|
|
|
Assert.IsNotNull(result);
|
|
Assert.AreEqual($"2025-08-25 20:15:30 {_dateOffset}", result.Timestamp?.ToString("yyyy-MM-dd HH:mm:ss K"));
|
|
Assert.AreEqual(EventType.Ring, result.Event);
|
|
Assert.AreEqual(2, result.ConnectionId);
|
|
Assert.IsNull(result.LinePort);
|
|
Assert.AreEqual("012345678901", result.ExternalNumber);
|
|
Assert.AreEqual("9876543", result.InternalNumber);
|
|
Assert.AreEqual(result.ExternalNumber, result.FromNumber);
|
|
Assert.AreEqual(result.InternalNumber, result.ToNumber);
|
|
Assert.IsNull(result.Duration);
|
|
}
|
|
|
|
[TestMethod]
|
|
public void ShouldParseConnectEvent()
|
|
{
|
|
string line = $"{_now:dd.MM.yy HH:mm:ss};CONNECT;1;3;012345678901;";
|
|
var result = CallMonitorEventArgs.Parse(line);
|
|
|
|
Assert.IsNotNull(result);
|
|
Assert.AreEqual($"2025-08-25 20:15:30 {_dateOffset}", result.Timestamp?.ToString("yyyy-MM-dd HH:mm:ss K"));
|
|
Assert.AreEqual(EventType.Connect, result.Event);
|
|
Assert.AreEqual(1, result.ConnectionId);
|
|
Assert.AreEqual(3, result.LinePort);
|
|
Assert.AreEqual("012345678901", result.ExternalNumber);
|
|
Assert.IsNull(result.InternalNumber);
|
|
Assert.IsNull(result.FromNumber);
|
|
Assert.IsNull(result.ToNumber);
|
|
Assert.IsNull(result.Duration);
|
|
}
|
|
|
|
[TestMethod]
|
|
public void ShouldParseDisconnectEvent()
|
|
{
|
|
string line = $"{_now:dd.MM.yy HH:mm:ss};DISCONNECT;2;42;";
|
|
var result = CallMonitorEventArgs.Parse(line);
|
|
|
|
Assert.IsNotNull(result);
|
|
Assert.AreEqual($"2025-08-25 20:15:30 {_dateOffset}", result.Timestamp?.ToString("yyyy-MM-dd HH:mm:ss K"));
|
|
Assert.AreEqual(EventType.Disconnect, result.Event);
|
|
Assert.AreEqual(2, result.ConnectionId);
|
|
Assert.IsNull(result.LinePort);
|
|
Assert.IsNull(result.ExternalNumber);
|
|
Assert.IsNull(result.InternalNumber);
|
|
Assert.IsNull(result.FromNumber);
|
|
Assert.IsNull(result.ToNumber);
|
|
Assert.AreEqual(TimeSpan.FromSeconds(42), result.Duration);
|
|
}
|
|
|
|
[TestMethod]
|
|
public void ShouldParseCallEvent()
|
|
{
|
|
string line = $"{_now:dd.MM.yy HH:mm:ss};CALL;4;7;9876543;012345678901;SIP0;";
|
|
var result = CallMonitorEventArgs.Parse(line);
|
|
|
|
Assert.IsNotNull(result);
|
|
Assert.AreEqual($"2025-08-25 20:15:30 {_dateOffset}", result.Timestamp?.ToString("yyyy-MM-dd HH:mm:ss K"));
|
|
Assert.AreEqual(EventType.Call, result.Event);
|
|
Assert.AreEqual(4, result.ConnectionId);
|
|
Assert.AreEqual(7, result.LinePort);
|
|
Assert.AreEqual("012345678901", result.ExternalNumber);
|
|
Assert.AreEqual("9876543", result.InternalNumber);
|
|
Assert.AreEqual(result.InternalNumber, result.FromNumber);
|
|
Assert.AreEqual(result.ExternalNumber, result.ToNumber);
|
|
Assert.IsNull(result.Duration);
|
|
}
|
|
|
|
[TestMethod]
|
|
public void ShouldReturnNullOnInvalidDate()
|
|
{
|
|
string line = "99.99.99 99:99:99;RING;2;012345678901;9876543;SIP0;";
|
|
var result = CallMonitorEventArgs.Parse(line);
|
|
Assert.IsNull(result);
|
|
}
|
|
|
|
[TestMethod]
|
|
public void ShouldReturnNullOnUnknownEventType()
|
|
{
|
|
string line = $"{_now:dd.MM.yy HH:mm:ss};UNKNOWN;2;012345678901;9876543;SIP0;";
|
|
var result = CallMonitorEventArgs.Parse(line);
|
|
Assert.IsNull(result);
|
|
}
|
|
|
|
[TestMethod]
|
|
public void ShouldReturnNullOnInvalidConnectionId()
|
|
{
|
|
string line = $"{_now:dd.MM.yy HH:mm:ss};RING;abc;012345678901;9876543;SIP0;";
|
|
var result = CallMonitorEventArgs.Parse(line);
|
|
Assert.IsNull(result);
|
|
}
|
|
|
|
[TestMethod]
|
|
public void ShouldHandleInvalidLinePortInConnect()
|
|
{
|
|
string line = $"{_now:dd.MM.yy HH:mm:ss};CONNECT;1;abc;012345678901;";
|
|
var result = CallMonitorEventArgs.Parse(line);
|
|
Assert.IsNotNull(result);
|
|
Assert.IsNull(result.LinePort);
|
|
Assert.AreEqual("012345678901", result.ExternalNumber);
|
|
Assert.IsNull(result.FromNumber);
|
|
Assert.IsNull(result.ToNumber);
|
|
}
|
|
|
|
[TestMethod]
|
|
public void ShouldHandleInvalidLinePortInCall()
|
|
{
|
|
string line = $"{_now:dd.MM.yy HH:mm:ss};CALL;4;abc;9876543;012345678901;SIP0;";
|
|
var result = CallMonitorEventArgs.Parse(line);
|
|
Assert.IsNotNull(result);
|
|
Assert.IsNull(result.LinePort);
|
|
Assert.AreEqual("012345678901", result.ExternalNumber);
|
|
Assert.AreEqual("9876543", result.InternalNumber);
|
|
Assert.AreEqual(result.InternalNumber, result.FromNumber);
|
|
Assert.AreEqual(result.ExternalNumber, result.ToNumber);
|
|
}
|
|
|
|
[TestMethod]
|
|
public void ShouldHandleInvalidDurationInDisconnect()
|
|
{
|
|
string line = $"{_now:dd.MM.yy HH:mm:ss};DISCONNECT;2;abc;";
|
|
var result = CallMonitorEventArgs.Parse(line);
|
|
Assert.IsNotNull(result);
|
|
Assert.IsNull(result.Duration);
|
|
}
|
|
|
|
[TestMethod]
|
|
public void ShouldReturnNullOnTooFewColumns()
|
|
{
|
|
string line = $"{_now:dd.MM.yy HH:mm:ss};RING;";
|
|
var result = CallMonitorEventArgs.Parse(line);
|
|
Assert.IsNull(result);
|
|
}
|
|
|
|
[TestMethod]
|
|
public void ShouldParseWithExtraColumns()
|
|
{
|
|
string line = $"{_now:dd.MM.yy HH:mm:ss};RING;2;012345678901;9876543;SIP0;EXTRA;COLUMN;";
|
|
var result = CallMonitorEventArgs.Parse(line);
|
|
Assert.IsNotNull(result);
|
|
Assert.AreEqual("012345678901", result.ExternalNumber);
|
|
Assert.AreEqual("9876543", result.InternalNumber);
|
|
Assert.AreEqual(result.ExternalNumber, result.FromNumber);
|
|
Assert.AreEqual(result.InternalNumber, result.ToNumber);
|
|
}
|
|
}
|
|
}
|