code: package usecases;
  
  import java.io.IOException;
  import java.io.OutputStream;
  import java.nio.file.Files;
  
  import com.beijunyi.parallelgit.filesystem.AbstractGitFileSystemTest;
  import com.beijunyi.parallelgit.filesystem.GitPath;
  import org.junit.Test;
  
  import static org.junit.Assert.*;
  
  public class FilesNewOutputStreamTest extends AbstractGitFileSystemTest {
  
    @Test
    public void openNewOutputStream_theResultShouldBeNotNull() throws IOException {
      initRepository();
      writeToCache("/test_file.txt");
      commitToMaster();
      initGitFileSystem();
  
      try(OutputStream stream = Files.newOutputStream(gfs.getPath("/test_file.txt"))) {
        assertNotNull(stream);
      }
    }
  
    @Test
    public void openNewOutputStreamWhenFileDoesNotExist_shouldCreateNewFile() throws IOException {
      initGitFileSystem();
      GitPath file = gfs.getPath("/test_file.txt");
      Files.newOutputStream(file);
      assertTrue(Files.exists(file));
    }
  
    @Test
    public void openNewOutputStreamWhenFileDoesNotExist_theNewFileIsEmptyBeforeStreamCloses() throws IOException {
      initGitFileSystem();
      GitPath file = gfs.getPath("/non_existent_file.txt");
      try(OutputStream stream = Files.newOutputStream(file)) {
        stream.write(someBytes());
        assertEquals(0, Files.size(file));
      }
    }
  
    @Test
    public void openNewOutputStreamWhenFileDoesNotExist_theNewFileHasTheOutputDataAfterStreamCloses() throws IOException {
      initGitFileSystem();
  
      byte[] expected = someBytes();
      GitPath file = gfs.getPath("/test_file.txt");
      try(OutputStream stream = Files.newOutputStream(file)) {
        stream.write(expected);
      }
      assertArrayEquals(expected, Files.readAllBytes(file));
    }
  
  }
  