def test_cron_update_single_user(client, session, outbox, admin_user): user = UserFactory(active=True) user_email = user.email user2 = UserFactory(active=True) author = AuthorFactory() now = datetime.utcnow() entry1 = EntryFactory(published=now - timedelta(hours=5)) entry2 = EntryFactory(published=now - timedelta(hours=3)) entry3 = EntryFactory(published=now - timedelta(hours=26)) entry1.authors.append(author) entry2.authors.append(author) entry3.authors.append(author) sub = SubscriptionFactory(user=user, author=author, active=True) sub2 = SubscriptionFactory(user=user2, author=author, active=True) sub.add_period(PERIOD.DAILY) sub2.add_period(PERIOD.DAILY) db.session.commit() assert User.query.count() == 3 assert Email.query.count() == 0 h = Headers() # auth = requests.auth._basic_auth_str(admin_user.email, admin_user.password) # h.add('Authorization', auth) h["X-Cron-Api-Key"] = CRON_API_KEY url = "{0}{1}{2}{3}".format( url_for("subscriptions.send_update"), "?period=Daily", "&user_id=", str(user.id) ) response = client.post(url, headers=h) assert response.status_code == 200 db.session.add(user) db.session.add(author) assert len(outbox) == 1 assert outbox[0].recipients[0] == user_email assert Email.query.count() == 1 email = Email.query.filter_by( address=user_email, period_id=Period.get_period_id(PERIOD.DAILY) ).first() assert email is not None assert email.address == user_email assert len(email.authors) == 1 assert len(email.entries) == 2 assert email.period == PERIOD.DAILY sub = Subscription.query.filter_by(user_id=user.id, author_id=author.id).first() assert sub.last_email_sent is not None TestCase().assertAlmostEqual( sub.last_email_sent, datetime.utcnow(), delta=timedelta(seconds=1) )
def test_cron_update_single_user(subhandler, client, session): # users = User.query.all() # pprint(users) user = UserFactory(active=True) user2 = UserFactory(active=True) author = AuthorFactory() now = datetime.utcnow() entry1 = EntryFactory(published=now - timedelta(hours=5)) entry2 = EntryFactory(published=now - timedelta(hours=3)) entry3 = EntryFactory(published=now - timedelta(hours=26)) entry1.authors.append(author) entry2.authors.append(author) entry3.authors.append(author) db.session.commit() sub = SubscriptionFactory(user=user, author=author, active=True) sub2 = SubscriptionFactory(user=user2, author=author, active=True) sub.add_period(PERIOD.DAILY) sub2.add_period(PERIOD.DAILY) user_email = '*****@*****.**' user_password = '******' add_admin(user_email, user_password) db.session.commit() # with client as c: with mail.record_messages() as outbox: h = Headers() auth = requests.auth._basic_auth_str(user_email, user_password) h.add('Authorization', auth) url = url_for('subscriptions.send_update') + '?period=Daily' + '&user_id=' + str(user.id) response = client.post(url, headers=h) assert response.status_code == 200 assert len(outbox) == 1 assert outbox[0].recipients[0] == user.email email_count = Email.query.count() assert email_count == 1 email = Email.query.filter_by( user_id=user.id, period_id=Period.get_period_id(PERIOD.DAILY)).first() assert email.address == user.email assert len(email.authors) == 1 assert len(email.entries) == 2 TestCase().assertCountEqual(email.entries, [entry1, entry2]) assert email.period == PERIOD.DAILY TestCase().assertAlmostEqual(sub.last_email_sent, datetime.utcnow(), delta=timedelta(seconds=1))
def test_cron_update(client, session, outbox, admin_user): user = UserFactory(active=True, confirmed_at=datetime(2016, 1, 1)) user2 = UserFactory(active=False, confirmed_at=datetime(2016, 1, 1)) user3 = UserFactory(active=True, confirmed_at=datetime(2016, 1, 1)) author1 = AuthorFactory() author2 = AuthorFactory() now = datetime.utcnow() entry1 = EntryFactory(published=now - timedelta(hours=5)) entry2 = EntryFactory(published=now - timedelta(hours=3)) entry3 = EntryFactory(published=now - timedelta(hours=26)) entry1.authors.append(author1) entry1.authors.append(author2) entry2.authors.append(author2) entry3.authors.append(author1) sub1 = SubscriptionFactory(user=user, author=author1, active=True) sub2 = SubscriptionFactory(user=user, author=author2, active=True) sub3 = SubscriptionFactory(user=user2, author=author1, active=False) sub4 = SubscriptionFactory(user=user3, author=author2, active=True) sub1.add_period(PERIOD.DAILY) sub2.add_period(PERIOD.DAILY) sub3.add_period(PERIOD.DAILY) sub4.add_period(PERIOD.DAILY) db.session.commit() assert Email.query.count() == 0 h = Headers() # auth = requests.auth._basic_auth_str(admin_user.email, admin_user.password) # h.add('Authorization', auth) h["X-Cron-Api-Key"] = CRON_API_KEY url = url_for("subscriptions.send_update") + "?period=Daily" response = client.post(url, headers=h) assert response.status_code == 200 db.session.add(user) db.session.add(entry1) db.session.add(entry2) db.session.add(sub1) db.session.add(author1) assert len(outbox) == 2 assert outbox[0].recipients[0] == user.email assert outbox[1].recipients[0] == user3.email assert Email.query.count() == 2 email = Email.query.filter_by( user_id=user.id, period_id=Period.get_period_id(PERIOD.DAILY) ).first() assert email.address == user.email assert len(email.authors) == 2 assert len(email.entries) == 2 TestCase().assertCountEqual(email.entries, [entry1, entry2]) assert email.period == PERIOD.DAILY sub = Subscription.query.filter_by(user_id=user.id, author_id=author1.id).first() assert sub.last_email_sent is not None TestCase().assertAlmostEqual( sub.last_email_sent, datetime.utcnow(), delta=timedelta(seconds=1) )