import unittest

from endpoints.v1 import v1_bp
from endpoints.verbs import verbs
from app import app

class TestAnonymousAccessChecked(unittest.TestCase):
  def verifyBlueprint(self, blueprint):
    class Checker(object):
      def __init__(self, test_case):
        self.test_case = test_case
        self.first_registration = True
        self.app = app

      def add_url_rule(self, rule, endpoint, view_function, methods=None):
        if (not '__anon_protected' in dir(view_function) and
            not '__anon_allowed' in dir(view_function)):
          error_message = ('Missing anonymous access protection decorator on function ' +
                           '%s under blueprint %s' % (endpoint, blueprint.name))
          self.test_case.fail(error_message)

    for deferred_function in blueprint.deferred_functions:
      deferred_function(Checker(self))

  def test_anonymous_access_checked(self):
    self.verifyBlueprint(v1_bp)
    self.verifyBlueprint(verbs)

if __name__ == '__main__':
  unittest.main()