Skip to content
This repository was archived by the owner on Mar 20, 2026. It is now read-only.

Commit 0faab71

Browse files
committed
test: unit test coverage for base.py
1 parent 83f6217 commit 0faab71

3 files changed

Lines changed: 110 additions & 4 deletions

File tree

noxfile.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -62,20 +62,20 @@ def lint_setup_py(session):
6262

6363
def default(session):
6464
# Install all test dependencies, then install this package in-place.
65-
session.install("mock", "pytest", "pytest-cov")
65+
session.install("mock", "pytest", "pytest-cov", "django", "mock-import")
6666
session.install("-e", ".")
6767

6868
# Run py.test against the unit tests.
6969
session.run(
7070
"py.test",
7171
"--quiet",
72-
# "--cov=django_spanner",
72+
"--cov=django_spanner",
7373
"--cov=google.cloud",
7474
"--cov=tests.unit",
7575
"--cov-append",
7676
"--cov-config=.coveragerc",
7777
"--cov-report=",
78-
"--cov-fail-under=90",
78+
"--cov-fail-under=70",
7979
os.path.join("tests", "unit"),
8080
*session.posargs
8181
)
Lines changed: 106 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,106 @@
1+
# Copyright 2020 Google LLC
2+
#
3+
# Use of this source code is governed by a BSD-style
4+
# license that can be found in the LICENSE file or at
5+
# https://developers.google.com/open-source/licenses/bsd
6+
7+
import unittest
8+
9+
from mock_import import mock_import
10+
from unittest import mock
11+
12+
13+
@mock_import()
14+
class TestBase(unittest.TestCase):
15+
PROJECT = "project"
16+
INSTANCE_ID = "instance_id"
17+
DATABASE_ID = "database_id"
18+
USER_AGENT = "django_spanner/2.2.0a1"
19+
OPTIONS = {"option": "dummy"}
20+
21+
settings_dict = {
22+
"PROJECT": PROJECT,
23+
"INSTANCE": INSTANCE_ID,
24+
"NAME": DATABASE_ID,
25+
"user_agent": USER_AGENT,
26+
"OPTIONS": OPTIONS,
27+
}
28+
29+
def _get_target_class(self):
30+
from django_spanner.base import DatabaseWrapper
31+
32+
return DatabaseWrapper
33+
34+
def _make_one(self, *args, **kwargs):
35+
return self._get_target_class()(*args, **kwargs)
36+
37+
def test_property_instance(self):
38+
settings_dict = {"INSTANCE": "instance"}
39+
db_wrapper = self._make_one(settings_dict=settings_dict)
40+
41+
with mock.patch("django_spanner.base.spanner") as mock_spanner:
42+
mock_spanner.Client = mock_client = mock.MagicMock()
43+
mock_client().instance = mock_instance = mock.MagicMock()
44+
_ = db_wrapper.instance
45+
mock_instance.assert_called_once_with(settings_dict["INSTANCE"])
46+
47+
def test_property__nodb_connection(self):
48+
db_wrapper = self._make_one(None)
49+
with self.assertRaises(NotImplementedError):
50+
db_wrapper._nodb_connection()
51+
52+
def test_get_connection_params(self):
53+
db_wrapper = self._make_one(self.settings_dict)
54+
params = db_wrapper.get_connection_params()
55+
56+
self.assertEqual(params["project"], self.PROJECT)
57+
self.assertEqual(params["instance_id"], self.INSTANCE_ID)
58+
self.assertEqual(params["database_id"], self.DATABASE_ID)
59+
self.assertEqual(params["user_agent"], self.USER_AGENT)
60+
self.assertEqual(params["option"], self.OPTIONS["option"])
61+
62+
def test_get_new_connection(self):
63+
db_wrapper = self._make_one(self.settings_dict)
64+
db_wrapper.Database = mock_database = mock.MagicMock()
65+
mock_database.connect = mock_connect = mock.MagicMock()
66+
conn_params = {"test_param": "dummy"}
67+
db_wrapper.get_new_connection(conn_params)
68+
mock_connect.assert_called_once_with(**conn_params)
69+
70+
def test_init_connection_state(self):
71+
db_wrapper = self._make_one(self.settings_dict)
72+
db_wrapper.connection = mock_connection = mock.MagicMock()
73+
mock_connection.close = mock_close = mock.MagicMock()
74+
db_wrapper.init_connection_state()
75+
mock_close.assert_called_once_with()
76+
77+
def test_create_cursor(self):
78+
db_wrapper = self._make_one(self.settings_dict)
79+
db_wrapper.connection = mock_connection = mock.MagicMock()
80+
mock_connection.cursor = mock_cursor = mock.MagicMock()
81+
db_wrapper.create_cursor()
82+
mock_cursor.assert_called_once_with()
83+
84+
def test__set_autocommit(self):
85+
db_wrapper = self._make_one(self.settings_dict)
86+
db_wrapper.connection = mock_connection = mock.MagicMock()
87+
mock_connection.autocommit = False
88+
db_wrapper._set_autocommit(True)
89+
self.assertEqual(mock_connection.autocommit, True)
90+
91+
def test_is_usable(self):
92+
from google.cloud.spanner_dbapi.exceptions import Error
93+
94+
db_wrapper = self._make_one(self.settings_dict)
95+
db_wrapper.connection = None
96+
self.assertFalse(db_wrapper.is_usable())
97+
98+
db_wrapper.connection = mock_connection = mock.MagicMock()
99+
mock_connection.is_closed = True
100+
self.assertFalse(db_wrapper.is_usable())
101+
102+
mock_connection.is_closed = False
103+
self.assertTrue(db_wrapper.is_usable())
104+
105+
mock_connection.cursor = mock.MagicMock(side_effect=Error)
106+
self.assertFalse(db_wrapper.is_usable())

version.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,4 +4,4 @@
44
# license that can be found in the LICENSE file or at
55
# https://developers.google.com/open-source/licenses/bsd
66

7-
__version__ = "2.2.0a1"
7+
__version__ = "3.1.0a1"

0 commit comments

Comments
 (0)