Fully cover the Gregorian calendar generator #109
@@ -18,24 +18,12 @@
 | 
			
		||||
"""
 | 
			
		||||
 | 
			
		||||
from datetime import datetime, timedelta
 | 
			
		||||
from functools import wraps
 | 
			
		||||
 | 
			
		||||
from flask_babelex import lazy_gettext as _
 | 
			
		||||
 | 
			
		||||
from . import CalendarSystem
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def to_timestamp(func):
 | 
			
		||||
    """Decorator that converts the return value of a function from `datetime` to a UNIX timestamp
 | 
			
		||||
    """
 | 
			
		||||
 | 
			
		||||
    @wraps(func)
 | 
			
		||||
    def _decorator(*args, **kwargs):
 | 
			
		||||
        return func(*args, **kwargs).timestamp()
 | 
			
		||||
 | 
			
		||||
    return _decorator
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class GregorianCalendar(CalendarSystem):
 | 
			
		||||
    """Gregorian calendar system for Calendar.social
 | 
			
		||||
    """
 | 
			
		||||
@@ -104,7 +92,6 @@ class GregorianCalendar(CalendarSystem):
 | 
			
		||||
        return day_list
 | 
			
		||||
 | 
			
		||||
    @property
 | 
			
		||||
    @to_timestamp
 | 
			
		||||
    def prev_year(self):
 | 
			
		||||
        """Returns the timestamp of the same date in the previous year
 | 
			
		||||
        """
 | 
			
		||||
@@ -119,7 +106,6 @@ class GregorianCalendar(CalendarSystem):
 | 
			
		||||
        return self.timestamp.replace(year=self.timestamp.year - 1).year
 | 
			
		||||
 | 
			
		||||
    @property
 | 
			
		||||
    @to_timestamp
 | 
			
		||||
    def prev_month(self):
 | 
			
		||||
        """Returns the timestamp of the same day in the previous month
 | 
			
		||||
        """
 | 
			
		||||
@@ -142,7 +128,6 @@ class GregorianCalendar(CalendarSystem):
 | 
			
		||||
        return self.month_names[timestamp.month - 1]
 | 
			
		||||
 | 
			
		||||
    @property
 | 
			
		||||
    @to_timestamp
 | 
			
		||||
    def next_month(self):
 | 
			
		||||
        """Returns the timestamp of the same day in the next month
 | 
			
		||||
        """
 | 
			
		||||
@@ -165,7 +150,6 @@ class GregorianCalendar(CalendarSystem):
 | 
			
		||||
        return self.month_names[timestamp.month - 1]
 | 
			
		||||
 | 
			
		||||
    @property
 | 
			
		||||
    @to_timestamp
 | 
			
		||||
    def next_year(self):
 | 
			
		||||
        """Returns the timestamp of the same date in the next year
 | 
			
		||||
        """
 | 
			
		||||
@@ -198,7 +182,7 @@ class GregorianCalendar(CalendarSystem):
 | 
			
		||||
 | 
			
		||||
        month_end_timestamp = month_start_timestamp.replace(month=next_month)
 | 
			
		||||
 | 
			
		||||
        return now >= month_start_timestamp and now < month_end_timestamp
 | 
			
		||||
        return month_start_timestamp <= now < month_end_timestamp
 | 
			
		||||
 | 
			
		||||
    @staticmethod
 | 
			
		||||
    def day_events(date, user=None):
 | 
			
		||||
 
 | 
			
		||||
@@ -11,10 +11,10 @@
 | 
			
		||||
        </tr>
 | 
			
		||||
        <tr class="month">
 | 
			
		||||
            <td>
 | 
			
		||||
                <a href="{{ url_for('hello', date=calendar.prev_year) }}">« {{ calendar.prev_year_year }}</a>
 | 
			
		||||
                <a href="{{ url_for('hello', date=calendar.prev_year.timestamp()) }}">« {{ calendar.prev_year_year }}</a>
 | 
			
		||||
            </td>
 | 
			
		||||
            <td>
 | 
			
		||||
                <a href="{{ url_for('hello', date=calendar.prev_month) }}">‹ {{ calendar.prev_month_name }}</a>
 | 
			
		||||
                <a href="{{ url_for('hello', date=calendar.prev_month.timestamp()) }}">‹ {{ calendar.prev_month_name }}</a>
 | 
			
		||||
            </td>
 | 
			
		||||
            <td colspan="3" class="month-name">
 | 
			
		||||
{% if not calendar.has_today %}
 | 
			
		||||
@@ -26,10 +26,10 @@
 | 
			
		||||
{% endif %}
 | 
			
		||||
            </td>
 | 
			
		||||
            <td>
 | 
			
		||||
                <a href="{{ url_for('hello', date=calendar.next_month) }}">{{ calendar.next_month_name }} ›</a>
 | 
			
		||||
                <a href="{{ url_for('hello', date=calendar.next_month.timestamp()) }}">{{ calendar.next_month_name }} ›</a>
 | 
			
		||||
            </td>
 | 
			
		||||
            <td>
 | 
			
		||||
                <a href="{{ url_for('hello', date=calendar.next_year) }}">{{ calendar.next_year_year }} »</a>
 | 
			
		||||
                <a href="{{ url_for('hello', date=calendar.next_year.timestamp()) }}">{{ calendar.next_year_year }} »</a>
 | 
			
		||||
            </td>
 | 
			
		||||
        </tr>
 | 
			
		||||
        <tr class="days">
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										92
									
								
								tests/test_gregorian.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										92
									
								
								tests/test_gregorian.py
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,92 @@
 | 
			
		||||
from datetime import datetime, date
 | 
			
		||||
 | 
			
		||||
from pytz import utc
 | 
			
		||||
 | 
			
		||||
from calsocial.calendar_system.gregorian import GregorianCalendar
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def test_day_list():
 | 
			
		||||
    calendar = GregorianCalendar(utc.localize(datetime(2018, 1, 1, 0, 0, 0)).timestamp())
 | 
			
		||||
    assert calendar.days[0].date() == date(2018, 1, 1)
 | 
			
		||||
    assert calendar.days[-1].date() == date(2018, 2, 4)
 | 
			
		||||
 | 
			
		||||
    calendar = GregorianCalendar(utc.localize(datetime(2018, 12, 1, 0, 0, 0)).timestamp())
 | 
			
		||||
    assert calendar.days[0].date() == date(2018, 11, 26)
 | 
			
		||||
    assert calendar.days[-1].date() == date(2019, 1, 6)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def test_prev_year():
 | 
			
		||||
    calendar = GregorianCalendar(utc.localize(datetime(2018, 1, 1, 0, 0, 0)).timestamp())
 | 
			
		||||
    assert calendar.prev_year == datetime(2017, 1, 1, 0, 0, 0)
 | 
			
		||||
 | 
			
		||||
    calendar = GregorianCalendar(utc.localize(datetime(2018, 12, 1, 0, 0, 0)).timestamp())
 | 
			
		||||
    assert calendar.prev_year == datetime(2017, 12, 1, 0, 0, 0)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def test_prev_year_year():
 | 
			
		||||
    calendar = GregorianCalendar(utc.localize(datetime(2018, 1, 1, 0, 0, 0)).timestamp())
 | 
			
		||||
    assert calendar.prev_year_year == 2017
 | 
			
		||||
 | 
			
		||||
    calendar = GregorianCalendar(utc.localize(datetime(2018, 12, 1, 0, 0, 0)).timestamp())
 | 
			
		||||
    assert calendar.prev_year_year == 2017
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def test_prev_month():
 | 
			
		||||
    calendar = GregorianCalendar(utc.localize(datetime(2018, 1, 1, 0, 0, 0)).timestamp())
 | 
			
		||||
    assert calendar.prev_month == datetime(2017, 12, 1, 0, 0, 0)
 | 
			
		||||
 | 
			
		||||
    calendar = GregorianCalendar(utc.localize(datetime(2018, 12, 1, 0, 0, 0)).timestamp())
 | 
			
		||||
    assert calendar.prev_month == datetime(2018, 11, 1, 0, 0, 0)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def test_prev_month_name():
 | 
			
		||||
    calendar = GregorianCalendar(utc.localize(datetime(2018, 1, 1, 0, 0, 0)).timestamp())
 | 
			
		||||
    assert calendar.prev_month_name == 'December'
 | 
			
		||||
 | 
			
		||||
    calendar = GregorianCalendar(utc.localize(datetime(2018, 12, 1, 0, 0, 0)).timestamp())
 | 
			
		||||
    assert calendar.prev_month_name == 'November'
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def test_next_year():
 | 
			
		||||
    calendar = GregorianCalendar(utc.localize(datetime(2018, 1, 1, 0, 0, 0)).timestamp())
 | 
			
		||||
    assert calendar.next_year == datetime(2019, 1, 1, 0, 0, 0)
 | 
			
		||||
 | 
			
		||||
    calendar = GregorianCalendar(utc.localize(datetime(2018, 12, 1, 0, 0, 0)).timestamp())
 | 
			
		||||
    assert calendar.next_year == datetime(2019, 12, 1, 0, 0, 0)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def test_next_year_year():
 | 
			
		||||
    calendar = GregorianCalendar(utc.localize(datetime(2018, 1, 1, 0, 0, 0)).timestamp())
 | 
			
		||||
    assert calendar.next_year_year == 2019
 | 
			
		||||
 | 
			
		||||
    calendar = GregorianCalendar(utc.localize(datetime(2018, 12, 1, 0, 0, 0)).timestamp())
 | 
			
		||||
    assert calendar.next_year_year == 2019
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def test_next_month():
 | 
			
		||||
    calendar = GregorianCalendar(utc.localize(datetime(2018, 1, 1, 0, 0, 0)).timestamp())
 | 
			
		||||
    assert calendar.next_month == datetime(2018, 2, 1, 0, 0, 0)
 | 
			
		||||
 | 
			
		||||
    calendar = GregorianCalendar(utc.localize(datetime(2018, 12, 1, 0, 0, 0)).timestamp())
 | 
			
		||||
    assert calendar.next_month == datetime(2019, 1, 1, 0, 0, 0)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def test_next_month_name():
 | 
			
		||||
    calendar = GregorianCalendar(utc.localize(datetime(2018, 1, 1, 0, 0, 0)).timestamp())
 | 
			
		||||
    assert calendar.next_month_name == 'February'
 | 
			
		||||
 | 
			
		||||
    calendar = GregorianCalendar(utc.localize(datetime(2018, 12, 1, 0, 0, 0)).timestamp())
 | 
			
		||||
    assert calendar.next_month_name == 'January'
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def test_has_today():
 | 
			
		||||
    calendar = GregorianCalendar(utc.localize(datetime(1990, 12, 1, 0, 0, 0)).timestamp())
 | 
			
		||||
    assert calendar.has_today is False
 | 
			
		||||
 | 
			
		||||
    calendar = GregorianCalendar(utc.localize(datetime.utcnow()).timestamp())
 | 
			
		||||
    assert calendar.has_today is True
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def test_current_month():
 | 
			
		||||
    calendar = GregorianCalendar(utc.localize(datetime(2018, 1, 1, 0, 0, 0)).timestamp())
 | 
			
		||||
    assert calendar.month == 'January, 2018'
 | 
			
		||||
		Reference in New Issue
	
	Block a user