def test_equality(self): item1 = menus.MenuItem(template_name='menu.html', activepattern='/item1', href='/item1/', icon='fa-item1', display="Item1", index=0) item1dup = menus.MenuItem(template_name='menu.html', activepattern='/item1', href='/item1/', icon='fa-item1', display="Item1", index=0) item2 = menus.MenuItem(template_name='menu.html', activepattern='/item2', href='/item2/', icon='fa-item2', display="Item2", index=0) self.assertTrue(item1 == item1) self.assertTrue(operator.eq(item1, item1)) self.assertTrue(item1 == item1dup) self.assertTrue(operator.eq(item1, item1dup)) self.assertTrue(item1dup == item1) self.assertTrue(operator.eq(item1dup, item1)) self.assertTrue(item1 != item2) self.assertTrue(operator.ne(item1, item2)) self.assertFalse(operator.ne(item1, item1dup)) self.assertFalse(item1 == 1) self.assertFalse(1 == item2) self.assertTrue(1 != item2) self.assertTrue(item2 != 1)
def test_iter_sorts(self, get_app, plugin_list): get_app.return_value = self.app plugin_list.return_value = [] menu = menus.Menu(user=self.user) menu.items = [ menus.MenuItem(href='/third', index=4), menus.MenuItem(href='/first', index=2), menus.MenuItem(href='/second', index=2), ] expected = ['/first', '/second', '/third'] for i, item in enumerate(i for i in menu): self.assertEqual(expected[i], item.href)
def as_menuitem(cls, **kwargs): """ Return an Opal MenuItem for this Pathway. Uses the following defaults, any of which may be overridden as kwargs: * `href`: .get_absolute_url() * `activepattern` : .get_absolute_url() * `icon`: .icon * `display`: .display_name """ menuitem_kwargs = {} if 'href' in kwargs: menuitem_kwargs['href'] = kwargs['href'] else: menuitem_kwargs['href'] = cls.get_absolute_url() if 'activepattern' in kwargs: menuitem_kwargs['activepattern'] = kwargs['activepattern'] else: menuitem_kwargs['activepattern'] = cls.get_absolute_url() if 'icon' in kwargs: menuitem_kwargs['icon'] = kwargs['icon'] else: menuitem_kwargs['icon'] = cls.icon if 'display' in kwargs: menuitem_kwargs['display'] = kwargs['display'] else: menuitem_kwargs['display'] = cls.display_name return menus.MenuItem(**menuitem_kwargs)
def test_sets_items_from_app(self, get_app, plugin_list): get_app.return_value = self.app plugin_list.return_value = [] menu_items = [menus.MenuItem()] self.app.get_menu_items.return_value = menu_items menu = menus.Menu(user=self.user) self.assertEqual(menu_items, menu.items)
class Application(application.OpalApplication): javascripts = [ 'js/health_app/routes.js', ] menuitems = [ menus.MenuItem(href="/#/list/", activepattern="/list/", icon="fa-table", display="Lists", index=0), menus.MenuItem(href='/pathway/#/add_patient', display='Add Patient', icon='fa fa-plus', activepattern='/pathway/#/add_patient') ]
def as_menuitem(kls, **kwargs): return menus.MenuItem( href=kwargs.get('href', kls.get_absolute_url()), activepattern=kwargs.get('activepattern', kls.get_absolute_url()), icon=kwargs.get('icon', kls.get_icon()), display=kwargs.get('display', kls.get_display_name()), )
def test_sets_items_from_plugin(self, get_app, plugin_list): get_app.return_value = self.app menu_items = [menus.MenuItem()] mock_plugin = MagicMock(name='Plugin') mock_plugin.menuitems = menu_items plugin_list.return_value = [mock_plugin] menu = menus.Menu(user=self.user) self.assertEqual(menu_items, menu.items)
def test_sets_properties__if_empty(self): item = menus.MenuItem() self.assertEqual(item.template_name, "") self.assertEqual(item.activepattern, "") self.assertEqual(item.href, "") self.assertEqual(item.icon, "") self.assertEqual(item.display, "") self.assertEqual(item.index, 100)
class Application(application.OpalApplication): menuitems = [ menus.MenuItem(href=reverse_lazy('add-patient'), display='Add Patient', icon='fa fa-plus', activepattern=reverse_lazy('add-patient')) ]
class TestPlugin1(plugins.OpalPlugin): javascripts = {'opal.test': ['js/test/notreal.js']} stylesheets = ['css/test/notreal.css'] head_extra = ['notareal_template.html'] menuitems = [menus.MenuItem(display='test')] angular_module_deps = ['js/test.angular.mod.js'] opal_angular_exclude_tracking_qs = [ "/patient_details", ]
def get_menu_items(cls, user=None): menu_items = [] if user.is_superuser or user.has_perm('rms.can_refer'): menu_items.append( menus.MenuItem( href="/pathway/#/referral_form/", display="Make a referral", icon="fa fa-plus", activepattern="pathway/#/referral_form/"), ) menu_items.append( menus.MenuItem( href="/#/list/my_referrals", display="My Referrals", icon="fa fa-user", activepattern="my_referrals", template_name="menu_items/my_referrals.html" ) ) if user.is_superuser or user.has_perm('rms.can_assign_location'): menu_items.append( menus.MenuItem( href="/#/list/new_referrals", display="Triage Inbox", icon="fa fa-inbox", activepattern="new_referrals" ) ) if user.is_superuser or user.has_perm('rms.can_confirm_location'): menu_items.append( menus.MenuItem( href="/#/list/approval_inbox", display="Approval Inbox", icon="fa fa-inbox", activepattern="approval_inbox" ), ) menu_items += copy.copy(cls.menuitems) return menu_items
def as_menuitem(kls, **kwargs): """ Return an instance of `opal.core.menus.MenuItem` that will direct the user to this patient list. """ return menus.MenuItem( href=kwargs.get('href', kls.get_absolute_url()), activepattern=kwargs.get('activepattern', kls.get_absolute_url()), icon=kwargs.get('icon', kls.get_icon()), display=kwargs.get('display', kls.get_display_name()), )
def get_menu_items(klass, user=None): # we import here as settings must be set before this is imported from rbhl.pathways import NewReferral items = [ NewReferral.as_menuitem(index=1), menus.MenuItem(activepattern=reverse('active-list'), href=reverse('active-list'), display=('Active patients'), icon="fa-table") ] if user: if user.is_authenticated: if user.is_staff: items.append( menus.MenuItem(href="/admin/", icon="fa-cogs", display="Admin", index=999)) return items
def test_excludes_items_from_app_if_for_user_is_false( self, get_app, plugin_list): get_app.return_value = self.app plugin_list.return_value = [] menu_item = menus.MenuItem() menu_items = [menu_item] self.app.menuitems = menu_items with patch.object(menu_item, "for_user") as for_user: for_user.return_value = False menu = menus.Menu(user=self.user) self.assertEqual([], menu.items)
def get_menu_items(klass, user=None): """ Default implementation of get_menu_items() """ logout = menus.MenuItem(href=reverse("logout"), icon="fa-sign-out", index=1000) admin = menus.MenuItem(href="/admin/", icon="fa-cogs", display=_("Admin"), index=999) items = [] items += klass.menuitems if user: if not user.is_authenticated: return [] else: items.append(logout) if user.is_staff: items.append(admin) return [item for item in items if item.for_user(user)]
def get_menu_items(klass, user=None): """ Default implementation of get_menu_items() """ # we import here as settings must be set before this is imported from django.contrib.auth.views import logout as logout_view logout = menus.MenuItem(href=reverse(logout_view), icon="fa-sign-out", index=1000) admin = menus.MenuItem(href="/admin/", icon="fa-cogs", display="Admin", index=999) items = [] items += klass.menuitems if user: if user.is_authenticated: items.append(logout) if user.is_staff: items.append(admin) return items
def get_menu_items(klass, user=None): menuitems = [ # menus.MenuItem( # href="/#/list/", activepattern="/list/", # icon="fa-table", display="Lists", # index=0 # ), menus.MenuItem(href='/pathway/#/add_patient', display='Add Patient', icon='fa fa-plus', activepattern='/pathway/#/add_patient') ] admin = menus.MenuItem(href="/admin/", icon="fa-cogs", display="Admin", index=999) if user: if user.is_staff: menuitems.append(admin) return menuitems
def test_excludes_items_from_plugin_if_for_user_is_false( self, get_app, plugin_list): get_app.return_value = self.app menu_item = menus.MenuItem() menu_items = [menu_item] mock_plugin = MagicMock(name='Plugin') mock_plugin.menuitems = menu_items plugin_list.return_value = [mock_plugin] with patch.object(menu_item, "for_user") as for_user: for_user.return_value = False menu = menus.Menu(user=self.user) self.assertEqual([], menu.items)
def test_sets_kwargs(self): item = menus.MenuItem(template_name='menu.html', activepattern='/thing', href='/thing/', icon='fa-thing', display="Thing", index=0) self.assertEqual(item.template_name, 'menu.html') self.assertEqual(item.activepattern, '/thing') self.assertEqual(item.href, '/thing/') self.assertEqual(item.icon, 'fa-thing') self.assertEqual(item.display, "Thing") self.assertEqual(item.index, 0)
def get_menu_items(klass, user=None): items = [ menus.MenuItem( href='/#/list/labour/', display="Labour Ward", icon="fa-plus-circle", activepattern='labour', index=1 ), menus.MenuItem( href="pathway/#/add_patient/", icon="fa fa-female", display="Add Patient", activepattern="add_patient", index=2 ), menus.MenuItem( href='/#/list/epidural_requested/', display="Epidurals Requested", icon="fa-plus-circle", activepattern='epidural_requested', index=3 ), menus.MenuItem( href='/#/list/epidural_completed/', display="Follow Ups", icon="fa fa-mail-forward", activepattern='epidural_completed', index=4 ), menus.MenuItem( href='/accounts/logout/', display="Log Out", icon="fa fa-sign-out", index=5 ), ] return items
class TrendyPlugin(plugins.OpalPlugin): """ Main entrypoint to expose this plugin to our Opal application. """ urls = urlpatterns javascripts = { # Add your javascripts here! 'opal.trendy': [ 'js/trendy/app.js', 'js/trendy/directives.js', # 'js/trendy/app.js', # 'js/trendy/controllers/larry.js', # 'js/trendy/services/larry.js', ] } def list_schemas(self): """ Return any patient list schemas that our plugin may define. """ return {} def roles(self, user): """ Given a (Django) USER object, return any extra roles defined by our plugin. """ return {} menuitems = [ menus.MenuItem(href="/trendy", display="Trendy", icon="fa fa-tasks", activepattern='/trendy', index=1) ]
class TestPlugin1(plugins.OpalPlugin): javascripts = ['js/test/notreal.js'] stylesheets = ['css/test/notreal.css'] head_extra = ['notareal_template.html'] menuitems = [ menus.MenuItem(display='test') ] angular_module_deps = ['js/test.angular.mod.js']
class OpalApplication(object): core_javascripts = { 'opal.upstream.deps': [ "js/lib/modernizr.js", "js/lib/jquery-1.11.3/jquery-1.11.3.js", "js/lib/d3/d3.js", "js/lib/c3-0.4.10/c3.js", "js/lib/bower_components/angular/angular.js", "js/lib/bower_components/angular-route/angular-route.js", "js/lib/bower_components/angular-resource/angular-resource.js", "js/lib/bower_components/angular-cookies/angular-cookies.js", "js/lib/angular-ui-utils-0.1.0/ui-utils.js", "js/lib/ui-bootstrap-tpls-0.14.3.js", "js/lib/utils/clipboard.js", "bootstrap-3.1.0/js/bootstrap.js", "js/lib/angulartics-0.17.2/angulartics.min.js", "js/lib/angulartics-0.17.2/angulartics-ga.min.js", "js/lib/bower_components/ment.io/dist/mentio.js", "js/lib/bower_components/ment.io/dist/templates.js", # "js/ui-select/dist/select.js", "js/lib/bower_components/angular-ui-select/dist/select.js", "js/lib/bower_components/ng-idle/angular-idle.js", "js/lib/bower_components/angular-local-storage/dist/angular-local-storage.js", # noqa: E501 "js/lib/bower_components/ment.io/dist/templates.js", "js/lib/bower_components/angular-growl-v2/build/angular-growl.js", "js/lib/jquery-plugins/idle-timer.js", "js/lib/jquery-plugins/jquery.stickytableheaders.js", "js/lib/utils/underscore.js", "js/lib/utils/showdown.js", "js/lib/utils/moment.js", "js/lib/ngprogress-lite/ngprogress-lite.js", ], 'opal.utils': [ "js/opal/utils.js", "js/opal/opaldown.js", "js/opal/directives.js", "js/opal/filters.js", ], 'opal.services': [ "js/opal/services_module.js", "js/opal/services/flow.js", "js/opal/services/user_profile.js", "js/opal/services/user.js", "js/opal/services/item.js", "js/opal/services/http_interceptors.js", "js/opal/services/episode.js", "js/opal/services/patient.js", "js/opal/services/episode_visibility.js", "js/opal/services/episode_loader.js", "js/opal/services/patient_summary.js", "js/opal/services/record_loader.js", "js/opal/services/extract_schema_loader.js", "js/opal/services/schema.js", "js/opal/services/patient_loader.js", "js/opal/services/episode_resource.js", "js/opal/services/record_editor.js", "js/opal/services/copy_to_category.js", "js/opal/services/patientlist_loader.js", 'js/opal/services/fields_translater.js', 'js/opal/services/referencedata.js', 'js/opal/services/metadata.js', 'js/opal/services/patient_consultation_record.js', ], 'opal.controllers': [ "js/opal/controllers_module.js", "js/opal/controllers/patient_list_redirect.js", "js/opal/controllers/patient_list.js", "js/opal/controllers/patient_detail.js", "js/opal/controllers/hospital_number.js", "js/opal/controllers/add_episode.js", "js/opal/controllers/edit_item.js", "js/opal/controllers/edit_teams.js", "js/opal/controllers/delete_item_confirmation.js", "js/opal/controllers/account.js", "js/opal/controllers/discharge.js", "js/opal/controllers/undischarge.js", "js/opal/controllers/copy_to_category.js", "js/opal/controllers/keyboard_shortcuts.js", "js/opal/controllers/patient_access_log.js", "js/opal/controllers/lookup_list_reference.js" ] } javascripts = [] styles = [] actions = [] menuitems = [ menus.MenuItem(href="/#/list/", activepattern="/list/", icon="fa-table", display="Lists", index=0) ] default_episode_category = 'Inpatient' opal_angular_exclude_tracking_qs = [ "/search", "/extract", ] @classmethod def get_core_javascripts(klass, namespace): """ Return core javascripts for a given NAMESPACE """ return [x for x in klass.core_javascripts[namespace]] @classmethod def get_javascripts(klass): """ Return the javascripts for our application """ return [x for x in klass.javascripts] @classmethod def get_menu_items(klass, user=None): """ Default implementation of get_menu_items() """ # we import here as settings must be set before this is imported from django.contrib.auth.views import logout as logout_view logout = menus.MenuItem(href=reverse(logout_view), icon="fa-sign-out", index=1000) admin = menus.MenuItem(href="/admin/", icon="fa-cogs", display="Admin", index=999) items = [] items += klass.menuitems if user: if user.is_authenticated: items.append(logout) if user.is_staff: items.append(admin) return items @classmethod def get_menu(klass, user=None): """ Return the Menu for this application. """ return menus.Menu(user=user) @classmethod def get_styles(klass): """ Return the stylesheets for our application """ return [x for x in klass.styles] @classmethod def directory(cls): """ Return the filesystem path to the app directory """ return os.path.realpath(os.path.dirname(inspect.getfile(cls)))
def test_for_user(self): item = menus.MenuItem(href="/wat/") self.assertTrue(item.for_user(self.user))
class Application(application.OpalApplication): javascripts = [ 'js/rms/routes.js', 'js/rms/controllers/directives.js', 'js/rms/controllers/allocated_clinic_location_helper.js', 'js/opal/controllers/discharge.js', # Uncomment this if you want to implement custom dynamic flows. # 'js/rms/flow.js', ] default_episode_category = 'Referral' menuitems = [ # dict(href="/#/overview", display="Region Overview", # icon="fa fa-dashboard", activepattern="overview"), menus.MenuItem( href="/#/myclinic", display="Morpeth Clinic", icon="fa fa-dashboard", activepattern="myclinic"), ] @classmethod def get_menu_items(cls, user=None): menu_items = [] if user.is_superuser or user.has_perm('rms.can_refer'): menu_items.append( menus.MenuItem( href="/pathway/#/referral_form/", display="Make a referral", icon="fa fa-plus", activepattern="pathway/#/referral_form/"), ) menu_items.append( menus.MenuItem( href="/#/list/my_referrals", display="My Referrals", icon="fa fa-user", activepattern="my_referrals", template_name="menu_items/my_referrals.html" ) ) if user.is_superuser or user.has_perm('rms.can_assign_location'): menu_items.append( menus.MenuItem( href="/#/list/new_referrals", display="Triage Inbox", icon="fa fa-inbox", activepattern="new_referrals" ) ) if user.is_superuser or user.has_perm('rms.can_confirm_location'): menu_items.append( menus.MenuItem( href="/#/list/approval_inbox", display="Approval Inbox", icon="fa fa-inbox", activepattern="approval_inbox" ), ) menu_items += copy.copy(cls.menuitems) return menu_items
def test_repr(self): item = menus.MenuItem(href="/wat/") self.assertEqual("<Opal MenuItem href: '/wat/'>", item.__repr__())