@Before
  public void setup() {
    when(authzManager.authorize(any(Resource.class), any(User.class))).thenReturn(true);

    activatedActivity = mock(Activity.class);
    when(activatedActivity.getIdentifier()).thenReturn("activated activity");

    when(activatedActivityBean.getInstance()).thenReturn(activatedActivity);
    when(activatedActivityBean.isActivated()).thenReturn(true);

    when(nonActivatedActivityBean.isActivated()).thenReturn(false);

    Collection<SyncBeanDef<Activity>> activityList = new ArrayList<SyncBeanDef<Activity>>();
    activityList.add(activatedActivityBean);
    activityList.add(nonActivatedActivityBean);

    // This covers the case where the activity manager goes directly to the Errai bean manager.
    // The list includes all beans, active or otherwise, and the activity manager has to filter
    // them.
    when(iocManager.lookupBeans(Activity.class)).thenReturn(activityList);

    // And this covers the case where the activity manager does the lookup via the
    // ActivityBeansCache.
    // We set this up assuming ActivityBeansCache is well-behaved, and hides the existence of
    // inactive beans.
    // (of course this assumption is verified in a separate test)
    ActivityAndMetaInfo activatedActivityAndMetaInfo =
        activityBeansCache
        .new ActivityAndMetaInfo(activatedActivityBean, 0, Collections.<String>emptyList());
    when(activityBeansCache.getResourceActivities())
        .thenReturn(singletonList(activatedActivityAndMetaInfo));
    when(activityBeansCache.getActivity("activated activity")).thenReturn(activatedActivityBean);
  }
  public Widget makeItem(final MenuItem item, boolean isRoot) {
    if (!authzManager.authorize(item, identity)) {
      return null;
    }

    if (item instanceof MenuItemCommand) {
      final MenuItemCommand cmdItem = (MenuItemCommand) item;
      if (isRoot) {
        final Button button = new Button(cmdItem.getCaption());
        button.setSize(ButtonSize.SMALL);
        button.setEnabled(item.isEnabled());
        button.addClickHandler(
            new ClickHandler() {
              @Override
              public void onClick(final ClickEvent event) {
                cmdItem.getCommand().execute();
              }
            });
        item.addEnabledStateChangeListener(
            new EnabledStateChangeListener() {
              @Override
              public void enabledStateChanged(final boolean enabled) {
                button.setEnabled(enabled);
              }
            });
        return button;
      } else {
        final NavbarLink navbarLink = new NavbarLink();
        navbarLink.setText(cmdItem.getCaption());
        if (!item.isEnabled()) {
          navbarLink.addStyleName("disabled");
        }
        navbarLink.addClickHandler(
            new ClickHandler() {
              @Override
              public void onClick(final ClickEvent event) {
                cmdItem.getCommand().execute();
              }
            });
        item.addEnabledStateChangeListener(
            new EnabledStateChangeListener() {
              @Override
              public void enabledStateChanged(final boolean enabled) {
                if (enabled) {
                  navbarLink.removeStyleName("disabled");
                } else {
                  navbarLink.addStyleName("disabled");
                }
              }
            });
        return navbarLink;
      }

    } else if (item instanceof MenuGroup) {
      final MenuGroup groups = (MenuGroup) item;
      if (isRoot) {
        final List<Widget> widgetList = new ArrayList<Widget>();
        for (final MenuItem _item : groups.getItems()) {
          final Widget widget = makeItem(_item, false);
          if (widget != null) {
            widgetList.add(widget);
          }
        }

        if (widgetList.isEmpty()) {
          return null;
        }

        return makeDropDownMenuButton(groups.getCaption(), widgetList);

      } else {
        final List<Widget> widgetList = new ArrayList<Widget>();
        for (final MenuItem _item : groups.getItems()) {
          final Widget result = makeItem(_item, false);
          if (result != null) {
            widgetList.add(result);
          }
        }

        if (widgetList.isEmpty()) {
          return null;
        }

        return makeDropDownMenuButton(groups.getCaption(), widgetList);
      }

    } else if (item instanceof MenuCustom) {
      final Object result = ((MenuCustom) item).build();
      if (result instanceof Widget) {
        return (Widget) result;
      }
    }

    return null;
  }