framesmith 0.1.0

A Rust library for controlling Samsung Frame TVs over the local network
Documentation
use crate::protocol::art_request::{ArtRequest, ArtRequestParams, ConnInfo, ContentIdEntry};

#[test]
fn serialize_get_content_list() {
    let req = ArtRequest::new(
        "get_content_list",
        ArtRequestParams::GetContentList { category: None },
    );
    let json = req.to_json().unwrap();
    let parsed: serde_json::Value = serde_json::from_str(&json).unwrap();
    assert_eq!(parsed["request"], "get_content_list");
    assert!(parsed["id"].is_string());
    assert!(parsed["request_id"].is_string());
}

#[test]
fn serialize_get_content_list_with_category() {
    let req = ArtRequest::new(
        "get_content_list",
        ArtRequestParams::GetContentList {
            category: Some("MY-C0002".to_string()),
        },
    );
    let json = req.to_json().unwrap();
    let parsed: serde_json::Value = serde_json::from_str(&json).unwrap();
    assert_eq!(parsed["category"], "MY-C0002");
}

#[test]
fn serialize_select_image() {
    let req = ArtRequest::new(
        "select_image",
        ArtRequestParams::SelectImage {
            content_id: "SAM-F0206".to_string(),
            category_id: None,
            show: true,
        },
    );
    let json = req.to_json().unwrap();
    let parsed: serde_json::Value = serde_json::from_str(&json).unwrap();
    assert_eq!(parsed["request"], "select_image");
    assert_eq!(parsed["content_id"], "SAM-F0206");
    assert_eq!(parsed["show"], true);
}

#[test]
fn serialize_delete_image_list() {
    let req = ArtRequest::new(
        "delete_image_list",
        ArtRequestParams::DeleteImageList {
            content_id_list: vec![
                ContentIdEntry {
                    content_id: "MY-F0020".to_string(),
                },
                ContentIdEntry {
                    content_id: "MY-F0021".to_string(),
                },
            ],
        },
    );
    let json = req.to_json().unwrap();
    let parsed: serde_json::Value = serde_json::from_str(&json).unwrap();
    assert_eq!(parsed["content_id_list"][0]["content_id"], "MY-F0020");
    assert_eq!(parsed["content_id_list"][1]["content_id"], "MY-F0021");
}

#[test]
fn serialize_send_image() {
    let req = ArtRequest::new(
        "send_image",
        ArtRequestParams::SendImage {
            file_type: "JPEG".to_string(),
            image_date: "2024:01:15 10:30:00".to_string(),
            matte_id: "none".to_string(),
            portrait_matte_id: "none".to_string(),
            file_size: 12345,
            conn_info: ConnInfo::with_id("test-uuid".to_string()),
        },
    );
    let json = req.to_json().unwrap();
    let parsed: serde_json::Value = serde_json::from_str(&json).unwrap();
    assert_eq!(parsed["request"], "send_image");
    assert_eq!(parsed["file_type"], "JPEG");
    assert_eq!(parsed["file_size"], 12345);
    assert_eq!(parsed["conn_info"]["d2d_mode"], "socket");
}

#[test]
fn serialize_change_matte() {
    let req = ArtRequest::new(
        "change_matte",
        ArtRequestParams::ChangeMatte {
            content_id: "MY-F0001".to_string(),
            matte_id: "shadowbox_polar".to_string(),
            portrait_matte_id: None,
        },
    );
    let json = req.to_json().unwrap();
    let parsed: serde_json::Value = serde_json::from_str(&json).unwrap();
    assert_eq!(parsed["matte_id"], "shadowbox_polar");
    assert!(parsed.get("portrait_matte_id").is_none());
}

#[test]
fn serialize_set_brightness() {
    let req = ArtRequest::new(
        "set_brightness",
        ArtRequestParams::SetValue {
            value: "7".to_string(),
        },
    );
    let json = req.to_json().unwrap();
    let parsed: serde_json::Value = serde_json::from_str(&json).unwrap();
    assert_eq!(parsed["request"], "set_brightness");
    assert_eq!(parsed["value"], "7");
}