Commit 35ec8dad authored by minahilnichols's avatar minahilnichols

Add tests and cleanup path

parent cb8584b0
...@@ -6,13 +6,13 @@ import { ...@@ -6,13 +6,13 @@ import {
companySizes, companySizes,
} from 'ee/vue_shared/leads/constants'; } from 'ee/vue_shared/leads/constants';
import csrf from '~/lib/utils/csrf'; import csrf from '~/lib/utils/csrf';
import CountryOrRegionSelector from '../../../trials/components/country_or_region_selector.vue'; import CountryOrRegionSelector from '../../../../trials/components/country_or_region_selector.vue';
import { import {
TRIAL_COMPANY_SIZE_PROMPT, TRIAL_COMPANY_SIZE_PROMPT,
TRIAL_PHONE_DESCRIPTION, TRIAL_PHONE_DESCRIPTION,
TRIAL_FORM_SUBMIT_TEXT, TRIAL_FORM_SUBMIT_TEXT,
} from '../../../trials/constants'; } from '../../../../trials/constants';
import RegistrationTrialToggle from '../../components/registration_trial_toggle.vue'; import RegistrationTrialToggle from '../../../components/registration_trial_toggle.vue';
export default { export default {
csrf, csrf,
...@@ -26,8 +26,9 @@ export default { ...@@ -26,8 +26,9 @@ export default {
CountryOrRegionSelector, CountryOrRegionSelector,
RegistrationTrialToggle, RegistrationTrialToggle,
}, },
inject: ['createLeadPath'],
props: { props: {
active: { trial: {
type: Boolean, type: Boolean,
required: false, required: false,
default: false, default: false,
...@@ -65,7 +66,7 @@ export default { ...@@ -65,7 +66,7 @@ export default {
</script> </script>
<template> <template>
<gl-form :action="__('/-/trials/create_lead')" method="post"> <gl-form :action="createLeadPath" method="post" novalidate>
<input :value="$options.csrf.token" type="hidden" name="authenticity_token" /> <input :value="$options.csrf.token" type="hidden" name="authenticity_token" />
<div class="gl-display-flex gl-flex-direction-column gl-sm-flex-direction-row gl-mt-5"> <div class="gl-display-flex gl-flex-direction-column gl-sm-flex-direction-row gl-mt-5">
<gl-form-group <gl-form-group
...@@ -74,7 +75,13 @@ export default { ...@@ -74,7 +75,13 @@ export default {
label-for="company_name" label-for="company_name"
class="gl-mr-5 gl-w-half gl-xs-w-full" class="gl-mr-5 gl-w-half gl-xs-w-full"
> >
<gl-form-input id="company_name" :value="companyName" name="company_name" required /> <gl-form-input
id="company_name"
:value="companyName"
name="company_name"
data-testid="company_name"
required
/>
</gl-form-group> </gl-form-group>
<gl-form-group <gl-form-group
:label="$options.i18n.companySizeLabel" :label="$options.i18n.companySizeLabel"
...@@ -89,11 +96,12 @@ export default { ...@@ -89,11 +96,12 @@ export default {
:options="companySizeOptionsWithDefault" :options="companySizeOptionsWithDefault"
value-field="id" value-field="id"
text-field="name" text-field="name"
data-testid="company_size"
required required
/> />
</gl-form-group> </gl-form-group>
</div> </div>
<country-or-region-selector :country="country" :state="state" required /> <country-or-region-selector :country="country" :state="state" data-testid="country" required />
<gl-form-group <gl-form-group
label="Telephone Number (Optional)" label="Telephone Number (Optional)"
label-size="sm" label-size="sm"
...@@ -105,17 +113,18 @@ export default { ...@@ -105,17 +113,18 @@ export default {
:value="phoneNumber" :value="phoneNumber"
name="phone_number" name="phone_number"
type="tel" type="tel"
data-testid="phone_number"
pattern="^(\+)*[0-9-\s]+$" pattern="^(\+)*[0-9-\s]+$"
/> />
</gl-form-group> </gl-form-group>
<gl-form-group label="Website (Optional)" label-size="sm" label-for="website"> <gl-form-group label="Website (Optional)" label-size="sm" label-for="website">
<gl-form-input id="website" :value="website" name="website" /> <gl-form-input id="website" :value="website" name="website" data-testid="website" />
</gl-form-group> </gl-form-group>
<gl-form-group label="GitLab Ultimate trial (optional)" label-size="sm" label-for="website"> <gl-form-group label="GitLab Ultimate trial (optional)" label-size="sm">
<gl-form-text class="gl-pb-3">{{ <gl-form-text class="gl-pb-3">{{
__('Try all GitLab features for free for 30 days. No credit card required.') __('Try all GitLab features for free for 30 days. No credit card required.')
}}</gl-form-text> }}</gl-form-text>
<registration-trial-toggle :active="active" /> <registration-trial-toggle :active="trial" data-testid="trial" />
</gl-form-group> </gl-form-group>
<gl-button type="submit" variant="confirm" class="gl-w-20"> <gl-button type="submit" variant="confirm" class="gl-w-20">
{{ $options.i18n.formSubmitText }} {{ $options.i18n.formSubmitText }}
......
import Vue from 'vue'; import Vue from 'vue';
import apolloProvider from 'ee/subscriptions/buy_addons_shared/graphql'; import apolloProvider from 'ee/subscriptions/buy_addons_shared/graphql';
import RegistrationForm from '../components/registration_form.vue'; import RegistrationForm from './components/registration_form.vue';
export default () => { export default () => {
const el = document.querySelector('#js-company-registration-form'); const el = document.querySelector('#js-company-registration-form');
const { active } = el.dataset; const { trial, createLeadPath } = el.dataset;
return new Vue({ return new Vue({
el, el,
apolloProvider, apolloProvider,
provide: { createLeadPath },
render(createElement) { render(createElement) {
return createElement(RegistrationForm, { return createElement(RegistrationForm, {
props: { active }, props: { trial },
}); });
}, },
}); });
......
...@@ -2,13 +2,9 @@ ...@@ -2,13 +2,9 @@
module Registrations module Registrations
class CompanyController < ApplicationController class CompanyController < ApplicationController
include Registrations::CreateGroup
include Registrations::ApplyTrial
include ::Gitlab::Utils::StrongMemoize
include OneTrustCSP
layout 'minimal' layout 'minimal'
before_action :check_if_gl_com_or_dev
feature_category :onboarding feature_category :onboarding
def new def new
......
- page_title _('Start your Free Ultimate Trial') - page_title _('Start your Free Ultimate Trial')
- content_for :page_specific_javascripts do
= render "layouts/google_tag_manager_head"
= render "layouts/one_trust"
= render "layouts/google_tag_manager_body"
.row .row
.col-md-6.m-sm-6 .col-md-6.m-sm-6
%h2.gl-pb-5.gl-my-0 %h2.gl-pb-5.gl-my-0
= _("About your company") = _("About your company")
#js-company-registration-form{ data: { active: params[:trial] == 'true' } } #js-company-registration-form{ data: { trial: params[:trial] == 'true', create_lead_path: create_lead_trials_path } }
.col-md-4.gl-display-inline-flex.gl-vertical-align-middle .col-md-4.gl-display-inline-flex.gl-vertical-align-middle
= image_tag 'illustrations/saas-trial-illustration.svg', alt: '', class: 'gl-display-none d-md-inline gl-w-full' = image_tag 'illustrations/saas-trial-illustration.svg', alt: '', class: 'gl-display-none d-md-inline gl-w-full'
# frozen_string_literal: true
require 'spec_helper'
RSpec.describe Registrations::CompanyController do
let_it_be(:user) { create(:user) }
describe 'GET #new' do
subject { get :new }
context 'with an unauthenticated user' do
it { is_expected.to have_gitlab_http_status(:redirect) }
it { is_expected.to redirect_to(new_user_session_path) }
end
context 'with an authenticated user' do
let(:com) { true }
before do
sign_in(user)
allow(::Gitlab).to receive(:com?).and_return(com)
end
context 'when on .com' do
it { is_expected.to have_gitlab_http_status(:ok) }
it { is_expected.to render_template 'layouts/minimal' }
it { is_expected.to render_template(:new) }
end
context 'when not on .com' do
let(:com) { false }
it { is_expected.to have_gitlab_http_status(:not_found) }
end
end
end
end
import { GlButton, GlForm } from '@gitlab/ui';
import { createLocalVue } from '@vue/test-utils';
import VueApollo from 'vue-apollo';
import RegistrationForm from 'ee/registrations/company/new/components/registration_form.vue';
import { shallowMountExtended } from 'helpers/vue_test_utils_helper';
import { TRIAL_FORM_SUBMIT_TEXT } from 'ee/trials/constants';
const localVue = createLocalVue();
localVue.use(VueApollo);
const SUBMIT_PATH = '_submit_path_';
describe('RegistrationForm', () => {
let wrapper;
const createComponent = ({ mountFunction = shallowMountExtended } = {}) => {
return mountFunction(RegistrationForm, {
localVue,
provide: {
createLeadPath: SUBMIT_PATH,
},
propsData: { trial: true },
});
};
const findButton = () => wrapper.findComponent(GlButton);
const findForm = () => wrapper.findComponent(GlForm);
beforeEach(() => {
wrapper = createComponent();
});
afterEach(() => {
wrapper.destroy();
});
describe('rendering', () => {
it('has the "Continue" text on the submit button', () => {
expect(findButton().text()).toBe(TRIAL_FORM_SUBMIT_TEXT);
});
it('sets the trial value to be true', () => {
expect(wrapper.props().trial).toBe(true);
});
it('has the correct form input in the form content', () => {
const visibleFields = [
'company_name',
'company_size',
'country',
'phone_number',
'website',
'trial',
];
visibleFields.forEach((f) => expect(wrapper.findByTestId(f).exists()).toBe(true));
});
});
describe('submitting', () => {
it('submits the form when button is clicked', () => {
expect(findButton().attributes('type')).toBe('submit');
});
it('displays form with correct action', () => {
expect(findForm().attributes('action')).toBe(SUBMIT_PATH);
});
});
});
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment