public static void GetErrorCodesVector___Should_return_null___When_error_code_was_not_added_to_exception_and_no_InnerException_nor_InnerExceptions()
        {
            // Arrange,
            var exception = new ArgumentException();

            // Act
            var actual = exception.GetErrorCodesVector();

            // Assert
            actual.Should().BeNull();
        }
        public static void GetErrorCodesVector___Should_throw_ArgumentNullException___When_parameter_dataKeyForErrorCodesVector_is_null()
        {
            // Arrange
            var exception = new ArgumentException();

            // Act
            var actual = Record.Exception(() => exception.GetErrorCodesVector(dataKeyForErrorCodesVector: null));

            // Assert
            actual.Should().BeOfType <ArgumentNullException>();
            actual.Message.Should().Contain("dataKeyForErrorCodesVector");
        }
        public static void GetErrorCodesVector___Should_return_error_code_of_exception___When_error_code_was_added_to_exception_and_no_InnerException_nor_InnerExceptions()
        {
            // Arrange,
            var exception = new ArgumentException();
            var errorCode = A.Dummy <string>();

            exception.AddErrorCode(errorCode);

            // Act
            var actual = exception.GetErrorCodesVector();

            // Assert
            actual.Should().Be(errorCode);
        }
        public static void GetErrorCodesVector___Should_return_error_code_of_exception___When_error_code_was_added_to_and_retrieved_from_exception_using_custom_dataKeyForErrorCodesVector()
        {
            // Arrange,
            var exception = new ArgumentException();
            var dataKeyForErrorCodesVector = A.Dummy <string>();
            var errorCode = A.Dummy <string>();

            exception.AddErrorCode(errorCode, dataKeyForErrorCodesVector: dataKeyForErrorCodesVector);

            // Act
            var actual = exception.GetErrorCodesVector(dataKeyForErrorCodesVector);

            // Assert
            actual.Should().Be(errorCode);
        }
        public static void GetErrorCodesVector___Should_return_vector___When_there_are_InnerException_and_InnerExceptions_but_not_all_have_error_codes_scenario_4()
        {
            // Arrange
            var exceptionF = new ArgumentException();
            var exceptionE = new AggregateException(exceptionF);
            var exceptionD = new ArgumentException().AddErrorCode("ErrorD");
            var exceptionC = new ArgumentException(A.Dummy <string>(), exceptionD);
            var exceptionG = new ArgumentException();
            var exceptionB = new AggregateException(exceptionC, exceptionE, exceptionG).AddErrorCode("ErrorB");
            var exceptionA = new ArgumentException(A.Dummy <string>(), exceptionB).AddErrorCode("ErrorA");

            var expected = "ErrorA -> ErrorB -> ErrorD";

            // Act
            var actual = exceptionA.GetErrorCodesVector();

            // Assert
            actual.Should().Be(expected);
        }
        public static void GetErrorCodesVector___Should_return_vector___When_there_are_InnerException_and_InnerExceptions()
        {
            // Arrange
            var exceptionF = new ArgumentException().AddErrorCode("ErrorF");
            var exceptionE = new AggregateException(exceptionF).AddErrorCode("ErrorE");
            var exceptionD = new ArgumentException().AddErrorCode("ErrorD");
            var exceptionC = new ArgumentException(A.Dummy <string>(), exceptionD).AddErrorCode("ErrorC");
            var exceptionG = new ArgumentException().AddErrorCode("ErrorG");
            var exceptionB = new AggregateException(exceptionC, exceptionE, exceptionG).AddErrorCode("ErrorB");
            var exceptionA = new ArgumentException(A.Dummy <string>(), exceptionB).AddErrorCode("ErrorA");

            var expected = "ErrorA -> ErrorB -> [ErrorC -> ErrorD, ErrorE -> ErrorF, ErrorG]";

            // Act
            var actual = exceptionA.GetErrorCodesVector();

            // Assert
            actual.Should().Be(expected);
        }