Welcome to mirror list, hosted at ThFree Co, Russian Federation.

invite_members_modal_helpers.rb « features « helpers « support « spec - gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
blob: c40e060bc8e88eae8f97c71ebc98a70c3f2ae0e8 (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
146
147
148
149
150
151
152
153
154
155
156
157
# frozen_string_literal: true

module Features
  module InviteMembersModalHelpers
    include ListboxHelpers

    def invite_member(names, role: 'Guest', expires_at: nil)
      click_on 'Invite members'

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

      wait_for_requests
    end

    def invite_member_by_email(role)
      click_on _('Invite members')

      page.within invite_modal_selector do
        choose_options(role, nil)
        find(member_dropdown_selector).set('new_email@gitlab.com')
        wait_for_requests

        find('.dropdown-item', text: 'Invite "new_email@gitlab.com" by email').click

        submit_invites

        wait_for_requests
      end
    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
      find('[role="option"]', text: name).click
      choose_options(role, expires_at)

      submit_invites
    end

    def submit_invites
      click_button 'Invite'
    end

    def choose_options(role, expires_at)
      page.within role_dropdown_selector do
        toggle_listbox
        select_listbox_item(role, exact_text: true)
      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 role_dropdown_selector
      '[data-testid="access-level-dropdown"]'
    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