// Path: src/main/java/fr/techad/sonar/GerritPluginException.java
// public class GerritPluginException extends Exception {
//     private static final long serialVersionUID = 3158628966283370707L;
// 
//     public GerritPluginException() {
//         super();
//     }
// 
//     public GerritPluginException(String message) {
//         super(message);
//     }
// 
//     public GerritPluginException(String message, Throwable cause) {
//         super(message, cause);
//     }
// }
// 
// Path: src/main/java/fr/techad/sonar/gerrit/GerritConnector.java
// public interface GerritConnector {
//     public String listFiles() throws IOException;
// 
//     public String setReview(String reviewInputAsJson) throws IOException;
// }
// 
// Path: src/test/java/fr/techad/sonar/mockito/MockitoExtension.java
// public class MockitoExtension
//     implements TestInstancePostProcessor, ParameterResolver {
// 
//     @Override
//     public void postProcessTestInstance(Object testInstance,
//                                         ExtensionContext context) {
//         MockitoAnnotations.initMocks(testInstance);
//     }
// 
//     @Override
//     public boolean supportsParameter(ParameterContext parameterContext,
//                                      ExtensionContext extensionContext) {
//         return
//             parameterContext.getParameter().isAnnotationPresent(Mock.class);
//     }
// 
//     @Override
//     public Object resolveParameter(ParameterContext parameterContext,
//                                    ExtensionContext extensionContext) {
//         return getMock(parameterContext.getParameter(), extensionContext);
//     }
// 
//     private Object getMock(
//         Parameter parameter, ExtensionContext extensionContext) {
// 
//         Class<?> mockType = parameter.getType();
//         ExtensionContext.Store mocks = extensionContext.getStore(ExtensionContext.Namespace.create(
//             MockitoExtension.class, mockType));
//         String mockName = getMockName(parameter);
// 
//         if (mockName != null) {
//             return mocks.getOrComputeIfAbsent(
//                 mockName, key -> mock(mockType, mockName));
//         }
//         else {
//             return mocks.getOrComputeIfAbsent(
//                 mockType.getCanonicalName(), key -> mock(mockType));
//         }
//     }
// 
//     private String getMockName(Parameter parameter) {
//         String explicitMockName = parameter.getAnnotation(Mock.class)
//             .name().trim();
//         if (!explicitMockName.isEmpty()) {
//             return explicitMockName;
//         }
//         else if (parameter.isNamePresent()) {
//             return parameter.getName();
//         }
//         return null;
//     }
// }


import fr.techad.sonar.GerritPluginException;
import fr.techad.sonar.gerrit.GerritConnector;
import fr.techad.sonar.mockito.MockitoExtension;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.junit.platform.runner.JUnitPlatform;
import org.junit.runner.RunWith;
import org.mockito.Mock;
import java.io.IOException;
import java.util.List;
import static org.mockito.Mockito.when;
    @Mock
    private GerritConnector gerritConnector;

    @Test
    @DisplayName("Should return a list files")
    public void shouldGetListFiles() throws IOException, GerritPluginException {
        String response = "{" + COMMON_RESPONSE +
            " \"currentPatchSet\": {" +
            "\"files\": [" +
            "{ " +
            "\"file\": \"gerrit-server/src/main/java/com/google/gerrit/server/project/RefControl.java\"," +
            "\"type\": \"ADDED\"" +
            "}," +
            "{ " +
            "\"file\": \"gerrit-server/src/main/java/com/google/gerrit/server/project/RefControl2.java\"," +
            "\"type\": \"ADDED\"" +
            "}" +
            "]" +
            "}" +
            "}";
        when(gerritConnector.listFiles()).thenReturn(response);

        GerritSshFacade gerritSshFacade = new GerritSshFacade(gerritConnector);
        // Will call fillListFilesFromGerrit
        List<String> listFiles = gerritSshFacade.listFiles();
        Assertions.assertEquals(2, listFiles.size());
        Assertions.assertEquals("gerrit-server/src/main/java/com/google/gerrit/server/project/RefControl.java", listFiles.get(0));
        Assertions.assertEquals("gerrit-server/src/main/java/com/google/gerrit/server/project/RefControl2.java", listFiles.get(1));
    }

// Path: src/main/java/fr/techad/sonar/GerritPluginException.java
// public class GerritPluginException extends Exception {
//     private static final long serialVersionUID = 3158628966283370707L;
// 
//     public GerritPluginException() {
//         super();
//     }
// 
//     public GerritPluginException(String message) {
//         super(message);
//     }
// 
//     public GerritPluginException(String message, Throwable cause) {
//         super(message, cause);
//     }
// }
// 
// Path: src/main/java/fr/techad/sonar/gerrit/GerritConnector.java
// public interface GerritConnector {
//     public String listFiles() throws IOException;
// 
//     public String setReview(String reviewInputAsJson) throws IOException;
// }
// 
// Path: src/test/java/fr/techad/sonar/mockito/MockitoExtension.java
// public class MockitoExtension
//     implements TestInstancePostProcessor, ParameterResolver {
// 
//     @Override
//     public void postProcessTestInstance(Object testInstance,
//                                         ExtensionContext context) {
//         MockitoAnnotations.initMocks(testInstance);
//     }
// 
//     @Override
//     public boolean supportsParameter(ParameterContext parameterContext,
//                                      ExtensionContext extensionContext) {
//         return
//             parameterContext.getParameter().isAnnotationPresent(Mock.class);
//     }
// 
//     @Override
//     public Object resolveParameter(ParameterContext parameterContext,
//                                    ExtensionContext extensionContext) {
//         return getMock(parameterContext.getParameter(), extensionContext);
//     }
// 
//     private Object getMock(
//         Parameter parameter, ExtensionContext extensionContext) {
// 
//         Class<?> mockType = parameter.getType();
//         ExtensionContext.Store mocks = extensionContext.getStore(ExtensionContext.Namespace.create(
//             MockitoExtension.class, mockType));
//         String mockName = getMockName(parameter);
// 
//         if (mockName != null) {
//             return mocks.getOrComputeIfAbsent(
//                 mockName, key -> mock(mockType, mockName));
//         }
//         else {
//             return mocks.getOrComputeIfAbsent(
//                 mockType.getCanonicalName(), key -> mock(mockType));
//         }
//     }
// 
//     private String getMockName(Parameter parameter) {
//         String explicitMockName = parameter.getAnnotation(Mock.class)
//             .name().trim();
//         if (!explicitMockName.isEmpty()) {
//             return explicitMockName;
//         }
//         else if (parameter.isNamePresent()) {
//             return parameter.getName();
//         }
//         return null;
//     }
// }


// Path: src/test/java/fr/techad/sonar/gerrit/network/ssh/GerritSshFacadeTest.java
import fr.techad.sonar.GerritPluginException;
import fr.techad.sonar.gerrit.GerritConnector;
import fr.techad.sonar.mockito.MockitoExtension;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.junit.platform.runner.JUnitPlatform;
import org.junit.runner.RunWith;
import org.mockito.Mock;
import java.io.IOException;
import java.util.List;
import static org.mockito.Mockito.when;

    @Mock
    private GerritConnector gerritConnector;

    @Test
    @DisplayName("Should return a list files")
    public void shouldGetListFiles() throws IOException, GerritPluginException {
        String response = "{" + COMMON_RESPONSE +
            " \"currentPatchSet\": {" +
            "\"files\": [" +
            "{ " +
            "\"file\": \"gerrit-server/src/main/java/com/google/gerrit/server/project/RefControl.java\"," +
            "\"type\": \"ADDED\"" +
            "}," +
            "{ " +
            "\"file\": \"gerrit-server/src/main/java/com/google/gerrit/server/project/RefControl2.java\"," +
            "\"type\": \"ADDED\"" +
            "}" +
            "]" +
            "}" +
            "}";
        when(gerritConnector.listFiles()).thenReturn(response);

        GerritSshFacade gerritSshFacade = new GerritSshFacade(gerritConnector);
        // Will call fillListFilesFromGerrit
        List<String> listFiles = gerritSshFacade.listFiles();
        Assertions.assertEquals(2, listFiles.size());
        Assertions.assertEquals("gerrit-server/src/main/java/com/google/gerrit/server/project/RefControl.java", listFiles.get(0));
        Assertions.assertEquals("gerrit-server/src/main/java/com/google/gerrit/server/project/RefControl2.java", listFiles.get(1));
    }

    @Test