Skip to content

Commit 56c8f54

Browse files
committed
Add a test that starts MainActivity
To run on a build system, this requires mocking Android-specific APIs. https://phabricator.endlessm.com/T34155
1 parent f64677a commit 56c8f54

2 files changed

Lines changed: 68 additions & 2 deletions

File tree

src/kolibri_android/tests/__main__.py

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,6 @@ def main():
1111
selftest_runner = unittest.runner.TextTestRunner()
1212
selftest_runner.run(selftests)
1313

14-
selftest_suite = unittest.TestSuite()
15-
1614

1715
if __name__ == "__main__":
1816
main()
Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,68 @@
1+
import os
2+
import sys
3+
import tempfile
4+
from unittest import TestCase
5+
from unittest.mock import DEFAULT
6+
from unittest.mock import MagicMock
7+
from unittest.mock import patch
8+
9+
# TODO: Only mock these modules when Android is unavailable
10+
android_mock = MagicMock()
11+
jnius_mock = MagicMock()
12+
runnable_mock = MagicMock()
13+
14+
15+
@patch.dict(
16+
sys.modules,
17+
{
18+
"android.activity": android_mock,
19+
"jnius": jnius_mock,
20+
"kolibri_android.runnable": runnable_mock,
21+
},
22+
)
23+
class MainActivityTestCase(TestCase):
24+
def setUp(self):
25+
self.kolibri_home_tempdir = tempfile.TemporaryDirectory()
26+
os.environ["KOLIBRI_HOME"] = self.kolibri_home_tempdir.name
27+
28+
def tearDown(self):
29+
self.kolibri_home_tempdir.cleanup()
30+
self.kolibri_home_tempdir = None
31+
32+
@patch.multiple(
33+
"kolibri_android.android_utils",
34+
configure_webview=DEFAULT,
35+
get_signature_key_issuing_organization=DEFAULT,
36+
get_timezone_name=DEFAULT,
37+
get_version_name=DEFAULT,
38+
get_endless_key_uris=DEFAULT,
39+
get_home_folder=DEFAULT,
40+
)
41+
@patch.multiple(
42+
"kolibri_android.main_activity.kolibri_bus.KolibriAppProcessBus",
43+
run=DEFAULT,
44+
)
45+
def test_activity_run(self, **mocks):
46+
mocks["get_signature_key_issuing_organization"].return_value = "test"
47+
mocks["get_timezone_name"].return_value = "UTC"
48+
mocks["get_version_name"].return_value = "Unknown"
49+
mocks["get_endless_key_uris"].return_value = None
50+
mocks["get_home_folder"].return_value = self.kolibri_home_tempdir.name
51+
52+
from kolibri_android.main_activity.activity import MainActivity
53+
54+
main_activity = MainActivity()
55+
56+
mocks["configure_webview"].assert_called_once()
57+
58+
(on_load_fn, on_load_with_usb_fn, on_loading_ready_fn) = mocks[
59+
"configure_webview"
60+
].call_args.args
61+
62+
on_load_fn()
63+
64+
# FIXME: We can't use main_activity.run() because it loops forever.
65+
66+
main_activity.start_kolibri()
67+
68+
mocks["run"].assert_called_once()

0 commit comments

Comments
 (0)