summaryrefslogtreecommitdiff
path: root/spec/frontend_integration/test_helpers/mock_server
diff options
context:
space:
mode:
authorGitLab Bot <gitlab-bot@gitlab.com>2020-08-20 18:42:06 +0000
committerGitLab Bot <gitlab-bot@gitlab.com>2020-08-20 18:42:06 +0000
commit6e4e1050d9dba2b7b2523fdd1768823ab85feef4 (patch)
tree78be5963ec075d80116a932011d695dd33910b4e /spec/frontend_integration/test_helpers/mock_server
parent1ce776de4ae122aba3f349c02c17cebeaa8ecf07 (diff)
downloadgitlab-ce-6e4e1050d9dba2b7b2523fdd1768823ab85feef4.tar.gz
Add latest changes from gitlab-org/gitlab@13-3-stable-ee
Diffstat (limited to 'spec/frontend_integration/test_helpers/mock_server')
-rw-r--r--spec/frontend_integration/test_helpers/mock_server/graphql.js21
-rw-r--r--spec/frontend_integration/test_helpers/mock_server/index.js45
-rw-r--r--spec/frontend_integration/test_helpers/mock_server/routes/404.js7
-rw-r--r--spec/frontend_integration/test_helpers/mock_server/routes/ci.js11
-rw-r--r--spec/frontend_integration/test_helpers/mock_server/routes/graphql.js11
-rw-r--r--spec/frontend_integration/test_helpers/mock_server/routes/index.js12
-rw-r--r--spec/frontend_integration/test_helpers/mock_server/routes/projects.js23
-rw-r--r--spec/frontend_integration/test_helpers/mock_server/routes/repository.js38
-rw-r--r--spec/frontend_integration/test_helpers/mock_server/use.js5
9 files changed, 173 insertions, 0 deletions
diff --git a/spec/frontend_integration/test_helpers/mock_server/graphql.js b/spec/frontend_integration/test_helpers/mock_server/graphql.js
new file mode 100644
index 00000000000..6dcc4798378
--- /dev/null
+++ b/spec/frontend_integration/test_helpers/mock_server/graphql.js
@@ -0,0 +1,21 @@
+import { buildSchema, graphql } from 'graphql';
+import gitlabSchemaStr from '../../../../doc/api/graphql/reference/gitlab_schema.graphql';
+
+const graphqlSchema = buildSchema(gitlabSchemaStr.loc.source.body);
+const graphqlResolvers = {
+ project({ fullPath }, schema) {
+ const result = schema.projects.findBy({ path_with_namespace: fullPath });
+ const userPermission = schema.db.userPermissions[0];
+
+ return {
+ ...result.attrs,
+ userPermissions: {
+ ...userPermission,
+ },
+ };
+ },
+};
+
+// eslint-disable-next-line import/prefer-default-export
+export const graphqlQuery = (query, variables, schema) =>
+ graphql(graphqlSchema, query, graphqlResolvers, schema, variables);
diff --git a/spec/frontend_integration/test_helpers/mock_server/index.js b/spec/frontend_integration/test_helpers/mock_server/index.js
new file mode 100644
index 00000000000..b3979d05ea5
--- /dev/null
+++ b/spec/frontend_integration/test_helpers/mock_server/index.js
@@ -0,0 +1,45 @@
+import { Server, Model, RestSerializer } from 'miragejs';
+import { getProject, getBranch, getMergeRequests, getRepositoryFiles } from 'test_helpers/fixtures';
+import setupRoutes from './routes';
+
+export const createMockServerOptions = () => ({
+ models: {
+ project: Model,
+ branch: Model,
+ mergeRequest: Model,
+ file: Model,
+ userPermission: Model,
+ },
+ serializers: {
+ application: RestSerializer.extend({
+ root: false,
+ }),
+ },
+ seeds(schema) {
+ schema.db.loadData({
+ files: getRepositoryFiles().map(path => ({ path })),
+ projects: [getProject()],
+ branches: [getBranch()],
+ mergeRequests: getMergeRequests(),
+ userPermissions: [
+ {
+ createMergeRequestIn: true,
+ readMergeRequest: true,
+ pushCode: true,
+ },
+ ],
+ });
+ },
+ routes() {
+ this.namespace = '';
+ this.urlPrefix = '/';
+
+ setupRoutes(this);
+ },
+});
+
+export const createMockServer = () => {
+ const server = new Server(createMockServerOptions());
+
+ return server;
+};
diff --git a/spec/frontend_integration/test_helpers/mock_server/routes/404.js b/spec/frontend_integration/test_helpers/mock_server/routes/404.js
new file mode 100644
index 00000000000..9e08016577b
--- /dev/null
+++ b/spec/frontend_integration/test_helpers/mock_server/routes/404.js
@@ -0,0 +1,7 @@
+export default server => {
+ ['get', 'post', 'put', 'delete', 'patch'].forEach(method => {
+ server[method]('*', () => {
+ return new Response(404);
+ });
+ });
+};
diff --git a/spec/frontend_integration/test_helpers/mock_server/routes/ci.js b/spec/frontend_integration/test_helpers/mock_server/routes/ci.js
new file mode 100644
index 00000000000..83951f09c56
--- /dev/null
+++ b/spec/frontend_integration/test_helpers/mock_server/routes/ci.js
@@ -0,0 +1,11 @@
+import { getPipelinesEmptyResponse } from 'test_helpers/fixtures';
+
+export default server => {
+ server.get('*/commit/:id/pipelines', () => {
+ return getPipelinesEmptyResponse();
+ });
+
+ server.get('/api/v4/projects/:id/runners', () => {
+ return [];
+ });
+};
diff --git a/spec/frontend_integration/test_helpers/mock_server/routes/graphql.js b/spec/frontend_integration/test_helpers/mock_server/routes/graphql.js
new file mode 100644
index 00000000000..ebb5415ba97
--- /dev/null
+++ b/spec/frontend_integration/test_helpers/mock_server/routes/graphql.js
@@ -0,0 +1,11 @@
+import { graphqlQuery } from '../graphql';
+
+export default server => {
+ server.post('/api/graphql', (schema, request) => {
+ const batches = JSON.parse(request.requestBody);
+
+ return Promise.all(
+ batches.map(({ query, variables }) => graphqlQuery(query, variables, schema)),
+ );
+ });
+};
diff --git a/spec/frontend_integration/test_helpers/mock_server/routes/index.js b/spec/frontend_integration/test_helpers/mock_server/routes/index.js
new file mode 100644
index 00000000000..eea196b5158
--- /dev/null
+++ b/spec/frontend_integration/test_helpers/mock_server/routes/index.js
@@ -0,0 +1,12 @@
+/* eslint-disable global-require */
+export default server => {
+ [
+ require('./graphql'),
+ require('./projects'),
+ require('./repository'),
+ require('./ci'),
+ require('./404'),
+ ].forEach(({ default: setup }) => {
+ setup(server);
+ });
+};
diff --git a/spec/frontend_integration/test_helpers/mock_server/routes/projects.js b/spec/frontend_integration/test_helpers/mock_server/routes/projects.js
new file mode 100644
index 00000000000..f4d8ce4b23d
--- /dev/null
+++ b/spec/frontend_integration/test_helpers/mock_server/routes/projects.js
@@ -0,0 +1,23 @@
+import { withKeys } from 'test_helpers/utils/obj';
+
+export default server => {
+ server.get('/api/v4/projects/:id', (schema, request) => {
+ const { id } = request.params;
+
+ const proj =
+ schema.projects.findBy({ id }) ?? schema.projects.findBy({ path_with_namespace: id });
+
+ return proj.attrs;
+ });
+
+ server.get('/api/v4/projects/:id/merge_requests', (schema, request) => {
+ const result = schema.mergeRequests.where(
+ withKeys(request.queryParams, {
+ source_project_id: 'project_id',
+ source_branch: 'source_branch',
+ }),
+ );
+
+ return result.models;
+ });
+};
diff --git a/spec/frontend_integration/test_helpers/mock_server/routes/repository.js b/spec/frontend_integration/test_helpers/mock_server/routes/repository.js
new file mode 100644
index 00000000000..c5e91c9e87e
--- /dev/null
+++ b/spec/frontend_integration/test_helpers/mock_server/routes/repository.js
@@ -0,0 +1,38 @@
+import { createNewCommit, createCommitIdGenerator } from 'test_helpers/factories';
+
+export default server => {
+ const commitIdGenerator = createCommitIdGenerator();
+
+ server.get('/api/v4/projects/:id/repository/branches', schema => {
+ return schema.db.branches;
+ });
+
+ server.get('/api/v4/projects/:id/repository/branches/:name', (schema, request) => {
+ const { name } = request.params;
+
+ const branch = schema.branches.findBy({ name });
+
+ return branch.attrs;
+ });
+
+ server.get('*/-/files/:id', schema => {
+ return schema.db.files.map(({ path }) => path);
+ });
+
+ server.post('/api/v4/projects/:id/repository/commits', (schema, request) => {
+ const { branch: branchName, commit_message: message, actions } = JSON.parse(
+ request.requestBody,
+ );
+
+ const branch = schema.branches.findBy({ name: branchName });
+
+ const commit = {
+ ...createNewCommit({ id: commitIdGenerator.next(), message }, branch.attrs.commit),
+ __actions: actions,
+ };
+
+ branch.update({ commit });
+
+ return commit;
+ });
+};
diff --git a/spec/frontend_integration/test_helpers/mock_server/use.js b/spec/frontend_integration/test_helpers/mock_server/use.js
new file mode 100644
index 00000000000..84597d57584
--- /dev/null
+++ b/spec/frontend_integration/test_helpers/mock_server/use.js
@@ -0,0 +1,5 @@
+import { createMockServer } from './index';
+
+if (process.env.NODE_ENV === 'development') {
+ window.mockServer = createMockServer();
+}