import os
import shutil
import tempfile
import zipfile
from unittest import TestCase

from cloudfoundry_client.operations.push.file_helper import FileHelper


class TestUnzipHelper(TestCase):
    def setUp(self):
        self.input_dirpath = self.zip_some_data()
        self.output_dirpath = tempfile.mkdtemp()

    def test_unzip(self):
        self.unzip()
        self.assertFileUnzipped()

    def test_unzip_with_existing_output_subdir(self):
        os.makedirs(self.output_dirpath + '/some_dir/subdir')
        self.unzip()

        self.assertFileUnzipped()

    def unzip(self):
        FileHelper.unzip(self.input_dirpath + '/myzip.zip', self.output_dirpath)

    def zip_some_data(self):
        input_dirpath = self.prepare_data_to_zip()
        with zipfile.ZipFile(input_dirpath + '/myzip.zip', 'w', zipfile.ZIP_DEFLATED) as myzip:
            myzip.write(input_dirpath + '/file.txt', 'file.txt')
            myzip.write(input_dirpath + '/some_dir', 'some_dir')
            myzip.write(input_dirpath + '/some_dir/subdir', 'some_dir/subdir')
        return input_dirpath

    def prepare_data_to_zip(self):
        input_dirpath = tempfile.mkdtemp()
        shutil.copyfile(__file__, input_dirpath + '/file.txt')
        os.makedirs(input_dirpath + '/some_dir/subdir')
        shutil.copyfile(__file__, input_dirpath + '/some_dir/file.txt')
        return input_dirpath

    def assertFileUnzipped(self):
        self.assertTrue(os.path.isfile(self.output_dirpath + '/file.txt'))
        self.assertTrue(os.path.isdir(self.output_dirpath + '/some_dir'))
        self.assertTrue(os.path.isdir(self.output_dirpath + '/some_dir/subdir'))

@@ -462,16 +462,29 @@
 akedirs(
+os.path.join(
 self.out
@@ -490,37 +490,35 @@
 tput_dirpath
- +
+,
  '
-/
 some_dir
 /subdir')%0A  
@@ -501,33 +501,36 @@
 h, 'some_dir
-/
+', '
 subdir')
 %0A        sel
@@ -509,32 +509,33 @@
 _dir', 'subdir')
+)
 %0A        self.un
@@ -618,24 +618,37 @@
 elper.unzip(
+os.path.join(
 self.input_d
@@ -645,37 +645,35 @@
 lf.input_dirpath
- +
+,
  '
-/
 myzip.zip', self
@@ -666,16 +666,17 @@
 zip.zip'
+)
 , self.o
@@ -800,16 +800,29 @@
 ZipFile(
+os.path.join(
 input_di
@@ -826,21 +826,19 @@
 _dirpath
- +
+,
  '
-/
 myzip.zi
@@ -839,16 +839,17 @@
 zip.zip'
+)
 , 'w', z
@@ -895,32 +895,45 @@
     myzip.write(
+os.path.join(
 input_dirpath + 
@@ -921,37 +921,35 @@
 in(input_dirpath
- +
+,
  '
-/
 file.txt', 'file
@@ -941,16 +941,17 @@
 ile.txt'
+)
 , 'file.
@@ -972,32 +972,45 @@
     myzip.write(
+os.path.join(
 input_dirpath + 
@@ -998,37 +998,35 @@
 in(input_dirpath
- +
+,
  '
-/
 some_dir', 'some
@@ -1014,24 +1014,25 @@
 , 'some_dir'
+)
 , 'some_dir'
@@ -1057,16 +1057,29 @@
 p.write(
+os.path.join(
 input_di
@@ -1079,37 +1079,35 @@
 nput_dirpath
- +
+,
  '
-/
 some_dir
 /subdir', 's
@@ -1094,24 +1094,28 @@
 some_dir
-/
+', '
 subdir'
+)
 , 'some_
@@ -1261,32 +1261,45 @@
 yfile(__file__, 
+os.path.join(
 input_dirpath + 
@@ -1287,37 +1287,35 @@
 in(input_dirpath
- +
+,
  '
-/
 file.txt')%0A     
@@ -1300,32 +1300,33 @@
 ath, 'file.txt')
+)
 %0A        os.make
@@ -1330,16 +1330,29 @@
 akedirs(
+os.path.join(
 input_di
@@ -1352,37 +1352,35 @@
 nput_dirpath
- +
+,
  '
-/
 some_dir
 /subdir')%0A  
@@ -1363,33 +1363,36 @@
 h, 'some_dir
-/
+', '
 subdir')
 %0A        shu
@@ -1371,32 +1371,33 @@
 _dir', 'subdir')
+)
 %0A        shutil.
@@ -1415,16 +1415,29 @@
 file__, 
+os.path.join(
 input_di
@@ -1441,29 +1441,27 @@
 _dirpath
- +
+,
  '
-/
 some_dir
 /file.tx
@@ -1452,17 +1452,20 @@
 some_dir
-/
+', '
 file.txt
@@ -1458,32 +1458,33 @@
 ir', 'file.txt')
+)
 %0A        return 
@@ -1571,16 +1571,29 @@
 .isfile(
+os.path.join(
 self.out
@@ -1603,21 +1603,19 @@
 _dirpath
- +
+,
  '
-/
 file.txt
@@ -1609,32 +1609,33 @@
 th, 'file.txt'))
+)
 %0A        self.as
@@ -1649,32 +1649,45 @@
 e(os.path.isdir(
+os.path.join(
 self.output_dirp
@@ -1681,37 +1681,35 @@
 f.output_dirpath
- +
+,
  '
-/
 some_dir'))%0A    
@@ -1699,24 +1699,25 @@
 'some_dir'))
+)
 %0A        sel
@@ -1739,24 +1739,37 @@
 .path.isdir(
+os.path.join(
 self.output_
@@ -1779,21 +1779,19 @@
 path
- +
+,
  '
-/
 some_dir
 /sub
@@ -1778,27 +1778,30 @@
 rpath, 'some_dir
-/
+', '
 subdir'))%0A
@@ -1779,29 +1779,30 @@
 path, 'some_dir', 'subdir'))
+)
 %0A

Use os.path.join for file path instead of string concatenation