AkurAI Build
Menu

Public repository / 228b5716ba0b7bcc87cce261ea6df891133a35bb

AkurAI-CRM / crates/crm-core/tests/integration.rs

Latest change f21a8121a42248001d0b1e88d62efe693179ea69 - release: v0.1.1 by Ólafur B. J.

use crm_core::*;

#[test]
fn test_person_roundtrip() {
    let person = Person {
        id: 1,
        name: FullName::new("Anna", "Jónsdóttir"),
        email: Some(Email {
            address: "anna@test.is".into(),
            label: "work".into(),
        }),
        phone: Some(Phone {
            number: "+354 123 4567".into(),
            label: "mobile".into(),
        }),
        job_title: Some("CEO".into()),
        company_id: Some(1),
        linkedin_url: None,
        avatar_url: None,
        created_at: 1000,
        updated_at: 1000,
        created_by: None,
    };

    let json = person.to_json();
    let parsed = Person::from_json(1, &json).unwrap();
    assert_eq!(parsed.name.first, "Anna");
    assert_eq!(parsed.name.last, "Jónsdóttir");
    assert_eq!(parsed.email.as_ref().unwrap().address, "anna@test.is");
    assert_eq!(parsed.company_id, Some(1));
}

#[test]
fn test_company_validation() {
    let result = Company::from_json(
        1,
        &akurai_json::Value::Object(vec![("name".into(), akurai_json::Value::Str("".into()))]),
    );
    assert!(result.is_err());
}

#[test]
fn test_pipeline_stages() {
    let stages = PipelineStage::all();
    assert_eq!(stages.len(), 7);
    assert_eq!(stages[0].label(), "New");
    assert_eq!(stages[3].label(), "Proposal");
    assert_eq!(stages[5].label(), "Won");
    assert_eq!(stages[6].label(), "Lost");
}

#[test]
fn test_task_status_label() {
    assert_eq!(TaskStatus::Todo.label(), "Todo");
    assert_eq!(TaskStatus::InProgress.label(), "In Progress");
    assert_eq!(TaskStatus::Done.label(), "Done");
}

#[test]
fn test_entity_type_plural() {
    assert_eq!(EntityType::Person.plural(), "people");
    assert_eq!(EntityType::Company.plural(), "companies");
    assert_eq!(EntityType::Opportunity.plural(), "opportunities");
}

#[test]
fn test_opportunity_roundtrip() {
    let opp = Opportunity {
        id: 2,
        name: "Big Deal".into(),
        amount: Some(100000),
        stage: PipelineStage::Negotiation,
        close_date: Some(2000),
        probability: Some(75),
        person_id: Some(1),
        company_id: Some(2),
        created_at: 1000,
        updated_at: 1000,
        created_by: None,
    };

    let json = opp.to_json();
    let parsed = Opportunity::from_json(2, &json).unwrap();
    assert_eq!(parsed.name, "Big Deal");
    assert_eq!(parsed.stage, PipelineStage::Negotiation);
    assert_eq!(parsed.amount, Some(100000));
    assert_eq!(parsed.probability, Some(75));
    assert_eq!(parsed.person_id, Some(1));
    assert_eq!(parsed.company_id, Some(2));
}