Skip to content
Snippets Groups Projects
Commit 7aa1c1c2 authored by Ned Batchelder's avatar Ned Batchelder
Browse files

Add tests for the new commands

parent f88181ac
No related merge requests found
......@@ -244,9 +244,6 @@ def i18n_release_push():
Push release-specific resources to Transifex.
"""
resources = find_release_resources()
if resources is None:
return
sh("i18n_tool transifex push " + " ".join(resources))
......@@ -259,9 +256,6 @@ def i18n_release_pull():
Pull release-specific translations from Transifex.
"""
resources = find_release_resources()
if resources is None:
return
sh("i18n_tool transifex pull " + " ".join(resources))
......@@ -273,7 +267,8 @@ def find_release_resources():
two resources defined named "release-*". Check that this is true. If
there's a problem, print messages about it.
Returns a list of resource names, or None if the file doesn't validate.
Returns a list of resource names, or raises ValueError if .tx/config
doesn't have two resources.
"""
# An entry in .tx/config for a release will look like this:
......@@ -298,9 +293,7 @@ def find_release_resources():
return resources
if len(resources) == 0:
print "You need two release-* resources defined to use this command."
raise ValueError("You need two release-* resources defined to use this command.")
else:
print "Strange Transifex config! Found these release-* resources:"
print "\n".join(resources)
return None
msg = "Strange Transifex config! Found these release-* resources:\n" + "\n".join(resources)
raise ValueError(msg)
"""
Tests for pavelib/i18n.py.
"""
import textwrap
import unittest
from mock import mock_open, patch
from paver.easy import task
import pavelib.i18n
from pavelib.paver_tests.utils import PaverTestCase
TX_CONFIG_SIMPLE = """\
[main]
host = https://www.transifex.com
[edx-platform.django-partial]
file_filter = conf/locale/<lang>/LC_MESSAGES/django-partial.po
source_file = conf/locale/en/LC_MESSAGES/django-partial.po
source_lang = en
type = PO
[edx-platform.django-studio]
file_filter = conf/locale/<lang>/LC_MESSAGES/django-studio.po
source_file = conf/locale/en/LC_MESSAGES/django-studio.po
source_lang = en
type = PO
"""
TX_CONFIG_RELEASE = TX_CONFIG_SIMPLE + """\
[edx-platform.release-zebrawood]
file_filter = conf/locale/<lang>/LC_MESSAGES/django.po
source_file = conf/locale/en/LC_MESSAGES/django.po
source_lang = en
type = PO
[edx-platform.release-zebrawood-js]
file_filter = conf/locale/<lang>/LC_MESSAGES/djangojs.po
source_file = conf/locale/en/LC_MESSAGES/djangojs.po
source_lang = en
type = PO
"""
def mocked_i18n_open(*content):
"""
Helper decorator to mock open() in pavelib.i18n.
Arguments:
content (str): any number of strings, which are dedented, then
concatenated, and then returned as f.read() when pavelib.i18n opens
a file.
"""
read_data = "".join(textwrap.dedent(c) for c in content)
return patch.object(pavelib.i18n, 'open', create=True, new=mock_open(read_data=read_data))
@task
def do_nothing():
"""
Don't do anything, for replacing prerequisite tasks we want to skip.
"""
pass
class FindReleaseResourcesTest(unittest.TestCase):
"""
Tests of pavelib/i18n.py:find_release_resources.
"""
@mocked_i18n_open(TX_CONFIG_SIMPLE)
def test_no_resources(self):
errmsg = r"You need two release-\* resources defined to use this command."
with self.assertRaisesRegexp(ValueError, errmsg):
pavelib.i18n.find_release_resources()
@mocked_i18n_open(TX_CONFIG_SIMPLE, """\
[edx-platform.release-zebrawood]
file_filter = conf/locale/<lang>/LC_MESSAGES/django.po
source_file = conf/locale/en/LC_MESSAGES/django.po
source_lang = en
type = PO
""")
def test_one_resource(self):
errmsg = r"Strange Transifex config! Found these release-\* resources:\nedx-platform.release-zebrawood"
with self.assertRaisesRegexp(ValueError, errmsg):
pavelib.i18n.find_release_resources()
@mocked_i18n_open(TX_CONFIG_RELEASE)
def test_good_resources(self):
self.assertEqual(
pavelib.i18n.find_release_resources(),
['edx-platform.release-zebrawood', 'edx-platform.release-zebrawood-js'],
)
class ReleasePushPullTest(PaverTestCase):
"""
Tests of i18n_release_push and i18n_release_pull.
"""
@mocked_i18n_open(TX_CONFIG_SIMPLE)
@patch.object(pavelib.i18n, 'i18n_generate', new=do_nothing)
def test_cant_push_nothing(self):
with self.assertRaises(SystemExit) as sysex:
pavelib.i18n.i18n_release_push()
# Check that we exited with a failure status code.
self.assertEqual(sysex.exception.args, (1,))
@mocked_i18n_open(TX_CONFIG_SIMPLE)
def test_cant_pull_nothing(self):
with self.assertRaises(SystemExit) as sysex:
pavelib.i18n.i18n_release_pull()
# Check that we exited with a failure status code.
self.assertEqual(sysex.exception.args, (1,))
@mocked_i18n_open(TX_CONFIG_RELEASE)
@patch.object(pavelib.i18n, 'i18n_generate', new=do_nothing)
@patch.object(pavelib.i18n, 'sh')
def test_can_push_release(self, mock_sh):
pavelib.i18n.i18n_release_push()
mock_sh.assert_called_once_with(
'i18n_tool transifex push edx-platform.release-zebrawood edx-platform.release-zebrawood-js'
)
@mocked_i18n_open(TX_CONFIG_RELEASE)
@patch.object(pavelib.i18n, 'sh')
def test_can_pull_release(self, mock_sh):
pavelib.i18n.i18n_release_pull()
mock_sh.assert_called_once_with(
'i18n_tool transifex pull edx-platform.release-zebrawood edx-platform.release-zebrawood-js'
)
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment