Skip to content

🧪 Απομόνωση backend auth/rbac tests από live Mongo - #3

Merged
GiorgosPanagopoulos merged 1 commit into
mainfrom
refactor/mock-mongo-fixture
Jul 27, 2026
Merged

🧪 Απομόνωση backend auth/rbac tests από live Mongo#3
GiorgosPanagopoulos merged 1 commit into
mainfrom
refactor/mock-mongo-fixture

Conversation

@GiorgosPanagopoulos

Copy link
Copy Markdown
Owner

Summary

Το backend/tests/test_auth.py και test_rbac.py έγραφαν πραγματικούς test users στο live MongoDB Atlas cluster configured στο backend/.env (MONGODB_URI=mongodb+srv://...cluster0.7dre2...). Δεν υπήρχε κανένα mocking layer - "χωρίς docker container" δεν σήμαινε "χωρίς Mongo", αφού το .env override παρακάμπτει το default localhost URI.

  • Env isolation: conftest.py override-άρει MONGODB_URI σε unreachable sentinel host πριν φορτωθεί το config, ώστε τα tests να μην μπορούν να αγγίξουν ποτέ το πραγματικό cluster, ούτε κατά λάθος. Νέο test_env_isolation.py φυλάει αυτή τη διασφάλιση (αποτυγχάνει αν το settings.MONGODB_URI περιέχει mongodb+srv ή 7dre2).
  • In-memory fake: conftest.py προσθέτει hand-rolled in-memory fake (find_one/insert_one στο users collection, ίδιο στιλ με το υπάρχον test_audit.py::_mock_db), που μπαίνει μέσω monkeypatch στο _factory του db.mongo_client lazy proxy (PR 1) - δουλεύει μέσα από τον proxy μηχανισμό, όχι παρακάμπτοντάς τον.
  • test_rbac.py fix: σταμάτησε να ανοίγει δικό του raw AsyncIOMotorClient για seed elevated-role users και περνάει τώρα από το db.py singleton, ώστε να πιάνεται κι αυτό από το fake.

Καμία αλλαγή σε production κώδικα, κανένα νέο dependency.

Test plan

  • pytest tests/test_auth.py tests/test_rbac.py tests/test_env_isolation.py — 17/17 passed
  • Πλήρες backend suite — 160/160 passed, χωρίς regressions
  • Επιβεβαιώθηκε με lsof κατά το run: καμία TCP σύνδεση σε 27017 ή Atlas
  • ruff check καθαρό

Το backend/tests/test_auth.py και test_rbac.py έγραφαν πραγματικούς test
users στο live MongoDB Atlas cluster που είναι configured στο
backend/.env (MONGODB_URI=mongodb+srv://...cluster0.7dre2...), επειδή
δεν υπήρχε κανένα mocking layer - "χωρίς container" δεν σήμαινε "χωρίς
Mongo", αφού το .env override παρακάμπτει το default localhost URI.

- conftest.py override-άρει MONGODB_URI σε unreachable sentinel host πριν
  φορτωθεί το config, ώστε τα tests να μην μπορούν να αγγίξουν ποτέ το
  πραγματικό cluster, ούτε κατά λάθος. test_env_isolation.py φυλάει αυτή
  τη διασφάλιση (αποτυγχάνει αν το settings.MONGODB_URI περιέχει
  "mongodb+srv" ή "7dre2").
- conftest.py προσθέτει ένα hand-rolled in-memory fake (find_one/insert_one
  στο users collection, ίδιο στιλ με το test_audit.py::_mock_db) που
  μπαίνει μέσω monkeypatch στο _factory του db.mongo_client lazy proxy
  (PR 1), όχι παρακάμπτοντάς το.
- test_rbac.py σταμάτησε να ανοίγει δικό του raw AsyncIOMotorClient και
  περνάει τώρα από το db.py singleton, ώστε να πιάνεται κι αυτό από το
  fake.

Καμία αλλαγή σε production κώδικα, κανένα νέο dependency.
@GiorgosPanagopoulos
GiorgosPanagopoulos merged commit 98f0150 into main Jul 27, 2026
2 checks passed
@GiorgosPanagopoulos
GiorgosPanagopoulos deleted the refactor/mock-mongo-fixture branch July 27, 2026 15:48
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant