statsig-rust 0.19.2

Statsig Rust SDK for usage in multi-user server environments.
Documentation
mod utils;

use lazy_static::lazy_static;
use statsig_rust::{Statsig, StatsigUser};
use std::sync::{Arc, Mutex, MutexGuard};

lazy_static! {
    static ref TEST_MUTEX: Mutex<()> = Mutex::new(());
}

fn setup() -> MutexGuard<'static, ()> {
    let lock = TEST_MUTEX.lock().unwrap();
    Statsig::remove_shared();
    lock
}

#[test]
fn test_create_shared_statsig() {
    let _lock = setup();

    let statsig = Statsig::new_shared("secret-key", None).unwrap();
    let shared = Statsig::shared();

    assert!(Arc::ptr_eq(&statsig, &shared));
}

#[test]
fn test_shared_vs_individual_instance() {
    let _lock = setup();

    let statsig = Statsig::new_shared("secret-key", None).unwrap();
    let statsig_individual = Statsig::new("secret-key", None);

    let statsig_ptr = Arc::as_ptr(&statsig);
    let statsig_individual_ptr = &statsig_individual as *const Statsig;

    assert_ne!(statsig_ptr, statsig_individual_ptr);
}

#[test]
fn test_calling_shared_before_creation() {
    let _lock = setup();

    let shared1 = Statsig::shared();
    let shared2 = Statsig::shared();

    assert!(!Arc::ptr_eq(&shared1, &shared2));
}

#[test]
fn test_calling_shared_before_and_after_creation() {
    let _lock = setup();

    let shared1 = Statsig::shared();
    let statsig = Statsig::new_shared("secret-key", None).unwrap();
    let shared2 = Statsig::shared();

    assert!(!Arc::ptr_eq(&shared1, &shared2));
    assert!(Arc::ptr_eq(&statsig, &shared2));
}

#[test]
fn test_creating_consecutive_shared() {
    let _lock = setup();

    let _ = Statsig::new_shared("secret-key", None).unwrap();
    let statsig2 = Statsig::new_shared("secret-key", None);

    assert!(statsig2.is_err());
}

#[test]
fn test_calling_functions_on_shared() {
    let _lock = setup();

    let _ = Statsig::new_shared("secret-key", None);
    let user = StatsigUser::with_user_id("a-user".to_string());

    assert!(!Statsig::shared().check_gate(&user, "not-found"));
}

#[test]
fn test_checking_if_shared_instance_does_not_exist() {
    let _lock = setup();

    assert!(!Statsig::has_shared_instance());
}

#[test]
fn test_checking_if_shared_instance_exists() {
    let _lock = setup();
    let _ = Statsig::new_shared("secret-key", None);

    assert!(Statsig::has_shared_instance());
}