1
0
Files
FritzCallMonitor/test/FritzCallMonitor.Tests/CallMonitorEventArgsTest.cs
Andreas Müller b15cf87b3c
All checks were successful
Branch Build / build-test-deploy (push) Successful in 47s
Added FromNumber and ToNumber
2026-02-17 18:08:42 +01:00

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);
}
}
}