diff options
| author | Hunternif | 2019-04-16 19:24:50 +0700 |
|---|---|---|
| committer | Hunternif | 2019-04-16 20:01:37 +0700 |
| commit | 067fdd2ad1814bc0588f393bb955563d2c1ba546 (patch) | |
| tree | 3fd9c27b287684497ec7235b9f1e2fd6413719c4 | |
| parent | 91a31eba4372a59592bec892fe82ec7a3fc8dc7e (diff) | |
Complete metric models and unit tests
| -rw-r--r-- | server/szurubooru/model/metric.py | 1 | ||||
| -rw-r--r-- | server/szurubooru/model/post.py | 4 | ||||
| -rw-r--r-- | server/szurubooru/model/tag.py | 5 | ||||
| -rw-r--r-- | server/szurubooru/tests/model/test_metric.py | 103 |
4 files changed, 102 insertions, 11 deletions
diff --git a/server/szurubooru/model/metric.py b/server/szurubooru/model/metric.py index b4003e9..2ec5b2b 100644 --- a/server/szurubooru/model/metric.py +++ b/server/szurubooru/model/metric.py @@ -80,6 +80,7 @@ class Metric(Base): min = sa.Column('min', sa.Float, nullable=False) max = sa.Column('max', sa.Float, nullable=False) + tag = sa.orm.relationship('Tag') post_metrics = sa.orm.relationship( 'PostMetric', backref='metric', cascade='all, delete-orphan') post_metric_ranges = sa.orm.relationship( diff --git a/server/szurubooru/model/post.py b/server/szurubooru/model/post.py index c0e3b13..91eac4d 100644 --- a/server/szurubooru/model/post.py +++ b/server/szurubooru/model/post.py @@ -197,6 +197,10 @@ class Post(Base): notes = sa.orm.relationship( 'PostNote', cascade='all, delete-orphan', lazy='joined') comments = sa.orm.relationship('Comment', cascade='all, delete-orphan') + metrics = sa.orm.relationship( + 'PostMetric', cascade='all, delete-orphan', lazy='joined') + metric_ranges = sa.orm.relationship( + 'PostMetricRange', cascade='all, delete-orphan', lazy='joined') # dynamic columns tag_count = sa.orm.column_property( diff --git a/server/szurubooru/model/tag.py b/server/szurubooru/model/tag.py index 61d1625..e0d18e6 100644 --- a/server/szurubooru/model/tag.py +++ b/server/szurubooru/model/tag.py @@ -100,7 +100,10 @@ class Tag(Base): primaryjoin=tag_id == TagImplication.parent_id, secondaryjoin=tag_id == TagImplication.child_id, lazy='joined') - metric = sa.orm.relationship('Metric', backref=sa.orm.backref('tag', uselist=False)) + metric = sa.orm.relationship( + 'Metric', + uselist=False, + cascade='all, delete-orphan') post_count = sa.orm.column_property( sa.sql.expression.select( diff --git a/server/szurubooru/tests/model/test_metric.py b/server/szurubooru/tests/model/test_metric.py index 28a66f0..d388031 100644 --- a/server/szurubooru/tests/model/test_metric.py +++ b/server/szurubooru/tests/model/test_metric.py @@ -15,6 +15,9 @@ def test_saving_metric(post_factory, tag_factory): assert post_metric.post_id is not None assert post_metric_range.tag_id is not None assert post_metric_range.post_id is not None + assert tag.metric.tag_id == tag.tag_id + assert tag.metric.min == 1. + assert tag.metric.max == 10. metric = ( db.session @@ -41,25 +44,105 @@ def test_saving_metric(post_factory, tag_factory): assert post_metric_range.low == 2. assert post_metric_range.high == 8. + tag = ( + db.session + .query(model.Tag) + .filter(model.Tag.tag_id == metric.tag_id) + .one()) + assert tag.metric == metric -def test_cascade_delete_metric(): - pass +def test_cascade_delete_metric(post_factory, tag_factory): + post1 = post_factory() + post2 = post_factory() + tag = tag_factory() + metric = model.Metric(tag=tag, min=1., max=10.) + post_metric1 = model.PostMetric(metric=metric, post=post1, value=2.3) + post_metric2 = model.PostMetric(metric=metric, post=post2, value=4.5) + db.session.add_all([post1, post2, tag, metric, post_metric1, post_metric2]) + db.session.flush() -def test_cascade_delete_tag(): - pass + assert not db.session.dirty + assert db.session.query(model.Post).count() == 2 + assert db.session.query(model.Tag).count() == 1 + assert db.session.query(model.Metric).count() == 1 + assert db.session.query(model.PostMetric).count() == 2 + db.session.delete(metric) + db.session.commit() -def test_cascade_delete_post(): - pass + assert not db.session.dirty + assert db.session.query(model.Post).count() == 2 + assert db.session.query(model.Tag).count() == 1 + assert db.session.query(model.Metric).count() == 0 + assert db.session.query(model.PostMetric).count() == 0 -def test_tag_without_metric(): - pass +def test_cascade_delete_tag(post_factory, tag_factory): + post = post_factory() + tag1 = tag_factory() + tag2 = tag_factory() + metric1 = model.Metric(tag=tag1, min=1., max=10.) + metric2 = model.Metric(tag=tag2, min=2., max=20.) + post_metric1 = model.PostMetric(metric=metric1, post=post, value=2.3) + post_metric2 = model.PostMetric(metric=metric2, post=post, value=4.5) + db.session.add_all([post, tag1, tag2, metric1, metric2, post_metric1, post_metric2]) + db.session.flush() + assert not db.session.dirty + assert db.session.query(model.Post).count() == 1 + assert db.session.query(model.Tag).count() == 2 + assert db.session.query(model.Metric).count() == 2 + assert db.session.query(model.PostMetric).count() == 2 -def test_post_tag_without_metric(): - pass + db.session.delete(tag2) + db.session.commit() + + assert not db.session.dirty + assert db.session.query(model.Post).count() == 1 + assert db.session.query(model.Tag).count() == 1 + assert db.session.query(model.Metric).count() == 1 + assert db.session.query(model.PostMetric).count() == 1 + + +def test_cascade_delete_post(post_factory, tag_factory): + post1 = post_factory() + post2 = post_factory() + tag = tag_factory() + metric = model.Metric(tag=tag, min=1., max=10.) + post_metric1 = model.PostMetric(metric=metric, post=post1, value=2.3) + post_metric2 = model.PostMetric(metric=metric, post=post2, value=4.5) + db.session.add_all([post1, post2, tag, metric, post_metric1, post_metric2]) + db.session.flush() + + assert not db.session.dirty + assert db.session.query(model.Post).count() == 2 + assert db.session.query(model.Tag).count() == 1 + assert db.session.query(model.Metric).count() == 1 + assert db.session.query(model.PostMetric).count() == 2 + + db.session.delete(post2) + db.session.commit() + + assert not db.session.dirty + assert db.session.query(model.Post).count() == 1 + assert db.session.query(model.Tag).count() == 1 + assert db.session.query(model.Metric).count() == 1 + assert db.session.query(model.PostMetric).count() == 1 + + +def test_tag_without_metric(tag_factory): + tag = tag_factory(names=['mytag']) + assert tag.metric is None + db.session.add(tag) + db.session.commit() + tag = ( + db.session + .query(model.Tag) + .join(model.TagName) + .filter(model.TagName.name == 'mytag') + .one()) + assert tag.metric is None def test_metric_counts(): |