Ejemplo n.º 1
0
 def test_upgrade_v1_to_latest(self):
     pu = ProjectUpgrader(self.toolbox)
     proj_v1 = make_v1_project_dict()
     self.assertTrue(pu.is_valid(1, proj_v1))
     with TemporaryDirectory() as project_dir:
         with mock.patch(
             "spinetoolbox.project_upgrader.ProjectUpgrader.backup_project_file"
         ) as mock_backup, mock.patch(
             "spinetoolbox.project_upgrader.ProjectUpgrader.force_save"
         ) as mock_force_save:
             os.mkdir(os.path.join(project_dir, "tool_specs"))  # Make /tool_specs dir
             # Make temp preprocessing_tool.json tool spec file
             spec_file_path = os.path.join(project_dir, "tool_specs", "preprocessing_tool.json")
             with open(spec_file_path, "w", encoding="utf-8") as tmp_spec_file:
                 tmp_spec_file.write("hello")
                 # Upgrade to latest version
                 proj_latest = pu.upgrade(proj_v1, project_dir)
                 mock_backup.assert_called_once()
                 mock_force_save.assert_called_once()
                 self.assertTrue(pu.is_valid(LATEST_PROJECT_VERSION, proj_latest))
                 # Check that items were transferred successfully by checking that item names are found in new
                 # 'items' dict and that they contain a dict. Combiners should be gone in v5
                 v1_items = proj_v1["objects"]
                 latest_items = proj_latest["items"]
                 # v1 project items were categorized under a <item_type> dict which were inside an 'objects' dict
                 for item_category in v1_items.keys():
                     for name in v1_items[item_category]:
                         self.assertTrue(name in latest_items.keys())
                         self.assertIsInstance(latest_items[name], dict)
                         self.assertTrue(latest_items[name]["type"] == item_category[:-1])
Ejemplo n.º 2
0
 def test_upgrade_v3_to_v4(self):
     pu = ProjectUpgrader(self.toolbox)
     proj_v3 = make_v3_project_dict()
     self.assertTrue(pu.is_valid(3, proj_v3))
     with TemporaryDirectory() as project_dir:
         with mock.patch(
             "spinetoolbox.project_upgrader.ProjectUpgrader.backup_project_file"
         ) as mock_backup, mock.patch(
             "spinetoolbox.project_upgrader.ProjectUpgrader.force_save"
         ) as mock_force_save, mock.patch(
             'spinetoolbox.project_upgrader.LATEST_PROJECT_VERSION', 4
         ):
             os.mkdir(os.path.join(project_dir, "tool_specs"))  # Make /tool_specs dir
             # Make temp preprocessing_tool.json tool spec file
             spec_file_path = os.path.join(project_dir, "tool_specs", "preprocessing_tool.json")
             with open(spec_file_path, "w", encoding="utf-8") as tmp_spec_file:
                 tmp_spec_file.write("hello")
                 # Upgrade to version 4
                 proj_v4 = pu.upgrade(proj_v3, project_dir)
                 mock_backup.assert_called_once()
                 mock_force_save.assert_called_once()
                 self.assertTrue(pu.is_valid(4, proj_v4))
                 # Check that items were transferred successfully by checking that item names are found in new
                 # 'items' dict and that they contain a dict
                 v3_items = proj_v3["items"]
                 v4_items = proj_v4["items"]
                 for name in v3_items.keys():
                     self.assertTrue(name in v4_items.keys())
                     self.assertIsInstance(v4_items[name], dict)
Ejemplo n.º 3
0
 def test_upgrade_v1_to_v2(self):
     pu = ProjectUpgrader(self.toolbox)
     proj_v1 = make_v1_project_dict()
     self.assertTrue(pu.is_valid(1, proj_v1))
     with TemporaryDirectory() as project_dir:
         with mock.patch(
             "spinetoolbox.project_upgrader.ProjectUpgrader.backup_project_file"
         ) as mock_backup, mock.patch(
             "spinetoolbox.project_upgrader.ProjectUpgrader.force_save"
         ) as mock_force_save, mock.patch(
             'spinetoolbox.project_upgrader.LATEST_PROJECT_VERSION', 2
         ):
             # Upgrade to version 2
             proj_v2 = pu.upgrade(proj_v1, project_dir)
             mock_backup.assert_called_once()
             mock_force_save.assert_called_once()
             self.assertTrue(pu.is_valid(2, proj_v2))
             # Check that items were transferred successfully by checking that item names are found in new
             # 'items' dict and that they contain a dict
             v1_items = proj_v1["objects"]
             v2_items = proj_v2["items"]
             # v1 project items categorized under an item_type dict which were inside an 'objects' dict
             for item_category in v1_items.keys():
                 for name in v1_items[item_category]:
                     self.assertTrue(name in v2_items.keys())
                     self.assertIsInstance(v2_items[name], dict)
Ejemplo n.º 4
0
 def test_upgrade_v4_to_v5(self):
     pu = ProjectUpgrader(self.toolbox)
     proj_v4 = make_v4_project_dict()
     self.assertTrue(pu.is_valid(4, proj_v4))
     with TemporaryDirectory() as project_dir:
         with mock.patch(
             "spinetoolbox.project_upgrader.ProjectUpgrader.backup_project_file"
         ) as mock_backup, mock.patch(
             "spinetoolbox.project_upgrader.ProjectUpgrader.force_save"
         ) as mock_force_save, mock.patch(
             'spinetoolbox.project_upgrader.LATEST_PROJECT_VERSION', 5
         ):
             os.mkdir(os.path.join(project_dir, "tool_specs"))  # Make /tool_specs dir
             # Make temp preprocessing_tool.json tool spec file
             spec_file_path = os.path.join(project_dir, "tool_specs", "preprocessing_tool.json")
             with open(spec_file_path, "w", encoding="utf-8") as tmp_spec_file:
                 tmp_spec_file.write("hello")
                 # Upgrade to version 5
                 proj_v5 = pu.upgrade(proj_v4, project_dir)
                 mock_backup.assert_called_once()
                 mock_force_save.assert_called_once()
                 self.assertTrue(pu.is_valid(5, proj_v5))
                 # Check that items were transferred successfully by checking that item names are found in new
                 # 'items' dict and that they contain a dict. Combiners should be gone in v5
                 v4_items = proj_v4["items"]
                 # Make a list of Combiner names
                 combiners = list()
                 for name, d in v4_items.items():
                     if d["type"] == "Combiner":
                         combiners.append(name)
                 v5_items = proj_v5["items"]
                 for name in v4_items.keys():
                     if name in combiners:
                         # v5 should not have Combiners anymore
                         self.assertFalse(name in v5_items.keys())
                     else:
                         self.assertTrue(name in v5_items.keys())
                         self.assertIsInstance(v5_items[name], dict)
 def test_upgrade(self):
     """Tests that reading an old project file (.proj) and
     upgrading it produces a valid project information dictionary."""
     old_project_file = os.path.abspath(
         os.path.join(os.curdir, "tests", "test_resources",
                      "unit_test_project.proj"))
     pu = ProjectUpgrader(self.toolbox)
     old_project_dict = pu.open_proj_json(old_project_file)
     with TemporaryDirectory() as old_project_dir:
         # Old project has four items which should have a data_dir
         a_dir = os.path.join(old_project_dir, "a")
         b_dir = os.path.join(old_project_dir, "b")
         c_dir = os.path.join(old_project_dir, "c")
         d_dir = os.path.join(old_project_dir, "d")
         create_dir(a_dir)
         create_dir(b_dir)
         create_dir(c_dir)
         create_dir(d_dir)
         udgraded_project_dict = pu.upgrade(old_project_dict,
                                            old_project_dir,
                                            "dummy_project_dir")
     retval = pu.is_valid(udgraded_project_dict)
     self.assertTrue(retval)
Ejemplo n.º 6
0
 def test_upgrade_with_too_recent_project_version(self):
     """Tests that projects with too recent versions are not opened."""
     project_dict = make_v3_project_dict()
     project_dict["project"]["version"] = LATEST_PROJECT_VERSION + 1
     pu = ProjectUpgrader(self.toolbox)
     self.assertFalse(pu.upgrade(project_dict, project_dir=""))