synopkg 14.0.1

Consistent dependency versions in large JavaScript Monorepos
use {
  crate::{
    dependency::UpdateUrl,
    test::{self},
    Context,
  },
  serde_json::json,
};

#[test]
fn returns_correct_registry_update_url() {
  let config = test::mock::config_from_mock(json!({}));
  let packages = test::mock::packages_from_mocks(vec![json!({
    "name": "local-package",
    "version": "0.0.0",
    "dependencies": {
      "@jsr/luca__cases": "1",
      "@lit-labs/ssr": "npm:@lit-labs/ssr@3.3.0",
      "@luca/cases": "npm:@jsr/luca__cases@1",
      "@std/fmt": "npm:@jsr/std__fmt@^1.0.3",
      "@std/yaml": "npm:@jsr/std__yaml",
      "lit": "npm:lit@3.2.1",
    }
  })]);

  let catalogs = None;
  let registry_client = None;
  let ctx = Context::create(config, packages, registry_client, catalogs);

  let get_update_url_by_name = |name: &str| {
    ctx
      .instances
      .iter()
      .find(|instance| instance.descriptor.internal_name == name)
      .unwrap()
      .get_update_url()
  };

  assert_eq!(get_update_url_by_name("local-package"), None);
  assert_eq!(
    get_update_url_by_name("@jsr/luca__cases"),
    Some(UpdateUrl {
      internal_name: "@jsr/luca__cases".to_string(),
      url: "https://npm.jsr.io/@jsr/luca__cases".to_string()
    })
  );
  assert_eq!(
    get_update_url_by_name("@lit-labs/ssr"),
    Some(UpdateUrl {
      internal_name: "@lit-labs/ssr".to_string(),
      url: "https://registry.npmjs.org/@lit-labs/ssr".to_string()
    })
  );
  assert_eq!(
    get_update_url_by_name("@luca/cases"),
    Some(UpdateUrl {
      internal_name: "@luca/cases".to_string(),
      url: "https://npm.jsr.io/@jsr/luca__cases".to_string()
    })
  );
  assert_eq!(
    get_update_url_by_name("@std/fmt"),
    Some(UpdateUrl {
      internal_name: "@std/fmt".to_string(),
      url: "https://npm.jsr.io/@jsr/std__fmt".to_string()
    })
  );
  assert_eq!(
    get_update_url_by_name("@std/yaml"),
    Some(UpdateUrl {
      internal_name: "@std/yaml".to_string(),
      url: "https://npm.jsr.io/@jsr/std__yaml".to_string()
    })
  );
  assert_eq!(
    get_update_url_by_name("lit"),
    Some(UpdateUrl {
      internal_name: "lit".to_string(),
      url: "https://registry.npmjs.org/lit".to_string()
    })
  );
}