2021-05-13 01:11:23 -04:00
|
|
|
# frozen_string_literal: true
|
|
|
|
|
|
|
|
RSpec.describe EmailSettingsValidator do
|
|
|
|
let(:username) { "kwest@gmail.com" }
|
|
|
|
let(:password) { "mbdtf" }
|
|
|
|
|
|
|
|
describe "#validate_imap" do
|
|
|
|
let(:host) { "imap.gmail.com" }
|
|
|
|
let(:port) { 993 }
|
|
|
|
|
|
|
|
let(:net_imap_stub) do
|
|
|
|
obj = mock()
|
|
|
|
obj.stubs(:login).returns(true)
|
|
|
|
obj
|
|
|
|
end
|
|
|
|
|
|
|
|
before { Net::IMAP.stubs(:new).returns(net_imap_stub) }
|
|
|
|
|
|
|
|
it "is valid if no error is raised" do
|
|
|
|
net_imap_stub.stubs(:logout).returns(true)
|
|
|
|
net_imap_stub.stubs(:disconnect).returns(true)
|
|
|
|
expect {
|
2023-06-21 10:00:19 -04:00
|
|
|
described_class.validate_imap(
|
|
|
|
host: host,
|
|
|
|
port: port,
|
|
|
|
username: username,
|
|
|
|
password: password,
|
|
|
|
)
|
2021-05-13 01:11:23 -04:00
|
|
|
}.not_to raise_error
|
|
|
|
end
|
|
|
|
|
|
|
|
it "is invalid if an error is raised" do
|
|
|
|
net_imap_stub.stubs(:login).raises(
|
|
|
|
Net::IMAP::NoResponseError,
|
|
|
|
stub(data: stub(text: "no response")),
|
|
|
|
)
|
|
|
|
expect {
|
2023-06-21 10:00:19 -04:00
|
|
|
described_class.validate_imap(
|
2021-05-13 01:11:23 -04:00
|
|
|
host: host,
|
|
|
|
port: port,
|
|
|
|
username: username,
|
|
|
|
password: password,
|
|
|
|
debug: true,
|
|
|
|
)
|
|
|
|
}.to raise_error(Net::IMAP::NoResponseError)
|
|
|
|
end
|
|
|
|
|
|
|
|
it "logs a warning if debug: true passed in and still raises the error" do
|
|
|
|
net_imap_stub.stubs(:login).raises(
|
|
|
|
Net::IMAP::NoResponseError,
|
|
|
|
stub(data: stub(text: "no response")),
|
|
|
|
)
|
|
|
|
Rails
|
|
|
|
.logger
|
|
|
|
.expects(:warn)
|
|
|
|
.with(regexp_matches(/\[EmailSettingsValidator\] Error encountered/))
|
|
|
|
.at_least_once
|
|
|
|
expect {
|
2023-06-21 10:00:19 -04:00
|
|
|
described_class.validate_imap(
|
2021-05-13 01:11:23 -04:00
|
|
|
host: host,
|
|
|
|
port: port,
|
|
|
|
username: username,
|
|
|
|
password: password,
|
|
|
|
debug: true,
|
|
|
|
)
|
|
|
|
}.to raise_error(Net::IMAP::NoResponseError)
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
describe "#validate_pop3" do
|
|
|
|
let(:host) { "pop.gmail.com" }
|
|
|
|
let(:port) { 995 }
|
|
|
|
|
|
|
|
let(:net_pop3_stub) do
|
|
|
|
obj = mock()
|
|
|
|
obj.stubs(:auth_only).returns(true)
|
|
|
|
obj.stubs(:enable_ssl).returns(true)
|
|
|
|
obj
|
|
|
|
end
|
|
|
|
|
|
|
|
before { Net::POP3.stubs(:new).returns(net_pop3_stub) }
|
|
|
|
|
|
|
|
it "is valid if no error is raised" do
|
|
|
|
expect {
|
2023-06-21 10:00:19 -04:00
|
|
|
described_class.validate_pop3(
|
|
|
|
host: host,
|
|
|
|
port: port,
|
|
|
|
username: username,
|
|
|
|
password: password,
|
|
|
|
)
|
2021-05-13 01:11:23 -04:00
|
|
|
}.not_to raise_error
|
|
|
|
end
|
|
|
|
|
|
|
|
it "is invalid if an error is raised" do
|
|
|
|
net_pop3_stub.stubs(:auth_only).raises(Net::POPAuthenticationError, "invalid credentials")
|
|
|
|
expect {
|
2023-06-21 10:00:19 -04:00
|
|
|
described_class.validate_pop3(
|
2021-05-13 01:11:23 -04:00
|
|
|
host: host,
|
|
|
|
port: port,
|
|
|
|
username: username,
|
|
|
|
password: password,
|
|
|
|
debug: true,
|
|
|
|
)
|
|
|
|
}.to raise_error(Net::POPAuthenticationError)
|
|
|
|
end
|
|
|
|
|
|
|
|
it "logs a warning if debug: true passed in and still raises the error" do
|
|
|
|
Rails
|
|
|
|
.logger
|
|
|
|
.expects(:warn)
|
|
|
|
.with(regexp_matches(/\[EmailSettingsValidator\] Error encountered/))
|
|
|
|
.at_least_once
|
|
|
|
net_pop3_stub.stubs(:auth_only).raises(Net::POPAuthenticationError, "invalid credentials")
|
|
|
|
expect {
|
2023-06-21 10:00:19 -04:00
|
|
|
described_class.validate_pop3(
|
2021-05-13 01:11:23 -04:00
|
|
|
host: host,
|
|
|
|
port: port,
|
|
|
|
username: username,
|
|
|
|
password: password,
|
|
|
|
debug: true,
|
|
|
|
)
|
|
|
|
}.to raise_error(Net::POPAuthenticationError)
|
|
|
|
end
|
|
|
|
|
|
|
|
it "uses the correct ssl verify params if those settings are enabled" do
|
|
|
|
SiteSetting.pop3_polling_ssl = true
|
|
|
|
SiteSetting.pop3_polling_openssl_verify = true
|
|
|
|
net_pop3_stub.expects(:enable_ssl).with(max_version: OpenSSL::SSL::TLS1_2_VERSION)
|
|
|
|
expect {
|
2023-06-21 10:00:19 -04:00
|
|
|
described_class.validate_pop3(
|
|
|
|
host: host,
|
|
|
|
port: port,
|
|
|
|
username: username,
|
|
|
|
password: password,
|
|
|
|
)
|
2021-05-13 01:11:23 -04:00
|
|
|
}.not_to raise_error
|
|
|
|
end
|
|
|
|
|
|
|
|
it "uses the correct ssl verify params if openssl_verify is not enabled" do
|
|
|
|
SiteSetting.pop3_polling_ssl = true
|
|
|
|
SiteSetting.pop3_polling_openssl_verify = false
|
|
|
|
net_pop3_stub.expects(:enable_ssl).with(OpenSSL::SSL::VERIFY_NONE)
|
|
|
|
expect {
|
2023-06-21 10:00:19 -04:00
|
|
|
described_class.validate_pop3(
|
|
|
|
host: host,
|
|
|
|
port: port,
|
|
|
|
username: username,
|
|
|
|
password: password,
|
|
|
|
)
|
2021-05-13 01:11:23 -04:00
|
|
|
}.not_to raise_error
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
describe "#validate_smtp" do
|
|
|
|
let(:host) { "smtp.gmail.com" }
|
|
|
|
let(:port) { 587 }
|
|
|
|
let(:domain) { "gmail.com" }
|
|
|
|
|
|
|
|
let(:net_smtp_stub) do
|
|
|
|
obj = mock()
|
|
|
|
obj.stubs(:start).returns(true)
|
|
|
|
obj.stubs(:finish).returns(true)
|
|
|
|
obj.stubs(:enable_tls).returns(true)
|
|
|
|
obj.stubs(:enable_starttls_auto).returns(true)
|
FEATURE: Improve group email settings UI (#13083)
This overhauls the user interface for the group email settings management, aiming to make it a lot easier to test the settings entered and confirm they are correct before proceeding. We do this by forcing the user to test the settings before they can be saved to the database. It also includes some quality of life improvements around setting up IMAP and SMTP for our first supported provider, GMail. This PR does not remove the old group email config, that will come in a subsequent PR. This is related to https://meta.discourse.org/t/imap-support-for-group-inboxes/160588 so read that if you would like more backstory.
### UI
Both site settings of `enable_imap` and `enable_smtp` must be true to test this. You must enable SMTP first to enable IMAP.
You can prefill the SMTP settings with GMail configuration. To proceed with saving these settings you must test them, which is handled by the EmailSettingsValidator.
If there is an issue with the configuration or credentials a meaningful error message should be shown.
IMAP settings must also be validated when IMAP is enabled, before saving.
When saving IMAP, we fetch the mailboxes for that account and populate them. This mailbox must be selected and saved for IMAP to work (the feature acts as though it is disabled until the mailbox is selected and saved):
### Database & Backend
This adds several columns to the Groups table. The purpose of this change is to make it much more explicit that SMTP/IMAP is enabled for a group, rather than relying on settings not being null. Also included is an UPDATE query to backfill these columns. These columns are automatically filled when updating the group.
For GMail, we now filter the mailboxes returned. This is so users cannot use a mailbox like Sent or Trash for syncing, which would generally be disastrous.
There is a new group endpoint for testing email settings. This may be useful in the future for other places in our UI, at which point it can be extracted to a more generic endpoint or module to be included.
2021-05-27 19:28:18 -04:00
|
|
|
obj.stubs(:open_timeout=)
|
|
|
|
obj.stubs(:read_timeout=)
|
2021-05-13 01:11:23 -04:00
|
|
|
obj
|
|
|
|
end
|
|
|
|
|
|
|
|
before { Net::SMTP.stubs(:new).returns(net_smtp_stub) }
|
|
|
|
|
|
|
|
it "is valid if no error is raised" do
|
|
|
|
expect {
|
2023-06-21 10:00:19 -04:00
|
|
|
described_class.validate_smtp(
|
2021-05-13 01:11:23 -04:00
|
|
|
host: host,
|
|
|
|
port: port,
|
|
|
|
username: username,
|
|
|
|
password: password,
|
|
|
|
domain: domain,
|
|
|
|
)
|
|
|
|
}.not_to raise_error
|
|
|
|
end
|
|
|
|
|
|
|
|
it "is invalid if an error is raised" do
|
|
|
|
net_smtp_stub.stubs(:start).raises(Net::SMTPAuthenticationError, "invalid credentials")
|
|
|
|
expect {
|
2023-06-21 10:00:19 -04:00
|
|
|
described_class.validate_smtp(
|
2021-05-13 01:11:23 -04:00
|
|
|
host: host,
|
|
|
|
port: port,
|
|
|
|
username: username,
|
|
|
|
password: password,
|
|
|
|
domain: domain,
|
|
|
|
)
|
|
|
|
}.to raise_error(Net::SMTPAuthenticationError)
|
|
|
|
end
|
|
|
|
|
|
|
|
it "logs a warning if debug: true passed in and still raises the error" do
|
|
|
|
Rails
|
|
|
|
.logger
|
|
|
|
.expects(:warn)
|
|
|
|
.with(regexp_matches(/\[EmailSettingsValidator\] Error encountered/))
|
|
|
|
.at_least_once
|
2022-03-21 10:28:52 -04:00
|
|
|
net_smtp_stub.stubs(:start).raises(
|
|
|
|
Net::SMTPAuthenticationError,
|
|
|
|
stub(message: "invalid credentials"),
|
|
|
|
)
|
2021-05-13 01:11:23 -04:00
|
|
|
expect {
|
2023-06-21 10:00:19 -04:00
|
|
|
described_class.validate_smtp(
|
2021-05-13 01:11:23 -04:00
|
|
|
host: host,
|
|
|
|
port: port,
|
|
|
|
username: username,
|
|
|
|
password: password,
|
|
|
|
debug: true,
|
|
|
|
domain: domain,
|
|
|
|
)
|
|
|
|
}.to raise_error(Net::SMTPAuthenticationError)
|
|
|
|
end
|
|
|
|
|
|
|
|
it "uses the correct ssl verify params for enable_tls if those settings are enabled" do
|
|
|
|
net_smtp_stub.expects(:enable_tls)
|
FEATURE: Improve group email settings UI (#13083)
This overhauls the user interface for the group email settings management, aiming to make it a lot easier to test the settings entered and confirm they are correct before proceeding. We do this by forcing the user to test the settings before they can be saved to the database. It also includes some quality of life improvements around setting up IMAP and SMTP for our first supported provider, GMail. This PR does not remove the old group email config, that will come in a subsequent PR. This is related to https://meta.discourse.org/t/imap-support-for-group-inboxes/160588 so read that if you would like more backstory.
### UI
Both site settings of `enable_imap` and `enable_smtp` must be true to test this. You must enable SMTP first to enable IMAP.
You can prefill the SMTP settings with GMail configuration. To proceed with saving these settings you must test them, which is handled by the EmailSettingsValidator.
If there is an issue with the configuration or credentials a meaningful error message should be shown.
IMAP settings must also be validated when IMAP is enabled, before saving.
When saving IMAP, we fetch the mailboxes for that account and populate them. This mailbox must be selected and saved for IMAP to work (the feature acts as though it is disabled until the mailbox is selected and saved):
### Database & Backend
This adds several columns to the Groups table. The purpose of this change is to make it much more explicit that SMTP/IMAP is enabled for a group, rather than relying on settings not being null. Also included is an UPDATE query to backfill these columns. These columns are automatically filled when updating the group.
For GMail, we now filter the mailboxes returned. This is so users cannot use a mailbox like Sent or Trash for syncing, which would generally be disastrous.
There is a new group endpoint for testing email settings. This may be useful in the future for other places in our UI, at which point it can be extracted to a more generic endpoint or module to be included.
2021-05-27 19:28:18 -04:00
|
|
|
expect {
|
2023-06-21 10:00:19 -04:00
|
|
|
described_class.validate_smtp(
|
FEATURE: Improve group email settings UI (#13083)
This overhauls the user interface for the group email settings management, aiming to make it a lot easier to test the settings entered and confirm they are correct before proceeding. We do this by forcing the user to test the settings before they can be saved to the database. It also includes some quality of life improvements around setting up IMAP and SMTP for our first supported provider, GMail. This PR does not remove the old group email config, that will come in a subsequent PR. This is related to https://meta.discourse.org/t/imap-support-for-group-inboxes/160588 so read that if you would like more backstory.
### UI
Both site settings of `enable_imap` and `enable_smtp` must be true to test this. You must enable SMTP first to enable IMAP.
You can prefill the SMTP settings with GMail configuration. To proceed with saving these settings you must test them, which is handled by the EmailSettingsValidator.
If there is an issue with the configuration or credentials a meaningful error message should be shown.
IMAP settings must also be validated when IMAP is enabled, before saving.
When saving IMAP, we fetch the mailboxes for that account and populate them. This mailbox must be selected and saved for IMAP to work (the feature acts as though it is disabled until the mailbox is selected and saved):
### Database & Backend
This adds several columns to the Groups table. The purpose of this change is to make it much more explicit that SMTP/IMAP is enabled for a group, rather than relying on settings not being null. Also included is an UPDATE query to backfill these columns. These columns are automatically filled when updating the group.
For GMail, we now filter the mailboxes returned. This is so users cannot use a mailbox like Sent or Trash for syncing, which would generally be disastrous.
There is a new group endpoint for testing email settings. This may be useful in the future for other places in our UI, at which point it can be extracted to a more generic endpoint or module to be included.
2021-05-27 19:28:18 -04:00
|
|
|
host: host,
|
|
|
|
port: 465,
|
|
|
|
username: username,
|
|
|
|
password: password,
|
|
|
|
domain: domain,
|
|
|
|
openssl_verify_mode: "peer",
|
|
|
|
enable_tls: true,
|
|
|
|
enable_starttls_auto: false,
|
|
|
|
)
|
|
|
|
}.not_to raise_error
|
2021-05-13 01:11:23 -04:00
|
|
|
end
|
|
|
|
|
|
|
|
it "uses the correct ssl verify params for enable_starttls_auto if those settings are enabled" do
|
|
|
|
net_smtp_stub.expects(:enable_starttls_auto)
|
FEATURE: Improve group email settings UI (#13083)
This overhauls the user interface for the group email settings management, aiming to make it a lot easier to test the settings entered and confirm they are correct before proceeding. We do this by forcing the user to test the settings before they can be saved to the database. It also includes some quality of life improvements around setting up IMAP and SMTP for our first supported provider, GMail. This PR does not remove the old group email config, that will come in a subsequent PR. This is related to https://meta.discourse.org/t/imap-support-for-group-inboxes/160588 so read that if you would like more backstory.
### UI
Both site settings of `enable_imap` and `enable_smtp` must be true to test this. You must enable SMTP first to enable IMAP.
You can prefill the SMTP settings with GMail configuration. To proceed with saving these settings you must test them, which is handled by the EmailSettingsValidator.
If there is an issue with the configuration or credentials a meaningful error message should be shown.
IMAP settings must also be validated when IMAP is enabled, before saving.
When saving IMAP, we fetch the mailboxes for that account and populate them. This mailbox must be selected and saved for IMAP to work (the feature acts as though it is disabled until the mailbox is selected and saved):
### Database & Backend
This adds several columns to the Groups table. The purpose of this change is to make it much more explicit that SMTP/IMAP is enabled for a group, rather than relying on settings not being null. Also included is an UPDATE query to backfill these columns. These columns are automatically filled when updating the group.
For GMail, we now filter the mailboxes returned. This is so users cannot use a mailbox like Sent or Trash for syncing, which would generally be disastrous.
There is a new group endpoint for testing email settings. This may be useful in the future for other places in our UI, at which point it can be extracted to a more generic endpoint or module to be included.
2021-05-27 19:28:18 -04:00
|
|
|
expect {
|
2023-06-21 10:00:19 -04:00
|
|
|
described_class.validate_smtp(
|
FEATURE: Improve group email settings UI (#13083)
This overhauls the user interface for the group email settings management, aiming to make it a lot easier to test the settings entered and confirm they are correct before proceeding. We do this by forcing the user to test the settings before they can be saved to the database. It also includes some quality of life improvements around setting up IMAP and SMTP for our first supported provider, GMail. This PR does not remove the old group email config, that will come in a subsequent PR. This is related to https://meta.discourse.org/t/imap-support-for-group-inboxes/160588 so read that if you would like more backstory.
### UI
Both site settings of `enable_imap` and `enable_smtp` must be true to test this. You must enable SMTP first to enable IMAP.
You can prefill the SMTP settings with GMail configuration. To proceed with saving these settings you must test them, which is handled by the EmailSettingsValidator.
If there is an issue with the configuration or credentials a meaningful error message should be shown.
IMAP settings must also be validated when IMAP is enabled, before saving.
When saving IMAP, we fetch the mailboxes for that account and populate them. This mailbox must be selected and saved for IMAP to work (the feature acts as though it is disabled until the mailbox is selected and saved):
### Database & Backend
This adds several columns to the Groups table. The purpose of this change is to make it much more explicit that SMTP/IMAP is enabled for a group, rather than relying on settings not being null. Also included is an UPDATE query to backfill these columns. These columns are automatically filled when updating the group.
For GMail, we now filter the mailboxes returned. This is so users cannot use a mailbox like Sent or Trash for syncing, which would generally be disastrous.
There is a new group endpoint for testing email settings. This may be useful in the future for other places in our UI, at which point it can be extracted to a more generic endpoint or module to be included.
2021-05-27 19:28:18 -04:00
|
|
|
host: host,
|
|
|
|
port: 587,
|
|
|
|
username: username,
|
|
|
|
password: password,
|
|
|
|
domain: domain,
|
|
|
|
openssl_verify_mode: "peer",
|
|
|
|
enable_tls: false,
|
|
|
|
enable_starttls_auto: true,
|
|
|
|
)
|
|
|
|
}.not_to raise_error
|
2021-05-13 01:11:23 -04:00
|
|
|
end
|
|
|
|
|
|
|
|
it "raises an ArgumentError if both enable_tls is true and enable_starttls_auto is true" do
|
|
|
|
expect {
|
2023-06-21 10:00:19 -04:00
|
|
|
described_class.validate_smtp(
|
2021-05-13 01:11:23 -04:00
|
|
|
host: host,
|
|
|
|
port: port,
|
|
|
|
username: username,
|
|
|
|
password: password,
|
|
|
|
domain: domain,
|
|
|
|
enable_ssl: true,
|
|
|
|
enable_starttls_auto: true,
|
|
|
|
)
|
|
|
|
}.to raise_error(ArgumentError)
|
|
|
|
end
|
|
|
|
|
|
|
|
it "raises an ArgumentError if a bad authentication method is used" do
|
|
|
|
expect {
|
2023-06-21 10:00:19 -04:00
|
|
|
described_class.validate_smtp(
|
2021-05-13 01:11:23 -04:00
|
|
|
host: host,
|
|
|
|
port: port,
|
|
|
|
username: username,
|
|
|
|
password: password,
|
|
|
|
domain: domain,
|
|
|
|
authentication: :rubber_stamp,
|
|
|
|
)
|
|
|
|
}.to raise_error(ArgumentError)
|
|
|
|
end
|
FEATURE: Improve group email settings UI (#13083)
This overhauls the user interface for the group email settings management, aiming to make it a lot easier to test the settings entered and confirm they are correct before proceeding. We do this by forcing the user to test the settings before they can be saved to the database. It also includes some quality of life improvements around setting up IMAP and SMTP for our first supported provider, GMail. This PR does not remove the old group email config, that will come in a subsequent PR. This is related to https://meta.discourse.org/t/imap-support-for-group-inboxes/160588 so read that if you would like more backstory.
### UI
Both site settings of `enable_imap` and `enable_smtp` must be true to test this. You must enable SMTP first to enable IMAP.
You can prefill the SMTP settings with GMail configuration. To proceed with saving these settings you must test them, which is handled by the EmailSettingsValidator.
If there is an issue with the configuration or credentials a meaningful error message should be shown.
IMAP settings must also be validated when IMAP is enabled, before saving.
When saving IMAP, we fetch the mailboxes for that account and populate them. This mailbox must be selected and saved for IMAP to work (the feature acts as though it is disabled until the mailbox is selected and saved):
### Database & Backend
This adds several columns to the Groups table. The purpose of this change is to make it much more explicit that SMTP/IMAP is enabled for a group, rather than relying on settings not being null. Also included is an UPDATE query to backfill these columns. These columns are automatically filled when updating the group.
For GMail, we now filter the mailboxes returned. This is so users cannot use a mailbox like Sent or Trash for syncing, which would generally be disastrous.
There is a new group endpoint for testing email settings. This may be useful in the future for other places in our UI, at which point it can be extracted to a more generic endpoint or module to be included.
2021-05-27 19:28:18 -04:00
|
|
|
|
2024-07-11 02:16:54 -04:00
|
|
|
it "corrects tls settings for gmail based on port 587" do
|
|
|
|
net_smtp_stub.expects(:enable_starttls_auto).once
|
|
|
|
net_smtp_stub.expects(:enable_tls).never
|
|
|
|
described_class.validate_smtp(
|
|
|
|
host: host,
|
|
|
|
port: 587,
|
|
|
|
username: username,
|
|
|
|
password: password,
|
|
|
|
domain: domain,
|
|
|
|
)
|
|
|
|
end
|
|
|
|
|
|
|
|
it "corrects tls settings for gmail based on port 465" do
|
|
|
|
net_smtp_stub.expects(:enable_starttls_auto).never
|
|
|
|
net_smtp_stub.expects(:enable_tls).once
|
|
|
|
described_class.validate_smtp(
|
|
|
|
host: host,
|
|
|
|
port: 465,
|
|
|
|
username: username,
|
|
|
|
password: password,
|
|
|
|
domain: domain,
|
|
|
|
)
|
|
|
|
end
|
|
|
|
|
|
|
|
it "corrects authentication method to login for office365" do
|
|
|
|
net_smtp_stub.expects(:start).with("office365.com", username, password, :login)
|
|
|
|
described_class.validate_smtp(
|
|
|
|
host: "smtp.office365.com",
|
|
|
|
port: port,
|
|
|
|
username: username,
|
|
|
|
password: password,
|
|
|
|
domain: "office365.com",
|
|
|
|
)
|
|
|
|
end
|
|
|
|
|
|
|
|
it "corrects authentication method to login for outlook" do
|
|
|
|
net_smtp_stub.expects(:start).with("outlook.com", username, password, :login)
|
|
|
|
described_class.validate_smtp(
|
|
|
|
host: "smtp-mail.outlook.com",
|
|
|
|
port: port,
|
|
|
|
username: username,
|
|
|
|
password: password,
|
|
|
|
domain: "outlook.com",
|
|
|
|
)
|
|
|
|
end
|
|
|
|
|
FEATURE: Improve group email settings UI (#13083)
This overhauls the user interface for the group email settings management, aiming to make it a lot easier to test the settings entered and confirm they are correct before proceeding. We do this by forcing the user to test the settings before they can be saved to the database. It also includes some quality of life improvements around setting up IMAP and SMTP for our first supported provider, GMail. This PR does not remove the old group email config, that will come in a subsequent PR. This is related to https://meta.discourse.org/t/imap-support-for-group-inboxes/160588 so read that if you would like more backstory.
### UI
Both site settings of `enable_imap` and `enable_smtp` must be true to test this. You must enable SMTP first to enable IMAP.
You can prefill the SMTP settings with GMail configuration. To proceed with saving these settings you must test them, which is handled by the EmailSettingsValidator.
If there is an issue with the configuration or credentials a meaningful error message should be shown.
IMAP settings must also be validated when IMAP is enabled, before saving.
When saving IMAP, we fetch the mailboxes for that account and populate them. This mailbox must be selected and saved for IMAP to work (the feature acts as though it is disabled until the mailbox is selected and saved):
### Database & Backend
This adds several columns to the Groups table. The purpose of this change is to make it much more explicit that SMTP/IMAP is enabled for a group, rather than relying on settings not being null. Also included is an UPDATE query to backfill these columns. These columns are automatically filled when updating the group.
For GMail, we now filter the mailboxes returned. This is so users cannot use a mailbox like Sent or Trash for syncing, which would generally be disastrous.
There is a new group endpoint for testing email settings. This may be useful in the future for other places in our UI, at which point it can be extracted to a more generic endpoint or module to be included.
2021-05-27 19:28:18 -04:00
|
|
|
context "when the domain is not provided" do
|
|
|
|
let(:domain) { nil }
|
|
|
|
it "gets the domain from the host" do
|
|
|
|
net_smtp_stub.expects(:start).with("gmail.com", username, password, :plain)
|
2023-06-21 10:00:19 -04:00
|
|
|
described_class.validate_smtp(
|
FEATURE: Improve group email settings UI (#13083)
This overhauls the user interface for the group email settings management, aiming to make it a lot easier to test the settings entered and confirm they are correct before proceeding. We do this by forcing the user to test the settings before they can be saved to the database. It also includes some quality of life improvements around setting up IMAP and SMTP for our first supported provider, GMail. This PR does not remove the old group email config, that will come in a subsequent PR. This is related to https://meta.discourse.org/t/imap-support-for-group-inboxes/160588 so read that if you would like more backstory.
### UI
Both site settings of `enable_imap` and `enable_smtp` must be true to test this. You must enable SMTP first to enable IMAP.
You can prefill the SMTP settings with GMail configuration. To proceed with saving these settings you must test them, which is handled by the EmailSettingsValidator.
If there is an issue with the configuration or credentials a meaningful error message should be shown.
IMAP settings must also be validated when IMAP is enabled, before saving.
When saving IMAP, we fetch the mailboxes for that account and populate them. This mailbox must be selected and saved for IMAP to work (the feature acts as though it is disabled until the mailbox is selected and saved):
### Database & Backend
This adds several columns to the Groups table. The purpose of this change is to make it much more explicit that SMTP/IMAP is enabled for a group, rather than relying on settings not being null. Also included is an UPDATE query to backfill these columns. These columns are automatically filled when updating the group.
For GMail, we now filter the mailboxes returned. This is so users cannot use a mailbox like Sent or Trash for syncing, which would generally be disastrous.
There is a new group endpoint for testing email settings. This may be useful in the future for other places in our UI, at which point it can be extracted to a more generic endpoint or module to be included.
2021-05-27 19:28:18 -04:00
|
|
|
host: host,
|
|
|
|
port: port,
|
|
|
|
username: username,
|
|
|
|
password: password,
|
|
|
|
enable_tls: true,
|
|
|
|
enable_starttls_auto: false,
|
|
|
|
)
|
|
|
|
end
|
|
|
|
|
|
|
|
it "uses localhost when in development mode" do
|
|
|
|
Rails.env.stubs(:development?).returns(true)
|
|
|
|
net_smtp_stub.expects(:start).with("localhost", username, password, :plain)
|
2023-06-21 10:00:19 -04:00
|
|
|
described_class.validate_smtp(
|
FEATURE: Improve group email settings UI (#13083)
This overhauls the user interface for the group email settings management, aiming to make it a lot easier to test the settings entered and confirm they are correct before proceeding. We do this by forcing the user to test the settings before they can be saved to the database. It also includes some quality of life improvements around setting up IMAP and SMTP for our first supported provider, GMail. This PR does not remove the old group email config, that will come in a subsequent PR. This is related to https://meta.discourse.org/t/imap-support-for-group-inboxes/160588 so read that if you would like more backstory.
### UI
Both site settings of `enable_imap` and `enable_smtp` must be true to test this. You must enable SMTP first to enable IMAP.
You can prefill the SMTP settings with GMail configuration. To proceed with saving these settings you must test them, which is handled by the EmailSettingsValidator.
If there is an issue with the configuration or credentials a meaningful error message should be shown.
IMAP settings must also be validated when IMAP is enabled, before saving.
When saving IMAP, we fetch the mailboxes for that account and populate them. This mailbox must be selected and saved for IMAP to work (the feature acts as though it is disabled until the mailbox is selected and saved):
### Database & Backend
This adds several columns to the Groups table. The purpose of this change is to make it much more explicit that SMTP/IMAP is enabled for a group, rather than relying on settings not being null. Also included is an UPDATE query to backfill these columns. These columns are automatically filled when updating the group.
For GMail, we now filter the mailboxes returned. This is so users cannot use a mailbox like Sent or Trash for syncing, which would generally be disastrous.
There is a new group endpoint for testing email settings. This may be useful in the future for other places in our UI, at which point it can be extracted to a more generic endpoint or module to be included.
2021-05-27 19:28:18 -04:00
|
|
|
host: host,
|
|
|
|
port: port,
|
|
|
|
username: username,
|
|
|
|
password: password,
|
|
|
|
enable_tls: true,
|
|
|
|
enable_starttls_auto: false,
|
|
|
|
)
|
|
|
|
end
|
|
|
|
end
|
2021-05-13 01:11:23 -04:00
|
|
|
end
|
|
|
|
end
|