optimizely 0.5.0

An unofficial Rust SDK for Optimizely Feature Experimentation
// External imports
use std::error::Error;

//
use optimizely::AttributeValue;

// Relative imports of sub modules
use common::setup;
mod common;

#[test]
fn user_context_set_attribute() -> Result<(), Box<dyn Error>> {
    let ctx = setup()?;

    // Create user context without attributes
    let mut user_context = ctx.client.create_user_context("user123");

    // Override attributes on existing user context
    user_context.set_attribute("isLoggedIn", AttributeValue::Boolean(true));
    user_context.set_attribute("appVersion", AttributeValue::String("1.3.2".into()));

    // Retrieve attributes again
    let attributes = user_context.user_attributes();

    // Attributes should be equal to expected
    assert_eq!(attributes.len(), 2);
    assert!(attributes
        .iter()
        .any(|attribute| attribute.id() == "5714602848157696"));

    Ok(())
}

#[test]
#[cfg(feature = "online")]
fn user_context_track_event() -> Result<(), Box<dyn Error>> {
    let ctx = setup()?;

    // Create user context with given attributes
    let user_context = ctx.client.create_user_context("user123");

    // Send a conversion event
    user_context.track_event("purchase");

    // Assert that exactly one event is dispatched
    assert_eq!(ctx.conversion_counter.value(), 1);

    Ok(())
}