// Path: src/main/java/com/github/mkopylec/errorest/exceptions/ApplicationException.java
// public abstract class ApplicationException extends RuntimeException {
// 
//     protected final List<Error> errors;
//     protected final HttpStatus responseHttpStatus;
//     protected final LoggingLevel loggingLevel;
// 
//     public ApplicationException(ApplicationExceptionConfiguration configuration) {
//         this(configuration.getErrors(), configuration.getResponseHttpStatus(), configuration.getLoggingLevel(), configuration.getCause());
//     }
// 
//     private ApplicationException(List<Error> errors, HttpStatus responseHttpStatus, LoggingLevel loggingLevel, Throwable cause) {
//         super(cause);
//         notEmpty(errors, "Empty errors");
//         errors.forEach(error -> {
//             notNull(error, "Empty error");
//             hasText(error.getCode(), "Empty error code");
//             hasText(error.getDescription(), "Empty error description");
//         });
//         notNull(responseHttpStatus, "Empty response HTTP status");
//         notNull(loggingLevel, "Empty logging level");
//         this.errors = errors;
//         this.responseHttpStatus = responseHttpStatus;
//         this.loggingLevel = loggingLevel;
//     }
// 
//     public List<Error> getErrors() {
//         return errors;
//     }
// 
//     public HttpStatus getResponseHttpStatus() {
//         return responseHttpStatus;
//     }
// 
//     public LoggingLevel getLoggingLevel() {
//         return loggingLevel;
//     }
// 
//     @Override
//     public String getMessage() {
//         return "An application error has occurred. Status: " + responseHttpStatus + " | " + errors;
//     }
// }
// 
// Path: src/main/java/com/github/mkopylec/errorest/exceptions/ApplicationExceptionConfiguration.java
// public class ApplicationExceptionConfiguration {
// 
//     protected List<Error> errors = new ErrorsLoggingList();
//     protected HttpStatus responseHttpStatus;
//     protected LoggingLevel loggingLevel;
//     protected Throwable cause;
// 
//     protected List<Error> getErrors() {
//         return errors;
//     }
// 
//     public ApplicationExceptionConfiguration addError(String code, String description) {
//         errors.add(new Error(code, description));
//         return this;
//     }
// 
//     public ApplicationExceptionConfiguration withErrors(ErrorsLoggingList errors) {
//         this.errors = errors;
//         return this;
//     }
// 
//     protected HttpStatus getResponseHttpStatus() {
//         return responseHttpStatus;
//     }
// 
//     public ApplicationExceptionConfiguration withResponseHttpStatus(HttpStatus responseHttpStatus) {
//         this.responseHttpStatus = responseHttpStatus;
//         return this;
//     }
// 
//     protected LoggingLevel getLoggingLevel() {
//         return loggingLevel;
//     }
// 
//     public ApplicationExceptionConfiguration withLoggingLevel(LoggingLevel loggingLevel) {
//         this.loggingLevel = loggingLevel;
//         return this;
//     }
// 
//     protected Throwable getCause() {
//         return cause;
//     }
// 
//     public ApplicationExceptionConfiguration withCause(Throwable cause) {
//         this.cause = cause;
//         return this;
//     }
// }


import com.github.mkopylec.errorest.exceptions.ApplicationException;
import com.github.mkopylec.errorest.exceptions.ApplicationExceptionConfiguration;
import static com.github.mkopylec.errorest.logging.LoggingLevel.INFO;
import static org.springframework.http.HttpStatus.I_AM_A_TEAPOT;
package com.github.mkopylec.errorest.application;



public class TestApplicationException extends ApplicationException {

    public TestApplicationException() {
// Path: src/main/java/com/github/mkopylec/errorest/exceptions/ApplicationException.java
// public abstract class ApplicationException extends RuntimeException {
// 
//     protected final List<Error> errors;
//     protected final HttpStatus responseHttpStatus;
//     protected final LoggingLevel loggingLevel;
// 
//     public ApplicationException(ApplicationExceptionConfiguration configuration) {
//         this(configuration.getErrors(), configuration.getResponseHttpStatus(), configuration.getLoggingLevel(), configuration.getCause());
//     }
// 
//     private ApplicationException(List<Error> errors, HttpStatus responseHttpStatus, LoggingLevel loggingLevel, Throwable cause) {
//         super(cause);
//         notEmpty(errors, "Empty errors");
//         errors.forEach(error -> {
//             notNull(error, "Empty error");
//             hasText(error.getCode(), "Empty error code");
//             hasText(error.getDescription(), "Empty error description");
//         });
//         notNull(responseHttpStatus, "Empty response HTTP status");
//         notNull(loggingLevel, "Empty logging level");
//         this.errors = errors;
//         this.responseHttpStatus = responseHttpStatus;
//         this.loggingLevel = loggingLevel;
//     }
// 
//     public List<Error> getErrors() {
//         return errors;
//     }
// 
//     public HttpStatus getResponseHttpStatus() {
//         return responseHttpStatus;
//     }
// 
//     public LoggingLevel getLoggingLevel() {
//         return loggingLevel;
//     }
// 
//     @Override
//     public String getMessage() {
//         return "An application error has occurred. Status: " + responseHttpStatus + " | " + errors;
//     }
// }
// 
// Path: src/main/java/com/github/mkopylec/errorest/exceptions/ApplicationExceptionConfiguration.java
// public class ApplicationExceptionConfiguration {
// 
//     protected List<Error> errors = new ErrorsLoggingList();
//     protected HttpStatus responseHttpStatus;
//     protected LoggingLevel loggingLevel;
//     protected Throwable cause;
// 
//     protected List<Error> getErrors() {
//         return errors;
//     }
// 
//     public ApplicationExceptionConfiguration addError(String code, String description) {
//         errors.add(new Error(code, description));
//         return this;
//     }
// 
//     public ApplicationExceptionConfiguration withErrors(ErrorsLoggingList errors) {
//         this.errors = errors;
//         return this;
//     }
// 
//     protected HttpStatus getResponseHttpStatus() {
//         return responseHttpStatus;
//     }
// 
//     public ApplicationExceptionConfiguration withResponseHttpStatus(HttpStatus responseHttpStatus) {
//         this.responseHttpStatus = responseHttpStatus;
//         return this;
//     }
// 
//     protected LoggingLevel getLoggingLevel() {
//         return loggingLevel;
//     }
// 
//     public ApplicationExceptionConfiguration withLoggingLevel(LoggingLevel loggingLevel) {
//         this.loggingLevel = loggingLevel;
//         return this;
//     }
// 
//     protected Throwable getCause() {
//         return cause;
//     }
// 
//     public ApplicationExceptionConfiguration withCause(Throwable cause) {
//         this.cause = cause;
//         return this;
//     }
// }


// Path: src/test/java/com/github/mkopylec/errorest/application/TestApplicationException.java
import com.github.mkopylec.errorest.exceptions.ApplicationException;
import com.github.mkopylec.errorest.exceptions.ApplicationExceptionConfiguration;
import static com.github.mkopylec.errorest.logging.LoggingLevel.INFO;
import static org.springframework.http.HttpStatus.I_AM_A_TEAPOT;

package com.github.mkopylec.errorest.application;



public class TestApplicationException extends ApplicationException {

    public TestApplicationException() {
        super(new ApplicationExceptionConfiguration()