3scale/porta

View on GitHub
features/support/paths.rb

Summary

Maintainability
F
3 days
Test Coverage
# frozen_string_literal: true

# rubocop:disable Style/PerlBackrefs
World(Module.new do
  break unless defined?(DeveloperPortal)

  include System::UrlHelpers.cms_url_helpers

  def provider_first_service!
    @provider.first_service!
  end

  # Maps a name to a path. Used by the
  #
  #   When /^I go to (.+)$/ do |page_name|
  #
  # step definition in web_steps.rb
  #
  def path_to(page_name, *args) # rubocop:disable Metrics/AbcSize, Metrics/CyclomaticComplexity, Metrics/MethodLength, Metrics/PerceivedComplexity
    case page_name

    # Public
    when /the home\s?page/
      '/'

    when /^the sign up page for the "([^"]*)" plan$/
      plan = Plan.find_by_name!($1)
      signup_path(:'plan_ids[]' => plan.id)

    when /the sign ?up page/,
         'the old multiapps sign up page',
         'the signup page'
      signup_path

    when 'the provider sign up page'
      provider_signup_path

    when 'the provider login page'
      provider_login_path

    when 'the provider onboarding wizard page'
      provider_admin_onboarding_wizard_intro_path

    when 'the login page'
      login_path

    when /^the login page on ([a-z0-9\.\-]+)$/
      login_url(:host => $1)

    when 'logout'
      logout_path

    when 'the provider reset password page'
      reset_provider_password_path

    when 'the forgot password page'
      new_admin_account_password_path

    when 'the support page'
      '/support'

    when 'the password page with invalid password reset token'
      admin_account_password_path(:password_reset_token => 'bogus')

    when 'the provider password page with invalid password reset token'
      provider_password_path(:password_reset_token => 'bogus')

    when 'the billing information wizard page'
      edit_provider_admin_account_path(next_step: 'credit_card')

    #
    # Messages - Admin portal
    #

    when "the provider inbox page"
      provider_admin_messages_root_path

    when "the provider sent messages page"
      provider_admin_messages_outbox_index_path

    when /^the provider page of message with subject "([^"]*)"$/
      message = @provider.sent_messages.find_by(subject: Regexp.last_match(1))
      provider_admin_messages_outbox_path(message)

    when "the outbox compose page"
      new_provider_admin_messages_outbox_path

    #
    # Messages - buyer side
    #
    when "the compose page"
      new_admin_messages_outbox_path

    when "the inbox page"
      admin_messages_root_path

    when "the outbox page"
      admin_messages_outbox_index_path
    when "the inbox show page"
      account = Account.first
      message = account.messages.build(body: 'foo', subject: 'bar')
      message.to current_account
      message.deliver
      admin_messages_inbox_path(message.recipients[0])

    when "the outbox show page"
      message = current_account.messages.build(body: 'foo', subject: 'bar')
      message.to = current_account
      message.save
      admin_messages_outbox_path(message)

    when "the trash page"
      admin_messages_trash_index_path

    when "the trash show page"
      account = Account.first
      message = account.messages.build(body: 'foo', subject: 'bar')
      message.to current_account
      message.deliver
      message = current_account.received_messages.last
      message.hide!

      admin_messages_trash_path(message)

    #
    # Forum
    #
    when 'forum settings',
         'the forum settings page'
      edit_admin_site_forum_path

    when 'the forum page'
      forum_path
    when 'the new topic page'
      new_forum_topic_path
    when /^the "([^"]*)" topic page$/
      forum_topic_path(Topic.find_by_title!($1))
    when 'the forum subscriptions page'
      forum_subscriptions_path

    #
    # Logged in
    #
    when /the dashboard( page)?/
      admin_dashboard_path

    when 'the provider dashboard'
      provider_admin_dashboard_path

    when 'search',
         'the search page'
      search_path

    #
    # Account settings (Admin portal)
    #
    when 'the account page',
          'settings'
      admin_account_path

    when 'the account edit page'
      edit_admin_account_path

    when 'the provider account page'
      provider_admin_account_path

    when 'the new provider account page'
      new_provider_admin_account_path

    when 'the provider personal page',
         'the provider personal details page'
      edit_provider_admin_user_personal_details_path

    when 'the provider edit account page',
         'the provider account edit page'
      edit_provider_admin_account_path

    when 'the edit credit card details page',
         'the braintree edit credit card details page'
      edit_admin_account_braintree_blue_path
    when 'the credit card details page'
      admin_account_payment_details_path
    when 'the provider braintree credit card details page'
      provider_admin_account_braintree_blue_path
    when 'the provider braintree edit credit card details page'
      edit_provider_admin_account_braintree_blue_path

    when 'the braintree credit card details page'
      admin_account_braintree_blue_path
    when 'the stripe credit card details page'
      admin_account_stripe_path
    when 'the stripe edit credit card details page'
      edit_admin_account_stripe_path
    when 'the personal details page'
      admin_account_personal_details_path
    when 'the notifications page'
      provider_admin_account_notifications_path
    when 'the provider users page'
      provider_admin_account_users_path
    when 'the users page'
      admin_account_users_path
    when /^the provider user edit page for "([^"]*)"$/
      user = User.find_by_username!($1)
      edit_provider_admin_account_user_path(user)
    when /^the user edit page for "([^"]*)"$/
      user = User.find_by_username!($1)
      edit_admin_account_user_path(user)
    when 'the new invitation page'
      new_admin_account_invitation_path
    when 'the sent invitations page'
      admin_account_invitations_path
    when 'the provider new invitation page'
      new_provider_admin_account_invitation_path
    when 'the provider sent invitations page'
      provider_admin_account_invitations_path
    when 'the edit provider logo page'
      edit_provider_admin_account_logo_path
    when 'the email configurations page'
      provider_admin_account_email_configurations_path
    when 'the new email configurations page'
      new_provider_admin_account_email_configurations_path

    #
    # SSO Integrations (Admin portal)
    #
    when 'the users sso integrations page'
      provider_admin_account_authentication_providers_path
    when 'the sso integration page'
      auth_provider = AuthenticationProvider.last
      provider_admin_account_authentication_provider_path(auth_provider)
    when 'the new sso integration page'
      new_provider_admin_account_authentication_provider_path
    when 'the edit rh sso integration page'
      edit_provider_admin_account_authentication_provider_path(@rhsso_integration)

      #
      # SSO Integrations (Dev portal)
      #
    when 'the developer portal users sso integrations page'
      provider_admin_authentication_providers_path
    when 'the developer portal sso integration page'
      auth_provider = AuthenticationProvider.last
      provider_admin_authentication_provider_path(auth_provider)
    when /^the developer portal new sso integration page for "([^"]*)"$/
      new_provider_admin_authentication_provider_path(kind: $1)
    when 'the developer portal edit integration page'
      auth_provider = AuthenticationProvider.last
      edit_provider_admin_authentication_provider_path(auth_provider)
    when 'the developer portal edit rh sso integration page'
      edit_provider_admin_authentication_provider_path(@rhsso_dev_portal_integration)
    when 'the developer portal edit auth0 integration page'
      edit_provider_admin_authentication_provider_path(@auth0_dev_portal_integration)

    #
    # ActiveDocs (Admin portal)
    #
    when /the ActiveDocs page/
      admin_api_docs_services_path
    when /the new ActiveDocs spec page/
      new_admin_api_docs_service_path
    when /the spec's preview page from Audience context/
      spec = @api_docs_service
      preview_admin_api_docs_service_path(spec)
    when /(?:the spec's|spec "(.*)") edit page from Audience context/
      spec = $1.present? ? @provider.api_docs_services.find_by!(name: $1) : @api_docs_service
      edit_admin_api_docs_service_path(spec)

    when /the product's ActiveDocs page/
      admin_service_api_docs_path(@product)
    when /the product's new ActiveDocs spec page/
      new_admin_service_api_doc_path(@product)
    when /the spec's preview page from Product context/
      spec = @api_docs_service
      preview_admin_service_api_doc_path(spec.service, spec)
    when /(?:the spec's|spec "(.*)") edit page from Product context/
      spec = $1.present? ? @provider.api_docs_services.find_by!(name: $1) : @api_docs_service
      edit_admin_service_api_doc_path(service_id: spec.service, id: spec)

    #
    # API Management
    #
    when /(the )?API dashboard( page)?/
      admin_service_path provider_first_service!
    when /^the overview page of product "([^"]+)"$/
      admin_service_path @provider.services.find_by!(name: $1)

    when 'the alerts page'
      admin_alerts_path

    when /^the alerts of "(.*)"$/
      admin_service_alerts_path(Service.find_by!(name: $1))

    when /^the (edit|settings) page for service "([^"]+)" of provider "(.+?)"$/
      provider = Account.providers.find_by_org_name! $3
      service = provider.services.find_by_name! $2
      polymorphic_path [$1.to_sym, :admin, service]

    when 'the new service page'
      new_admin_service_path

    when 'the service plans admin page'
      admin_service_service_plans_path provider_first_service!

    when /^the usage rules of service "([^"]*)"$/
      service = Service.find_by!(name: Regexp.last_match(1))
      usage_rules_admin_service_path(service)

    when /^the backends of the product$/
      admin_service_backend_usages_path(Service.last)

    when /^the backends of product "(.+?)"$/
      product = Service.find_by!(name: $1)
      admin_service_backend_usages_path(product)

    when /^the new backend page for product "(.*)"$/
      product = Service.find_by!(name: $1)
      new_admin_service_backend_usage_path(product)

    when /^the edit backend usage page of "(.*)" for product "(.*)"$/
      product = Service.find_by!(name: $2)
      config = product.backend_api_configs
                      .references(:backend_api)
                      .includes(:backend_api)
                      .find_by!("backend_apis.name" => $1)
      edit_admin_service_backend_usage_path(product, config)

    when /^the integration errors page of product "([^"]+)"$/
      service = Service.find_by!(name: $1)
      admin_service_errors_path(service)

    #
    # Plans (Admin portal)
    #
    when /^(?:(application|service|account) )?plan "(.*)" admin edit page$/
      model = case $1
              when 'application' then ApplicationPlan
              when 'service' then ServicePlan
              when 'account' then AccountPlan
              else Plan
              end

      plan = model.find_by!(name: $2)
      edit_polymorphic_path([:admin, plan])

    #
    # Application plans (Admin portal)
    #
    when /^(product "(.*)"|the product's) application plans admin page$/
      product = Service.find_by(name: $2) || @product || @service || provider_first_service!
      admin_service_application_plans_path(product)

    when /^(product "(.*)"|the product's) new application plan admin page$/
      product = Service.find_by(name: $2) || @product || @service || provider_first_service!
      new_admin_service_application_plan_path(product)

    #
    # Service plans (Admin portal)
    #
    when /^(product "(.*)"|the product's) service plans admin page$/
      product = Service.find_by(name: $2) || @product || @service || provider_first_service!
      admin_service_service_plans_path(product)

    when /^(product "(.*)"|the product's) new service plan admin page$/
      product = Service.find_by(name: $2) || @product || @service || provider_first_service!
      new_admin_service_service_plan_path(product)

    #
    # Account plans (Admin portal)
    #
    when 'the account plans admin page'
      admin_buyers_account_plans_path

    when 'the new account plan admin page'
      # FIXME: this should be new_admin_buyers_account_plan_path
      new_admin_account_plan_path

    #
    # Service contracts (Admin portal)
    #
    when 'the service subscription page'
      new_admin_service_contract_path

    when 'the provider service subscriptions page'
      admin_buyers_service_contracts_path

    when /^(?:buyer "(.*)"|the buyer's) service subscriptions page$/
      buyer = $1.present? ? Account.buyers.find_by!(org_name: $1) : @buyer
      admin_buyers_account_service_contracts_path(buyer)

    #
    # Applications (Admin portal)
    #
    when /^(buyer|product|the admin portal)( "(.*)")? applications page(?: with (\d+) records? per page)?$/
      case $1
      when 'buyer'
        admin_buyers_account_applications_path(Account.buyers.find_by!(org_name: $3), per_page: $4)
      when 'product'
        admin_service_applications_path(Service.find_by!(name: $3), per_page: $4)
      when 'the admin portal'
        provider_admin_applications_path(per_page: $4)
      end

    when /^(buyer|product|the admin portal)( "(.*)")? new application page$/
      case $1
      when 'buyer'
        new_admin_buyers_account_application_path(Account.buyers.find_by!(org_name: $3))
      when 'product'
        new_admin_service_application_path(Service.find_by!(name: $3))
      when "the admin portal"
        new_provider_admin_application_path
      end

    when /^(application "(.*)"|the application's) admin page$/
      app = Cinstance.find_by(name: $2) || @cinstance || @application
      provider_admin_application_path(app)

    when /^(application "(.*)"|the application's) admin edit page$/
      app = Cinstance.find_by(name: $2) || @cinstance || @application
      edit_provider_admin_application_path(app)

    when 'the admin portal data exports page'
      new_provider_admin_account_data_exports_path

    when 'the upgrade notice for multiple applications'
      admin_upgrade_notice_path(:multiple_applications)

    when /^(application "(.*)"|the application's) traffic stats page$/
      app = Cinstance.find_by(name: $2) || @cinstance || @application
      admin_buyers_stats_application_path(app)

    #
    # Applications (Developer portal)
    #
    when 'the dev portal applications page'
      admin_applications_path

    when 'the service selection page'
      choose_service_admin_applications_path

    when 'the dev portal API access details page'
      admin_applications_access_details_path

    when /^(?:application "(.*)"|the application's) dev portal page$/
      app = Cinstance.find_by(name: $1) || @cinstance || @application
      admin_application_path(app)

    when /^(?:application "(.*)"|the application's) dev portal edit page$/
      app = Cinstance.find_by(name: $1) || @cinstance || @application
      edit_admin_application_path(app)

    when 'the dev portal new application page'
      new_admin_application_path

    when /^(?:product "(.*)"|the product's) dev portal new application page$/
      service = Service.find_by(name: $1) || @product || @service
      new_admin_application_path(service_id: service.system_name)

    when /^the alerts page of application "(.+?)"$/
      cinstance = Cinstance.find_by_name!($1)
      admin_application_alerts_path(cinstance)


    #
    # Developer portal
    #
    when "the account plans page"
      admin_account_account_plans_path

    when /the services list for buyers( page)?$/
      admin_buyer_services_path

    #
    # Buyer management
    #
    when 'the buyer accounts page', 'the accounts admin page',
         /^the buyer accounts page with (\d+) records? per page$/
      admin_buyers_accounts_path(:per_page => $1)
    when /^the ([^ ]*) buyer accounts page$/
      admin_buyers_accounts_path(:state => $1)
    when 'the new buyer account page'
      new_admin_buyers_account_path

    when /^the buyer account page for "([^"]*)"$/,
         /^the buyer account "([^"]*)" page$/,
         /^buyer "(.*)" overview page$/,
         /^the overview page of account "([^"]*)"$/
      admin_buyers_account_path(Account.find_by!(org_name: $1))

    when /^the buyer account edit page for "([^"]*)"$/,
         /^the buyer account "([^"]*)" edit page$/
      edit_admin_buyers_account_path(Account.find_by_org_name!($1))

    when /^the buyer users page for "([^"]*)"$/,
         /^the buyer account "([^"]*)" users page$/
      admin_buyers_account_users_path(Account.find_by_org_name!($1))

    when /^the buyer user page for "([^"]*)"$/,
         /^the buyer user "([^"]*)" page$/
      user = User.find_by_username!($1)
      admin_buyers_account_user_path(user.account, user)

    when /^the buyer user edit page for "([^"]*)"$/,
         /^the buyer user "([^"]*)" edit page$/
      user = User.find_by_username!($1)
      edit_admin_buyers_account_user_path(user.account, user)

    when /^the buyer account "([^"]*)" invitations page$/
      admin_buyers_account_invitations_path(Account.find_by_org_name!($1))
    when /^the buyer account "([^"]*)" new invitation page$/
      new_admin_buyers_account_invitation_path(Account.find_by_org_name!($1))

    when /^the buyer account "([^"]*)" groups page$/
      admin_buyers_account_groups_path(Account.find_by_org_name!($1))

    when /^the data exports page$/
      new_admin_data_exports_path

    #
    # Forum admin
    #
    when 'the admin portal forum page'
      admin_forum_path
    when 'the admin portal new topic page'
      new_admin_forum_topic_path
    when /^the admin portal "([^"]*)" topic page$/
      admin_forum_topic_path(Topic.find_by_title!($1))
    when /^the admin portal edit "([^"]*)" topic page$/
      edit_admin_forum_topic_path(Topic.find_by_title!($1))
    when 'the admin portal forum categories page'
      admin_forum_categories_path
    when 'the admin portal new forum category page'
      new_admin_forum_category_path

    #
    # Site settings
    #
    when 'the edit site settings page',
         'the site settings page'
      edit_admin_site_settings_path

    when 'the usage rules settings page'
      edit_admin_site_usage_rules_path

    when /^the "([^"]*)" destroys page$/
      provider_admin_destroys_path(:kind => $1)

    when 'the dns settings page'
      admin_site_dns_path

    when 'the bot protection page'
      edit_admin_site_spam_protection_path

    when 'the xss protection page'
      edit_admin_site_developer_portal_path

    when 'the feature visibility page'
      provider_admin_cms_switches_path

    when 'the fields definitions index page'
      admin_fields_definitions_path

    when 'the settings page'
     admin_apiconfig_root_path

    when 'the documentation settings page'
      edit_admin_site_documentation_path

    when 'the emails settings page'
      edit_admin_site_emails_path

    #
    # Stats
    #
    # FIXME: this feels really wrong, passing default service
    when 'the provider stats usage page'
      admin_service_stats_usage_path provider_first_service!
    when 'the provider stats apps page'
      admin_service_stats_top_applications_path provider_first_service!
    when 'the provider stats days page'
      admin_service_stats_days_path provider_first_service!
    when 'the provider stats hours page'
      admin_service_stats_hours_path provider_first_service!
    when 'the buyer stats page'
      buyer_stats_path
    when 'the buyer stats usage page'
      usage_stats_api_applications_path provider_first_service!.cinstances.first, *args

    #
    # Potato CMS
    when 'the CMS new partial page'
      new_provider_admin_cms_partial_path

    when 'the CMS new redirect page'
      new_provider_admin_cms_redirect_path

    when 'the CMS new layout page'
      new_provider_admin_cms_layout_path

    when /^the new CMS groups page$/
      new_provider_admin_cms_group_path

    when /^the email templates page$/
      provider_admin_cms_email_templates_path

    when /^the legal terms settings page$/
      # see CMS::Builtin::LegalTerm for the system names
      new_provider_admin_cms_builtin_legal_term_path(system_name: 'signup_licence')

    when /^the groups page$/
      provider_admin_cms_groups_path

    when /^the CMS Page "(.+?)" page$/i
      page = CMS::Page.find_by_path!($1)
      edit_provider_admin_cms_page_path(page)

    when 'the CMS changes'
      provider_admin_cms_changes_path

    ## DELETE THESE & FIX CUKES
    when /^the CMS Sections page$/
      provider_admin_cms_sections_path
    when /^the CMS Files page$/
      provider_admin_cms_files_path

    #
    # Advanced CMS (BrowserCMS)
    #
    when 'the CMS content library page',
         'the portal area page',
         /^the CMS Templates page$/,
         /^the (?:CMS|cms) page$/
      provider_admin_cms_templates_path

    when /^the edit page of the html block "([^"]*)"$/
      html_block = HtmlBlock.find_by_name($1)
      edit_cms_html_block_path html_block
    #
    # Buyer
    #
    when 'the buyer payment details page'
      "/buyer/payment_details"

    when 'the buyer access details page'
      buyer_access_details_path

    #
    # Finance (Admin portal)
    #
    when 'the earnings by month page'
      admin_finance_root_path

    when 'the finance settings page'
      admin_finance_settings_path

    when /^the invoice "(.*)" admin portal page$/
      invoice = Invoice.find_by!(friendly_id: $1)
      admin_finance_invoice_path(invoice)

    when /^the invoices page of account "(.+?)"$/
      account = Account.find_by!(org_name: $1)
      admin_buyers_account_invoices_path(account)

    when /^the admin portal invoices page$/
      admin_finance_invoices_path

    when 'the log entries page'
      admin_finance_log_entries_path

    when 'the 3scale invoices page'
      provider_admin_account_invoices_path

    when /^the 3scale invoice for "(\w+, \d{4})"$/
      # WATCH OUT: different accounts could have different invoices for the same period.
      invoice = Invoice.find { |i| i.name == $1 }
      provider_admin_account_invoice_path(invoice)

    #
    # Finance (Developer portal)
    #
    when 'the dev portal invoices page'
      admin_account_invoices_path

    when /^the invoice "(.*)" dev portal page$/
      invoice = Invoice.find_by!(friendly_id: $1)
      admin_account_invoice_path(invoice)

    when 'the provider site page'
      admin_site_settings_path

    when 'the new webhook page'
      new_provider_admin_webhooks_path

    when 'the edit webhooks page'
      edit_provider_admin_webhooks_path

    #Previous routes still used.
    when 'the provider access rules page'
      '/admin/settings/accessrules'

    when 'the terms of service page'
      '/termsofservice'
    when 'the privacy policy page'
      '/privacypolicy'
    when 'the refund policy page'
      '/refundpolicy'

    # Methods and metrics
    when 'the metrics and methods page'
      admin_service_metrics_path(@provider.default_service)
    when 'the metrics and methods page of my backend api'
      provider_admin_backend_api_metrics_path(@provider.default_service.backend_api)
    when /^the (methods|metrics) page of product "(.+?)"/
      admin_service_metrics_path(Service.find_by!(name: $2), tab: $1)
    when /^the new metric page of product "(.+?)"/
      new_admin_service_metric_path Service.find_by!(name: $1)
    when /^the new method page of product "(.+?)"/
      service = Service.find_by!(name: $1)
      new_admin_service_metric_child_path(service, service.metrics.hits)
    when /^the edit page of (?:metric|method) "(.+?)"/
      metric = Metric.find_by!(friendly_name: $1)
      edit_admin_service_metric_path(metric.owner, metric)

    # Proxy
    when /^the integration show page for service "(.+?)"/
      service = Service.find_by!(name: $1)
      admin_service_integration_path(service)
    when /^the mapping rules index page for service "(.+?)"/
      service = Service.find_by!(name: $1)
      admin_service_proxy_rules_path(service)
    when /^the mapping rules index page for backend "(.+?)"/
      provider_admin_backend_api_mapping_rules_path(BackendApi.find_by!(name: $1))
    when /^the create mapping rule page for service "(.+?)"/
      service = Service.find_by!(name: $1)
      new_admin_service_proxy_rule_path(service)
    when /^the create mapping rule page for backend "(.+?)"/
      new_provider_admin_backend_api_mapping_rule_path(BackendApi.find_by!(name: $1))
    when /^the integration page for service "(.+?)"/
      # TODO: THREESCALE-3759 edit page no longer exist, remove or replace
      service = Service.find_by!(name: $1)
      edit_admin_service_integration_path(service)

    when 'the 404 page'
      '/the-404-page'

    # Backend API
    when /^the admin portal new backend api page/
      new_provider_admin_backend_api_path
    when /^the admin portal overview page of backend "(.*)"/
      provider_admin_backend_api_path(BackendApi.find_by!(name: $1))
    when /^the backend api overview/
      provider_admin_backend_api_path(provider_first_service!.backend_api)

    #
    # Help
    #
    when /^the liquid reference$/
      provider_admin_liquid_docs_path

    #
    # Upgrade notices
    #
    when /^the upgrade notice page for "(.+?)"$/
      admin_upgrade_notice_path($1)

    #
    # Quick starts
    #
    when /^the quick start catalog page$/
      provider_admin_quickstarts_path

    # Add more mappings here.
    # Here is an example that pulls values out of the Regexp:
    #
    #   when /^(.*)'s profile page$/i
    #     user_profile_path(User.find_by_login($1))

    else
      raise "Can't find mapping from \"#{page_name}\" to a path.\n" +
        "Now, go and add a mapping in #{__FILE__}"
    end
  end
end)
# rubocop:enable Style/PerlBackrefs