Skip to content
This repository has been archived by the owner on Jan 8, 2024. It is now read-only.

Commit

Permalink
Add initial set of Mirage factories
Browse files Browse the repository at this point in the history
  • Loading branch information
jgwhite committed May 25, 2021
1 parent d4a6da3 commit 71aa0ee
Show file tree
Hide file tree
Showing 8 changed files with 300 additions and 0 deletions.
12 changes: 12 additions & 0 deletions ui/mirage/factories/application.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
import { Factory, trait } from 'ember-cli-mirage';
import faker from '../faker';

export default Factory.extend({
simple: trait({
name: 'simple-application',
}),

'with-random-name': trait({
name: () => `wp-${faker.hacker.noun()}`,
}),
});
39 changes: 39 additions & 0 deletions ui/mirage/factories/build.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
import { Factory, trait, association } from 'ember-cli-mirage';
import { fakeId } from '../utils';

export default Factory.extend({
afterCreate(build, server) {
if (!build.workspace) {
let workspace =
server.schema.workspaces.findBy({ name: 'default' }) || server.create('workspace', 'default');
build.update('workspace', workspace);
}
},

random: trait({
id: () => fakeId(),
sequence: (i) => i + 1,
labels: () => ({
'common/vcs-ref': '0d56a9f8456b088dd0e4a7b689b842876fd47352',
'common/vcs-ref-path': 'https://github.com/hashicorp/waypoint/commit/',
}),
component: association('builder', 'with-random-name'),
status: association('random'),
}),

'seconds-old-success': trait({
status: association('random', 'success', 'seconds-old'),
}),

'minutes-old-success': trait({
status: association('random', 'success', 'minutes-old'),
}),

'hours-old-success': trait({
status: association('random', 'success', 'hours-old'),
}),

'days-old-success': trait({
status: association('random', 'success', 'days-old'),
}),
});
37 changes: 37 additions & 0 deletions ui/mirage/factories/component.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
import { Factory, trait } from 'ember-cli-mirage';
import { fakeComponentForKind } from '../utils';
import { Component } from 'waypoint-pb';

// eslint-disable-next-line ember/require-tagless-components
export default Factory.extend({
unknown: trait({
type: 'UNKNOWN',
}),

builder: trait({
type: 'BUILDER',
}),

registry: trait({
type: 'REGISTRY',
}),

platform: trait({
type: 'PLATFORM',
}),

'release-manager': trait({
type: 'RELEASEMANAGER',
}),

'with-random-name': trait({
afterCreate(component) {
component.update('name', randomNameForType(component.type));
},
}),
});

function randomNameForType(type): string {
let kind = Component.Type[type as keyof typeof Component.Type];
return fakeComponentForKind(kind);
}
45 changes: 45 additions & 0 deletions ui/mirage/factories/deployment.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
import { Factory, trait, association } from 'ember-cli-mirage';
import { fakeId } from '../utils';

export default Factory.extend({
afterCreate(deployment, server) {
if (!deployment.workspace) {
let workspace =
server.schema.workspaces.findBy({ name: 'default' }) || server.create('workspace', 'default');
deployment.update('workspace', workspace);
}
},

random: trait({
id: () => fakeId(),
component: association('platform', 'with-random-name'),
sequence: (i) => i + 1,
status: association('random'),
state: 'CREATED',
labels: () => ({
'common/vcs-ref': '0d56a9f8456b088dd0e4a7b689b842876fd47352',
'common/vcs-ref-path': 'https://github.com/hashicorp/waypoint/commit/',
}),

afterCreate(deployment) {
let url = `https://wildly-intent-honeybee--v${deployment.sequence}.waypoint.run`;
deployment.update('deployUrl', url);
},
}),

'seconds-old-success': trait({
status: association('random', 'success', 'seconds-old'),
}),

'minutes-old-success': trait({
status: association('random', 'success', 'minutes-old'),
}),

'hours-old-success': trait({
status: association('random', 'success', 'hours-old'),
}),

'days-old-success': trait({
status: association('random', 'success', 'days-old'),
}),
});
70 changes: 70 additions & 0 deletions ui/mirage/factories/project.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,70 @@
import { Factory, trait } from 'ember-cli-mirage';
import faker from '../faker';

export default Factory.extend({
simple: trait({
name: 'simple-project',
}),

'with-random-name': trait({
name: () => faker.hacker.noun(),
}),

// This is our primary demo trait for development mode
'marketing-public': trait({
name: 'marketing-public',
afterCreate(project, server) {
let application = server.create('application', 'with-random-name', { project });

let builds = [
server.create('build', 'random', 'seconds-old-success', { sequence: 4, application }),
server.create('build', 'random', 'minutes-old-success', { sequence: 3, application }),
server.create('build', 'random', 'hours-old-success', { sequence: 2, application }),
server.create('build', 'random', 'days-old-success', { sequence: 1, application }),
];

let deployments = [
server.create('deployment', 'random', 'seconds-old-success', {
sequence: 4,
application,
build: builds[0],
}),
server.create('deployment', 'random', 'minutes-old-success', {
sequence: 3,
application,
build: builds[1],
}),
server.create('deployment', 'random', 'hours-old-success', {
sequence: 2,
application,
build: builds[2],
}),
server.create('deployment', 'random', 'days-old-success', {
sequence: 1,
application,
build: builds[3],
}),
];

server.create('release', 'random', 'minutes-old-success', {
sequence: 3,
application,
deployment: deployments[2],
});
server.create('release', 'random', 'hours-old-success', {
sequence: 2,
application,
deployment: deployments[1],
});
server.create('release', 'random', 'days-old-success', {
sequence: 1,
application,
deployment: deployments[0],
});
},
}),

'with-remote-runners': trait({
remoteEnabled: true,
}),
});
41 changes: 41 additions & 0 deletions ui/mirage/factories/release.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
import { Factory, trait, association } from 'ember-cli-mirage';
import { fakeId, sequenceRandom } from '../utils';

export default Factory.extend({
afterCreate(release, server) {
if (!release.workspace) {
let workspace =
server.schema.workspaces.findBy({ name: 'default' }) || server.create('workspace', 'default');
release.update('workspace', workspace);
}
},

random: trait({
id: () => fakeId(),
component: association('release-manager', 'with-random-name'),
sequence: () => sequenceRandom(),
status: association('random'),
state: 'CREATED',
labels: () => ({
'common/vcs-ref': '0d56a9f8456b088dd0e4a7b689b842876fd47352',
'common/vcs-ref-path': 'https://github.com/hashicorp/waypoint/commit/',
}),
url: 'https://wildly-intent-honeybee.waypoint.run',
}),

'seconds-old-success': trait({
status: association('random', 'success', 'seconds-old'),
}),

'minutes-old-success': trait({
status: association('random', 'success', 'minutes-old'),
}),

'hours-old-success': trait({
status: association('random', 'success', 'hours-old'),
}),

'days-old-success': trait({
status: association('random', 'success', 'days-old'),
}),
});
49 changes: 49 additions & 0 deletions ui/mirage/factories/status.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
import { Factory, trait } from 'ember-cli-mirage';
import faker from '../faker';
import { Status } from 'waypoint-pb';

export default Factory.extend({
random: trait({
state: () => randomStateName(),

completeTime: () => faker.date.recent(),

afterCreate(status) {
let minutes = faker.random.number({ min: 1, max: 10 });
let startTime = new Date(status.completeTime.valueOf() - minutes * 60 * 1000);

status.update('startTime', startTime);
},
}),

success: trait({
state: 'SUCCESS',
}),

'seconds-old': trait({
completeTime: () => new Date(),
}),

'minutes-old': trait({
completeTime: () => new Date(new Date().valueOf() - faker.random.number({ min: 1, max: 15 }) * 60 * 1000),
}),

'hours-old': trait({
completeTime: () =>
new Date(new Date().valueOf() - faker.random.number({ min: 1, max: 5 }) * 60 * 60 * 1000),
}),

'days-old': trait({
completeTime: () =>
new Date(new Date().valueOf() - faker.random.number({ min: 1, max: 5 }) * 24 * 60 * 60 * 1000),
}),
});

type StateName = keyof typeof Status.State;
function randomStateName(): StateName {
return sample(Object.keys(Status.State)) as StateName;
}

function sample<T>(array: T[]): T {
return array[Math.floor(Math.random() * array.length)];
}
7 changes: 7 additions & 0 deletions ui/mirage/factories/workspace.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
import { Factory, trait } from 'ember-cli-mirage';

export default Factory.extend({
default: trait({
name: 'default',
}),
});

0 comments on commit 71aa0ee

Please sign in to comment.