2016-07-07 14:56:30 +02:00
|
|
|
# -*- encoding: utf-8 -*-
|
2016-10-12 16:01:30 +02:00
|
|
|
from __future__ import absolute_import
|
|
|
|
import unittest
|
2016-07-07 14:56:30 +02:00
|
|
|
|
|
|
|
from bson import ObjectId
|
2016-08-19 09:19:06 +02:00
|
|
|
from pillar.tests import AbstractPillarTest
|
2016-07-07 14:56:30 +02:00
|
|
|
from werkzeug.exceptions import BadRequest
|
|
|
|
|
|
|
|
|
|
|
|
class Str2idTest(AbstractPillarTest):
|
|
|
|
def test_happy(self):
|
2016-08-19 09:19:06 +02:00
|
|
|
from pillar.api.utils import str2id
|
2016-07-07 14:56:30 +02:00
|
|
|
|
|
|
|
def happy(str_id):
|
|
|
|
self.assertEqual(ObjectId(str_id), str2id(str_id))
|
|
|
|
|
|
|
|
happy(24 * 'a')
|
|
|
|
happy(12 * 'a')
|
|
|
|
happy(u'577e23ad98377323f74c368c')
|
|
|
|
|
|
|
|
def test_unhappy(self):
|
2016-08-19 09:19:06 +02:00
|
|
|
from pillar.api.utils import str2id
|
2016-07-07 14:56:30 +02:00
|
|
|
|
|
|
|
def unhappy(str_id):
|
|
|
|
self.assertRaises(BadRequest, str2id, str_id)
|
|
|
|
|
|
|
|
unhappy(13 * 'a')
|
|
|
|
unhappy(u'577e23ad 8377323f74c368c')
|
|
|
|
unhappy(u'김치') # Kimchi
|
|
|
|
unhappy('')
|
|
|
|
unhappy(u'')
|
|
|
|
unhappy(None)
|
2016-10-12 16:01:30 +02:00
|
|
|
|
|
|
|
|
|
|
|
class DocDiffTest(unittest.TestCase):
|
|
|
|
def test_no_diff_simple(self):
|
|
|
|
from pillar.api.utils import doc_diff
|
|
|
|
diff = doc_diff({'a': 'b', 3: 42},
|
|
|
|
{'a': 'b', 3: 42})
|
|
|
|
|
|
|
|
self.assertEqual([], list(diff))
|
|
|
|
|
|
|
|
def test_no_diff_privates(self):
|
|
|
|
from pillar.api.utils import doc_diff
|
|
|
|
diff = doc_diff({'a': 'b', 3: 42, '_updated': 5133},
|
|
|
|
{'a': 'b', 3: 42, '_updated': 42})
|
|
|
|
|
|
|
|
self.assertEqual([], list(diff))
|
|
|
|
|
|
|
|
def test_diff_values_simple(self):
|
|
|
|
from pillar.api.utils import doc_diff
|
|
|
|
diff = doc_diff({'a': 'b', 3: 42},
|
|
|
|
{'a': 'b', 3: 513})
|
|
|
|
|
|
|
|
self.assertEqual([(3, 42, 513)], list(diff))
|
|
|
|
|
2016-10-12 17:09:48 +02:00
|
|
|
def test_diff_values_falsey(self):
|
|
|
|
from pillar.api.utils import doc_diff, DoesNotExist
|
|
|
|
|
|
|
|
# DoesNotExist vs. empty string
|
|
|
|
diff = doc_diff({'a': 'b', 3: ''},
|
|
|
|
{'a': 'b'})
|
|
|
|
self.assertEqual([], list(diff))
|
|
|
|
|
|
|
|
diff = doc_diff({'a': 'b', 3: ''},
|
|
|
|
{'a': 'b'}, falsey_is_equal=False)
|
|
|
|
self.assertEqual([(3, '', DoesNotExist)], list(diff))
|
|
|
|
|
|
|
|
# Empty string vs. None
|
|
|
|
diff = doc_diff({'a': 'b', 3: ''},
|
|
|
|
{'a': 'b', 3: None})
|
|
|
|
self.assertEqual([], list(diff))
|
|
|
|
|
|
|
|
diff = doc_diff({'a': 'b', 3: ''},
|
|
|
|
{'a': 'b', 3: None}, falsey_is_equal=False)
|
|
|
|
self.assertEqual([(3, '', None)], list(diff))
|
|
|
|
|
2016-10-12 16:01:30 +02:00
|
|
|
def test_diff_keys_simple(self):
|
|
|
|
from pillar.api.utils import doc_diff, DoesNotExist
|
|
|
|
diff = doc_diff({'a': 'b', 3: 42},
|
|
|
|
{'a': 'b', 2: 42})
|
|
|
|
|
|
|
|
self.assertEqual({(3, 42, DoesNotExist), (2, DoesNotExist, 42)}, set(diff))
|
|
|
|
|
|
|
|
def test_no_diff_nested(self):
|
|
|
|
from pillar.api.utils import doc_diff
|
|
|
|
diff = doc_diff({'a': 'b', 'props': {'status': u'todo', 'notes': u'jemoeder'}},
|
|
|
|
{'a': 'b', 'props': {'status': u'todo', 'notes': u'jemoeder'}})
|
|
|
|
|
|
|
|
self.assertEqual([], list(diff))
|
|
|
|
|
|
|
|
def test_diff_values_nested(self):
|
|
|
|
from pillar.api.utils import doc_diff
|
|
|
|
diff = doc_diff({'a': 'b', 'props': {'status': u'todo', 'notes': u'jemoeder'}},
|
|
|
|
{'a': 'c', 'props': {'status': u'done', 'notes': u'jemoeder'}})
|
|
|
|
|
|
|
|
self.assertEqual({('a', 'b', 'c'), ('props.status', u'todo', u'done')},
|
|
|
|
set(diff))
|
|
|
|
|
|
|
|
def test_diff_keys_nested(self):
|
|
|
|
from pillar.api.utils import doc_diff, DoesNotExist
|
|
|
|
diff = doc_diff({'a': 'b', 'props': {'status1': u'todo', 'notes': u'jemoeder'}},
|
|
|
|
{'a': 'b', 'props': {'status2': u'todo', 'notes': u'jemoeder'}})
|
|
|
|
|
|
|
|
self.assertEqual({('props.status1', u'todo', DoesNotExist),
|
|
|
|
('props.status2', DoesNotExist, u'todo')},
|
|
|
|
set(diff))
|