|
17 | 17 | import datetime |
18 | 18 | import unittest |
19 | 19 |
|
| 20 | +import flask |
| 21 | +import webtest |
| 22 | + |
20 | 23 | from clusterfuzz._internal.datastore import data_types |
| 24 | +from clusterfuzz._internal.tests.test_libs import helpers as test_helpers |
| 25 | +from clusterfuzz._internal.tests.test_libs import test_utils |
21 | 26 | from handlers import fuzzers |
| 27 | +from libs import form |
22 | 28 |
|
23 | 29 |
|
24 | 30 | class BaseEditHandlerTest(unittest.TestCase): |
@@ -56,3 +62,49 @@ def test_get_fuzzer_state_str(self): |
56 | 62 | self.assertNotIn('sample_testcase:', state_str) |
57 | 63 | self.assertNotIn('stats_columns:', state_str) |
58 | 64 | self.assertNotIn('stats_column_descriptions:', state_str) |
| 65 | + |
| 66 | + |
| 67 | +@test_utils.with_cloud_emulators('datastore') |
| 68 | +class CreateHandlerTest(unittest.TestCase): |
| 69 | + """Tests CreateHandler creates a new Fuzzer""" |
| 70 | + |
| 71 | + def setUp(self): |
| 72 | + test_helpers.patch(self, [ |
| 73 | + 'libs.access.has_access', |
| 74 | + 'libs.auth.get_current_user', |
| 75 | + 'libs.helpers.get_user_email', |
| 76 | + 'handlers.fuzzers.datetime', |
| 77 | + 'handlers.fuzzers.CreateHandler.get_upload', |
| 78 | + 'handlers.fuzzers.CreateHandler.apply_fuzzer_changes', |
| 79 | + ]) |
| 80 | + self.mock.has_access.return_value = True |
| 81 | + self.mock.get_current_user().email = 'test@user.com' |
| 82 | + self.mock.get_user_email.return_value = 'test@user.com' |
| 83 | + |
| 84 | + self.mock_time = datetime.datetime(2026, 1, 1, tzinfo=None) |
| 85 | + self.mock.datetime.datetime.now.return_value = self.mock_time |
| 86 | + self.mock.datetime.timezone = datetime.timezone |
| 87 | + |
| 88 | + flaskapp = flask.Flask('testflask') |
| 89 | + flaskapp.add_url_rule('/', view_func=fuzzers.CreateHandler.as_view('/')) |
| 90 | + self.app = webtest.TestApp(flaskapp) |
| 91 | + |
| 92 | + def test_create_fuzzer(self): |
| 93 | + """Test create fuzzer with basic properties.""" |
| 94 | + fuzzer_name = 'test_fuzzer' |
| 95 | + |
| 96 | + resp = self.app.post_json('/', { |
| 97 | + 'csrf_token': form.generate_csrf_token(), |
| 98 | + 'name': fuzzer_name, |
| 99 | + }) |
| 100 | + |
| 101 | + self.assertEqual(200, resp.status_int) |
| 102 | + |
| 103 | + self.mock.apply_fuzzer_changes.assert_called_once() |
| 104 | + |
| 105 | + fuzzer = self.mock.apply_fuzzer_changes.call_args[0][1] |
| 106 | + upload_info = self.mock.apply_fuzzer_changes.call_args[0][2] |
| 107 | + |
| 108 | + self.assertEqual(fuzzer.name, fuzzer_name) |
| 109 | + self.assertEqual(fuzzer.revision, 0) |
| 110 | + self.assertEqual(fuzzer.created_at, self.mock_time) |
0 commit comments