@Test
  public void testCreateDefaultSettingsWithProxy() {
    // given
    File settingsXML = new File(Paths.Setting.settingsXMLPath);
    settingsXML.deleteOnExit();

    File installationData = new File(Paths.Setting.installationDataXMLPath);
    installationData.deleteOnExit();

    EnvironmentContext environmentContext = new EnvironmentContext();
    environmentContext.setSettingsXMLPath(Paths.Setting.settingsXMLPath);
    environmentContext.setInstallationDataXMLPath(Paths.Setting.installationDataXMLPath);

    // when
    EnvironmentData environmentData =
        new EnvironmentDataManager(environmentContext).createDefaultSettingsWithProxy();
    ClientSettings clientSettings = environmentData.getClientSettings();
    List<ProgramSettings> programsSettings =
        new ArrayList<ProgramSettings>(environmentData.getProgramsSettings());

    // then
    assertThat(clientSettings)
        .as("createEnvironmentDataWithProxy() should create client's settings")
        .isNotNull();
    assertThat(clientSettings.getPathToClientDirectory())
        .as("createEnvironmentDataWithProxy() should create client's directory")
        .isNotNull()
        .isEqualTo(environmentContext.getDefaultPathToClientDirectory());
    assertThat(clientSettings.getPathToClient())
        .as("createEnvironmentDataWithProxy() should create client's executable")
        .isNotNull()
        .isEqualTo(environmentContext.getDefaultPathToClient());
    assertThat(clientSettings.getPathToInstaller())
        .as("createEnvironmentDataWithProxy() should create installer's path")
        .isNotNull()
        .isEqualTo(environmentContext.getDefaultPathToInstaller());
    assertThat(clientSettings.getProxyAddress())
        .as("createEnvironmentDataWithProxy() should create proxy's address")
        .isNotNull()
        .isEqualTo(environmentContext.getDefaultProxyAddress());
    assertThat(clientSettings.getProxyPort())
        .as("createEnvironmentDataWithProxy() should create proxy's port")
        .isNotNull()
        .isEqualTo(environmentContext.getDefaultProxyPort());

    assertThat(programsSettings)
        .as("createEnvironmentDataWithProxy() should not create any program's settings")
        .isNotNull()
        .isEmpty();
  }
  @Test
  public void testSetEnvironmentData() throws ClientEnvironmentException, IOException {
    // given
    File settingsXML = new File(Paths.Setting.settingsXMLPath);
    settingsXML.deleteOnExit();

    File installationData = new File(Paths.Setting.installationDataXMLPath);
    installationData.deleteOnExit();

    EnvironmentContext environmentContext = new EnvironmentContext();
    environmentContext.setSettingsXMLPath(Paths.Setting.settingsXMLPath);
    environmentContext.setInstallationDataXMLPath(Paths.Setting.installationDataXMLPath);

    EnvironmentDataManager environmentDataService = new EnvironmentDataManager(environmentContext);

    // when
    environmentDataService.setEnvironmentData(environmentData());
    EnvironmentData savedEnvironmentData = environmentDataService.getEnvironmentData();
    ClientSettings savedClientSettings = savedEnvironmentData.getClientSettings();
    List<ProgramSettings> savedProgramsSettings =
        new ArrayList<ProgramSettings>(savedEnvironmentData.getProgramsSettings());

    // then
    assertThat(savedClientSettings)
        .as("setEnvironmentData(EnvironmentData) should save client's settings")
        .isNotNull();
    assertThat(savedClientSettings.getPathToClientDirectory())
        .as("setEnvironmentData(EnvironmentData) should save client's directory")
        .isNotNull()
        .isEqualTo(Paths.Library.clientDir);
    assertThat(savedClientSettings.getPathToClient())
        .as("setEnvironmentData(EnvironmentData) should save client's executable")
        .isNotNull()
        .isEqualTo(Paths.Library.clientPath);
    assertThat(savedClientSettings.getPathToInstaller())
        .as("setEnvironmentData(EnvironmentData) should save installer's path")
        .isNotNull()
        .isEqualTo(Paths.Library.installerPath);
    ;

    assertThat(savedProgramsSettings)
        .as("setEnvironmentData(EnvironmentData) should save installation data")
        .isNotNull()
        .hasSize(2);
    assertThat(savedProgramsSettings.get(0).getProgramName())
        .as("setEnvironmentData(EnvironmentData) should save program's name")
        .isNotNull()
        .isEqualTo(Values.ProgramSettings.programName);
    assertThat(savedProgramsSettings.get(0).getPathToProgramDirectory())
        .as("setEnvironmentData(EnvironmentData) should save program's directory")
        .isNotNull()
        .isEqualTo(Paths.Installations.Program.programDir);
    assertThat(savedProgramsSettings.get(0).getPathToProgram())
        .as("setEnvironmentData(EnvironmentData) should save path to program")
        .isNotNull()
        .isEqualTo(Paths.Installations.Program.programPath);
    assertThat(savedProgramsSettings.get(0).getServerAddress())
        .as("setEnvironmentData(EnvironmentData) should save server's address")
        .isNotNull()
        .isEqualTo(Values.ProgramSettings.serverAddress);
    assertThat(savedProgramsSettings.get(0).isDevelopmentVersion())
        .as("setEnvironmentData(EnvironmentData) should save development version")
        .isTrue();
  }