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]
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