getappmap / getappmap/appmap-python

Test Failures on Misago Project with AppMap Enabled

Open
#252 1 comment 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

bug
Dominant language
Python
Stars
104
Forks
17
PR merge metrics
No merged PRs in 30d

Description

Repo: Misago
AppMap Version: appmap>=1.1.0.dev0
Python Version: Python 3.11.4

With AppMap enabled
FAILED misago/apiv2/threads/tests/test_thread_watch.py::test_thread_watch_api_enables_watched_thread_email_notifications - Failed: Expected to pe...
FAILED misago/apiv2/threads/tests/test_thread_watch.py::test_thread_watch_api_disables_watched_thread_email_notifications - Failed: Expected to p...
FAILED misago/apiv2/threads/tests/test_thread_watch.py::test_thread_watch_api_skips_update_if_notifications_are_not_changed - Failed: Expected to...
FAILED misago/acl/tests/test_providers.py::test_container_loads_providers - TypeError: Object of type ModelBase is not JSON serializable
FAILED misago/acl/tests/test_providers.py::test_loading_providers_second_time_raises_runtime_error - TypeError: Object of type ModelBase is not J...
FAILED misago/acl/tests/test_providers.py::test_container_returns_list_of_providers - TypeError: Object of type ModelBase is not JSON serializable
FAILED misago/acl/tests/test_providers.py::test_container_returns_dict_of_providers - TypeError: Object of type ModelBase is not JSON serializable
FAILED misago/acl/tests/test_providers.py::test_getter_returns_registered_type_annotator - TypeError: Object of type type is not JSON serializable
FAILED misago/acl/tests/test_providers.py::test_container_returns_list_of_user_acl_serializers - TypeError: Object of type ModelBase is not JSON ...
FAILED misago/acl/tests/test_providers.py::test_getter_returns_registered_user_acl_serializer - TypeError: Object of type ModelBase is not JSON s...
============================================= 10 failed, 3411 passed, 4 warnings in 995.33s (0:16:35) ==============================================
With AppMap disabled/uninstalled
=================================================== 3421 passed, 4 warnings in 280.42s (0:04:40) ===================================================
Verbose Logging for one of the tests
pytest --no-cov misago/apiv2/threads/tests/test_thread_watch.py::test_thread_watch_api_enables_watched_thread_email_notifications -v 
=============================================================== test session starts ================================================================
platform darwin -- Python 3.11.4, pytest-7.1.2, pluggy-1.0.0 -- /Users/petecheslock/repos/Misago/test/bin/python
cachedir: .pytest_cache
django: settings: devproject.test_settings (from env)
rootdir: /Users/petecheslock/repos/Misago, configfile: pytest.ini
plugins: anyio-3.6.1, split-0.8.1, snapshottest-0.6.0, mock-3.8.2, Faker-13.15.1, cov-4.0.0, django-4.5.2
collected 1 item                                                                                                                                   

misago/apiv2/threads/tests/test_thread_watch.py::test_thread_watch_api_enables_watched_thread_email_notifications FAILED                     [100%]

===================================================================== FAILURES =====================================================================
_________________________________________ test_thread_watch_api_enables_watched_thread_email_notifications _________________________________________

user = <User: User>, thread = <Thread: Test thread>, user_client = <misago.test.MisagoClient object at 0x11e0a12d0>
django_assert_num_queries = functools.partial(<function _assert_num_queries at 0x1061cd3a0>, <_pytest.config.Config object at 0x105461fd0>)

    def test_thread_watch_api_enables_watched_thread_email_notifications(
        user, thread, user_client, django_assert_num_queries
    ):
        existing_watched_thread = WatchedThread.objects.create(
            user=user,
            category_id=thread.category_id,
            thread=thread,
            send_emails=False,
        )
    
>       with django_assert_num_queries(25):

misago/apiv2/threads/tests/test_thread_watch.py:66: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
../../.asdf/installs/python/3.11.4/lib/python3.11/contextlib.py:144: in __exit__
    next(self.gen)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

config = <_pytest.config.Config object at 0x105461fd0>, num = 25, exact = True, connection = None, info = None

    @contextmanager
    def _assert_num_queries(
        config,
        num: int,
        exact: bool = True,
        connection=None,
        info=None,
    ) -> Generator["django.test.utils.CaptureQueriesContext", None, None]:
        from django.test.utils import CaptureQueriesContext
    
        if connection is None:
            from django.db import connection as conn
        else:
            conn = connection
    
        verbose = config.getoption("verbose") > 0
        with CaptureQueriesContext(conn) as context:
            yield context
            num_performed = len(context)
            if exact:
                failed = num != num_performed
            else:
                failed = num_performed > num
            if failed:
                msg = "Expected to perform {} queries {}{}".format(
                    num,
                    "" if exact else "or less ",
                    "but {} done".format(
                        num_performed == 1 and "1 was" or "{} were".format(num_performed)
                    ),
                )
                if info:
                    msg += "\n{}".format(info)
                if verbose:
                    sqls = (q["sql"] for q in context.captured_queries)
                    msg += "\n\nQueries:\n========\n\n" + "\n\n".join(sqls)
                else:
                    msg += " (add -v option to show queries)"
>               pytest.fail(msg)
E               Failed: Expected to perform 25 queries but 26 were done
E               
E               Queries:
E               ========
E               
E               SELECT "misago_cache_cacheversion"."cache", "misago_cache_cacheversion"."version" FROM "misago_cache_cacheversion"
E               
E               SELECT "django_session"."session_key", "django_session"."session_data", "django_session"."expire_date" FROM "django_session" WHERE ("django_session"."expire_date" > '2023-09-01T18:15:01.189194+00:00'::timestamptz AND "django_session"."session_key" = '83jrxc4syy6dfkfp6ch1emluyenotdfv') LIMIT 21
E               
E               SELECT "misago_users_user"."id", "misago_users_user"."password", "misago_users_user"."last_login", "misago_users_user"."is_superuser", "misago_users_user"."username", "misago_users_user"."slug", "misago_users_user"."email", "misago_users_user"."email_hash", "misago_users_user"."joined_on", "misago_users_user"."joined_from_ip", "misago_users_user"."is_hiding_presence", "misago_users_user"."rank_id", "misago_users_user"."title", "misago_users_user"."requires_activation", "misago_users_user"."is_staff", "misago_users_user"."acl_key", "misago_users_user"."is_active", "misago_users_user"."is_active_staff_message", "misago_users_user"."is_deleting_account", "misago_users_user"."avatar_tmp", "misago_users_user"."avatar_src", "misago_users_user"."avatar_crop", "misago_users_user"."avatars", "misago_users_user"."is_avatar_locked", "misago_users_user"."avatar_lock_user_message", "misago_users_user"."avatar_lock_staff_message", "misago_users_user"."signature", "misago_users_user"."signature_parsed", "misago_users_user"."signature_checksum", "misago_users_user"."is_signature_locked", "misago_users_user"."signature_lock_user_message", "misago_users_user"."signature_lock_staff_message", "misago_users_user"."followers", "misago_users_user"."following", "misago_users_user"."limits_private_thread_invites_to", "misago_users_user"."unread_private_threads", "misago_users_user"."sync_unread_private_threads", "misago_users_user"."subscribe_to_started_threads", "misago_users_user"."subscribe_to_replied_threads", "misago_users_user"."unread_notifications", "misago_users_user"."watch_started_threads", "misago_users_user"."watch_replied_threads", "misago_users_user"."watch_new_private_threads_by_followed", "misago_users_user"."watch_new_private_threads_by_other_users", "misago_users_user"."notify_new_private_threads_by_followed", "misago_users_user"."notify_new_private_threads_by_other_users", "misago_users_user"."threads", "misago_users_user"."posts", "misago_users_user"."last_posted_on", "misago_users_user"."profile_fields", "misago_users_user"."agreements", "misago_users_rank"."id", "misago_users_rank"."name", "misago_users_rank"."slug", "misago_users_rank"."description", "misago_users_rank"."title", "misago_users_rank"."css_class", "misago_users_rank"."is_default", "misago_users_rank"."is_tab", "misago_users_rank"."order", "misago_users_online"."user_id", "misago_users_online"."last_click", "misago_users_bancache"."user_id", "misago_users_bancache"."ban_id", "misago_users_bancache"."cache_version", "misago_users_bancache"."user_message", "misago_users_bancache"."staff_message", "misago_users_bancache"."expires_on" FROM "misago_users_user" LEFT OUTER JOIN "misago_users_rank" ON ("misago_users_user"."rank_id" = "misago_users_rank"."id") LEFT OUTER JOIN "misago_users_online" ON ("misago_users_user"."id" = "misago_users_online"."user_id") LEFT OUTER JOIN "misago_users_bancache" ON ("misago_users_user"."id" = "misago_users_bancache"."user_id") WHERE "misago_users_user"."id" = 1 LIMIT 21
E               
E               DECLARE "_django_curs_8436375680_sync_81" NO SCROLL CURSOR WITHOUT HOLD FOR SELECT "misago_users_ban"."id", "misago_users_ban"."check_type", "misago_users_ban"."registration_only", "misago_users_ban"."banned_value", "misago_users_ban"."user_message", "misago_users_ban"."staff_message", "misago_users_ban"."expires_on", "misago_users_ban"."is_checked" FROM "misago_users_ban" WHERE (NOT "misago_users_ban"."registration_only" AND "misago_users_ban"."check_type" = 2) ORDER BY "misago_users_ban"."id" DESC
E               
E               DECLARE "_django_curs_8436375680_sync_82" NO SCROLL CURSOR WITHOUT HOLD FOR SELECT "misago_users_ban"."id", "misago_users_ban"."check_type", "misago_users_ban"."registration_only", "misago_users_ban"."banned_value", "misago_users_ban"."user_message", "misago_users_ban"."staff_message", "misago_users_ban"."expires_on", "misago_users_ban"."is_checked" FROM "misago_users_ban" WHERE (NOT "misago_users_ban"."registration_only" AND "misago_users_ban"."check_type" IN (0, 1)) ORDER BY "misago_users_ban"."id" DESC
E               
E               UPDATE "misago_users_bancache" SET "ban_id" = NULL, "cache_version" = 'QqNqVRF8', "user_message" = NULL, "staff_message" = NULL, "expires_on" = NULL WHERE "misago_users_bancache"."user_id" = 1
E               
E               INSERT INTO "misago_users_bancache" ("user_id", "ban_id", "cache_version", "user_message", "staff_message", "expires_on") VALUES (1, NULL, 'QqNqVRF8', NULL, NULL, NULL)
E               
E               SELECT "misago_acl_role"."id", "misago_acl_role"."name", "misago_acl_role"."special_role", "misago_acl_role"."permissions" FROM "misago_acl_role" INNER JOIN "misago_users_user_roles" ON ("misago_acl_role"."id" = "misago_users_user_roles"."role_id") WHERE "misago_users_user_roles"."user_id" = 1
E               
E               SELECT "misago_acl_role"."id", "misago_acl_role"."name", "misago_acl_role"."special_role", "misago_acl_role"."permissions" FROM "misago_acl_role" INNER JOIN "misago_users_rank_roles" ON ("misago_acl_role"."id" = "misago_users_rank_roles"."role_id") WHERE "misago_users_rank_roles"."rank_id" = 2
E               
E               DECLARE "_django_curs_8436375680_sync_83" NO SCROLL CURSOR WITHOUT HOLD FOR SELECT "misago_categories_rolecategoryacl"."id", "misago_categories_rolecategoryacl"."role_id", "misago_categories_rolecategoryacl"."category_id", "misago_categories_rolecategoryacl"."category_role_id", "misago_categories_categoryrole"."id", "misago_categories_categoryrole"."name", "misago_categories_categoryrole"."special_role", "misago_categories_categoryrole"."permissions" FROM "misago_categories_rolecategoryacl" INNER JOIN "misago_categories_categoryrole" ON ("misago_categories_rolecategoryacl"."category_role_id" = "misago_categories_categoryrole"."id") WHERE "misago_categories_rolecategoryacl"."role_id" IN (1, 8)
E               
E               SELECT "misago_categories_category"."id", "misago_categories_category"."parent_id", "misago_categories_category"."special_role", "misago_categories_category"."name", "misago_categories_category"."slug", "misago_categories_category"."short_name", "misago_categories_category"."color", "misago_categories_category"."description", "misago_categories_category"."is_closed", "misago_categories_category"."threads", "misago_categories_category"."posts", "misago_categories_category"."last_post_on", "misago_categories_category"."last_thread_id", "misago_categories_category"."last_thread_title", "misago_categories_category"."last_thread_slug", "misago_categories_category"."last_poster_id", "misago_categories_category"."last_poster_name", "misago_categories_category"."last_poster_slug", "misago_categories_category"."require_threads_approval", "misago_categories_category"."require_replies_approval", "misago_categories_category"."require_edits_approval", "misago_categories_category"."prune_started_after", "misago_categories_category"."prune_replied_after", "misago_categories_category"."archive_pruned_in_id", "misago_categories_category"."css_class", "misago_categories_category"."lft", "misago_categories_category"."rght", "misago_categories_category"."tree_id", "misago_categories_category"."level" FROM "misago_categories_category" WHERE ("misago_categories_category"."level" = 0 AND "misago_categories_category"."special_role" IN ('root_category', 'private_threads')) ORDER BY "misago_categories_category"."tree_id" ASC, "misago_categories_category"."lft" ASC
E               
E               SELECT "misago_categories_category"."id", "misago_categories_category"."parent_id", "misago_categories_category"."special_role", "misago_categories_category"."name", "misago_categories_category"."slug", "misago_categories_category"."short_name", "misago_categories_category"."color", "misago_categories_category"."description", "misago_categories_category"."is_closed", "misago_categories_category"."threads", "misago_categories_category"."posts", "misago_categories_category"."last_post_on", "misago_categories_category"."last_thread_id", "misago_categories_category"."last_thread_title", "misago_categories_category"."last_thread_slug", "misago_categories_category"."last_poster_id", "misago_categories_category"."last_poster_name", "misago_categories_category"."last_poster_slug", "misago_categories_category"."require_threads_approval", "misago_categories_category"."require_replies_approval", "misago_categories_category"."require_edits_approval", "misago_categories_category"."prune_started_after", "misago_categories_category"."prune_replied_after", "misago_categories_category"."archive_pruned_in_id", "misago_categories_category"."css_class", "misago_categories_category"."lft", "misago_categories_category"."rght", "misago_categories_category"."tree_id", "misago_categories_category"."level" FROM "misago_categories_category" WHERE ("misago_categories_category"."tree_id" = 1 AND "misago_categories_category"."level" > 0) ORDER BY "misago_categories_category"."lft" ASC
E               
E               DECLARE "_django_curs_8436375680_sync_84" NO SCROLL CURSOR WITHOUT HOLD FOR SELECT "misago_categories_rolecategoryacl"."id", "misago_categories_rolecategoryacl"."role_id", "misago_categories_rolecategoryacl"."category_id", "misago_categories_rolecategoryacl"."category_role_id", "misago_categories_categoryrole"."id", "misago_categories_categoryrole"."name", "misago_categories_categoryrole"."special_role", "misago_categories_categoryrole"."permissions" FROM "misago_categories_rolecategoryacl" INNER JOIN "misago_categories_categoryrole" ON ("misago_categories_rolecategoryacl"."category_role_id" = "misago_categories_categoryrole"."id") WHERE "misago_categories_rolecategoryacl"."role_id" IN (1, 8)
E               
E               SELECT "misago_categories_category"."id", "misago_categories_category"."parent_id", "misago_categories_category"."special_role", "misago_categories_category"."name", "misago_categories_category"."slug", "misago_categories_category"."short_name", "misago_categories_category"."color", "misago_categories_category"."description", "misago_categories_category"."is_closed", "misago_categories_category"."threads", "misago_categories_category"."posts", "misago_categories_category"."last_post_on", "misago_categories_category"."last_thread_id", "misago_categories_category"."last_thread_title", "misago_categories_category"."last_thread_slug", "misago_categories_category"."last_poster_id", "misago_categories_category"."last_poster_name", "misago_categories_category"."last_poster_slug", "misago_categories_category"."require_threads_approval", "misago_categories_category"."require_replies_approval", "misago_categories_category"."require_edits_approval", "misago_categories_category"."prune_started_after", "misago_categories_category"."prune_replied_after", "misago_categories_category"."archive_pruned_in_id", "misago_categories_category"."css_class", "misago_categories_category"."lft", "misago_categories_category"."rght", "misago_categories_category"."tree_id", "misago_categories_category"."level" FROM "misago_categories_category" WHERE "misago_categories_category"."tree_id" = 1 ORDER BY "misago_categories_category"."lft" ASC
E               
E               SELECT "misago_categories_category"."id", "misago_categories_category"."parent_id", "misago_categories_category"."special_role", "misago_categories_category"."name", "misago_categories_category"."slug", "misago_categories_category"."short_name", "misago_categories_category"."color", "misago_categories_category"."description", "misago_categories_category"."is_closed", "misago_categories_category"."threads", "misago_categories_category"."posts", "misago_categories_category"."last_post_on", "misago_categories_category"."last_thread_id", "misago_categories_category"."last_thread_title", "misago_categories_category"."last_thread_slug", "misago_categories_category"."last_poster_id", "misago_categories_category"."last_poster_name", "misago_categories_category"."last_poster_slug", "misago_categories_category"."require_threads_approval", "misago_categories_category"."require_replies_approval", "misago_categories_category"."require_edits_approval", "misago_categories_category"."prune_started_after", "misago_categories_category"."prune_replied_after", "misago_categories_category"."archive_pruned_in_id", "misago_categories_category"."css_class", "misago_categories_category"."lft", "misago_categories_category"."rght", "misago_categories_category"."tree_id", "misago_categories_category"."level" FROM "misago_categories_category" WHERE "misago_categories_category"."special_role" = 'private_threads' LIMIT 21
E               
E               DECLARE "_django_curs_8436375680_sync_85" NO SCROLL CURSOR WITHOUT HOLD FOR SELECT "misago_categories_rolecategoryacl"."id", "misago_categories_rolecategoryacl"."role_id", "misago_categories_rolecategoryacl"."category_id", "misago_categories_rolecategoryacl"."category_role_id", "misago_categories_categoryrole"."id", "misago_categories_categoryrole"."name", "misago_categories_categoryrole"."special_role", "misago_categories_categoryrole"."permissions" FROM "misago_categories_rolecategoryacl" INNER JOIN "misago_categories_categoryrole" ON ("misago_categories_rolecategoryacl"."category_role_id" = "misago_categories_categoryrole"."id") WHERE "misago_categories_rolecategoryacl"."role_id" IN (1, 8)
E               
E               SELECT "misago_categories_category"."id", "misago_categories_category"."parent_id", "misago_categories_category"."special_role", "misago_categories_category"."name", "misago_categories_category"."slug", "misago_categories_category"."short_name", "misago_categories_category"."color", "misago_categories_category"."description", "misago_categories_category"."is_closed", "misago_categories_category"."threads", "misago_categories_category"."posts", "misago_categories_category"."last_post_on", "misago_categories_category"."last_thread_id", "misago_categories_category"."last_thread_title", "misago_categories_category"."last_thread_slug", "misago_categories_category"."last_poster_id", "misago_categories_category"."last_poster_name", "misago_categories_category"."last_poster_slug", "misago_categories_category"."require_threads_approval", "misago_categories_category"."require_replies_approval", "misago_categories_category"."require_edits_approval", "misago_categories_category"."prune_started_after", "misago_categories_category"."prune_replied_after", "misago_categories_category"."archive_pruned_in_id", "misago_categories_category"."css_class", "misago_categories_category"."lft", "misago_categories_category"."rght", "misago_categories_category"."tree_id", "misago_categories_category"."level" FROM "misago_categories_category" WHERE "misago_categories_category"."tree_id" = 1 ORDER BY "misago_categories_category"."lft" ASC
E               
E               SELECT "misago_categories_category"."id", "misago_categories_category"."parent_id", "misago_categories_category"."special_role", "misago_categories_category"."name", "misago_categories_category"."slug", "misago_categories_category"."short_name", "misago_categories_category"."color", "misago_categories_category"."description", "misago_categories_category"."is_closed", "misago_categories_category"."threads", "misago_categories_category"."posts", "misago_categories_category"."last_post_on", "misago_categories_category"."last_thread_id", "misago_categories_category"."last_thread_title", "misago_categories_category"."last_thread_slug", "misago_categories_category"."last_poster_id", "misago_categories_category"."last_poster_name", "misago_categories_category"."last_poster_slug", "misago_categories_category"."require_threads_approval", "misago_categories_category"."require_replies_approval", "misago_categories_category"."require_edits_approval", "misago_categories_category"."prune_started_after", "misago_categories_category"."prune_replied_after", "misago_categories_category"."archive_pruned_in_id", "misago_categories_category"."css_class", "misago_categories_category"."lft", "misago_categories_category"."rght", "misago_categories_category"."tree_id", "misago_categories_category"."level" FROM "misago_categories_category" WHERE "misago_categories_category"."special_role" = 'private_threads' LIMIT 21
E               
E               SELECT "misago_threads_thread"."id", "misago_threads_thread"."category_id", "misago_threads_thread"."title", "misago_threads_thread"."slug", "misago_threads_thread"."replies", "misago_threads_thread"."has_events", "misago_threads_thread"."has_poll", "misago_threads_thread"."has_reported_posts", "misago_threads_thread"."has_open_reports", "misago_threads_thread"."has_unapproved_posts", "misago_threads_thread"."has_hidden_posts", "misago_threads_thread"."started_on", "misago_threads_thread"."last_post_on", "misago_threads_thread"."first_post_id", "misago_threads_thread"."starter_id", "misago_threads_thread"."starter_name", "misago_threads_thread"."starter_slug", "misago_threads_thread"."last_post_id", "misago_threads_thread"."last_post_is_event", "misago_threads_thread"."last_poster_id", "misago_threads_thread"."last_poster_name", "misago_threads_thread"."last_poster_slug", "misago_threads_thread"."weight", "misago_threads_thread"."is_unapproved", "misago_threads_thread"."is_hidden", "misago_threads_thread"."is_closed", "misago_threads_thread"."best_answer_id", "misago_threads_thread"."best_answer_is_protected", "misago_threads_thread"."best_answer_marked_on", "misago_threads_thread"."best_answer_marked_by_id", "misago_threads_thread"."best_answer_marked_by_name", "misago_threads_thread"."best_answer_marked_by_slug", "misago_categories_category"."id", "misago_categories_category"."parent_id", "misago_categories_category"."special_role", "misago_categories_category"."name", "misago_categories_category"."slug", "misago_categories_category"."short_name", "misago_categories_category"."color", "misago_categories_category"."description", "misago_categories_category"."is_closed", "misago_categories_category"."threads", "misago_categories_category"."posts", "misago_categories_category"."last_post_on", "misago_categories_category"."last_thread_id", "misago_categories_category"."last_thread_title", "misago_categories_category"."last_thread_slug", "misago_categories_category"."last_poster_id", "misago_categories_category"."last_poster_name", "misago_categories_category"."last_poster_slug", "misago_categories_category"."require_threads_approval", "misago_categories_category"."require_replies_approval", "misago_categories_category"."require_edits_approval", "misago_categories_category"."prune_started_after", "misago_categories_category"."prune_replied_after", "misago_categories_category"."archive_pruned_in_id", "misago_categories_category"."css_class", "misago_categories_category"."lft", "misago_categories_category"."rght", "misago_categories_category"."tree_id", "misago_categories_category"."level" FROM "misago_threads_thread" INNER JOIN "misago_categories_category" ON ("misago_threads_thread"."category_id" = "misago_categories_category"."id") WHERE "misago_threads_thread"."id" = 1 LIMIT 21
E               
E               SELECT "misago_categories_category"."id", "misago_categories_category"."parent_id", "misago_categories_category"."special_role", "misago_categories_category"."name", "misago_categories_category"."slug", "misago_categories_category"."short_name", "misago_categories_category"."color", "misago_categories_category"."description", "misago_categories_category"."is_closed", "misago_categories_category"."threads", "misago_categories_category"."posts", "misago_categories_category"."last_post_on", "misago_categories_category"."last_thread_id", "misago_categories_category"."last_thread_title", "misago_categories_category"."last_thread_slug", "misago_categories_category"."last_poster_id", "misago_categories_category"."last_poster_name", "misago_categories_category"."last_poster_slug", "misago_categories_category"."require_threads_approval", "misago_categories_category"."require_replies_approval", "misago_categories_category"."require_edits_approval", "misago_categories_category"."prune_started_after", "misago_categories_category"."prune_replied_after", "misago_categories_category"."archive_pruned_in_id", "misago_categories_category"."css_class", "misago_categories_category"."lft", "misago_categories_category"."rght", "misago_categories_category"."tree_id", "misago_categories_category"."level" FROM "misago_categories_category" WHERE "misago_categories_category"."special_role" = 'root_category' LIMIT 21
E               
E               SELECT "misago_notifications_watchedthread"."id", "misago_notifications_watchedthread"."user_id", "misago_notifications_watchedthread"."category_id", "misago_notifications_watchedthread"."thread_id", "misago_notifications_watchedthread"."send_emails", "misago_notifications_watchedthread"."secret", "misago_notifications_watchedthread"."created_at", "misago_notifications_watchedthread"."read_at" FROM "misago_notifications_watchedthread" WHERE ("misago_notifications_watchedthread"."thread_id" = 1 AND "misago_notifications_watchedthread"."user_id" = 1) ORDER BY "misago_notifications_watchedthread"."id" ASC LIMIT 2
E               
E               UPDATE "misago_notifications_watchedthread" SET "send_emails" = true WHERE "misago_notifications_watchedthread"."id" = 1
E               
E               UPDATE "misago_users_online" SET "last_click" = '2023-09-01T18:15:01.222436+00:00'::timestamptz WHERE "misago_users_online"."user_id" = 1
E               
E               SAVEPOINT "s8436375680_x5"
E               
E               UPDATE "django_session" SET "session_data" = '.eJxVjzEPgjAQhf9LZ0PaCm1hdHDTRAfX5ihXadACVlwI_91WGTS3vfe9u3sz0TA9Wz0FfGjXkIowsvnVajAd-mTcXYBrnyU1ZAlYrZAdPs5uJf_iLYQ2Zo0tqERTlyIXANTmnBbAldrSLWcKTSGFiECdGyZkU1pkDVOlBWRoKKCKS7_ntRu0adF0pJrJK37ieh_3n8bjeDnvE-eGVILLjMZJZVyIJbzH2MHCLeCyvAGkvU-K:1qc8fd:P3MLaBXTGYFJf3_yYeTkG4J6knvsNI17d-bqJRkhI3Y', "expire_date" = '2023-09-15T18:15:01.223394+00:00'::timestamptz WHERE "django_session"."session_key" = '83jrxc4syy6dfkfp6ch1emluyenotdfv'
E               
E               RELEASE SAVEPOINT "s8436375680_x5"

test/lib/python3.11/site-packages/pytest_django/fixtures.py:608: Failed
-------------------------------------------------------------- Captured stderr setup ---------------------------------------------------------------
Creating test database for alias 'default'...
------------------------------------------------------------- Captured stderr teardown -------------------------------------------------------------
Destroying test database for alias 'default'...
================================================================= warnings summary =================================================================
test/lib/python3.11/site-packages/kombu/utils/compat.py:82
  /Users/petecheslock/repos/Misago/test/lib/python3.11/site-packages/kombu/utils/compat.py:82: DeprecationWarning: SelectableGroups dict interface is deprecated. Use select.
    for ep in importlib_metadata.entry_points().get(namespace, [])

test/lib/python3.11/site-packages/django/http/request.py:1
  /Users/petecheslock/repos/Misago/test/lib/python3.11/site-packages/django/http/request.py:1: DeprecationWarning: 'cgi' is deprecated and slated for removal in Python 3.13
    import cgi

test/lib/python3.11/site-packages/django/utils/encoding.py:266
  /Users/petecheslock/repos/Misago/test/lib/python3.11/site-packages/django/utils/encoding.py:266: DeprecationWarning: Use setlocale(), getencoding() and getlocale() instead
    encoding = locale.getdefaultlocale()[1] or 'ascii'

test/lib/python3.11/site-packages/certifi/core.py:36
  /Users/petecheslock/repos/Misago/test/lib/python3.11/site-packages/certifi/core.py:36: DeprecationWarning: path is deprecated. Use files() instead. Refer to https://importlib-resources.readthedocs.io/en/latest/using.html#migrating-from-legacy for migration advice.
    _CACERT_CTX = get_path("certifi", "cacert.pem")

-- Docs: https://docs.pytest.org/en/stable/how-to/capture-warnings.html
============================================================= short test summary info ==============================================================
FAILED misago/apiv2/threads/tests/test_thread_watch.py::test_thread_watch_api_enables_watched_thread_email_notifications - Failed: Expected to pe...
========================================================== 1 failed, 4 warnings in 4.40s ===========================================================


Steps used to recreate:

  1. Clone the appmap-analysis branch on Misago fork
  2. Create virtualenv python -m venv test
  3. Activate venv source test/bin/activate
  4. pip install pip install -r requirements.txt
  5. <Start Docker Desktop for Postgresql requirement>
  6. Run ./doit.sh to start the Postgresql container and export environment variables
  7. Run pytest pytest --no-cov or run a single failed test
pytest --no-cov misago/apiv2/threads/tests/test_thread_watch.py::test_thread_watch_api_enables_watched_thread_email_notifications -v

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Run the listed tests in misago/apiv2/threads/tests/test_thread_watch.py and misago/acl/tests/test_providers.py with AppMap enabled, then compare them with the disabled baseline. Investigate the query-count failures and JSON serialization errors; done means all 10 failures pass while the full suite remains green.

Written by the indexing model from the issue text.

Assessment

Tech stack
django, python
Domain
backend, testing
Issue type
Bug
Difficulty
4/5
Estimated time
3-5 days
Activity status
Stale
Clarity
Mostly clear
Newbie friendliness
35/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.