@Override
    public Path touch(final Path file, final TransferStatus status) throws BackgroundException {
        try {
            try {
                if(!new DriveAttributesFinderFeature(session, fileid).find(file).isHidden()) {
                    throw new ConflictException(file.getAbsolute());
                }
            }
            catch(NotfoundException e) {
                // Ignore
            }
            final Drive.Files.Create insert = session.getClient().files().create(new File()
                    .setName(file.getName())
                    .setMimeType(status.getMime())
                    .setParents(Collections.singletonList(fileid.getFileId(file.getParent()))));
            final File execute = insert
                    .setFields(DriveAttributesFinderFeature.DEFAULT_FIELDS)
                    .setSupportsAllDrives(new HostPreferences(session.getHost()).getBoolean("googledrive.teamdrive.enable")).execute();
            fileid.cache(file, execute.getId());
            return file.withAttributes(new DriveAttributesFinderFeature(session, fileid).toAttributes(execute));
        }
        catch(IOException e) {
            throw new DriveExceptionMappingService(fileid).map("Cannot create {0}", e, file);
        }
    }
@Test
    public void testTouch() throws Exception {
        final DriveFileIdProvider fileid = new DriveFileIdProvider(session);
        final Path folder = new DriveDirectoryFeature(session, fileid).mkdir(
                new Path(DriveHomeFinderService.MYDRIVE_FOLDER, new AlphanumericRandomStringService().random(), EnumSet.of(Path.Type.directory)), new TransferStatus());
        final Path test = new DriveTouchFeature(session, fileid).touch(
                new Path(folder, new AlphanumericRandomStringService().random(), EnumSet.of(Path.Type.file)), new TransferStatus().withMime("x-application/cyberduck"));
        final String id = test.attributes().getFileId();
        assertNotNull(id);
        assertNull(test.attributes().getVersionId());
        assertEquals(test.attributes().getFileId(), new DriveAttributesFinderFeature(session, fileid).find(test).getFileId());
        assertThrows(ConflictException.class, () -> new DriveTouchFeature(session, fileid).touch(test, new TransferStatus()));
        assertThrows(ConflictException.class, () -> new DriveDirectoryFeature(session, fileid).mkdir(test, new TransferStatus()));
        new DriveTrashFeature(session, fileid).delete(Collections.singletonList(test), new DisabledLoginCallback(), new Delete.DisabledCallback());
        assertNull(test.attributes().getFileId());
        // Trashed
        assertFalse(new DriveFindFeature(session, fileid).find(test));
        assertFalse(new DefaultFindFeature(session).find(test));
        test.attributes().setFileId(id);
        assertTrue(new DriveFindFeature(session, fileid).find(test));
        assertTrue(new DefaultFindFeature(session).find(test));
        new DriveDeleteFeature(session, fileid).delete(Collections.singletonList(folder), new DisabledLoginCallback(), new Delete.DisabledCallback());
    }