fn index_serde_test()

in crates/fig_install/src/index.rs [444:592]


    fn index_serde_test() {
        let old_cli_name = OLD_CLI_BINARY_NAMES[0];
        let json_str = serde_json::json!({
            "supported": [
                {
                    "kind": "dmg",
                    "targetTriple": "universal-apple-darwin",
                    "os": "macos",
                    "architecture": "universal",
                    "variant": "full",
                    "fileType": "dmg"
                },
                {
                    "kind": "deb",
                    "targetTriple": "x86_64-unknown-linux-gnu",
                    "os": "linux",
                    "architecture": "x86_64",
                    "variant": "headless",
                    "fileType": "tarZst"
                }
            ],
            "versions": [
                {
                    "version": "0.7.0",
                    "rollout": null,
                    "packages": [
                        {
                            "kind": "dmg",
                            "architecture": "universal",
                            "variant": "full",
                            "download": format!("0.7.0/{old_cli_name}.dmg"),
                            "sha256": "4213d7649e4b1a2ec50adc0266d32d3e1e1f952ed6a863c28d7538190dc92472",
                            "size": 82975504
                        }
                    ]
                },
                {
                    "version": "0.15.3",
                    "packages": [
                        {
                            "kind": "dmg",
                            "architecture": "universal",
                            "variant": "full",
                            "download": format!("0.15.3/{OLD_PRODUCT_NAME}.dmg"),
                            "sha256": "87a311e493bb2b0e68a1b4b5d267c79628d23c1e39b0a62d1a80b0c2352f80a2",
                            "size": 88174538,
                            "cliPath": format!("Contents/MacOS/{old_cli_name}")
                        }
                    ]
                },
                {
                    "version": "1.0.0",
                    "packages": [
                        {
                            "kind": "deb",
                            "fileType": "dmg",
                            "os": "macos",
                            "architecture": "universal",
                            "variant": "full",
                            "download": "1.0.0/Q.dmg",
                            "sha256": "87a311e493bb2b0e68a1b4b5d267c79628d23c1e39b0a62d1a80b0c2352f80a2",
                            "size": 88174538,
                            "cliPath": format!("Contents/MacOS/{old_cli_name}"),
                        },
                        {
                            "kind": "deb",
                            "fileType": "tarZst",
                            "os": "linux",
                            "architecture": "x86_64",
                            "variant": "headless",
                            "download": "1.0.0/q-x86_64-linux.tar.zst",
                            "sha256": "5a6abea56bfa91bd58d49fe40322058d0efea825f7e19f7fb7db1c204ae625b6",
                            "size": 76836772,
                        }
                    ]
                },
                {
                    "version": "2.0.0",
                    "packages": [
                        {
                            // random values to ensure forward compat
                            "kind": "abc",
                            "fileType": "abc",
                            "os": "abc",
                            "architecture": "abc",
                            "variant": "abc",
                            "download": "abc",
                            "sha256": "abc",
                            "size": 123,
                            "cliPath": "abc",
                            "otherField": "abc"
                        }
                    ]
                }
            ]
        })
        .to_string();

        let index = serde_json::from_str::<Index>(&json_str).unwrap();
        println!("{:#?}", index);

        assert_eq!(index.supported.len(), 2);
        assert_eq!(index.supported[0], Support {
            architecture: PackageArchitecture::Universal,
            target_triple: Some(TargetTriple::UniversalAppleDarwin),
            variant: Variant::Full,
            os: Some(Os::Macos),
            file_type: Some(FileType::Dmg),
        });
        assert_eq!(index.supported[1], Support {
            architecture: PackageArchitecture::X86_64,
            target_triple: Some(TargetTriple::X86_64UnknownLinuxGnu),
            variant: Variant::Minimal,
            os: Some(Os::Linux),
            file_type: Some(FileType::TarZst),
        });

        assert_eq!(index.versions.len(), 4);

        // check the 1.0.0 entry matches
        assert_eq!(index.versions[2], RemoteVersion {
            version: Version::new(1, 0, 0),
            rollout: None,
            packages: vec![
                Package {
                    architecture: PackageArchitecture::Universal,
                    variant: Variant::Full,
                    os: Some(Os::Macos),
                    target_triple: None,
                    file_type: Some(FileType::Dmg),
                    download: "1.0.0/Q.dmg".into(),
                    sha256: "87a311e493bb2b0e68a1b4b5d267c79628d23c1e39b0a62d1a80b0c2352f80a2".into(),
                    size: 88174538,
                    cli_path: Some(format!("Contents/MacOS/{old_cli_name}")),
                },
                Package {
                    architecture: PackageArchitecture::X86_64,
                    variant: Variant::Minimal,
                    os: Some(Os::Linux),
                    target_triple: None,
                    file_type: Some(FileType::TarZst),
                    download: "1.0.0/q-x86_64-linux.tar.zst".into(),
                    sha256: "5a6abea56bfa91bd58d49fe40322058d0efea825f7e19f7fb7db1c204ae625b6".into(),
                    size: 76836772,
                    cli_path: None,
                }
            ],
        });
    }