|
1 | 1 | import unittest
|
2 | 2 |
|
3 | 3 | from itemloaders import ItemLoader
|
| 4 | +from itemloaders.processors import TakeFirst |
4 | 5 |
|
5 | 6 |
|
6 | 7 | class InitializationTestMixin:
|
@@ -77,6 +78,53 @@ def test_get_output_value_list(self):
|
77 | 78 | self.assertIsInstance(loaded_item, self.item_class)
|
78 | 79 | self.assertEqual(loaded_item, dict({'name': ['foo', 'bar']}))
|
79 | 80 |
|
| 81 | + def test_get_output_value_default_singlevalue(self): |
| 82 | + """ |
| 83 | + The default value should be used only when the returned value is |
| 84 | + empty (None, '', etc.) and there is a default value defined |
| 85 | + """ |
| 86 | + input_item = self.item_class() |
| 87 | + il = ItemLoader(item=input_item) |
| 88 | + il.default_output_processor = TakeFirst() # make "name" field single |
| 89 | + |
| 90 | + self.assertEqual(il.get_output_value('name'), None) |
| 91 | + self.assertEqual(il.get_output_value('name', ''), '') |
| 92 | + self.assertEqual(il.get_output_value('name', []), []) |
| 93 | + self.assertEqual(il.get_output_value('name', 'foo'), 'foo') |
| 94 | + |
| 95 | + il.add_value('name', '') |
| 96 | + self.assertEqual(il.get_output_value('name'), None) |
| 97 | + self.assertEqual(il.get_output_value('name', ''), '') |
| 98 | + self.assertEqual(il.get_output_value('name', 'foo'), 'foo') |
| 99 | + self.assertEqual(il.load_item(), {}) |
| 100 | + |
| 101 | + input_item2 = self.item_class() |
| 102 | + il2 = ItemLoader(item=input_item2) |
| 103 | + il2.default_output_processor = TakeFirst() |
| 104 | + il2.add_value('name', 'foo') |
| 105 | + self.assertEqual(il2.get_output_value('name'), 'foo') |
| 106 | + self.assertEqual(il2.get_output_value('name', 'bar'), 'foo') |
| 107 | + self.assertEqual(il2.load_item(), dict({'name': 'foo'})) |
| 108 | + |
| 109 | + def test_get_output_value_default_list(self): |
| 110 | + """ |
| 111 | + The default value should be used only when the returned value is |
| 112 | + empty ([], etc.) and there is a default value defined |
| 113 | + """ |
| 114 | + input_item = self.item_class() |
| 115 | + il = ItemLoader(item=input_item) |
| 116 | + il.add_value('name', []) |
| 117 | + self.assertEqual(il.get_output_value('name'), []) |
| 118 | + self.assertEqual(il.get_output_value('name', 'foo'), 'foo') |
| 119 | + self.assertEqual(il.load_item(), {}) |
| 120 | + |
| 121 | + input_item2 = self.item_class() |
| 122 | + il2 = ItemLoader(item=input_item2) |
| 123 | + il2.add_value('name', ['foo', 'bar']) |
| 124 | + self.assertEqual(il2.get_output_value('name'), ['foo', 'bar']) |
| 125 | + self.assertEqual(il2.get_output_value('name', ['spam']), ['foo', 'bar']) |
| 126 | + self.assertEqual(il2.load_item(), dict({'name': ['foo', 'bar']})) |
| 127 | + |
80 | 128 | def test_values_single(self):
|
81 | 129 | """Values from initial item must be added to loader._values"""
|
82 | 130 | input_item = self.item_class(name='foo')
|
|
0 commit comments