Skip to content

Commit 9472808

Browse files
committed
A few more tests
1 parent f3fc36c commit 9472808

File tree

4 files changed

+44
-10
lines changed

4 files changed

+44
-10
lines changed

tortoise/__init__.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,8 @@ def _init_relations(cls) -> None:
8484

8585
backward_relation_name = field_mobject.related_name
8686
if not backward_relation_name:
87-
backward_relation_name = '{}s'.format(model._meta.table)
87+
backward_relation_name = field_mobject.related_name = \
88+
'{}_through'.format(model._meta.table)
8889
if backward_relation_name in related_model._meta.fields:
8990
raise ConfigurationError(
9091
'backward relation "{}" duplicates in model {}'.format(

tortoise/fields.py

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -323,17 +323,15 @@ def __init__(
323323
through: Optional[str] = None,
324324
forward_key: Optional[str] = None,
325325
backward_key: str = '',
326-
related_name: Optional[str] = None,
326+
related_name: str = '',
327327
**kwargs
328328
) -> None:
329329
super().__init__(**kwargs)
330330
if len(model_name.split(".")) != 2:
331331
raise ConfigurationError('Foreign key accepts model name in format "app.Model"')
332332
self.model_name = model_name
333-
self.related_name = related_name or '{}_through'.format(model_name)
334-
self.forward_key = forward_key if forward_key else '{}_id'.format(
335-
model_name.split(".")[1].lower()
336-
)
333+
self.related_name = related_name
334+
self.forward_key = forward_key or '{}_id'.format(model_name.split(".")[1].lower())
337335
self.backward_key = backward_key
338336
self.through = through
339337
self._generated = False
@@ -342,7 +340,7 @@ def __init__(
342340
class BackwardFKRelation(Field):
343341
__slots__ = ('type', 'relation_field')
344342

345-
def __init__(self, type, relation_field: str) -> None:
343+
def __init__(self, type, relation_field: str) -> None: # pylint: disable=W0622
346344
super().__init__(type=type)
347345
self.relation_field = relation_field
348346

tortoise/tests/test_init.py

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,34 @@ async def test_basic_init(self):
4747
self.assertIn('models', Tortoise.apps)
4848
self.assertIsNotNone(Tortoise.get_connection('default'))
4949

50+
async def test_unknown_connection(self):
51+
with self.assertRaisesRegexp(ConfigurationError, 'Unknown connection "fioop"'):
52+
await Tortoise.init({
53+
"connections": {
54+
"default": {
55+
"engine": "tortoise.backends.sqlite",
56+
"credentials": {
57+
"file_path": self.db_file_path,
58+
}
59+
}
60+
},
61+
"apps": {
62+
"models": {
63+
"models": [
64+
"tortoise.tests.testmodels",
65+
],
66+
"default_connection": "fioop"
67+
}
68+
}
69+
})
70+
71+
async def test_url_without_modules(self):
72+
with self.assertRaisesRegexp(ConfigurationError,
73+
'You must specify "db_url" and "modules" together'):
74+
await Tortoise.init(
75+
db_url="sqlite://{}".format(self.db_file_path),
76+
)
77+
5078
async def test_default_connection_init(self):
5179
await Tortoise.init({
5280
"connections": {

tortoise/tests/testmodels.py

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -21,10 +21,19 @@ def __str__(self):
2121
return self.name
2222

2323

24+
class Reporter(Model):
25+
id = fields.IntField(pk=True)
26+
name = fields.TextField()
27+
28+
def __str__(self):
29+
return self.name
30+
31+
2432
class Event(Model):
2533
id = fields.IntField(pk=True)
2634
name = fields.TextField()
2735
tournament = fields.ForeignKeyField('models.Tournament', related_name='events')
36+
reporter = fields.ForeignKeyField('models.Reporter', null=True)
2837
participants = fields.ManyToManyField(
2938
'models.Team', related_name='events', through='event_team'
3039
)
@@ -48,9 +57,7 @@ class EventTwo(Model):
4857
name = fields.TextField()
4958
tournament_id = fields.IntField()
5059
# Here we make link to events.Team, not models.Team
51-
participants = fields.ManyToManyField(
52-
'events.TeamTwo', related_name='events', through='eventtwo_teamtwo'
53-
)
60+
participants = fields.ManyToManyField('events.TeamTwo')
5461

5562
class Meta:
5663
app = 'events'

0 commit comments

Comments
 (0)