'''Unit tests for deleteRelease functionality'''
import os
import unittest
import shutil
import json
import multi_facility_process_helper
import multi_facility_process_helper_client
import globals
import toolconfig
import testUtils
import deleteRelease
import listCurrentReleases
from globals import UserParamsException


class TestDelete(unittest.TestCase):

    testDataFolder = "/tmp"

    def setUp(self):
         self.testDataFolder = testUtils.getTestFolder()
         testUtils.createStdIOCFolders()
         testUtils.createStdHLAFolders()
         testUtils.createStdPyDMFolders()

        
    def tearDown(self):
        shutil.rmtree(os.path.join(self.testDataFolder, testUtils.iocTestFolder))
        shutil.rmtree(os.path.join(self.testDataFolder, testUtils.HLATestFolder))
        shutil.rmtree(os.path.join(self.testDataFolder, testUtils.PyDMTestFolder))

    def test_determineUnusedReleases(self):
        """Make sure that we are not allowed to delete a IOC release that is being used"""
        unusedIOCReleases = listCurrentReleases.determineUnusedReleases('testPkg', "SIOC")
        self.assertTrue("v1" not in unusedIOCReleases)
        self.assertTrue("v2" not in unusedIOCReleases)
        self.assertTrue("Development" in unusedIOCReleases)
        unusedHLAReleases = listCurrentReleases.determineUnusedReleases('testPkg', "HLA")
        self.assertTrue("v1" not in unusedHLAReleases)
        self.assertTrue("v2" in unusedHLAReleases)
        self.assertTrue("Development" in unusedHLAReleases)
        unusedPyDMReleases = listCurrentReleases.determineUnusedReleases('pydm-testSubsys', "PyDM")
        self.assertTrue("v1" not in unusedPyDMReleases)
        self.assertTrue("v2" in unusedPyDMReleases)
        self.assertTrue("Development" in unusedPyDMReleases)

    def test_deleteIOCRelease(self):
        '''Delete a IOC release and make sure it is gone'''
        deleteargs = []
        if globals.verbose:
            deleteargs.append('-v')
        deleteargs.extend(['--name', 'testPkg', '--type', 'SIOC'])
        self.assertRaises(UserParamsException, deleteRelease.execute, deleteargs + ['v1'])
        self.assertRaises(Exception, deleteRelease.execute, deleteargs + ['v2'])
        deleteRelease.execute(deleteargs + ['Development'])
        for facility in toolconfig.getListOfFacilities():
            self.assertTrue(not os.path.exists(os.path.join(self.testDataFolder, testUtils.iocTestFolder, facility, "iocTop", "testPkg", "Development")))
            self.assertTrue(os.path.exists(os.path.join(self.testDataFolder, testUtils.iocTestFolder, facility, "iocTop", "testPkg", "v1")))
            self.assertTrue(os.path.exists(os.path.join(self.testDataFolder, testUtils.iocTestFolder, facility, "iocTop", "testPkg", "v2")))

    def test_deleteHLARelease(self):
        '''Delete a HLA release and make sure it is gone'''
        deleteargs = []
        if globals.verbose:
            deleteargs.append('-v')
        deleteargs.extend(['--name', 'testPkg', '--type', 'HLA'])
        self.assertRaises(UserParamsException, deleteRelease.execute, deleteargs + ['v1'])
        deleteRelease.execute(deleteargs + ['Development'])
        for facility in toolconfig.getListOfFacilities():
            self.assertTrue(not os.path.exists(os.path.join(self.testDataFolder, testUtils.HLATestFolder, facility, "physicsTop", "release", "testPkg", "Development")))
            self.assertTrue(os.path.exists(os.path.join(self.testDataFolder, testUtils.HLATestFolder, facility, "physicsTop", "release", "testPkg", "v1")))
            self.assertTrue(os.path.exists(os.path.join(self.testDataFolder, testUtils.HLATestFolder, facility, "physicsTop", "release", "testPkg", "v2")))

    def test_deletePyDMRelease(self):
        '''Delete a PyDM release and make sure it is gone'''
        deleteargs = []
        if globals.verbose:
            deleteargs.append('-v')
        deleteargs.extend(['--name', 'pydm-testSubsys', '--type', 'PyDM'])
        self.assertRaises(UserParamsException, deleteRelease.execute, deleteargs + ['v1'])
        deleteRelease.execute(deleteargs + ['Development'])
        for facility in toolconfig.getListOfFacilities():
            self.assertTrue(not os.path.exists(os.path.join(self.testDataFolder, testUtils.PyDMTestFolder, facility, "pydmTop", "release", "pydm-testSubsys", "Development")))
            self.assertTrue(os.path.exists(os.path.join(self.testDataFolder, testUtils.PyDMTestFolder, facility, "pydmTop", "release", "pydm-testSubsys", "v1")))
            self.assertTrue(os.path.exists(os.path.join(self.testDataFolder, testUtils.PyDMTestFolder, facility, "pydmTop", "release", "pydm-testSubsys", "v2")))
