summaryrefslogtreecommitdiff
path: root/qa/qa/page/project/web_ide/edit.rb
blob: 2b6c01888d59a148af13124b4a54b67837eab3d8 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
# frozen_string_literal: true

module QA
  module Page
    module Project
      module WebIDE
        class Edit < Page::Base
          include Page::Component::DropdownFilter

          view 'app/assets/javascripts/ide/components/ide_tree.vue' do
            element :new_file
          end

          view 'app/assets/javascripts/ide/components/ide_tree_list.vue' do
            element :file_list
          end

          view 'app/assets/javascripts/ide/components/new_dropdown/modal.vue' do
            element :full_file_path
            element :template_list
          end

          view 'app/assets/javascripts/ide/components/file_templates/bar.vue' do
            element :file_templates_bar
            element :file_template_dropdown
          end

          view 'app/assets/javascripts/ide/components/file_templates/dropdown.vue' do
            element :dropdown_filter_input
          end

          view 'app/assets/javascripts/ide/components/commit_sidebar/form.vue' do
            element :begin_commit_button
            element :commit_button
          end

          def has_file?(file_name)
            within_element(:file_list) do
              page.has_content? file_name
            end
          end

          def create_new_file_from_template(file_name, template)
            click_element :new_file
            within_element(:template_list) do
              begin
                click_on file_name
              rescue Capybara::ElementNotFound
                raise ElementNotFound, %Q(Couldn't find file template named "#{file_name}". Please confirm that it is a valid option.)
              end
            end

            wait(reload: false) do
              within_element(:file_templates_bar) do
                click_element :file_template_dropdown
                fill_element :dropdown_filter_input, template

                begin
                  click_on template
                rescue Capybara::ElementNotFound
                  raise ElementNotFound, %Q(Couldn't find template "#{template}" for #{file_name}. Please confirm that it exists in the list of templates.)
                end
              end
            end
          end

          def commit_changes
            click_element :begin_commit_button

            # After clicking :begin_commit_button there is an animation that
            # hides :begin_commit_button and shows :commit_button
            #
            # Wait for the animation to complete before clicking :commit_button
            # otherwise the click will quietly do nothing.
            wait(reload: false) do
              has_no_element?(:begin_commit_button) &&
                has_element?(:commit_button)
            end

            # Retry the attempt to click :commit_button just in case part of the
            # animation is still in process even when the buttons have the
            # expected visibility.
            commit_success_msg_shown = retry_until do
              click_element :commit_button

              wait(reload: false) do
                has_text?('Your changes have been committed')
              end
            end

            raise "The changes do not appear to have been committed successfully." unless commit_success_msg_shown
          end
        end
      end
    end
  end
end