Skip to content

Commit

Permalink
DEV: Use problem checks API for jobs
Browse files Browse the repository at this point in the history
  • Loading branch information
nattsw committed Aug 8, 2024
1 parent 77fe697 commit a36c17d
Show file tree
Hide file tree
Showing 6 changed files with 43 additions and 5 deletions.
3 changes: 2 additions & 1 deletion app/models/salesforce/person.rb
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,8 @@ class Person
def self.create!(user)
return if user.custom_fields[self::ID_FIELD].present?

data = Salesforce::Api.new.post("sobjects/#{self::OBJECT_NAME}", payload(user))
data =
Salesforce::Api.new(raise_errors: true).post("sobjects/#{self::OBJECT_NAME}", payload(user))
id = data["id"]

user.custom_fields[self::ID_FIELD] = id
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
# frozen_string_literal: true

class Salesforce::ProblemCheck::SalesforceInvalidCredentials < ProblemCheck::InlineProblemCheck
self.priority = "high"
end
2 changes: 2 additions & 0 deletions config/locales/server.en.yml
Original file line number Diff line number Diff line change
Expand Up @@ -22,3 +22,5 @@ en:
dashboard:
salesforce:
app_not_approved: "The Discourse connected app is not yet authorized in Salesforce by the user mentioned in site setting `salesforce_username`. Please follow <a href='%{base_url}/salesforce/admin/authorize'>this link</a> to authorize it."
problem:
salesforce_invalid_credentials: "There was an issue with the Salesforce credentials. Please confirm the validity of the Salesforce client id and client secret settings"
17 changes: 14 additions & 3 deletions lib/salesforce/api.rb
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,8 @@ class Api

attr_reader :faraday, :prefix

def initialize
def initialize(raise_errors: false)
@raise_errors = raise_errors
set_access_token

@faraday =
Expand Down Expand Up @@ -57,7 +58,11 @@ def call(path)
end

def set_access_token
raise Salesforce::InvalidCredentials unless self.class.has_credentials?
if !self.class.has_credentials?
ProblemCheckTracker[:salesforce_invalid_credentials].problem!
raise Salesforce::InvalidCredentials if @raise_errors
return
end

if AdminDashboardData.problem_message_check(APP_NOT_APPROVED)
AdminDashboardData.clear_problem_message(APP_NOT_APPROVED)
Expand Down Expand Up @@ -85,8 +90,14 @@ def set_access_token
if status >= 300 && SiteSetting.salesforce_api_error_logs
Rails.logger.error("Salesforce API error: #{status} #{body}")
end
raise Salesforce::InvalidCredentials if status != 200

if status != 200
raise Salesforce::InvalidCredentials if @raise_errors
ProblemCheckTracker[:salesforce_invalid_credentials].problem!
return
end

ProblemCheckTracker[:salesforce_invalid_credentials].no_problem!
data = JSON.parse(body)
Discourse.redis.setex("salesforce_access_token", 10.minutes, data["access_token"])
SiteSetting.salesforce_instance_url = data["instance_url"]
Expand Down
2 changes: 2 additions & 0 deletions plugin.rb
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,8 @@ module ::Salesforce

after_initialize do
SeedFu.fixture_paths << Rails.root.join("plugins", "discourse-salesforce", "db", "fixtures").to_s
# require_relative "app/services/salesforce/problem_check/salesforce_invalid_credentials"
register_problem_check Salesforce::ProblemCheck::SalesforceInvalidCredentials

AdminDashboardData.problem_messages << ::Salesforce::Api::APP_NOT_APPROVED

Expand Down
19 changes: 18 additions & 1 deletion spec/lib/api_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,24 @@
end

it "returns invalid credentials error when Salesforce client ID is blank" do
freeze_time
SiteSetting.salesforce_client_id = ""
expect { described_class.new }.to raise_error(::Salesforce::InvalidCredentials)

described_class.new

problem = AdminNotice.find_by(identifier: "salesforce_invalid_credentials")
expect(problem.message).to eq(
I18n.t("dashboard.problem.salesforce_invalid_credentials", base_path: Discourse.base_path),
)
expect(ProblemCheckTracker["salesforce_invalid_credentials"].failing?).to eq(true)
end

it "resets invalid credentials error when Salesforce client ID is present" do
SiteSetting.salesforce_client_id = "client_id"
ProblemCheckTracker["salesforce_invalid_credentials"].problem!

described_class.new

expect(ProblemCheckTracker["salesforce_invalid_credentials"].failing?).to eq(false)
end
end

0 comments on commit a36c17d

Please sign in to comment.