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()
from django.conf import settings from django.core.cache import get_cache from django.test.utils import override_settings from mock import patch, Mock from nose.tools import eq_, ok_ from bedrock.firefox.firefox_details import FirefoxDesktop, FirefoxAndroid, FirefoxIOS from bedrock.mozorg.tests import TestCase TEST_DATA_DIR = os.path.join(os.path.dirname(__file__), 'test_data') PROD_DETAILS_DIR = os.path.join(TEST_DATA_DIR, 'product_details_json') firefox_desktop = FirefoxDesktop(json_dir=PROD_DETAILS_DIR) firefox_android = FirefoxAndroid(json_dir=PROD_DETAILS_DIR) firefox_ios = FirefoxIOS(json_dir=PROD_DETAILS_DIR) GOOD_PLATS = {'Windows': {}, 'OS X': {}, 'Linux': {}} GOOD_BUILDS = { 'en-US': { '25.0': GOOD_PLATS, # current release '26.0b2': GOOD_PLATS, '27.0a1': GOOD_PLATS, }, 'de': { '25.0': GOOD_PLATS, }, 'fr': { '24.0': GOOD_PLATS, # prev release }
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/')
def setUp(self): self.firefox_android = FirefoxAndroid(json_dir=PROD_DETAILS_DIR)
class TestFirefoxAndroid(TestCase): google_play_url_base = "https://play.google.com/store/apps/details?id=org.mozilla." def setUp(self): self.firefox_android = FirefoxAndroid(json_dir=PROD_DETAILS_DIR) def test_latest_release_version(self): """latest_version should return the latest release version.""" for version in ["22.0.1", "100.0.1", "122.0.1"]: with self.subTest(version=version): with patch.object( self.firefox_android._storage, "data", Mock(return_value=dict(version=version)), ): assert self.firefox_android.latest_version("release") == version def test_latest_beta_version(self): """latest_version should return the latest beta version.""" for version in ["23.0.1", "101.0.1", "123.0.1"]: with self.subTest(version=version): with patch.object( self.firefox_android._storage, "data", Mock(return_value=dict(beta_version=version)), ): assert self.firefox_android.latest_version("beta") == version def test_get_download_url_nightly(self): """ get_download_url should return the same Google Play link of the 'org.mozilla.fennec_aurora' product regardless of the architecture type, if the force_direct option is unspecified. """ assert self.firefox_android.get_download_url("nightly", "arm").startswith(self.google_play_url_base + "fenix") assert self.firefox_android.get_download_url("nightly", "x86").startswith(self.google_play_url_base + "fenix") def test_get_download_url_nightly_direct(self): """ get_download_url should return a bouncer link depending on the architecture type, if the force_direct option is True. """ url = self.firefox_android.get_download_url("nightly", "arm", "multi", True) self.assertListEqual( parse_qsl(urlparse(url).query), [ ("product", "fennec-nightly-latest"), ("os", "android"), ("lang", "multi"), ], ) url = self.firefox_android.get_download_url("nightly", "x86", "multi", True) self.assertListEqual( parse_qsl(urlparse(url).query), [ ("product", "fennec-nightly-latest"), ("os", "android-x86"), ("lang", "multi"), ], ) def test_get_download_url_beta(self): """ get_download_url should return the same Google Play link of the 'org.mozilla.firefox_beta' product regardless of the architecture type, if the force_direct option is unspecified. """ assert self.firefox_android.get_download_url("beta", "arm").startswith(self.google_play_url_base + "firefox_beta") assert self.firefox_android.get_download_url("beta", "x86").startswith(self.google_play_url_base + "firefox_beta") def test_get_download_url_beta_direct(self): """ get_download_url should return a bouncer link depending on the architecture type, if the force_direct option is True. """ url = self.firefox_android.get_download_url("beta", "arm", "multi", True) self.assertListEqual( parse_qsl(urlparse(url).query), [("product", "fennec-beta-latest"), ("os", "android"), ("lang", "multi")], ) url = self.firefox_android.get_download_url("beta", "x86", "multi", True) self.assertListEqual( parse_qsl(urlparse(url).query), [ ("product", "fennec-beta-latest"), ("os", "android-x86"), ("lang", "multi"), ], ) def test_get_download_url_release(self): """ get_download_url should return the same Google Play link of the 'org.mozilla.firefox' product regardless of the architecture type, if the force_direct option is unspecified. """ assert self.firefox_android.get_download_url("release", "arm").startswith(self.google_play_url_base + "firefox") assert self.firefox_android.get_download_url("release", "x86").startswith(self.google_play_url_base + "firefox") def test_get_download_url_release_direct(self): """ get_download_url should return a bouncer link depending on the architecture type, if the force_direct option is True. """ url = self.firefox_android.get_download_url("release", "arm", "multi", True) self.assertListEqual( parse_qsl(urlparse(url).query), [("product", "fennec-latest"), ("os", "android"), ("lang", "multi")], ) url = self.firefox_android.get_download_url("release", "x86", "multi", True) self.assertListEqual( parse_qsl(urlparse(url).query), [("product", "fennec-latest"), ("os", "android-x86"), ("lang", "multi")], )
from mock import ANY, call, Mock, patch from nose.tools import eq_, ok_ from pyquery import PyQuery as pq from bedrock.firefox import views as fx_views from bedrock.firefox.firefox_details import FirefoxDesktop, FirefoxAndroid from bedrock.firefox.utils import product_details from bedrock.mozorg.tests import TestCase TEST_DATA_DIR = os.path.join(os.path.dirname(__file__), 'test_data') PROD_DETAILS_DIR = os.path.join(TEST_DATA_DIR, 'product_details_json') GOOD_PLATS = {'Windows': {}, 'OS X': {}, 'Linux': {}} with patch.object(settings, 'PROD_DETAILS_DIR', PROD_DETAILS_DIR): firefox_desktop = FirefoxDesktop() firefox_android = FirefoxAndroid() class TestInstallerHelp(TestCase): def setUp(self): self.button_mock = Mock() self.patcher = patch.dict('jingo.env.globals', download_firefox=self.button_mock) self.patcher.start() self.view_name = 'firefox.installer-help' with self.activate('en-US'): self.url = reverse(self.view_name) def tearDown(self): self.patcher.stop()
class TestFirefoxAndroid(TestCase): google_play_url_base = ('https://play.google.com/store/apps/details' '?id=org.mozilla.') def setUp(self): self.firefox_android = FirefoxAndroid(json_dir=PROD_DETAILS_DIR) def test_latest_release_version(self): """latest_version should return the latest release version.""" with patch.object( self.firefox_android._storage, 'data', Mock(return_value=dict(version='22.0.1')), ): assert self.firefox_android.latest_version('release') == '22.0.1' def test_latest_beta_version(self): """latest_version should return the latest beta version.""" with patch.object( self.firefox_android._storage, 'data', Mock(return_value=dict(beta_version='23.0')), ): assert self.firefox_android.latest_version('beta') == '23.0' def test_get_download_url_nightly(self): """ get_download_url should return the same Google Play link of the 'org.mozilla.fennec_aurora' product regardless of the architecture type, if the force_direct option is unspecified. """ assert self.firefox_android.get_download_url( 'nightly', 'arm').startswith(self.google_play_url_base + 'fenix') assert self.firefox_android.get_download_url( 'nightly', 'x86').startswith(self.google_play_url_base + 'fenix') def test_get_download_url_nightly_direct(self): """ get_download_url should return a bouncer link depending on the architecture type, if the force_direct option is True. """ url = self.firefox_android.get_download_url('nightly', 'arm', 'multi', True) self.assertListEqual( parse_qsl(urlparse(url).query), [ ('product', 'fennec-nightly-latest'), ('os', 'android'), ('lang', 'multi'), ], ) url = self.firefox_android.get_download_url('nightly', 'x86', 'multi', True) self.assertListEqual( parse_qsl(urlparse(url).query), [ ('product', 'fennec-nightly-latest'), ('os', 'android-x86'), ('lang', 'multi'), ], ) def test_get_download_url_beta(self): """ get_download_url should return the same Google Play link of the 'org.mozilla.firefox_beta' product regardless of the architecture type, if the force_direct option is unspecified. """ assert self.firefox_android.get_download_url( 'beta', 'arm').startswith(self.google_play_url_base + 'firefox_beta') assert self.firefox_android.get_download_url( 'beta', 'x86').startswith(self.google_play_url_base + 'firefox_beta') def test_get_download_url_beta_direct(self): """ get_download_url should return a bouncer link depending on the architecture type, if the force_direct option is True. """ url = self.firefox_android.get_download_url('beta', 'arm', 'multi', True) self.assertListEqual( parse_qsl(urlparse(url).query), [('product', 'fennec-beta-latest'), ('os', 'android'), ('lang', 'multi')], ) url = self.firefox_android.get_download_url('beta', 'x86', 'multi', True) self.assertListEqual( parse_qsl(urlparse(url).query), [ ('product', 'fennec-beta-latest'), ('os', 'android-x86'), ('lang', 'multi'), ], ) def test_get_download_url_release(self): """ get_download_url should return the same Google Play link of the 'org.mozilla.firefox' product regardless of the architecture type, if the force_direct option is unspecified. """ assert self.firefox_android.get_download_url( 'release', 'arm').startswith(self.google_play_url_base + 'firefox') assert self.firefox_android.get_download_url( 'release', 'x86').startswith(self.google_play_url_base + 'firefox') def test_get_download_url_release_direct(self): """ get_download_url should return a bouncer link depending on the architecture type, if the force_direct option is True. """ url = self.firefox_android.get_download_url('release', 'arm', 'multi', True) self.assertListEqual( parse_qsl(urlparse(url).query), [('product', 'fennec-latest'), ('os', 'android'), ('lang', 'multi')], ) url = self.firefox_android.get_download_url('release', 'x86', 'multi', True) self.assertListEqual( parse_qsl(urlparse(url).query), [('product', 'fennec-latest'), ('os', 'android-x86'), ('lang', 'multi')], )