class TestFirefoxAll(TestCase): pd_cache = caches['product-details'] def setUp(self): self.pd_cache.clear() self.firefox_desktop = FirefoxDesktop(json_dir=PROD_DETAILS_DIR) self.firefox_android = FirefoxAndroid(json_dir=PROD_DETAILS_DIR) self.patcher = patch.object(fx_views, 'firefox_desktop', self.firefox_desktop) self.patcher.start() def tearDown(self): self.patcher.stop() def test_all_builds_results(self): """ The unified page should display builds for all products """ resp = self.client.get(reverse('firefox.all')) doc = pq(resp.content) assert len(doc('.c-all-downloads-build')) == 8 desktop_release_builds = len( self.firefox_desktop.get_filtered_full_builds('release')) assert len(doc('.c-locale-list[data-product="desktop_release"] > li') ) == desktop_release_builds assert len( doc('.c-locale-list[data-product="desktop_release"] > li[data-language="en-US"] > ul > li > a' )) == 7 desktop_beta_builds = len( self.firefox_desktop.get_filtered_full_builds('beta')) assert len(doc('.c-locale-list[data-product="desktop_beta"] > li') ) == desktop_beta_builds assert len( doc('.c-locale-list[data-product="desktop_beta"] > li[data-language="en-US"] > ul > li > a' )) == 7 desktop_developer_builds = len( self.firefox_desktop.get_filtered_full_builds('alpha')) assert len(doc('.c-locale-list[data-product="desktop_developer"] > li') ) == desktop_developer_builds assert len( doc('.c-locale-list[data-product="desktop_developer"] > li[data-language="en-US"] > ul > li > a' )) == 7 desktop_nightly_builds = len( self.firefox_desktop.get_filtered_full_builds('nightly')) assert len(doc('.c-locale-list[data-product="desktop_nightly"] > li') ) == desktop_nightly_builds assert len( doc('.c-locale-list[data-product="desktop_nightly"] > li[data-language="en-US"] > ul > li > a' )) == 7 desktop_esr_builds = len( self.firefox_desktop.get_filtered_full_builds('esr')) assert len(doc('.c-locale-list[data-product="desktop_esr"] > li') ) == desktop_esr_builds assert len( doc('.c-locale-list[data-product="desktop_esr"] > li[data-language="en-US"] > ul > li > a' )) == 7 android_release_builds = len( self.firefox_android.get_filtered_full_builds('release')) assert len(doc('.c-locale-list[data-product="android_release"] > li') ) == android_release_builds assert len( doc('.c-locale-list[data-product="android_release"] > li[data-language="multi"] > ul > li > a' )) == 2 android_beta_builds = len( self.firefox_android.get_filtered_full_builds('beta')) assert len(doc('.c-locale-list[data-product="android_beta"] > li') ) == android_beta_builds assert len( doc('.c-locale-list[data-product="android_beta"] > li[data-language="multi"] > ul > li > a' )) == 2 android_nightly_builds = len( self.firefox_android.get_filtered_full_builds('nightly')) assert len(doc('.c-locale-list[data-product="android_nightly"] > li') ) == android_nightly_builds assert len( doc('.c-locale-list[data-product="android_nightly"] > li[data-language="multi"] > ul > li > a' )) == 2 def test_no_locale_details(self): """ When a localized build has been added to the Firefox details while the locale details are not updated yet, the filtered build list should not include the localized build. """ builds = self.firefox_desktop.get_filtered_full_builds('release') assert 'uz' in self.firefox_desktop.firefox_primary_builds assert 'uz' not in self.firefox_desktop.languages assert len([build for build in builds if build['locale'] == 'uz']) == 0
class TestFirefoxAll(TestCase): pd_cache = caches['product-details'] def setUp(self): self.pd_cache.clear() self.firefox_desktop = FirefoxDesktop(json_dir=PROD_DETAILS_DIR) self.firefox_android = FirefoxAndroid(json_dir=PROD_DETAILS_DIR) self.patcher = patch.object(fx_views, 'firefox_desktop', self.firefox_desktop) self.patcher.start() def tearDown(self): self.patcher.stop() def _get_url(self, platform='desktop', channel='release'): with self.activate('en-US'): kwargs = {} if platform != 'desktop': kwargs['platform'] = platform if channel != 'release': kwargs['channel'] = channel return reverse('firefox.all', kwargs=kwargs) @patch.object(fx_views, 'lang_file_is_active', lambda *x: True) def test_all_builds_results(self): """ The unified page should display builds for all products """ resp = self.client.get(self._get_url()) doc = pq(resp.content) assert len(doc('.c-all-downloads-build')) == 8 desktop_release_builds = len( self.firefox_desktop.get_filtered_full_builds('release')) assert len(doc('.c-locale-list[data-product="desktop_release"] > li') ) == desktop_release_builds assert len( doc('.c-locale-list[data-product="desktop_release"] > li[data-language="en-US"] > ul > li > a' )) == 7 desktop_beta_builds = len( self.firefox_desktop.get_filtered_full_builds('beta')) assert len(doc('.c-locale-list[data-product="desktop_beta"] > li') ) == desktop_beta_builds assert len( doc('.c-locale-list[data-product="desktop_beta"] > li[data-language="en-US"] > ul > li > a' )) == 7 desktop_developer_builds = len( self.firefox_desktop.get_filtered_full_builds('alpha')) assert len(doc('.c-locale-list[data-product="desktop_developer"] > li') ) == desktop_developer_builds assert len( doc('.c-locale-list[data-product="desktop_developer"] > li[data-language="en-US"] > ul > li > a' )) == 7 desktop_nightly_builds = len( self.firefox_desktop.get_filtered_full_builds('nightly')) assert len(doc('.c-locale-list[data-product="desktop_nightly"] > li') ) == desktop_nightly_builds assert len( doc('.c-locale-list[data-product="desktop_nightly"] > li[data-language="en-US"] > ul > li > a' )) == 7 desktop_esr_builds = len( self.firefox_desktop.get_filtered_full_builds('esr')) assert len(doc('.c-locale-list[data-product="desktop_esr"] > li') ) == desktop_esr_builds assert len( doc('.c-locale-list[data-product="desktop_esr"] > li[data-language="en-US"] > ul > li > a' )) == 5 android_release_builds = len( self.firefox_android.get_filtered_full_builds('release')) assert len(doc('.c-locale-list[data-product="android_release"] > li') ) == android_release_builds assert len( doc('.c-locale-list[data-product="android_release"] > li[data-language="multi"] > ul > li > a' )) == 2 android_beta_builds = len( self.firefox_android.get_filtered_full_builds('beta')) assert len(doc('.c-locale-list[data-product="android_beta"] > li') ) == android_beta_builds assert len( doc('.c-locale-list[data-product="android_beta"] > li[data-language="multi"] > ul > li > a' )) == 2 android_nightly_builds = len( self.firefox_android.get_filtered_full_builds('nightly')) assert len(doc('.c-locale-list[data-product="android_nightly"] > li') ) == android_nightly_builds assert len( doc('.c-locale-list[data-product="android_nightly"] > li[data-language="multi"] > ul > li > a' )) == 2 @patch.object(fx_views, 'lang_file_is_active', lambda *x: False) def test_no_search_results(self): """ Tables should be gone and not-found message should be shown when there are no search results. """ resp = self.client.get(self._get_url() + '?q=DOES_NOT_EXIST') doc = pq(resp.content) assert not doc('table.build-table') assert not doc('.not-found.hide') @patch.object(fx_views, 'lang_file_is_active', lambda *x: False) def test_no_search_query(self): """ When not searching all builds should show. """ resp = self.client.get(self._get_url()) doc = pq(resp.content) assert len(doc('.build-table')) == 1 assert len(doc('.not-found.hide')) == 1 num_builds = len( self.firefox_desktop.get_filtered_full_builds('release')) num_builds += len( self.firefox_desktop.get_filtered_test_builds('release')) assert len(doc('tr[data-search]')) == num_builds assert len(doc('tr#en-US a')) == 7 def test_no_locale_details(self): """ When a localized build has been added to the Firefox details while the locale details are not updated yet, the filtered build list should not include the localized build. """ builds = self.firefox_desktop.get_filtered_full_builds('release') assert 'uz' in self.firefox_desktop.firefox_primary_builds assert 'uz' not in self.firefox_desktop.languages assert len([build for build in builds if build['locale'] == 'uz']) == 0 def test_android(self): """ The Firefox for Android download table should only show the multi-locale builds for ARM and x86. """ resp = self.client.get(self._get_url('android')) doc = pq(resp.content) assert len(doc('tbody tr')) == 1 assert len(doc('tbody tr#multi a')) == 2 assert len(doc('tbody tr#multi .android')) == 1 assert len(doc('tbody tr#multi .android-x86')) == 1 def test_404(self): """ Firefox for iOS doesn't have the /all/ page. Also, Firefox for Android doesn't have the ESR channel. """ resp = self.client.get(self._get_url('ios')) self.assertEqual(resp.status_code, 404) resp = self.client.get(self._get_url('android', 'organizations')) self.assertEqual(resp.status_code, 404) def test_301(self): """Android Aurora download page should be redirected to Nightly""" resp = self.client.get(self._get_url('android', 'aurora')) assert resp.status_code == 301 assert resp['Location'].endswith('/firefox/android/nightly/all/')