DEV Community

01kg
01kg

Posted on

Snaplet & Supabase & Flutter | How to create a known user for testing

Snaplet helped a lot in mocking data.

After installed it and learnt how to integrate it with Supabase, I need a "known" user for testing.

Creating a random user, is a piece of cake for Snaplet.

Say for testing or demo purpose, I wanna create a user with email my@user.com and password userpass, and generate a lot data related to the user.

TL;DR

Create a package.json file in your Flutter project with content {} if no such a file exists.

Install packages:

  1. npm install bcrypt
  2. npm i --save-dev @types/bcrypt
// seed.ts import { createSeedClient } from "@snaplet/seed"; import { v4 as uuidv4 } from "uuid"; import bcrypt from "bcrypt"; async function hashPassword(password: string): Promise<string> { const saltRounds = 10; // You can adjust the salt rounds as needed const salt = await bcrypt.genSalt(saltRounds); const hashedPassword = await bcrypt.hash(password, salt); return hashedPassword; } const DRY_RUN = false; const USER_EMAIL = "my@user.com"; const USER_PASSWORD = "userpass"; const main = async () => { const USER_ENCRYPTED_PASSWORD = await hashPassword(USER_PASSWORD); const USER_ID = uuidv4(); const seed = await createSeedClient({ dryRun: DRY_RUN }); // Truncate all tables in the database await seed.$resetDatabase(); // Create the user and its related data await seed.auth_users([ { id: USER_ID, instance_id: "00000000-0000-0000-0000-000000000000", aud: "authenticated", role: "authenticated", email: USER_EMAIL, encrypted_password: USER_ENCRYPTED_PASSWORD, // email_confirmed_at: "", // Snaplet will generate this for you invited_at: null, confirmation_token: "", confirmation_sent_at: null, recovery_token: "", recovery_sent_at: null, email_change_token_new: "", email_change: "", email_change_sent_at: null, // last_sign_in_at: "", // Snaplet will generate this for you raw_app_meta_data: { "provider": "email", "providers": ["email"] }, raw_user_meta_data: { "sub": USER_ID, "email": USER_EMAIL, "email_verified": false, "phone_verified": false, }, is_super_admin: null, // created_at: "", // Snaplet will generate this for you // updated_at: "", // Snaplet will generate this for you phone: null, phone_confirmed_at: null, phone_change: "", phone_change_token: "", phone_change_sent_at: null, email_change_token_current: "", email_change_confirm_status: 0, banned_until: null, reauthentication_token: "", reauthentication_sent_at: null, is_sso_user: false, deleted_at: null, is_anonymous: false, identities: [{ // id: "", // Snaplet will generate this for you identity_data: { "sub": USER_ID, "email": USER_EMAIL, "email_verified": false, "phone_verified": false, }, provider: "email", provider_id: USER_ID, // If the provider is email or phone, the id is the user's id from the auth.users table. https://supabase.com/docs/guides/auth/identities#the-user-identity-object // last_sign_in_at: "", // Snaplet will generate this for you // created_at: "", // Snaplet will generate this for you // updated_at: "", // Snaplet will generate this for you }], // data related to user // ... }, ]); if (!DRY_RUN) { console.log("Database seeded successfully!"); } process.exit(); }; main(); 
Enter fullscreen mode Exit fullscreen mode

Top comments (0)