def test_remove_object(self): self.mi.update() self.assertEqual(self.sb.search('*')['hits'], 3) mock = MockModel() mock.pk = 20 mock.author = 'daniel%s' % mock.id mock.pub_date = datetime.datetime(2009, 1, 31, 4, 19, 0) self.mi.update_object(mock) self.assertEqual(self.sb.search('*')['hits'], 4) self.mi.remove_object(mock) self.assertEqual([(res.content_type(), res.pk) for res in self.sb.search('*')['results']], [(u'core.mockmodel', u'1'), (u'core.mockmodel', u'2'), (u'core.mockmodel', u'3')]) # Put it back so we can test passing kwargs. mock = MockModel() mock.pk = 20 mock.author = 'daniel%s' % mock.id mock.pub_date = datetime.datetime(2009, 1, 31, 4, 19, 0) self.mi.update_object(mock) self.assertEqual(self.sb.search('*')['hits'], 4) self.mi.remove_object(mock, commit=False) self.assertEqual([(res.content_type(), res.pk) for res in self.sb.search('*')['results']], [(u'core.mockmodel', u'1'), (u'core.mockmodel', u'2'), (u'core.mockmodel', u'3'), (u'core.mockmodel', u'20')]) self.sb.clear()
def test_prepare(self): mock = MockModel() mock.pk = 1 pk = IntegerField(model_attr='pk') self.assertEqual(pk.prepare(mock), 1) # Simulate failed lookups. mock_tag = MockTag.objects.create(name='primary') mock = MockModel() mock.tag = mock_tag tag_count = IntegerField(model_attr='tag__count') self.assertRaises(SearchFieldError, tag_count.prepare, mock) # Simulate default=1. mock = MockModel() default = IntegerField(default=1) self.assertEqual(default.prepare(mock), 1) # Simulate null=True. mock = MockModel() pk_none = IntegerField(model_attr='pk', null=True) self.assertEqual(pk_none.prepare(mock), None)
def test_prepare(self): mock = MockModel() mock.pub_date = datetime.datetime(2009, 2, 13, 10, 1, 0) pub_date = DateTimeField(model_attr='pub_date') self.assertEqual(pub_date.prepare(mock), datetime.datetime(2009, 2, 13, 10, 1, 0)) # Simulate default=datetime.datetime(2009, 2, 13, 10, 01, 00). mock = MockModel() default = DateTimeField(default=datetime.datetime(2000, 1, 1, 0, 0, 0)) self.assertEqual(default.prepare(mock), datetime.datetime(2000, 1, 1, 0, 0, 0))
def test_prepare(self): mock = MockModel() mock.pub_date = datetime.date(2009, 2, 13) pub_date = DateField(model_attr="pub_date") self.assertEqual(pub_date.prepare(mock), datetime.date(2009, 2, 13)) # Simulate default=datetime.date(2000, 1, 1). mock = MockModel() default = DateField(default=datetime.date(2000, 1, 1)) self.assertEqual(default.prepare(mock), datetime.date(2000, 1, 1))
def test_prepare(self): mock = MockModel() mock.user = "******" author = CharField(model_attr="user") self.assertEqual(author.prepare(mock), "daniel") # Do a lookup through the relation. mock_tag = MockTag.objects.create(name="primary") mock = MockModel() mock.tag = mock_tag tag_name = CharField(model_attr="tag__name") self.assertEqual(tag_name.prepare(mock), "primary") # Use the default. mock = MockModel() author = CharField(model_attr="author", default="") self.assertEqual(author.prepare(mock), "") # Simulate failed lookups. mock_tag = MockTag.objects.create(name="primary") mock = MockModel() mock.tag = mock_tag tag_slug = CharField(model_attr="tag__slug") self.assertRaises(SearchFieldError, tag_slug.prepare, mock) # Simulate failed lookups and ensure we don't get a UnicodeDecodeError # in the error message. mock_tag = MockTag.objects.create(name="básico") mock = MockModel() mock.tag = mock_tag tag_slug = CharField(model_attr="tag__slug") self.assertRaises(SearchFieldError, tag_slug.prepare, mock) # Simulate default='foo'. mock = MockModel() default = CharField(default="foo") self.assertEqual(default.prepare(mock), "foo") # Simulate null=True. mock = MockModel() empty = CharField(null=True) self.assertEqual(empty.prepare(mock), None) mock = MockModel() mock.user = None author = CharField(model_attr="user", null=True) self.assertEqual(author.prepare(mock), None)
def test_prepare(self): mock = MockModel() mock.user = '******' author = CharField(model_attr='user') self.assertEqual(author.prepare(mock), u'daniel') # Do a lookup through the relation. mock_tag = MockTag.objects.create(name='primary') mock = MockModel() mock.tag = mock_tag tag_name = CharField(model_attr='tag__name') self.assertEqual(tag_name.prepare(mock), u'primary') # Use the default. mock = MockModel() author = CharField(model_attr='author', default='') self.assertEqual(author.prepare(mock), u'') # Simulate failed lookups. mock_tag = MockTag.objects.create(name='primary') mock = MockModel() mock.tag = mock_tag tag_slug = CharField(model_attr='tag__slug') self.assertRaises(SearchFieldError, tag_slug.prepare, mock) # Simulate failed lookups and ensure we don't get a UnicodeDecodeError # in the error message. mock_tag = MockTag.objects.create(name=u'básico') mock = MockModel() mock.tag = mock_tag tag_slug = CharField(model_attr='tag__slug') self.assertRaises(SearchFieldError, tag_slug.prepare, mock) # Simulate default='foo'. mock = MockModel() default = CharField(default='foo') self.assertEqual(default.prepare(mock), 'foo') # Simulate null=True. mock = MockModel() empty = CharField(null=True) self.assertEqual(empty.prepare(mock), None) mock = MockModel() mock.user = None author = CharField(model_attr='user', null=True) self.assertEqual(author.prepare(mock), None)
def test_prepare_from_string(self): mock = MockModel() mock.pub_date = "2016-02-16T10:01:02Z" pub_date = DateTimeField(model_attr="pub_date") self.assertEqual(pub_date.prepare(mock), datetime.datetime(2016, 2, 16, 10, 1, 2))
def test_prepare(self): mock = MockModel() mock.user = '******' mock.price = 25.65 price = FacetFloatField(model_attr='price') self.assertEqual(price.prepare(mock), 25.65)
def test_prepare(self): mock = MockModel() mock.pk = 1 mock.user = '******' template1 = CharField(use_template=True) self.assertRaises(SearchFieldError, template1.prepare, mock) template2 = CharField(use_template=True) template2.instance_name = 'template_x' self.assertRaises(TemplateDoesNotExist, template2.prepare, mock) template3 = CharField(use_template=True) template3.instance_name = 'template' self.assertEqual(template3.prepare(mock), u'Indexed!\n1') template4 = CharField(use_template=True, template_name='search/indexes/foo.txt') template4.instance_name = 'template' self.assertEqual(template4.prepare(mock), u'FOO!\n') template5 = CharField( use_template=True, template_name=['foo.txt', 'search/indexes/bar.txt']) template5.instance_name = 'template' self.assertEqual(template5.prepare(mock), u'BAR!\n')
def test_prepare(self): mock = MockModel() mock.pk = 1 mock.user = "******" template1 = CharField(use_template=True) self.assertRaises(SearchFieldError, template1.prepare, mock) template2 = CharField(use_template=True) template2.instance_name = "template_x" self.assertRaises(TemplateDoesNotExist, template2.prepare, mock) template3 = CharField(use_template=True) template3.instance_name = "template" self.assertEqual(template3.prepare(mock), "Indexed!\n1") template4 = CharField(use_template=True, template_name="search/indexes/foo.txt") template4.instance_name = "template" self.assertEqual(template4.prepare(mock), "FOO!\n") template5 = CharField( use_template=True, template_name=["foo.txt", "search/indexes/bar.txt"] ) template5.instance_name = "template" self.assertEqual(template5.prepare(mock), "BAR!\n")
def test_prepare(self): mock = MockModel() mock.user = '******' mock.created = datetime.datetime(2010, 10, 30, 3, 14, 25) created = FacetDateTimeField(model_attr='created') self.assertEqual(created.prepare(mock), datetime.datetime(2010, 10, 30, 3, 14, 25))
def test_prepare(self): mock = MockModel() mock.user = '******' mock.is_active = True is_active = FacetBooleanField(model_attr='is_active') self.assertEqual(is_active.prepare(mock), True)
def test_prepare(self): mock = MockModel() mock.user = '******' mock.sites = [1, 3, 4] sites = FacetMultiValueField(model_attr='sites') self.assertEqual(sites.prepare(mock), [1, 3, 4])
def test_prepare(self): mock = MockModel() mock.user = '******' mock.view_count = 13 view_count = FacetIntegerField(model_attr='view_count') self.assertEqual(view_count.prepare(mock), 13)
def test_prepare(self): mock = MockModel() mock.user = "******" mock.created = datetime.date(2010, 10, 30) created = FacetDateField(model_attr="created") self.assertEqual(created.prepare(mock), datetime.date(2010, 10, 30))
def test_thread_safety(self): # This is a regression. ``SearchIndex`` used to write to # ``self.prepared_data``, which would leak between threads if things # went too fast. exceptions = [] def threaded_prepare(index_queue, index, model): try: index.queue = index_queue prepped = index.prepare(model) except Exception as e: exceptions.append(e) raise class ThreadedSearchIndex(GoodMockSearchIndex): def prepare_author(self, obj): if obj.pk == 20: time.sleep(0.1) else: time.sleep(0.5) index_queue.put(self.prepared_data["author"]) return self.prepared_data["author"] tmi = ThreadedSearchIndex() index_queue = queue.Queue() mock_1 = MockModel() mock_1.pk = 20 mock_1.author = "foo" mock_1.pub_date = datetime.datetime(2009, 1, 31, 4, 19, 0) mock_2 = MockModel() mock_2.pk = 21 mock_2.author = "daniel%s" % mock_2.id mock_2.pub_date = datetime.datetime(2009, 1, 31, 4, 19, 0) th1 = Thread(target=threaded_prepare, args=(index_queue, tmi, mock_1)) th2 = Thread(target=threaded_prepare, args=(index_queue, tmi, mock_2)) th1.start() th2.start() th1.join() th2.join() mock_1_result = index_queue.get() mock_2_result = index_queue.get() self.assertEqual(mock_1_result, "foo") self.assertEqual(mock_2_result, "daniel21")
def test_prepare(self): mock = MockModel() mock.pk = 20 mock.author = 'daniel%s' % mock.id mock.pub_date = datetime.datetime(2009, 1, 31, 4, 19, 0) self.assertEqual(len(self.mi.prepare(mock)), 7) self.assertEqual(sorted(self.mi.prepare(mock).keys()), ['author', 'django_ct', 'django_id', 'extra', 'id', 'pub_date', 'text'])
def test_prepare(self): mock = MockModel() mock.sites = ['3', '4', '5'] sites = MultiValueField(model_attr='sites') self.assertEqual(sites.prepare(mock), ['3', '4', '5']) # Simulate default=[1]. mock = MockModel() default = MultiValueField(default=[1]) self.assertEqual(default.prepare(mock), [1]) # Simulate null=True. mock = MockModel() multy_none = MultiValueField(null=True) self.assertEqual(multy_none.prepare(mock), None)
def test_prepare(self): mock = MockModel() mock.sites = ["3", "4", "5"] sites = MultiValueField(model_attr="sites") self.assertEqual(sites.prepare(mock), ["3", "4", "5"]) # Simulate default=[1]. mock = MockModel() default = MultiValueField(default=[1]) self.assertEqual(default.prepare(mock), [1]) # Simulate null=True. mock = MockModel() multy_none = MultiValueField(null=True) self.assertEqual(multy_none.prepare(mock), None)
def test_prepare(self): mock = MockModel() mock.floaty = Decimal('12.5') floaty = DecimalField(model_attr='floaty') self.assertEqual(floaty.prepare(mock), '12.5') # Simulate default=1.5. mock = MockModel() default = DecimalField(default='1.5') self.assertEqual(default.prepare(mock), '1.5') # Simulate null=True. mock = MockModel() floaty_none = DecimalField(null=True) self.assertEqual(floaty_none.prepare(mock), None)
def test_prepare(self): mock = MockModel() mock.floaty = 12.5 floaty = FloatField(model_attr='floaty') self.assertEqual(floaty.prepare(mock), 12.5) # Simulate default=1.5. mock = MockModel() default = FloatField(default=1.5) self.assertEqual(default.prepare(mock), 1.5) # Simulate null=True. mock = MockModel() floaty_none = FloatField(null=True) self.assertEqual(floaty_none.prepare(mock), None)
def test_prepare(self): mock = MockModel() mock.active = True is_active = BooleanField(model_attr='active') self.assertEqual(is_active.prepare(mock), True) # Simulate default=True. mock = MockModel() default = BooleanField(default=True) self.assertEqual(default.prepare(mock), True) # Simulate null=True. mock = MockModel() booly_none = BooleanField(null=True) self.assertEqual(booly_none.prepare(mock), None)
def test_remove_object(self): self.mi.update() self.assertEqual(self.sb.search("*")["hits"], 3) mock = MockModel() mock.pk = 20 mock.author = "daniel%s" % mock.id mock.pub_date = datetime.datetime(2009, 1, 31, 4, 19, 0) self.mi.update_object(mock) self.assertEqual(self.sb.search("*")["hits"], 4) self.mi.remove_object(mock) self.assertEqual( [(res.content_type(), res.pk) for res in self.sb.search("*")["results"]], [("core.mockmodel", "1"), ("core.mockmodel", "2"), ("core.mockmodel", "3")], ) # Put it back so we can test passing kwargs. mock = MockModel() mock.pk = 20 mock.author = "daniel%s" % mock.id mock.pub_date = datetime.datetime(2009, 1, 31, 4, 19, 0) self.mi.update_object(mock) self.assertEqual(self.sb.search("*")["hits"], 4) self.mi.remove_object(mock, commit=False) self.assertEqual( [(res.content_type(), res.pk) for res in self.sb.search("*")["results"]], [ ("core.mockmodel", "1"), ("core.mockmodel", "2"), ("core.mockmodel", "3"), ("core.mockmodel", "20"), ], ) self.sb.clear()
def test_custom_prepare(self): mock = MockModel() mock.pk = 20 mock.author = 'daniel%s' % mock.id mock.pub_date = datetime.datetime(2009, 1, 31, 4, 19, 0) self.assertEqual(len(self.cmi.prepare(mock)), 11) self.assertEqual(sorted(self.cmi.prepare(mock).keys()), ['author', 'author_exact', 'django_ct', 'django_id', 'extra', 'hello', 'id', 'pub_date', 'pub_date_exact', 'text', 'whee']) self.assertEqual(len(self.cmi.full_prepare(mock)), 11) self.assertEqual(sorted(self.cmi.full_prepare(mock).keys()), ['author', 'author_exact', 'django_ct', 'django_id', 'extra', 'hello', 'id', 'pub_date', 'pub_date_exact', 'text', 'whee'])
def test_custom_index_fieldname(self): mock = MockModel() mock.pk = 20 mock.author = 'daniel%s' % mock.id mock.pub_date = datetime.datetime(2009, 1, 31, 4, 19, 0) cofnmi = GoodOverriddenFieldNameMockSearchIndex() self.assertEqual(len(cofnmi.prepare(mock)), 6) self.assertEqual(sorted(cofnmi.prepare(mock).keys()), ['django_ct', 'django_id', 'hello', 'id', 'more_content', 'name_s']) self.assertEqual(cofnmi.prepared_data['name_s'], u'daniel20') self.assertEqual(cofnmi.get_content_field(), 'more_content')
def test_prepare(self): mock = MockModel() mock.pk = 20 mock.author = "daniel%s" % mock.id mock.pub_date = datetime.datetime(2009, 1, 31, 4, 19, 0) self.assertEqual(len(self.mi.prepare(mock)), 7) self.assertEqual( sorted(self.mi.prepare(mock).keys()), ["author", "django_ct", "django_id", "extra", "id", "pub_date", "text"], )
def test_update_object(self): self.sb.clear() self.assertEqual(self.sb.search('*')['hits'], 0) mock = MockModel() mock.pk = 20 mock.author = 'daniel%s' % mock.id mock.pub_date = datetime.datetime(2009, 1, 31, 4, 19, 0) self.mi.update_object(mock) self.assertEqual([(res.content_type(), res.pk) for res in self.sb.search('*')['results']], [(u'core.mockmodel', u'20')]) self.sb.clear()
def test_proper_field_resolution(self): mrofsc = MROFieldsSearchChild() mock = MockModel() mock.pk = 20 mock.author = "daniel%s" % mock.id mock.pub_date = datetime.datetime(2009, 1, 31, 4, 19, 0) mock.test_a = "This is A" mock.test_b = "This is B" self.assertEqual(len(mrofsc.fields), 1) prepped_data = mrofsc.prepare(mock) self.assertEqual(len(prepped_data), 4) self.assertEqual(prepped_data["text"], "This is A")
def test_more_like_this(self): mock = MockModel() mock.id = 1 msq = MockSearchQuery() msq.backend = MockSearchBackend("mlt") ui = connections["default"].get_unified_index() bmmsi = BasicMockModelSearchIndex() ui.build(indexes=[bmmsi]) bmmsi.update() msq.more_like_this(mock) self.assertEqual(msq.get_count(), 23) self.assertEqual(int(msq.get_results()[0].pk), MOCK_SEARCH_RESULTS[0].pk)
def test_nullable(self): mock = MockModel() mock.pk = 20 mock.author = None mock.pub_date = datetime.datetime(2009, 1, 31, 4, 19, 0) prepared_data = self.cnmi.prepare(mock) self.assertEqual(len(prepared_data), 6) self.assertEqual(sorted(prepared_data.keys()), ['author', 'author_exact', 'django_ct', 'django_id', 'id', 'text']) prepared_data = self.cnmi.full_prepare(mock) self.assertEqual(len(prepared_data), 4) self.assertEqual(sorted(prepared_data.keys()), ['django_ct', 'django_id', 'id', 'text'])