This repository has been archived by the owner on Jan 8, 2024. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 327
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Use Mirage’s DB/ORM/Factory in tests and dev
- Loading branch information
Showing
11 changed files
with
158 additions
and
165 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,50 @@ | ||
import * as protobuf from 'google-protobuf'; | ||
import { Empty } from 'google-protobuf/google/protobuf/empty_pb'; | ||
|
||
/** | ||
* Encodes the given protobuf message to base64-encoded wire format. | ||
* | ||
* @param msg the protobuf message you want to encode | ||
* @returns msg in base64-encoded protobuf wire format | ||
*/ | ||
export function encode(msg: protobuf.Message): string { | ||
let resp = msg || new Empty(); | ||
let serialized = resp.serializeBinary(); | ||
let len = serialized.length; | ||
let bytesArray = [0, 0, 0, 0]; | ||
let payload = new Uint8Array(5 + len); | ||
|
||
for (let i = 3; i >= 0; i--) { | ||
bytesArray[i] = len % 256; | ||
len = len >>> 8; | ||
} | ||
|
||
payload.set(new Uint8Array(bytesArray), 1); | ||
payload.set(serialized, 5); | ||
|
||
let result = btoa(String.fromCharCode(...payload)); | ||
|
||
return result; | ||
} | ||
|
||
/** | ||
* Decodes base64-encoded wire format to the given message type. | ||
* | ||
* @param type the type of protobuf message you’re expecting to decode | ||
* @param data the base64-encoded protobuf wire format | ||
* @returns reified protobuf message | ||
*/ | ||
export function decode<T extends protobuf.Message>( | ||
type: { deserializeBinary(msg: Uint8Array): T }, | ||
data: string | ||
): T { | ||
let wireBase64 = data; | ||
let wireAscii = atob(wireBase64); | ||
let wireChars = [...wireAscii]; | ||
let msgChars = wireChars.slice(5); | ||
let msgCharCodes = msgChars.map((s) => s.charCodeAt(0)); | ||
let msgBinary = Uint8Array.from(msgCharCodes); | ||
let result = type.deserializeBinary(msgBinary); | ||
|
||
return result; | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,5 @@ | ||
import { Server } from 'ember-cli-mirage'; | ||
|
||
export default function (server: Server): void { | ||
server.create('project', 'marketing-public'); | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,21 +1,10 @@ | ||
import { Serializer, Request } from 'ember-cli-mirage'; | ||
import { Serializer } from 'ember-cli-mirage'; | ||
import * as jspb from 'google-protobuf'; | ||
import { Response } from 'miragejs'; | ||
import { encode } from '../helpers/protobufs'; | ||
|
||
export default class ApplicationSerializer extends Serializer { | ||
serialize(model: jspb.Message, request: Request): Response { | ||
let resp = model; | ||
let serialized = resp.serializeBinary(); | ||
var len = serialized.length; | ||
var bytesArray = [0, 0, 0, 0]; | ||
var payload = new Uint8Array(5 + len); | ||
for (var i = 3; i >= 0; i--) { | ||
bytesArray[i] = len % 256; | ||
len = len >>> 8; | ||
} | ||
payload.set(new Uint8Array(bytesArray), 1); | ||
payload.set(serialized, 5); | ||
|
||
return new Response(200, {}, btoa(String.fromCharCode(...payload))); | ||
serialize(msg: jspb.Message): Response { | ||
return new Response(200, {}, encode(msg)); | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,37 +1,29 @@ | ||
import { Build, ListBuildsResponse, Component, Status, Ref } from 'waypoint-pb'; | ||
import { fakeId, fakeComponentForKind, statusRandom, sequenceRandom } from '../utils'; | ||
|
||
export function createBuild(): Build { | ||
let build = new Build(); | ||
build.setId(fakeId()); | ||
|
||
build.setSequence(sequenceRandom()); | ||
|
||
// todo(pearkes): create util | ||
let workspace = new Ref.Workspace(); | ||
workspace.setWorkspace('default'); | ||
|
||
let component = new Component(); | ||
component.setType(Component.Type.BUILDER); | ||
component.setName(fakeComponentForKind(Component.Type.BUILDER)); | ||
|
||
build.setComponent(component); | ||
build.setStatus(statusRandom()); | ||
build.setWorkspace(workspace); | ||
|
||
build.getLabelsMap().set('common/vcs-ref', '0d56a9f8456b088dd0e4a7b689b842876fd47352'); | ||
build.getLabelsMap().set('common/vcs-ref-path', 'https://github.com/hashicorp/waypoint/commit/'); | ||
import { ListBuildsRequest, ListBuildsResponse, GetBuildRequest } from 'waypoint-pb'; | ||
import { Request, Response } from 'miragejs'; | ||
import { decode } from '../helpers/protobufs'; | ||
|
||
export function list(schema: any, { requestBody }: Request): Response { | ||
let requestMsg = decode(ListBuildsRequest, requestBody); | ||
let projectName = requestMsg.getApplication().getProject(); | ||
let appName = requestMsg.getApplication().getApplication(); | ||
let workspaceName = requestMsg.getWorkspace().getWorkspace(); | ||
let project = schema.projects.findBy({ name: projectName }); | ||
let application = schema.applications.findBy({ name: appName, projectId: project.id }); | ||
let workspace = schema.workspaces.findBy({ name: workspaceName }); | ||
let builds = schema.builds.where({ applicationId: application?.id, workspaceId: workspace?.id }); | ||
let buildProtobufs = builds.models.map((b) => b.toProtobuf()); | ||
let resp = new ListBuildsResponse(); | ||
|
||
return build; | ||
} | ||
resp.setBuildsList(buildProtobufs); | ||
|
||
export function list(schema: any, { params, requestHeaders }) { | ||
let resp = new ListBuildsResponse(); | ||
let builds = new Array(createBuild(), createBuild(), createBuild(), createBuild()); | ||
resp.setBuildsList(builds); | ||
return this.serialize(resp, 'application'); | ||
} | ||
|
||
export function get(schema: any, { params, requestHeaders }) { | ||
return this.serialize(createBuild(), 'application'); | ||
export function get(schema: any, { requestBody }: Request): Response { | ||
let requestMsg = decode(GetBuildRequest, requestBody); | ||
let id = requestMsg.getRef().getId(); | ||
let model = schema.builds.find(id); | ||
let build = model?.toProtobuf(); | ||
|
||
return this.serialize(build, 'application'); | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,45 +1,29 @@ | ||
import { Component, Ref, Deployment, ListDeploymentsResponse } from 'waypoint-pb'; | ||
import { fakeId, fakeComponentForKind, statusRandom, sequenceRandom } from '../utils'; | ||
import { createBuild } from './build'; | ||
|
||
export function createDeployment(): Deployment { | ||
let deploy = new Deployment(); | ||
deploy.setId(fakeId()); | ||
|
||
// todo(pearkes): create util | ||
let workspace = new Ref.Workspace(); | ||
workspace.setWorkspace('default'); | ||
|
||
let component = new Component(); | ||
component.setType(Component.Type.PLATFORM); | ||
component.setName(fakeComponentForKind(Component.Type.PLATFORM)); | ||
|
||
deploy.setSequence(sequenceRandom()); | ||
deploy.setStatus(statusRandom()); | ||
deploy.setComponent(component); | ||
deploy.setWorkspace(workspace); | ||
|
||
const preload = new Deployment.Preload(); | ||
preload.setBuild(createBuild()); | ||
preload.setDeployUrl(`https://wildly-intent-honeybee--${deploy.getSequence()}.alpha.waypoint.run`); | ||
|
||
deploy.setPreload(preload); | ||
deploy.setState(3); | ||
|
||
deploy.getLabelsMap().set('common/vcs-ref', '0d56a9f8456b088dd0e4a7b689b842876fd47352'); | ||
deploy.getLabelsMap().set('common/vcs-ref-path', 'https://github.com/hashicorp/waypoint/commit/'); | ||
import { GetDeploymentRequest, ListDeploymentsRequest, ListDeploymentsResponse } from 'waypoint-pb'; | ||
import { Request, Response } from 'ember-cli-mirage'; | ||
import { decode } from '../helpers/protobufs'; | ||
|
||
export function list(schema: any, { requestBody }: Request): Response { | ||
let requestMsg = decode(ListDeploymentsRequest, requestBody); | ||
let projectName = requestMsg.getApplication().getProject(); | ||
let appName = requestMsg.getApplication().getApplication(); | ||
let workspaceName = requestMsg.getWorkspace().getWorkspace(); | ||
let project = schema.projects.findBy({ name: projectName }); | ||
let application = schema.applications.findBy({ name: appName, projectId: project?.id }); | ||
let workspace = schema.workspaces.findBy({ name: workspaceName }); | ||
let deployments = schema.deployments.where({ applicationId: application?.id, workspaceId: workspace?.id }); | ||
let deploymentProtobufs = deployments.models.map((d) => d.toProtobuf()); | ||
let resp = new ListDeploymentsResponse(); | ||
|
||
return deploy; | ||
} | ||
resp.setDeploymentsList(deploymentProtobufs); | ||
|
||
export function list(schema: any, { params, requestHeaders }) { | ||
let resp = new ListDeploymentsResponse(); | ||
let deploys = new Array(createDeployment(), createDeployment(), createDeployment()); | ||
resp.setDeploymentsList(deploys); | ||
return this.serialize(resp, 'application'); | ||
} | ||
|
||
export function get(schema: any, { params, requestHeaders }) { | ||
let deploy = createDeployment(); | ||
return this.serialize(deploy, 'application'); | ||
export function get(schema: any, { requestBody }: Request): Response { | ||
let requestMsg = decode(GetDeploymentRequest, requestBody); | ||
let id = requestMsg.getRef().getId(); | ||
let model = schema.deployments.find(id); | ||
let protobuf = model?.toProtobuf(); | ||
|
||
return this.serialize(protobuf, 'application'); | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,50 +1,25 @@ | ||
import { Build, Ref, ListProjectsResponse, GetProjectResponse, Project, Application } from 'waypoint-pb'; | ||
import { fakeId } from '../utils'; | ||
import faker from '../faker'; | ||
import { dasherize } from '@ember/string'; | ||
import { create } from 'domainx'; | ||
import { ListProjectsResponse, GetProjectResponse } from 'waypoint-pb'; | ||
import { decode } from '../helpers/protobufs'; | ||
import { GetProjectRequest } from 'waypoint-pb'; | ||
import { Request, Response } from 'miragejs'; | ||
|
||
const projectName = 'marketing-public'; | ||
|
||
function createProjectRef(): Ref.Project { | ||
let build = new Build(); | ||
build.setId(fakeId()); | ||
|
||
// todo(pearkes): create util | ||
let workspace = new Ref.Workspace(); | ||
workspace.setWorkspace('default'); | ||
|
||
let project = new Ref.Project(); | ||
project.setProject(projectName); | ||
|
||
return project; | ||
} | ||
|
||
function createApp(): Application { | ||
let app = new Application(); | ||
app.setName(`wp-${faker.hacker.noun()}`); | ||
|
||
return app; | ||
} | ||
|
||
function createProject(): Project { | ||
let proj = new Project(); | ||
proj.setName(projectName); | ||
proj.setApplicationsList([createApp()]); | ||
export function list(schema: any): Response { | ||
let resp = new ListProjectsResponse(); | ||
let projectRefs = schema.projects.all().models.map((p) => p.toProtobufRef()); | ||
|
||
return proj; | ||
} | ||
resp.setProjectsList(projectRefs); | ||
|
||
export function list(schema: any, { params, requestHeaders }) { | ||
let resp = new ListProjectsResponse(); | ||
let projs = new Array(createProjectRef()); | ||
resp.setProjectsList(projs); | ||
return this.serialize(resp, 'application'); | ||
} | ||
|
||
export function get(schema: any, { params, requestHeaders }) { | ||
export function get(schema: any, { requestBody }: Request): Response { | ||
let requestMsg = decode(GetProjectRequest, requestBody); | ||
let name = requestMsg.getProject().getProject(); | ||
let model = schema.projects.findBy({ name }); | ||
let resp = new GetProjectResponse(); | ||
let proj = createProject(); | ||
resp.setProject(proj); | ||
let project = model?.toProtobuf(); | ||
|
||
resp.setProject(project); | ||
|
||
return this.serialize(resp, 'application'); | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,43 +1,29 @@ | ||
import { Component, Ref, Release, ListReleasesResponse } from 'waypoint-pb'; | ||
import { fakeId, fakeComponentForKind, statusRandom, sequenceRandom } from '../utils'; | ||
import { createDeployment } from './deployment'; | ||
|
||
function createRelease(): Release { | ||
let release = new Release(); | ||
release.setId(fakeId()); | ||
|
||
// todo(pearkes): create util | ||
let workspace = new Ref.Workspace(); | ||
workspace.setWorkspace('default'); | ||
|
||
let component = new Component(); | ||
component.setType(Component.Type.RELEASEMANAGER); | ||
component.setName(fakeComponentForKind(Component.Type.RELEASEMANAGER)); | ||
|
||
release.setSequence(sequenceRandom()); | ||
release.setStatus(statusRandom()); | ||
release.setComponent(component); | ||
release.setWorkspace(workspace); | ||
release.setDeploymentId(createDeployment().getId()); | ||
|
||
release.setUrl(`https://wildly-intent-honeybee--${release.getId().toLowerCase()}.alpha.waypoint.run`); | ||
|
||
release.setState(3); | ||
|
||
release.getLabelsMap().set('common/vcs-ref', '0d56a9f8456b088dd0e4a7b689b842876fd47352'); | ||
release.getLabelsMap().set('common/vcs-ref-path', 'https://github.com/hashicorp/waypoint/commit/'); | ||
import { ListReleasesRequest, ListReleasesResponse, GetReleaseRequest } from 'waypoint-pb'; | ||
import { Request, Response } from 'ember-cli-mirage'; | ||
import { decode } from '../helpers/protobufs'; | ||
|
||
export function list(schema: any, { requestBody }: Request): Response { | ||
let requestMsg = decode(ListReleasesRequest, requestBody); | ||
let projectName = requestMsg.getApplication().getProject(); | ||
let appName = requestMsg.getApplication().getApplication(); | ||
let workspaceName = requestMsg.getWorkspace().getWorkspace(); | ||
let project = schema.projects.findBy({ name: projectName }); | ||
let application = schema.applications.findBy({ name: appName, projectId: project?.id }); | ||
let workspace = schema.workspaces.findBy({ name: workspaceName }); | ||
let releases = schema.releases.where({ applicationId: application?.id, workspaceId: workspace?.id }); | ||
let releaseProtobufs = releases.models.map((d) => d.toProtobuf()); | ||
let resp = new ListReleasesResponse(); | ||
|
||
return release; | ||
} | ||
resp.setReleasesList(releaseProtobufs); | ||
|
||
export function list(schema: any, { params, requestHeaders }) { | ||
let resp = new ListReleasesResponse(); | ||
let releases = new Array(createRelease(), createRelease(), createRelease()); | ||
resp.setReleasesList(releases); | ||
return this.serialize(resp, 'application'); | ||
} | ||
|
||
export function get(schema: any, { params, requestHeaders }) { | ||
let deploy = createRelease(); | ||
return this.serialize(deploy, 'application'); | ||
export function get(schema: any, { requestBody }: Request) { | ||
let requestMsg = decode(GetReleaseRequest, requestBody); | ||
let id = requestMsg.getRef().getId(); | ||
let model = schema.releases.find(id); | ||
let protobuf = model?.toProtobuf(); | ||
|
||
return this.serialize(protobuf, 'application'); | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters