```ruby
module SharedUser
  include Spinach::DSL

  step 'User "John Doe" exists' do
    user_exists("John Doe", { username: "john_doe" })
  end

  step 'User "Mary Jane" exists' do
    user_exists("Mary Jane", { username: "mary_jane" })
  end

  step 'gitlab user "Mike"' do
    create(:user, name: "Mike")
  end

  protected

  def user_exists(name, options = {})
    User.find_by(name: name) || create(:user, { name: name, admin: false }.merge(options))
  end

  step 'I have an ssh key' do
    create(:personal_key, user: @user)
  end

  step 'I have no ssh keys' do
    @user.keys.delete_all
  end
end
```

Add click to tab steps
user
```ruby
module SharedUser
  include Spinach::DSL

  step 'User "John Doe" exists' do
    user_exists("John Doe", { username: "john_doe" })
  end

  step 'User "Mary Jane" exists' do
    user_exists("Mary Jane", { username: "mary_jane" })
  end

  step 'gitlab user "Mike"' do
    create(:user, name: "Mike")
  end

  protected

  def user_exists(name, options = {})
    User.find_by(name: name) || create(:user, { name: name, admin: false }.merge(options))
  end

  step 'I have an ssh key' do
    create(:personal_key, user: @user)
  end

  step 'I have no ssh keys' do
    @user.keys.delete_all
  end

  step 'I click on "Personal projects" tab' do
    page.within '.nav-links' do
      click_link 'Personal projects'
    end

    expect(page).to have_css('.tab-content #projects.active')
  end

  step 'I click on "Contributed projects" tab' do
    page.within '.nav-links' do
      click_link 'Contributed projects'
    end

    expect(page).to have_css('.tab-content #contributed.active')
  end
end
```
assistant