import unittest
from datetime import date
from operator import attrgetter

class Proxy:
    def __init__(self, current_user, reservation_service):
        self.current_user = current_user
        self.reservation_service = reservation_service

    def highest_total_price_reservations(self, date_from, date_to, reservations_count):
        if self.current_user.can_see_reservations:
            return self.reservation_service.highest_total_price_reservations(
                date_from,
                date_to,
                reservations_count
              )
        else:
            return []

#Models and ReservationService:

class Reservation:
    def __init__(self, date, total_price):
        self.date = date
        self.total_price = total_price

class ReservationService:
    def highest_total_price_reservations(self, date_from, date_to, reservations_count):
        # normally it would be read from database/external service
        reservations = [
            Reservation(date(2014, 5, 15), 100),
            Reservation(date(2017, 5, 15), 10),
            Reservation(date(2017, 1, 15), 50)
        ]

        filtered_reservations = [r for r in reservations if (date_from <= r.date <= date_to)]

        sorted_reservations = sorted(filtered_reservations, key=attrgetter('total_price'), reverse=True)

        return sorted_reservations[0:reservations_count]


class User:
    def __init__(self, can_see_reservations, name):
        self.can_see_reservations = can_see_reservations
        self.name = name

#Consumer service:

class StatsService:
    def __init__(self, reservation_service):
        self.reservation_service = reservation_service

    def year_top_100_reservations_average_total_price(self, year):
        reservations = self.reservation_service.highest_total_price_reservations(
            date(year, 1, 1),
            date(year, 12, 31),
            1
        )

        if len(reservations) > 0:
            total = sum(r.total_price for r in reservations)

            return total / len(reservations)
        else:
            return 0

class testing(unittest.TestCase):
    def test(self, user, year):
        reservations_service = Proxy(user, ReservationService())
        stats_service = StatsService(reservations_service)
        average_price = stats_service.year_top_100_reservations_average_total_price(year)
        print("{0} will see: {1}".format(user.name, average_price))

    #test(User(True, "John the Admin"), 2017)

    #test(User(False, "Guest"),         2017)

if __name__ == 'test' :
    unittest.main()
@@ -1,20 +1,4 @@
-import unittest%0A
 from
@@ -2064,46 +2064,15 @@
  0%0A%0A
-class testing(unittest.TestCase):%0A    
+#Test:%0A
 def 
@@ -2076,22 +2076,16 @@
 ef test(
-self, 
 user, ye
@@ -2085,36 +2085,32 @@
 ser, year):%0A    
-   
- 
 reservations_ser
@@ -2150,20 +2150,16 @@
 vice())%0A
-    
     stat
@@ -2209,20 +2209,16 @@
 ce)%0A    
-  
-  
 average_
@@ -2291,20 +2291,16 @@
 e(year)%0A
-    
     prin
@@ -2356,21 +2356,16 @@
 rice))%0A%0A
-    #
 test(Use
@@ -2401,14 +2401,8 @@
 17)%0A
-%0A    #
 test
@@ -2441,49 +2441,4 @@
 017)
-%0A%0Aif __name__ == 'test' :%0A    unittest.main()

Test suite unsuccessful