def testGetAccessibleLayers(self):
    self.mox.StubOutWithMock(model, 'Layer')
    mock_layers = [self.mox.CreateMockAnything() for _ in xrange(3)]
    dummy_user = object()
    permission = model.Permission

    model.Layer.all().AndReturn(mock_layers)
    mock_layers[0].IsPermitted(dummy_user, permission.ACCESS).AndReturn(False)
    mock_layers[1].IsPermitted(dummy_user, permission.ACCESS).AndReturn(True)
    mock_layers[1].IsPermitted(dummy_user, permission.MANAGE).AndReturn(False)
    mock_layers[2].IsPermitted(dummy_user, permission.ACCESS).AndReturn(True)
    mock_layers[2].IsPermitted(dummy_user, permission.MANAGE).AndReturn(True)

    self.mox.ReplayAll()
    self.assertEqual(base._GetAccessibleLayers(dummy_user), mock_layers[1:])
    self.assertEqual(mock_layers[1].managed, False)
    self.assertEqual(mock_layers[2].managed, True)
  def testRenderTemplate(self):
    self.mox.StubOutWithMock(os.path, 'dirname')
    self.mox.StubOutWithMock(base, '_GetAccessibleLayers')
    mock_layer = self.mox.CreateMockAnything()
    mock_layer.permission_set = self.mox.CreateMockAnything()
    mock_user = self.mox.CreateMockAnything()
    self.mox.StubOutWithMock(users, 'get_current_user')
    self.mox.StubOutWithMock(users, 'create_logout_url')
    self.mox.StubOutWithMock(users, 'is_current_user_admin')
    self.mox.StubOutWithMock(template, 'register_template_library')
    self.mox.StubOutWithMock(template, 'render')

    handler = base.PageHandler()
    handler.response = self.mox.CreateMockAnything()
    handler.response.out = self.mox.CreateMockAnything()
    mock_permissions = [self.mox.CreateMockAnything() for _ in xrange(2)]
    mock_permissions[0].type = 'a'
    mock_permissions[1].type = 'b'
    dummy_category = object()
    dummy_accessible_layers = object()
    dummy_logout_url = object()
    dummy_nickname = object()
    dummy_is_admin = object()
    dummy_result = object()
    name = 'dummy_name'
    args = {'x': 'y', 'z': 'w'}

    @mox.Func
    def VerifyArgs(args):
      expected_args = ['logout_url', 'username', 'is_admin', 'debug', 'layer',
                       'active_permissions', 'all_layers', 'category',
                       'x', 'z']
      self.assertEqual(set(args), set(expected_args))
      self.assertEqual(args['logout_url'], dummy_logout_url)
      self.assertEqual(args['username'], dummy_nickname)
      self.assertEqual(args['is_admin'], dummy_is_admin)
      self.assertEqual(args['debug'], True)
      self.assertEqual(args['layer'], mock_layer)
      self.assertEqual(set(args['active_permissions']), set(['a', 'b']))
      self.assertTrue(args['active_permissions']['a'])
      self.assertTrue(args['active_permissions']['b'])
      self.assertEqual(args['all_layers'], dummy_accessible_layers)
      self.assertEqual(args['category'], {dummy_category: True})
      return True

    users.get_current_user().AndReturn(mock_user)
    base._GetAccessibleLayers(mock_user).AndReturn(dummy_accessible_layers)
    mock_layer.permission_set.filter('user', mock_user).AndReturn(
        mock_permissions)
    users.create_logout_url('/').AndReturn(dummy_logout_url)
    mock_user.nickname().AndReturn(dummy_nickname)
    users.is_current_user_admin().AndReturn(dummy_is_admin)
    template.register_template_library('template_functions.pages')
    os.path.dirname(mox.IgnoreArg()).AndReturn('dummy_dirname')
    template.render('dummy_dirname/../html_templates/dummy_name.html',
                    VerifyArgs).AndReturn(dummy_result)
    handler.response.out.write(dummy_result)

    self.mox.ReplayAll()

    handler.RenderTemplate(mock_layer, dummy_category, name, args)