coder/site/src/testHelpers/entities.ts

1680 lines
46 KiB
TypeScript

import { withDefaultFeatures } from "./../api/api"
import { FieldError } from "api/errors"
import { everyOneGroup } from "utils/groups"
import * as Types from "../api/types"
import * as TypesGen from "../api/typesGenerated"
import range from "lodash/range"
import { Permissions } from "xServices/auth/authXService"
import { TemplateVersionFiles } from "utils/templateVersion"
import { FileTree } from "utils/filetree"
export const MockOrganization: TypesGen.Organization = {
id: "fc0774ce-cc9e-48d4-80ae-88f7a4d4a8b0",
name: "Test Organization",
created_at: "",
updated_at: "",
}
export const MockTemplateDAUResponse: TypesGen.TemplateDAUsResponse = {
entries: [
{ date: "2022-08-27T00:00:00Z", amount: 1 },
{ date: "2022-08-29T00:00:00Z", amount: 2 },
{ date: "2022-08-30T00:00:00Z", amount: 1 },
],
}
export const MockDeploymentDAUResponse: TypesGen.DeploymentDAUsResponse = {
entries: [
{ date: "2022-08-27T00:00:00Z", amount: 1 },
{ date: "2022-08-29T00:00:00Z", amount: 2 },
{ date: "2022-08-30T00:00:00Z", amount: 1 },
],
}
export const MockSessionToken: TypesGen.LoginWithPasswordResponse = {
session_token: "my-session-token",
}
export const MockAPIKey: TypesGen.GenerateAPIKeyResponse = {
key: "my-api-key",
}
export const MockToken: TypesGen.APIKeyWithOwner = {
id: "tBoVE3dqLl",
user_id: "f9ee61d8-1d84-4410-ab6e-c1ec1a641e0b",
last_used: "0001-01-01T00:00:00Z",
expires_at: "2023-01-15T20:10:45.637438Z",
created_at: "2022-12-16T20:10:45.637452Z",
updated_at: "2022-12-16T20:10:45.637452Z",
login_type: "token",
scope: "all",
lifetime_seconds: 2592000,
token_name: "token-one",
username: "admin",
}
export const MockTokens: TypesGen.APIKeyWithOwner[] = [
MockToken,
{
id: "tBoVE3dqLl",
user_id: "f9ee61d8-1d84-4410-ab6e-c1ec1a641e0b",
last_used: "0001-01-01T00:00:00Z",
expires_at: "2023-01-15T20:10:45.637438Z",
created_at: "2022-12-16T20:10:45.637452Z",
updated_at: "2022-12-16T20:10:45.637452Z",
login_type: "token",
scope: "all",
lifetime_seconds: 2592000,
token_name: "token-two",
username: "admin",
},
]
export const MockPrimaryWorkspaceProxy: TypesGen.Region = {
id: "4aa23000-526a-481f-a007-0f20b98b1e12",
name: "primary",
display_name: "Default",
icon_url: "/emojis/1f60e.png",
healthy: true,
path_app_url: "https://coder.com",
wildcard_hostname: "*.coder.com",
}
export const MockHealthyWildWorkspaceProxy: TypesGen.Region = {
id: "5e2c1ab7-479b-41a9-92ce-aa85625de52c",
name: "haswildcard",
display_name: "Subdomain Supported",
icon_url: "/emojis/1f319.png",
healthy: true,
path_app_url: "https://external.com",
wildcard_hostname: "*.external.com",
}
export const MockUnhealthyWildWorkspaceProxy: TypesGen.Region = {
id: "8444931c-0247-4171-842a-569d9f9cbadb",
name: "unhealthy",
display_name: "Unhealthy",
icon_url: "/emojis/1f92e.png",
healthy: false,
path_app_url: "https://unhealthy.coder.com",
wildcard_hostname: "*unhealthy..coder.com",
}
export const MockWorkspaceProxies: TypesGen.Region[] = [
MockPrimaryWorkspaceProxy,
MockHealthyWildWorkspaceProxy,
MockUnhealthyWildWorkspaceProxy,
{
id: "26e84c16-db24-4636-a62d-aa1a4232b858",
name: "nowildcard",
display_name: "No wildcard",
icon_url: "/emojis/1f920.png",
healthy: true,
path_app_url: "https://cowboy.coder.com",
wildcard_hostname: "",
},
]
export const MockBuildInfo: TypesGen.BuildInfoResponse = {
external_url: "file:///mock-url",
version: "v99.999.9999+c9cdf14",
dashboard_url: "https:///mock-url",
workspace_proxy: false,
}
export const MockSupportLinks: TypesGen.LinkConfig[] = [
{
name: "First link",
target: "http://first-link",
icon: "chat",
},
{
name: "Second link",
target: "http://second-link",
icon: "docs",
},
{
name: "Third link",
target:
"https://github.com/coder/coder/issues/new?labels=needs+grooming&body={CODER_BUILD_INFO}",
icon: "",
},
]
export const MockUpdateCheck: TypesGen.UpdateCheckResponse = {
current: true,
url: "file:///mock-url",
version: "v99.999.9999+c9cdf14",
}
export const MockOwnerRole: TypesGen.Role = {
name: "owner",
display_name: "Owner",
}
export const MockUserAdminRole: TypesGen.Role = {
name: "user_admin",
display_name: "User Admin",
}
export const MockTemplateAdminRole: TypesGen.Role = {
name: "template_admin",
display_name: "Template Admin",
}
export const MockMemberRole: TypesGen.Role = {
name: "member",
display_name: "Member",
}
export const MockAuditorRole: TypesGen.Role = {
name: "auditor",
display_name: "Auditor",
}
// assignableRole takes a role and a boolean. The boolean implies if the
// actor can assign (add/remove) the role from other users.
export function assignableRole(
role: TypesGen.Role,
assignable: boolean,
): TypesGen.AssignableRoles {
return {
...role,
assignable: assignable,
}
}
export const MockSiteRoles = [MockUserAdminRole, MockAuditorRole]
export const MockAssignableSiteRoles = [
assignableRole(MockUserAdminRole, true),
assignableRole(MockAuditorRole, true),
]
export const MockMemberPermissions = {
viewAuditLog: false,
}
export const MockUser: TypesGen.User = {
id: "test-user",
username: "TestUser",
email: "test@coder.com",
created_at: "",
status: "active",
organization_ids: [MockOrganization.id],
roles: [MockOwnerRole],
avatar_url: "https://avatars.githubusercontent.com/u/95932066?s=200&v=4",
last_seen_at: "",
}
export const MockUserAdmin: TypesGen.User = {
id: "test-user",
username: "TestUser",
email: "test@coder.com",
created_at: "",
status: "active",
organization_ids: [MockOrganization.id],
roles: [MockUserAdminRole],
avatar_url: "",
last_seen_at: "",
}
export const MockUser2: TypesGen.User = {
id: "test-user-2",
username: "TestUser2",
email: "test2@coder.com",
created_at: "",
status: "active",
organization_ids: [MockOrganization.id],
roles: [],
avatar_url: "",
last_seen_at: "2022-09-14T19:12:21Z",
}
export const SuspendedMockUser: TypesGen.User = {
id: "suspended-mock-user",
username: "SuspendedMockUser",
email: "iamsuspendedsad!@coder.com",
created_at: "",
status: "suspended",
organization_ids: [MockOrganization.id],
roles: [],
avatar_url: "",
last_seen_at: "",
}
export const MockProvisioner: TypesGen.ProvisionerDaemon = {
created_at: "",
id: "test-provisioner",
name: "Test Provisioner",
provisioners: ["echo"],
tags: {},
}
export const MockProvisionerJob: TypesGen.ProvisionerJob = {
created_at: "",
id: "test-provisioner-job",
status: "succeeded",
file_id: MockOrganization.id,
completed_at: "2022-05-17T17:39:01.382927298Z",
tags: {},
}
export const MockFailedProvisionerJob: TypesGen.ProvisionerJob = {
...MockProvisionerJob,
status: "failed",
}
export const MockCancelingProvisionerJob: TypesGen.ProvisionerJob = {
...MockProvisionerJob,
status: "canceling",
}
export const MockCanceledProvisionerJob: TypesGen.ProvisionerJob = {
...MockProvisionerJob,
status: "canceled",
}
export const MockRunningProvisionerJob: TypesGen.ProvisionerJob = {
...MockProvisionerJob,
status: "running",
}
export const MockPendingProvisionerJob: TypesGen.ProvisionerJob = {
...MockProvisionerJob,
status: "pending",
}
export const MockTemplateVersion: TypesGen.TemplateVersion = {
id: "test-template-version",
created_at: "2022-05-17T17:39:01.382927298Z",
updated_at: "2022-05-17T17:39:01.382927298Z",
template_id: "test-template",
job: MockProvisionerJob,
name: "test-version",
readme: `---
name:Template test
---
## Instructions
You can add instructions here
[Some link info](https://coder.com)`,
created_by: MockUser,
}
export const MockTemplateVersion2: TypesGen.TemplateVersion = {
id: "test-template-version-2",
created_at: "2022-05-17T17:39:01.382927298Z",
updated_at: "2022-05-17T17:39:01.382927298Z",
template_id: "test-template",
job: MockProvisionerJob,
name: "test-version-2",
readme: `---
name:Template test 2
---
## Instructions
You can add instructions here
[Some link info](https://coder.com)`,
created_by: MockUser,
}
export const MockTemplate: TypesGen.Template = {
id: "test-template",
created_at: "2022-05-17T17:39:01.382927298Z",
updated_at: "2022-05-18T17:39:01.382927298Z",
organization_id: MockOrganization.id,
name: "test-template",
display_name: "Test Template",
provisioner: MockProvisioner.provisioners[0],
active_version_id: MockTemplateVersion.id,
active_user_count: 1,
build_time_stats: {
start: {
P50: 1000,
P95: 1500,
},
stop: {
P50: 1000,
P95: 1500,
},
delete: {
P50: 1000,
P95: 1500,
},
},
description: "This is a test description.",
default_ttl_ms: 24 * 60 * 60 * 1000,
max_ttl_ms: 2 * 24 * 60 * 60 * 1000,
created_by_id: "test-creator-id",
created_by_name: "test_creator",
icon: "/icon/code.svg",
allow_user_cancel_workspace_jobs: true,
failure_ttl_ms: 0,
inactivity_ttl_ms: 0,
allow_user_autostart: false,
allow_user_autostop: false,
}
export const MockTemplateVersionFiles: TemplateVersionFiles = {
"README.md": "# Example\n\nThis is an example template.",
"main.tf": `// Provides info about the workspace.
data "coder_workspace" "me" {}
// Provides the startup script used to download
// the agent and communicate with Coder.
resource "coder_agent" "dev" {
os = "linux"
arch = "amd64"
}
resource "kubernetes_pod" "main" {
// Ensures that the Pod dies when the workspace shuts down!
count = data.coder_workspace.me.start_count
metadata {
name = "dev-\${data.coder_workspace.me.id}"
}
spec {
container {
image = "ubuntu"
command = ["sh", "-c", coder_agent.main.init_script]
env {
name = "CODER_AGENT_TOKEN"
value = coder_agent.main.token
}
}
}
}
`,
}
export const MockTemplateVersionFileTree: FileTree = {
"README.md": "# Example\n\nThis is an example template.",
"main.tf": `// Provides info about the workspace.
data "coder_workspace" "me" {}
// Provides the startup script used to download
// the agent and communicate with Coder.
resource "coder_agent" "dev" {
os = "linux"
arch = "amd64"
}
resource "kubernetes_pod" "main" {
// Ensures that the Pod dies when the workspace shuts down!
count = data.coder_workspace.me.start_count
metadata {
name = "dev-\${data.coder_workspace.me.id}"
}
spec {
container {
image = "ubuntu"
command = ["sh", "-c", coder_agent.main.init_script]
env {
name = "CODER_AGENT_TOKEN"
value = coder_agent.main.token
}
}
}
}
`,
images: {
"java.Dockerfile": "FROM eclipse-temurin:17-jdk-jammy",
"python.Dockerfile": "FROM python:3.8-slim-buster",
},
}
export const MockWorkspaceApp: TypesGen.WorkspaceApp = {
id: "test-app",
slug: "test-app",
display_name: "Test App",
icon: "",
subdomain: false,
health: "disabled",
external: false,
url: "",
sharing_level: "owner",
healthcheck: {
url: "",
interval: 0,
threshold: 0,
},
}
export const MockWorkspaceAgent: TypesGen.WorkspaceAgent = {
apps: [MockWorkspaceApp],
architecture: "amd64",
created_at: "",
environment_variables: {},
id: "test-workspace-agent",
name: "a-workspace-agent",
operating_system: "linux",
resource_id: "",
status: "connected",
updated_at: "",
version: MockBuildInfo.version,
latency: {
"Coder Embedded DERP": {
latency_ms: 32.55,
preferred: true,
},
},
connection_timeout_seconds: 120,
troubleshooting_url: "https://coder.com/troubleshoot",
lifecycle_state: "starting",
login_before_ready: false,
startup_logs_length: 0,
startup_logs_overflowed: false,
startup_script_timeout_seconds: 120,
shutdown_script_timeout_seconds: 120,
}
export const MockWorkspaceAgentDisconnected: TypesGen.WorkspaceAgent = {
...MockWorkspaceAgent,
id: "test-workspace-agent-2",
name: "another-workspace-agent",
status: "disconnected",
version: "",
latency: {},
lifecycle_state: "ready",
}
export const MockWorkspaceAgentOutdated: TypesGen.WorkspaceAgent = {
...MockWorkspaceAgent,
id: "test-workspace-agent-3",
name: "an-outdated-workspace-agent",
version: "v99.999.9998+abcdef",
operating_system: "Windows",
latency: {
...MockWorkspaceAgent.latency,
Chicago: {
preferred: false,
latency_ms: 95.11,
},
"San Francisco": {
preferred: false,
latency_ms: 111.55,
},
Paris: {
preferred: false,
latency_ms: 221.66,
},
},
lifecycle_state: "ready",
}
export const MockWorkspaceAgentConnecting: TypesGen.WorkspaceAgent = {
...MockWorkspaceAgent,
id: "test-workspace-agent-connecting",
name: "another-workspace-agent",
status: "connecting",
version: "",
latency: {},
lifecycle_state: "created",
}
export const MockWorkspaceAgentTimeout: TypesGen.WorkspaceAgent = {
...MockWorkspaceAgent,
id: "test-workspace-agent-timeout",
name: "a-timed-out-workspace-agent",
status: "timeout",
version: "",
latency: {},
lifecycle_state: "created",
}
export const MockWorkspaceAgentStarting: TypesGen.WorkspaceAgent = {
...MockWorkspaceAgent,
id: "test-workspace-agent-starting",
name: "a-starting-workspace-agent",
lifecycle_state: "starting",
}
export const MockWorkspaceAgentReady: TypesGen.WorkspaceAgent = {
...MockWorkspaceAgent,
id: "test-workspace-agent-ready",
name: "a-ready-workspace-agent",
lifecycle_state: "ready",
}
export const MockWorkspaceAgentStartTimeout: TypesGen.WorkspaceAgent = {
...MockWorkspaceAgent,
id: "test-workspace-agent-start-timeout",
name: "a-workspace-agent-timed-out-while-running-startup-script",
lifecycle_state: "start_timeout",
}
export const MockWorkspaceAgentStartError: TypesGen.WorkspaceAgent = {
...MockWorkspaceAgent,
id: "test-workspace-agent-start-error",
name: "a-workspace-agent-errored-while-running-startup-script",
lifecycle_state: "start_error",
}
export const MockWorkspaceAgentShuttingDown: TypesGen.WorkspaceAgent = {
...MockWorkspaceAgent,
id: "test-workspace-agent-shutting-down",
name: "a-shutting-down-workspace-agent",
lifecycle_state: "shutting_down",
}
export const MockWorkspaceAgentShutdownTimeout: TypesGen.WorkspaceAgent = {
...MockWorkspaceAgent,
id: "test-workspace-agent-shutdown-timeout",
name: "a-workspace-agent-timed-out-while-running-shutdownup-script",
lifecycle_state: "shutdown_timeout",
}
export const MockWorkspaceAgentShutdownError: TypesGen.WorkspaceAgent = {
...MockWorkspaceAgent,
id: "test-workspace-agent-shutdown-error",
name: "a-workspace-agent-errored-while-running-shutdownup-script",
lifecycle_state: "shutdown_error",
}
export const MockWorkspaceAgentOff: TypesGen.WorkspaceAgent = {
...MockWorkspaceAgent,
id: "test-workspace-agent-off",
name: "a-workspace-agent-is-shut-down",
lifecycle_state: "off",
}
export const MockWorkspaceResource: TypesGen.WorkspaceResource = {
agents: [
MockWorkspaceAgent,
MockWorkspaceAgentConnecting,
MockWorkspaceAgentOutdated,
],
created_at: "",
id: "test-workspace-resource",
job_id: "",
name: "a-workspace-resource",
type: "google_compute_disk",
workspace_transition: "start",
hide: false,
icon: "",
metadata: [{ key: "api_key", value: "12345678", sensitive: true }],
daily_cost: 10,
}
export const MockWorkspaceResource2: TypesGen.WorkspaceResource = {
agents: [
MockWorkspaceAgent,
MockWorkspaceAgentDisconnected,
MockWorkspaceAgentOutdated,
],
created_at: "",
id: "test-workspace-resource-2",
job_id: "",
name: "another-workspace-resource",
type: "google_compute_disk",
workspace_transition: "start",
hide: false,
icon: "",
metadata: [{ key: "size", value: "32GB", sensitive: false }],
daily_cost: 10,
}
export const MockWorkspaceResource3: TypesGen.WorkspaceResource = {
agents: [
MockWorkspaceAgent,
MockWorkspaceAgentDisconnected,
MockWorkspaceAgentOutdated,
],
created_at: "",
id: "test-workspace-resource-3",
job_id: "",
name: "another-workspace-resource",
type: "google_compute_disk",
workspace_transition: "start",
hide: true,
icon: "",
metadata: [{ key: "size", value: "32GB", sensitive: false }],
daily_cost: 20,
}
export const MockWorkspaceAutostartDisabled: TypesGen.UpdateWorkspaceAutostartRequest =
{
schedule: "",
}
export const MockWorkspaceAutostartEnabled: TypesGen.UpdateWorkspaceAutostartRequest =
{
// Runs at 9:30am Monday through Friday using Canada/Eastern
// (America/Toronto) time
schedule: "CRON_TZ=Canada/Eastern 30 9 * * 1-5",
}
export const MockWorkspaceBuild: TypesGen.WorkspaceBuild = {
build_number: 1,
created_at: "2022-05-17T17:39:01.382927298Z",
id: "1",
initiator_id: MockUser.id,
initiator_name: MockUser.username,
job: MockProvisionerJob,
template_version_id: MockTemplateVersion.id,
template_version_name: MockTemplateVersion.name,
transition: "start",
updated_at: "2022-05-17T17:39:01.382927298Z",
workspace_name: "test-workspace",
workspace_owner_id: MockUser.id,
workspace_owner_name: MockUser.username,
workspace_id: "759f1d46-3174-453d-aa60-980a9c1442f3",
deadline: "2022-05-17T23:39:00.00Z",
reason: "initiator",
resources: [MockWorkspaceResource],
status: "running",
daily_cost: 20,
}
export const MockFailedWorkspaceBuild = (
transition: TypesGen.WorkspaceTransition = "start",
): TypesGen.WorkspaceBuild => ({
build_number: 1,
created_at: "2022-05-17T17:39:01.382927298Z",
id: "1",
initiator_id: MockUser.id,
initiator_name: MockUser.username,
job: MockFailedProvisionerJob,
template_version_id: MockTemplateVersion.id,
template_version_name: MockTemplateVersion.name,
transition: transition,
updated_at: "2022-05-17T17:39:01.382927298Z",
workspace_name: "test-workspace",
workspace_owner_id: MockUser.id,
workspace_owner_name: MockUser.username,
workspace_id: "759f1d46-3174-453d-aa60-980a9c1442f3",
deadline: "2022-05-17T23:39:00.00Z",
reason: "initiator",
resources: [],
status: "running",
daily_cost: 20,
})
export const MockWorkspaceBuildStop: TypesGen.WorkspaceBuild = {
...MockWorkspaceBuild,
id: "2",
transition: "stop",
}
export const MockWorkspaceBuildDelete: TypesGen.WorkspaceBuild = {
...MockWorkspaceBuild,
id: "3",
transition: "delete",
}
export const MockBuilds = [
MockWorkspaceBuild,
MockWorkspaceBuildStop,
MockWorkspaceBuildDelete,
]
export const MockWorkspace: TypesGen.Workspace = {
id: "test-workspace",
name: "Test-Workspace",
created_at: "",
updated_at: "",
template_id: MockTemplate.id,
template_name: MockTemplate.name,
template_icon: MockTemplate.icon,
template_display_name: MockTemplate.display_name,
template_allow_user_cancel_workspace_jobs:
MockTemplate.allow_user_cancel_workspace_jobs,
outdated: false,
owner_id: MockUser.id,
organization_id: MockOrganization.id,
owner_name: MockUser.username,
autostart_schedule: MockWorkspaceAutostartEnabled.schedule,
ttl_ms: 2 * 60 * 60 * 1000,
latest_build: MockWorkspaceBuild,
last_used_at: "2022-05-16T15:29:10.302441433Z",
deleting_at: "0001-01-01T00:00:00Z",
}
export const MockStoppedWorkspace: TypesGen.Workspace = {
...MockWorkspace,
id: "test-stopped-workspace",
latest_build: { ...MockWorkspaceBuildStop, status: "stopped" },
}
export const MockStoppingWorkspace: TypesGen.Workspace = {
...MockWorkspace,
id: "test-stopping-workspace",
latest_build: {
...MockWorkspaceBuildStop,
job: MockRunningProvisionerJob,
status: "stopping",
},
}
export const MockStartingWorkspace: TypesGen.Workspace = {
...MockWorkspace,
id: "test-starting-workspace",
latest_build: {
...MockWorkspaceBuild,
job: MockRunningProvisionerJob,
transition: "start",
status: "starting",
},
}
export const MockCancelingWorkspace: TypesGen.Workspace = {
...MockWorkspace,
id: "test-canceling-workspace",
latest_build: {
...MockWorkspaceBuild,
job: MockCancelingProvisionerJob,
status: "canceling",
},
}
export const MockCanceledWorkspace: TypesGen.Workspace = {
...MockWorkspace,
id: "test-canceled-workspace",
latest_build: {
...MockWorkspaceBuild,
job: MockCanceledProvisionerJob,
status: "canceled",
},
}
export const MockFailedWorkspace: TypesGen.Workspace = {
...MockWorkspace,
id: "test-failed-workspace",
latest_build: {
...MockWorkspaceBuild,
job: MockFailedProvisionerJob,
status: "failed",
},
}
export const MockDeletingWorkspace: TypesGen.Workspace = {
...MockWorkspace,
id: "test-deleting-workspace",
latest_build: {
...MockWorkspaceBuildDelete,
job: MockRunningProvisionerJob,
status: "deleting",
},
}
export const MockDeletedWorkspace: TypesGen.Workspace = {
...MockWorkspace,
id: "test-deleted-workspace",
latest_build: { ...MockWorkspaceBuildDelete, status: "deleted" },
}
export const MockOutdatedWorkspace: TypesGen.Workspace = {
...MockFailedWorkspace,
id: "test-outdated-workspace",
outdated: true,
}
export const MockPendingWorkspace: TypesGen.Workspace = {
...MockWorkspace,
id: "test-pending-workspace",
latest_build: {
...MockWorkspaceBuild,
job: MockPendingProvisionerJob,
transition: "start",
status: "pending",
},
}
// just over one page of workspaces
export const MockWorkspacesResponse: TypesGen.WorkspacesResponse = {
workspaces: range(1, 27).map((id: number) => ({
...MockWorkspace,
id: id.toString(),
name: `${MockWorkspace.name}${id}`,
})),
count: 26,
}
export const MockTemplateVersionParameter1: TypesGen.TemplateVersionParameter =
{
name: "first_parameter",
type: "string",
description: "This is first parameter",
description_plaintext: "Markdown: This is first parameter",
default_value: "abc",
mutable: true,
icon: "/icon/folder.svg",
options: [],
required: true,
}
export const MockTemplateVersionParameter2: TypesGen.TemplateVersionParameter =
{
name: "second_parameter",
type: "number",
description: "This is second parameter",
description_plaintext: "Markdown: This is second parameter",
default_value: "2",
mutable: true,
icon: "/icon/folder.svg",
options: [],
validation_min: 1,
validation_max: 3,
validation_monotonic: "increasing",
required: true,
}
export const MockTemplateVersionParameter3: TypesGen.TemplateVersionParameter =
{
name: "third_parameter",
type: "string",
description: "This is third parameter",
description_plaintext: "Markdown: This is third parameter",
default_value: "aaa",
mutable: true,
icon: "/icon/database.svg",
options: [],
validation_error: "No way!",
validation_regex: "^[a-z]{3}$",
required: true,
}
export const MockTemplateVersionParameter4: TypesGen.TemplateVersionParameter =
{
name: "fourth_parameter",
type: "string",
description: "This is fourth parameter",
description_plaintext: "Markdown: This is fourth parameter",
default_value: "def",
mutable: false,
icon: "/icon/database.svg",
options: [],
required: true,
}
export const MockTemplateVersionParameter5: TypesGen.TemplateVersionParameter =
{
name: "fifth_parameter",
type: "number",
description: "This is fifth parameter",
description_plaintext: "Markdown: This is fifth parameter",
default_value: "5",
mutable: true,
icon: "/icon/folder.svg",
options: [],
validation_min: 1,
validation_max: 10,
validation_monotonic: "decreasing",
required: true,
}
export const MockTemplateVersionVariable1: TypesGen.TemplateVersionVariable = {
name: "first_variable",
description: "This is first variable.",
type: "string",
value: "",
default_value: "abc",
required: false,
sensitive: false,
}
export const MockTemplateVersionVariable2: TypesGen.TemplateVersionVariable = {
name: "second_variable",
description: "This is second variable.",
type: "number",
value: "5",
default_value: "3",
required: false,
sensitive: false,
}
export const MockTemplateVersionVariable3: TypesGen.TemplateVersionVariable = {
name: "third_variable",
description: "This is third variable.",
type: "bool",
value: "",
default_value: "false",
required: false,
sensitive: false,
}
export const MockTemplateVersionVariable4: TypesGen.TemplateVersionVariable = {
name: "fourth_variable",
description: "This is fourth variable.",
type: "string",
value: "defghijk",
default_value: "",
required: true,
sensitive: true,
}
export const MockTemplateVersionVariable5: TypesGen.TemplateVersionVariable = {
name: "fifth_variable",
description: "This is fifth variable.",
type: "string",
value: "",
default_value: "",
required: true,
sensitive: false,
}
// requests the MockWorkspace
export const MockWorkspaceRequest: TypesGen.CreateWorkspaceRequest = {
name: "test",
parameter_values: [],
template_id: "test-template",
rich_parameter_values: [
{
name: MockTemplateVersionParameter1.name,
value: MockTemplateVersionParameter1.default_value,
},
],
}
export const MockUserAgent: Types.UserAgent = {
browser: "Chrome 99.0.4844",
device: "Other",
ip_address: "11.22.33.44",
os: "Windows 10",
}
export const MockAuthMethods: TypesGen.AuthMethods = {
password: { enabled: true },
github: { enabled: false },
oidc: { enabled: false, signInText: "", iconUrl: "" },
}
export const MockGitSSHKey: TypesGen.GitSSHKey = {
user_id: "1fa0200f-7331-4524-a364-35770666caa7",
created_at: "2022-05-16T14:30:34.148205897Z",
updated_at: "2022-05-16T15:29:10.302441433Z",
public_key:
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIFJOQRIM7kE30rOzrfy+/+R+nQGCk7S9pioihy+2ARbq",
}
export const MockWorkspaceBuildLogs: TypesGen.ProvisionerJobLog[] = [
{
id: 1,
created_at: "2022-05-19T16:45:31.005Z",
log_source: "provisioner_daemon",
log_level: "info",
stage: "Setting up",
output: "",
},
{
id: 2,
created_at: "2022-05-19T16:45:31.006Z",
log_source: "provisioner_daemon",
log_level: "info",
stage: "Starting workspace",
output: "",
},
{
id: 3,
created_at: "2022-05-19T16:45:31.072Z",
log_source: "provisioner",
log_level: "debug",
stage: "Starting workspace",
output: "",
},
{
id: 4,
created_at: "2022-05-19T16:45:31.073Z",
log_source: "provisioner",
log_level: "debug",
stage: "Starting workspace",
output: "Initializing the backend...",
},
{
id: 5,
created_at: "2022-05-19T16:45:31.077Z",
log_source: "provisioner",
log_level: "debug",
stage: "Starting workspace",
output: "",
},
{
id: 6,
created_at: "2022-05-19T16:45:31.078Z",
log_source: "provisioner",
log_level: "debug",
stage: "Starting workspace",
output: "Initializing provider plugins...",
},
{
id: 7,
created_at: "2022-05-19T16:45:31.078Z",
log_source: "provisioner",
log_level: "debug",
stage: "Starting workspace",
output: '- Finding hashicorp/google versions matching "~\u003e 4.15"...',
},
{
id: 8,
created_at: "2022-05-19T16:45:31.123Z",
log_source: "provisioner",
log_level: "debug",
stage: "Starting workspace",
output: '- Finding coder/coder versions matching "0.3.4"...',
},
{
id: 9,
created_at: "2022-05-19T16:45:31.137Z",
log_source: "provisioner",
log_level: "debug",
stage: "Starting workspace",
output: "- Using hashicorp/google v4.21.0 from the shared cache directory",
},
{
id: 10,
created_at: "2022-05-19T16:45:31.344Z",
log_source: "provisioner",
log_level: "debug",
stage: "Starting workspace",
output: "- Using coder/coder v0.3.4 from the shared cache directory",
},
{
id: 11,
created_at: "2022-05-19T16:45:31.388Z",
log_source: "provisioner",
log_level: "debug",
stage: "Starting workspace",
output: "",
},
{
id: 12,
created_at: "2022-05-19T16:45:31.388Z",
log_source: "provisioner",
log_level: "debug",
stage: "Starting workspace",
output:
"Terraform has created a lock file .terraform.lock.hcl to record the provider",
},
{
id: 13,
created_at: "2022-05-19T16:45:31.389Z",
log_source: "provisioner",
log_level: "debug",
stage: "Starting workspace",
output:
"selections it made above. Include this file in your version control repository",
},
{
id: 14,
created_at: "2022-05-19T16:45:31.389Z",
log_source: "provisioner",
log_level: "debug",
stage: "Starting workspace",
output:
"so that Terraform can guarantee to make the same selections by default when",
},
{
id: 15,
created_at: "2022-05-19T16:45:31.39Z",
log_source: "provisioner",
log_level: "debug",
stage: "Starting workspace",
output: 'you run "terraform init" in the future.',
},
{
id: 16,
created_at: "2022-05-19T16:45:31.39Z",
log_source: "provisioner",
log_level: "debug",
stage: "Starting workspace",
output: "",
},
{
id: 17,
created_at: "2022-05-19T16:45:31.391Z",
log_source: "provisioner",
log_level: "debug",
stage: "Starting workspace",
output: "Terraform has been successfully initialized!",
},
{
id: 18,
created_at: "2022-05-19T16:45:31.42Z",
log_source: "provisioner",
log_level: "info",
stage: "Starting workspace",
output: "Terraform 1.1.9",
},
{
id: 19,
created_at: "2022-05-19T16:45:33.537Z",
log_source: "provisioner",
log_level: "info",
stage: "Starting workspace",
output: "coder_agent.dev: Plan to create",
},
{
id: 20,
created_at: "2022-05-19T16:45:33.537Z",
log_source: "provisioner",
log_level: "info",
stage: "Starting workspace",
output: "google_compute_disk.root: Plan to create",
},
{
id: 21,
created_at: "2022-05-19T16:45:33.538Z",
log_source: "provisioner",
log_level: "info",
stage: "Starting workspace",
output: "google_compute_instance.dev[0]: Plan to create",
},
{
id: 22,
created_at: "2022-05-19T16:45:33.539Z",
log_source: "provisioner",
log_level: "info",
stage: "Starting workspace",
output: "Plan: 3 to add, 0 to change, 0 to destroy.",
},
{
id: 23,
created_at: "2022-05-19T16:45:33.712Z",
log_source: "provisioner",
log_level: "info",
stage: "Starting workspace",
output: "coder_agent.dev: Creating...",
},
{
id: 24,
created_at: "2022-05-19T16:45:33.719Z",
log_source: "provisioner",
log_level: "info",
stage: "Starting workspace",
output:
"coder_agent.dev: Creation complete after 0s [id=d07f5bdc-4a8d-4919-9cdb-0ac6ba9e64d6]",
},
{
id: 25,
created_at: "2022-05-19T16:45:34.139Z",
log_source: "provisioner",
log_level: "info",
stage: "Starting workspace",
output: "google_compute_disk.root: Creating...",
},
{
id: 26,
created_at: "2022-05-19T16:45:44.14Z",
log_source: "provisioner",
log_level: "info",
stage: "Starting workspace",
output: "google_compute_disk.root: Still creating... [10s elapsed]",
},
{
id: 27,
created_at: "2022-05-19T16:45:47.106Z",
log_source: "provisioner",
log_level: "info",
stage: "Starting workspace",
output:
"google_compute_disk.root: Creation complete after 13s [id=projects/bruno-coder-v2/zones/europe-west4-b/disks/coder-developer-bruno-dev-123-root]",
},
{
id: 28,
created_at: "2022-05-19T16:45:47.118Z",
log_source: "provisioner",
log_level: "info",
stage: "Starting workspace",
output: "google_compute_instance.dev[0]: Creating...",
},
{
id: 29,
created_at: "2022-05-19T16:45:57.122Z",
log_source: "provisioner",
log_level: "info",
stage: "Starting workspace",
output: "google_compute_instance.dev[0]: Still creating... [10s elapsed]",
},
{
id: 30,
created_at: "2022-05-19T16:46:00.837Z",
log_source: "provisioner",
log_level: "info",
stage: "Starting workspace",
output:
"google_compute_instance.dev[0]: Creation complete after 14s [id=projects/bruno-coder-v2/zones/europe-west4-b/instances/coder-developer-bruno-dev-123]",
},
{
id: 31,
created_at: "2022-05-19T16:46:00.846Z",
log_source: "provisioner",
log_level: "info",
stage: "Starting workspace",
output: "Apply complete! Resources: 3 added, 0 changed, 0 destroyed.",
},
{
id: 32,
created_at: "2022-05-19T16:46:00.847Z",
log_source: "provisioner",
log_level: "info",
stage: "Starting workspace",
output: "Outputs: 0",
},
{
id: 33,
created_at: "2022-05-19T16:46:02.283Z",
log_source: "provisioner_daemon",
log_level: "info",
stage: "Cleaning Up",
output: "",
},
]
export const MockCancellationMessage = {
message: "Job successfully canceled",
}
type MockAPIInput = {
message?: string
detail?: string
validations?: FieldError[]
}
type MockAPIOutput = {
isAxiosError: true
response: {
data: {
message: string
detail: string | undefined
validations: FieldError[] | undefined
}
}
}
export const mockApiError = ({
message,
detail,
validations,
}: MockAPIInput): MockAPIOutput => ({
// This is how axios can check if it is an axios error when calling isAxiosError
isAxiosError: true,
response: {
data: {
message: message ?? "Something went wrong.",
detail: detail ?? undefined,
validations: validations ?? undefined,
},
},
})
export const MockEntitlements: TypesGen.Entitlements = {
errors: [],
warnings: [],
has_license: false,
features: withDefaultFeatures({}),
require_telemetry: false,
trial: false,
}
export const MockEntitlementsWithWarnings: TypesGen.Entitlements = {
errors: [],
warnings: ["You are over your active user limit.", "And another thing."],
has_license: true,
trial: false,
require_telemetry: false,
features: withDefaultFeatures({
user_limit: {
enabled: true,
entitlement: "grace_period",
limit: 100,
actual: 102,
},
audit_log: {
enabled: true,
entitlement: "entitled",
},
browser_only: {
enabled: true,
entitlement: "entitled",
},
}),
}
export const MockEntitlementsWithAuditLog: TypesGen.Entitlements = {
errors: [],
warnings: [],
has_license: true,
require_telemetry: false,
trial: false,
features: withDefaultFeatures({
audit_log: {
enabled: true,
entitlement: "entitled",
},
}),
}
export const MockEntitlementsWithScheduling: TypesGen.Entitlements = {
errors: [],
warnings: [],
has_license: true,
require_telemetry: false,
trial: false,
features: withDefaultFeatures({
advanced_template_scheduling: {
enabled: true,
entitlement: "entitled",
},
}),
}
export const MockExperiments: TypesGen.Experiment[] = ["workspace_actions"]
export const MockAuditLog: TypesGen.AuditLog = {
id: "fbd2116a-8961-4954-87ae-e4575bd29ce0",
request_id: "53bded77-7b9d-4e82-8771-991a34d759f9",
time: "2022-05-19T16:45:57.122Z",
organization_id: MockOrganization.id,
ip: "127.0.0.1",
user_agent:
'"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/104.0.0.0 Safari/537.36"',
resource_type: "workspace",
resource_id: "ef8d1cf4-82de-4fd9-8980-047dad6d06b5",
resource_target: "bruno-dev",
resource_icon: "",
action: "create",
diff: {
ttl: {
old: 0,
new: 3600000000000,
secret: false,
},
},
status_code: 200,
additional_fields: {},
description: "{user} created workspace {target}",
user: MockUser,
resource_link: "/@admin/bruno-dev",
is_deleted: false,
}
export const MockAuditLog2: TypesGen.AuditLog = {
...MockAuditLog,
id: "53bded77-7b9d-4e82-8771-991a34d759f9",
action: "write",
time: "2022-05-20T16:45:57.122Z",
description: "{user} updated workspace {target}",
diff: {
workspace_name: {
old: "old-workspace-name",
new: MockWorkspace.name,
secret: false,
},
workspace_auto_off: {
old: true,
new: false,
secret: false,
},
template_version_id: {
old: "fbd2116a-8961-4954-87ae-e4575bd29ce0",
new: "53bded77-7b9d-4e82-8771-991a34d759f9",
secret: false,
},
roles: {
old: null,
new: ["admin", "auditor"],
secret: false,
},
},
}
export const MockWorkspaceCreateAuditLogForDifferentOwner = {
...MockAuditLog,
additional_fields: {
workspace_owner: "Member",
},
}
export const MockAuditLogWithWorkspaceBuild: TypesGen.AuditLog = {
...MockAuditLog,
id: "f90995bf-4a2b-4089-b597-e66e025e523e",
request_id: "61555889-2875-475c-8494-f7693dd5d75b",
action: "stop",
resource_type: "workspace_build",
description: "{user} stopped build for workspace {target}",
additional_fields: {
workspace_name: "test2",
},
}
export const MockAuditLogWithDeletedResource: TypesGen.AuditLog = {
...MockAuditLog,
is_deleted: true,
}
export const MockAuditLogGitSSH: TypesGen.AuditLog = {
...MockAuditLog,
diff: {
private_key: {
old: "",
new: "",
secret: true,
},
public_key: {
old: "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAINRUPjBSNtOAnL22+r07OSu9t3Lnm8/5OX8bRHECKS9g\n",
new: "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIEwoUPJPMekuSzMZyV0rA82TGGNzw/Uj/dhLbwiczTpV\n",
secret: false,
},
},
}
export const MockAuditLogSuccessfulLogin: TypesGen.AuditLog = {
...MockAuditLog,
resource_type: "api_key",
resource_target: "",
action: "login",
status_code: 201,
description: "{user} logged in",
}
export const MockAuditLogUnsuccessfulLoginKnownUser: TypesGen.AuditLog = {
...MockAuditLogSuccessfulLogin,
status_code: 401,
}
export const MockWorkspaceQuota: TypesGen.WorkspaceQuota = {
credits_consumed: 0,
budget: 100,
}
export const MockGroup: TypesGen.Group = {
id: "fbd2116a-8961-4954-87ae-e4575bd29ce0",
name: "Front-End",
avatar_url: "https://example.com",
organization_id: MockOrganization.id,
members: [MockUser, MockUser2],
quota_allowance: 5,
}
export const MockTemplateACL: TypesGen.TemplateACL = {
group: [
{ ...everyOneGroup(MockOrganization.id), role: "use" },
{ ...MockGroup, role: "admin" },
],
users: [{ ...MockUser, role: "use" }],
}
export const MockTemplateACLEmpty: TypesGen.TemplateACL = {
group: [],
users: [],
}
export const MockTemplateExample: TypesGen.TemplateExample = {
id: "aws-windows",
url: "https://github.com/coder/coder/tree/main/examples/templates/aws-windows",
name: "Develop in an ECS-hosted container",
description: "Get started with Linux development on AWS ECS.",
markdown:
"\n# aws-ecs\n\nThis is a sample template for running a Coder workspace on ECS. It assumes there\nis a pre-existing ECS cluster with EC2-based compute to host the workspace.\n\n## Architecture\n\nThis workspace is built using the following AWS resources:\n\n- Task definition - the container definition, includes the image, command, volume(s)\n- ECS service - manages the task definition\n\n## code-server\n\n`code-server` is installed via the `startup_script` argument in the `coder_agent`\nresource block. The `coder_app` resource is defined to access `code-server` through\nthe dashboard UI over `localhost:13337`.\n",
icon: "/icon/aws.png",
tags: ["aws", "cloud"],
}
export const MockTemplateExample2: TypesGen.TemplateExample = {
id: "aws-linux",
url: "https://github.com/coder/coder/tree/main/examples/templates/aws-linux",
name: "Develop in Linux on AWS EC2",
description: "Get started with Linux development on AWS EC2.",
markdown:
'\n# aws-linux\n\nTo get started, run `coder templates init`. When prompted, select this template.\nFollow the on-screen instructions to proceed.\n\n## Authentication\n\nThis template assumes that coderd is run in an environment that is authenticated\nwith AWS. For example, run `aws configure import` to import credentials on the\nsystem and user running coderd. For other ways to authenticate [consult the\nTerraform docs](https://registry.terraform.io/providers/hashicorp/aws/latest/docs#authentication-and-configuration).\n\n## Required permissions / policy\n\nThe following sample policy allows Coder to create EC2 instances and modify\ninstances provisioned by Coder:\n\n```json\n{\n "Version": "2012-10-17",\n "Statement": [\n {\n "Sid": "VisualEditor0",\n "Effect": "Allow",\n "Action": [\n "ec2:GetDefaultCreditSpecification",\n "ec2:DescribeIamInstanceProfileAssociations",\n "ec2:DescribeTags",\n "ec2:CreateTags",\n "ec2:RunInstances",\n "ec2:DescribeInstanceCreditSpecifications",\n "ec2:DescribeImages",\n "ec2:ModifyDefaultCreditSpecification",\n "ec2:DescribeVolumes"\n ],\n "Resource": "*"\n },\n {\n "Sid": "CoderResources",\n "Effect": "Allow",\n "Action": [\n "ec2:DescribeInstances",\n "ec2:DescribeInstanceAttribute",\n "ec2:UnmonitorInstances",\n "ec2:TerminateInstances",\n "ec2:StartInstances",\n "ec2:StopInstances",\n "ec2:DeleteTags",\n "ec2:MonitorInstances",\n "ec2:CreateTags",\n "ec2:RunInstances",\n "ec2:ModifyInstanceAttribute",\n "ec2:ModifyInstanceCreditSpecification"\n ],\n "Resource": "arn:aws:ec2:*:*:instance/*",\n "Condition": {\n "StringEquals": {\n "aws:ResourceTag/Coder_Provisioned": "true"\n }\n }\n }\n ]\n}\n```\n\n## code-server\n\n`code-server` is installed via the `startup_script` argument in the `coder_agent`\nresource block. The `coder_app` resource is defined to access `code-server` through\nthe dashboard UI over `localhost:13337`.\n',
icon: "/icon/aws.png",
tags: ["aws", "cloud"],
}
export const MockPermissions: Permissions = {
createGroup: true,
createTemplates: true,
createUser: true,
deleteTemplates: true,
readAllUsers: true,
updateUsers: true,
viewAuditLog: true,
viewDeploymentValues: true,
viewUpdateCheck: true,
viewDeploymentStats: true,
}
export const MockAppearance: TypesGen.AppearanceConfig = {
logo_url: "",
service_banner: {
enabled: false,
},
}
export const MockWorkspaceBuildParameter1: TypesGen.WorkspaceBuildParameter = {
name: MockTemplateVersionParameter1.name,
value: "mock-abc",
}
export const MockWorkspaceBuildParameter2: TypesGen.WorkspaceBuildParameter = {
name: MockTemplateVersionParameter2.name,
value: "3",
}
export const MockWorkspaceBuildParameter3: TypesGen.WorkspaceBuildParameter = {
name: MockTemplateVersionParameter3.name,
value: "my-database",
}
export const MockWorkspaceBuildParameter5: TypesGen.WorkspaceBuildParameter = {
name: MockTemplateVersionParameter5.name,
value: "5",
}
export const MockParameterSchema: TypesGen.ParameterSchema = {
id: "000000",
job_id: "000000",
allow_override_destination: false,
allow_override_source: true,
created_at: "",
default_destination_scheme: "none",
default_refresh: "",
default_source_scheme: "data",
default_source_value: "default-value",
name: "parameter name",
description: "Some description!",
redisplay_value: false,
validation_condition: "",
validation_contains: [],
validation_error: "",
validation_type_system: "",
validation_value_type: "",
}
export const mockParameterSchema = (
partial: Partial<TypesGen.ParameterSchema>,
): TypesGen.ParameterSchema => {
return {
...MockParameterSchema,
...partial,
}
}
export const MockParameterSchemas: TypesGen.ParameterSchema[] = [
mockParameterSchema({
name: "region",
default_source_value: "🏈 US Central",
description: "Where would you like your workspace to live?",
redisplay_value: true,
validation_contains: [
"🏈 US Central",
"⚽ Brazil East",
"💶 EU West",
"🦘 Australia South",
],
}),
mockParameterSchema({
name: "instance_size",
default_source_value: "Big",
description: "How large should you instance be?",
validation_contains: ["Small", "Medium", "Big"],
redisplay_value: true,
}),
mockParameterSchema({
name: "instance_size",
default_source_value: "Big",
description: "How large should your instance be?",
validation_contains: ["Small", "Medium", "Big"],
redisplay_value: true,
}),
mockParameterSchema({
name: "disable_docker",
description: "Disable Docker?",
validation_value_type: "bool",
default_source_value: "false",
redisplay_value: true,
}),
]
export const MockTemplateVersionGitAuth: TypesGen.TemplateVersionGitAuth = {
id: "github",
type: "github",
authenticate_url: "https://example.com/gitauth/github",
authenticated: false,
}
export const MockDeploymentStats: TypesGen.DeploymentStats = {
aggregated_from: "2023-03-06T19:08:55.211625Z",
collected_at: "2023-03-06T19:12:55.211625Z",
next_update_at: "2023-03-06T19:20:55.211625Z",
session_count: {
vscode: 128,
jetbrains: 5,
ssh: 32,
reconnecting_pty: 15,
},
workspaces: {
building: 15,
failed: 12,
pending: 5,
running: 32,
stopped: 16,
connection_latency_ms: {
P50: 32.56,
P95: 15.23,
},
rx_bytes: 15613513253,
tx_bytes: 36113513253,
},
}
export const MockDeploymentSSH: TypesGen.SSHConfigResponse = {
hostname_prefix: " coder.",
ssh_config_options: {},
}
export const MockStartupLogs: TypesGen.WorkspaceAgentStartupLog[] = [
{
id: 166663,
created_at: "2023-05-04T11:30:41.402072Z",
output: "+ curl -fsSL https://code-server.dev/install.sh",
level: "info",
},
{
id: 166664,
created_at: "2023-05-04T11:30:41.40228Z",
output:
"+ sh -s -- --method=standalone --prefix=/tmp/code-server --version 4.8.3",
level: "info",
},
{
id: 166665,
created_at: "2023-05-04T11:30:42.590731Z",
output: "Ubuntu 22.04.2 LTS",
level: "info",
},
{
id: 166666,
created_at: "2023-05-04T11:30:42.593686Z",
output: "Installing v4.8.3 of the amd64 release from GitHub.",
level: "info",
},
]