// @vitest-environment node
import { expect, test } from 'vitest';

import {
  getClerkSignInRedirectProps,
  getClerkSignUpRedirectProps,
  quantize,
} from './utils';

test('quantize', () => {
  expect(quantize(0.0, 0.04)).toBeCloseTo(0.0);
  expect(quantize(1.081, 0.04)).toBeCloseTo(1.08);
  expect(quantize(2.2, 0.04)).toBeCloseTo(2.2);
  expect(quantize(1.077, 0.04)).toBeCloseTo(1.08);
  expect(quantize(5.5, 0.04)).toBeCloseTo(5.52);
  expect(quantize(1.1, 0.1)).toBeCloseTo(1.1);
  expect(quantize(19.5, 1)).toBeCloseTo(20.0);
  expect(quantize(17, 2)).toBeCloseTo(18);
  expect(quantize(11, 5)).toBeCloseTo(10);
});

test('getClerkSignUpRedirectProps', () => {
  expect(getClerkSignUpRedirectProps('/test').forceRedirectUrl).toBe(
    '/test?redirected_from=signup'
  );
  expect(getClerkSignUpRedirectProps('/test').signInForceRedirectUrl).toBe(
    '/test?redirected_from=signin'
  );
  expect(
    getClerkSignUpRedirectProps('/test?param1=value1').forceRedirectUrl
  ).toBe('/test?param1=value1&redirected_from=signup');
  expect(
    getClerkSignUpRedirectProps('/test?param1=value1').signInForceRedirectUrl
  ).toBe('/test?param1=value1&redirected_from=signin');
  expect(
    getClerkSignUpRedirectProps('/test?param1=value1', {
      param1: 'value2',
      param2: undefined,
      param3: 'value3',
    }).forceRedirectUrl
  ).toBe('/test?param1=value2&param3=value3&redirected_from=signup');
  expect(
    getClerkSignUpRedirectProps('/test?param1=value1', {
      param1: 'value2',
      param2: undefined,
      param3: 'value3',
    }).signInForceRedirectUrl
  ).toBe('/test?param1=value2&param3=value3&redirected_from=signin');
});

test('getClerkSignInRedirectProps', () => {
  expect(getClerkSignInRedirectProps('/test').forceRedirectUrl).toBe(
    '/test?redirected_from=signin'
  );
  expect(getClerkSignInRedirectProps('/test').signUpForceRedirectUrl).toBe(
    '/test?redirected_from=signup'
  );
  expect(
    getClerkSignInRedirectProps('/test?param1=value1').forceRedirectUrl
  ).toBe('/test?param1=value1&redirected_from=signin');
  expect(
    getClerkSignInRedirectProps('/test?param1=value1').signUpForceRedirectUrl
  ).toBe('/test?param1=value1&redirected_from=signup');
  expect(
    getClerkSignInRedirectProps('/test?param1=value1', {
      param1: 'value2',
      param2: undefined,
      param3: 'value3',
    }).forceRedirectUrl
  ).toBe('/test?param1=value2&param3=value3&redirected_from=signin');
  expect(
    getClerkSignInRedirectProps('/test?param1=value1', {
      param1: 'value2',
      param2: undefined,
      param3: 'value3',
    }).signUpForceRedirectUrl
  ).toBe('/test?param1=value2&param3=value3&redirected_from=signup');
});
