/* * Copyright (c) 2025 Proton AG * * This file is part of ProtonVPN. * * ProtonVPN is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * ProtonVPN is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with ProtonVPN. If not, see . */ using Microsoft.VisualStudio.TestTools.UnitTesting; using ProtonVPN.StatisticalEvents.Dimensions.Mappers.Bases; namespace ProtonVPN.StatisticalEvents.Tests.DimensionMapping; [TestClass] public abstract class DimensionMapperTestBase where TEnum : struct where TMapper : IDimensionMapper, new() { private TMapper? _mapper; protected virtual IEnumerable ValuesToIgnore => []; protected abstract Func MapFunction { get; } [TestInitialize] public void Setup() { _mapper = new TMapper(); } [TestCleanup] public void Cleanup() { _mapper = default; } [TestMethod] public void Map_ShouldReturnCorrectString_ForAllEnumValues() { foreach (TEnum value in Enum.GetValues(typeof(TEnum)).Cast()) { if (ValuesToIgnore.Contains(value)) { continue; } string result = MapFunction(_mapper!, value); Assert.IsFalse(string.IsNullOrWhiteSpace(result), $"Mapping for {value} returned an empty string."); Assert.AreNotEqual(DimensionMapperBase.NOT_AVAILABLE, result, $"Mapping for {value} returned 'n/a', did you forget to add a new mapping?"); } } [TestMethod] public void Map_ShouldReturnNotAvailable_ForNull() { string result = MapFunction(_mapper!, null); Assert.AreEqual(DimensionMapperBase.NOT_AVAILABLE, result, $"Mapping for null or default did not return '{DimensionMapperBase.NOT_AVAILABLE}'."); } }