Trial starting end up on 404 page
Summary
The purpose of this issue is to fix bug when customer is trying to start a trial but when he enters all the information it brings to an error page.
Support ticket: https://support.gitlab.com/hc/requests/380237
Steps to reproduce
2 requests to customers portal are required to start trial. Basically error happens when /trials/create_hand_raise_lead
request passes and next one /trials
fails.
First we need to simulate this behaviour by stubbing response. /trials
request will fail locally anyway. Nothing to do. To stub /trials/create_hand_raise_lead
to be successful we need to update this execute
method to look like this:
def execute(company_params)
return ServiceResponse.success # new line
response = client.generate_trial(company_params)
if response[:success]
ServiceResponse.success
else
ServiceResponse.error(message: response.dig(:data, :errors))
end
end
- Simulate SaaS: https://docs.gitlab.com/ee/development/ee_features.html#simulate-a-saas-instance
- Sign up as new user. Create exactly 1 group.
- Visit
/-/trials/new
. Fill the form and submit. - You will end up on this page:
At this point it's already broken. In trials#create_lead
we select only available group for trial and apply trial for that group immediately: https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/app/controllers/trials_controller.rb#L37
And because we had an error with applying trial the select form is rendered: https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/app/controllers/trials_controller.rb#L231
It's already wrong because we render select form for multiple group but still staying on trials#new
page. It causes error in console and half rendered page from above:
Click to expand
Correct select page looks like this:
If we had multiple groups and ended up on the select page, we would see correct error:
Also because this select page is broken when client submits form, it redirects to the /-/trials/apply
instead of sending post request. And we end up here:
How to Fix
See #393760 (comment 1299559034) about page specific javascript issues and how we should fix those.