test_metadatarootrecordmapper.py 3.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  1. import unittest
  2. from unittest import mock
  3. from uuid import UUID
  4. from dataladmetadatamodel.mapper.gitmapper.gitblobcache import hash_blob
  5. from dataladmetadatamodel.metadata import Metadata
  6. from dataladmetadatamodel.metadatapath import MetadataPath
  7. from dataladmetadatamodel.metadatarootrecord import MetadataRootRecord
  8. from dataladmetadatamodel.tests.utils import create_file_tree_with_metadata
  9. from .... import version_string
  10. uuid_0 = UUID("00000000000000000000000000000000")
  11. dataset_version = "000000011111222223333"
  12. location_0 = "a000000000000000000000000000000000000000"
  13. location_1 = "a000000000000000000000000000000000000001"
  14. location_2 = "a000000000000000000000000000000000000002"
  15. location_3 = "a000000000000000000000000000000000000003"
  16. location_4 = "a000000000000000000000000000000000000004"
  17. default_paths = [
  18. MetadataPath("a/b/c"),
  19. MetadataPath("a/b/a"),
  20. MetadataPath("b"),
  21. MetadataPath("c/d/e"),
  22. MetadataPath("a/x")
  23. ]
  24. class TestMetadataMapper(unittest.TestCase):
  25. def test_basic_unmapping(self):
  26. file_tree = create_file_tree_with_metadata(default_paths, [
  27. Metadata()
  28. for _ in default_paths])
  29. mrr = MetadataRootRecord(
  30. uuid_0,
  31. dataset_version,
  32. Metadata(),
  33. file_tree)
  34. with mock.patch("dataladmetadatamodel.mapper.gitmapper."
  35. "metadatarootrecordmapper.git_save_json") as save, \
  36. mock.patch("dataladmetadatamodel.mapper.gitmapper."
  37. "metadatamapper.git_save_str") as str_save, \
  38. mock.patch("dataladmetadatamodel.mapper.gitmapper."
  39. "gitblobcache.git_save_file_list") as file_list_save, \
  40. mock.patch("dataladmetadatamodel.mapper.gitmapper."
  41. "mtreenodemapper.git_save_tree_node") as save_tree_node:
  42. save.configure_mock(return_value=location_0)
  43. str_save.configure_mock(return_value=location_1)
  44. save_tree_node.configure_mock(return_value=location_3)
  45. file_list_save.side_effect = lambda r, l: [
  46. hash_blob(open(e, "rb").read())
  47. for e in l
  48. ]
  49. reference = mrr.write_out("/tmp/t1", "git")
  50. self.assertEqual(reference.location, location_0)
  51. save.assert_called_once()
  52. representation = save.call_args[0][1]
  53. self.assertEqual(
  54. representation,
  55. {
  56. 'dataset_identifier': str(uuid_0),
  57. 'dataset_version': dataset_version,
  58. 'dataset_level_metadata': {
  59. '@': {
  60. 'type': 'Reference',
  61. 'version': version_string
  62. },
  63. 'class_name': 'Metadata',
  64. 'location': location_1
  65. },
  66. 'file_tree': {
  67. '@': {
  68. 'type': 'Reference',
  69. 'version': version_string
  70. },
  71. 'class_name': 'MTreeNode',
  72. 'location': location_3}
  73. }
  74. )
  75. if __name__ == '__main__':
  76. unittest.main()