Completed
Push — master ( b66745...9821e6 )
by Jasper
02:18 queued 58s
created

test_serialize_makes_timedelta_fields_a_float()   A

Complexity

Conditions 1

Size

Total Lines 7

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
cc 1
c 1
b 0
f 0
dl 0
loc 7
rs 9.4285
1
#!/usr/bin/python
2
# -*- coding: UTF-8 -*-
3
import unittest
4
from mock import Mock
5
from datetime import datetime
6
import json
7
from tests.ditest import DependencyInjectionTestBase
8
9
10
class SerializerTests(DependencyInjectionTestBase):
11
12
    def setUp(self):
13
        super(SerializerTests, self).setUp()
14
        self.fileFactory.fromProvenance.side_effect = lambda p: self.imageWithProvenance(p)
15
16
    def imageWithProvenance(self, prov):
17
        img = Mock()
18
        img.provenance = prov
19
        if 'location' in prov:
20
            img.location.toString.return_value = prov['location']
21
        return img
22
23
    def test_serialize_makes_args_kwargs_values_strings(self):
24
        from niprov.formatjson import JsonFormat  
25
        class CustomType(object):
26
            pass
27
        serializer = JsonFormat(self.dependencies)
28
        record = {}
29
        ct1 = CustomType()
30
        ct2 = CustomType()
31
        record['args'] = [1.23, ct1]
32
        record['kwargs'] = {'one':ct2, 'two':4.56}
33
        out = serializer.serializeSingle(self.imageWithProvenance(record))
34
        self.assertEqual(json.loads(out)['args'], 
35
            [1.23, str(ct1)])
36
        self.assertEqual(json.loads(out)['kwargs'], 
37
            {'one':str(ct2), 'two':4.56})
38
39
    def test_serialize_and_deserialize_dont_balk_if_time_field_absent(self):
40
        from niprov.formatjson import JsonFormat  
41
        serializer = JsonFormat(self.dependencies)
42
        record = {}
43
        img1 = self.imageWithProvenance(record)
44
        jsonrecord = serializer.serializeSingle(img1)
45
        out = serializer.deserialize(jsonrecord)
46
        self.assertEqual(img1.provenance, out.provenance)
47
48
    def test_swallows_object_ids(self):
49
        from bson.objectid import ObjectId
50
        from niprov.formatjson import JsonFormat  
51
        serializer = JsonFormat(self.dependencies)
52
        record = {}
53
        record['_id'] = ObjectId('564168f2fb481f480891263c')
54
        out = serializer.serializeList([self.imageWithProvenance(record)])
55
        self.assertNotIn('_id', json.loads(out)[0])
56
57
    def test_Deals_with_versions(self):
58
        from niprov.formatjson import JsonFormat  
59
        serializer = JsonFormat(self.dependencies)
60
        record = {}
61
        dtnow = datetime.now()
62
        record['_versions'] = [{'acquired':dtnow}, 
63
                              {'added':dtnow}]
64
        jsonStr = serializer.serializeSingle(self.imageWithProvenance(record))
65
        out = serializer.deserialize(jsonStr)
66
        self.assertEqual(out.provenance['_versions'][-1]['added'], dtnow)
67
        self.assertEqual(out.provenance['_versions'][-2]['acquired'], dtnow)
68
69
70