summaryrefslogtreecommitdiff
path: root/spec/support/helpers/features/invite_members_modal_helper.rb
blob: d02ec06d8861a32de36b02a6cf71c4cfc8f31563 (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
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
# frozen_string_literal: true

module Spec
  module Support
    module Helpers
      module Features
        module InviteMembersModalHelper
          def invite_member(names, role: 'Guest', expires_at: nil, refresh: true)
            click_on 'Invite members'

            page.within invite_modal_selector do
              select_members(names)
              choose_options(role, expires_at)
              submit_invites
            end

            page.refresh if refresh
          end

          def input_invites(names)
            click_on 'Invite members'

            page.within invite_modal_selector do
              select_members(names)
            end
          end

          def select_members(names)
            Array.wrap(names).each do |name|
              find(member_dropdown_selector).set(name)

              wait_for_requests
              click_button name
            end
          end

          def invite_group(name, role: 'Guest', expires_at: nil)
            click_on 'Invite a group'

            click_on 'Select a group'
            wait_for_requests
            click_button name
            choose_options(role, expires_at)

            submit_invites

            page.refresh
          end

          def submit_invites
            click_button 'Invite'
          end

          def choose_options(role, expires_at)
            unless role == 'Guest'
              click_button 'Guest'
              wait_for_requests
              click_button role
            end

            fill_in 'YYYY-MM-DD', with: expires_at.strftime('%Y-%m-%d') if expires_at
          end

          def click_groups_tab
            expect(page).to have_link 'Groups'
            click_link "Groups"
          end

          def group_dropdown_selector
            '[data-testid="group-select-dropdown"]'
          end

          def member_dropdown_selector
            '[data-testid="members-token-select-input"]'
          end

          def invite_modal_selector
            '[data-testid="invite-modal"]'
          end

          def member_token_error_selector(id)
            "[data-testid='error-icon-#{id}']"
          end

          def member_token_avatar_selector
            "[data-testid='token-avatar']"
          end

          def member_token_selector(id)
            "[data-token-id='#{id}']"
          end

          def more_invite_errors_button_selector
            "[data-testid='accordion-button']"
          end

          def limited_invite_error_selector
            "[data-testid='errors-limited-item']"
          end

          def expanded_invite_error_selector
            "[data-testid='errors-expanded-item']"
          end

          def remove_token(id)
            page.within member_token_selector(id) do
              find('[data-testid="close-icon"]').click
            end
          end

          def expect_to_have_successful_invite_indicator(page, user)
            expect(page).to have_selector("#{member_token_selector(user.id)} .gl-bg-green-100")
            expect(page).not_to have_text("#{user.name}: ")
          end

          def expect_to_have_invalid_invite_indicator(page, user, message: true)
            expect(page).to have_selector("#{member_token_selector(user.id)} .gl-bg-red-100")
            expect(page).to have_selector(member_token_error_selector(user.id))
            expect(page).to have_text("#{user.name}: Access level should be greater than or equal to") if message
          end

          def expect_to_have_normal_invite_indicator(page, user)
            expect(page).to have_selector(member_token_selector(user.id))
            expect(page).not_to have_selector("#{member_token_selector(user.id)} .gl-bg-red-100")
            expect(page).not_to have_selector("#{member_token_selector(user.id)} .gl-bg-green-100")
            expect(page).not_to have_text("#{user.name}: ")
          end

          def expect_to_have_invite_removed(page, user)
            expect(page).not_to have_selector(member_token_selector(user.id))
            expect(page).not_to have_text("#{user.name}: Access level should be greater than or equal to")
          end

          def expect_to_have_group(group)
            expect(page).to have_selector("[entity-id='#{group.id}']")
          end

          def expect_not_to_have_group(group)
            expect(page).not_to have_selector("[entity-id='#{group.id}']")
          end
        end
      end
    end
  end
end