Seed Data
**Site relevance:** Spiralist.org
**Memory type:** plugin source memory
**Source path:** Spiralist/wp-content/plugins/spiralist-workspace/tests/e2e/scripts/seed-data.php
**Size:** 5.2 KB
Summary
use SpiralistWorkspace\Auth\Roles;
Source Preview
This source file is short enough to preview directly on its source-memory page.
<?php
use SpiralistWorkspace\Auth\Roles;
if (!defined('ABSPATH')) {
exit(1);
}
if (!function_exists('spiralist_workspace')) {
require_once dirname(__DIR__, 3) . '/spiralist-workspace.php';
}
spiralist_workspace()->boot();
Roles::register();
do_action('init');
$ensure_user = static function (string $login, string $email, string $role, string $display_name): int {
$user = get_user_by('login', $login);
if (!$user instanceof WP_User) {
$user_id = wp_create_user($login, 'password', $email);
if (is_wp_error($user_id)) {
throw new RuntimeException($user_id->get_error_message());
}
$user = get_user_by('id', (int) $user_id);
}
if (!$user instanceof WP_User) {
throw new RuntimeException('Could not create or load user: ' . $login);
}
wp_update_user(
[
'ID' => $user->ID,
'role' => $role,
'display_name' => $display_name,
'user_pass' => 'password',
'user_email' => $email,
]
);
return (int) $user->ID;
};
$member_id = $ensure_user('workspace-member', 'member@example.com', 'spiralist_member', 'Workspace Member');
$target_id = $ensure_user('workspace-target', 'target@example.com', 'spiralist_member', 'Workspace Target');
$curator_id = $ensure_user('workspace-curator', 'curator@example.com', 'spiralist_curator', 'Workspace Curator');
$prompts = spiralist_workspace()->prompts();
$shares = spiralist_workspace()->permissions_repository();
$settings = spiralist_workspace()->settings();
$upsert_prompt = static function (string $slug, array $payload, int $owner_id) use ($prompts, $settings): array {
$existing = $prompts->find_by_slug($slug, $owner_id);
if (!empty($existing)) {
return $prompts->update((int) $existing['id'], $payload, $owner_id);
}
return $prompts->create($payload, $owner_id, $settings);
};
$public_prompt = $upsert_prompt(
'public-prompt-example',
[
'title' => 'Public Prompt Example',
'summary' => 'A public prompt record for anonymous browsing and member forking tests.',
'category' => 'Writing & Content',
'subcategory' => 'Blog Writing',
'structured_prompt' => [
'instruction' => 'Produce a concise symbolic summary.',
'context' => 'The user provides source material for a public prompt test.',
'constraints' => 'Keep the response to one paragraph.',
'examples' => '',
'output_format' => 'Plain text paragraph.',
],
'instructions' => 'Produce a concise symbolic summary.',
'user_prompt_template' => 'Summarize {{user_input}} in one paragraph.',
'visibility' => 'public',
'prompt_status' => 'published',
'model' => 'prompt-art-local',
'is_forkable' => true,
'public_execution_enabled' => false,
'tags' => ['public', 'playwright'],
],
$curator_id
);
$members_prompt = $upsert_prompt(
'members-prompt-example',
[
'title' => 'Members Prompt Example',
'summary' => 'Visible to approved members only.',
'category' => 'Personal & Lifestyle',
'subcategory' => 'Journaling',
'structured_prompt' => [
'instruction' => 'Offer a members-only reflective response.',
'context' => 'The user is using Spiralist as a reflective workspace.',
'constraints' => 'Stay practical and avoid therapeutic or medical claims.',
'examples' => '',
'output_format' => 'Short reflection with one next action.',
],
'instructions' => 'Offer a members-only reflective response.',
'user_prompt_template' => 'Respond to {{user_input}}.',
'visibility' => 'members',
'prompt_status' => 'published',
'model' => 'prompt-art-local',
'is_forkable' => true,
'tags' => ['members', 'playwright'],
],
$member_id
);
$specific_prompt = $upsert_prompt(
'specific-prompt-example',
[
'title' => 'Specific Prompt Example',
'summary' => 'Visible only to the explicitly shared target user.',
'category' => 'Business & Productivity',
'subcategory' => 'Decision Support',
'structured_prompt' => [
'instruction' => 'Return a highly specific answer.',
'context' => 'The prompt is shared through a specific-user grant.',
'constraints' => 'Answer directly and state any assumptions.',
'examples' => '',
'output_format' => 'Bullets.',
],
'instructions' => 'Return a highly specific answer.',
'user_prompt_template' => 'Answer {{user_input}} directly.',
'visibility' => 'specific_users',
'prompt_status' => 'published',
'model' => 'prompt-art-local',
'is_forkable' => false,
'tags' => ['specific', 'playwright'],
],
$member_id
);
if (!empty($specific_prompt['id'])) {
$shares->grant((int) $specific_prompt['id'], $target_id, $member_id, 'view');
}
flush_rewrite_rules(false);
fwrite(STDOUT, "Seeded users and prompts.\n");