diff options
author | GitLab Bot <gitlab-bot@gitlab.com> | 2021-12-02 15:10:10 +0300 |
---|---|---|
committer | GitLab Bot <gitlab-bot@gitlab.com> | 2021-12-02 15:10:10 +0300 |
commit | 02e597943fcd131d51b63bfa20a17cf8438adde2 (patch) | |
tree | 36a196220a0866855051802f370500f34d68d9e1 /spec/frontend | |
parent | 78bc39880c4b06b2fbe682e0201722a11237a425 (diff) |
Add latest changes from gitlab-org/gitlab@master
Diffstat (limited to 'spec/frontend')
7 files changed, 1 insertions, 407 deletions
diff --git a/spec/frontend/boards/stores/actions_spec.js b/spec/frontend/boards/stores/actions_spec.js index f580469b072..08b4744ed6e 100644 --- a/spec/frontend/boards/stores/actions_spec.js +++ b/spec/frontend/boards/stores/actions_spec.js @@ -20,7 +20,7 @@ import { formatIssue, getMoveData, updateListPosition, -} from '~/boards/boards_util'; +} from 'ee_else_ce/boards/boards_util'; import { gqlClient } from '~/boards/graphql'; import destroyBoardListMutation from '~/boards/graphql/board_list_destroy.mutation.graphql'; import issueCreateMutation from '~/boards/graphql/issue_create.mutation.graphql'; diff --git a/spec/frontend/fixtures/projects.rb b/spec/frontend/fixtures/projects.rb index 23c18c97df2..3c8964d398a 100644 --- a/spec/frontend/fixtures/projects.rb +++ b/spec/frontend/fixtures/projects.rb @@ -65,31 +65,5 @@ RSpec.describe 'Projects (JavaScript fixtures)', type: :controller do expect_graphql_errors_to_be_empty end end - - context 'project storage count query' do - before do - project.statistics.update!( - repository_size: 3900000, - lfs_objects_size: 4800000, - build_artifacts_size: 400000, - pipeline_artifacts_size: 400000, - wiki_size: 300000, - packages_size: 3800000, - uploads_size: 900000 - ) - end - - base_input_path = 'projects/storage_counter/queries/' - base_output_path = 'graphql/projects/storage_counter/' - query_name = 'project_storage.query.graphql' - - it "#{base_output_path}#{query_name}.json" do - query = get_graphql_query_as_string("#{base_input_path}#{query_name}") - - post_graphql(query, current_user: user, variables: { fullPath: project.full_path }) - - expect_graphql_errors_to_be_empty - end - end end end diff --git a/spec/frontend/projects/storage_counter/components/app_spec.js b/spec/frontend/projects/storage_counter/components/app_spec.js deleted file mode 100644 index f3da01e0602..00000000000 --- a/spec/frontend/projects/storage_counter/components/app_spec.js +++ /dev/null @@ -1,150 +0,0 @@ -import { GlAlert, GlLoadingIcon } from '@gitlab/ui'; -import { shallowMount, createLocalVue } from '@vue/test-utils'; -import VueApollo from 'vue-apollo'; -import createMockApollo from 'helpers/mock_apollo_helper'; -import { extendedWrapper } from 'helpers/vue_test_utils_helper'; -import waitForPromises from 'helpers/wait_for_promises'; -import StorageCounterApp from '~/projects/storage_counter/components/app.vue'; -import { TOTAL_USAGE_DEFAULT_TEXT } from '~/projects/storage_counter/constants'; -import getProjectStorageCount from '~/projects/storage_counter/queries/project_storage.query.graphql'; -import UsageGraph from '~/vue_shared/components/storage_counter/usage_graph.vue'; -import { - mockGetProjectStorageCountGraphQLResponse, - mockEmptyResponse, - projectData, - defaultProvideValues, -} from '../mock_data'; - -const localVue = createLocalVue(); -localVue.use(VueApollo); - -describe('Storage counter app', () => { - let wrapper; - - const createMockApolloProvider = ({ reject = false, mockedValue } = {}) => { - let response; - - if (reject) { - response = jest.fn().mockRejectedValue(mockedValue || new Error('GraphQL error')); - } else { - response = jest.fn().mockResolvedValue(mockedValue); - } - - const requestHandlers = [[getProjectStorageCount, response]]; - - return createMockApollo(requestHandlers); - }; - - const createComponent = ({ provide = {}, mockApollo } = {}) => { - wrapper = extendedWrapper( - shallowMount(StorageCounterApp, { - localVue, - apolloProvider: mockApollo, - provide: { - ...defaultProvideValues, - ...provide, - }, - }), - ); - }; - - const findAlert = () => wrapper.findComponent(GlAlert); - const findLoadingIcon = () => wrapper.findComponent(GlLoadingIcon); - const findUsagePercentage = () => wrapper.findByTestId('total-usage'); - const findUsageQuotasHelpLink = () => wrapper.findByTestId('usage-quotas-help-link'); - const findUsageGraph = () => wrapper.findComponent(UsageGraph); - - afterEach(() => { - wrapper.destroy(); - }); - - describe('with apollo fetching successful', () => { - let mockApollo; - - beforeEach(async () => { - mockApollo = createMockApolloProvider({ - mockedValue: mockGetProjectStorageCountGraphQLResponse, - }); - createComponent({ mockApollo }); - await waitForPromises(); - }); - - it('renders correct total usage', () => { - expect(findUsagePercentage().text()).toBe(projectData.storage.totalUsage); - }); - - it('renders correct usage quotas help link', () => { - expect(findUsageQuotasHelpLink().attributes('href')).toBe( - defaultProvideValues.helpLinks.usageQuotasHelpPagePath, - ); - }); - }); - - describe('with apollo loading', () => { - let mockApollo; - - beforeEach(() => { - mockApollo = createMockApolloProvider({ - mockedValue: new Promise(() => {}), - }); - createComponent({ mockApollo }); - }); - - it('should show loading icon', () => { - expect(findLoadingIcon().exists()).toBe(true); - }); - }); - - describe('with apollo returning empty data', () => { - let mockApollo; - - beforeEach(async () => { - mockApollo = createMockApolloProvider({ - mockedValue: mockEmptyResponse, - }); - createComponent({ mockApollo }); - await waitForPromises(); - }); - - it('shows default text for total usage', () => { - expect(findUsagePercentage().text()).toBe(TOTAL_USAGE_DEFAULT_TEXT); - }); - }); - - describe('with apollo fetching error', () => { - let mockApollo; - - beforeEach(() => { - mockApollo = createMockApolloProvider(); - createComponent({ mockApollo, reject: true }); - }); - - it('renders gl-alert', () => { - expect(findAlert().exists()).toBe(true); - }); - }); - - describe('rendering <usage-graph />', () => { - let mockApollo; - - beforeEach(async () => { - mockApollo = createMockApolloProvider({ - mockedValue: mockGetProjectStorageCountGraphQLResponse, - }); - createComponent({ mockApollo }); - await waitForPromises(); - }); - - it('renders usage-graph component if project.statistics exists', () => { - expect(findUsageGraph().exists()).toBe(true); - }); - - it('passes project.statistics to usage-graph component', () => { - const { - __typename, - ...statistics - } = mockGetProjectStorageCountGraphQLResponse.data.project.statistics; - expect(findUsageGraph().props('rootStorageStatistics')).toMatchObject(statistics); - }); - }); -}); diff --git a/spec/frontend/projects/storage_counter/components/storage_table_spec.js b/spec/frontend/projects/storage_counter/components/storage_table_spec.js deleted file mode 100644 index c9e56d8f033..00000000000 --- a/spec/frontend/projects/storage_counter/components/storage_table_spec.js +++ /dev/null @@ -1,63 +0,0 @@ -import { GlTableLite } from '@gitlab/ui'; -import { mount } from '@vue/test-utils'; -import { extendedWrapper } from 'helpers/vue_test_utils_helper'; -import StorageTable from '~/projects/storage_counter/components/storage_table.vue'; -import { projectData, defaultProvideValues } from '../mock_data'; - -describe('StorageTable', () => { - let wrapper; - - const defaultProps = { - storageTypes: projectData.storage.storageTypes, - }; - - const createComponent = (props = {}) => { - wrapper = extendedWrapper( - mount(StorageTable, { - propsData: { - ...defaultProps, - ...props, - }, - }), - ); - }; - - const findTable = () => wrapper.findComponent(GlTableLite); - - beforeEach(() => { - createComponent(); - }); - afterEach(() => { - wrapper.destroy(); - }); - - describe('with storage types', () => { - it.each(projectData.storage.storageTypes)( - 'renders table row correctly %o', - ({ storageType: { id, name, description } }) => { - expect(wrapper.findByTestId(`${id}-name`).text()).toBe(name); - expect(wrapper.findByTestId(`${id}-description`).text()).toBe(description); - expect(wrapper.findByTestId(`${id}-icon`).props('name')).toBe(id); - expect(wrapper.findByTestId(`${id}-help-link`).attributes('href')).toBe( - defaultProvideValues.helpLinks[id.replace(`Size`, `HelpPagePath`)] - .replace(`Size`, ``) - .replace(/[A-Z]/g, (m) => `-${m.toLowerCase()}`), - ); - }, - ); - }); - - describe('without storage types', () => { - beforeEach(() => { - createComponent({ storageTypes: [] }); - }); - - it('should render the table header <th>', () => { - expect(findTable().find('th').exists()).toBe(true); - }); - - it('should not render any table data <td>', () => { - expect(findTable().find('td').exists()).toBe(false); - }); - }); -}); diff --git a/spec/frontend/projects/storage_counter/components/storage_type_icon_spec.js b/spec/frontend/projects/storage_counter/components/storage_type_icon_spec.js deleted file mode 100644 index 01efd6f14bd..00000000000 --- a/spec/frontend/projects/storage_counter/components/storage_type_icon_spec.js +++ /dev/null @@ -1,41 +0,0 @@ -import { mount } from '@vue/test-utils'; -import { GlIcon } from '@gitlab/ui'; -import StorageTypeIcon from '~/projects/storage_counter/components/storage_type_icon.vue'; - -describe('StorageTypeIcon', () => { - let wrapper; - - const createComponent = (props = {}) => { - wrapper = mount(StorageTypeIcon, { - propsData: { - ...props, - }, - }); - }; - - const findGlIcon = () => wrapper.findComponent(GlIcon); - - describe('rendering icon', () => { - afterEach(() => { - wrapper.destroy(); - }); - - it.each` - expected | provided - ${'doc-image'} | ${'lfsObjectsSize'} - ${'snippet'} | ${'snippetsSize'} - ${'infrastructure-registry'} | ${'repositorySize'} - ${'package'} | ${'packagesSize'} - ${'upload'} | ${'uploadsSize'} - ${'disk'} | ${'wikiSize'} - ${'disk'} | ${'anything-else'} - `( - 'renders icon with name of $expected when name prop is $provided', - ({ expected, provided }) => { - createComponent({ name: provided }); - - expect(findGlIcon().props('name')).toBe(expected); - }, - ); - }); -}); diff --git a/spec/frontend/projects/storage_counter/mock_data.js b/spec/frontend/projects/storage_counter/mock_data.js deleted file mode 100644 index 6b3e23ac386..00000000000 --- a/spec/frontend/projects/storage_counter/mock_data.js +++ /dev/null @@ -1,92 +0,0 @@ -import mockGetProjectStorageCountGraphQLResponse from 'test_fixtures/graphql/projects/storage_counter/project_storage.query.graphql.json'; - -export { mockGetProjectStorageCountGraphQLResponse }; - -export const mockEmptyResponse = { data: { project: null } }; - -export const defaultProvideValues = { - projectPath: '/project-path', - helpLinks: { - usageQuotasHelpPagePath: '/usage-quotas', - buildArtifactsHelpPagePath: '/build-artifacts', - lfsObjectsHelpPagePath: '/lsf-objects', - packagesHelpPagePath: '/packages', - repositoryHelpPagePath: '/repository', - snippetsHelpPagePath: '/snippets', - uploadsHelpPagePath: '/uploads', - wikiHelpPagePath: '/wiki', - }, -}; - -export const projectData = { - storage: { - totalUsage: '13.8 MiB', - storageTypes: [ - { - storageType: { - id: 'buildArtifactsSize', - name: 'Artifacts', - description: 'Pipeline artifacts and job artifacts, created with CI/CD.', - warningMessage: - 'Because of a known issue, the artifact total for some projects may be incorrect. For more details, read %{warningLinkStart}the epic%{warningLinkEnd}.', - helpPath: '/build-artifacts', - }, - value: 400000, - }, - { - storageType: { - id: 'lfsObjectsSize', - name: 'LFS storage', - description: 'Audio samples, videos, datasets, and graphics.', - helpPath: '/lsf-objects', - }, - value: 4800000, - }, - { - storageType: { - id: 'packagesSize', - name: 'Packages', - description: 'Code packages and container images.', - helpPath: '/packages', - }, - value: 3800000, - }, - { - storageType: { - id: 'repositorySize', - name: 'Repository', - description: 'Git repository.', - helpPath: '/repository', - }, - value: 3900000, - }, - { - storageType: { - id: 'snippetsSize', - name: 'Snippets', - description: 'Shared bits of code and text.', - helpPath: '/snippets', - }, - value: 0, - }, - { - storageType: { - id: 'uploadsSize', - name: 'Uploads', - description: 'File attachments and smaller design graphics.', - helpPath: '/uploads', - }, - value: 900000, - }, - { - storageType: { - id: 'wikiSize', - name: 'Wiki', - description: 'Wiki content.', - helpPath: '/wiki', - }, - value: 300000, - }, - ], - }, -}; diff --git a/spec/frontend/projects/storage_counter/utils_spec.js b/spec/frontend/projects/storage_counter/utils_spec.js deleted file mode 100644 index fb91975a3cf..00000000000 --- a/spec/frontend/projects/storage_counter/utils_spec.js +++ /dev/null @@ -1,34 +0,0 @@ -import { parseGetProjectStorageResults } from '~/projects/storage_counter/utils'; -import { - mockGetProjectStorageCountGraphQLResponse, - projectData, - defaultProvideValues, -} from './mock_data'; - -describe('parseGetProjectStorageResults', () => { - it('parses project statistics correctly', () => { - expect( - parseGetProjectStorageResults( - mockGetProjectStorageCountGraphQLResponse.data, - defaultProvideValues.helpLinks, - ), - ).toMatchObject(projectData); - }); - - it('includes storage type with size of 0 in returned value', () => { - const mockedResponse = mockGetProjectStorageCountGraphQLResponse.data; - // ensuring a specific storage type item has size of 0 - mockedResponse.project.statistics.repositorySize = 0; - - const response = parseGetProjectStorageResults(mockedResponse, defaultProvideValues.helpLinks); - - expect(response.storage.storageTypes).toEqual( - expect.arrayContaining([ - { - storageType: expect.any(Object), - value: 0, - }, - ]), - ); - }); -}); |