|
|
|
@ -1171,3 +1171,180 @@ def test_config_base_parse_yaml_file03(tmpdir):
|
|
|
|
|
assert sum(1 for _ in a.find('test3')) == 1
|
|
|
|
|
# Match test1 or test3 entry; (only matches test3)
|
|
|
|
|
assert sum(1 for _ in a.find('test1, test3')) == 1
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def test_apprise_config_template_parse(tmpdir):
|
|
|
|
|
"""
|
|
|
|
|
API: AppriseConfig parsing of templates
|
|
|
|
|
|
|
|
|
|
"""
|
|
|
|
|
|
|
|
|
|
# Create ourselves a config object
|
|
|
|
|
ac = AppriseConfig()
|
|
|
|
|
|
|
|
|
|
t = tmpdir.mkdir("template-testing").join("apprise.yml")
|
|
|
|
|
t.write("""
|
|
|
|
|
|
|
|
|
|
tag:
|
|
|
|
|
- company
|
|
|
|
|
|
|
|
|
|
# A comment line over top of a URL
|
|
|
|
|
urls:
|
|
|
|
|
- mailto://user:pass@example.com:
|
|
|
|
|
- to: user1@gmail.com
|
|
|
|
|
cc: test@hotmail.com
|
|
|
|
|
|
|
|
|
|
- to: user2@gmail.com
|
|
|
|
|
tag: co-worker
|
|
|
|
|
""")
|
|
|
|
|
|
|
|
|
|
# Create ourselves a config object
|
|
|
|
|
ac = AppriseConfig(paths=str(t))
|
|
|
|
|
|
|
|
|
|
# 2 emails to be sent
|
|
|
|
|
assert len(ac.servers()) == 2
|
|
|
|
|
|
|
|
|
|
# The below checks are very customized for NotifyMail but just
|
|
|
|
|
# test that the content got passed correctly
|
|
|
|
|
assert (False, 'user1@gmail.com') in ac[0][0].targets
|
|
|
|
|
assert 'test@hotmail.com' in ac[0][0].cc
|
|
|
|
|
assert 'company' in ac[0][1].tags
|
|
|
|
|
|
|
|
|
|
assert (False, 'user2@gmail.com') in ac[0][1].targets
|
|
|
|
|
assert 'company' in ac[0][1].tags
|
|
|
|
|
assert 'co-worker' in ac[0][1].tags
|
|
|
|
|
|
|
|
|
|
#
|
|
|
|
|
# Specifically test _special_token_handler()
|
|
|
|
|
#
|
|
|
|
|
tokens = {
|
|
|
|
|
# This maps to itself (bcc); no change here
|
|
|
|
|
'bcc': 'user@test.com',
|
|
|
|
|
# This should get mapped to 'targets'
|
|
|
|
|
'to': 'user1@abc.com',
|
|
|
|
|
# white space and tab is intentionally added to the end to verify we
|
|
|
|
|
# do not play/tamper with information
|
|
|
|
|
'targets': 'user2@abc.com, user3@abc.com \t',
|
|
|
|
|
# If the end user provides a configuration for data we simply don't use
|
|
|
|
|
# this isn't a proble... we simply don't touch it either; we leave it
|
|
|
|
|
# as is.
|
|
|
|
|
'ignore': 'not-used'
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
result = ConfigBase._special_token_handler('mailto', tokens)
|
|
|
|
|
# to gets mapped to targets
|
|
|
|
|
assert 'to' not in result
|
|
|
|
|
|
|
|
|
|
# bcc is allowed here
|
|
|
|
|
assert 'bcc' in result
|
|
|
|
|
assert 'targets' in result
|
|
|
|
|
# Not used, but also not touched; this entry should still be in our result
|
|
|
|
|
# set
|
|
|
|
|
assert 'ignore' in result
|
|
|
|
|
# We'll concatinate all of our targets together
|
|
|
|
|
assert len(result['targets']) == 2
|
|
|
|
|
assert 'user1@abc.com' in result['targets']
|
|
|
|
|
# Content is passed as is
|
|
|
|
|
assert 'user2@abc.com, user3@abc.com \t' in result['targets']
|
|
|
|
|
|
|
|
|
|
# We re-do the simmiar test above. The very key difference is the
|
|
|
|
|
# `targets` is a list already (it's expected type) so `to` can properly be
|
|
|
|
|
# concatinated into the list vs the above (which tries to correct the
|
|
|
|
|
# situation)
|
|
|
|
|
tokens = {
|
|
|
|
|
# This maps to itself (bcc); no change here
|
|
|
|
|
'bcc': 'user@test.com',
|
|
|
|
|
# This should get mapped to 'targets'
|
|
|
|
|
'to': 'user1@abc.com',
|
|
|
|
|
# similar to the above test except targets is now a proper
|
|
|
|
|
# dictionary allowing the `to` (when translated to `targets`) to get
|
|
|
|
|
# appended to it
|
|
|
|
|
'targets': ['user2@abc.com', 'user3@abc.com'],
|
|
|
|
|
# If the end user provides a configuration for data we simply don't use
|
|
|
|
|
# this isn't a proble... we simply don't touch it either; we leave it
|
|
|
|
|
# as is.
|
|
|
|
|
'ignore': 'not-used'
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
result = ConfigBase._special_token_handler('mailto', tokens)
|
|
|
|
|
# to gets mapped to targets
|
|
|
|
|
assert 'to' not in result
|
|
|
|
|
|
|
|
|
|
# bcc is allowed here
|
|
|
|
|
assert 'bcc' in result
|
|
|
|
|
assert 'targets' in result
|
|
|
|
|
# Not used, but also not touched; this entry should still be in our result
|
|
|
|
|
# set
|
|
|
|
|
assert 'ignore' in result
|
|
|
|
|
|
|
|
|
|
# Now we'll see the new user added as expected (concatinated into our list)
|
|
|
|
|
assert len(result['targets']) == 3
|
|
|
|
|
assert 'user1@abc.com' in result['targets']
|
|
|
|
|
assert 'user2@abc.com' in result['targets']
|
|
|
|
|
assert 'user3@abc.com' in result['targets']
|
|
|
|
|
|
|
|
|
|
# Test providing a list
|
|
|
|
|
t.write("""
|
|
|
|
|
# A comment line over top of a URL
|
|
|
|
|
urls:
|
|
|
|
|
- mailtos://user:pass@example.com:
|
|
|
|
|
- smtp: smtp3-dev.google.gmail.com
|
|
|
|
|
to:
|
|
|
|
|
- John Smith <user1@gmail.com>
|
|
|
|
|
- Jason Tater <user2@gmail.com>
|
|
|
|
|
- user3@gmail.com
|
|
|
|
|
|
|
|
|
|
- to: Henry Fisher <user4@gmail.com>, Jason Archie <user5@gmail.com>
|
|
|
|
|
smtp_host: smtp5-dev.google.gmail.com
|
|
|
|
|
tag: drinking-buddy
|
|
|
|
|
|
|
|
|
|
# provide case where the URL includes some input too
|
|
|
|
|
# In both of these cases, the cc and targets (to) get over-ridden
|
|
|
|
|
# by values below
|
|
|
|
|
- mailtos://user:pass@example.com/arnold@imdb.com/?cc=bill@micro.com/:
|
|
|
|
|
to:
|
|
|
|
|
- override01@gmail.com
|
|
|
|
|
cc:
|
|
|
|
|
- override02@gmail.com
|
|
|
|
|
|
|
|
|
|
- sinch://:
|
|
|
|
|
- spi: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
|
|
|
|
token: bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
|
|
|
|
|
|
|
|
|
|
# Test a case where we expect a string, but yaml reads it in as
|
|
|
|
|
# a number
|
|
|
|
|
from: 10005243890
|
|
|
|
|
to: +1(123)555-1234
|
|
|
|
|
""")
|
|
|
|
|
|
|
|
|
|
# Create ourselves a config object
|
|
|
|
|
ac = AppriseConfig(paths=str(t))
|
|
|
|
|
|
|
|
|
|
# 2 emails to be sent and 1 Sinch service call
|
|
|
|
|
assert len(ac.servers()) == 4
|
|
|
|
|
|
|
|
|
|
# Verify our users got placed into the to
|
|
|
|
|
assert len(ac[0][0].targets) == 3
|
|
|
|
|
assert ("John Smith", 'user1@gmail.com') in ac[0][0].targets
|
|
|
|
|
assert ("Jason Tater", 'user2@gmail.com') in ac[0][0].targets
|
|
|
|
|
assert (False, 'user3@gmail.com') in ac[0][0].targets
|
|
|
|
|
assert ac[0][0].smtp_host == 'smtp3-dev.google.gmail.com'
|
|
|
|
|
|
|
|
|
|
assert len(ac[0][1].targets) == 2
|
|
|
|
|
assert ("Henry Fisher", 'user4@gmail.com') in ac[0][1].targets
|
|
|
|
|
assert ("Jason Archie", 'user5@gmail.com') in ac[0][1].targets
|
|
|
|
|
assert 'drinking-buddy' in ac[0][1].tags
|
|
|
|
|
assert ac[0][1].smtp_host == 'smtp5-dev.google.gmail.com'
|
|
|
|
|
|
|
|
|
|
# Our third test tests cases where some variables are defined inline
|
|
|
|
|
# and additional ones are defined below that share the same token space
|
|
|
|
|
assert len(ac[0][2].targets) == 1
|
|
|
|
|
assert len(ac[0][2].cc) == 1
|
|
|
|
|
assert (False, 'override01@gmail.com') in ac[0][2].targets
|
|
|
|
|
assert 'override02@gmail.com' in ac[0][2].cc
|
|
|
|
|
|
|
|
|
|
# Test our Since configuration now:
|
|
|
|
|
assert len(ac[0][3].targets) == 1
|
|
|
|
|
assert ac[0][3].service_plan_id == 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa'
|
|
|
|
|
assert ac[0][3].source == '+10005243890'
|
|
|
|
|
assert ac[0][3].targets[0] == '+11235551234'
|
|
|
|
|