11from unittest .mock import patch
22
33import pymongo
4+ from django .core .exceptions import ImproperlyConfigured
45from django .test import SimpleTestCase
56
67from django_mongodb_backend import parse_uri
@@ -12,11 +13,28 @@ def test_simple_uri(self):
1213 self .assertEqual (settings_dict ["ENGINE" ], "django_mongodb_backend" )
1314 self .assertEqual (settings_dict ["NAME" ], "myDatabase" )
1415 self .assertEqual (settings_dict ["HOST" ], "cluster0.example.mongodb.net" )
16+ self .assertEqual (settings_dict ["OPTIONS" ], {"authSource" : "myDatabase" })
1517
16- def test_no_database (self ):
17- settings_dict = parse_uri ("mongodb://cluster0.example.mongodb.net" )
18- self .assertIsNone (settings_dict ["NAME" ])
18+ def test_db_name (self ):
19+ settings_dict = parse_uri ("mongodb://cluster0.example.mongodb.net/" , db_name = "myDatabase" )
20+ self .assertEqual (settings_dict ["ENGINE" ], "django_mongodb_backend" )
21+ self .assertEqual (settings_dict ["NAME" ], "myDatabase" )
22+ self .assertEqual (settings_dict ["HOST" ], "cluster0.example.mongodb.net" )
23+ self .assertEqual (settings_dict ["OPTIONS" ], {})
24+
25+ def test_db_name_overrides_default_auth_db (self ):
26+ settings_dict = parse_uri (
27+ "mongodb://cluster0.example.mongodb.net/default_auth_db" , db_name = "myDatabase"
28+ )
29+ self .assertEqual (settings_dict ["ENGINE" ], "django_mongodb_backend" )
30+ self .assertEqual (settings_dict ["NAME" ], "myDatabase" )
1931 self .assertEqual (settings_dict ["HOST" ], "cluster0.example.mongodb.net" )
32+ self .assertEqual (settings_dict ["OPTIONS" ], {"authSource" : "default_auth_db" })
33+
34+ def test_no_database (self ):
35+ msg = "You must provide the db_name parameter."
36+ with self .assertRaisesMessage (ImproperlyConfigured , msg ):
37+ parse_uri ("mongodb://cluster0.example.mongodb.net" )
2038
2139 def test_srv_uri_with_options (self ):
2240 uri = "mongodb+srv://my_user:my_password@cluster0.example.mongodb.net/my_database?retryWrites=true&w=majority"
@@ -30,35 +48,46 @@ def test_srv_uri_with_options(self):
3048 self .assertEqual (settings_dict ["PASSWORD" ], "my_password" )
3149 self .assertIsNone (settings_dict ["PORT" ])
3250 self .assertEqual (
33- settings_dict ["OPTIONS" ], {"retryWrites" : True , "w" : "majority" , "tls" : True }
51+ settings_dict ["OPTIONS" ],
52+ {"authSource" : "my_database" , "retryWrites" : True , "w" : "majority" , "tls" : True },
3453 )
3554
3655 def test_localhost (self ):
37- settings_dict = parse_uri ("mongodb://localhost" )
56+ settings_dict = parse_uri ("mongodb://localhost/db " )
3857 self .assertEqual (settings_dict ["HOST" ], "localhost" )
3958 self .assertEqual (settings_dict ["PORT" ], 27017 )
4059
4160 def test_localhost_with_port (self ):
42- settings_dict = parse_uri ("mongodb://localhost:27018" )
61+ settings_dict = parse_uri ("mongodb://localhost:27018/db " )
4362 self .assertEqual (settings_dict ["HOST" ], "localhost" )
4463 self .assertEqual (settings_dict ["PORT" ], 27018 )
4564
4665 def test_hosts_with_ports (self ):
47- settings_dict = parse_uri ("mongodb://localhost:27017,localhost:27018" )
66+ settings_dict = parse_uri ("mongodb://localhost:27017,localhost:27018/db " )
4867 self .assertEqual (settings_dict ["HOST" ], "localhost:27017,localhost:27018" )
4968 self .assertEqual (settings_dict ["PORT" ], None )
5069
5170 def test_hosts_without_ports (self ):
52- settings_dict = parse_uri ("mongodb://host1.net,host2.net" )
71+ settings_dict = parse_uri ("mongodb://host1.net,host2.net/db " )
5372 self .assertEqual (settings_dict ["HOST" ], "host1.net:27017,host2.net:27017" )
5473 self .assertEqual (settings_dict ["PORT" ], None )
5574
75+ def test_auth_source_in_query_string (self ):
76+ settings_dict = parse_uri ("mongodb://localhost/?authSource=auth" , db_name = "db" )
77+ self .assertEqual (settings_dict ["NAME" ], "db" )
78+ self .assertEqual (settings_dict ["OPTIONS" ], {"authSource" : "auth" })
79+
80+ def test_auth_source_in_query_string_overrides_defaultauthdb (self ):
81+ settings_dict = parse_uri ("mongodb://localhost/db?authSource=auth" )
82+ self .assertEqual (settings_dict ["NAME" ], "db" )
83+ self .assertEqual (settings_dict ["OPTIONS" ], {"authSource" : "auth" })
84+
5685 def test_conn_max_age (self ):
57- settings_dict = parse_uri ("mongodb://localhost" , conn_max_age = 600 )
86+ settings_dict = parse_uri ("mongodb://localhost/db " , conn_max_age = 600 )
5887 self .assertEqual (settings_dict ["CONN_MAX_AGE" ], 600 )
5988
6089 def test_test_kwarg (self ):
61- settings_dict = parse_uri ("mongodb://localhost" , test = {"NAME" : "test_db" })
90+ settings_dict = parse_uri ("mongodb://localhost/db " , test = {"NAME" : "test_db" })
6291 self .assertEqual (settings_dict ["TEST" ], {"NAME" : "test_db" })
6392
6493 def test_invalid_credentials (self ):
0 commit comments