Enable asserting that a signal was called several times in a specific order
jpic opened this issue · 1 comments
jpic commented
I could test that a signal was called once with the right arguments:
def test_001_simple_app(self):
app = App.objects.create(name='artists',
category=AppCategory.objects.create(name='art'))
appversion = AppVersion.objects.create(app=app, version=0)
env = Environment.objects.create(name='default')
with mock_signal_receiver(post_app_install) as install_receiver:
env.install(appversion)
self.assertEqual(install_receiver.call_count, 1)
install_receiver.assert_called_with(signal=post_app_install, sender=env, appversion=appversion)
self.assertEqual(list(env.appversions.all()), [appversion])
self.assertIn(app, env.installed_apps)
with mock_signal_receiver(post_app_uninstall) as uninstall_receiver:
env.uninstall(appversion)
self.assertEqual(uninstall_receiver.call_count, 1)
uninstall_receiver.assert_called_with(signal=post_app_uninstall, sender=env, appversion=appversion)
self.assertEqual(list(env.appversions.all()), [])
self.assertEqual(0, len(env.installed_apps))
But in this case, I'd like to assert that post_app_install was called twice, first with 'artists' and then with 'artworks' - since 'artists' is a dependency of 'artworks':
def test_002_simple_dependency(self):
artists_app = App.objects.create(name='artists',
category=AppCategory.objects.create(name='art'))
artists_appversion = AppVersion.objects.create(app=artists_app, version=0)
artworks_app = App.objects.create(name='artworks',
category=AppCategory.objects.get(name='art'))
artworks_appversion = AppVersion.objects.create(app=artworks_app, version=0)
artworks_appversion.dependencies.add(artists_appversion)
env = Environment.objects.create(name='default')
with mock_signal_receiver(post_app_install) as install_receiver:
import ipdb; ipdb.set_trace()
env.install(artworks_appversion)
self.assertEqual(install_receiver.call_count, 2)
Fiddling with ipdb, I couldn't find a way .... Is this even possible ?
You may want to fiddle with it too, just pip install -e the app and cd to test_project and run manage.py test appstore: app is open source
Thanks in advance !
Regards
jpic commented
Nevermind, I'm dumb sorry ... All i have to do is assert on call_args_list (I found out in an ultimate try).
Thanks a lot for this fantastic app.