diff --git a/ee/app/assets/javascripts/analytics/repository_analytics/components/stories_constants.js b/ee/app/assets/javascripts/analytics/repository_analytics/components/stories_constants.js new file mode 100644 index 0000000000000000000000000000000000000000..002408614cc3dcb14f07688e37f53ca6e56a82df --- /dev/null +++ b/ee/app/assets/javascripts/analytics/repository_analytics/components/stories_constants.js @@ -0,0 +1,132 @@ +/* eslint-disable @gitlab/require-i18n-strings */ +export const projectsTestCoverageResponse = { + data: { + group: { + id: 101, + projects: { + nodes: [ + { + fullPath: 'fake-group/tui', + id: 'gid://fake-domain/Project/1234', + name: 'tui', + repository: { + rootRef: 'main', + __typename: 'Repository', + }, + codeCoverageSummary: { + averageCoverage: 45.4, + coverageCount: 2, + lastUpdatedOn: '2020-09-24', + __typename: 'CodeCoverageSummary', + }, + __typename: 'Project', + }, + { + fullPath: 'fake-group/cli', + id: 'gid://fake-domain/Project/5678', + name: 'cli', + repository: { + rootRef: 'master', + __typename: 'Repository', + }, + codeCoverageSummary: { + averageCoverage: 64.3, + coverageCount: 1, + lastUpdatedOn: '2020-08-19', + __typename: 'CodeCoverageSummary', + }, + __typename: 'Project', + }, + ], + }, + }, + }, +}; + +export const projectsTestCoverageNoDataResponse = { + data: { + group: { + id: 101, + projects: { nodes: [] }, + }, + }, +}; + +export const groupTestCoverageResponse = { + data: { + group: { + id: 10, + codeCoverageActivities: { + nodes: [ + { + projectCount: 4, + averageCoverage: 59.49, + coverageCount: 6, + date: '2020-05-25', + __typename: 'CodeCoverageActivity', + }, + { + projectCount: 3, + averageCoverage: 55.65, + coverageCount: 5, + date: '2020-05-26', + __typename: 'CodeCoverageActivity', + }, + { + projectCount: 5, + averageCoverage: 63.48, + coverageCount: 10, + date: '2020-05-27', + __typename: 'CodeCoverageActivity', + }, + { + projectCount: 6, + averageCoverage: 75.49, + coverageCount: 8, + date: '2020-05-28', + __typename: 'CodeCoverageActivity', + }, + { + projectCount: 6, + averageCoverage: 55.45, + coverageCount: 8, + date: '2020-05-29', + __typename: 'CodeCoverageActivity', + }, + { + projectCount: 1, + averageCoverage: 35.63, + coverageCount: 5, + date: '2020-05-30', + __typename: 'CodeCoverageActivity', + }, + { + projectCount: 3, + averageCoverage: 61.45, + coverageCount: 5, + date: '2020-05-31', + __typename: 'CodeCoverageActivity', + }, + { + projectCount: 3, + averageCoverage: 61.45, + coverageCount: 5, + date: '2020-06-01', + __typename: 'CodeCoverageActivity', + }, + { + projectCount: 4, + averageCoverage: 79.46, + coverageCount: 6, + date: '2020-06-02', + __typename: 'CodeCoverageActivity', + }, + ], + }, + }, + }, +}; + +export const groupTestCoverageNoDataResponse = { + data: { group: { id: 10, codeCoverageActivities: { nodes: [] } } }, +}; diff --git a/ee/app/assets/javascripts/analytics/repository_analytics/components/test_coverage_summary.stories.js b/ee/app/assets/javascripts/analytics/repository_analytics/components/test_coverage_summary.stories.js new file mode 100644 index 0000000000000000000000000000000000000000..74a73545edb21e87492b34f62424e7c74f234e0f --- /dev/null +++ b/ee/app/assets/javascripts/analytics/repository_analytics/components/test_coverage_summary.stories.js @@ -0,0 +1,44 @@ +import Vue from 'vue'; +import VueApollo from 'vue-apollo'; +import createMockApollo from 'helpers/mock_apollo_helper'; +import getGroupTestCoverage from '../graphql/queries/get_group_test_coverage.query.graphql'; +import TestCoverageSummary from './test_coverage_summary.vue'; +import { groupTestCoverageResponse, groupTestCoverageNoDataResponse } from './stories_constants'; + +Vue.use(VueApollo); + +export default { + component: TestCoverageSummary, + title: 'ee/analytics/repository_analytics/components/test_coverage_summary', +}; + +const createStory = ({ mockApollo, response = groupTestCoverageResponse } = {}) => { + const defaultApolloProvider = createMockApollo([ + [getGroupTestCoverage, () => Promise.resolve(response)], + ]); + + return (args, { argTypes }) => ({ + components: { TestCoverageSummary }, + apolloProvider: mockApollo || defaultApolloProvider, + provide: { + groupFullPath: 'path/to/group', + groupName: 'Group Awesome', + }, + props: Object.keys(argTypes), + template: '', + }); +}; + +export const Default = { + render: createStory(), +}; + +export const Loading = { + render: createStory({ + mockApollo: createMockApollo([[getGroupTestCoverage, () => new Promise(() => {})]]), + }), +}; + +export const NoData = { + render: createStory({ response: groupTestCoverageNoDataResponse }), +}; diff --git a/ee/app/assets/javascripts/analytics/repository_analytics/components/test_coverage_table.stories.js b/ee/app/assets/javascripts/analytics/repository_analytics/components/test_coverage_table.stories.js new file mode 100644 index 0000000000000000000000000000000000000000..b892b201e78a2b6682542bb513a3f02a5957f127 --- /dev/null +++ b/ee/app/assets/javascripts/analytics/repository_analytics/components/test_coverage_table.stories.js @@ -0,0 +1,47 @@ +import Vue from 'vue'; +import VueApollo from 'vue-apollo'; +import createMockApollo from 'helpers/mock_apollo_helper'; +import getProjectsTestCoverage from '../graphql/queries/get_projects_test_coverage.query.graphql'; +import TestCoverageTable from './test_coverage_table.vue'; +import { + projectsTestCoverageResponse, + projectsTestCoverageNoDataResponse, +} from './stories_constants'; + +Vue.use(VueApollo); + +export default { + component: TestCoverageTable, + title: 'ee/analytics/repository_analytics/components/test_coverage_table', +}; + +const createStory = ({ mockApollo, response = projectsTestCoverageResponse } = {}) => { + const defaultApolloProvider = createMockApollo([ + [getProjectsTestCoverage, () => Promise.resolve(response)], + ]); + + return (args, { argTypes }) => ({ + components: { TestCoverageTable }, + apolloProvider: mockApollo || defaultApolloProvider, + provide: { + groupFullPath: 'path/to/group', + groupName: 'Group Awesome', + }, + props: Object.keys(argTypes), + template: '', + }); +}; + +export const Default = { + render: createStory(), +}; + +export const Loading = { + render: createStory({ + mockApollo: createMockApollo([[getProjectsTestCoverage, () => new Promise(() => {})]]), + }), +}; + +export const NoData = { + render: createStory({ response: projectsTestCoverageNoDataResponse }), +};