django1/tests
Simon Charette 7806e45454 [2.2.x] Fixed #30769 -- Fixed a crash when filtering against a subquery JSON/HStoreField annotation.
This was a regression introduced by 7deeabc7c7
to address CVE-2019-14234.

Thanks Tim Kleinschmidt for the report and Mariusz for the tests.

Backport of 6c3dfba892 from master
2019-09-16 08:53:31 +02:00
..
absolute_url_overrides
admin_autodiscover
admin_changelist Refs #17198 -- Detected existing total ordering in admin changelist. 2019-01-17 16:22:14 +01:00
admin_checks [2.2.x] Fixed #30312 -- Relaxed admin check from django.contrib.sessions to SessionMiddleware subclasses. 2019-04-26 11:51:28 +02:00
admin_custom_urls Updated test URL patterns to use path() and re_path(). 2018-12-31 10:47:32 -05:00
admin_default_site Fixed #8500 -- Allowed overriding the default admin site instance. 2018-02-03 18:51:10 -05:00
admin_docs Updated test URL patterns to use path() and re_path(). 2018-12-31 10:47:32 -05:00
admin_filters [2.2.x] Fixed #30449 -- Fixed RelatedFieldListFilter/RelatedOnlyFieldListFilter to respect model's Meta.ordering. 2019-08-15 13:14:17 +02:00
admin_inlines [2.2.x] Fixed #30459 -- Delegated hide/show JS toggle to parent div. 2019-05-17 08:04:59 +02:00
admin_ordering Made reused RequestFactory instances class attributes. 2018-11-27 09:49:02 -05:00
admin_registration Used assertRaisesMessage() to test Django's error messages. 2017-07-29 19:07:23 -04:00
admin_scripts [2.2.x] Fixed #30312 -- Relaxed admin check from django.contrib.sessions to SessionMiddleware subclasses. 2019-04-26 11:51:28 +02:00
admin_utils Updated test URL patterns to use path() and re_path(). 2018-12-31 10:47:32 -05:00
admin_views Fixed #11154, #22270 -- Made proxy model permissions use correct content type. 2019-01-16 10:07:28 -05:00
admin_widgets [2.2.x] Fixed CVE-2019-12308 -- Made AdminURLFieldWidget validate URL before rendering clickable link. 2019-06-03 11:37:28 +02:00
aggregation [2.2.x] Fixed #30542 -- Fixed crash of numerical aggregations with filter. 2019-06-05 09:15:21 +02:00
aggregation_regress Refs #28643 -- Changed Variance() to use NumericOutputFieldMixin. 2019-01-14 14:39:46 -05:00
annotations Fixed #29542 -- Fixed invalid SQL if a Subquery from the HAVING clause is used in the GROUP BY clause. 2018-07-14 12:03:22 +02:00
app_loading Refs #23919 -- Removed django.utils._os.upath()/npath()/abspathu() usage. 2017-01-20 08:01:02 -05:00
apps Fixed #27685 -- Added watchman support to the autoreloader. 2019-01-13 20:33:47 -05:00
auth_tests [2.2.x] Fixed #30351 -- Handled pre-existing permissions in proxy model permissions data migration. 2019-04-27 21:08:46 +02:00
backends [2.2.x] Fixed #30307 -- Fixed incorrect quoting of database user password when using dbshell on Oracle. 2019-04-04 10:07:57 +02:00
base Sorted imports per isort 4.2.9. 2017-06-01 13:23:48 -04:00
bash_completion Removed parser.add_arguments() arguments that match the defaults. 2018-07-02 17:54:57 -04:00
basic Switched setUp() to setUpTestData() where possible in Django's tests. 2018-11-27 09:35:17 -05:00
builtin_server Refs #23919 -- Replaced super(ClassName, self) with super(). 2017-01-25 12:23:46 -05:00
bulk_create Renamed Sqlite and Sqlite3 references to SQLite. 2018-12-22 18:52:54 -05:00
cache Refs #28478 -- Deprecated TestCase's allow_database_queries and multi_db in favor of databases. 2019-01-10 19:11:21 -05:00
check_framework [2.2.x] Fixed #30673 -- Relaxed system check for db_table collision when database routers are installed by turning the error into a warning. 2019-08-08 21:40:06 +02:00
choices [2.2.x] Fixed #30280 -- Restored Model.get_FIELD_display()'s coercion of lazy strings. 2019-03-22 13:01:15 -04:00
conditional_processing Updated test URL patterns to use path() and re_path(). 2018-12-31 10:47:32 -05:00
constraints Fixed #30062 -- Added support for unique conditional constraints. 2019-01-12 09:50:20 -05:00
contenttypes_tests Refs #28478 -- Deprecated TestCase's allow_database_queries and multi_db in favor of databases. 2019-01-10 19:11:21 -05:00
context_processors Refs #28478 -- Deprecated TestCase's allow_database_queries and multi_db in favor of databases. 2019-01-10 19:11:21 -05:00
csrf_tests Fixed #29728 -- Prevented session resaving if CSRF cookie is unchanged. 2018-09-08 11:46:13 -04:00
custom_columns Followed style guide for model attribute ordering. 2018-12-27 19:34:14 -05:00
custom_lookups Switched setUp() to setUpTestData() where possible in Django's tests. 2018-11-27 09:35:17 -05:00
custom_managers Fixed #28838 -- Fixed Model.save() crash if the base manager annotates with a related field. 2018-01-25 10:12:04 -05:00
custom_methods
custom_migration_operations
custom_pk Used assertRaisesMessage() to test Django's error messages. 2017-07-29 19:07:23 -04:00
datatypes Fixed #29227 -- Allowed BooleanField to be null=True. 2018-03-20 12:10:10 -04:00
dates Fixed #28650 -- Added TruncWeek database function. 2018-01-27 09:59:13 -05:00
datetimes Fixed #28650 -- Added TruncWeek database function. 2018-01-27 09:59:13 -05:00
db_functions [2.2.x] Simplified test_transform()s in db_functions.math. 2019-03-14 19:42:21 -04:00
db_typecasts Refs #27804 -- Used subTest() in several tests. 2017-05-24 08:36:34 -04:00
db_utils Fixed #30071 -- Fixed error message when a 'default' database isn't provided. 2019-01-09 10:58:37 -05:00
dbshell [2.2.x] Refs #25175 -- Renamed test file referencing the old postgresql_psycopg2 engine. 2019-02-13 17:27:27 -05:00
decorators Refs #29253 -- Fixed method_decorator() crash if decorator sets a new attribute. 2018-06-27 11:46:07 -04:00
defer Fixed hanging indentation in various code. 2018-03-16 10:54:34 +01:00
defer_regress Decreased max_length for char fields unless absolutely needed. (#8485) 2017-05-10 17:33:46 +02:00
delete [2.2.x] Fixed #30330 -- Fixed setting of primary key to None during fast-delete. 2019-04-08 21:44:17 +02:00
delete_regress Switched setUp() to setUpTestData() where possible in Django's tests. 2018-11-27 09:35:17 -05:00
deprecation Silenced warnings in deprecation tests. 2018-07-11 09:10:31 -04:00
dispatch Refs #23919 -- Stopped inheriting from object to define new style classes. 2017-01-19 08:39:46 +01:00
distinct_on_fields Switched setUp() to setUpTestData() where possible in Django's tests. 2018-11-27 09:35:17 -05:00
empty
expressions [2.2.x] Fixed #30628 -- Adjusted expression identity to differentiate bound fields. 2019-07-10 08:04:45 +02:00
expressions_case Fixed #29227 -- Allowed BooleanField to be null=True. 2018-03-20 12:10:10 -04:00
expressions_window Refs #29851 -- Fixed test_subquery_row_range_rank() crash on MariaDB 10.2+. 2019-01-03 20:18:45 +01:00
extra_regress Switched setUp() to setUpTestData() where possible in Django's tests. 2018-11-27 09:35:17 -05:00
field_deconstruction Fixed #28937 -- Allowed BinaryField to be editable=True. 2017-12-22 16:31:46 -05:00
field_defaults
field_subclassing
file_storage Updated test URL patterns to use path() and re_path(). 2018-12-31 10:47:32 -05:00
file_uploads [2.2.x] Cleaned up exception message checking in some tests. 2019-03-15 19:28:13 -04:00
files Fixed #29705 -- Fixed ImageField RuntimeError crash for WebP files. 2018-08-23 09:04:25 -04:00
filtered_relation Refs #28010 -- Allowed reverse related fields in SELECT FOR UPDATE .. OF. 2017-10-28 20:33:42 -04:00
fixtures Used 4 space hanging indent for dictionaries. 2019-01-02 18:18:19 -05:00
fixtures_model_package Followed style guide for model attribute ordering. 2018-12-27 19:34:14 -05:00
fixtures_regress Followed style guide for model attribute ordering. 2018-12-27 19:34:14 -05:00
flatpages_tests Updated test URL patterns to use path() and re_path(). 2018-12-31 10:47:32 -05:00
force_insert_update Used assertRaisesMessage() to test Django's error messages. 2017-07-29 19:07:23 -04:00
foreign_object Adjusted code style of a few test data setup methods. 2018-11-27 09:48:22 -05:00
forms_tests [2.2.x] Fixed #30179 -- Fixed form Media merging when pairwise merging is insufficient. 2019-02-27 17:16:58 -05:00
from_db_value Switched setUp() to setUpTestData() where possible in Django's tests. 2018-11-27 09:35:17 -05:00
generic_inline_admin Updated test URL patterns to use path() and re_path(). 2018-12-31 10:47:32 -05:00
generic_relations Fixed #29612 -- Added GenericRelation prefetch_related() cache invalidation. 2018-08-17 14:58:45 -04:00
generic_relations_regress Fixed #29653 -- Fixed missing related_query_name reverse accessor if GenericRelation is declared on an abstract base model. 2018-08-10 12:17:26 -04:00
generic_views Fixed #29750 -- Added View.setup() hook for class-based views. 2018-12-21 19:01:11 -05:00
get_earliest_or_latest Fixed #29363 -- Added SimpleTestCase.assertWarnsMessage(). 2018-05-09 11:40:28 -04:00
get_object_or_404 Fixed #29135 -- Prevented get_object/list_or_404() from hiding AttributeError raised by QuerySet filtering. 2018-02-19 10:51:15 -05:00
get_or_create Switched setUp() to setUpTestData() where possible in Django's tests. 2018-11-27 09:35:17 -05:00
gis_tests [2.2.x] Fixed GeoIPTest.test04_city() failure with the latest GeoIP2 database. 2019-06-30 19:46:40 +02:00
handlers Fixed #30070, CVE-2019-3498 -- Fixed content spoofing possiblity in the default 404 page. 2019-01-03 21:21:55 -05:00
httpwrappers Refs #29784 -- Switched to https:// links where available. 2018-09-26 08:48:47 +02:00
humanize_tests Completed test coverage of contrib.humanize.templatetags.humanize. 2018-11-10 19:09:37 -05:00
i18n Fixed #27685 -- Added watchman support to the autoreloader. 2019-01-13 20:33:47 -05:00
import_error_package
indexes [2.2.x] Fixed #30754 -- Prevented inclusion of aliases in partial index conditions. 2019-09-10 10:04:12 +02:00
inline_formsets Refs #23919 -- Replaced super(ClassName, self) with super(). 2017-01-25 12:23:46 -05:00
inspectdb Refs #29004 -- Prevented inspectdb tests from flushing all tables data. 2018-12-24 15:32:39 -05:00
introspection [2.2.x] Fixed #30183 -- Added introspection of inline SQLite constraints. 2019-03-15 20:01:36 -04:00
invalid_models_tests Refs #28478 -- Prevented database feature based skipping on tests disallowing queries. 2019-01-14 16:16:30 -05:00
known_related_objects Refs #23968 -- Removed unnecessary lists, generators, and tuple calls. 2017-06-01 19:08:59 -04:00
logging_tests Used 4 space hanging indent for dictionaries. 2019-01-02 18:18:19 -05:00
lookup Switched setUp() to setUpTestData() where possible in Django's tests. 2018-11-27 09:35:17 -05:00
m2m_and_m2o Followed style guide for model attribute ordering. 2018-12-27 19:34:14 -05:00
m2m_intermediary
m2m_multiple
m2m_recursive Switched setUp() to setUpTestData() where possible in Django's tests. 2018-11-27 09:35:17 -05:00
m2m_regress Followed style guide for model attribute ordering. 2018-12-27 19:34:14 -05:00
m2m_signals Switched setUp() to setUpTestData() where possible in Django's tests. 2018-11-27 09:35:17 -05:00
m2m_through Fixed #9475 -- Allowed RelatedManager.add(), create(), etc. for m2m with a through model. 2019-01-15 11:12:17 -05:00
m2m_through_regress Fixed #9475 -- Allowed RelatedManager.add(), create(), etc. for m2m with a through model. 2019-01-15 11:12:17 -05:00
m2o_recursive Adjusted code style of a few test data setup methods. 2018-11-27 09:48:22 -05:00
mail Used 4 space hanging indent for dictionaries. 2019-01-02 18:18:19 -05:00
managers_regress Switched TestCase to SimpleTestCase where possible in Django's tests. 2018-11-27 08:58:44 -05:00
many_to_many [2.2.x] Removed unused imports. 2019-04-18 07:49:35 +02:00
many_to_one Followed style guide for model attribute ordering. 2018-12-27 19:34:14 -05:00
many_to_one_null Fixed #29447 -- Made RelatedManager.set() pass bulk argument to clear(). 2018-06-25 13:04:46 -04:00
max_lengths [2.2.x] Fixed #30295 -- Fixed max_lengths.tests.MaxLengthORMTests when run in isolation. 2019-03-28 12:05:57 -04:00
messages_tests Updated test URL patterns to use path() and re_path(). 2018-12-31 10:47:32 -05:00
middleware [2.2.x] Corrected settings names in SecurityMiddleware tests. 2019-03-20 20:15:59 -04:00
middleware_exceptions Updated test URL patterns to use path() and re_path(). 2018-12-31 10:47:32 -05:00
migrate_signals Refs #23919 -- Stopped inheriting from object to define new style classes. 2017-01-19 08:39:46 +01:00
migration_test_data_persistence
migrations [2.2.x] Fixed #30412 -- Fixed crash when adding check constraints with OR'ed condition on Oracle and SQLite. 2019-04-30 13:43:02 +02:00
migrations2
model_fields [2.2.x] Fixed #30449 -- Fixed RelatedFieldListFilter/RelatedOnlyFieldListFilter to respect model's Meta.ordering. 2019-08-15 13:14:17 +02:00
model_forms Used 4 space hanging indent for dictionaries. 2019-01-02 18:18:19 -05:00
model_formsets Followed style guide for model attribute ordering. 2018-12-27 19:34:14 -05:00
model_formsets_regress Used 4 space hanging indent for dictionaries. 2019-01-02 18:18:19 -05:00
model_indexes Refs #28478 -- Prevented database feature based skipping on tests disallowing queries. 2019-01-14 16:16:30 -05:00
model_inheritance Fixed #29970, #30041 -- Made ModelBase.__new__() pass attrs without contribute_to_class() to type.__new__(). 2018-12-22 18:11:24 -05:00
model_inheritance_regress Fixed hanging indentation in various code. 2018-03-16 10:54:34 +01:00
model_meta Fixed #28750 -- Allowed models to define Meta.manager_inheritance_from_future for backwards compatibility. 2017-10-31 13:22:27 -04:00
model_options Fixed #30023 -- Prevented SQLite schema alterations while foreign key checks are enabled. 2018-12-15 18:51:59 -05:00
model_package
model_regress [2.2.x] Fixed #30254 -- Allowed model metaclasses to access the attribute dict in __init__(). 2019-03-14 21:23:19 -04:00
modeladmin [2.2.x] Refs #30097 -- Fixed typos in InlineModelAdmin.has_add_permission() deprecation comments. 2019-01-17 18:40:11 -05:00
multiple_database Refs #28478 -- Deprecated TestCase's allow_database_queries and multi_db in favor of databases. 2019-01-10 19:11:21 -05:00
mutually_referential
nested_foreign_keys Switched setUp() to setUpTestData() where possible in Django's tests. 2018-11-27 09:35:17 -05:00
no_models
null_fk
null_fk_ordering Followed style guide for model attribute ordering. 2018-12-27 19:34:14 -05:00
null_queries Used assertRaisesMessage() to test Django's error messages. 2017-07-29 19:07:23 -04:00
one_to_one Fixed typo in tests/one_to_one/tests.py docstring. 2018-02-12 08:44:49 -05:00
or_lookups Switched setUp() to setUpTestData() where possible in Django's tests. 2018-11-27 09:35:17 -05:00
order_with_respect_to Switched TestCase to SimpleTestCase where possible in Django's tests. 2018-11-27 08:58:44 -05:00
ordering [2.2.x] Fixed #30463 -- Fixed crash of deprecation message when Meta.ordering contains expressions. 2019-05-18 20:05:31 +02:00
pagination Switched setUp() to setUpTestData() where possible in Django's tests. 2018-11-27 09:35:17 -05:00
postgres_tests [2.2.x] Fixed #30769 -- Fixed a crash when filtering against a subquery JSON/HStoreField annotation. 2019-09-16 08:53:31 +02:00
prefetch_related Refs #28478 -- Deprecated TestCase's allow_database_queries and multi_db in favor of databases. 2019-01-10 19:11:21 -05:00
project_template Updated test URL patterns to use path() and re_path(). 2018-12-31 10:47:32 -05:00
properties Adjusted code style of a few test data setup methods. 2018-11-27 09:48:22 -05:00
proxy_model_inheritance Removed obsolete TODO in proxy_model_inheritance test. 2018-08-16 09:20:31 -04:00
proxy_models Updated test URL patterns to use path() and re_path(). 2018-12-31 10:47:32 -05:00
queries [2.2.x] Fixed #30628 -- Adjusted expression identity to differentiate bound fields. 2019-07-10 08:04:45 +02:00
queryset_pickle Switched setUp() to setUpTestData() where possible in Django's tests. 2018-11-27 09:35:17 -05:00
raw_query Fixed #29337 -- Added __len__() & __bool__() to RawQuerySet. 2018-04-19 12:46:31 -04:00
redirects_tests Updated test URL patterns to use path() and re_path(). 2018-12-31 10:47:32 -05:00
requests Fixed #20147 -- Added HttpRequest.headers. 2019-01-16 13:38:47 -05:00
requirements Fixed #27685 -- Added watchman support to the autoreloader. 2019-01-13 20:33:47 -05:00
reserved_names
resolve_url Updated test URL patterns to use path() and re_path(). 2018-12-31 10:47:32 -05:00
responses Refs #16470 -- Fixed typo in a FileResponse test. 2018-09-01 15:14:18 +02:00
reverse_lookup Switched setUp() to setUpTestData() where possible in Django's tests. 2018-11-27 09:35:17 -05:00
save_delete_hooks Refs #23919 -- Replaced super(ClassName, self) with super(). 2017-01-25 12:23:46 -05:00
schema [2.2.x] Refs #30172 -- Prevented removing a model Meta's index/unique_together from removing Meta constraints/indexes. 2019-03-17 21:28:49 -04:00
select_for_update Fixed #29949 -- Refactored db introspection identifier converters. 2018-11-21 09:06:50 +01:00
select_related Added a test for QuerySet.select_related() reverse caching. 2017-09-21 14:25:42 -04:00
select_related_onetoone Switched setUp() to setUpTestData() where possible in Django's tests. 2018-11-27 09:35:17 -05:00
select_related_regress
serializers [2.2.x] Fixed serializers test crash if PyYAML isn't installed. 2019-03-20 16:07:36 +01:00
servers [2.2.x] Fixed #30171 -- Fixed DatabaseError in servers tests. 2019-02-14 10:05:13 -05:00
sessions_tests Made reused RequestFactory instances class attributes. 2018-11-27 09:49:02 -05:00
settings_tests [2.2.x] Fixed CVE-2019-12781 -- Made HttpRequest always trust SECURE_PROXY_SSL_HEADER if set. 2019-07-01 07:50:48 +02:00
shell Replaced django.test.utils.patch_logger() with assertLogs(). 2018-05-07 09:34:00 -04:00
shortcuts Updated test URL patterns to use path() and re_path(). 2018-12-31 10:47:32 -05:00
signals Switched TestCase to SimpleTestCase where possible in Django's tests. 2018-11-27 08:58:44 -05:00
signed_cookies_tests
signing Refs #23919 -- Removed default 'utf-8' argument for str.encode()/decode(). 2017-02-09 09:03:47 -05:00
sitemaps_tests Refs #23829 -- Made ping_google command/function use https for the sitemap URL. 2019-01-11 10:32:22 -05:00
sites_framework Switched setUp() to setUpTestData() where possible in Django's tests. 2018-11-27 09:35:17 -05:00
sites_tests Refs #28478 -- Deprecated TestCase's allow_database_queries and multi_db in favor of databases. 2019-01-10 19:11:21 -05:00
staticfiles_tests [2.2.x] Fixed #30171 -- Fixed DatabaseError in servers tests. 2019-02-14 10:05:13 -05:00
str Fixed #27953 -- Added instance's pk to Model.__str__(). 2017-06-09 13:42:53 -04:00
string_lookup Refs #27795 -- Removed unneeded force_text calls 2017-03-04 18:18:21 +01:00
swappable_models Refs #27790 -- Reverted "Removed available_apps on TestCase subclasses." 2017-01-28 10:01:13 -05:00
syndication_tests Updated test URL patterns to use path() and re_path(). 2018-12-31 10:47:32 -05:00
template_backends Made reused RequestFactory instances class attributes. 2018-11-27 09:49:02 -05:00
template_loader
template_tests [2.2.X] Fixed CVE-2019-14232 -- Adjusted regex to avoid backtracking issues when truncating HTML. 2019-07-29 11:00:01 +02:00
templates Fixed #29375 -- Removed empty action attribute on HTML forms. 2018-05-02 09:20:04 -04:00
test_client [2.2.x] Cleaned up exception message checking in some tests. 2019-03-15 19:28:13 -04:00
test_client_regress Updated test URL patterns to use path() and re_path(). 2018-12-31 10:47:32 -05:00
test_exceptions
test_runner Fixed #28478 -- Make DiscoverRunner skip creating unused test databases. 2019-01-10 19:11:21 -05:00
test_runner_apps Fixed #28478 -- Make DiscoverRunner skip creating unused test databases. 2019-01-10 19:11:21 -05:00
test_utils [2.2.x] Fixed #30121 -- Fixed assertURLEqual() crash with reverse_lazy() URLs. 2019-01-21 09:31:45 -05:00
timezones [2.2.x] Fixed serializers tests for PyYAML 5.1+. 2019-03-14 18:37:46 +01:00
transaction_hooks Reverted "Fixed #27818 -- Replaced try/except/pass with contextlib.suppress()." 2017-09-07 08:16:21 -04:00
transactions Fixed #21171 -- Avoided starting a transaction when a single (or atomic queries) are executed. 2018-10-17 12:19:02 +02:00
unmanaged_models Sorted imports per isort 4.2.9. 2017-06-01 13:23:48 -04:00
update Switched setUp() to setUpTestData() where possible in Django's tests. 2018-11-27 09:35:17 -05:00
update_only_fields Moved choices inside of test models per coding style. 2018-12-10 09:28:49 -05:00
urlpatterns [2.2.x] Fixed spelling mistakes in comments and tests. 2019-02-11 08:56:10 -05:00
urlpatterns_reverse [2.2.x] Cleaned up exception message checking in some tests. 2019-03-15 19:28:13 -04:00
user_commands Updated test URL patterns to use path() and re_path(). 2018-12-31 10:47:32 -05:00
utils_tests [2.2.x] Fixed CVE-2019-14235 -- Fixed potential memory exhaustion in django.utils.encoding.uri_to_iri(). 2019-07-29 11:06:54 +02:00
validation Switched setUp() to setUpTestData() where possible in Django's tests. 2018-11-27 09:35:17 -05:00
validators Fixed #29860 -- Allowed BaseValidator to accept a callable limit_value. 2018-10-22 10:26:54 -04:00
version Fixed #27830 -- Used distutils.version.LooseVersion for version parsing. 2017-06-13 10:53:39 -04:00
view_tests [2.2.x] Removed unused imports. 2019-04-18 07:49:35 +02:00
wsgi Updated test URL patterns to use path() and re_path(). 2018-12-31 10:47:32 -05:00
.coveragerc
README.rst Refs #23919 -- Removed misc Python 2/3 references. 2017-01-25 13:59:25 -05:00
runtests.py Improved performance of runtests.py with os.scandir(). 2018-11-04 18:56:46 -05:00
test_sqlite.py
urls.py

README.rst

To run the test suite, first, create and activate a virtual environment. Then
install some requirements and run the tests::

    $ cd tests
    $ pip install -e ..
    $ pip install -r requirements/py3.txt
    $ ./runtests.py

For more information about the test suite, see
https://docs.djangoproject.com/en/dev/internals/contributing/writing-code/unit-tests/.