aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHunternif2019-04-16 19:24:50 +0700
committerHunternif2019-04-16 20:01:37 +0700
commit067fdd2ad1814bc0588f393bb955563d2c1ba546 (patch)
tree3fd9c27b287684497ec7235b9f1e2fd6413719c4
parent91a31eba4372a59592bec892fe82ec7a3fc8dc7e (diff)
Complete metric models and unit tests
-rw-r--r--server/szurubooru/model/metric.py1
-rw-r--r--server/szurubooru/model/post.py4
-rw-r--r--server/szurubooru/model/tag.py5
-rw-r--r--server/szurubooru/tests/model/test_metric.py103
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():

© 2015 - 2026 Jakob L. Kreuze