|
|
@@ -2,7 +2,7 @@ import pytest
|
|
|
from dataclasses import fields
|
|
|
|
|
|
from twhatter.output import Database
|
|
|
-from twhatter.output.sqlalchemy import Tweet
|
|
|
+from twhatter.output.sqlalchemy import Tweet, User as DbUser
|
|
|
from twhatter.parser import *
|
|
|
|
|
|
|
|
|
@@ -90,3 +90,64 @@ class TestTweetsOutput:
|
|
|
for t in tweets:
|
|
|
db_tweet = session.query(Tweet).filter(Tweet.id == t.id).one()
|
|
|
assert getattr(db_tweet, field_name) == getattr(t, field_name)
|
|
|
+
|
|
|
+
|
|
|
+class TestUsersOutput:
|
|
|
+ testdata = [
|
|
|
+ pytest.param('tests/fixtures/users/users_1.yaml', User,
|
|
|
+ id="users"),
|
|
|
+ ]
|
|
|
+
|
|
|
+ @pytest.fixture(scope="function")
|
|
|
+ def users_output_factory(self, users_factory, output):
|
|
|
+ """Factory for users that have been output"""
|
|
|
+ def _users_output_factory(fixtures_file):
|
|
|
+ users = users_factory(fixtures_file)
|
|
|
+ output.start()
|
|
|
+ output.output_users(users)
|
|
|
+ output.stop()
|
|
|
+ return users
|
|
|
+
|
|
|
+ return _users_output_factory
|
|
|
+
|
|
|
+ @pytest.mark.parametrize("fixtures_file, raw_class", testdata)
|
|
|
+ def test_presence(self, users_factory, output, fixtures_file, session, raw_class):
|
|
|
+ users = users_factory(fixtures_file)
|
|
|
+ output.start()
|
|
|
+ output.output_users(users)
|
|
|
+ output.stop()
|
|
|
+
|
|
|
+ for u in users:
|
|
|
+ assert session.query(DbUser).filter(DbUser.id == u.id).one()
|
|
|
+
|
|
|
+
|
|
|
+ @pytest.mark.parametrize("fixtures_file, raw_class", testdata)
|
|
|
+ def test_twice(self, users_factory, output, fixtures_file, session, raw_class):
|
|
|
+ users = users_factory(fixtures_file)
|
|
|
+ output.start()
|
|
|
+ output.output_users(users)
|
|
|
+ output.stop()
|
|
|
+
|
|
|
+ output.start()
|
|
|
+ output.output_users(users)
|
|
|
+ output.stop()
|
|
|
+
|
|
|
+ for u in users:
|
|
|
+ assert session.query(DbUser).filter(DbUser.id == u.id).one()
|
|
|
+
|
|
|
+
|
|
|
+ @pytest.mark.parametrize("field_name, fixtures_file, raw_tweet_cls", [
|
|
|
+ pytest.param(
|
|
|
+ field.name,
|
|
|
+ *td.values,
|
|
|
+ id="{}-{}".format(td.id, field.name)
|
|
|
+ )
|
|
|
+ for td in testdata
|
|
|
+ for field in fields(User)
|
|
|
+ ])
|
|
|
+ def test_attributes(self, users_output_factory, fixtures_file, session, raw_tweet_cls, field_name):
|
|
|
+ users = users_output_factory(fixtures_file)
|
|
|
+
|
|
|
+ for u in users:
|
|
|
+ db_tweet = session.query(DbUser).filter(DbUser.id == u.id).one()
|
|
|
+ assert getattr(db_tweet, field_name) == getattr(u, field_name)
|