DEV Community

01kg
01kg

Posted on

1

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

Postmark Image

Speedy emails, satisfied customers

Are delayed transactional emails costing you user satisfaction? Postmark delivers your emails almost instantly, keeping your customers happy and connected.

Sign up

Top comments (0)

A Workflow Copilot. Tailored to You.

Pieces.app image

Our desktop app, with its intelligent copilot, streamlines coding by generating snippets, extracting code from screenshots, and accelerating problem-solving.

Read the docs

👋 Kindness is contagious

Please leave a ❤️ or a friendly comment on this post if you found it helpful!

Okay