Skip to content

Conversation

@e-esakman
Copy link
Contributor

@e-esakman e-esakman commented Dec 8, 2025

Fixes: #5214

Issues Fixed:

  1. Fixed text overflow, Added clickable links in discussion room
  2. Fixed dark mode contrast issues
  3. Improved UI for creating rooms/ password reset

Changes in discussion room before

Before

before.mp4

After

Untitled.design.mp4

Email change

Before
image

After
image

image

Migration Note:

A schema migration (0261_alter_room_type.py) was added to fix a mismatch in the Room model’s type field choices.
The field originally used "org", but during room creation "organization" was being passed , causing the error:
“Select a valid choice. 'organization' is not one of the available choices.”
The migration ensures both the code and database use "organization" consistently.

Summary by CodeRabbit

  • New Features

    • Password reset confirmation and completion pages
    • Emoji picker with quick reactions
  • Improvements

    • Auto-linking and safer/sanitized message rendering
    • Dark-mode styling across chat UI
    • Redesigned room creation form with dynamic Custom Type field and captcha refresh
    • Improved room join/load behavior, breadcrumbs, in-page notifications, and message input UX
  • Chores

    • Standardized room type values (data migration applied)

✏️ Tip: You can customize this high-level summary in your review settings.

@github-actions
Copy link
Contributor

github-actions bot commented Dec 8, 2025

👋 Hi @e-esakman!

This pull request needs a peer review before it can be merged. Please request a review from a team member who is not:

  • The PR author
  • DonnieBLT
  • coderabbitai
  • copilot

Once a valid peer review is submitted, this check will pass automatically. Thank you!

@github-actions github-actions bot added migrations PR contains database migration files files-changed: 7 PR changes 7 files needs-peer-review PR needs peer review labels Dec 8, 2025
@coderabbitai
Copy link
Contributor

coderabbitai bot commented Dec 8, 2025

Walkthrough

Adds a migration to rename Room.type values ("org" ↔ "organization") and constrain choices; updates ROOM_TYPES; adds two password-reset templates; replaces room creation form with a card-style form and captcha/toggle; and significantly updates chat templates/JS for escaped/linkified messages, per-message styling, reactions/emoji, and notifications.

Changes

Cohort / File(s) Summary
Database & Model
website/migrations/0261_alter_room_type.py, website/models.py
Adds migration 0261 with RunPython forwards/backwards mapping Room.type values ("org""organization") and an AlterField making Room.type a CharField(max_length=20) with choices (project,bug,organization,custom); updates ROOM_TYPES to use "organization".
Password Reset Templates
website/templates/account/password_reset_done.html, website/templates/account/password_reset_from_key_done.html
Adds two new templates extending base.html that render password-reset completion UI with i18n and links back to login.
Room Form / Create UI
website/templates/room_form.html
Replaces {{ form.as_p }} with an explicit card-style form (name, type, conditional custom-type, description, optional captcha); adds client-side toggle for custom-type visibility and captcha refresh via /captcha/refresh/; preserves CSRF and per-field error rendering.
Chat UI & Client JS
website/templates/join_room.html, website/templates/rooms_list.html
Revamps client-side message rendering to escape content and linkify URLs (formatMessageWithLinks), adds per-message alignment/styling (current user vs others) and dark-mode classes, reorders reaction controls, introduces quick-emoji loader and emoji picker init, adds in-page notifications, improved input styling, and adjustments to WebSocket/reaction handling and auto-scroll.
Views & Tests
website/views/organization.py, website/tests/test_rooms.py
join_room now prefetches screenshots/tags and select_related("admin"), builds breadcrumbs and ensures session_key; tests updated to create Room with type="project".

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~45 minutes

  • Attention areas:
    • website/migrations/0261_alter_room_type.py — verify forward/back mapping correctness, ordering relative to the AlterField, idempotency and safety on partial runs.
    • website/models.py — search for remaining uses of the old "org" value across codebase, templates, fixtures, and tests.
    • website/templates/join_room.html / website/templates/rooms_list.html — review escaping, linkification, and DOM insertion to prevent XSS; confirm link attributes (rel, target) and break-word behavior.
    • Emoji picker, reactions, and WebSocket handling — validate initialization timing, offline/error handling, and UI/server state synchronization.
    • website/templates/room_form.html — confirm custom-type toggle and captcha refresh correctly update submitted values and server-side validation.

Pre-merge checks and finishing touches

❌ Failed checks (1 warning, 1 inconclusive)
Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 0.00% which is insufficient. The required threshold is 80.00%. You can run @coderabbitai generate docstrings to improve docstring coverage.
Out of Scope Changes check ❓ Inconclusive The migration (0261_alter_room_type.py) and Room model changes are necessary to fix data consistency issues that blocked room creation, directly supporting the PR objectives. However, the test file modification and some view optimizations (prefetch_related, select_related) appear tangential to the stated UI improvement goals. Clarify whether test updates and view query optimizations are essential to the PR scope, or if they should be split into separate changes to keep the focus on UI improvements.
✅ Passed checks (3 passed)
Check name Status Explanation
Title check ✅ Passed The title accurately summarizes the main changes: UI improvements for password reset pages and discussion room creation, which are the primary focus of the changeset.
Linked Issues check ✅ Passed All coding requirements from issue #5214 are addressed: text overflow fixed with break-word styling, clickable links implemented via formatMessageWithLinks, room creation UI improved with card-based layout, dark mode contrast issues resolved with dark-mode classes, and password reset/email change pages redesigned.
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
✨ Finishing touches
  • 📝 Generate docstrings
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

@github-actions github-actions bot added the pre-commit: passed Pre-commit checks passed label Dec 8, 2025
Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

🧹 Nitpick comments (5)
website/templates/account/password_reset_from_key_done.html (1)

1-32: Solid, dark-mode-friendly completion UI

Layout, semantics, and use of {% trans %} for primary copy look good and consistent with the rest of the account flow. If you later expand i18n, consider wrapping the title block text in {% trans %} as well, but this is not blocking.

website/templates/account/password_reset_done.html (1)

1-31: Password reset “email sent” screen looks correct

The layout and messaging are clear, accessible, and consistent with the completion template. As a minor future improvement, you could localize the <title> text using {% trans %}, but the current implementation is fine to ship.

website/templates/room_form.html (1)

85-114: Wire up the captcha reload icon to the refreshCaptcha helper

You define refreshCaptcha(event) to refresh the captcha via AJAX, but the reload icon link currently just navigates to {% url 'room_create' %} and never calls the helper. That makes the JS dead code and forces a full page reload to get a new captcha.

Hook the link to the helper while keeping the href as a graceful no-JS fallback:

-                            <a href="{% url 'room_create' %}"
-                               class="text-red-500 hover:text-red-600 transition duration-200"
-                               title="Reload captcha securely"
-                               rel="noopener noreferrer"
-                               aria-label="Reload captcha image safely">
+                            <a href="{% url 'room_create' %}"
+                               onclick="refreshCaptcha(event)"
+                               class="text-red-500 hover:text-red-600 transition duration-200"
+                               title="Reload captcha securely"
+                               rel="noopener noreferrer"
+                               aria-label="Reload captcha image safely">

The existing refreshCaptcha implementation below will then be exercised as intended.

Also applies to: 138-152

website/templates/join_room.html (1)

24-35: Use formatMessageWithLinks in appendMessage so live messages get clickable links too

Server-rendered messages are URL-linkified (|urlize) with good overflow handling, but WebSocket messages built in appendMessage still render plain escaped text. This means links are only clickable for historical messages, not for new ones.

You already introduced formatMessageWithLinks(content) that safely escapes and linkifies URLs; you can reuse it here and match the classes used in the template:

-    messageDiv.innerHTML = ` 
+    messageDiv.innerHTML = ` 
         <div class="flex items-start justify-between">
             <div class="flex-1">
                 <p class="text-sm font-medium">${escapeHtml(data.username)}</p>
-                <p class="text-sm text-gray-700 dark:text-gray-300">${escapeHtml(data.message)}</p>
+                <p class="text-sm text-gray-800 dark:text-gray-200 break-words whitespace-pre-wrap">
+                    ${formatMessageWithLinks(data.message)}
+                </p>
                 <div class="flex items-center gap-2 mt-1">
                     <span class="text-xs text-gray-500 dark:text-gray-500">just now</span>
                     <div class="reactions-container flex items-center gap-1 min-h-[28px]"></div>

This keeps usernames escaped, gives live messages the same link behavior as initial messages, and maintains dark-mode-friendly styling.

Also applies to: 468-535

website/templates/rooms_list.html (1)

63-80: Secure linkification for quick-chat messages looks good (optional robustness tweak)

The combination of escapeHtml and formatMessageWithLinks gives you clickable URLs in quick-chat while still escaping user content, which is the right tradeoff for XSS safety.

If you want to harden it slightly against unexpected null/non-string content values from the API, you can coerce before escaping:

-        function formatMessageWithLinks(content) {
-            let safeContent = escapeHtml(content);
+        function formatMessageWithLinks(content) {
+            if (typeof content !== 'string') {
+                content = content == null ? '' : String(content);
+            }
+            let safeContent = escapeHtml(content);

Not required for correctness, but it makes the helper more defensive.

Also applies to: 488-545

📜 Review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

Knowledge base: Disabled due to Reviews -> Disable Knowledge Base setting

📥 Commits

Reviewing files that changed from the base of the PR and between 051884a and 8397500.

📒 Files selected for processing (7)
  • website/migrations/0261_alter_room_type.py (1 hunks)
  • website/models.py (1 hunks)
  • website/templates/account/password_reset_done.html (1 hunks)
  • website/templates/account/password_reset_from_key_done.html (1 hunks)
  • website/templates/join_room.html (6 hunks)
  • website/templates/room_form.html (1 hunks)
  • website/templates/rooms_list.html (3 hunks)
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (2)
  • GitHub Check: Run Tests
  • GitHub Check: docker-test
🔇 Additional comments (1)
website/models.py (1)

2063-2072: ROOM_TYPES change looks consistent with the new migration

Updating the key from "org" to "organization" aligns the model with the new CharField choices and the updated templates; the enum surface is consistent and clear. No model-level issues here; data-migration concerns are noted alongside the migration itself.

@github-project-automation github-project-automation bot moved this from Backlog to Ready in 📌 OWASP BLT Project Board Dec 8, 2025
@github-actions github-actions bot added the tests: passed Django tests passed label Dec 8, 2025
Update room type from 'org' to 'organization' and vice versa.
@github-actions github-actions bot added the changes-requested PR has requested changes from a reviewer label Dec 8, 2025
@github-actions
Copy link
Contributor

github-actions bot commented Dec 8, 2025

❌ Pre-commit checks failed

The pre-commit hooks found issues that need to be fixed. Please run the following commands locally to fix them:

# Install pre-commit if you haven't already
pip install pre-commit

# Run pre-commit on all files
pre-commit run --all-files

# Or run pre-commit on staged files only
pre-commit run

After running these commands, the pre-commit hooks will automatically fix most issues.
Please review the changes, commit them, and push to your branch.

💡 Tip: You can set up pre-commit to run automatically on every commit by running:

pre-commit install
Pre-commit output
[INFO] Initializing environment for https://github.com/pre-commit/pre-commit-hooks.
[WARNING] repo `https://github.com/pre-commit/pre-commit-hooks` uses deprecated stage names (commit, push) which will be removed in a future version.  Hint: often `pre-commit autoupdate --repo https://github.com/pre-commit/pre-commit-hooks` will fix this.  if it does not -- consider reporting an issue to that repo.
[INFO] Initializing environment for https://github.com/pycqa/isort.
[WARNING] repo `https://github.com/pycqa/isort` uses deprecated stage names (commit, merge-commit, push) which will be removed in a future version.  Hint: often `pre-commit autoupdate --repo https://github.com/pycqa/isort` will fix this.  if it does not -- consider reporting an issue to that repo.
[INFO] Initializing environment for https://github.com/astral-sh/ruff-pre-commit.
[INFO] Initializing environment for https://github.com/djlint/djLint.
[INFO] Initializing environment for local.
[INFO] Installing environment for https://github.com/pre-commit/pre-commit-hooks.
[INFO] Once installed this environment will be reused.
[INFO] This may take a few minutes...
[INFO] Installing environment for https://github.com/pycqa/isort.
[INFO] Once installed this environment will be reused.
[INFO] This may take a few minutes...
[INFO] Installing environment for https://github.com/astral-sh/ruff-pre-commit.
[INFO] Once installed this environment will be reused.
[INFO] This may take a few minutes...
[INFO] Installing environment for https://github.com/djlint/djLint.
[INFO] Once installed this environment will be reused.
[INFO] This may take a few minutes...
[INFO] Installing environment for local.
[INFO] Once installed this environment will be reused.
[INFO] This may take a few minutes...
check python ast.........................................................Passed
check builtin type constructor use.......................................Passed
check yaml...............................................................Passed
fix python encoding pragma...............................................Passed
mixed line ending........................................................Passed
isort....................................................................Failed
- hook id: isort
- files were modified by this hook

Fixing /home/runner/work/BLT/BLT/website/migrations/0261_alter_room_type.py


For more information, see the pre-commit documentation.

@github-actions github-actions bot added pre-commit: failed Pre-commit checks failed and removed pre-commit: passed Pre-commit checks passed labels Dec 8, 2025
Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 2

📜 Review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

Knowledge base: Disabled due to Reviews -> Disable Knowledge Base setting

📥 Commits

Reviewing files that changed from the base of the PR and between 8397500 and 9d081ad.

📒 Files selected for processing (1)
  • website/migrations/0261_alter_room_type.py (1 hunks)
🧰 Additional context used
🧬 Code graph analysis (1)
website/migrations/0261_alter_room_type.py (1)
website/models.py (1)
  • Room (2062-2086)
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (2)
  • GitHub Check: Run Tests
  • GitHub Check: docker-test

@github-actions
Copy link
Contributor

github-actions bot commented Dec 8, 2025

❌ Tests failed

The Django tests found issues that need to be fixed. Please review the test output below and fix the failing tests.

How to run tests locally

# Install dependencies
poetry install --with dev

# Run all tests
poetry run python manage.py test

# Run tests with verbose output
poetry run python manage.py test -v 3

# Run a specific test
poetry run python manage.py test app.tests.TestClass.test_method
Test output
WARNING:root:No DATABASE_URL environment variable set, and so no databases setup
Reading .env file from /home/runner/work/BLT/BLT/.env
DATABASE_URL: not set
no database url detected in settings, using sqlite
DEBUG This service is instrumented using OpenTelemetry. OpenTelemetry or one of its components could not be imported; please add compatible versions of opentelemetry-api and opentelemetry-instrumentation packages in order to get Storage Tracing data.
/home/runner/.cache/pypoetry/virtualenvs/blt-yuw0N2NF-py3.11/lib/python3.11/site-packages/dj_rest_auth/registration/serializers.py:228: UserWarning: app_settings.USERNAME_REQUIRED is deprecated, use: app_settings.SIGNUP_FIELDS['username']['required']
  required=allauth_account_settings.USERNAME_REQUIRED,
/home/runner/.cache/pypoetry/virtualenvs/blt-yuw0N2NF-py3.11/lib/python3.11/site-packages/dj_rest_auth/registration/serializers.py:230: UserWarning: app_settings.EMAIL_REQUIRED is deprecated, use: app_settings.SIGNUP_FIELDS['email']['required']
  email = serializers.EmailField(required=allauth_account_settings.EMAIL_REQUIRED)
/home/runner/.cache/pypoetry/virtualenvs/blt-yuw0N2NF-py3.11/lib/python3.11/site-packages/dj_rest_auth/registration/serializers.py:288: UserWarning: app_settings.EMAIL_REQUIRED is deprecated, use: app_settings.SIGNUP_FIELDS['email']['required']
  email = serializers.EmailField(required=allauth_account_settings.EMAIL_REQUIRED)
Creating test database for alias 'default' ('file:memorydb_default?mode=memory&cache=shared')...
Found 267 test(s).
Traceback (most recent call last):
  File "/home/runner/work/BLT/BLT/manage.py", line 10, in <module>
    execute_from_command_line(sys.argv)
  File "/home/runner/.cache/pypoetry/virtualenvs/blt-yuw0N2NF-py3.11/lib/python3.11/site-packages/django/core/management/__init__.py", line 442, in execute_from_command_line
    utility.execute()
  File "/home/runner/.cache/pypoetry/virtualenvs/blt-yuw0N2NF-py3.11/lib/python3.11/site-packages/django/core/management/__init__.py", line 436, in execute
    self.fetch_command(subcommand).run_from_argv(self.argv)
  File "/home/runner/.cache/pypoetry/virtualenvs/blt-yuw0N2NF-py3.11/lib/python3.11/site-packages/django/core/management/commands/test.py", line 24, in run_from_argv
    super().run_from_argv(argv)
  File "/home/runner/.cache/pypoetry/virtualenvs/blt-yuw0N2NF-py3.11/lib/python3.11/site-packages/django/core/management/base.py", line 416, in run_from_argv
    self.execute(*args, **cmd_options)
  File "/home/runner/.cache/pypoetry/virtualenvs/blt-yuw0N2NF-py3.11/lib/python3.11/site-packages/django/core/management/base.py", line 460, in execute
    output = self.handle(*args, **options)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/runner/.cache/pypoetry/virtualenvs/blt-yuw0N2NF-py3.11/lib/python3.11/site-packages/django/core/management/commands/test.py", line 63, in handle
    failures = test_runner.run_tests(test_labels)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/runner/.cache/pypoetry/virtualenvs/blt-yuw0N2NF-py3.11/lib/python3.11/site-packages/django/test/runner.py", line 1092, in run_tests
    old_config = self.setup_databases(
                 ^^^^^^^^^^^^^^^^^^^^^
  File "/home/runner/.cache/pypoetry/virtualenvs/blt-yuw0N2NF-py3.11/lib/python3.11/site-packages/django/test/runner.py", line 990, in setup_databases
    return _setup_databases(
           ^^^^^^^^^^^^^^^^^
  File "/home/runner/.cache/pypoetry/virtualenvs/blt-yuw0N2NF-py3.11/lib/python3.11/site-packages/django/test/utils.py", line 204, in setup_databases
    connection.creation.create_test_db(
  File "/home/runner/.cache/pypoetry/virtualenvs/blt-yuw0N2NF-py3.11/lib/python3.11/site-packages/django/db/backends/base/creation.py", line 78, in create_test_db
    call_command(
  File "/home/runner/.cache/pypoetry/virtualenvs/blt-yuw0N2NF-py3.11/lib/python3.11/site-packages/django/core/management/__init__.py", line 194, in call_command
    return command.execute(*args, **defaults)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/runner/.cache/pypoetry/virtualenvs/blt-yuw0N2NF-py3.11/lib/python3.11/site-packages/django/core/management/base.py", line 460, in execute
    output = self.handle(*args, **options)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/runner/.cache/pypoetry/virtualenvs/blt-yuw0N2NF-py3.11/lib/python3.11/site-packages/django/core/management/base.py", line 107, in wrapper
    res = handle_func(*args, **kwargs)
          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/runner/.cache/pypoetry/virtualenvs/blt-yuw0N2NF-py3.11/lib/python3.11/site-packages/django/core/management/commands/migrate.py", line 114, in handle
    executor = MigrationExecutor(connection, self.migration_progress_callback)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/runner/.cache/pypoetry/virtualenvs/blt-yuw0N2NF-py3.11/lib/python3.11/site-packages/django/db/migrations/executor.py", line 18, in __init__
    self.loader = MigrationLoader(self.connection)
                  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/runner/.cache/pypoetry/virtualenvs/blt-yuw0N2NF-py3.11/lib/python3.11/site-packages/django/db/migrations/loader.py", line 58, in __init__
    self.build_graph()
  File "/home/runner/.cache/pypoetry/virtualenvs/blt-yuw0N2NF-py3.11/lib/python3.11/site-packages/django/db/migrations/loader.py", line 229, in build_graph
    self.load_disk()
  File "/home/runner/.cache/pypoetry/virtualenvs/blt-yuw0N2NF-py3.11/lib/python3.11/site-packages/django/db/migrations/loader.py", line 120, in load_disk
    migration_module = import_module(migration_path)
                       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/hostedtoolcache/Python/3.11.2/x64/lib/python3.11/importlib/__init__.py", line 126, in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "<frozen importlib._bootstrap>", line 1206, in _gcd_import
  File "<frozen importlib._bootstrap>", line 1178, in _find_and_load
  File "<frozen importlib._bootstrap>", line 1149, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 690, in _load_unlocked
  File "<frozen importlib._bootstrap_external>", line 940, in exec_module
  File "<frozen importlib._bootstrap>", line 241, in _call_with_frames_removed
  File "/home/runner/work/BLT/BLT/website/migrations/0261_alter_room_type.py", line 13, in <module>
    class Migration(migrations.Migration):
  File "/home/runner/work/BLT/BLT/website/migrations/0261_alter_room_type.py", line 22, in Migration
    field=models.CharField(
          ^^^^^^
NameError: name 'models' is not defined

For more information, see the Django testing documentation.

@github-actions github-actions bot added tests: failed Django tests failed and removed tests: passed Django tests passed labels Dec 8, 2025
@github-actions
Copy link
Contributor

github-actions bot commented Dec 8, 2025

❌ Pre-commit checks failed

The pre-commit hooks found issues that need to be fixed. Please run the following commands locally to fix them:

# Install pre-commit if you haven't already
pip install pre-commit

# Run pre-commit on all files
pre-commit run --all-files

# Or run pre-commit on staged files only
pre-commit run

After running these commands, the pre-commit hooks will automatically fix most issues.
Please review the changes, commit them, and push to your branch.

💡 Tip: You can set up pre-commit to run automatically on every commit by running:

pre-commit install
Pre-commit output
[INFO] Initializing environment for https://github.com/pre-commit/pre-commit-hooks.
[WARNING] repo `https://github.com/pre-commit/pre-commit-hooks` uses deprecated stage names (commit, push) which will be removed in a future version.  Hint: often `pre-commit autoupdate --repo https://github.com/pre-commit/pre-commit-hooks` will fix this.  if it does not -- consider reporting an issue to that repo.
[INFO] Initializing environment for https://github.com/pycqa/isort.
[WARNING] repo `https://github.com/pycqa/isort` uses deprecated stage names (commit, merge-commit, push) which will be removed in a future version.  Hint: often `pre-commit autoupdate --repo https://github.com/pycqa/isort` will fix this.  if it does not -- consider reporting an issue to that repo.
[INFO] Initializing environment for https://github.com/astral-sh/ruff-pre-commit.
[INFO] Initializing environment for https://github.com/djlint/djLint.
[INFO] Initializing environment for local.
[INFO] Installing environment for https://github.com/pre-commit/pre-commit-hooks.
[INFO] Once installed this environment will be reused.
[INFO] This may take a few minutes...
[INFO] Installing environment for https://github.com/pycqa/isort.
[INFO] Once installed this environment will be reused.
[INFO] This may take a few minutes...
[INFO] Installing environment for https://github.com/astral-sh/ruff-pre-commit.
[INFO] Once installed this environment will be reused.
[INFO] This may take a few minutes...
[INFO] Installing environment for https://github.com/djlint/djLint.
[INFO] Once installed this environment will be reused.
[INFO] This may take a few minutes...
[INFO] Installing environment for local.
[INFO] Once installed this environment will be reused.
[INFO] This may take a few minutes...
check python ast.........................................................Passed
check builtin type constructor use.......................................Passed
check yaml...............................................................Passed
fix python encoding pragma...............................................Passed
mixed line ending........................................................Passed
isort....................................................................Failed
- hook id: isort
- files were modified by this hook

Fixing /home/runner/work/BLT/BLT/website/migrations/0261_alter_room_type.py


For more information, see the pre-commit documentation.

@github-actions
Copy link
Contributor

github-actions bot commented Dec 8, 2025

❌ Tests failed

The Django tests found issues that need to be fixed. Please review the test output below and fix the failing tests.

How to run tests locally

# Install dependencies
poetry install --with dev

# Run all tests
poetry run python manage.py test

# Run tests with verbose output
poetry run python manage.py test -v 3

# Run a specific test
poetry run python manage.py test app.tests.TestClass.test_method
Test output
WARNING:root:No DATABASE_URL environment variable set, and so no databases setup
Reading .env file from /home/runner/work/BLT/BLT/.env
DATABASE_URL: not set
no database url detected in settings, using sqlite
DEBUG This service is instrumented using OpenTelemetry. OpenTelemetry or one of its components could not be imported; please add compatible versions of opentelemetry-api and opentelemetry-instrumentation packages in order to get Storage Tracing data.
/home/runner/.cache/pypoetry/virtualenvs/blt-yuw0N2NF-py3.11/lib/python3.11/site-packages/dj_rest_auth/registration/serializers.py:228: UserWarning: app_settings.USERNAME_REQUIRED is deprecated, use: app_settings.SIGNUP_FIELDS['username']['required']
  required=allauth_account_settings.USERNAME_REQUIRED,
/home/runner/.cache/pypoetry/virtualenvs/blt-yuw0N2NF-py3.11/lib/python3.11/site-packages/dj_rest_auth/registration/serializers.py:230: UserWarning: app_settings.EMAIL_REQUIRED is deprecated, use: app_settings.SIGNUP_FIELDS['email']['required']
  email = serializers.EmailField(required=allauth_account_settings.EMAIL_REQUIRED)
/home/runner/.cache/pypoetry/virtualenvs/blt-yuw0N2NF-py3.11/lib/python3.11/site-packages/dj_rest_auth/registration/serializers.py:288: UserWarning: app_settings.EMAIL_REQUIRED is deprecated, use: app_settings.SIGNUP_FIELDS['email']['required']
  email = serializers.EmailField(required=allauth_account_settings.EMAIL_REQUIRED)
Creating test database for alias 'default' ('file:memorydb_default?mode=memory&cache=shared')...
Found 267 test(s).
Traceback (most recent call last):
  File "/home/runner/work/BLT/BLT/manage.py", line 10, in <module>
    execute_from_command_line(sys.argv)
  File "/home/runner/.cache/pypoetry/virtualenvs/blt-yuw0N2NF-py3.11/lib/python3.11/site-packages/django/core/management/__init__.py", line 442, in execute_from_command_line
    utility.execute()
  File "/home/runner/.cache/pypoetry/virtualenvs/blt-yuw0N2NF-py3.11/lib/python3.11/site-packages/django/core/management/__init__.py", line 436, in execute
    self.fetch_command(subcommand).run_from_argv(self.argv)
  File "/home/runner/.cache/pypoetry/virtualenvs/blt-yuw0N2NF-py3.11/lib/python3.11/site-packages/django/core/management/commands/test.py", line 24, in run_from_argv
    super().run_from_argv(argv)
  File "/home/runner/.cache/pypoetry/virtualenvs/blt-yuw0N2NF-py3.11/lib/python3.11/site-packages/django/core/management/base.py", line 416, in run_from_argv
    self.execute(*args, **cmd_options)
  File "/home/runner/.cache/pypoetry/virtualenvs/blt-yuw0N2NF-py3.11/lib/python3.11/site-packages/django/core/management/base.py", line 460, in execute
    output = self.handle(*args, **options)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/runner/.cache/pypoetry/virtualenvs/blt-yuw0N2NF-py3.11/lib/python3.11/site-packages/django/core/management/commands/test.py", line 63, in handle
    failures = test_runner.run_tests(test_labels)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/runner/.cache/pypoetry/virtualenvs/blt-yuw0N2NF-py3.11/lib/python3.11/site-packages/django/test/runner.py", line 1092, in run_tests
    old_config = self.setup_databases(
                 ^^^^^^^^^^^^^^^^^^^^^
  File "/home/runner/.cache/pypoetry/virtualenvs/blt-yuw0N2NF-py3.11/lib/python3.11/site-packages/django/test/runner.py", line 990, in setup_databases
    return _setup_databases(
           ^^^^^^^^^^^^^^^^^
  File "/home/runner/.cache/pypoetry/virtualenvs/blt-yuw0N2NF-py3.11/lib/python3.11/site-packages/django/test/utils.py", line 204, in setup_databases
    connection.creation.create_test_db(
  File "/home/runner/.cache/pypoetry/virtualenvs/blt-yuw0N2NF-py3.11/lib/python3.11/site-packages/django/db/backends/base/creation.py", line 78, in create_test_db
    call_command(
  File "/home/runner/.cache/pypoetry/virtualenvs/blt-yuw0N2NF-py3.11/lib/python3.11/site-packages/django/core/management/__init__.py", line 194, in call_command
    return command.execute(*args, **defaults)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/runner/.cache/pypoetry/virtualenvs/blt-yuw0N2NF-py3.11/lib/python3.11/site-packages/django/core/management/base.py", line 460, in execute
    output = self.handle(*args, **options)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/runner/.cache/pypoetry/virtualenvs/blt-yuw0N2NF-py3.11/lib/python3.11/site-packages/django/core/management/base.py", line 107, in wrapper
    res = handle_func(*args, **kwargs)
          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/runner/.cache/pypoetry/virtualenvs/blt-yuw0N2NF-py3.11/lib/python3.11/site-packages/django/core/management/commands/migrate.py", line 114, in handle
    executor = MigrationExecutor(connection, self.migration_progress_callback)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/runner/.cache/pypoetry/virtualenvs/blt-yuw0N2NF-py3.11/lib/python3.11/site-packages/django/db/migrations/executor.py", line 18, in __init__
    self.loader = MigrationLoader(self.connection)
                  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/runner/.cache/pypoetry/virtualenvs/blt-yuw0N2NF-py3.11/lib/python3.11/site-packages/django/db/migrations/loader.py", line 58, in __init__
    self.build_graph()
  File "/home/runner/.cache/pypoetry/virtualenvs/blt-yuw0N2NF-py3.11/lib/python3.11/site-packages/django/db/migrations/loader.py", line 229, in build_graph
    self.load_disk()
  File "/home/runner/.cache/pypoetry/virtualenvs/blt-yuw0N2NF-py3.11/lib/python3.11/site-packages/django/db/migrations/loader.py", line 120, in load_disk
    migration_module = import_module(migration_path)
                       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/hostedtoolcache/Python/3.11.2/x64/lib/python3.11/importlib/__init__.py", line 126, in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "<frozen importlib._bootstrap>", line 1206, in _gcd_import
  File "<frozen importlib._bootstrap>", line 1178, in _find_and_load
  File "<frozen importlib._bootstrap>", line 1149, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 690, in _load_unlocked
  File "<frozen importlib._bootstrap_external>", line 940, in exec_module
  File "<frozen importlib._bootstrap>", line 241, in _call_with_frames_removed
  File "/home/runner/work/BLT/BLT/website/migrations/0261_alter_room_type.py", line 23, in <module>
    class Migration(migrations.Migration):
  File "/home/runner/work/BLT/BLT/website/migrations/0261_alter_room_type.py", line 33, in Migration
    field=models.CharField(
          ^^^^^^
NameError: name 'models' is not defined

For more information, see the Django testing documentation.

Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 0

♻️ Duplicate comments (2)
website/migrations/0261_alter_room_type.py (2)

28-44: Drop the second RunPython operation; one is sufficient.

The data migration RunPython(forwards, backwards) appears before and after the AlterField. This causes the same data update to run twice on migrate and twice on rollback, which is redundant and may confuse future maintainers.

You only need it once, before the schema change:

     operations = [
         migrations.RunPython(forwards, backwards),
         migrations.AlterField(
             model_name="room",
             name="type",
             field=models.CharField(
                 choices=[
                     ("project", "Project"),
                     ("bug", "Bug"),
                     ("organization", "Organization"),
                     ("custom", "Custom"),
                 ],
                 max_length=20,
             ),
         ),
-        migrations.RunPython(forwards, backwards),
     ]

3-3: Import models to avoid NameError in migration.

models.CharField is used in the AlterField but models is not imported, so running this migration will raise a NameError.

Apply this diff:

-from django.db import migrations
+from django.db import migrations, models
🧹 Nitpick comments (1)
website/migrations/0261_alter_room_type.py (1)

5-21: Remove duplicate forwards / backwards definitions.

forwards and backwards are defined twice with identical bodies. Python will keep only the second pair, and the first becomes dead code, which is confusing and may trip linters.

Consider keeping a single pair (e.g., the first) and deleting the duplicate:

 def forwards(apps, schema_editor):
     Room = apps.get_model("website", "Room")
     Room.objects.filter(type="org").update(type="organization")
 
 
 def backwards(apps, schema_editor):
     Room = apps.get_model("website", "Room")
     Room.objects.filter(type="organization").update(type="org")
 
-
-def forwards(apps, schema_editor):
-    Room = apps.get_model("website", "Room")
-    Room.objects.filter(type="org").update(type="organization")
-
-
-def backwards(apps, schema_editor):
-    Room = apps.get_model("website", "Room")
-    Room.objects.filter(type="organization").update(type="org")
-
📜 Review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

Knowledge base: Disabled due to Reviews -> Disable Knowledge Base setting

📥 Commits

Reviewing files that changed from the base of the PR and between 9d081ad and 5ddc538.

📒 Files selected for processing (3)
  • website/migrations/0261_alter_room_type.py (1 hunks)
  • website/templates/account/password_reset_done.html (1 hunks)
  • website/templates/account/password_reset_from_key_done.html (1 hunks)
🚧 Files skipped from review as they are similar to previous changes (2)
  • website/templates/account/password_reset_done.html
  • website/templates/account/password_reset_from_key_done.html
🧰 Additional context used
🧬 Code graph analysis (1)
website/migrations/0261_alter_room_type.py (1)
website/models.py (1)
  • Room (2062-2086)
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (2)
  • GitHub Check: Run Tests
  • GitHub Check: docker-test

@github-actions
Copy link
Contributor

github-actions bot commented Dec 8, 2025

❌ Pre-commit checks failed

The pre-commit hooks found issues that need to be fixed. Please run the following commands locally to fix them:

# Install pre-commit if you haven't already
pip install pre-commit

# Run pre-commit on all files
pre-commit run --all-files

# Or run pre-commit on staged files only
pre-commit run

After running these commands, the pre-commit hooks will automatically fix most issues.
Please review the changes, commit them, and push to your branch.

💡 Tip: You can set up pre-commit to run automatically on every commit by running:

pre-commit install
Pre-commit output
[INFO] Initializing environment for https://github.com/pre-commit/pre-commit-hooks.
[WARNING] repo `https://github.com/pre-commit/pre-commit-hooks` uses deprecated stage names (commit, push) which will be removed in a future version.  Hint: often `pre-commit autoupdate --repo https://github.com/pre-commit/pre-commit-hooks` will fix this.  if it does not -- consider reporting an issue to that repo.
[INFO] Initializing environment for https://github.com/pycqa/isort.
[WARNING] repo `https://github.com/pycqa/isort` uses deprecated stage names (commit, merge-commit, push) which will be removed in a future version.  Hint: often `pre-commit autoupdate --repo https://github.com/pycqa/isort` will fix this.  if it does not -- consider reporting an issue to that repo.
[INFO] Initializing environment for https://github.com/astral-sh/ruff-pre-commit.
[INFO] Initializing environment for https://github.com/djlint/djLint.
[INFO] Initializing environment for local.
[INFO] Installing environment for https://github.com/pre-commit/pre-commit-hooks.
[INFO] Once installed this environment will be reused.
[INFO] This may take a few minutes...
[INFO] Installing environment for https://github.com/pycqa/isort.
[INFO] Once installed this environment will be reused.
[INFO] This may take a few minutes...
[INFO] Installing environment for https://github.com/astral-sh/ruff-pre-commit.
[INFO] Once installed this environment will be reused.
[INFO] This may take a few minutes...
[INFO] Installing environment for https://github.com/djlint/djLint.
[INFO] Once installed this environment will be reused.
[INFO] This may take a few minutes...
[INFO] Installing environment for local.
[INFO] Once installed this environment will be reused.
[INFO] This may take a few minutes...
check python ast.........................................................Passed
check builtin type constructor use.......................................Passed
check yaml...............................................................Passed
fix python encoding pragma...............................................Passed
mixed line ending........................................................Passed
isort....................................................................Failed
- hook id: isort
- files were modified by this hook

Fixing /home/runner/work/BLT/BLT/website/migrations/0261_alter_room_type.py


For more information, see the pre-commit documentation.

@Nachiket-Roy
Copy link
Contributor

@e-esakman I was thinking of taking up this issue. Nice Work!

Copy link
Contributor

@arnavkirti arnavkirti left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please correct the critical issues that coderabbitai suggested. Thanks!!

Copy link
Contributor

@Jayant2908 Jayant2908 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Fix the coderabbitai error and you're good to go, LGTM! Just a few small non-blocker though:-

1)Room listing performance – join_room.html still renders room_messages directly, querying room.screenshots and room.tags in the template. but if these rooms get busy, a small prefetch_related("screenshots", "tags") on the queryset could help avoid N+1 queries.

2)Password reset templates & i18n – The new password reset templates look much cleaner. Most strings are wrapped in {% trans %}, but a couple of tagline/marketing lines are still plain text; if full localization is a goal, those might eventually want translation tags as well.

@github-actions github-actions bot added changes-requested PR has requested changes from a reviewer files-changed: 9 PR changes 9 files has-peer-review PR has received peer review and removed files-changed: 7 PR changes 7 files needs-peer-review PR needs peer review labels Dec 9, 2025
Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

🧹 Nitpick comments (2)
website/templates/account/password_reset_from_key_done.html (1)

11-19: Consider i18n and heading wording polish for this success screen

The template works as-is, but two small UX/i18n tweaks are worth considering:

  • Wrap the BLT marketing paragraph and “Join our community” CTA in {% blocktrans %} / {% trans %} to keep them localizable.
  • The right‑side heading says “Change Password” even though the page is a “success” state; something like “Password Successfully Changed” would better match the title and alert copy.

These are non‑blocking, just polish.

website/templates/account/password_reset_done.html (1)

11-19: Optional: localize shared marketing block for consistency with other text

Everything here is structurally correct. To keep i18n consistent with the rest of the template (and with password_reset_from_key_done.html), consider wrapping the BLT description paragraph and “Join our community” link text in {% blocktrans %} / {% trans %} so they’re also translatable.

📜 Review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

Knowledge base: Disabled due to Reviews -> Disable Knowledge Base setting

📥 Commits

Reviewing files that changed from the base of the PR and between 6e72847 and 2f6133a.

📒 Files selected for processing (4)
  • website/templates/account/password_reset_done.html (1 hunks)
  • website/templates/account/password_reset_from_key_done.html (1 hunks)
  • website/tests/test_rooms.py (1 hunks)
  • website/views/organization.py (1 hunks)
🧰 Additional context used
🧬 Code graph analysis (2)
website/tests/test_rooms.py (1)
website/models.py (1)
  • Room (2062-2086)
website/views/organization.py (1)
website/models.py (1)
  • Room (2062-2086)
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (2)
  • GitHub Check: Run Tests
  • GitHub Check: docker-test
🔇 Additional comments (1)
website/tests/test_rooms.py (1)

16-18: Test Room now correctly sets a valid type choice

Using type="project" here aligns the test with the Room.ROOM_TYPES choices and avoids failures after the migration made type required. No further changes needed.

@github-actions github-actions bot added files-changed: 8 PR changes 8 files and removed files-changed: 9 PR changes 9 files changes-requested PR has requested changes from a reviewer labels Dec 9, 2025
@e-esakman
Copy link
Contributor Author

e-esakman commented Dec 10, 2025

@DonnieBLT sir, it has passed all the tests. It's ready for final review and merge. Please let me know , if any change required.

@github-actions
Copy link
Contributor

❌ Tests failed

The Django tests found issues that need to be fixed. Please review the test output below and fix the failing tests.

How to run tests locally

# Install dependencies
poetry install --with dev

# Run all tests
poetry run python manage.py test

# Run tests with verbose output
poetry run python manage.py test -v 3

# Run a specific test
poetry run python manage.py test app.tests.TestClass.test_method
Test output (last 100 lines)
DEBUG Remote response: status=200 | data={"value":"http://localhost:58935/report/#"} | headers=HTTPHeaderDict({'Content-Length': '43', 'Content-Type': 'application/json; charset=utf-8', 'cache-control': 'no-cache'})
DEBUG Finished Request
DEBUG GET http://localhost:44237/session/6628fb417f8c8203d07bff6d2b06ae5e/url {}
DEBUG http://localhost:44237 "GET /session/6628fb417f8c8203d07bff6d2b06ae5e/url HTTP/1.1" 200 0
DEBUG Remote response: status=200 | data={"value":"http://localhost:58935/report/#"} | headers=HTTPHeaderDict({'Content-Length': '43', 'Content-Type': 'application/json; charset=utf-8', 'cache-control': 'no-cache'})
DEBUG Finished Request
DEBUG GET http://localhost:44237/session/6628fb417f8c8203d07bff6d2b06ae5e/url {}
DEBUG http://localhost:44237 "GET /session/6628fb417f8c8203d07bff6d2b06ae5e/url HTTP/1.1" 200 0
DEBUG Remote response: status=200 | data={"value":"http://localhost:58935/report/#"} | headers=HTTPHeaderDict({'Content-Length': '43', 'Content-Type': 'application/json; charset=utf-8', 'cache-control': 'no-cache'})
DEBUG Finished Request
DEBUG GET http://localhost:44237/session/6628fb417f8c8203d07bff6d2b06ae5e/url {}
DEBUG http://localhost:44237 "GET /session/6628fb417f8c8203d07bff6d2b06ae5e/url HTTP/1.1" 200 0
DEBUG Remote response: status=200 | data={"value":"http://localhost:58935/report/#"} | headers=HTTPHeaderDict({'Content-Length': '43', 'Content-Type': 'application/json; charset=utf-8', 'cache-control': 'no-cache'})
DEBUG Finished Request
DEBUG GET http://localhost:44237/session/6628fb417f8c8203d07bff6d2b06ae5e/url {}
DEBUG http://localhost:44237 "GET /session/6628fb417f8c8203d07bff6d2b06ae5e/url HTTP/1.1" 200 0
DEBUG Remote response: status=200 | data={"value":"http://localhost:58935/report/#"} | headers=HTTPHeaderDict({'Content-Length': '43', 'Content-Type': 'application/json; charset=utf-8', 'cache-control': 'no-cache'})
DEBUG Finished Request
DEBUG GET http://localhost:44237/session/6628fb417f8c8203d07bff6d2b06ae5e/url {}
DEBUG http://localhost:44237 "GET /session/6628fb417f8c8203d07bff6d2b06ae5e/url HTTP/1.1" 200 0
DEBUG Remote response: status=200 | data={"value":"http://localhost:58935/report/#"} | headers=HTTPHeaderDict({'Content-Length': '43', 'Content-Type': 'application/json; charset=utf-8', 'cache-control': 'no-cache'})
DEBUG Finished Request
DEBUG GET http://localhost:44237/session/6628fb417f8c8203d07bff6d2b06ae5e/url {}
DEBUG http://localhost:44237 "GET /session/6628fb417f8c8203d07bff6d2b06ae5e/url HTTP/1.1" 200 0
DEBUG Remote response: status=200 | data={"value":"http://localhost:58935/report/#"} | headers=HTTPHeaderDict({'Content-Length': '43', 'Content-Type': 'application/json; charset=utf-8', 'cache-control': 'no-cache'})
DEBUG Finished Request
DEBUG GET http://localhost:44237/session/6628fb417f8c8203d07bff6d2b06ae5e/url {}
DEBUG http://localhost:44237 "GET /session/6628fb417f8c8203d07bff6d2b06ae5e/url HTTP/1.1" 200 0
DEBUG Remote response: status=200 | data={"value":"http://localhost:58935/report/#"} | headers=HTTPHeaderDict({'Content-Length': '43', 'Content-Type': 'application/json; charset=utf-8', 'cache-control': 'no-cache'})
DEBUG Finished Request
DEBUG GET http://localhost:44237/session/6628fb417f8c8203d07bff6d2b06ae5e/url {}
DEBUG http://localhost:44237 "GET /session/6628fb417f8c8203d07bff6d2b06ae5e/url HTTP/1.1" 200 0
DEBUG Remote response: status=200 | data={"value":"http://localhost:58935/report/#"} | headers=HTTPHeaderDict({'Content-Length': '43', 'Content-Type': 'application/json; charset=utf-8', 'cache-control': 'no-cache'})
DEBUG Finished Request
ERROR
test_post_bug_domain_url (website.tests.test_main.MySeleniumTests.test_post_bug_domain_url) ... ERROR
DEBUG DELETE http://localhost:44237/session/6628fb417f8c8203d07bff6d2b06ae5e {}
DEBUG http://localhost:44237 "DELETE /session/6628fb417f8c8203d07bff6d2b06ae5e HTTP/1.1" 200 0
DEBUG Remote response: status=200 | data={"value":null} | headers=HTTPHeaderDict({'Content-Length': '14', 'Content-Type': 'application/json; charset=utf-8', 'cache-control': 'no-cache'})
DEBUG Finished Request

======================================================================
ERROR: test_post_bug_domain_url (website.tests.test_main.MySeleniumTests.test_post_bug_domain_url)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/home/runner/.cache/pypoetry/virtualenvs/blt-yuw0N2NF-py3.11/lib/python3.11/site-packages/django/test/utils.py", line 456, in inner
    return func(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^
  File "/home/runner/work/BLT/BLT/website/tests/test_main.py", line 222, in test_post_bug_domain_url
    WebDriverWait(self.selenium, 30).until(
  File "/home/runner/.cache/pypoetry/virtualenvs/blt-yuw0N2NF-py3.11/lib/python3.11/site-packages/selenium/webdriver/support/wait.py", line 122, in until
    raise TimeoutException(message, screen, stacktrace)
selenium.common.exceptions.TimeoutException: Message: 


======================================================================
ERROR: test_post_bug_domain_url (website.tests.test_main.MySeleniumTests.test_post_bug_domain_url)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/home/runner/.cache/pypoetry/virtualenvs/blt-yuw0N2NF-py3.11/lib/python3.11/site-packages/django/core/management/__init__.py", line 194, in call_command
    return command.execute(*args, **defaults)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/runner/.cache/pypoetry/virtualenvs/blt-yuw0N2NF-py3.11/lib/python3.11/site-packages/django/core/management/base.py", line 460, in execute
    output = self.handle(*args, **options)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/runner/.cache/pypoetry/virtualenvs/blt-yuw0N2NF-py3.11/lib/python3.11/site-packages/django/core/management/commands/flush.py", line 52, in handle
    sql_list = sql_flush(
               ^^^^^^^^^^
  File "/home/runner/.cache/pypoetry/virtualenvs/blt-yuw0N2NF-py3.11/lib/python3.11/site-packages/django/core/management/sql.py", line 11, in sql_flush
    tables = connection.introspection.django_table_names(
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/runner/.cache/pypoetry/virtualenvs/blt-yuw0N2NF-py3.11/lib/python3.11/site-packages/django/db/backends/base/introspection.py", line 110, in django_table_names
    existing_tables = set(self.table_names(include_views=include_views))
                          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/runner/.cache/pypoetry/virtualenvs/blt-yuw0N2NF-py3.11/lib/python3.11/site-packages/django/db/backends/base/introspection.py", line 57, in table_names
    return get_names(cursor)
           ^^^^^^^^^^^^^^^^^
  File "/home/runner/.cache/pypoetry/virtualenvs/blt-yuw0N2NF-py3.11/lib/python3.11/site-packages/django/db/backends/base/introspection.py", line 51, in get_names
    for ti in self.get_table_list(cursor)
              ^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/runner/.cache/pypoetry/virtualenvs/blt-yuw0N2NF-py3.11/lib/python3.11/site-packages/django/db/backends/sqlite3/introspection.py", line 80, in get_table_list
    cursor.execute(
  File "/home/runner/.cache/pypoetry/virtualenvs/blt-yuw0N2NF-py3.11/lib/python3.11/site-packages/django/db/backends/utils.py", line 79, in execute
    return self._execute_with_wrappers(
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/runner/.cache/pypoetry/virtualenvs/blt-yuw0N2NF-py3.11/lib/python3.11/site-packages/django/db/backends/utils.py", line 92, in _execute_with_wrappers
    return executor(sql, params, many, context)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/runner/.cache/pypoetry/virtualenvs/blt-yuw0N2NF-py3.11/lib/python3.11/site-packages/django/db/backends/utils.py", line 99, in _execute
    self.db.validate_no_broken_transaction()
  File "/home/runner/.cache/pypoetry/virtualenvs/blt-yuw0N2NF-py3.11/lib/python3.11/site-packages/django/db/backends/base/base.py", line 521, in validate_no_broken_transaction
    raise TransactionManagementError(
django.db.transaction.TransactionManagementError: An error occurred in the current transaction. You can't execute queries until the end of the 'atomic' block.

----------------------------------------------------------------------
Ran 267 tests in 201.613s

FAILED (errors=2)
Destroying test database for alias 'default' ('file:memorydb_default?mode=memory&cache=shared')...

For more information, see the Django testing documentation.

@github-actions github-actions bot added tests: failed Django tests failed last-active: 0d PR last updated 0 days ago and removed tests: passed Django tests passed labels Dec 10, 2025
@github-actions github-actions bot added tests: passed Django tests passed and removed tests: failed Django tests failed labels Dec 10, 2025
@e-esakman
Copy link
Contributor Author

e-esakman commented Dec 12, 2025

@DonnieBLT sir , if u could, please review it. If any changes, let me know.

@github-actions github-actions bot added last-active: 1d PR last updated 1 day ago and removed last-active: 0d PR last updated 0 days ago labels Dec 14, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

files-changed: 8 PR changes 8 files has-peer-review PR has received peer review last-active: 1d PR last updated 1 day ago migrations PR contains database migration files pre-commit: passed Pre-commit checks passed tests: passed Django tests passed

Projects

Status: Ready

Development

Successfully merging this pull request may close these issues.

UI Fix: reset_email, dicussion rooms

4 participants