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

archived_projects_service_spec.js « service « groups « frontend « spec - gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
blob: 988fb5553ba529d4d3baaa8eb711653ecca97b53 (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
import projects from 'test_fixtures/api/groups/projects/get.json';
import ArchivedProjectsService from '~/groups/service/archived_projects_service';
import Api from '~/api';

jest.mock('~/api');

describe('ArchivedProjectsService', () => {
  const groupId = 1;
  let service;

  beforeEach(() => {
    service = new ArchivedProjectsService(groupId, 'name_asc');
  });

  describe('getGroups', () => {
    const headers = { 'x-next-page': '2', 'x-page': '1', 'x-per-page': '20' };
    const page = 2;
    const query = 'git';
    const sort = 'created_asc';

    it('returns promise the resolves with formatted project', async () => {
      Api.groupProjects.mockResolvedValueOnce({ data: projects, headers });

      await expect(service.getGroups(undefined, page, query, sort)).resolves.toEqual({
        data: projects.map((project) => {
          return {
            id: project.id,
            name: project.name,
            full_name: project.name_with_namespace,
            markdown_description: project.description_html,
            visibility: project.visibility,
            avatar_url: project.avatar_url,
            relative_path: `${gon.relative_url_root}/${project.path_with_namespace}`,
            edit_path: null,
            leave_path: null,
            can_edit: false,
            can_leave: false,
            can_remove: false,
            type: 'project',
            permission: null,
            children: [],
            parent_id: project.namespace.id,
            project_count: 0,
            subgroup_count: 0,
            number_users_with_delimiter: 0,
            star_count: project.star_count,
            updated_at: project.updated_at,
            marked_for_deletion: false,
            last_activity_at: project.last_activity_at,
          };
        }),
        headers,
      });

      expect(Api.groupProjects).toHaveBeenCalledWith(groupId, query, {
        archived: true,
        include_subgroups: true,
        page,
        order_by: 'created_at',
        sort: 'asc',
      });
    });

    describe.each`
      markedForDeletionAt | expected
      ${null}             | ${false}
      ${undefined}        | ${false}
      ${'2023-07-21'}     | ${true}
    `(
      'when `marked_for_deletion_at` is $markedForDeletionAt',
      ({ markedForDeletionAt, expected }) => {
        it(`sets marked_for_deletion to ${expected}`, async () => {
          Api.groupProjects.mockResolvedValueOnce({
            data: projects.map((project) => ({
              ...project,
              marked_for_deletion_at: markedForDeletionAt,
            })),
            headers,
          });

          await expect(service.getGroups(undefined, page, query, sort)).resolves.toMatchObject({
            data: projects.map(() => {
              return {
                marked_for_deletion: expected,
              };
            }),
            headers,
          });
        });
      },
    );

    describe.each`
      sortArgument              | expectedOrderByParameter | expectedSortParameter
      ${'name_asc'}             | ${'name'}                | ${'asc'}
      ${'name_desc'}            | ${'name'}                | ${'desc'}
      ${'created_asc'}          | ${'created_at'}          | ${'asc'}
      ${'created_desc'}         | ${'created_at'}          | ${'desc'}
      ${'latest_activity_asc'}  | ${'last_activity_at'}    | ${'asc'}
      ${'latest_activity_desc'} | ${'last_activity_at'}    | ${'desc'}
      ${undefined}              | ${'name'}                | ${'asc'}
    `(
      'when the sort argument is $sortArgument',
      ({ sortArgument, expectedSortParameter, expectedOrderByParameter }) => {
        it(`calls the API with sort parameter set to ${expectedSortParameter} and order_by parameter set to ${expectedOrderByParameter}`, () => {
          Api.groupProjects.mockResolvedValueOnce({ data: projects, headers });

          service.getGroups(undefined, page, query, sortArgument);

          expect(Api.groupProjects).toHaveBeenCalledWith(groupId, query, {
            archived: true,
            include_subgroups: true,
            page,
            order_by: expectedOrderByParameter,
            sort: expectedSortParameter,
          });
        });
      },
    );
  });
});