Skip to main content
Glama
signup.rs3.94 kB
//! This module contains [`WorkspaceSignup`], which is created during //! [`macro expansion`](crate::expand_helpers) and used for tests that need the [`Workspace`], //! [`User`] and/or [`KeyPair`]. use dal::{ ChangeSet, DalContext, KeyPair, UserPk, Workspace, WorkspacePk, builtins::func::migrate_intrinsics_no_commit, workspace_integrations::WorkspaceIntegration, workspace_snapshot::{ selector::WorkspaceSnapshotSelectorDiscriminants, split_snapshot::SplitSnapshot, }, }; use serde::{ Deserialize, Serialize, }; use si_db::{ HistoryActor, HistoryEvent, Tenancy, User, }; /// A wrapper for creating [`Workspaces`](Workspace) for integration tests. #[derive(Deserialize, Serialize, Debug, Clone, PartialEq, Eq)] pub struct WorkspaceSignup { /// The key pair created after creating the workspace. pub key_pair: KeyPair, /// The user created after creating the workspace. pub user: User, /// The created workspace. pub workspace: Workspace, } impl WorkspaceSignup { #[allow(unused)] async fn new_split_graph_workspace( ctx: &mut DalContext, pk: WorkspacePk, name: impl AsRef<str>, token: impl AsRef<str>, split_max: usize, ) -> color_eyre::Result<Workspace> { let workspace_snapshot = SplitSnapshot::initial(ctx, split_max).await?; ctx.set_workspace_split_snapshot(workspace_snapshot); migrate_intrinsics_no_commit(ctx).await.map_err(Box::new)?; crate::test_exclusive_schemas::migrate(ctx).await?; let workspace_snapshot_address = ctx .workspace_snapshot()? .as_split_snapshot()? .write(ctx) .await?; let mut head_change_set = ChangeSet::new(ctx, "HEAD", None, workspace_snapshot_address).await?; let workspace = Workspace::insert_workspace( ctx, pk, name, head_change_set.id, token, WorkspaceSnapshotSelectorDiscriminants::SplitSnapshot, ) .await?; head_change_set .update_workspace_id(ctx, *workspace.pk()) .await?; ctx.update_tenancy(Tenancy::new(pk)); ctx.update_visibility_and_snapshot_to_visibility(head_change_set.id) .await?; let _history_event = HistoryEvent::new( ctx, "workspace.create".to_owned(), "Workspace created".to_owned(), &serde_json::json![{ "visibility": ctx.visibility() }], ) .await?; // Create an entry in the workspace integrations table by default WorkspaceIntegration::new(ctx, None).await?; Ok(workspace) } /// Creates a [`Workspace`] with associated items used during /// [`macro expansion`](crate::expand_helpers). pub async fn new( ctx: &mut DalContext, workspace_name: impl AsRef<str>, user_name: impl AsRef<str>, user_email: impl AsRef<str>, token: impl AsRef<str>, ) -> color_eyre::Result<Self> { let use_split = false; let workspace = if use_split { Self::new_split_graph_workspace( ctx, WorkspacePk::generate(), workspace_name, token, 500, ) .await? } else { Workspace::new_from_builtin(ctx, WorkspacePk::generate(), workspace_name, token).await? }; let key_pair = KeyPair::new(ctx, "default").await?; let user = User::new( ctx, UserPk::generate(), &user_name, &user_email, None::<&str>, ) .await?; ctx.update_history_actor(HistoryActor::User(user.pk())); Ok(Self { key_pair, user, workspace, }) } }

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/systeminit/si'

If you have feedback or need assistance with the MCP directory API, please join our Discord server