samedi 2 novembre 2019

Testing a form. What'happening? is this really working?

I have a django form with a field directed to a foreignkey. Initially is empty, I mean without any option. Javascript will add options based on another form field.

It's working but I want to test it, without using Selenium (and so, without using javascript).

After numerous attempts I write this code and apparently it's working but I don't know why and I'm not sure it's really working.

def test_form_validation(self):
    maschio = Gender.objects.create(name_en='Male', name_it='Maschio')
    nome = NameType.objects.create(name_en='Name', name_it='Nome')
    romani = NameLanguage.objects.create(
        name_en='Romans', name_it='Romani')
    romani.syntax.add(nome)
    form = NameForm({'nametype': nome.id, 'gender': maschio.id,
                     'name': 'Remo', 'namelanguage': romani.id})
    # print('1', form)
    form.fields['nametype'].initial = nome.id
    form.fields['gender'].initial = maschio.id
    form.fields['name'].initial = 'Remo'
    form.fields['namelanguage'].initial = romani.id
    print('2', form)
    form.save()
    self.assertEqual(Name.objects.all().count(), 1)
    my_name = Name.objects.first()
    self.assertEqual(my_name.name, 'remo')
    self.assertEqual(my_name.nametype, nome)
    self.assertEqual(my_name.gender, maschio)
    self.assertEqual(my_name.namelanguage, romani)
    print('end of test')

# print('1', form) is commented out because with that the test will be give error on line form.save() (ValueError ... the data didn't validate). Without that line the test pass (!?!).

I will expected an error when I call my form bounded because nametype has no option to choose from. nome.id is not one of the ammissible choices. And in effect, as I said, it will give an error if I ask to print the form.

<tr><th><label for="id_nametype">Tipo:</label></th><td><select name="nametype" style="width:170px" disabled id="id_nametype">
  <option value="0">0</option>
</select></td></tr>

So, is this ok? and why it's working? what's happening?

Thank you

Aucun commentaire:

Enregistrer un commentaire