# frozen_string_literal: true require "net/smtp" require "net/imap" RSpec.describe GroupEmailCredentialsCheck do fab!(:group1) { Fabricate(:group) } fab!(:group2) { Fabricate(:smtp_group) } fab!(:group3) { Fabricate(:imap_group) } describe "#run" do it "does nothing if SMTP is disabled for the site" do expect_no_validate_any SiteSetting.enable_smtp = false expect(described_class.run).to eq([]) end context "with smtp and imap enabled for the site" do before do SiteSetting.enable_smtp = true SiteSetting.enable_imap = true end it "does nothing if no groups have smtp enabled" do expect_no_validate_any group2.update!(smtp_enabled: false) group3.update!(smtp_enabled: false, imap_enabled: false) expect(described_class.run).to eq([]) end it "returns an error message and the group ID if the group's SMTP settings error" do EmailSettingsValidator .expects(:validate_smtp) .raises(Net::SMTPAuthenticationError.new("bad credentials")) .then .returns(true) .at_least_once EmailSettingsValidator.stubs(:validate_imap).returns(true) expect(described_class.run).to eq( [ { group_full_name: group2.full_name, group_name: group2.name, group_id: group2.id, message: I18n.t("email_settings.smtp_authentication_error"), }, ], ) end it "returns an error message and the group ID if the group's IMAP settings error" do EmailSettingsValidator.stubs(:validate_smtp).returns(true) EmailSettingsValidator .expects(:validate_imap) .raises(Net::IMAP::NoResponseError.new(stub(data: stub(text: "Invalid credentials")))) .once expect(described_class.run).to eq( [ { group_full_name: group3.full_name, group_name: group3.name, group_id: group3.id, message: I18n.t("email_settings.imap_authentication_error"), }, ], ) end it "returns no imap errors if imap is disabled for the site" do SiteSetting.enable_imap = false EmailSettingsValidator.stubs(:validate_smtp).returns(true) EmailSettingsValidator.expects(:validate_imap).never expect(described_class.run).to eq([]) end end end def expect_no_validate_imap EmailSettingsValidator.expects(:validate_imap).never end def expect_no_validate_smtp EmailSettingsValidator.expects(:validate_smtp).never end def expect_no_validate_any expect_no_validate_smtp expect_no_validate_imap end end