# Copyright: Copyright (c) 2012 Opscode, Inc.
# License: Apache License, Version 2.0
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     https://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

# This annotated Pedant configuration file details the various
# configuration settings available to you.  It is separate from the
# actual Pedant::Config class because not all settings have sane
# defaults, and not all settings are appropriate in all settings.

################################################################################
# You MUST specify the address of the server the API requests will be
# sent to.  Only specify protocol, hostname, and port.
chef_server "http://127.0.0.1:8889"

# If you are doing development testing, you can specify the address of
# the Solr server.  The presence of this parameter will enable tests
# to force commits to Solr, greatly decreasing the amout of time
# needed for testing the search endpoint.  This is only an
# optimization for development!  If you are testing a "live" Chef
# Server, or otherwise do not have access to the Solr server from your
# testing location, you should not specify a value for this parameter.
# The tests will still run, albeit slower, as they will now need to
# poll for a period to ensure they are querying committed results.
# search_server "http://localhost:8983"

# Related to the 'search_server' parameter, this specifies the maximum
# amout of time (in seconds) that search endpoint requests should be
# retried before giving up.  If not explicitly set, it will default to
# 65 seconds; only set it if you know that your Solr commit interval
# differs significantly from this.
maximum_search_time 0

# OSC sends erchef a host header with a port, so this option needs
# # to be enabled for Pedant tests to work correctly
explicit_port_url true

server_api_version 0

internal_server chef_server

# see dummy_endpoint.rb for details.
search_server   chef_server
search_commit_url "/dummy"
search_url_fmt    "/dummy?fq=+X_CHEF_type_CHEF_X:%{type}&q=%{query}&wt=json"

# We're starting to break tests up into groups based on different
# criteria.  The proper API tests (the results of which are viewable
# to OPC customers) should be the only ones run by Pedant embedded in
# OPC installs.  There are other specs that help us keep track of API
# cruft that we want to come back and fix later; these shouldn't be
# viewable to customers, but we should be able to run them in
# development and CI environments.  If this parameter is missing or
# explicitly `false` only the customer-friendly tests will be run.
#
# This is mainly here for documentation purposes, since the
# command-line `opscode-pedant` utility ultimately determines this
# value.
include_internal false

key = "spec/support/stickywicket.pem"

org(name: "pedant-testorg",
    create_me: !ENV["CHEF_FS"],
    validator_key: key)

internal_account_url chef_server
delete_org true

# Test users.  The five users specified below are required; their
# names (:user, :non_org_user, etc.) are indicative of their role
# within the tests.  All users must have a ':name' key.  If they have
# a ':create_me' key, Pedant will create these users for you.  If you
# are using pre-existing users, you must supply a ':key_file' key,
# which should be the fully-qualified path /on the machine Pedant is
# running on/ to a private key for that user.
superuser_name "pivotal"

def cheffs_or_else_user(value)
  ENV["CHEF_FS"] ? "pivotal" : value
end

keyfile_maybe = ENV["CHEF_FS"] ? { key_file: key } : { key_file: nil }

requestors({
             clients: {
               # The the admin user, for the purposes of getting things rolling
               admin: {
                 name: "pedant_admin_client",
                 create_me: true,
                 create_knife: true,
                 admin: true,
               },
               non_admin: {
                 name: "pedant_client",
                 create_me: true,
                 create_knife: true,
               },
               bad: {
                 name: "bad_client",
                 create_me: true,
                 create_knife: true,
                 bogus: true,
               },
             },

             users: {
               # An administrator in the testing organization
               admin: {
                 name: cheffs_or_else_user("pedant_admin_user"),
                 create_me: !ENV["CHEF_FS"],
                 associate: !ENV["CHEF_FS"],
                 create_knife: true,
               }.merge(keyfile_maybe),

               non_admin: {
                 name: cheffs_or_else_user("pedant_user"),
                 create_me: !ENV["CHEF_FS"],
                 associate: !ENV["CHEF_FS"],
                 create_knife: true,
               }.merge(keyfile_maybe),

               # A user that is not a member of the testing organization
               bad: {
                 name: cheffs_or_else_user("pedant-nobody"),
                 create_me: !ENV["CHEF_FS"],
                 create_knife: true,
                 associate: false,
               }.merge(keyfile_maybe),
             },
           })

self[:tags] = %i{validation authentication authorization}
verify_error_messages false

ruby_users_endpoint? false
ruby_acls_endpoint? false
ruby_org_assoc? false
chef_12? true
