mirror of
https://github.com/github/octodns.git
synced 2024-05-11 05:55:00 +00:00
Suport for shared_notifylist in Ns1Provider
This commit is contained in:
@@ -768,12 +768,70 @@ class TestNs1ProviderDynamic(TestCase):
|
||||
monitor = {
|
||||
'name': 'test monitor',
|
||||
}
|
||||
provider._client._notifylists_cache = {}
|
||||
monitor_id, feed_id = provider._monitor_create(monitor)
|
||||
self.assertEquals('mon-id', monitor_id)
|
||||
self.assertEquals('feed-id', feed_id)
|
||||
monitors_create_mock.assert_has_calls([call(name='test monitor',
|
||||
notify_list='nl-id')])
|
||||
|
||||
@patch('octodns.provider.ns1.Ns1Provider._feed_create')
|
||||
@patch('octodns.provider.ns1.Ns1Client.monitors_create')
|
||||
@patch('octodns.provider.ns1.Ns1Client._try')
|
||||
def test_monitor_create_shared_notifylist(self, try_mock,
|
||||
monitors_create_mock,
|
||||
feed_create_mock):
|
||||
provider = Ns1Provider('test', 'api-key', shared_notifylist=True)
|
||||
|
||||
# pre-fill caches to avoid extranious calls (things we're testing
|
||||
# elsewhere)
|
||||
provider._client._datasource_id = 'foo'
|
||||
provider._client._feeds_for_monitors = {}
|
||||
|
||||
# First time we'll need to create the share list
|
||||
provider._client._notifylists_cache = {}
|
||||
try_mock.reset_mock()
|
||||
monitors_create_mock.reset_mock()
|
||||
feed_create_mock.reset_mock()
|
||||
try_mock.side_effect = [{
|
||||
'id': 'nl-id',
|
||||
'name': provider.SHARED_NOTIFYLIST_NAME,
|
||||
}]
|
||||
monitors_create_mock.side_effect = [{
|
||||
'id': 'mon-id',
|
||||
}]
|
||||
feed_create_mock.side_effect = ['feed-id']
|
||||
monitor = {
|
||||
'name': 'test monitor',
|
||||
}
|
||||
monitor_id, feed_id = provider._monitor_create(monitor)
|
||||
self.assertEquals('mon-id', monitor_id)
|
||||
self.assertEquals('feed-id', feed_id)
|
||||
monitors_create_mock.assert_has_calls([call(name='test monitor',
|
||||
notify_list='nl-id')])
|
||||
try_mock.assert_called_once()
|
||||
# The shared notifylist should be cached now
|
||||
self.assertEquals([provider.SHARED_NOTIFYLIST_NAME],
|
||||
list(provider._client._notifylists_cache.keys()))
|
||||
|
||||
# Second time we'll use the cached version
|
||||
try_mock.reset_mock()
|
||||
monitors_create_mock.reset_mock()
|
||||
feed_create_mock.reset_mock()
|
||||
monitors_create_mock.side_effect = [{
|
||||
'id': 'mon-id',
|
||||
}]
|
||||
feed_create_mock.side_effect = ['feed-id']
|
||||
monitor = {
|
||||
'name': 'test monitor',
|
||||
}
|
||||
monitor_id, feed_id = provider._monitor_create(monitor)
|
||||
self.assertEquals('mon-id', monitor_id)
|
||||
self.assertEquals('feed-id', feed_id)
|
||||
monitors_create_mock.assert_has_calls([call(name='test monitor',
|
||||
notify_list='nl-id')])
|
||||
try_mock.assert_not_called()
|
||||
|
||||
def test_monitor_gen(self):
|
||||
provider = Ns1Provider('test', 'api-key')
|
||||
|
||||
@@ -986,6 +1044,12 @@ class TestNs1ProviderDynamic(TestCase):
|
||||
'notify_list': 'nl-id',
|
||||
}
|
||||
}]
|
||||
provider._client._notifylists_cache = {
|
||||
'not shared': {
|
||||
'id': 'nl-id',
|
||||
'name': 'not shared',
|
||||
}
|
||||
}
|
||||
provider._monitors_gc(record)
|
||||
monitors_for_mock.assert_has_calls([call(record)])
|
||||
datafeed_delete_mock.assert_has_calls([call('foo', 'feed-id')])
|
||||
@@ -1025,12 +1089,75 @@ class TestNs1ProviderDynamic(TestCase):
|
||||
'notify_list': 'nl-id2',
|
||||
},
|
||||
}]
|
||||
provider._client._notifylists_cache = {
|
||||
'not shared': {
|
||||
'id': 'nl-id',
|
||||
'name': 'not shared',
|
||||
},
|
||||
'not shared 2': {
|
||||
'id': 'nl-id2',
|
||||
'name': 'not shared 2',
|
||||
}
|
||||
}
|
||||
provider._monitors_gc(record, {'mon-id'})
|
||||
monitors_for_mock.assert_has_calls([call(record)])
|
||||
datafeed_delete_mock.assert_not_called()
|
||||
monitors_delete_mock.assert_has_calls([call('mon-id2')])
|
||||
notifylists_delete_mock.assert_has_calls([call('nl-id2')])
|
||||
|
||||
# Non-active monitor w/o a notifylist, generally shouldn't happen, but
|
||||
# code should handle it just in case someone gets clicky in the UI
|
||||
monitors_for_mock.reset_mock()
|
||||
datafeed_delete_mock.reset_mock()
|
||||
monitors_delete_mock.reset_mock()
|
||||
notifylists_delete_mock.reset_mock()
|
||||
monitors_for_mock.side_effect = [{
|
||||
'y': {
|
||||
'id': 'mon-id2',
|
||||
'notify_list': 'nl-id2',
|
||||
},
|
||||
}]
|
||||
provider._client._notifylists_cache = {
|
||||
'not shared a': {
|
||||
'id': 'nl-ida',
|
||||
'name': 'not shared a',
|
||||
},
|
||||
'not shared b': {
|
||||
'id': 'nl-idb',
|
||||
'name': 'not shared b',
|
||||
}
|
||||
}
|
||||
provider._monitors_gc(record, {'mon-id'})
|
||||
monitors_for_mock.assert_has_calls([call(record)])
|
||||
datafeed_delete_mock.assert_not_called()
|
||||
monitors_delete_mock.assert_has_calls([call('mon-id2')])
|
||||
notifylists_delete_mock.assert_not_called()
|
||||
|
||||
# Non-active monitor with a shared notifylist, monitor deleted, but
|
||||
# notifylist is left alone
|
||||
provider.shared_notifylist = True
|
||||
monitors_for_mock.reset_mock()
|
||||
datafeed_delete_mock.reset_mock()
|
||||
monitors_delete_mock.reset_mock()
|
||||
notifylists_delete_mock.reset_mock()
|
||||
monitors_for_mock.side_effect = [{
|
||||
'y': {
|
||||
'id': 'mon-id2',
|
||||
'notify_list': 'shared',
|
||||
},
|
||||
}]
|
||||
provider._client._notifylists_cache = {
|
||||
'shared': {
|
||||
'id': 'shared',
|
||||
'name': provider.SHARED_NOTIFYLIST_NAME,
|
||||
},
|
||||
}
|
||||
provider._monitors_gc(record, {'mon-id'})
|
||||
monitors_for_mock.assert_has_calls([call(record)])
|
||||
datafeed_delete_mock.assert_not_called()
|
||||
monitors_delete_mock.assert_has_calls([call('mon-id2')])
|
||||
notifylists_delete_mock.assert_not_called()
|
||||
|
||||
@patch('octodns.provider.ns1.Ns1Provider._monitor_sync')
|
||||
@patch('octodns.provider.ns1.Ns1Provider._monitors_for')
|
||||
def test_params_for_dynamic_region_only(self, monitors_for_mock,
|
||||
@@ -2325,17 +2452,22 @@ class TestNs1Client(TestCase):
|
||||
notifylists_list_mock.reset_mock()
|
||||
notifylists_create_mock.reset_mock()
|
||||
notifylists_delete_mock.reset_mock()
|
||||
notifylists_create_mock.side_effect = ['bar']
|
||||
notifylists_list_mock.side_effect = [{}]
|
||||
expected = {
|
||||
'id': 'nl-id',
|
||||
'name': 'bar',
|
||||
}
|
||||
notifylists_create_mock.side_effect = [expected]
|
||||
notify_list = [{
|
||||
'config': {
|
||||
'sourceid': 'foo',
|
||||
},
|
||||
'type': 'datafeed',
|
||||
}]
|
||||
nl = client.notifylists_create(name='some name',
|
||||
notify_list=notify_list)
|
||||
self.assertEquals('bar', nl)
|
||||
notifylists_list_mock.assert_not_called()
|
||||
got = client.notifylists_create(name='some name',
|
||||
notify_list=notify_list)
|
||||
self.assertEquals(expected, got)
|
||||
notifylists_list_mock.assert_called_once()
|
||||
notifylists_create_mock.assert_has_calls([
|
||||
call({'name': 'some name', 'notify_list': notify_list})
|
||||
])
|
||||
@@ -2349,6 +2481,29 @@ class TestNs1Client(TestCase):
|
||||
notifylists_create_mock.assert_not_called()
|
||||
notifylists_delete_mock.assert_has_calls([call('nlid')])
|
||||
|
||||
# Delete again, this time with a cache item that needs cleaned out and
|
||||
# another that needs to be ignored
|
||||
notifylists_list_mock.reset_mock()
|
||||
notifylists_create_mock.reset_mock()
|
||||
notifylists_delete_mock.reset_mock()
|
||||
client._notifylists_cache = {
|
||||
'another': {
|
||||
'id': 'notid',
|
||||
'name': 'another',
|
||||
},
|
||||
# This one comes 2nd on purpose
|
||||
'the-one': {
|
||||
'id': 'nlid',
|
||||
'name': 'the-one',
|
||||
},
|
||||
}
|
||||
client.notifylists_delete('nlid')
|
||||
notifylists_list_mock.assert_not_called()
|
||||
notifylists_create_mock.assert_not_called()
|
||||
notifylists_delete_mock.assert_has_calls([call('nlid')])
|
||||
# Only another left
|
||||
self.assertEquals(['another'], list(client._notifylists_cache.keys()))
|
||||
|
||||
notifylists_list_mock.reset_mock()
|
||||
notifylists_create_mock.reset_mock()
|
||||
notifylists_delete_mock.reset_mock()
|
||||
|
||||
Reference in New Issue
Block a user