def test_profile_dynamic_fields(self): from oioioi.base.preferences import PreferencesFactory, \ PreferencesSaved def callback_func(sender, **kwargs): self.assertEquals(sender.cleaned_data['dog'], 'Janusz') self.assertEquals(sender.cleaned_data['answer'], 42) try: PreferencesFactory.add_field( 'dog', CharField, lambda n, u: 'Andrzej', label='Doggy' ) PreferencesFactory.add_field( 'answer', IntegerField, lambda n, u: 72, label="The answer to everything" ) PreferencesSaved.connect(callback_func) self.client.login(username='******') url = reverse('edit_profile') response = self.client.get(url) for text in ['Doggy', 'Andrzej', '72', 'The answer to everything']: self.assertIn(text, response.content) data = {'username': '******', 'first_name': 'fn', 'last_name': 'ln', 'email': '*****@*****.**', 'dog': 'Janusz', 'answer': '42'} self.client.post(url, data, follow=True) # callback_func should be called already finally: PreferencesSaved.disconnect(callback_func) PreferencesFactory.clear_all_fields()