mirror of
https://github.com/livebook-dev/livebook.git
synced 2024-11-10 17:15:09 +08:00
171 lines
4.3 KiB
Elixir
171 lines
4.3 KiB
Elixir
defmodule Livebook.Factory do
|
|
def build(:user) do
|
|
%Livebook.Users.User{
|
|
id: Livebook.Utils.random_long_id(),
|
|
name: "Jose Valim",
|
|
hex_color: Livebook.EctoTypes.HexColor.random()
|
|
}
|
|
end
|
|
|
|
def build(:team_metadata) do
|
|
:team |> build() |> Livebook.Hubs.Provider.to_metadata()
|
|
end
|
|
|
|
def build(:team) do
|
|
org = build(:org)
|
|
|
|
%Livebook.Hubs.Team{
|
|
id: "team-#{org.name}",
|
|
hub_name: org.name,
|
|
hub_emoji: "🏭",
|
|
org_id: 1,
|
|
user_id: 1,
|
|
org_key_id: 1,
|
|
org_public_key: Livebook.Hubs.Team.public_key_prefix() <> Livebook.Utils.random_long_id(),
|
|
teams_key: org.teams_key,
|
|
session_token: Livebook.Utils.random_short_id(),
|
|
offline: nil
|
|
}
|
|
end
|
|
|
|
def build(:personal_metadata) do
|
|
:personal |> build() |> Livebook.Hubs.Provider.to_metadata()
|
|
end
|
|
|
|
def build(:personal) do
|
|
%Livebook.Hubs.Personal{
|
|
id: Livebook.Hubs.Personal.id(),
|
|
hub_name: "My Hub",
|
|
hub_emoji: "🏠"
|
|
}
|
|
end
|
|
|
|
def build(:env_var) do
|
|
%Livebook.Settings.EnvVar{
|
|
name: "BAR",
|
|
value: "foo"
|
|
}
|
|
end
|
|
|
|
def build(:secret) do
|
|
%Livebook.Secrets.Secret{
|
|
name: "FOO",
|
|
value: "123",
|
|
hub_id: Livebook.Hubs.Personal.id(),
|
|
deployment_group_id: nil
|
|
}
|
|
end
|
|
|
|
def build(:deployment_group) do
|
|
%Livebook.Teams.DeploymentGroup{
|
|
name: "FOO",
|
|
mode: :offline,
|
|
agent_keys: [],
|
|
secrets: [],
|
|
app_deployments: []
|
|
}
|
|
end
|
|
|
|
def build(:org) do
|
|
%Livebook.Teams.Org{
|
|
id: nil,
|
|
emoji: "🏭",
|
|
name: "org-name-#{System.unique_integer([:positive])}",
|
|
teams_key: Livebook.Teams.Org.teams_key(),
|
|
user_code: nil
|
|
}
|
|
end
|
|
|
|
def build(:fs_s3) do
|
|
bucket_url = "https://mybucket.s3.amazonaws.com"
|
|
hash = :crypto.hash(:sha256, bucket_url)
|
|
hub_id = Livebook.Hubs.Personal.id()
|
|
|
|
%Livebook.FileSystem.S3{
|
|
id: "#{hub_id}-s3-#{Base.url_encode64(hash, padding: false)}",
|
|
bucket_url: bucket_url,
|
|
external_id: nil,
|
|
region: "us-east-1",
|
|
access_key_id: "key",
|
|
secret_access_key: "secret",
|
|
hub_id: hub_id
|
|
}
|
|
end
|
|
|
|
def build(:agent_key) do
|
|
%Livebook.Teams.AgentKey{
|
|
id: "1",
|
|
key: "lb_ak_zj9tWM1rEVeweYR7DbH_2VK5_aKtWfptcL07dBncqg",
|
|
deployment_group_id: "1"
|
|
}
|
|
end
|
|
|
|
def build(:app_deployment) do
|
|
slug = Livebook.Utils.random_short_id()
|
|
path = Plug.Upload.random_file!(slug)
|
|
local = Livebook.FileSystem.Local.new()
|
|
file = Livebook.FileSystem.File.new(local, path)
|
|
{:ok, content} = Livebook.FileSystem.File.read(file)
|
|
|
|
md5_hash = :crypto.hash(:md5, content)
|
|
shasum = Base.encode16(md5_hash, case: :lower)
|
|
|
|
%Livebook.Teams.AppDeployment{
|
|
id: "1",
|
|
title: "MyNotebook",
|
|
sha: shasum,
|
|
slug: slug,
|
|
file: file,
|
|
filename: Path.basename(file.path),
|
|
deployment_group_id: "1",
|
|
deployed_by: "Ada Lovelace",
|
|
deployed_at: NaiveDateTime.utc_now()
|
|
}
|
|
end
|
|
|
|
def build(factory_name, attrs) do
|
|
factory_name |> build() |> struct!(attrs)
|
|
end
|
|
|
|
def params_for(factory_name, attrs) do
|
|
factory_name |> build() |> struct!(attrs) |> Map.from_struct()
|
|
end
|
|
|
|
def insert_secret(attrs \\ %{}) do
|
|
secret = build(:secret, attrs)
|
|
hub = Livebook.Hubs.fetch_hub!(secret.hub_id)
|
|
:ok = Livebook.Hubs.create_secret(hub, secret)
|
|
secret
|
|
end
|
|
|
|
def insert_deployment_group(attrs \\ %{}) do
|
|
deployment_group = build(:deployment_group, attrs)
|
|
hub = Livebook.Hubs.fetch_hub!(deployment_group.hub_id)
|
|
{:ok, id} = Livebook.Teams.create_deployment_group(hub, deployment_group)
|
|
|
|
%{deployment_group | id: to_string(id)}
|
|
end
|
|
|
|
def insert_env_var(factory_name, attrs \\ %{}) do
|
|
env_var = build(factory_name, attrs)
|
|
attributes = env_var |> Map.from_struct() |> Map.to_list()
|
|
Livebook.Storage.insert(:env_vars, env_var.name, attributes)
|
|
|
|
env_var
|
|
end
|
|
|
|
# Creates an online hub with offline connection, which is safe to
|
|
# used in tests without hubs server.
|
|
def insert_fake_online_hub() do
|
|
hub = Livebook.Factory.build(:team)
|
|
|
|
# Save the hub and start the TeamClient as an offline hub
|
|
hub
|
|
|> Map.put(:offline, %Livebook.Hubs.Team.Offline{})
|
|
|> Livebook.Hubs.save_hub()
|
|
|
|
# Save the hub as an online hub (with the offline TeamClient
|
|
# already running)
|
|
Livebook.Hubs.save_hub(hub)
|
|
end
|
|
end
|