Rietveld Code Review Tool
Help | Bug tracker | Discussion group | Source code

Side by Side Diff: tests/test_xtm_translate.py

Issue 29968558: Issue 7037 - [XTM Integration] Make REST API url customizable
Patch Set: Merged with changes from 7039 Created Sept. 17, 2019, 1:37 p.m.
Left:
Right:
Use n/p to move between diff chunks; N/P to move between comments.
Jump to:
View unified diff | Download patch
« no previous file with comments | « tests/test_xtm_api.py ('k') | tests/test_xtm_translations_utils.py » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 # This file is part of the Adblock Plus web scripts, 1 # This file is part of the Adblock Plus web scripts,
2 # Copyright (C) 2006-present eyeo GmbH 2 # Copyright (C) 2006-present eyeo GmbH
3 # 3 #
4 # Adblock Plus is free software: you can redistribute it and/or modify 4 # Adblock Plus is free software: you can redistribute it and/or modify
5 # it under the terms of the GNU General Public License version 3 as 5 # it under the terms of the GNU General Public License version 3 as
6 # published by the Free Software Foundation. 6 # published by the Free Software Foundation.
7 # 7 #
8 # Adblock Plus is distributed in the hope that it will be useful, 8 # Adblock Plus is distributed in the hope that it will be useful,
9 # but WITHOUT ANY WARRANTY; without even the implied warranty of 9 # but WITHOUT ANY WARRANTY; without even the implied warranty of
10 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 10 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
57 @pytest.fixture 57 @pytest.fixture
58 def env_valid_token(): 58 def env_valid_token():
59 old_env = os.environ 59 old_env = os.environ
60 os.environ = _ENV_TOKEN_VALID 60 os.environ = _ENV_TOKEN_VALID
61 yield True 61 yield True
62 os.environ = old_env 62 os.environ = old_env
63 63
64 64
65 @pytest.mark.script_launch_mode('subprocess') 65 @pytest.mark.script_launch_mode('subprocess')
66 @pytest.mark.parametrize('args,exp_msg', [ 66 @pytest.mark.parametrize('args,exp_msg', [
67 (['-h'], 'usage: xtm_translations.py [-h] [-v] ' 67 (['-h'], 'usage: xtm_translations.py [-h] [-v] [--api-urlAPI_URL]'
68 '{login,create,upload,download} ...'), 68 '{login,create,upload,download} ...'),
69 (['create', '-h'], 'usage: xtm_translations.py create [-h] --name NAME ' 69 (['create', '-h'], 'usage: xtm_translations.py create [-h] --name NAME '
70 '--desc DESC --customer-id CUSTOMER_ID --ref-id REF_ID ' 70 '--desc DESC --customer-id CUSTOMER_ID --ref-id REF_ID '
71 '[--workflow-id WORKFLOW_ID] [--source-lang ' 71 '[--workflow-id WORKFLOW_ID] [--source-lang '
72 'SOURCE_LANG] [--save-id] [--workflow-name ' 72 'SOURCE_LANG] [--save-id] [--workflow-name '
73 'WORKFLOW_NAME] [source_dir]'), 73 'WORKFLOW_NAME] [source_dir]'),
74 (['upload', '-h'], 'usage: xtm_translations.py upload [-h] ' 74 (['upload', '-h'], 'usage: xtm_translations.py upload [-h] '
75 '[--no-overwrite] [source_dir]'), 75 '[--no-overwrite] [source_dir]'),
76 (['download', '-h'], 'usage: xtm_translations.py download [-h] ' 76 (['download', '-h'], 'usage: xtm_translations.py download [-h] '
77 '[source_dir]'), 77 '[source_dir]'),
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
109 @pytest.mark.script_launch_mode('subprocess') 109 @pytest.mark.script_launch_mode('subprocess')
110 @pytest.mark.parametrize('source_dir,args,env,exp_msg', [ 110 @pytest.mark.parametrize('source_dir,args,env,exp_msg', [
111 ('str(temp_site)', _CREATION_ARGS_INVALID_TYPE_1, _ENV_NO_TOKEN, 111 ('str(temp_site)', _CREATION_ARGS_INVALID_TYPE_1, _ENV_NO_TOKEN,
112 "--customer-id: invalid int value: 'foo'"), 112 "--customer-id: invalid int value: 'foo'"),
113 ('str(temp_site)', _CREATION_ARGS_INVALID_TYPE_2, _ENV_NO_TOKEN, 113 ('str(temp_site)', _CREATION_ARGS_INVALID_TYPE_2, _ENV_NO_TOKEN,
114 "--workflow-id: invalid int value: 'foo'"), 114 "--workflow-id: invalid int value: 'foo'"),
115 ('str(temp_site)', _CREATION_ARGS_DEFAULT, _ENV_NO_TOKEN, 115 ('str(temp_site)', _CREATION_ARGS_DEFAULT, _ENV_NO_TOKEN,
116 const.ErrorMessages.NO_TOKEN_PROVIDED.split('\n')[0]), 116 const.ErrorMessages.NO_TOKEN_PROVIDED.split('\n')[0]),
117 ('str(temp_site_valid_project)', _CREATION_ARGS_DEFAULT, _ENV_TOKEN_VALID, 117 ('str(temp_site_valid_project)', _CREATION_ARGS_DEFAULT, _ENV_TOKEN_VALID,
118 const.ErrorMessages.PROJECT_EXISTS.format(1234)), 118 const.ErrorMessages.PROJECT_EXISTS.format(1234)),
119 ('str(temp_site)', _CREATION_ARGS_DEFAULT, _ENV_TOKEN_INVALID, 119 ('str(temp_site_no_project)', _CREATION_ARGS_DEFAULT, _ENV_TOKEN_INVALID,
120 'Authentication failed'), 120 'Authentication failed'),
121 ]) 121 ])
122 def test_creation_error_messages(temp_site, intercept, script_runner, args, 122 def test_creation_error_messages(temp_site, intercept, script_runner, args,
123 source_dir, temp_site_valid_project, env, 123 source_dir, temp_site_valid_project, env,
124 exp_msg): 124 exp_msg, temp_site_no_project):
125 """Test if error cases are treated correctly when creating a project.""" 125 """Test if error cases are treated correctly when creating a project."""
126 cmd = list(_CMD_START) 126 cmd = list(_CMD_START)
127 cmd.extend(['create', eval(source_dir)]) 127 cmd.extend(['create', eval(source_dir)])
128 cmd.extend(args) 128 cmd.extend(args)
129 129
130 ret = script_runner.run(*cmd, env=env) 130 ret = script_runner.run(*cmd, env=env)
131 131
132 assert not ret.success 132 assert not ret.success
133 assert exp_msg in ret.stderr 133 assert exp_msg in ret.stderr
134 134
(...skipping 30 matching lines...) Expand all
165 def test_login(intercept, monkeypatch, capsys): 165 def test_login(intercept, monkeypatch, capsys):
166 """Test if the login functionality works as expected.""" 166 """Test if the login functionality works as expected."""
167 exp_output = const.Token.SAVE_COMMAND.format(const.Token.ENV_VAR, 167 exp_output = const.Token.SAVE_COMMAND.format(const.Token.ENV_VAR,
168 'TheXTM-APIToken-VALID') 168 'TheXTM-APIToken-VALID')
169 monkeypatch.setattr( 169 monkeypatch.setattr(
170 'cms.translations.xtm.cli.input_fn', 170 'cms.translations.xtm.cli.input_fn',
171 lambda inp: 'admin' if 'client name' in inp.lower() else '20', 171 lambda inp: 'admin' if 'client name' in inp.lower() else '20',
172 ) 172 )
173 monkeypatch.setattr('getpass.getpass', lambda prompt: 'pass') 173 monkeypatch.setattr('getpass.getpass', lambda prompt: 'pass')
174 174
175 generate_token(None) 175 generate_token(XtmMockArgs.LoginArgsNamespace)
176 out, err = capsys.readouterr() 176 out, err = capsys.readouterr()
177 177
178 assert err == '' 178 assert err == ''
179 assert exp_output in out 179 assert exp_output in out
180 180
181 181
182 def test_login_wrong_credentials(intercept, monkeypatch, capsys): 182 def test_login_wrong_credentials(intercept, monkeypatch, capsys):
183 """Test exception handling when generating the tokens.""" 183 """Test exception handling when generating the tokens."""
184 monkeypatch.setattr( 184 monkeypatch.setattr(
185 'cms.translations.xtm.cli.input_fn', 185 'cms.translations.xtm.cli.input_fn',
186 lambda inp: 'foo' if 'client name' in inp.lower() else '50', 186 lambda inp: 'foo' if 'client name' in inp.lower() else '50',
187 ) 187 )
188 monkeypatch.setattr('getpass.getpass', lambda prompt: 'pass') 188 monkeypatch.setattr('getpass.getpass', lambda prompt: 'pass')
189 monkeypatch.setattr('sys.exit', lambda x: sys.stderr.write(str(x))) 189 monkeypatch.setattr('sys.exit', lambda x: sys.stderr.write(str(x)))
190 190
191 generate_token(None) 191 generate_token(XtmMockArgs.LoginArgsNamespace)
192 out, err = capsys.readouterr() 192 out, err = capsys.readouterr()
193 193
194 assert 'Invalid credentials' in err 194 assert 'Invalid credentials' in err
195 assert out == '' 195 assert out == ''
196 196
197 197
198 @pytest.mark.script_launch_mode('subprocess') 198 @pytest.mark.script_launch_mode('subprocess')
199 @pytest.mark.parametrize('args,env,exp_msg', [ 199 @pytest.mark.parametrize('args,env,exp_msg', [
200 (['str(temp_site)'], _ENV_NO_TOKEN, 200 (['str(temp_site)'], _ENV_NO_TOKEN,
201 const.ErrorMessages.NO_TOKEN_PROVIDED.split('\n')[0]), 201 const.ErrorMessages.NO_TOKEN_PROVIDED.split('\n')[0]),
(...skipping 10 matching lines...) Expand all
212 212
213 assert not ret.success 213 assert not ret.success
214 assert exp_msg in ret.stderr 214 assert exp_msg in ret.stderr
215 215
216 216
217 def test_upload_too_many_languages(intercept_too_many_targets, 217 def test_upload_too_many_languages(intercept_too_many_targets,
218 env_valid_token, temp_site_valid_project): 218 env_valid_token, temp_site_valid_project):
219 namespace = _UploadArgsNamespace() 219 namespace = _UploadArgsNamespace()
220 namespace.source_dir = str(temp_site_valid_project) 220 namespace.source_dir = str(temp_site_valid_project)
221 221
222 with pytest.raises(Exception) as err: 222 with pytest.raises(SystemExit) as err:
223 main_project_handler(namespace) 223 main_project_handler(namespace)
224 224
225 assert 'languages are enabled in the API, but not listed in locales' in \ 225 assert ('languages are enabled in the API, but not listed in locales' in
226 str(err.value) 226 str(err.value))
227 227
228 228
229 def test_upload_successful(intercept, env_valid_token, 229 def test_upload_successful(intercept, env_valid_token,
230 temp_site_valid_project, monkeypatch, capsys): 230 temp_site_valid_project, monkeypatch, capsys):
231 namespace = _UploadArgsNamespace() 231 namespace = _UploadArgsNamespace()
232 namespace.source_dir = str(temp_site_valid_project) 232 namespace.source_dir = str(temp_site_valid_project)
233 monkeypatch.setattr('logging.info', lambda x: sys.stderr.write(x)) 233 monkeypatch.setattr('logging.info', lambda x: sys.stderr.write(x))
234 234
235 main_project_handler(namespace) 235 main_project_handler(namespace)
236 _, err = capsys.readouterr() 236 _, err = capsys.readouterr()
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
274 274
275 main_project_handler(namespace) 275 main_project_handler(namespace)
276 276
277 with open(os.path.join(temp_site_valid_project, 'locales', 'de', 277 with open(os.path.join(temp_site_valid_project, 'locales', 'de',
278 'file.json')) as f: 278 'file.json')) as f:
279 assert json.dumps({'foo': 'bar', 'faz': 'baz'}) == f.read() 279 assert json.dumps({'foo': 'bar', 'faz': 'baz'}) == f.read()
280 280
281 with open(os.path.join(temp_site_valid_project, 'locales', 'de', 'foo', 281 with open(os.path.join(temp_site_valid_project, 'locales', 'de', 'foo',
282 'file-utf8.json'), 'rb') as f: 282 'file-utf8.json'), 'rb') as f:
283 assert json.loads(f.read()) == {'foo': '\u1234'} 283 assert json.loads(f.read()) == {'foo': '\u1234'}
OLDNEW
« no previous file with comments | « tests/test_xtm_api.py ('k') | tests/test_xtm_translations_utils.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld