from datetime import datetime, timedelta, date

from django.test import TestCase
from django.utils import timezone

from coin.members.models import Member
from .models import Item, ItemType, Loan


def localize(naive_dt):
    if not timezone.is_naive(naive_dt):
        raise ValueError('Expecting a naive datetime')
    else:
        return timezone.make_aware(naive_dt, timezone.get_current_timezone())


class HardwareLoaningTestCase(TestCase):
    def setUp(self):
        self.member = Member.objects.create(
            first_name='John',
            last_name='Doe',
            username='jdoe')
        self.item_type = ItemType.objects.create(name='Foos')
        self.item = Item.objects.create(
            type=self.item_type,
            designation='Bar Wheel',
            buy_date=date(2012,12,5))

    def test_running_(self):
        loan_start_date = localize(datetime(2011,1,14,12,0,0))
        loan = Loan.objects.create(
            item=self.item, user=self.member,
            loan_date=loan_start_date)

        self.assertEqual(Loan.objects.running().count(), 1)
        self.assertEqual(Loan.objects.finished().count(), 0)
        loan.item.give_back()
        self.assertEqual(Loan.objects.running().count(), 0)
        self.assertEqual(Loan.objects.finished().count(), 1)