Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
114 changes: 114 additions & 0 deletions tests/CoreTest/Configuration/ObjectTranslatorTests.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,114 @@
using GeneralUpdate.Core;
using GeneralUpdate.Core.Configuration;

namespace CoreTest.Configuration;

/// <summary>
/// Unit tests for <see cref="ObjectTranslator"/> following AAAT (Arrange-Act-Assert-TearDown).
/// Implements <see cref="IDisposable"/> to restore <see cref="GeneralTracer"/> global state
/// after each test, preventing cross-test leakage.
/// </summary>
public class ObjectTranslatorTests : IDisposable
{
private readonly bool _originalTracingEnabled;

public ObjectTranslatorTests()
{
// Capture original tracing state before any test modifies it
_originalTracingEnabled = GeneralTracer.IsTracingEnabled();
}

/// <summary>TearDown: restore tracing state to original value for test isolation.</summary>
public void Dispose()
{
GeneralTracer.SetTracingEnabled(_originalTracingEnabled);
GC.SuppressFinalize(this);
}

#region GetPacketHash

[Fact]
public void GetPacketHash_ValidVersionInfo_ReturnsFormattedHash()
{
// Arrange
GeneralTracer.SetTracingEnabled(true);
var version = new VersionInfo { Hash = "abc123def" };
Comment on lines +30 to +35

// Act
var result = ObjectTranslator.GetPacketHash(version);

// Assert
Assert.Equal("[PacketHash]:abc123def ", result);
}

[Fact]
public void GetPacketHash_NonVersionInfoObject_ReturnsEmpty()
{
// Arrange
GeneralTracer.SetTracingEnabled(true);
var notVersion = "just a string";

// Act
var result = ObjectTranslator.GetPacketHash(notVersion);

// Assert
Assert.Equal(string.Empty, result);
}

[Fact]
public void GetPacketHash_TracingDisabled_ReturnsEmptyEvenForVersionInfo()
{
// Arrange
GeneralTracer.SetTracingEnabled(false);
var version = new VersionInfo { Hash = "abc123def" };

// Act
var result = ObjectTranslator.GetPacketHash(version);

// Assert
Assert.Equal(string.Empty, result);
}

[Fact]
public void GetPacketHash_NullObject_ReturnsEmpty()
{
// Arrange
GeneralTracer.SetTracingEnabled(true);

// Act
var result = ObjectTranslator.GetPacketHash(null!);

// Assert
Assert.Equal(string.Empty, result);
}

[Fact]
public void GetPacketHash_VersionInfoWithNullHash_ReturnsEmptyHashSegment()
{
// Arrange
GeneralTracer.SetTracingEnabled(true);
var version = new VersionInfo { Hash = null };

// Act
var result = ObjectTranslator.GetPacketHash(version);

// Assert
Assert.Equal("[PacketHash]: ", result);
}

[Fact]
public void GetPacketHash_VersionInfoWithEmptyHash_ReturnsEmptyHashSegment()
{
// Arrange
GeneralTracer.SetTracingEnabled(true);
var version = new VersionInfo { Hash = string.Empty };

// Act
var result = ObjectTranslator.GetPacketHash(version);

// Assert
Assert.Equal("[PacketHash]: ", result);
}

#endregion
}
119 changes: 119 additions & 0 deletions tests/CoreTest/Configuration/ProcessInfoTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -144,9 +144,128 @@ public void Ctor_AllParametersValid_AllPropertiesSet()
[Fact]
public void Ctor_EncodingUTF8_CompressEncodingWebNameIsUtf8()
{
// Arrange & Act
var info = new ProcessInfo("app", ExistingDir, "1.0", "2.0", null,
Encoding.UTF8, "ZIP", 30, "key",
SingleVersion, "url", "backup", null, null, null, null, null, null, null);

// Assert
Assert.Equal("utf-8", info.CompressEncoding);
}

[Fact]
public void Ctor_EncodingASCII_CompressEncodingWebNameIsAscii()
{
// Arrange & Act
var info = new ProcessInfo("app", ExistingDir, "1.0", "2.0", null,
Encoding.ASCII, "ZIP", 30, "key",
SingleVersion, "url", "backup", null, null, null, null, null, null, null);

// Assert
Assert.Equal("us-ascii", info.CompressEncoding);
}

[Fact]
public void Ctor_EncodingUnicode_CompressEncodingWebNameIsUtf16()
{
// Arrange & Act
var info = new ProcessInfo("app", ExistingDir, "1.0", "2.0", null,
Encoding.Unicode, "ZIP", 30, "key",
SingleVersion, "url", "backup", null, null, null, null, null, null, null);

// Assert
Assert.Equal("utf-16", info.CompressEncoding);
}

[Fact]
public void Ctor_NullableOptionalParams_AllowedAsNull()
{
// Arrange & Act — bowl, scheme, token, driverDirectory, blackList params are all nullable
var info = new ProcessInfo("app", ExistingDir, "1.0", "2.0", null,
Encoding.UTF8, "ZIP", 30, "key",
SingleVersion, "url", "backup",
null, null, null, null, null, null, null);

// Assert
Assert.Null(info.Bowl);
Assert.Null(info.Scheme);
Assert.Null(info.Token);
Assert.Null(info.DriverDirectory);
Assert.Null(info.BlackFileFormats);
Assert.Null(info.BlackFiles);
Assert.Null(info.SkipDirectorys);
}

[Fact]
public void Ctor_DefaultConstructor_AllPropertiesDefault()
{
// Arrange & Act
var info = new ProcessInfo();

// Assert — default constructor should produce empty/null state
Assert.Null(info.AppName);
Assert.Null(info.InstallPath);
Assert.Null(info.CurrentVersion);
Assert.Null(info.LastVersion);
Assert.Equal(0, info.DownloadTimeOut);
}

[Fact]
public void Ctor_MultipleVersions_AllStored()
{
// Arrange
var versions = new List<VersionInfo>
{
new() { Version = "1.0.0" },
new() { Version = "1.1.0" },
new() { Version = "2.0.0" }
};

// Act
var info = new ProcessInfo("app", ExistingDir, "1.0", "2.0", null,
Encoding.UTF8, "ZIP", 30, "key",
versions, "url", "backup", null, null, null, null, null, null, null);

// Assert
Assert.Equal(3, info.UpdateVersions.Count);
Assert.Equal("1.0.0", info.UpdateVersions[0].Version);
Assert.Equal("1.1.0", info.UpdateVersions[1].Version);
Assert.Equal("2.0.0", info.UpdateVersions[2].Version);
}

[Fact]
public void Ctor_UpdateLogUrlNull_Allowed()
{
// Arrange & Act
var info = new ProcessInfo("app", ExistingDir, "1.0", "2.0", null,
Encoding.UTF8, "ZIP", 30, "key",
SingleVersion, "url", "backup", null, null, null, null, null, null, null);

// Assert — UpdateLogUrl is explicitly allowed to be null
Assert.Null(info.UpdateLogUrl);
}

[Fact]
public void Ctor_AllBlacklistParamsPopulated_PreservedInOrder()
{
// Arrange
var formats = new List<string> { ".log", ".tmp", ".cache" };
var files = new List<string> { "secret.key", "config.ini" };
var dirs = new List<string> { "logs", "temp", "backups" };

// Act
var info = new ProcessInfo("app", ExistingDir, "1.0", "2.0", null,
Encoding.UTF8, "ZIP", 30, "key",
SingleVersion, "url", "backup", null, null, null, null,
formats, files, dirs);

// Assert
Assert.Equal(3, info.BlackFileFormats!.Count);
Assert.Contains(".log", info.BlackFileFormats);
Assert.Equal(2, info.BlackFiles!.Count);
Assert.Contains("secret.key", info.BlackFiles);
Assert.Equal(3, info.SkipDirectorys!.Count);
Assert.Contains("logs", info.SkipDirectorys);
}

}
Loading
Loading