Welcome to mirror list, hosted at ThFree Co, Russian Federation.

application_settings.rb « runtime « qa « qa - gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
blob: 4cbce0972b61e084010ea56adbf3b2463e0f8b36 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
# frozen_string_literal: true

module QA
  module Runtime
    # TODO: Ideally this should be changed to a normal class due to now being able to override what api client is used
    #
    class ApplicationSettings
      class << self
        include Support::API

        APPLICATION_SETTINGS_PATH = '/application/settings'

        # Set a GitLab application setting
        # Example:
        #   #set({ allow_local_requests_from_web_hooks_and_services: true })
        #   #set(allow_local_requests_from_web_hooks_and_services: true)
        # https://docs.gitlab.com/ee/api/settings.html
        def set_application_settings(api_client: admin_api_client, **application_settings)
          @original_application_settings = get_application_settings(api_client: api_client)

          QA::Runtime::Logger.info("Setting application settings: #{application_settings}")
          r = put(Runtime::API::Request.new(api_client, APPLICATION_SETTINGS_PATH).url, **application_settings)
          return if r.code == QA::Support::API::HTTP_STATUS_OK

          body = parse_body(r)
          raise("Couldn't set application settings #{application_settings.inspect}, code: '#{r.code}', body: #{body}")
        end

        def get_application_settings(api_client: admin_api_client)
          parse_body(get(Runtime::API::Request.new(api_client, APPLICATION_SETTINGS_PATH).url))
        end

        # TODO: This class probably needs to be refactored because this method relies on original settings to have been
        # populated sometime in the past and there is no guarantee original settings instance variable is still valid
        def restore_application_settings(...)
          set_application_settings(**@original_application_settings.slice(...))
        end

        private

        def admin_api_client
          @admin_api_client ||= Runtime::API::Client.as_admin
        rescue API::Client::AuthorizationError => e
          raise "Administrator access is required to set application settings. #{e.message}"
        end
      end
    end
  end
end