The A/B test mechanism that is implemented for the confirmation page must be enabled for the whole application: any template (esp.the donation form) should be a/b testable.As a **member of the fundraising team**,
**I want** to check how different appearances of the donation page and its forms (donation, membership) affect the amount and frequency of donations,
**so that** I can reach the donation target.
Acceptance Criteria:
* The Fundraising dev team can define "campaigns", i.e. alternate versions of templates that are available for a limited amount of time (similar to the mechanism already in place on the confirmation page).
* When a donor with no cookies goes to spenden.wikimedia.de, he is sorted in a bucket for each of the currently running campaigns. The buckets are stored in a cookie.
* When a donor with has a campaign parameter in the URL, the bucket for that campaign will be set according to the parameter (if the parameter is a valid bucket id). In the case of multiple campaigns, The campaign function must allow for several running A/B teststhe other buckets are not touched or randomly chosen in case the user has no previous assignment.
* When a donor with a bucket cookie goes to spenden.wikimedia.de, running independently from each other.he is shown the correct template (if the bucket id is valid and the campaign is still running)
* The alternate template name for donations is written into the `layout` property of `DonationTrackingInfo`
The following behaviors must be changed:Background:
* Get rid of complex folder structure: All A/B testing templates should be stored in `app/templates/ab_tests`, with different template names.Proposal of for the implementation:
* Test buckets (campaign* Get rid of complex folder structure: All A/B testing templates should be stored in `app/templates/ab_tests`, bucket) should be stored in cookies to deliver a consistwith different interface to the usertemplate names.
* `DonationConfirmationPageSelector` needs to be refactored to a general `TemplateSelector` that gets "default" templates and optional "campaign" templates for each default template. The `selectPage` method needs to be rewritten to a) get a bucket to determine which template to use b) renamed to `selectTemplate`. The call to `selectTemplate` must be moved from `ShowDonationConfirmationHandler` to `getIncludeTemplate` and `getLayoutTemplate` in the `FunFunFactory`.
* The main template must get blocks where templates can define additional JavaScript and CSS in case that's needed for an A/B test. The JavaScript factories for donationForm and membershipForm must be replaceable.