Page Menu
Home
Phabricator (Chris)
Search
Configure Global Search
Log In
Files
F627237
language_spec.lua
No One
Temporary
Actions
Download File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Flag For Later
Award Token
Authored By
Unknown
Size
5 KB
Referenced Files
None
Subscribers
None
language_spec.lua
View Options
--[[
Tests for src/middleware/language.lua
Tests user language selection, group language override.
]]
describe
(
'middleware.language'
,
function
()
local
language_mw
local
test_helper
=
require
(
'spec.helpers.test_helper'
)
local
env
,
ctx
,
message
local
mock_en_gb
=
{
errors
=
{
connection
=
'Connection error.'
}
}
local
mock_de_de
=
{
errors
=
{
connection
=
'Verbindungsfehler.'
}
}
local
mock_pt_br
=
{
errors
=
{
connection
=
'Erro de conexao.'
}
}
before_each
(
function
()
package.loaded
[
'src.middleware.language'
]
=
nil
package.loaded
[
'src.core.i18n'
]
=
{
get
=
function
(
code
)
if
code
==
'de_de'
then
return
mock_de_de
end
if
code
==
'pt_br'
then
return
mock_pt_br
end
return
mock_en_gb
end
,
exists
=
function
(
code
)
return
code
==
'en_gb'
or
code
==
'de_de'
or
code
==
'pt_br'
end
,
}
package.loaded
[
'src.core.session'
]
=
{
get_setting
=
function
(
id
,
key
)
-- Return nil by default, tests override via redis
return
env
.
redis
.
get
(
'cache:setting:'
..
tostring
(
id
)
..
':'
..
key
)
end
,
}
language_mw
=
require
(
'src.middleware.language'
)
env
=
test_helper
.
setup
()
message
=
test_helper
.
make_message
()
ctx
=
test_helper
.
make_ctx
(
env
)
end
)
after_each
(
function
()
test_helper
.
teardown
(
env
)
end
)
describe
(
'name'
,
function
()
it
(
'should be "language"'
,
function
()
assert
.
are
.
equal
(
'language'
,
language_mw
.
name
)
end
)
end
)
describe
(
'default language'
,
function
()
it
(
'should default to en_gb'
,
function
()
local
new_ctx
=
language_mw
.
run
(
ctx
,
message
)
assert
.
are
.
equal
(
'en_gb'
,
new_ctx
.
lang_code
)
end
)
it
(
'should set lang table in context'
,
function
()
local
new_ctx
=
language_mw
.
run
(
ctx
,
message
)
assert
.
is_not_nil
(
new_ctx
.
lang
)
end
)
end
)
describe
(
'user language'
,
function
()
it
(
'should use user language setting when set'
,
function
()
env
.
redis
.
setex
(
'cache:setting:'
..
message
.
from
.
id
..
':language'
,
300
,
'de_de'
)
local
new_ctx
=
language_mw
.
run
(
ctx
,
message
)
assert
.
are
.
equal
(
'de_de'
,
new_ctx
.
lang_code
)
assert
.
are
.
same
(
mock_de_de
,
new_ctx
.
lang
)
end
)
it
(
'should fall back to Telegram language code when no setting'
,
function
()
message
.
from
.
language_code
=
'de_de'
local
new_ctx
=
language_mw
.
run
(
ctx
,
message
)
assert
.
are
.
equal
(
'de_de'
,
new_ctx
.
lang_code
)
end
)
it
(
'should ignore unsupported Telegram language code'
,
function
()
message
.
from
.
language_code
=
'zz_zz'
local
new_ctx
=
language_mw
.
run
(
ctx
,
message
)
assert
.
are
.
equal
(
'en_gb'
,
new_ctx
.
lang_code
)
end
)
it
(
'should prefer user setting over Telegram language'
,
function
()
message
.
from
.
language_code
=
'de_de'
env
.
redis
.
setex
(
'cache:setting:'
..
message
.
from
.
id
..
':language'
,
300
,
'pt_br'
)
local
new_ctx
=
language_mw
.
run
(
ctx
,
message
)
assert
.
are
.
equal
(
'pt_br'
,
new_ctx
.
lang_code
)
end
)
end
)
describe
(
'group language override'
,
function
()
it
(
'should use group language when force is set'
,
function
()
ctx
.
is_group
=
true
env
.
redis
.
setex
(
'cache:setting:'
..
message
.
chat
.
id
..
':force group language'
,
300
,
'true'
)
env
.
redis
.
setex
(
'cache:setting:'
..
message
.
chat
.
id
..
':group language'
,
300
,
'de_de'
)
local
new_ctx
=
language_mw
.
run
(
ctx
,
message
)
assert
.
are
.
equal
(
'de_de'
,
new_ctx
.
lang_code
)
end
)
it
(
'should not override in private chats'
,
function
()
ctx
.
is_group
=
false
env
.
redis
.
setex
(
'cache:setting:'
..
message
.
from
.
id
..
':language'
,
300
,
'pt_br'
)
local
new_ctx
=
language_mw
.
run
(
ctx
,
message
)
assert
.
are
.
equal
(
'pt_br'
,
new_ctx
.
lang_code
)
end
)
it
(
'should not override when force is not set'
,
function
()
ctx
.
is_group
=
true
env
.
redis
.
setex
(
'cache:setting:'
..
message
.
from
.
id
..
':language'
,
300
,
'pt_br'
)
env
.
redis
.
setex
(
'cache:setting:'
..
message
.
chat
.
id
..
':group language'
,
300
,
'de_de'
)
-- No 'force group language' key
local
new_ctx
=
language_mw
.
run
(
ctx
,
message
)
assert
.
are
.
equal
(
'pt_br'
,
new_ctx
.
lang_code
)
end
)
it
(
'should fall back to en_gb when forced but no group lang set'
,
function
()
ctx
.
is_group
=
true
env
.
redis
.
setex
(
'cache:setting:'
..
message
.
chat
.
id
..
':force group language'
,
300
,
'true'
)
-- No 'group language' set
local
new_ctx
=
language_mw
.
run
(
ctx
,
message
)
assert
.
are
.
equal
(
'en_gb'
,
new_ctx
.
lang_code
)
end
)
end
)
describe
(
'when message has no from'
,
function
()
it
(
'should still set a default language'
,
function
()
message
.
from
=
nil
local
new_ctx
=
language_mw
.
run
(
ctx
,
message
)
assert
.
are
.
equal
(
'en_gb'
,
new_ctx
.
lang_code
)
assert
.
is_not_nil
(
new_ctx
.
lang
)
end
)
end
)
describe
(
'always continues'
,
function
()
it
(
'should always return true'
,
function
()
local
_
,
should_continue
=
language_mw
.
run
(
ctx
,
message
)
assert
.
is_true
(
should_continue
)
end
)
end
)
end
)
File Metadata
Details
Attached
Mime Type
application/javascript
Expires
Sun, Nov 15, 1:47 AM (1 d, 21 h)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
134601
Default Alt Text
language_spec.lua (5 KB)
Attached To
Mode
R69 mattata
Attached
Detach File
Event Timeline