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 setUp(self): self.firefox_desktop = FirefoxDesktop(json_dir=PROD_DETAILS_DIR) self.p1 = patch.object(self.firefox_desktop, "firefox_primary_builds", GOOD_BUILDS__THREE_DIGITS) self.p2 = patch.object(self.firefox_desktop, "firefox_beta_builds", {}) self.p3 = patch.object(self.firefox_desktop, "firefox_versions", self.firefox_desktop_versions) self.p1.start() self.p2.start() self.p3.start()
def test_relnotes_index_firefox(self, render_mock): firefox_desktop = FirefoxDesktop(json_dir=DATA_PATH) with patch("bedrock.releasenotes.views.firefox_desktop", firefox_desktop): render_mock().render.return_value = HttpResponse("") with self.activate("en-US"): self.client.get(reverse("firefox.releases.index")) releases = render_mock.call_args[0][2]["releases"] assert len(releases) == len( firefox_desktop.firefox_history_major_releases) assert releases[0][0] == 82.0 assert releases[0][1]["major"] == "82.0" assert releases[0][1]["minor"] == ["82.0.1", "82.0.2", "82.0.3"] assert releases[4][0] == 78.0 assert releases[4][1]["major"] == "78.0" assert releases[4][1]["minor"] == [ "78.0.1", "78.0.2", "78.1.0", "78.2.0", "78.3.0", "78.3.1", "78.4.0", "78.4.1" ] assert releases[49][0] == 33.1 assert releases[49][1]["major"] == "33.1" assert releases[49][1]["minor"] == ["33.1.1"] assert releases[50][0] == 33.0 assert releases[50][1]["major"] == "33.0" assert releases[50][1]["minor"] == ["33.0.1", "33.0.2", "33.0.3"] assert releases[52][0] == 31.0 assert releases[52][1]["major"] == "31.0" assert releases[52][1]["minor"] == [ "31.1.0", "31.1.1", "31.2.0", "31.3.0", "31.4.0", "31.5.0", "31.5.2", "31.5.3", "31.6.0", "31.7.0", "31.8.0", ] assert releases[69][1]["major"] == "14.0.1" assert releases[69][1]["minor"] == [] # ensure v5.0 doesn't match v50.0 assert releases[78][1]["major"] == "5.0" assert releases[78][1]["minor"] == ["5.0.1"]
def test_relnotes_index_firefox(self, render_mock): firefox_desktop = FirefoxDesktop(json_dir=DATA_PATH) with patch('bedrock.releasenotes.views.firefox_desktop', firefox_desktop): render_mock().render.return_value = HttpResponse('') with self.activate('en-US'): self.client.get(reverse('firefox.releases.index')) releases = render_mock.call_args[0][2]['releases'] assert len(releases) == len( firefox_desktop.firefox_history_major_releases) assert releases[0][0] == 36.0 assert releases[0][1]['major'] == '36.0' assert releases[0][1]['minor'] == [] assert releases[3][0] == 33.1 assert releases[3][1]['major'] == '33.1' assert releases[3][1]['minor'] == ['33.1.1'] assert releases[4][0] == 33.0 assert releases[4][1]['major'] == '33.0' assert releases[4][1]['minor'] == ['33.0.1', '33.0.2', '33.0.3'] assert releases[6][0] == 31.0 assert releases[6][1]['major'] == '31.0' assert (releases[6][1]['minor'] == [ '31.1.0', '31.1.1', '31.2.0', '31.3.0', '31.4.0', '31.5.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.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')) == 9 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')) == 8 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')) == 8 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')) == 8 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')) == 8 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')) == 8 android_release_builds = 1 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 = 1 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')) == 1 android_nightly_builds = 1 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')) == 1 ios_release_builds = 1 assert len(doc('.c-locale-list[data-product="ios_release"] > li')) == ios_release_builds assert len(doc('.c-locale-list[data-product="ios_release"] > 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
from urlparse import parse_qsl, urlparse 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
from django.test.utils import override_settings from bedrock.base.urlresolvers import reverse from mock import patch, Mock from nose.tools import eq_ from pathlib import Path from pyquery import PyQuery as pq from rna.models import Release from bedrock.firefox.firefox_details import FirefoxDesktop from bedrock.mozorg.tests import TestCase from bedrock.releasenotes import views from bedrock.thunderbird.details import ThunderbirdDesktop DATA_PATH = str(Path(__file__).parent / 'data') firefox_desktop = FirefoxDesktop(json_dir=DATA_PATH) thunderbird_desktop = ThunderbirdDesktop(json_dir=DATA_PATH) class TestRNAViews(TestCase): def setUp(self): self.factory = RequestFactory() self.request = self.factory.get('/') self.render_patch = patch( 'bedrock.releasenotes.views.l10n_utils.render') self.mock_render = self.render_patch.start() self.mock_render.return_value.has_header.return_value = False def tearDown(self): self.render_patch.stop()
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.pd_cache.clear() self.firefox_desktop = FirefoxDesktop(json_dir=PROD_DETAILS_DIR)
class TestFirefoxDesktopBase(TestCase): pd_cache = caches["product-details"] def setUp(self): self.pd_cache.clear() self.firefox_desktop = FirefoxDesktop(json_dir=PROD_DETAILS_DIR) def test_get_download_url(self): url = self.firefox_desktop.get_download_url("release", "17.0.1", "osx", "pt-BR", True) self.assertListEqual( parse_qsl(urlparse(url).query), [("product", "firefox-latest-ssl"), ("os", "osx"), ("lang", "pt-BR")], ) # Windows 64-bit url = self.firefox_desktop.get_download_url("release", "38.0", "win64", "en-US", True) self.assertListEqual( parse_qsl(urlparse(url).query), [("product", "firefox-stub"), ("os", "win64"), ("lang", "en-US")], ) # Windows 64-bit MSI installer url = self.firefox_desktop.get_download_url("release", "38.0", "win64-msi", "en-US", True) self.assertListEqual( parse_qsl(urlparse(url).query), [("product", "firefox-msi-latest-ssl"), ("os", "win64"), ("lang", "en-US")], ) # Linux 64-bit url = self.firefox_desktop.get_download_url("release", "17.0.1", "linux64", "en-US", True) self.assertListEqual( parse_qsl(urlparse(url).query), [("product", "firefox-latest-ssl"), ("os", "linux64"), ("lang", "en-US")], ) # Check three-digit version does not break things url = self.firefox_desktop.get_download_url("release", "117.0.1", "osx", "pt-BR", True) self.assertListEqual( parse_qsl(urlparse(url).query), [("product", "firefox-latest-ssl"), ("os", "osx"), ("lang", "pt-BR")], ) def test_get_download_url_esr(self): """ The ESR version should give us a bouncer url. There is no stub for ESR. """ # MSI installer url = self.firefox_desktop.get_download_url("esr", "28.0a2", "win-msi", "en-US", True) self.assertListEqual( parse_qsl(urlparse(url).query), [ ("product", "firefox-esr-msi-latest-ssl"), ("os", "win"), ("lang", "en-US"), ], ) url = self.firefox_desktop.get_download_url("esr", "28.0a2", "win64", "en-US", True) self.assertListEqual( parse_qsl(urlparse(url).query), [("product", "firefox-esr-latest-ssl"), ("os", "win64"), ("lang", "en-US")], ) url = self.firefox_desktop.get_download_url("esr", "28.0a2", "osx", "en-US", True) self.assertListEqual( parse_qsl(urlparse(url).query), [("product", "firefox-esr-latest-ssl"), ("os", "osx"), ("lang", "en-US")], ) url = self.firefox_desktop.get_download_url("esr", "28.0a2", "linux", "en-US", True) self.assertListEqual( parse_qsl(urlparse(url).query), [("product", "firefox-esr-latest-ssl"), ("os", "linux"), ("lang", "en-US")], ) url = self.firefox_desktop.get_download_url("esr", "28.0a2", "linux64", "en-US", True) self.assertListEqual( parse_qsl(urlparse(url).query), [ ("product", "firefox-esr-latest-ssl"), ("os", "linux64"), ("lang", "en-US"), ], ) def test_get_download_url_esr_next(self): """ The ESR_NEXT version should give us a bouncer url with 'esr-next'. There is no stub for ESR. """ url = self.firefox_desktop.get_download_url("esr_next", "52.4.1esr", "win", "en-US", True) self.assertListEqual( parse_qsl(urlparse(url).query), [ ("product", "firefox-esr-next-latest-ssl"), ("os", "win"), ("lang", "en-US"), ], ) url = self.firefox_desktop.get_download_url("esr_next", "52.4.1esr", "win64", "en-US", True) self.assertListEqual( parse_qsl(urlparse(url).query), [ ("product", "firefox-esr-next-latest-ssl"), ("os", "win64"), ("lang", "en-US"), ], ) url = self.firefox_desktop.get_download_url("esr_next", "52.4.1esr", "win64-msi", "en-US", True) self.assertListEqual( parse_qsl(urlparse(url).query), [ ("product", "firefox-esr-next-msi-latest-ssl"), ("os", "win64"), ("lang", "en-US"), ], ) url = self.firefox_desktop.get_download_url("esr_next", "52.4.1esr", "osx", "en-US", True) self.assertListEqual( parse_qsl(urlparse(url).query), [ ("product", "firefox-esr-next-latest-ssl"), ("os", "osx"), ("lang", "en-US"), ], ) url = self.firefox_desktop.get_download_url("esr_next", "52.4.1esr", "linux", "en-US", True) self.assertListEqual( parse_qsl(urlparse(url).query), [ ("product", "firefox-esr-next-latest-ssl"), ("os", "linux"), ("lang", "en-US"), ], ) url = self.firefox_desktop.get_download_url("esr_next", "52.4.1esr", "linux64", "en-US", True) self.assertListEqual( parse_qsl(urlparse(url).query), [ ("product", "firefox-esr-next-latest-ssl"), ("os", "linux64"), ("lang", "en-US"), ], ) def test_get_download_url_devedition(self): """ The Developer Edition version should give us a bouncer url. For Windows, a stub url should be returned. """ url = self.firefox_desktop.get_download_url("alpha", "28.0a2", "win", "en-US", True) self.assertListEqual( parse_qsl(urlparse(url).query), [("product", "firefox-devedition-stub"), ("os", "win"), ("lang", "en-US")], ) url = self.firefox_desktop.get_download_url("alpha", "28.0a2", "win64", "en-US", True) self.assertListEqual( parse_qsl(urlparse(url).query), [ ("product", "firefox-devedition-stub"), ("os", "win64"), ("lang", "en-US"), ], ) # MSI installer url = self.firefox_desktop.get_download_url("alpha", "28.0a2", "win64-msi", "en-US", True) self.assertListEqual( parse_qsl(urlparse(url).query), [ ("product", "firefox-devedition-msi-latest-ssl"), ("os", "win64"), ("lang", "en-US"), ], ) url = self.firefox_desktop.get_download_url("alpha", "28.0a2", "osx", "en-US", True) self.assertListEqual( parse_qsl(urlparse(url).query), [ ("product", "firefox-devedition-latest-ssl"), ("os", "osx"), ("lang", "en-US"), ], ) url = self.firefox_desktop.get_download_url("alpha", "28.0a2", "linux", "en-US", True) self.assertListEqual( parse_qsl(urlparse(url).query), [ ("product", "firefox-devedition-latest-ssl"), ("os", "linux"), ("lang", "en-US"), ], ) url = self.firefox_desktop.get_download_url("alpha", "28.0a2", "linux64", "en-US", True) self.assertListEqual( parse_qsl(urlparse(url).query), [ ("product", "firefox-devedition-latest-ssl"), ("os", "linux64"), ("lang", "en-US"), ], ) def test_get_download_url_devedition_full(self): """ The Developer Edition version should give us a bouncer url. For Windows, a full url should be returned. """ url = self.firefox_desktop.get_download_url("alpha", "28.0a2", "win", "en-US", True, True) self.assertListEqual( parse_qsl(urlparse(url).query), [ ("product", "firefox-devedition-latest-ssl"), ("os", "win"), ("lang", "en-US"), ], ) url = self.firefox_desktop.get_download_url("alpha", "28.0a2", "win64", "en-US", True, True) self.assertListEqual( parse_qsl(urlparse(url).query), [ ("product", "firefox-devedition-latest-ssl"), ("os", "win64"), ("lang", "en-US"), ], ) url = self.firefox_desktop.get_download_url("alpha", "28.0a2", "osx", "en-US", True, True) self.assertListEqual( parse_qsl(urlparse(url).query), [ ("product", "firefox-devedition-latest-ssl"), ("os", "osx"), ("lang", "en-US"), ], ) url = self.firefox_desktop.get_download_url("alpha", "28.0a2", "linux", "en-US", True, True) self.assertListEqual( parse_qsl(urlparse(url).query), [ ("product", "firefox-devedition-latest-ssl"), ("os", "linux"), ("lang", "en-US"), ], ) url = self.firefox_desktop.get_download_url("alpha", "28.0a2", "linux64", "en-US", True, True) self.assertListEqual( parse_qsl(urlparse(url).query), [ ("product", "firefox-devedition-latest-ssl"), ("os", "linux64"), ("lang", "en-US"), ], ) def test_get_download_url_devedition_l10n(self): """ The Developer Edition version should give us a bouncer url. A stub url should be returned for win32/64, while other platforms get a full url. The product name is the same as en-US. """ url = self.firefox_desktop.get_download_url("alpha", "28.0a2", "win", "pt-BR", True) self.assertListEqual( parse_qsl(urlparse(url).query), [("product", "firefox-devedition-stub"), ("os", "win"), ("lang", "pt-BR")], ) # MSI installer url = self.firefox_desktop.get_download_url("alpha", "28.0a2", "win-msi", "pt-BR", True) self.assertListEqual( parse_qsl(urlparse(url).query), [ ("product", "firefox-devedition-msi-latest-ssl"), ("os", "win"), ("lang", "pt-BR"), ], ) url = self.firefox_desktop.get_download_url("alpha", "28.0a2", "win64", "pt-BR", True) self.assertListEqual( parse_qsl(urlparse(url).query), [ ("product", "firefox-devedition-stub"), ("os", "win64"), ("lang", "pt-BR"), ], ) url = self.firefox_desktop.get_download_url("alpha", "28.0a2", "osx", "pt-BR", True) self.assertListEqual( parse_qsl(urlparse(url).query), [ ("product", "firefox-devedition-latest-ssl"), ("os", "osx"), ("lang", "pt-BR"), ], ) url = self.firefox_desktop.get_download_url("alpha", "28.0a2", "linux", "pt-BR", True) self.assertListEqual( parse_qsl(urlparse(url).query), [ ("product", "firefox-devedition-latest-ssl"), ("os", "linux"), ("lang", "pt-BR"), ], ) url = self.firefox_desktop.get_download_url("alpha", "28.0a2", "linux64", "pt-BR", True) self.assertListEqual( parse_qsl(urlparse(url).query), [ ("product", "firefox-devedition-latest-ssl"), ("os", "linux64"), ("lang", "pt-BR"), ], ) def test_get_download_url_nightly(self): """ The Nightly version should give us a bouncer url. For Windows, a stub url should be returned. """ url = self.firefox_desktop.get_download_url("nightly", "50.0a1", "win", "en-US", True) self.assertListEqual( parse_qsl(urlparse(url).query), [("product", "firefox-nightly-stub"), ("os", "win"), ("lang", "en-US")], ) # MSI installer url = self.firefox_desktop.get_download_url("nightly", "50.0a1", "win64-msi", "en-US", True) self.assertListEqual( parse_qsl(urlparse(url).query), [ ("product", "firefox-nightly-msi-latest-ssl"), ("os", "win64"), ("lang", "en-US"), ], ) url = self.firefox_desktop.get_download_url("nightly", "50.0a1", "win64", "en-US", True) self.assertListEqual( parse_qsl(urlparse(url).query), [("product", "firefox-nightly-stub"), ("os", "win64"), ("lang", "en-US")], ) url = self.firefox_desktop.get_download_url("nightly", "50.0a1", "osx", "en-US", True) self.assertListEqual( parse_qsl(urlparse(url).query), [ ("product", "firefox-nightly-latest-ssl"), ("os", "osx"), ("lang", "en-US"), ], ) url = self.firefox_desktop.get_download_url("nightly", "50.0a1", "linux", "en-US", True) self.assertListEqual( parse_qsl(urlparse(url).query), [ ("product", "firefox-nightly-latest-ssl"), ("os", "linux"), ("lang", "en-US"), ], ) url = self.firefox_desktop.get_download_url("nightly", "50.0a1", "linux64", "en-US", True) self.assertListEqual( parse_qsl(urlparse(url).query), [ ("product", "firefox-nightly-latest-ssl"), ("os", "linux64"), ("lang", "en-US"), ], ) def test_get_download_url_nightly_full(self): """ The Nightly version should give us a bouncer url. For Windows, a full url should be returned. """ url = self.firefox_desktop.get_download_url("nightly", "50.0a1", "win", "en-US", True, True) self.assertListEqual( parse_qsl(urlparse(url).query), [ ("product", "firefox-nightly-latest-ssl"), ("os", "win"), ("lang", "en-US"), ], ) url = self.firefox_desktop.get_download_url("nightly", "50.0a1", "win64", "en-US", True, True) self.assertListEqual( parse_qsl(urlparse(url).query), [ ("product", "firefox-nightly-latest-ssl"), ("os", "win64"), ("lang", "en-US"), ], ) url = self.firefox_desktop.get_download_url("nightly", "50.0a1", "osx", "en-US", True, True) self.assertListEqual( parse_qsl(urlparse(url).query), [ ("product", "firefox-nightly-latest-ssl"), ("os", "osx"), ("lang", "en-US"), ], ) url = self.firefox_desktop.get_download_url("nightly", "50.0a1", "linux", "en-US", True, True) self.assertListEqual( parse_qsl(urlparse(url).query), [ ("product", "firefox-nightly-latest-ssl"), ("os", "linux"), ("lang", "en-US"), ], ) url = self.firefox_desktop.get_download_url("nightly", "50.0a1", "linux64", "en-US", True, True) self.assertListEqual( parse_qsl(urlparse(url).query), [ ("product", "firefox-nightly-latest-ssl"), ("os", "linux64"), ("lang", "en-US"), ], ) def test_get_download_url_nightly_l10n(self): """ The Nightly version should give us a bouncer url. A stub url should be returned for win32/64, while other platforms get a full url. The product name is slightly different from en-US. """ url = self.firefox_desktop.get_download_url("nightly", "50.0a1", "win", "pt-BR", True) self.assertListEqual( parse_qsl(urlparse(url).query), [("product", "firefox-nightly-stub"), ("os", "win"), ("lang", "pt-BR")], ) url = self.firefox_desktop.get_download_url("nightly", "50.0a1", "win64", "pt-BR", True) self.assertListEqual( parse_qsl(urlparse(url).query), [("product", "firefox-nightly-stub"), ("os", "win64"), ("lang", "pt-BR")], ) # MSI installer url = self.firefox_desktop.get_download_url("nightly", "50.0a1", "win64-msi", "pt-BR", True) self.assertListEqual( parse_qsl(urlparse(url).query), [ ("product", "firefox-nightly-msi-latest-l10n-ssl"), ("os", "win64"), ("lang", "pt-BR"), ], ) url = self.firefox_desktop.get_download_url("nightly", "50.0a1", "osx", "pt-BR", True) self.assertListEqual( parse_qsl(urlparse(url).query), [ ("product", "firefox-nightly-latest-l10n-ssl"), ("os", "osx"), ("lang", "pt-BR"), ], ) url = self.firefox_desktop.get_download_url("nightly", "50.0a1", "linux", "pt-BR", True) self.assertListEqual( parse_qsl(urlparse(url).query), [ ("product", "firefox-nightly-latest-l10n-ssl"), ("os", "linux"), ("lang", "pt-BR"), ], ) url = self.firefox_desktop.get_download_url("nightly", "50.0a1", "linux64", "pt-BR", True) self.assertListEqual( parse_qsl(urlparse(url).query), [ ("product", "firefox-nightly-latest-l10n-ssl"), ("os", "linux64"), ("lang", "pt-BR"), ], ) def test_get_download_url_scene2_funnelcake(self): scene2 = self.firefox_desktop.download_base_url_transition url = self.firefox_desktop.get_download_url("release", "45.0", "win", "en-US") self.assertEqual(url, scene2) url = self.firefox_desktop.get_download_url("release", "45.0", "win", "en-US", funnelcake_id="64") self.assertEqual(url, scene2 + "?f=64") def test_get_download_url_scene2_with_locale(self): scene2 = self.firefox_desktop.download_base_url_transition url = self.firefox_desktop.get_download_url("release", "45.0", "win", "de", locale_in_transition=True) self.assertEqual(url, "/de" + scene2) url = self.firefox_desktop.get_download_url( "release", "45.0", "win", "fr", locale_in_transition=True, funnelcake_id="64", ) self.assertEqual(url, "/fr" + scene2 + "?f=64") def get_download_url_ssl(self): """ SSL-enabled links should always be used except Windows stub installers. """ # SSL-enabled links won't be used for Windows builds (but SSL download # is enabled by default for stub installers) url = self.firefox_desktop.get_download_url("release", "27.0", "win", "pt-BR", True) self.assertListEqual( parse_qsl(urlparse(url).query), [("product", "firefox-stub"), ("os", "win"), ("lang", "pt-BR")], ) # SSL-enabled links will be used for OS X builds url = self.firefox_desktop.get_download_url("release", "27.0", "osx", "pt-BR", True) self.assertListEqual( parse_qsl(urlparse(url).query), [("product", "firefox-latest-ssl"), ("os", "osx"), ("lang", "pt-BR")], ) # SSL-enabled links will be used for Linux builds url = self.firefox_desktop.get_download_url("release", "27.0", "linux", "pt-BR", True) self.assertListEqual( parse_qsl(urlparse(url).query), [("product", "firefox-latest-ssl"), ("os", "linux"), ("lang", "pt-BR")], ) def test_filter_builds_by_locale_name(self): # search english builds = self.firefox_desktop.get_filtered_full_builds("release", None, "ujara") assert len(builds) == 1 assert builds[0]["name_en"] == "Gujarati" # search native builds = self.firefox_desktop.get_filtered_full_builds("release", None, "જરા") assert len(builds) == 1 assert builds[0]["name_en"] == "Gujarati" # with a space builds = self.firefox_desktop.get_filtered_full_builds("release", None, "british english") assert len(builds) == 1 assert builds[0]["name_en"] == "English (British)" # with a comma builds = self.firefox_desktop.get_filtered_full_builds("release", None, "French, Français") assert len(builds) == 1 assert builds[0]["name_en"] == "French" def test_windows64_build(self): # Aurora builds = self.firefox_desktop.get_filtered_full_builds("alpha") url = builds[0]["platforms"]["win64"]["download_url"] assert parse_qsl(urlparse(url).query)[1] == ("os", "win64") # Beta builds = self.firefox_desktop.get_filtered_full_builds("beta") url = builds[0]["platforms"]["win64"]["download_url"] assert parse_qsl(urlparse(url).query)[1] == ("os", "win64") # Release builds = self.firefox_desktop.get_filtered_full_builds("release") url = builds[0]["platforms"]["win64"]["download_url"] assert parse_qsl(urlparse(url).query)[1] == ("os", "win64") # ESR builds = self.firefox_desktop.get_filtered_full_builds("esr") url = builds[0]["platforms"]["win64"]["download_url"] assert parse_qsl(urlparse(url).query)[1] == ("os", "win64") def test_linux64_build(self): builds = self.firefox_desktop.get_filtered_full_builds("release") url = builds[0]["platforms"]["linux64"]["download_url"] assert parse_qsl(urlparse(url).query)[1] == ("os", "linux64") def test_esr_versions(self): """ESR versions should be dynamic based on data.""" with patch.object( self.firefox_desktop._storage, "data", Mock(return_value=dict(FIREFOX_ESR="24.2")), ): assert self.firefox_desktop.esr_major_versions == [24] assert self.firefox_desktop.esr_minor_versions == ["24.2"] def test_esr_versions_prev(self): """ESR versions should show previous when available.""" with patch.object( self.firefox_desktop._storage, "data", Mock(return_value=dict(FIREFOX_ESR="24.6.0", FIREFOX_ESR_NEXT="31.0.0")), ): assert self.firefox_desktop.esr_major_versions == [24, 31] assert self.firefox_desktop.esr_minor_versions == ["24.6.0", "31.0.0"] def test_esr_versions_no_latest(self): """ESR versions should not blow up if current version is broken.""" with patch.object( self.firefox_desktop._storage, "data", Mock(return_value=dict(LATEST_FIREFOX_VERSION="Phoenix", FIREFOX_ESR="Albuquerque")), ): assert self.firefox_desktop.esr_major_versions == [] assert self.firefox_desktop.esr_minor_versions == [] def test_latest_major_version(self): """latest_major_version should return an int of the major version.""" for case in ( ("18", 18), ("18.0a1", 18), ("18.0.1", 18), ("100.0.1", 100), ("100", 100), ("100.0a1", 100), ("119.0.1", 119), ("119", 119), ("119.0a1", 119), ): with self.subTest(case=case): with patch.object( self.firefox_desktop._storage, "data", Mock(return_value=dict(LATEST_FIREFOX_VERSION=case[0])), ): assert self.firefox_desktop.latest_major_version("release") == case[1]
from funfactory.urlresolvers import reverse 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 TestFirefoxDesktop(TestCase): pd_cache = caches['product-details'] def setUp(self): self.pd_cache.clear() self.firefox_desktop = FirefoxDesktop(json_dir=PROD_DETAILS_DIR) def test_get_download_url(self): url = self.firefox_desktop.get_download_url('release', '17.0.1', 'osx', 'pt-BR', True) self.assertListEqual( parse_qsl(urlparse(url).query), [('product', 'firefox-latest-ssl'), ('os', 'osx'), ('lang', 'pt-BR')], ) # Windows 64-bit url = self.firefox_desktop.get_download_url('release', '38.0', 'win64', 'en-US', True) self.assertListEqual( parse_qsl(urlparse(url).query), [('product', 'firefox-stub'), ('os', 'win64'), ('lang', 'en-US')], ) # Windows 64-bit MSI installer url = self.firefox_desktop.get_download_url('release', '38.0', 'win64-msi', 'en-US', True) self.assertListEqual( parse_qsl(urlparse(url).query), [('product', 'firefox-msi-latest-ssl'), ('os', 'win64'), ('lang', 'en-US')], ) # Linux 64-bit url = self.firefox_desktop.get_download_url('release', '17.0.1', 'linux64', 'en-US', True) self.assertListEqual( parse_qsl(urlparse(url).query), [('product', 'firefox-latest-ssl'), ('os', 'linux64'), ('lang', 'en-US')], ) def test_get_download_url_esr(self): """ The ESR version should give us a bouncer url. There is no stub for ESR. """ # MSI installer url = self.firefox_desktop.get_download_url('esr', '28.0a2', 'win-msi', 'en-US', True) self.assertListEqual( parse_qsl(urlparse(url).query), [ ('product', 'firefox-esr-msi-latest-ssl'), ('os', 'win'), ('lang', 'en-US'), ], ) url = self.firefox_desktop.get_download_url('esr', '28.0a2', 'win64', 'en-US', True) self.assertListEqual( parse_qsl(urlparse(url).query), [('product', 'firefox-esr-latest-ssl'), ('os', 'win64'), ('lang', 'en-US')], ) url = self.firefox_desktop.get_download_url('esr', '28.0a2', 'osx', 'en-US', True) self.assertListEqual( parse_qsl(urlparse(url).query), [('product', 'firefox-esr-latest-ssl'), ('os', 'osx'), ('lang', 'en-US')], ) url = self.firefox_desktop.get_download_url('esr', '28.0a2', 'linux', 'en-US', True) self.assertListEqual( parse_qsl(urlparse(url).query), [('product', 'firefox-esr-latest-ssl'), ('os', 'linux'), ('lang', 'en-US')], ) url = self.firefox_desktop.get_download_url('esr', '28.0a2', 'linux64', 'en-US', True) self.assertListEqual( parse_qsl(urlparse(url).query), [ ('product', 'firefox-esr-latest-ssl'), ('os', 'linux64'), ('lang', 'en-US'), ], ) def test_get_download_url_esr_next(self): """ The ESR_NEXT version should give us a bouncer url with 'esr-next'. There is no stub for ESR. """ url = self.firefox_desktop.get_download_url('esr_next', '52.4.1esr', 'win', 'en-US', True) self.assertListEqual( parse_qsl(urlparse(url).query), [ ('product', 'firefox-esr-next-latest-ssl'), ('os', 'win'), ('lang', 'en-US'), ], ) url = self.firefox_desktop.get_download_url('esr_next', '52.4.1esr', 'win64', 'en-US', True) self.assertListEqual( parse_qsl(urlparse(url).query), [ ('product', 'firefox-esr-next-latest-ssl'), ('os', 'win64'), ('lang', 'en-US'), ], ) url = self.firefox_desktop.get_download_url('esr_next', '52.4.1esr', 'win64-msi', 'en-US', True) self.assertListEqual( parse_qsl(urlparse(url).query), [ ('product', 'firefox-esr-next-msi-latest-ssl'), ('os', 'win64'), ('lang', 'en-US'), ], ) url = self.firefox_desktop.get_download_url('esr_next', '52.4.1esr', 'osx', 'en-US', True) self.assertListEqual( parse_qsl(urlparse(url).query), [ ('product', 'firefox-esr-next-latest-ssl'), ('os', 'osx'), ('lang', 'en-US'), ], ) url = self.firefox_desktop.get_download_url('esr_next', '52.4.1esr', 'linux', 'en-US', True) self.assertListEqual( parse_qsl(urlparse(url).query), [ ('product', 'firefox-esr-next-latest-ssl'), ('os', 'linux'), ('lang', 'en-US'), ], ) url = self.firefox_desktop.get_download_url('esr_next', '52.4.1esr', 'linux64', 'en-US', True) self.assertListEqual( parse_qsl(urlparse(url).query), [ ('product', 'firefox-esr-next-latest-ssl'), ('os', 'linux64'), ('lang', 'en-US'), ], ) def test_get_download_url_devedition(self): """ The Developer Edition version should give us a bouncer url. For Windows, a stub url should be returned. """ url = self.firefox_desktop.get_download_url('alpha', '28.0a2', 'win', 'en-US', True) self.assertListEqual( parse_qsl(urlparse(url).query), [('product', 'firefox-devedition-stub'), ('os', 'win'), ('lang', 'en-US')], ) url = self.firefox_desktop.get_download_url('alpha', '28.0a2', 'win64', 'en-US', True) self.assertListEqual( parse_qsl(urlparse(url).query), [ ('product', 'firefox-devedition-stub'), ('os', 'win64'), ('lang', 'en-US'), ], ) # MSI installer url = self.firefox_desktop.get_download_url('alpha', '28.0a2', 'win64-msi', 'en-US', True) self.assertListEqual( parse_qsl(urlparse(url).query), [ ('product', 'firefox-devedition-msi-latest-ssl'), ('os', 'win64'), ('lang', 'en-US'), ], ) url = self.firefox_desktop.get_download_url('alpha', '28.0a2', 'osx', 'en-US', True) self.assertListEqual( parse_qsl(urlparse(url).query), [ ('product', 'firefox-devedition-latest-ssl'), ('os', 'osx'), ('lang', 'en-US'), ], ) url = self.firefox_desktop.get_download_url('alpha', '28.0a2', 'linux', 'en-US', True) self.assertListEqual( parse_qsl(urlparse(url).query), [ ('product', 'firefox-devedition-latest-ssl'), ('os', 'linux'), ('lang', 'en-US'), ], ) url = self.firefox_desktop.get_download_url('alpha', '28.0a2', 'linux64', 'en-US', True) self.assertListEqual( parse_qsl(urlparse(url).query), [ ('product', 'firefox-devedition-latest-ssl'), ('os', 'linux64'), ('lang', 'en-US'), ], ) def test_get_download_url_devedition_full(self): """ The Developer Edition version should give us a bouncer url. For Windows, a full url should be returned. """ url = self.firefox_desktop.get_download_url('alpha', '28.0a2', 'win', 'en-US', True, True) self.assertListEqual( parse_qsl(urlparse(url).query), [ ('product', 'firefox-devedition-latest-ssl'), ('os', 'win'), ('lang', 'en-US'), ], ) url = self.firefox_desktop.get_download_url('alpha', '28.0a2', 'win64', 'en-US', True, True) self.assertListEqual( parse_qsl(urlparse(url).query), [ ('product', 'firefox-devedition-latest-ssl'), ('os', 'win64'), ('lang', 'en-US'), ], ) url = self.firefox_desktop.get_download_url('alpha', '28.0a2', 'osx', 'en-US', True, True) self.assertListEqual( parse_qsl(urlparse(url).query), [ ('product', 'firefox-devedition-latest-ssl'), ('os', 'osx'), ('lang', 'en-US'), ], ) url = self.firefox_desktop.get_download_url('alpha', '28.0a2', 'linux', 'en-US', True, True) self.assertListEqual( parse_qsl(urlparse(url).query), [ ('product', 'firefox-devedition-latest-ssl'), ('os', 'linux'), ('lang', 'en-US'), ], ) url = self.firefox_desktop.get_download_url('alpha', '28.0a2', 'linux64', 'en-US', True, True) self.assertListEqual( parse_qsl(urlparse(url).query), [ ('product', 'firefox-devedition-latest-ssl'), ('os', 'linux64'), ('lang', 'en-US'), ], ) def test_get_download_url_devedition_l10n(self): """ The Developer Edition version should give us a bouncer url. A stub url should be returned for win32/64, while other platforms get a full url. The product name is the same as en-US. """ url = self.firefox_desktop.get_download_url('alpha', '28.0a2', 'win', 'pt-BR', True) self.assertListEqual( parse_qsl(urlparse(url).query), [('product', 'firefox-devedition-stub'), ('os', 'win'), ('lang', 'pt-BR')], ) # MSI installer url = self.firefox_desktop.get_download_url('alpha', '28.0a2', 'win-msi', 'pt-BR', True) self.assertListEqual( parse_qsl(urlparse(url).query), [ ('product', 'firefox-devedition-msi-latest-ssl'), ('os', 'win'), ('lang', 'pt-BR'), ], ) url = self.firefox_desktop.get_download_url('alpha', '28.0a2', 'win64', 'pt-BR', True) self.assertListEqual( parse_qsl(urlparse(url).query), [ ('product', 'firefox-devedition-stub'), ('os', 'win64'), ('lang', 'pt-BR'), ], ) url = self.firefox_desktop.get_download_url('alpha', '28.0a2', 'osx', 'pt-BR', True) self.assertListEqual( parse_qsl(urlparse(url).query), [ ('product', 'firefox-devedition-latest-ssl'), ('os', 'osx'), ('lang', 'pt-BR'), ], ) url = self.firefox_desktop.get_download_url('alpha', '28.0a2', 'linux', 'pt-BR', True) self.assertListEqual( parse_qsl(urlparse(url).query), [ ('product', 'firefox-devedition-latest-ssl'), ('os', 'linux'), ('lang', 'pt-BR'), ], ) url = self.firefox_desktop.get_download_url('alpha', '28.0a2', 'linux64', 'pt-BR', True) self.assertListEqual( parse_qsl(urlparse(url).query), [ ('product', 'firefox-devedition-latest-ssl'), ('os', 'linux64'), ('lang', 'pt-BR'), ], ) def test_get_download_url_nightly(self): """ The Nightly version should give us a bouncer url. For Windows, a stub url should be returned. """ url = self.firefox_desktop.get_download_url('nightly', '50.0a1', 'win', 'en-US', True) self.assertListEqual( parse_qsl(urlparse(url).query), [('product', 'firefox-nightly-stub'), ('os', 'win'), ('lang', 'en-US')], ) # MSI installer url = self.firefox_desktop.get_download_url('nightly', '50.0a1', 'win64-msi', 'en-US', True) self.assertListEqual( parse_qsl(urlparse(url).query), [ ('product', 'firefox-nightly-msi-latest-ssl'), ('os', 'win64'), ('lang', 'en-US'), ], ) url = self.firefox_desktop.get_download_url('nightly', '50.0a1', 'win64', 'en-US', True) self.assertListEqual( parse_qsl(urlparse(url).query), [('product', 'firefox-nightly-stub'), ('os', 'win64'), ('lang', 'en-US')], ) url = self.firefox_desktop.get_download_url('nightly', '50.0a1', 'osx', 'en-US', True) self.assertListEqual( parse_qsl(urlparse(url).query), [ ('product', 'firefox-nightly-latest-ssl'), ('os', 'osx'), ('lang', 'en-US'), ], ) url = self.firefox_desktop.get_download_url('nightly', '50.0a1', 'linux', 'en-US', True) self.assertListEqual( parse_qsl(urlparse(url).query), [ ('product', 'firefox-nightly-latest-ssl'), ('os', 'linux'), ('lang', 'en-US'), ], ) url = self.firefox_desktop.get_download_url('nightly', '50.0a1', 'linux64', 'en-US', True) self.assertListEqual( parse_qsl(urlparse(url).query), [ ('product', 'firefox-nightly-latest-ssl'), ('os', 'linux64'), ('lang', 'en-US'), ], ) def test_get_download_url_nightly_full(self): """ The Nightly version should give us a bouncer url. For Windows, a full url should be returned. """ url = self.firefox_desktop.get_download_url('nightly', '50.0a1', 'win', 'en-US', True, True) self.assertListEqual( parse_qsl(urlparse(url).query), [ ('product', 'firefox-nightly-latest-ssl'), ('os', 'win'), ('lang', 'en-US'), ], ) url = self.firefox_desktop.get_download_url('nightly', '50.0a1', 'win64', 'en-US', True, True) self.assertListEqual( parse_qsl(urlparse(url).query), [ ('product', 'firefox-nightly-latest-ssl'), ('os', 'win64'), ('lang', 'en-US'), ], ) url = self.firefox_desktop.get_download_url('nightly', '50.0a1', 'osx', 'en-US', True, True) self.assertListEqual( parse_qsl(urlparse(url).query), [ ('product', 'firefox-nightly-latest-ssl'), ('os', 'osx'), ('lang', 'en-US'), ], ) url = self.firefox_desktop.get_download_url('nightly', '50.0a1', 'linux', 'en-US', True, True) self.assertListEqual( parse_qsl(urlparse(url).query), [ ('product', 'firefox-nightly-latest-ssl'), ('os', 'linux'), ('lang', 'en-US'), ], ) url = self.firefox_desktop.get_download_url('nightly', '50.0a1', 'linux64', 'en-US', True, True) self.assertListEqual( parse_qsl(urlparse(url).query), [ ('product', 'firefox-nightly-latest-ssl'), ('os', 'linux64'), ('lang', 'en-US'), ], ) def test_get_download_url_nightly_l10n(self): """ The Nightly version should give us a bouncer url. A stub url should be returned for win32/64, while other platforms get a full url. The product name is slightly different from en-US. """ url = self.firefox_desktop.get_download_url('nightly', '50.0a1', 'win', 'pt-BR', True) self.assertListEqual( parse_qsl(urlparse(url).query), [('product', 'firefox-nightly-stub'), ('os', 'win'), ('lang', 'pt-BR')], ) url = self.firefox_desktop.get_download_url('nightly', '50.0a1', 'win64', 'pt-BR', True) self.assertListEqual( parse_qsl(urlparse(url).query), [('product', 'firefox-nightly-stub'), ('os', 'win64'), ('lang', 'pt-BR')], ) # MSI installer url = self.firefox_desktop.get_download_url('nightly', '50.0a1', 'win64-msi', 'pt-BR', True) self.assertListEqual( parse_qsl(urlparse(url).query), [ ('product', 'firefox-nightly-msi-latest-l10n-ssl'), ('os', 'win64'), ('lang', 'pt-BR'), ], ) url = self.firefox_desktop.get_download_url('nightly', '50.0a1', 'osx', 'pt-BR', True) self.assertListEqual( parse_qsl(urlparse(url).query), [ ('product', 'firefox-nightly-latest-l10n-ssl'), ('os', 'osx'), ('lang', 'pt-BR'), ], ) url = self.firefox_desktop.get_download_url('nightly', '50.0a1', 'linux', 'pt-BR', True) self.assertListEqual( parse_qsl(urlparse(url).query), [ ('product', 'firefox-nightly-latest-l10n-ssl'), ('os', 'linux'), ('lang', 'pt-BR'), ], ) url = self.firefox_desktop.get_download_url('nightly', '50.0a1', 'linux64', 'pt-BR', True) self.assertListEqual( parse_qsl(urlparse(url).query), [ ('product', 'firefox-nightly-latest-l10n-ssl'), ('os', 'linux64'), ('lang', 'pt-BR'), ], ) def test_get_download_url_scene2_funnelcake(self): scene2 = self.firefox_desktop.download_base_url_transition url = self.firefox_desktop.get_download_url('release', '45.0', 'win', 'en-US') self.assertEqual(url, scene2) url = self.firefox_desktop.get_download_url('release', '45.0', 'win', 'en-US', funnelcake_id='64') self.assertEqual(url, scene2 + '?f=64') def test_get_download_url_scene2_with_locale(self): scene2 = self.firefox_desktop.download_base_url_transition url = self.firefox_desktop.get_download_url('release', '45.0', 'win', 'de', locale_in_transition=True) self.assertEqual(url, '/de' + scene2) url = self.firefox_desktop.get_download_url( 'release', '45.0', 'win', 'fr', locale_in_transition=True, funnelcake_id='64', ) self.assertEqual(url, '/fr' + scene2 + '?f=64') def get_download_url_ssl(self): """ SSL-enabled links should always be used except Windows stub installers. """ # SSL-enabled links won't be used for Windows builds (but SSL download # is enabled by default for stub installers) url = self.firefox_desktop.get_download_url('release', '27.0', 'win', 'pt-BR', True) self.assertListEqual( parse_qsl(urlparse(url).query), [('product', 'firefox-stub'), ('os', 'win'), ('lang', 'pt-BR')], ) # SSL-enabled links will be used for OS X builds url = self.firefox_desktop.get_download_url('release', '27.0', 'osx', 'pt-BR', True) self.assertListEqual( parse_qsl(urlparse(url).query), [('product', 'firefox-latest-ssl'), ('os', 'osx'), ('lang', 'pt-BR')], ) # SSL-enabled links will be used for Linux builds url = self.firefox_desktop.get_download_url('release', '27.0', 'linux', 'pt-BR', True) self.assertListEqual( parse_qsl(urlparse(url).query), [('product', 'firefox-latest-ssl'), ('os', 'linux'), ('lang', 'pt-BR')], ) def test_filter_builds_by_locale_name(self): # search english builds = self.firefox_desktop.get_filtered_full_builds( 'release', None, 'ujara') assert len(builds) == 1 assert builds[0]['name_en'] == 'Gujarati' # search native builds = self.firefox_desktop.get_filtered_full_builds( 'release', None, u'જરા') assert len(builds) == 1 assert builds[0]['name_en'] == 'Gujarati' # with a space builds = self.firefox_desktop.get_filtered_full_builds( 'release', None, 'british english') assert len(builds) == 1 assert builds[0]['name_en'] == 'English (British)' # with a comma builds = self.firefox_desktop.get_filtered_full_builds( 'release', None, u'French, Français') assert len(builds) == 1 assert builds[0]['name_en'] == 'French' def test_windows64_build(self): # Aurora builds = self.firefox_desktop.get_filtered_full_builds('alpha') url = builds[0]['platforms']['win64']['download_url'] assert parse_qsl(urlparse(url).query)[1] == ('os', 'win64') # Beta builds = self.firefox_desktop.get_filtered_full_builds('beta') url = builds[0]['platforms']['win64']['download_url'] assert parse_qsl(urlparse(url).query)[1] == ('os', 'win64') # Release builds = self.firefox_desktop.get_filtered_full_builds('release') url = builds[0]['platforms']['win64']['download_url'] assert parse_qsl(urlparse(url).query)[1] == ('os', 'win64') # ESR builds = self.firefox_desktop.get_filtered_full_builds('esr') url = builds[0]['platforms']['win64']['download_url'] assert parse_qsl(urlparse(url).query)[1] == ('os', 'win64') def test_linux64_build(self): builds = self.firefox_desktop.get_filtered_full_builds('release') url = builds[0]['platforms']['linux64']['download_url'] assert parse_qsl(urlparse(url).query)[1] == ('os', 'linux64') def test_esr_versions(self): """ESR versions should be dynamic based on data.""" with patch.object( self.firefox_desktop._storage, 'data', Mock(return_value=dict(FIREFOX_ESR='24.2')), ): assert self.firefox_desktop.esr_major_versions == [24] assert self.firefox_desktop.esr_minor_versions == ['24.2'] def test_esr_versions_prev(self): """ESR versions should show previous when available.""" with patch.object( self.firefox_desktop._storage, 'data', Mock(return_value=dict(FIREFOX_ESR='24.6.0', FIREFOX_ESR_NEXT='31.0.0')), ): assert self.firefox_desktop.esr_major_versions == [24, 31] assert self.firefox_desktop.esr_minor_versions == [ '24.6.0', '31.0.0' ] def test_esr_versions_no_latest(self): """ESR versions should not blow up if current version is broken.""" with patch.object( self.firefox_desktop._storage, 'data', Mock(return_value=dict(LATEST_FIREFOX_VERSION='Phoenix', FIREFOX_ESR='Albuquerque')), ): assert self.firefox_desktop.esr_major_versions == [] assert self.firefox_desktop.esr_minor_versions == [] def test_latest_major_version(self): """latest_major_version should return an int of the major version.""" with patch.object( self.firefox_desktop._storage, 'data', Mock(return_value=dict(LATEST_FIREFOX_VERSION='18.0.1')), ): assert self.firefox_desktop.latest_major_version('release') == 18 def test_latest_major_version_no_int(self): """latest_major_version should return 0 when no int.""" with patch.object( self.firefox_desktop._storage, 'data', Mock(return_value=dict(LATEST_FIREFOX_VERSION='Phoenix')), ): assert self.firefox_desktop.latest_major_version('release') == 0 @patch.dict(os.environ, FUNNELCAKE_64_LOCALES='en-US', FUNNELCAKE_64_PLATFORMS='win') def test_funnelcake_direct_links_en_us_win_only(self): """ Ensure funnelcake params are included for Windows en-US builds only. """ url = self.firefox_desktop.get_download_url('release', '45.0', 'win', 'en-US', force_direct=True, funnelcake_id='64') assert 'product=firefox-stub-f64' in url url = self.firefox_desktop.get_download_url('release', '45.0', 'win64', 'en-US', force_direct=True, funnelcake_id='64') assert 'product=firefox-stub-f64' not in url url = self.firefox_desktop.get_download_url('release', '45.0', 'win', 'de', force_direct=True, funnelcake_id='64') assert 'product=firefox-stub-f64' not in url url = self.firefox_desktop.get_download_url('release', '45.0', 'osx', 'en-US', force_direct=True, funnelcake_id='64') assert 'product=firefox-stub-f64' not in url def test_no_funnelcake_direct_links_if_not_configured(self): """ Ensure funnelcake params are included for Linux and OSX en-US builds only. """ url = self.firefox_desktop.get_download_url('release', '45.0', 'win', 'en-US', force_direct=True, funnelcake_id='64') assert '-f64' not in url url = self.firefox_desktop.get_download_url( 'release', '45.0', 'win', 'en-US', force_direct=True, force_full_installer=True, funnelcake_id='64', ) assert '-f64' not in url url = self.firefox_desktop.get_download_url( 'release', '45.0', 'win', 'en-US', force_direct=True, force_funnelcake=True, funnelcake_id='64', ) assert '-f64' not in url url = self.firefox_desktop.get_download_url('release', '45.0', 'osx', 'de', force_direct=True, funnelcake_id='64') assert '-f64' not in url url = self.firefox_desktop.get_download_url('release', '45.0', 'osx', 'en-US', force_direct=True, funnelcake_id='64') assert '-f64' not in url url = self.firefox_desktop.get_download_url('release', '45.0', 'osx', 'fr', force_direct=True, funnelcake_id='64') assert '-f64' not in url url = self.firefox_desktop.get_download_url('release', '45.0', 'linux', 'de', force_direct=True, funnelcake_id='64') assert '-f64' not in url url = self.firefox_desktop.get_download_url('release', '45.0', 'linux', 'en-US', force_direct=True, funnelcake_id='64') assert '-f64' not in url url = self.firefox_desktop.get_download_url('release', '45.0', 'linux', 'fr', force_direct=True, funnelcake_id='64') assert '-f64' not in url def test_stub_installer_win_only(self): """ Ensure that builds not in the setting don't get stub. """ url = self.firefox_desktop.get_download_url('release', '19.0', 'osx', 'en-US') assert 'product=firefox-stub&' not in url url = self.firefox_desktop.get_download_url('beta', '20.0b4', 'win', 'fr') assert 'product=firefox-beta-stub&' in url url = self.firefox_desktop.get_download_url('beta', '20.0b4', 'win64', 'fr') assert 'product=firefox-beta-stub&' in url url = self.firefox_desktop.get_download_url('beta', '20.0b4', 'linux', 'fr') assert 'product=firefox-beta-stub&' not in url