Unable to enable wikis on project that only has another group as a member

Summary

Currently it is not possible to enable Wikis on projects that have previously had it disabled. Based on the error message it appears that this occurs when a project has another group as it's member.

Steps to reproduce

  1. Create a project in a personal namespace, and disable the Wiki functionality on it
  2. Transfer that project to a group that only has another group as it's member
  3. Attempt to enable wikis on that project

What is the current bug behavior?

Enabling of Wikis fails (with an error message)

What is the expected correct behavior?

Wiki functionality is enabled for the project

Relevant logs and/or screenshots

production_json.log:   "method":"PATCH",
   "path":"/graphics/seexpr",
   "format":"js",
   "controller":"ProjectsController",
   "action":"update",
   "status":500,
   "time":"2020-08-26T10:11:46.086Z",
   "params":[
      {
         "key":"utf8",
         "value":"✓"
      },
      {
         "key":"_method",
         "value":"patch"
      },
      {
         "key":"authenticity_token",
         "value":"[FILTERED]"
      },
      {
         "key":"update_section",
         "value":"js-shared-permissions"
      },
      {
         "key":"project",
         "value":{
            "visibility_level":"20",
            "request_access_enabled":"false",
            "project_feature_attributes":{
               "issues_access_level":"20",
               "repository_access_level":"20",
               "merge_requests_access_level":"20",
               "forking_access_level":"20",
               "builds_access_level":"20",
               "wiki_access_level":"20",
               "snippets_access_level":"20",
               "metrics_dashboard_access_level":"10"
            },
            "lfs_enabled":"false",
            "packages_enabled":"false",
            "emails_disabled":"false",
            "project_setting_attributes":{
               "show_default_award_emojis":"true"
            }
         }
      },
      {
         "key":"confirm_path_input",
         "value":""
      },
      {
         "key":"commit",
         "value":"Save changes"
      },
      {
         "key":"namespace_id",
         "value":"graphics"
      },
      {
         "key":"id",
         "value":"seexpr"
      }
   ],
   "remote_ip":"[REMOVED]",
   "user_id":2,
   "username":"bcooksley",
   "ua":"[REMOVED]",
   "correlation_id":"j9FeWJBDM38",
   "meta.user":"bcooksley",
   "meta.project":"graphics/seexpr",
   "meta.root_namespace":"graphics",
   "meta.caller_id":"ProjectsController#update",
   "redis_calls":1,
   "redis_duration_s":0.000172,
   "redis_read_bytes":181,
   "redis_write_bytes":588,
   "redis_shared_state_calls":1,
   "redis_shared_state_duration_s":0.000172,
   "redis_shared_state_read_bytes":181,
   "redis_shared_state_write_bytes":588,
   "queue_duration_s":0.010298,
   "cpu_s":0.1,
   "exception.class":"ArgumentError",
   "exception.message":"user must be a User, got Group",
   "exception.backtrace":[
      "app/models/wiki.rb:38:in `initialize'",
      "app/services/projects/update_service.rb:138:in `new'",
      "app/services/projects/update_service.rb:138:in `ensure_wiki_exists'",
      "lib/gitlab/metrics/instrumentation.rb:161:in `block in ensure_wiki_exists'",
      "lib/gitlab/metrics/method_call.rb:27:in `measure'",
      "lib/gitlab/metrics/instrumentation.rb:161:in `ensure_wiki_exists'",
      "app/services/projects/update_service.rb:14:in `execute'",
      "lib/gitlab/metrics/instrumentation.rb:161:in `block in execute'",
      "lib/gitlab/metrics/method_call.rb:27:in `measure'",
      "lib/gitlab/metrics/instrumentation.rb:161:in `execute'",
      "app/controllers/projects_controller.rb:87:in `update'",
      "app/controllers/application_controller.rb:491:in `set_current_admin'",
      "lib/gitlab/session.rb:11:in `with_session'",
      "app/controllers/application_controller.rb:482:in `set_session_storage'",
      "lib/gitlab/i18n.rb:73:in `with_locale'",
      "lib/gitlab/i18n.rb:79:in `with_user_locale'",
      "app/controllers/application_controller.rb:476:in `set_locale'",
      "lib/gitlab/error_tracking.rb:50:in `with_context'",
      "app/controllers/application_controller.rb:541:in `sentry_context'",
      "app/controllers/application_controller.rb:469:in `block in set_current_context'",
      "lib/gitlab/application_context.rb:52:in `block in use'",
      "lib/gitlab/application_context.rb:52:in `use'",
      "lib/gitlab/application_context.rb:20:in `with_context'",
      "app/controllers/application_controller.rb:462:in `set_current_context'",
      "lib/gitlab/metrics/elasticsearch_rack_middleware.rb:16:in `call'",
      "lib/gitlab/middleware/rails_queue_duration.rb:33:in `call'",
      "lib/gitlab/metrics/rack_middleware.rb:16:in `block in call'",
      "lib/gitlab/metrics/transaction.rb:61:in `run'",
      "lib/gitlab/metrics/rack_middleware.rb:16:in `call'",
      "lib/gitlab/request_profiler/middleware.rb:17:in `call'",
      "lib/gitlab/middleware/go.rb:20:in `call'",
      "lib/gitlab/etag_caching/middleware.rb:13:in `call'",
      "lib/gitlab/middleware/multipart.rb:140:in `call'",
      "lib/gitlab/middleware/read_only/controller.rb:51:in `call'",
      "lib/gitlab/middleware/read_only.rb:18:in `call'",
      "lib/gitlab/middleware/same_site_cookies.rb:27:in `call'",
      "lib/gitlab/middleware/basic_health_check.rb:25:in `call'",
      "lib/gitlab/middleware/handle_ip_spoof_attack_error.rb:25:in `call'",
      "lib/gitlab/middleware/request_context.rb:23:in `call'",
      "config/initializers/fix_local_cache_middleware.rb:9:in `call'",
      "lib/gitlab/metrics/requests_rack_middleware.rb:60:in `call'",
      "lib/gitlab/middleware/release_env.rb:12:in `call'"
   ],
   "db_duration_s":0.00188,
   "view_duration_s":0.0,
   "duration_s":0.07846,
   "db_count":7,
   "db_write_count":0,
   "db_cached_count":1
}

Possible fixes

It appears that app/models/wiki.rb:38 is responsible for this issue, as it cannot handle groups being a member of projects.