summaryrefslogtreecommitdiff
path: root/spec/frontend/invite_members/components/user_limit_notification_spec.js
blob: 490b2e8bc7c770aeb1c1a22a7b9c0643732126c9 (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
import { GlAlert, GlSprintf } from '@gitlab/ui';
import { shallowMountExtended } from 'helpers/vue_test_utils_helper';
import UserLimitNotification from '~/invite_members/components/user_limit_notification.vue';
import {
  NOTIFICATION_LIMIT_VARIANT,
  REACHED_LIMIT_VARIANT,
  CLOSE_TO_LIMIT_VARIANT,
} from '~/invite_members/constants';
import { freeUsersLimit, remainingSeats } from '../mock_data/member_modal';

const INFO_ALERT_TITLE = 'Your top-level group name is over the 5 user limit.';
const WARNING_ALERT_TITLE = 'You only have space for 2 more members in name';

describe('UserLimitNotification', () => {
  let wrapper;

  const findAlert = () => wrapper.findComponent(GlAlert);
  const findTrialLink = () => wrapper.findByTestId('trial-link');
  const findUpgradeLink = () => wrapper.findByTestId('upgrade-link');

  const createComponent = (limitVariant, usersLimitDataset = {}, props = {}) => {
    wrapper = shallowMountExtended(UserLimitNotification, {
      propsData: {
        limitVariant,
        usersLimitDataset: {
          remainingSeats,
          freeUsersLimit,
          newTrialRegistrationPath: 'newTrialRegistrationPath',
          purchasePath: 'purchasePath',
          ...usersLimitDataset,
        },
        ...props,
      },
      provide: { name: 'name' },
      stubs: { GlSprintf },
    });
  };

  describe('when previewing free user cap', () => {
    it("renders user's preview limit notification", () => {
      createComponent(NOTIFICATION_LIMIT_VARIANT);

      const alert = findAlert();

      expect(alert.attributes('title')).toEqual(INFO_ALERT_TITLE);
      expect(alert.text()).toContain('GitLab will enforce this limit in the future.');
    });
  });

  describe('when close to limit within a group', () => {
    it("renders user's limit notification", () => {
      createComponent(CLOSE_TO_LIMIT_VARIANT);

      const alert = findAlert();

      expect(alert.attributes('title')).toEqual(WARNING_ALERT_TITLE);

      expect(alert.text()).toContain('To get more members an owner of the group can');
    });
  });

  describe('when limit is reached', () => {
    it("renders user's limit notification", () => {
      createComponent(REACHED_LIMIT_VARIANT);

      const alert = findAlert();

      expect(alert.attributes('title')).toEqual("You've reached your 5 members limit for name");
      expect(alert.text()).toContain(
        'To invite new users to this top-level group, you must remove existing users.',
      );
    });
  });

  describe('tracking', () => {
    it.each([CLOSE_TO_LIMIT_VARIANT, REACHED_LIMIT_VARIANT])(
      `has tracking attributes for %j variant`,
      (variant) => {
        createComponent(variant);

        expect(findTrialLink().attributes('data-track-action')).toBe('click_link');
        expect(findTrialLink().attributes('data-track-label')).toBe(
          `start_trial_user_limit_notification_${variant}`,
        );
        expect(findUpgradeLink().attributes('data-track-action')).toBe('click_link');
        expect(findUpgradeLink().attributes('data-track-label')).toBe(
          `upgrade_user_limit_notification_${variant}`,
        );
      },
    );
  });
});