def test_method_get_route(self):
        route_manager = RouteManager()
        route_name_list = ['route_{}'.format(n) for n in range(10)]

        for route_name in route_name_list:
            r = Route(route_name, '/api/v1/test/')
            route_manager.add_route(r)
            self.assertIn(route_name, route_manager.ROUTES.keys())
        self.assertEqual(len(route_manager.ROUTES), len(route_name_list))

        for route_name in route_name_list:
            r = route_manager.get_route(route_name)
            self.assertIsInstance(r, Route)
            self.assertEqual(r.name, route_name)
        not_existing_route = route_manager.get_route('non_existing_route_name')
        self.assertNotIsInstance(not_existing_route, Route)
        self.assertIsNone(not_existing_route)
    def test_method_add_route(self):
        route_manager = RouteManager()
        self.assertEqual(route_manager.ROUTES, {})

        # Route #1 is added
        route_1 = Route('test_route_1', '/api/v1/test/route-1/')
        route_manager.add_route(route_1)

        self.assertEqual(len(route_manager.ROUTES), 1)
        self.assertEqual(route_1.name, 'test_route_1')
        self.assertIn(route_1.name, route_manager.ROUTES.keys())

        # Route #2 - with a DIFFERENT name - is added
        route_2 = Route('test_route_2', '/api/v1/test/route-2/')
        route_manager.add_route(route_2)

        self.assertEqual(len(route_manager.ROUTES), 2)
        self.assertEqual(route_2.name, 'test_route_2')
        self.assertIn(route_2.name, route_manager.ROUTES.keys())

        # Route #3 - with the SAME name of Route #2 - is added
        route_3 = Route('test_route_2', '/api/v1/test/route-3/')
        self.assertEqual(route_3.name, 'test_route_2')

        with self.assertRaises(KeyError):
            route_manager.add_route(route_3)

        self.assertEqual(len(route_manager.ROUTES), 2)
        self.assertIsNot(route_3, route_manager.ROUTES['test_route_2'])

        # Route #3 - with the SAME name of Route #2 - is added AGAIN & AGAIN
        for i in range(10):
            with self.assertRaises(KeyError):
                route_manager.add_route(route_3)

        self.assertEqual(len(route_manager.ROUTES), 2)
        self.assertIsNot(route_3, route_manager.ROUTES['test_route_2'])

        # Route #4 - with a DIFFERENT name - is added
        route_4 = Route('test_route_4', '/api/v1/test/route-4/')
        route_manager.add_route(route_4)

        self.assertEqual(len(route_manager.ROUTES), 3)
        self.assertEqual(route_4.name, 'test_route_4')
        self.assertIn(route_4.name, route_manager.ROUTES.keys())
    def test_method_remove_route(self):
        # Create the RouteManager and feed it with some initial data
        objects_number = 5
        generated_route_list = _generate_route_objects(objects_number)
        route_manager = RouteManager()
        for r in generated_route_list:
            route_manager.add_route(r)

        # Check that the RouteManager has been properly created and fed
        self.assertEqual(len(route_manager.ROUTES), objects_number)
        for r in route_manager.ROUTES.values():
            self.assertIsInstance(r, Route)

        # Check that a specific Route actually is in the RouteManager and
        # then remove it (and check the removal)
        self.assertIn('test_route_3', route_manager.ROUTES)
        route_manager.remove_route('test_route_3')
        self.assertNotIn('test_route_3', route_manager.ROUTES)
        self.assertEqual(len(route_manager.ROUTES), (objects_number - 1))
    def setUp(self):
        super(TestRouteManagerJavascriptGeneration, self).setUp()

        # Create the RouteManager and feed it with some initial data
        self.objects_number = 5
        generated_route_list = _generate_route_objects(self.objects_number)
        self.route_manager = RouteManager()
        for r in generated_route_list:
            self.route_manager.add_route(r)

        # Check that the RouteManager has been properly created and fed
        self.assertEqual(len(self.route_manager.ROUTES), self.objects_number)
        for r in self.route_manager.ROUTES.values():
            self.assertIsInstance(r, Route)

        # Let's start (eventually!)
        self.name_of_template = 'template_test.js'
        self.path_to_template = get_module_path('nh_eobs_mobile') + '/tests/'
        self.all_route_list = self.route_manager.ROUTES.values()
        self.assertIsInstance(self.all_route_list, list)
 def test_default_route_manager_creation(self):
     route_manager = RouteManager()
     self.assertEqual(route_manager.ROUTES, {})
        )

######################
# ROUTING SYSTEM TESTS
######################

# Define server's routing constants to be used for the routing tests
SERVER_PROTOCOL = "http"
SERVER_ADDRESS = "localhost"
SERVER_PORT = "{0}".format(config['xmlrpc_port'])
MOBILE_URL_PREFIX = '/mobile'
BASE_URL = SERVER_PROTOCOL + '://' + SERVER_ADDRESS + ':' + SERVER_PORT
BASE_MOBILE_URL = BASE_URL + MOBILE_URL_PREFIX

# Create the RouteManager and the Route objects for the tests
route_manager_test = RouteManager()

no_args_route = Route('no_args_route', '/no/args/route/', auth='none')
no_args_route_only_post = Route(
    'no_args_route_only_post',
    '/no/args/route/post/',
    auth='none',
    methods=['POST']
)
no_args_route_auth_as_user = Route(
    'no_args_route_auth_as_user',
    '/no/args/route/auth/user/',
    auth='user'
)

single_arg_route = Route(
import openerp
from openerp import http
from openerp.addons.nh_eobs_api.routing import ResponseJSON
from openerp.addons.nh_eobs_api.routing import Route
from openerp.addons.nh_eobs_api.routing import RouteManager
from openerp.http import request
from openerp.modules.module import get_module_path
from openerp.osv import osv
from openerp.tools import DEFAULT_SERVER_DATETIME_FORMAT as DTF
from werkzeug import exceptions

_logger = logging.getLogger(__name__)

# Create the RouteManager and the Route objects for the tests
route_manager = RouteManager(url_prefix='/api/v1')
route_list = [
    Route('json_share_patients', '/staff/assign/', methods=['POST']),
    Route('json_claim_patients', '/staff/unassign/', methods=['POST']),
    Route('json_colleagues_list', '/staff/colleagues/'),
    Route('json_invite_patients', '/staff/invite/<activity_id>/'),
    Route('json_accept_patients',
          '/staff/accept/<activity_id>/',
          methods=['POST']),
    Route('json_reject_patients',
          '/staff/reject/<activity_id>/',
          methods=['POST']),
    Route('json_take_task', '/tasks/take_ajax/<task_id>/', methods=['POST']),
    Route('json_cancel_take_task',
          '/tasks/cancel_take_ajax/<task_id>/',
          methods=['POST']),