def test_changing_products(self): """Changing products works as expected.""" d, r = doc_rev() prod_desktop = product(title=u'desktop', save=True) prod_mobile = product(title=u'mobile', save=True) data = new_document_data() data.update({ 'products': [prod_desktop.id, prod_mobile.id], 'title': d.title, 'slug': d.slug, 'form': 'doc' }) self.client.post(reverse('wiki.edit_document', args=[d.slug]), data) eq_( sorted( Document.uncached.get(slug=d.slug).products.values_list( 'id', flat=True)), sorted([prod.id for prod in [prod_desktop, prod_mobile]])) data.update({'products': [prod_desktop.id], 'form': 'doc'}) self.client.post(reverse('wiki.edit_document', args=[data['slug']]), data) eq_( sorted( Document.uncached.get(slug=d.slug).products.values_list( 'id', flat=True)), sorted([prod.id for prod in [prod_desktop]]))
def test_product_facets(self): """Verify the facet counts on the results page.""" # Create products, questions and documents. p1 = product(title='Firefox', slug='firefox', save=True) p2 = product(title='Firefox for mobile', slug='mobile', save=True) ques = question(title=u'audio', save=True) ques.products.add(p1) ans = answer(question=ques, content=u'volume', save=True) answervote(answer=ans, helpful=True, save=True) doc = document(title=u'audio', locale=u'en-US', category=10, save=True) doc.products.add(p1) doc.products.add(p2) revision(document=doc, is_approved=True, save=True) self.refresh() # There should be 2 total results, 2 "firefox" results and # 1 "mobile" result. response = self.client.get(reverse('search'), {'q': 'audio'}) eq_(200, response.status_code) doc = pq(response.content) eq_('Found 2 results for audio in English', doc('h2').text()) facet_text = doc('#product-filter').text() assert 'Firefox (2)' in facet_text assert 'Firefox for mobile (1)' in facet_text
def test_question_products(self): """Search questions for products.""" p1 = product(slug='b2g', save=True) p2 = product(slug='mobile', save=True) p3 = product(slug='desktop', save=True) q = question(save=True) q.products.add(p2) q = question(save=True) q.products.add(p2) q.products.add(p3) self.refresh() product_vals = ( (p1.slug, 0), (p2.slug, 2), (p3.slug, 1), ([p2.slug, p3.slug], 1), ) qs = {'a': 1, 'w': 2, 'format': 'json'} for products, number in product_vals: qs.update({'product': products}) response = self.client.get(reverse('search'), qs) eq_(number, json.loads(response.content)['total'])
def test_product_facets(self): """Verify the facet counts on the results page.""" # Create products, questions and documents. p1 = product(title="Firefox", slug="firefox", save=True) p2 = product(title="Firefox for mobile", slug="mobile", save=True) ques = question(title=u"audio", save=True) ques.products.add(p1) ans = answer(question=ques, content=u"volume", save=True) answervote(answer=ans, helpful=True, save=True) doc = document(title=u"audio", locale=u"en-US", category=10, save=True) doc.products.add(p1) doc.products.add(p2) revision(document=doc, is_approved=True, save=True) self.refresh() # There should be 2 total results, 2 "firefox" results and # 1 "mobile" result. response = self.client.get(reverse("search"), {"q": "audio"}) eq_(200, response.status_code) doc = pq(response.content) eq_("Found 2 results for audio in English", doc("h2").text()) facet_text = doc("#product-filter").text() assert "Firefox (2)" in facet_text assert "Firefox for mobile (1)" in facet_text
def setUp(self): super(TestFacetHelpers, self).setUp() # Create topics self.general = topic(slug='general', save=True) self.bookmarks = topic(slug='bookmarks', save=True) self.sync = topic(slug='sync', save=True) # Create products self.desktop = product(slug='firefox', save=True) self.mobile = product(slug='mobile', save=True) # Set up documents. doc1 = revision(is_approved=True, save=True).document doc1.topics.add(self.general) doc1.topics.add(self.bookmarks) doc1.products.add(self.desktop) doc2 = revision(is_approved=True, save=True).document doc2.topics.add(self.bookmarks) doc2.topics.add(self.sync) doc2.products.add(self.desktop) doc2.products.add(self.mobile) self.refresh()
def test_get_products(self): """Test the get_products() method.""" en_us = document(save=True) en_us.products.add(product(save=True)) en_us.products.add(product(save=True)) eq_(2, len(en_us.get_products())) # Localized document inherits parent's topics. l10n = document(parent=en_us, save=True) eq_(2, len(en_us.get_products()))
def test_products(self, flag_is_active): """Verify that /products page renders products.""" flag_is_active.return_value = True # Create some products. for i in range(3): product(save=True) # GET the products page and verify the content. r = self.client.get(reverse('products'), follow=True) eq_(200, r.status_code) doc = pq(r.content) eq_(3, len(doc('#products-and-services li')))
def test_default_only_shows_wiki_and_questions(self): """Tests that the default search doesn't show forums This verifies that we're only showing documents of the type that should be shown and that the filters on model are working correctly. Bug #767394 """ p = product(slug=u'desktop', save=True) ques = question(title=u'audio', save=True) ques.products.add(p) ans = answer(question=ques, content=u'volume', save=True) answervote(answer=ans, helpful=True, save=True) doc = document(title=u'audio', locale=u'en-US', category=10, save=True) doc.products.add(p) revision(document=doc, is_approved=True, save=True) thread1 = thread(title=u'audio', save=True) post(thread=thread1, save=True) self.refresh() response = self.client.get(reverse('search'), { 'q': 'audio', 'format': 'json' }) eq_(200, response.status_code) content = json.loads(response.content) eq_(content['total'], 2)
def test_default_search_for_wiki(self): """This tests whether doing a default search returns wiki document results. Bug #709202. """ doc = document(title=u'audio', locale=u'en-US', category=10, save=True) doc.products.add(product(title=u'firefox', slug=u'desktop', save=True)) revision(document=doc, is_approved=True, save=True) self.refresh() # This is the search that you get when you start on the sumo # homepage and do a search from the box with two differences: # first, we do it in json since it's easier to deal with # testing-wise and second, we search for 'audio' since we have # data for that. response = self.client.get(reverse('search'), { 'q': 'audio', 'format': 'json' }) eq_(200, response.status_code) content = json.loads(response.content) eq_(content['total'], 1)
def test_default_search_for_wiki(self): """This tests whether doing a default search returns wiki document results. Bug #709202. """ doc = document(title=u'audio', locale=u'en-US', category=10, save=True) doc.products.add(product(title=u'firefox', slug=u'desktop', save=True)) revision(document=doc, is_approved=True, save=True) self.refresh() # This is the search that you get when you start on the sumo # homepage and do a search from the box with two differences: # first, we do it in json since it's easier to deal with # testing-wise and second, we search for 'audio' since we have # data for that. response = self.client.get(reverse('search'), { 'q': 'audio', 'format': 'json'}) eq_(200, response.status_code) content = json.loads(response.content) eq_(content['total'], 1)
def test_home(self, flag_is_active): """Verify that home page renders topics and products.""" flag_is_active.return_value = True # Create some topics and products for i in range(6): topic(save=True) for i in range(4): product(save=True) # GET the home page and verify the content r = self.client.get(reverse('home'), follow=True) eq_(200, r.status_code) doc = pq(r.content) eq_(6, len(doc('#help-topics li'))) eq_(4, len(doc('#products-and-services li')))
def test_search_suggestions_archived_articles(self): """Verifies that archived articles aren't shown.""" topic(title='Fix problems', slug='fix-problems', save=True) p = product(slug=u'firefox', save=True) d1 = document(title=u'document donut', category=10, save=True) d1.products.add(p) revision(document=d1, is_approved=True, save=True) d2 = document(title=u'document cupcake', category=10, is_archived=True, save=True) d2.products.add(p) revision(document=d1, is_approved=True, save=True) self.refresh() url = urlparams(reverse('questions.aaq_step4', args=['desktop', 'fix-problems']), search='document') response = self.client.get(url, follow=True) eq_(200, response.status_code) doc = pq(response.content) eq_(len(doc('.result.document')), 1) assert 'donut' in doc('.result.document h3 a').text() assert 'cupcake' not in doc('.result.document h3 a').text()
def test_locale_filter(self): """Only questions for the current locale should be shown on the questions front page for AAQ locales.""" eq_(Question.objects.count(), 0) topic(title="Fix problems", slug="fix-problems", save=True) p = product(slug=u"firefox", save=True) q1 = question(title="question cupcakes?", save=True, locale="en-US") q1.products.add(p) q2 = question(title="question donuts?", save=True, locale="en-US") q2.products.add(p) q3 = question(title="question pies?", save=True, locale="pt-BR") q3.products.add(p) q4 = question(title="question pastries?", save=True, locale="de") q4.products.add(p) def sub_test(locale, *titles): url = urlparams(reverse("questions.questions", locale=locale)) response = self.client.get(url, follow=True) doc = pq(response.content) eq_msg(len(doc("section[id^=question]")), len(titles), "Wrong number of results for {0}".format(locale)) for substr in titles: assert substr in doc(".questions section .content h2 a").text() # en-US and pt-BR are both in AAQ_LOCALES, so should be filtered. sub_test("en-US", "cupcakes?", "donuts?") sub_test("pt-BR", "pies?") # de is not in AAQ_LOCALES, so should show en-US, but not pt-BR sub_test("de", "cupcakes?", "donuts?", "pastries?")
def test_search_suggestion_questions_locale(self): """Verifies the right languages show up in search suggestions.""" topic(title="Fix problems", slug="fix-problems", save=True) p = product(slug=u"firefox", save=True) q1 = question(title="question cupcakes?", save=True, locale="en-US") q1.products.add(p) q2 = question(title="question donuts?", save=True, locale="en-US") q2.products.add(p) q3 = question(title="question pies?", save=True, locale="pt-BR") q3.products.add(p) q4 = question(title="question pastries?", save=True, locale="de") q4.products.add(p) self.refresh() def sub_test(locale, *titles): url = urlparams( reverse("questions.aaq_step4", args=["desktop", "fix-problems"], locale=locale), search="question" ) response = self.client.get(url, follow=True) doc = pq(response.content) eq_msg(len(doc(".result.question")), len(titles), "Wrong number of results for {0}".format(locale)) for substr in titles: assert substr in doc(".result.question h3 a").text() sub_test("en-US", "cupcakes?", "donuts?") sub_test("pt-BR", "cupcakes?", "donuts?", "pies?") sub_test("de", "cupcakes?", "donuts?", "pastries?")
def test_subtopics(self): """Verifies subtopics appear on document listing page.""" # Create a topic and product. t = topic(save=True) p = product(save=True) # Create a documents with the topic and product doc = revision(is_approved=True, save=True).document doc.topics.add(t) doc.products.add(p) self.refresh() # GET the page and verify no subtopics yet. url = reverse('products.documents', args=[p.slug, t.slug]) r = self.client.get(url, follow=True) eq_(200, r.status_code) doc = pq(r.content) eq_(0, len(doc('ul.subtopics'))) # Create a subtopic and verify it is listed topic(parent=t, save=True) url = reverse('products.documents', args=[p.slug, t.slug]) r = self.client.get(url, follow=True) eq_(200, r.status_code) doc = pq(r.content) eq_(1, len(doc('ul.subtopics')))
def test_topic_select_product(self, flag_is_active): """Verify that /topics/<slug>?selectproduct=1 renders products.""" flag_is_active.return_value = True # Create a topic t = topic(save=True) # Create 3 products prods = [] for i in range(3): prods.append(product(save=True)) # Create a document and assign the topic and two products. doc = revision(is_approved=True, save=True).document doc.topics.add(t) doc.products.add(prods[0]) doc.products.add(prods[1]) self.refresh() # GET the topic page and verify the content url = reverse('topics.topic', args=[t.slug]) url = urlparams(url, selectproduct=1) r = self.client.get(url, follow=True) eq_(200, r.status_code) doc = pq(r.content) eq_(2, len(doc('#products-and-services li')))
def test_front_page_only_shows_wiki_and_questions(self): """Tests that the front page doesn't show forums This verifies that we're only showing documents of the type that should be shown and that the filters on model are working correctly. Bug #767394 """ ques = question(title=u"audio", save=True) ques.tags.add(u"desktop") ans = answer(question=ques, content=u"volume", save=True) answervote(answer=ans, helpful=True, save=True) doc = document(title=u"audio", locale=u"en-US", category=10, save=True) doc.products.add(product(slug=u"desktop", save=True)) revision(document=doc, is_approved=True, save=True) thread1 = thread(title=u"audio", save=True) post(thread=thread1, save=True) self.refresh() response = self.client.get( reverse("search"), {"q_tags": "desktop", "product": "desktop", "q": "audio", "format": "json"} ) eq_(200, response.status_code) content = json.loads(response.content) eq_(content["total"], 2)
def test_fallback_for_zero_results(self): """If there are no results, fallback to a list of top articles.""" firefox = product(title=u'firefox', slug=u'desktop', save=True) doc = document(title=u'audio1', locale=u'en-US', category=10, save=True) doc.products.add(firefox) revision(document=doc, is_approved=True, save=True) doc = document(title=u'audio2', locale=u'en-US', category=10, save=True) doc.products.add(firefox) revision(document=doc, is_approved=True, save=True) self.refresh() # Verify there are no real results but 2 fallback results are rendered response = self.client.get(reverse('search'), {'q': 'piranha'}) eq_(200, response.status_code) assert "We couldn't find any results for" in response.content doc = pq(response.content) eq_(2, len(doc('#search-results .result')))
def test_search_suggestion_question_age(self): """Verifies the view doesn't return old questions.""" topic(title='Fix problems', slug='fix-problems', save=True) p = product(slug=u'firefox', save=True) q1 = question(title='Fresh Cupcakes', save=True) q1.products.add(p) max_age = settings.SEARCH_DEFAULT_MAX_QUESTION_AGE too_old = datetime.now() - timedelta(seconds=max_age * 2) q2 = question(title='Stale Cupcakes', created=too_old, updated=too_old, save=True) q2.products.add(p) self.refresh() url = urlparams(reverse('questions.aaq_step4', args=['desktop', 'fix-problems']), search='cupcakes') response = self.client.get(url, follow=True) eq_(200, response.status_code) self.assertContains(response, q1.title) self.assertNotContains(response, q2.title)
def test_locale_filter(self): """Only questions for the current locale should be shown on the questions front page for AAQ locales.""" eq_(Question.objects.count(), 0) topic(title='Fix problems', slug='fix-problems', save=True) p = product(slug=u'firefox', save=True) q1 = question(title='question cupcakes?', save=True, locale='en-US') q1.products.add(p) q2 = question(title='question donuts?', save=True, locale='en-US') q2.products.add(p) q3 = question(title='question pies?', save=True, locale='pt-BR') q3.products.add(p) q4 = question(title='question pastries?', save=True, locale='de') q4.products.add(p) def sub_test(locale, *titles): url = urlparams(reverse('questions.questions', locale=locale)) response = self.client.get(url, follow=True) doc = pq(response.content) eq_msg(len(doc('section[id^=question]')), len(titles), 'Wrong number of results for {0}'.format(locale)) for substr in titles: assert substr in doc('.questions section .content h2 a').text() # en-US and pt-BR are both in AAQ_LOCALES, so should be filtered. sub_test('en-US', 'cupcakes?', 'donuts?') sub_test('pt-BR', 'pies?') # de is not in AAQ_LOCALES, so should show en-US, but not pt-BR sub_test('de', 'cupcakes?', 'donuts?', 'pastries?')
def test_by_product(self): """Test the product filtering of the readout.""" p = product(title="Firefox", slug="firefox", save=True) translation = translated_revision(is_approved=True, save=True) revision( document=translation.document.parent, is_approved=True, is_ready_for_localization=False, # should still count significance=MAJOR_SIGNIFICANCE, save=True, ) revision( document=translation.document.parent, is_approved=True, is_ready_for_localization=True, significance=MEDIUM_SIGNIFICANCE, save=True, ) # There shouldn't be any rows yet. eq_(0, len(self.rows(product=p))) # Add the product to the document, and verify it shows up. translation.document.parent.products.add(p) eq_(self.row(product=p)["title"], translation.document.title)
def test_document_listing(self, flag_is_active): """Verify /products/<product slug>/<topic slug> renders articles.""" flag_is_active.return_value = True # Create a topic and product. t1 = topic(save=True) p = product(save=True) # Create 3 documents with the topic and product and one without. for i in range(3): doc = revision(is_approved=True, save=True).document doc.topics.add(t1) doc.products.add(p) doc = revision(is_approved=True, save=True).document self.refresh() # GET the page and verify the content. url = reverse('products.documents', args=[p.slug, t1.slug]) r = self.client.get(url, follow=True) eq_(200, r.status_code) doc = pq(r.content) eq_(3, len(doc('#document-list > ul > li'))) eq_(p.slug, doc('#support-search input[name=product]').attr['value'])
def test_hot_topics(self, flag_is_active): """Verifies the hot topics section.""" flag_is_active.return_value = True # Create a product and the hot topics topic. p = product(save=True) hot = topic(slug=HOT_TOPIC_SLUG, save=True) # Create 7 hot documents. for i in range(7): doc = revision(is_approved=True, save=True).document doc.products.add(p) doc.topics.add(hot) # Create a not hot document. doc = revision(is_approved=True, save=True).document doc.products.add(p) self.refresh() # GET the product landing page and verify the content. url = reverse('products.product', args=[p.slug]) r = self.client.get(url, follow=True) eq_(200, r.status_code) doc = pq(r.content) eq_(7, len(doc('#hot-topics li')))
def test_search_suggestion_questions_locale(self): """Verifies the right languages show up in search suggestions.""" topic(title='Fix problems', slug='fix-problems', save=True) p = product(slug=u'firefox', save=True) q1 = question(title='question cupcakes?', save=True, locale='en-US') q1.products.add(p) q2 = question(title='question donuts?', save=True, locale='en-US') q2.products.add(p) q3 = question(title='question pies?', save=True, locale='pt-BR') q3.products.add(p) q4 = question(title='question pastries?', save=True, locale='de') q4.products.add(p) self.refresh() def sub_test(locale, *titles): url = urlparams(reverse('questions.aaq_step4', args=['desktop', 'fix-problems'], locale=locale), search='question') response = self.client.get(url, follow=True) doc = pq(response.content) eq_msg(len(doc('.result.question')), len(titles), 'Wrong number of results for {0}'.format(locale)) for substr in titles: assert substr in doc('.result.question h3 a').text() sub_test('en-US', 'cupcakes?', 'donuts?') sub_test('pt-BR', 'cupcakes?', 'donuts?', 'pies?') sub_test('de', 'cupcakes?', 'donuts?', 'pastries?')
def test_document_listing(self, flag_is_active): """Verify /products/<product slug>/<topic slug> renders articles.""" flag_is_active.return_value = True # Create a topic and product. t1 = topic(save=True) t2 = topic(save=True) p = product(save=True) # Create 3 documents with the topic and product and one without. for i in range(3): doc = revision(is_approved=True, save=True).document doc.topics.add(t1) doc.products.add(p) if i == 1: # Only one document with t2 doc.topics.add(t2) doc = revision(is_approved=True, save=True).document self.refresh() # GET the page and verify the content. url = reverse('products.documents', args=[p.slug, t1.slug]) r = self.client.get(url, follow=True) eq_(200, r.status_code) doc = pq(r.content) eq_(3, len(doc('#document-list > ul > li'))) # GET the page with refine topic and verify the content. url = reverse('products.documents', args=[p.slug, t1.slug]) url = urlparams(url, refine=t2.slug) r = self.client.get(url, follow=True) eq_(200, r.status_code) doc = pq(r.content) eq_(1, len(doc('#document-list > ul > li')))
def test_front_page_search_for_wiki(self): """This tests whether doing a search from the front page returns wiki document results. Bug #709202. """ doc = document(title=u"audio", locale=u"en-US", category=10, save=True) doc.products.add(product(title=u"firefox", slug=u"desktop", save=True)) revision(document=doc, is_approved=True, save=True) self.refresh() # This is the search that you get when you start on the sumo # homepage and do a search from the box with two differences: # first, we do it in json since it's easier to deal with # testing-wise and second, we search for 'audio' since we have # data for that. response = self.client.get( reverse("search"), {"q_tags": "desktop", "product": "desktop", "q": "audio", "format": "json"} ) eq_(200, response.status_code) content = json.loads(response.content) eq_(content["total"], 1)
def test_home(self): """Verify that home page renders topics and products.""" # Create some topics and products topic(slug=HOT_TOPIC_SLUG, save=True) for i in range(6): topic(save=True) for i in range(4): product(save=True) # GET the home page and verify the content r = self.client.get(reverse('home'), follow=True) eq_(200, r.status_code) doc = pq(r.content) eq_(6, len(doc('#help-topics li'))) eq_(5, len(doc('#products-and-services li')))
def test_product_landing(self, flag_is_active): """Verify that /products/<slug> page renders topics.""" flag_is_active.return_value = True # Create a product. p = product(save=True) # Create some topics. topic(slug=HOT_TOPIC_SLUG, save=True) topics = [] for i in range(11): topics.append(topic(save=True)) # Create a document and assign the product and 10 topics. doc = revision(is_approved=True, save=True).document doc.products.add(p) for i in range(10): doc.topics.add(topics[i]) self.refresh() # GET the product landing page and verify the content. url = reverse('products.product', args=[p.slug]) r = self.client.get(url, follow=True) eq_(200, r.status_code) doc = pq(r.content) eq_(10, len(doc('#help-topics li')))
def test_search_suggestion_question_age(self): """Verifies the view doesn't return old questions.""" topic(title='Fix problems', slug='fix-problems', save=True) p = product(slug=u'firefox', save=True) q1 = question(title='Fresh Cupcakes', save=True) q1.products.add(p) max_age = settings.SEARCH_DEFAULT_MAX_QUESTION_AGE too_old = datetime.now() - timedelta(seconds=max_age * 2) q2 = question(title='Stale Cupcakes', created=too_old, updated=too_old, save=True) q2.products.add(p) self.refresh() url = urlparams( reverse('questions.aaq_step4', args=['desktop', 'fix-problems']), search='cupcakes') response = self.client.get(url, follow=True) eq_(200, response.status_code) self.assertContains(response, q1.title) self.assertNotContains(response, q2.title)
def test_search_suggestions_archived_articles(self): """Verifies that archived articles aren't shown.""" topic(title='Fix problems', slug='fix-problems', save=True) p = product(slug=u'firefox', save=True) d1 = document(title=u'document donut', category=10, save=True) d1.products.add(p) revision(document=d1, is_approved=True, save=True) d2 = document(title=u'document cupcake', category=10, is_archived=True, save=True) d2.products.add(p) revision(document=d1, is_approved=True, save=True) self.refresh() url = urlparams( reverse('questions.aaq_step4', args=['desktop', 'fix-problems']), search='document') response = self.client.get(url, follow=True) eq_(200, response.status_code) doc = pq(response.content) eq_(len(doc('.result.document')), 1) assert 'donut' in doc('.result.document h3 a').text() assert 'cupcake' not in doc('.result.document h3 a').text()
def test_default_only_shows_wiki_and_questions(self): """Tests that the default search doesn't show forums This verifies that we're only showing documents of the type that should be shown and that the filters on model are working correctly. Bug #767394 """ p = product(slug=u'desktop', save=True) ques = question(title=u'audio', save=True) ques.products.add(p) ans = answer(question=ques, content=u'volume', save=True) answervote(answer=ans, helpful=True, save=True) doc = document(title=u'audio', locale=u'en-US', category=10, save=True) doc.products.add(p) revision(document=doc, is_approved=True, save=True) thread1 = thread(title=u'audio', save=True) post(thread=thread1, save=True) self.refresh() response = self.client.get(reverse('search'), { 'q': 'audio', 'format': 'json'}) eq_(200, response.status_code) content = json.loads(response.content) eq_(content['total'], 2)
def test_search_suggestions(self): """Verifies the view doesn't kick up an HTTP 500""" topic(title='Fix problems', slug='fix-problems', save=True) q = question(title=u'CupcakesQuestion cupcakes', save=True) q.tags.add(u'desktop') q.save() d = document(title=u'CupcakesKB cupcakes', category=10, save=True) d.products.add(product(slug=u'firefox', save=True)) d.save() rev = revision(document=d, is_approved=True, save=True) self.refresh() url = urlparams( reverse('questions.aaq_step4', args=['desktop', 'fix-problems']), search='cupcakes') response = self.client.get(url, follow=True) eq_(200, response.status_code) assert 'CupcakesQuestion' in response.content assert 'CupcakesKB' in response.content
def facets_setUp(self): # Create topics self.general = topic(slug='general', save=True) self.bookmarks = topic(slug='bookmarks', save=True) self.sync = topic(slug='sync', save=True) # Create products self.desktop = product(slug='firefox', save=True) self.mobile = product(slug='mobile', save=True) # Set up documents. doc1 = revision(is_approved=True, save=True).document doc1.topics.add(self.general) doc1.topics.add(self.bookmarks) doc1.products.add(self.desktop) doc2 = revision(is_approved=True, save=True).document doc2.topics.add(self.bookmarks) doc2.topics.add(self.sync) doc2.products.add(self.desktop) doc2.products.add(self.mobile) # An archived article shouldn't show up doc3 = revision(is_approved=True, save=True).document doc3.is_archived = True doc3.save() doc3.topics.add(self.general) doc3.topics.add(self.bookmarks) doc3.products.add(self.desktop) # A template article shouldn't show up either doc4 = revision(is_approved=True, save=True).document doc4.category = 60 doc4.title = 'Template: Test' doc4.save() doc4.topics.add(self.general) doc4.topics.add(self.bookmarks) doc4.products.add(self.desktop) # An article without current revision should be "invisible" # to everything. doc5 = revision(is_approved=False, save=True).document doc5.topics.add(self.general) doc5.topics.add(self.bookmarks) doc5.topics.add(self.sync) doc5.products.add(self.desktop) doc5.products.add(self.mobile)
def test_front_page_search_for_questions(self): """This tests whether doing a search from the front page returns question results. Bug #709202. """ # Create a question with an answer with an answervote that # marks the answer as helpful. The question should have the # "desktop" tag. product(title=u'firefox', slug=u'desktop', save=True) ques = question(title=u'audio', save=True) ques.tags.add(u'desktop') ans = answer(question=ques, content=u'volume', save=True) answervote(answer=ans, helpful=True, save=True) self.refresh() # This is the search that you get when you start on the sumo # homepage and do a search from the box with two differences: # first, we do it in json since it's easier to deal with # testing-wise and second, we search for 'audio' since we have # data for that. response = self.client.get(reverse('search'), { 'q_tags': 'desktop', 'product': 'desktop', 'q': 'audio', 'format': 'json' }) eq_(200, response.status_code) content = json.loads(response.content) eq_(content['total'], 1) # This is another search that picks up results based on the # answer_content. answer_content is in a string array, so # this makes sure that works. response = self.client.get(reverse('search'), { 'q_tags': 'desktop', 'product': 'desktop', 'q': 'volume', 'format': 'json' }) eq_(200, response.status_code) content = json.loads(response.content) eq_(content['total'], 1)
def test_status(self, _out): doc = document(title=u'cupcakes rock', locale=u'en-US', category=10, save=True) doc.products.add(product(title=u'firefox', slug=u'desktop', save=True)) revision(document=doc, is_approved=True, save=True) self.refresh() call_command('esstatus')
def test_by_product(self): """Test the product filtering of the readout.""" p = product(title='Firefox', slug='firefox', save=True) unreviewed = translated_revision(save=True) # There shouldn't be any rows yet. eq_(0, len(self.rows(product=p))) # Add the product to the parent document, and verify it shows up. unreviewed.document.parent.products.add(p) eq_(self.row(product=p)['title'], unreviewed.document.title)
def test_by_product(self): """Test the product filtering of the overview.""" p = product(title='Firefox', slug='firefox', save=True) t = translated_revision(is_approved=True, save=True) eq_(0, overview_rows('de', product=p)['all']['numerator']) eq_(0, overview_rows('de', product=p)['all']['denominator']) t.document.parent.products.add(p) eq_(1, overview_rows('de', product=p)['all']['numerator']) eq_(1, overview_rows('de', product=p)['all']['denominator'])
def facets_setUp(self): # Create topics self.general = topic(slug='general', save=True) self.bookmarks = topic(slug='bookmarks', save=True) self.sync = topic(slug='sync', save=True) # Create products self.desktop = product(slug='firefox', save=True) self.mobile = product(slug='mobile', save=True) # Set up documents. doc1 = revision(is_approved=True, save=True).document doc1.topics.add(self.general) doc1.topics.add(self.bookmarks) doc1.products.add(self.desktop) doc2 = revision(is_approved=True, save=True).document doc2.topics.add(self.bookmarks) doc2.topics.add(self.sync) doc2.products.add(self.desktop) doc2.products.add(self.mobile)
def new_document_data(topic_ids=None, product_ids=None): return { 'title': 'A Test Article', 'slug': 'a-test-article', 'locale': 'en-US', 'topics': topic_ids or [topic(save=True).id], 'products': product_ids or [product(save=True).id], 'category': CATEGORIES[0][0], 'keywords': 'key1, key2', 'summary': 'lipsum', 'content': 'lorem ipsum dolor sit amet', }
def test_by_product(self): """Test the product filtering of the readout.""" locale = settings.WIKI_DEFAULT_LANGUAGE p = product(title='Firefox', slug='firefox', save=True) d = document(save=True) r = revision(document=d, is_approved=True, save=True) # There shouldn't be any rows yet. eq_(0, len(self.rows(locale=locale, product=p))) # Add the product to the document, and verify it shows up. d.products.add(p) eq_(self.row(locale=locale, product=p)['title'], d.title)
def test_search(self, _out): """Test that es_search command doesn't fail""" call_command('essearch', 'cupcakes') doc = document(title=u'cupcakes rock', locale=u'en-US', category=10, save=True) doc.products.add(product(title=u'firefox', slug=u'desktop', save=True)) revision(document=doc, is_approved=True, save=True) self.refresh() call_command('essearch', 'cupcakes')
def test_wiki_products(self): """Search wiki for products.""" prod_vals = ( (product(slug='b2g', save=True), 0), (product(slug='mobile', save=True), 1), (product(slug='desktop', save=True), 2), ) for prod, total in prod_vals: for i in range(total): doc = document(locale=u'en-US', category=10, save=True) doc.products.add(prod) revision(document=doc, is_approved=True, save=True) self.refresh() qs = {'a': 1, 'w': 1, 'format': 'json'} for prod, total in prod_vals: qs.update({'product': prod.slug}) response = self.client.get(reverse('search'), qs) eq_(total, json.loads(response.content)['total'])
def test_by_product(self): """Test the product filtering of the readout.""" p = product(title='Firefox', slug='firefox', save=True) d = revision(save=True).document d.needs_change = True d.needs_change_comment = "Please update for Firefox.next" d.save() # There shouldn't be any rows yet. eq_(0, len(self.rows(product=p))) # Add the product to the document, and verify it shows up. d.products.add(p) eq_(self.row(product=p)['title'], d.title)
def test_wiki_products_inherit(self): """Translations inherit products from their parents.""" doc = document(locale=u'en-US', category=10, save=True) p = product(title=u'Firefox', slug=u'desktop', save=True) doc.products.add(p) revision(document=doc, is_approved=True, save=True) translated = document(locale=u'fr', parent=doc, category=10, save=True) revision(document=translated, is_approved=True, save=True) self.refresh() qs = {'a': 1, 'w': 1, 'format': 'json', 'product': p.slug} response = self.client.get(reverse('search', locale='fr'), qs) eq_(1, json.loads(response.content)['total'])
def test_by_product(self): """Test the product filtering of the readout.""" p = product(title='Firefox', slug='firefox', save=True) d = document(title='Foo', save=True) untranslated = revision(is_approved=True, is_ready_for_localization=True, document=d, save=True) # There shouldn't be any rows yet. eq_(0, len(self.rows(product=p))) # Add the product to the document, and verify it shows up. d.products.add(p) eq_(self.row(product=p)['title'], d.title)