public void Given_AnException_When_SeriaizedAndDeserialized_Then_DataMatchesTheOriginal()
        {
            // Arrange
            var id = Guid.NewGuid();
            var componentDetails  = new[] { new ComponentExceptionDetails("MyComponent", new Exception("MyMessage")) };
            var originalException = new ConfigurationRemovalException(id, componentDetails);

            var buffer    = new byte[4096];
            var ms        = new MemoryStream(buffer);
            var ms2       = new MemoryStream(buffer);
            var formatter = new BinaryFormatter();

            // Act
            formatter.Serialize(ms, originalException);
            var deserializedException = (ConfigurationRemovalException)formatter.Deserialize(ms2);

            // Assert
            Assert.That(deserializedException.Details, Is.Not.Null);
            Assert.That(deserializedException.Details, Is.Not.Empty);

            var orignalComponentExceptionDetails      = originalException.Details.Single();
            var deserializedComponentExceptionDetails = deserializedException.Details.Single();

            Assert.That(deserializedComponentExceptionDetails.ComponentName, Is.EqualTo(orignalComponentExceptionDetails.ComponentName));
            Assert.That(deserializedComponentExceptionDetails.Exception, Is.Not.Null);
            Assert.That(deserializedComponentExceptionDetails.Exception.Message, Is.EqualTo(orignalComponentExceptionDetails.Exception.Message));

            Assert.That(deserializedException.Message, Is.EqualTo(originalException.Message));
        }
        public void Given_CustomMessageAndComponentErrors_When_Ctor_Then_ExceptionCreated()
        {
            // Arrange
            const string message          = "My Custom Error Message";
            var          id               = Guid.NewGuid();
            var          componentDetails = new[] { new ComponentExceptionDetails("MyComponent", new Exception()) };

            // Act
            var sut = new ConfigurationRemovalException(message, id, componentDetails);

            // Assert
            Assert.That(sut.InnerException, Is.Null);
            Assert.That(sut.Id, Is.EqualTo(id));
            // host details
            Assert.That(sut.Details, Is.EqualTo(componentDetails));
            Assert.That(sut.Message, Is.EqualTo(message));
        }
        public void Given_CustomMessageAndNoComponentErrors_When_Ctor_Then_ExceptionCreated()
        {
            // Arrange
            var          id      = Guid.NewGuid();
            const string message = "My Custom Error Message";

            // Act
            var sut = new ConfigurationRemovalException(message, id);

            // Assert
            Assert.That(sut.InnerException, Is.Null);
            Assert.That(sut.Id, Is.EqualTo(id));
            // Not host details
            Assert.That(sut.Details, Is.Not.Null);
            Assert.That(sut.Details, Is.Empty);
            Assert.That(sut.Message, Is.EqualTo(message));
        }
        public void Given_ComponentErrors_When_Ctor_Then_ExceptionCreated()
        {
            // Arrange
            var id = Guid.NewGuid();
            var componentDetails = new[] { new ComponentExceptionDetails("MyComponent", new Exception()) };

            // Act
            var sut = new ConfigurationRemovalException(id, componentDetails);

            // Assert
            Assert.That(sut.InnerException, Is.Null);
            // host details
            Assert.That(sut.Details, Is.EqualTo(componentDetails));
            Assert.That(sut.Id, Is.EqualTo(id));
            // Has the default message
            Assert.That(sut.Message, Is.Not.Null);
            Assert.That(sut.Message, Is.Not.Empty);
        }