"""
The latest version of this package is available at:
<http://github.com/jantman/biweeklybudget>

################################################################################
Copyright 2016 Jason Antman <jason@jasonantman.com> <http://www.jasonantman.com>

    This file is part of biweeklybudget, also known as biweeklybudget.

    biweeklybudget is free software: you can redistribute it and/or modify
    it under the terms of the GNU Affero General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    biweeklybudget is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU Affero General Public License for more details.

    You should have received a copy of the GNU Affero General Public License
    along with biweeklybudget.  If not, see <http://www.gnu.org/licenses/>.

The Copyright and Authors attributions contained herein may not be removed or
otherwise altered, except to add the Author attribution of a contributor to
this work. (Additional Terms pursuant to Section 7b of the AGPL v3)
################################################################################
While not legally required, I sincerely request that anyone who finds
bugs please submit them at <https://github.com/jantman/biweeklybudget> or
to me via email, and that you send any contributions or improvements
either as a pull request on GitHub, or to me via email.
################################################################################

AUTHORS:
Jason Antman <jason@jasonantman.com> <http://www.jasonantman.com>
################################################################################
"""

import pytest
from datetime import timedelta
from decimal import Decimal
import json

from biweeklybudget.tests.acceptance_helpers import AcceptanceHelper
from biweeklybudget.prime_rate import PrimeRateCalculator
from biweeklybudget.models import DBSetting
from biweeklybudget.utils import decode_json_datetime, dtnow


@pytest.mark.acceptance
@pytest.mark.usefixtures('class_refresh_db', 'refreshdb', 'testflask')
class TestPrimeRateCalculator(AcceptanceHelper):

    def test_01_verify_db(self, testdb):
        r = testdb.query(DBSetting).get('prime_rate')
        if r is None:
            return
        testdb.delete(r)
        testdb.flush()
        testdb.commit()

    def test_02_query(self, testdb):
        cls = PrimeRateCalculator(testdb)
        r = cls.prime_rate
        assert r >= Decimal('0.01')
        assert r <= Decimal('0.20')
        dbr = testdb.query(DBSetting).get('prime_rate')
        j = json.loads(dbr.value)
        age = dtnow() - decode_json_datetime(j['date'])
        assert age < timedelta(minutes=1)
        assert Decimal(j['value']) == r

    def test_03_verify_db(self, testdb):
        dbr = testdb.query(DBSetting).get('prime_rate')
        j = json.loads(dbr.value)
        age = dtnow() - decode_json_datetime(j['date'])
        assert age < timedelta(minutes=1)

    def test_04_get_again(self, testdb):
        cls = PrimeRateCalculator(testdb)
        r = cls.prime_rate
        assert r >= Decimal('0.01')
        assert r <= Decimal('0.20')
