-
Notifications
You must be signed in to change notification settings - Fork 161
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #630 from python-rope/lieryan-sqlite-models
SQLite models improvements
- Loading branch information
Showing
3 changed files
with
112 additions
and
86 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,69 +1,77 @@ | ||
from unittest import TestCase | ||
import sqlite3 | ||
from typing import Any | ||
|
||
import pytest | ||
|
||
from rope.contrib.autoimport import models | ||
|
||
|
||
class QueryTest(TestCase): | ||
@pytest.fixture | ||
def empty_db(): | ||
return sqlite3.connect(":memory:") | ||
|
||
|
||
class TestQuery: | ||
def test_select_non_existent_column(self): | ||
with self.assertRaisesRegex(ValueError, """Unknown column names passed: {['"]doesnotexist['"]}"""): | ||
models.Name.objects.select('doesnotexist')._query | ||
expected_msg = """Unknown column names passed: {['"]doesnotexist['"]}""" | ||
with pytest.raises(ValueError, match=expected_msg): | ||
models.Name.objects.select("doesnotexist")._query | ||
|
||
|
||
class CreateTableTestMixin: | ||
model_class: Any = None | ||
|
||
def test_create_table(self, empty_db): | ||
self.model_class.create_table(empty_db) | ||
|
||
|
||
class NameModelTest(TestCase): | ||
class TestNameModel(CreateTableTestMixin): | ||
model_class = models.Name | ||
|
||
def test_name_objects(self): | ||
self.assertEqual( | ||
models.Name.objects.select_star()._query, | ||
"SELECT * FROM names", | ||
assert models.Name.objects.select_star()._query == "SELECT * FROM names" | ||
|
||
def test_search_submodule_like(self): | ||
assert ( | ||
models.Name.search_submodule_like.select_star()._query | ||
== 'SELECT * FROM names WHERE module LIKE ("%." || ?)' | ||
) | ||
|
||
def test_query_strings(self): | ||
with self.subTest("objects"): | ||
self.assertEqual( | ||
models.Name.objects.select_star()._query, | ||
'SELECT * FROM names', | ||
) | ||
|
||
with self.subTest("search_submodule_like"): | ||
self.assertEqual( | ||
models.Name.search_submodule_like.select_star()._query, | ||
'SELECT * FROM names WHERE module LIKE ("%." || ?)', | ||
) | ||
|
||
with self.subTest("search_module_like"): | ||
self.assertEqual( | ||
models.Name.search_module_like.select_star()._query, | ||
'SELECT * FROM names WHERE module LIKE (?)', | ||
) | ||
|
||
with self.subTest("import_assist"): | ||
self.assertEqual( | ||
models.Name.import_assist.select_star()._query, | ||
"SELECT * FROM names WHERE name LIKE (? || '%')", | ||
) | ||
|
||
with self.subTest("search_by_name_like"): | ||
self.assertEqual( | ||
models.Name.search_by_name_like.select_star()._query, | ||
'SELECT * FROM names WHERE name LIKE (?)', | ||
) | ||
|
||
with self.subTest("delete_by_module_name"): | ||
self.assertEqual( | ||
models.Name.delete_by_module_name._query, | ||
'DELETE FROM names WHERE module = ?', | ||
) | ||
|
||
|
||
class PackageModelTest(TestCase): | ||
def test_query_strings(self): | ||
with self.subTest("objects"): | ||
self.assertEqual( | ||
models.Package.objects.select_star()._query, | ||
'SELECT * FROM packages', | ||
) | ||
|
||
with self.subTest("delete_by_package_name"): | ||
self.assertEqual( | ||
models.Package.delete_by_package_name._query, | ||
'DELETE FROM packages WHERE package = ?', | ||
) | ||
def test_search_module_like(self): | ||
assert ( | ||
models.Name.search_module_like.select_star()._query | ||
== "SELECT * FROM names WHERE module LIKE (?)" | ||
) | ||
|
||
def test_import_assist(self): | ||
assert ( | ||
models.Name.import_assist.select_star()._query | ||
== "SELECT * FROM names WHERE name LIKE (? || '%')" | ||
) | ||
|
||
def test_search_by_name_like(self): | ||
assert ( | ||
models.Name.search_by_name_like.select_star()._query | ||
== "SELECT * FROM names WHERE name LIKE (?)" | ||
) | ||
|
||
def test_delete_by_module_name(self): | ||
assert ( | ||
models.Name.delete_by_module_name._query | ||
== "DELETE FROM names WHERE module = ?" | ||
) | ||
|
||
|
||
class TestPackageModel(CreateTableTestMixin): | ||
model_class = models.Package | ||
|
||
def test_objects(self): | ||
assert ( | ||
models.Package.objects.select_star()._query == "SELECT * FROM packages" | ||
) | ||
|
||
def test_delete_by_package_name(self): | ||
assert ( | ||
models.Package.delete_by_package_name._query | ||
== "DELETE FROM packages WHERE package = ?" | ||
) |