Fix some bad ordering issues when setting state in RepositoryForm.

Review Request #10857 — Created Jan. 24, 2020 and submitted — Latest diff uploaded

Information

Review Board
release-3.0.x

Reviewers

RepositoryForm was setting some initial values for the form from an
instance a bit too late in the process, causing our hosting_type field
to be set after it was accessed. While this didn't show any regressions
on Django 1.6 (though it's possible there are some), it outright fails
on Django 1.11.

This change fixes the logic to set all the initial state earlier and in
one place, so it's more clear where similar code in the future should
go. It also adds comments to the methods responsible for setting the
state, indicating some requirements as to what state those functions are
allowed to access.

This all exposed an issue where an SCMTool form was being populated with
data when a hosting service was set. This doesn't cause any real-world
problems, but it was incorrect, and a bad unit test wasn't checking this
resulting state correctly. The above fix also fixed this, which broked
the bad unit test.

Both the unit test and another that was checking form values in a
non-future-proof way have been fixed.

Unit tests passed here and on release-4.0.x (with Django 1.11).

Commits

Files