CustomType   A
last analyzed

Complexity

Total Complexity 1

Size/Duplication

Total Lines 3
Duplicated Lines 0 %

Importance

Changes 2
Bugs 0 Features 0
Metric Value
c 2
b 0
f 0
dl 0
loc 3
rs 10
wmc 1
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
            def __str__(self):
27
                return '<CustomType object>'
28
        serializer = JsonFormat(self.dependencies)
29
        record = {}
30
        ct1 = CustomType()
31
        ct2 = CustomType()
32
        ct3 = CustomType()
33
        record['args'] = [1.23, ct1]
34
        record['kwargs'] = {'one':ct2, 'two':4.56}
35
        record['_versions'] = [{'args':[7.89, ct3]}]
36
        out = serializer.serializeSingle(self.imageWithProvenance(record))
37
        self.assertEqual(json.loads(out)['args'], 
38
            [1.23, str(ct1)])
39
        self.assertEqual(json.loads(out)['kwargs'], 
40
            {'one':str(ct2), 'two':4.56})
41
42
    def test_serialize_and_deserialize_dont_balk_if_time_field_absent(self):
43
        from niprov.formatjson import JsonFormat  
44
        serializer = JsonFormat(self.dependencies)
45
        record = {}
46
        img1 = self.imageWithProvenance(record)
47
        jsonrecord = serializer.serializeSingle(img1)
48
        out = serializer.deserialize(jsonrecord)
49
        self.assertEqual(img1.provenance, out.provenance)
50
51
    def test_swallows_object_ids(self):
52
        from bson.objectid import ObjectId
53
        from niprov.formatjson import JsonFormat  
54
        serializer = JsonFormat(self.dependencies)
55
        record = {}
56
        record['_id'] = ObjectId('564168f2fb481f480891263c')
57
        record['_versions'] = [{'_id':ObjectId('564168f2fb481f480891263c')}]
58
        out = serializer.serializeList([self.imageWithProvenance(record)])
59
        self.assertNotIn('_id', json.loads(out)[0])
60
        self.assertNotIn('_id', json.loads(out)[0]['_versions'][0])
61
62
    def test_Deals_with_versions(self):
63
        from niprov.formatjson import JsonFormat  
64
        serializer = JsonFormat(self.dependencies)
65
        record = {}
66
        dtnow = datetime.now()
67
        record['_versions'] = [{'acquired':dtnow}, 
68
                              {'added':dtnow}]
69
        jsonStr = serializer.serializeSingle(self.imageWithProvenance(record))
70
        out = serializer.deserialize(jsonStr)
71
        self.assertEqual(out.provenance['_versions'][-1]['added'], dtnow)
72
        self.assertEqual(out.provenance['_versions'][-2]['acquired'], dtnow)
73
74
75