And document the rules. We made it deterministic recently. It should probably stay that way, and any a/b testing should be controlled upstream and communicated via the ffname parameter.
Proposed (makes selection_weight more important):
- if ffname is given, check if that form is valid and use it if so
- if ffname is not valid or not present
- group all valid forms by selection weight
- going from highest to lowest selection weight bucket,
- eliminate forms which match the donor's country and currency less specifically than the most specific match
- break ties by total available submethods
- if gateway uses mustache, querying for available submethods given the params
- mustache form config can lose the submethod keys
- if gateway uses RapidHTML, use the list in the form settings