using AssertionHelper; using AudibleApi; using FileManager; using LibationFileManager; using Microsoft.VisualStudio.TestTools.UnitTesting; using Newtonsoft.Json.Linq; using System; using System.Linq; namespace DeviceRegistrationKindConfigurationTests; [TestClass] [DoNotParallelize] public class DeviceRegistrationKindConfigurationTests { [TestCleanup] public void Cleanup() { Configuration.RestoreSingletonInstance(); } [TestMethod] public void Default_when_missing_is_CurrentAndroid() { var config = Configuration.CreateMockInstance(); config.Exists(nameof(Configuration.DeviceRegistrationKind)).Should().BeFalse(); Assert.AreEqual(DeviceRegistrationKind.CurrentAndroid, config.DeviceRegistrationKind); Assert.AreEqual(DeviceRegistrationKind.CurrentAndroid, config.GetDeviceRegistrationProfile().Kind); } [TestMethod] public void Round_trips_each_kind() { var config = Configuration.CreateMockInstance(); //Exclude RetailAndroid from this test because it is not a valid option for the setting foreach (var kind in Enum.GetValues().Where(p => p is not DeviceRegistrationKind.RetailAndroid)) { config.DeviceRegistrationKind = kind; Assert.AreEqual(kind, config.DeviceRegistrationKind); Assert.AreEqual(kind, config.CreateEphemeralCopy().DeviceRegistrationKind); Assert.AreEqual(kind, config.GetDeviceRegistrationProfile().Kind); } } [TestMethod] public void Unknown_enum_value_throws_InvalidConfigurationValueException() { var ex = Assert.ThrowsExactly( () => IJsonBackedDictionary.UpCast(new JValue("NotARealProfile"), nameof(Configuration.DeviceRegistrationKind))); StringAssert.Contains(ex.Message, "DeviceRegistrationKind"); StringAssert.Contains(ex.Message, "NotARealProfile"); StringAssert.Contains(ex.Message, "CurrentAndroid"); } [TestMethod] public void ValidateEnumSettings_throws_for_invalid_DeviceRegistrationKind() { var config = Configuration.CreateMockInstance(); config.SetNonString("NotARealProfile", nameof(Configuration.DeviceRegistrationKind)); Assert.ThrowsExactly(config.ValidateEnumSettings); } }