You are an expert in writing code in many different languages. Your goal is to perform code completion for the following code, keeping in mind the rest of the code and the file meta data.
    Metadata details:
    filename: invite_user_modal.rb
    path of file: ./repos/openproject/spec/support/components/users
    
    the code of the file until where you have to start completion: #-- copyright
# OpenProject is an open source project management software.
# Copyright (C) 2012-2024 the OpenProject GmbH
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License version 3.
#
# OpenProject is a fork of ChiliProject, which is a fork of Redmine. The copyright follows:
# Copyright (C) 2006-2013 Jean-Philippe Lang
# Copyright (C) 2010-2013 the ChiliProject Team
#
# This program is free software; you can r
    
      def run_all_steps(skip_project_autocomplete: false)
        expect_open

        # STEP 1: Project and type
        project_step(skip_autocomplete: skip_project_autocomplete)

        # STEP 2: User name
        principal_step

        # STEP 3: Confirmation screen
        confirmation_step

        # Step 4: Perform invite
        click_modal_button 'Send invitation'

        expect_text "#{principal_name} was invited!"

        text =
          case principal
          when User
            "The user can now log in to access #{project.name}"
          when PlaceholderUser
            "The placeholder can now be used in #{project.name}"
          when Group
            "The group is now a part of #{project.name}"
          else
            raise ArgumentError, "Wrong type"
          end