import { faker } from "@faker-js/faker";
import { describe, expect, test } from "vitest";
import { factories } from "../factories";

describe("basic notifier workflows", () => {
  test("user should be able to create, update, and delete a notifier", async () => {
    const { client } = await factories.client.singleUse();

    // Create Notifier
    const result = await client.notifiers.create({
      name: faker.name.firstName(),
      url: "discord://" + faker.random.alphaNumeric(10),
      isActive: true,
    });

    expect(result.error).toBeFalsy();
    expect(result.status).toBe(201);
    expect(result.data).toBeTruthy();

    const notifier = result.data;

    // Update Notifier with new URL
    {
      const updateData = {
        name: faker.name.firstName(),
        url: "discord://" + faker.random.alphaNumeric(10),
        isActive: true,
      };

      const updateResult = await client.notifiers.update(notifier.id, updateData);
      expect(updateResult.error).toBeFalsy();
      expect(updateResult.status).toBe(200);
      expect(updateResult.data).toBeTruthy();
      expect(updateResult.data.name).not.toBe(notifier.name);
    }

    // Update Notifier with empty URL
    {
      const updateData = {
        name: faker.name.firstName(),
        url: null,
        isActive: true,
      };

      const updateResult = await client.notifiers.update(notifier.id, updateData);
      expect(updateResult.error).toBeFalsy();
      expect(updateResult.status).toBe(200);
      expect(updateResult.data).toBeTruthy();
      expect(updateResult.data.name).not.toBe(notifier.name);
    }

    // Delete Notifier
    {
      const deleteResult = await client.notifiers.delete(notifier.id);
      expect(deleteResult.error).toBeFalsy();
      expect(deleteResult.status).toBe(204);
    }
  });
});
