import unittest
import json
import glob
from src.workflow import Workflow

class Test_Subworkflow_Extraction(unittest.TestCase):
    
        def test_wf6_extraction(self):
            w = Workflow(f"tests/ressources/workflows/wf6", display_info=False, duplicate=True)
            w.initialise()
            
            with open('tests/ressources/workflows/wf6/all_subworkflows.json') as json_file:
                saved = json.load(json_file)

            subworkflows = w.get_subworkflows_called()
            dico= {}
            for e in subworkflows:
                dico[str(e)] = e.get_code(get_OG = True)
            
            self.assertTrue(set(dico.values())==set(saved.values()))
        
        def test_wf1_extraction(self):
            w = Workflow(f"tests/ressources/workflows/wf1", display_info=False, duplicate=True)
            w.initialise()
            
            with open('tests/ressources/workflows/wf1/all_subworkflows.json') as json_file:
                saved = json.load(json_file)

            subworkflows = w.get_subworkflows_called()
            dico= {}
            for e in subworkflows:
                dico[str(e)] = e.get_code(get_OG = True)
            
            self.assertTrue(set(dico.values())==set(saved.values()))
        
        def test_wf18_extraction(self):
            w = Workflow(f"tests/ressources/workflows/wf18", display_info=False, duplicate=True)
            w.initialise()
            
            with open('tests/ressources/workflows/wf18/all_subworkflows.json') as json_file:
                saved = json.load(json_file)

            subworkflows = w.get_subworkflows_called()
            dico= {}
            for e in subworkflows:
                dico[str(e)] = e.get_code(get_OG = True)
            
            self.assertTrue(set(dico.values())==set(saved.values()))
        
        def test_wf13_extraction(self):
            w = Workflow(f"tests/ressources/workflows/wf13", display_info=False, duplicate=True)
            w.initialise()
            
            with open('tests/ressources/workflows/wf13/all_subworkflows.json') as json_file:
                saved = json.load(json_file)

            subworkflows = w.get_subworkflows_called()
            dico= {}
            for e in subworkflows:
                dico[str(e)] = e.get_code(get_OG = True)
            
            self.assertTrue(set(dico.values())==set(saved.values()))
        
        def test_wf8_extraction(self):
            w = Workflow(f"tests/ressources/workflows/wf8", display_info=False, duplicate=True)
            w.initialise()
            
            with open('tests/ressources/workflows/wf8/all_subworkflows.json') as json_file:
                saved = json.load(json_file)

            subworkflows = w.get_subworkflows_called()
            dico= {}
            for e in subworkflows:
                dico[str(e)] = e.get_code(get_OG = True)
            
            self.assertTrue(set(dico.values())==set(saved.values()))
        
        def test_wf3_extraction(self):
            w = Workflow(f"tests/ressources/workflows/wf3", display_info=False, duplicate=True)
            w.initialise()
            
            with open('tests/ressources/workflows/wf3/all_subworkflows.json') as json_file:
                saved = json.load(json_file)

            subworkflows = w.get_subworkflows_called()
            dico= {}
            for e in subworkflows:
                dico[str(e)] = e.get_code(get_OG = True)
            
            self.assertTrue(set(dico.values())==set(saved.values()))
        
        def test_wf2_extraction(self):
            w = Workflow(f"tests/ressources/workflows/wf2", display_info=False, duplicate=True)
            w.initialise()
            
            with open('tests/ressources/workflows/wf2/all_subworkflows.json') as json_file:
                saved = json.load(json_file)

            subworkflows = w.get_subworkflows_called()
            dico= {}
            for e in subworkflows:
                dico[str(e)] = e.get_code(get_OG = True)
            
            self.assertTrue(set(dico.values())==set(saved.values()))
        
        def test_wf5_extraction(self):
            w = Workflow(f"tests/ressources/workflows/wf5", display_info=False, duplicate=True)
            w.initialise()
            
            with open('tests/ressources/workflows/wf5/all_subworkflows.json') as json_file:
                saved = json.load(json_file)

            subworkflows = w.get_subworkflows_called()
            dico= {}
            for e in subworkflows:
                dico[str(e)] = e.get_code(get_OG = True)
            
            self.assertTrue(set(dico.values())==set(saved.values()))
        
        def test_wf16_extraction(self):
            w = Workflow(f"tests/ressources/workflows/wf16", display_info=False, duplicate=True)
            w.initialise()
            
            with open('tests/ressources/workflows/wf16/all_subworkflows.json') as json_file:
                saved = json.load(json_file)

            subworkflows = w.get_subworkflows_called()
            dico= {}
            for e in subworkflows:
                dico[str(e)] = e.get_code(get_OG = True)
            
            self.assertTrue(set(dico.values())==set(saved.values()))
        
        def test_wf12_extraction(self):
            w = Workflow(f"tests/ressources/workflows/wf12", display_info=False, duplicate=True)
            w.initialise()
            
            with open('tests/ressources/workflows/wf12/all_subworkflows.json') as json_file:
                saved = json.load(json_file)

            subworkflows = w.get_subworkflows_called()
            dico= {}
            for e in subworkflows:
                dico[str(e)] = e.get_code(get_OG = True)
            
            self.assertTrue(set(dico.values())==set(saved.values()))
        
        def test_wf10_extraction(self):
            w = Workflow(f"tests/ressources/workflows/wf10", display_info=False, duplicate=True)
            w.initialise()
            
            with open('tests/ressources/workflows/wf10/all_subworkflows.json') as json_file:
                saved = json.load(json_file)

            subworkflows = w.get_subworkflows_called()
            dico= {}
            for e in subworkflows:
                dico[str(e)] = e.get_code(get_OG = True)
            
            self.assertTrue(set(dico.values())==set(saved.values()))
        
        def test_wf9_extraction(self):
            w = Workflow(f"tests/ressources/workflows/wf9", display_info=False, duplicate=True)
            w.initialise()
            
            with open('tests/ressources/workflows/wf9/all_subworkflows.json') as json_file:
                saved = json.load(json_file)

            subworkflows = w.get_subworkflows_called()
            dico= {}
            for e in subworkflows:
                dico[str(e)] = e.get_code(get_OG = True)
            
            self.assertTrue(set(dico.values())==set(saved.values()))
        
        def test_wf7_extraction(self):
            w = Workflow(f"tests/ressources/workflows/wf7", display_info=False, duplicate=True)
            w.initialise()
            
            with open('tests/ressources/workflows/wf7/all_subworkflows.json') as json_file:
                saved = json.load(json_file)

            subworkflows = w.get_subworkflows_called()
            dico= {}
            for e in subworkflows:
                dico[str(e)] = e.get_code(get_OG = True)
            
            self.assertTrue(set(dico.values())==set(saved.values()))
        
        def test_wf4_extraction(self):
            w = Workflow(f"tests/ressources/workflows/wf4", display_info=False, duplicate=True)
            w.initialise()
            
            with open('tests/ressources/workflows/wf4/all_subworkflows.json') as json_file:
                saved = json.load(json_file)

            subworkflows = w.get_subworkflows_called()
            dico= {}
            for e in subworkflows:
                dico[str(e)] = e.get_code(get_OG = True)
            
            self.assertTrue(set(dico.values())==set(saved.values()))
        
        def test_wf15_extraction(self):
            w = Workflow(f"tests/ressources/workflows/wf15", display_info=False, duplicate=True)
            w.initialise()
            
            with open('tests/ressources/workflows/wf15/all_subworkflows.json') as json_file:
                saved = json.load(json_file)

            subworkflows = w.get_subworkflows_called()
            dico= {}
            for e in subworkflows:
                dico[str(e)] = e.get_code(get_OG = True)
            
            self.assertTrue(set(dico.values())==set(saved.values()))
        
        def test_wf17_extraction(self):
            w = Workflow(f"tests/ressources/workflows/wf17", display_info=False, duplicate=True)
            w.initialise()
            
            with open('tests/ressources/workflows/wf17/all_subworkflows.json') as json_file:
                saved = json.load(json_file)

            subworkflows = w.get_subworkflows_called()
            dico= {}
            for e in subworkflows:
                dico[str(e)] = e.get_code(get_OG = True)
            
            self.assertTrue(set(dico.values())==set(saved.values()))
        
        def test_wf14_extraction(self):
            w = Workflow(f"tests/ressources/workflows/wf14", display_info=False, duplicate=True)
            w.initialise()
            
            with open('tests/ressources/workflows/wf14/all_subworkflows.json') as json_file:
                saved = json.load(json_file)

            subworkflows = w.get_subworkflows_called()
            dico= {}
            for e in subworkflows:
                dico[str(e)] = e.get_code(get_OG = True)
            
            self.assertTrue(set(dico.values())==set(saved.values()))
        
        def test_wf11_extraction(self):
            w = Workflow(f"tests/ressources/workflows/wf11", display_info=False, duplicate=True)
            w.initialise()
            
            with open('tests/ressources/workflows/wf11/all_subworkflows.json') as json_file:
                saved = json.load(json_file)

            subworkflows = w.get_subworkflows_called()
            dico= {}
            for e in subworkflows:
                dico[str(e)] = e.get_code(get_OG = True)
            
            self.assertTrue(set(dico.values())==set(saved.values()))