Merge branch '10077-workbench-integration-tests' closes #10077
[arvados.git] / sdk / cwl / tests / test_make_output.py
1 import logging
2 import mock
3 import unittest
4 import os
5 import functools
6 import json
7 import StringIO
8
9 import arvados_cwl
10
11 class TestMakeOutput(unittest.TestCase):
12     @mock.patch("arvados.collection.Collection")
13     @mock.patch("arvados.collection.CollectionReader")
14     def test_make_output_collection(self, reader, col):
15         api = mock.MagicMock()
16         keep_client = mock.MagicMock()
17         runner = arvados_cwl.ArvCwlRunner(api, keep_client=keep_client)
18         runner.project_uuid = 'zzzzz-j7d0g-zzzzzzzzzzzzzzz'
19
20         final = mock.MagicMock()
21         col.return_value = final
22         readermock = mock.MagicMock()
23         reader.return_value = readermock
24
25         cwlout = StringIO.StringIO()
26         openmock = mock.MagicMock()
27         final.open.return_value = openmock
28         openmock.__enter__.return_value = cwlout
29
30         runner.make_output_collection("Test output", {
31             "foo": {
32                 "class": "File",
33                 "location": "keep:99999999999999999999999999999991+99/foo.txt",
34                 "size": 3,
35                 "basename": "foo.txt"
36             },
37             "bar": {
38                 "class": "File",
39                 "location": "keep:99999999999999999999999999999992+99/bar.txt",
40                 "basename": "baz.txt"
41             }
42         })
43
44         final.copy.assert_has_calls([mock.call('bar.txt', 'baz.txt', overwrite=False, source_collection=readermock)])
45         final.copy.assert_has_calls([mock.call('foo.txt', 'foo.txt', overwrite=False, source_collection=readermock)])
46         final.save_new.assert_has_calls([mock.call(ensure_unique_name=True, name='Test output', owner_uuid='zzzzz-j7d0g-zzzzzzzzzzzzzzz')])
47         self.assertEqual("""{
48     "bar": {
49         "class": "File",
50         "location": "baz.txt"
51     },
52     "foo": {
53         "class": "File",
54         "location": "foo.txt"
55     }
56 }""", cwlout.getvalue())
57
58         self.assertIs(final, runner.final_output_collection)