LCOV - code coverage report
Current view: top level - dashql-pack/src - remote_paths.rs Coverage Total Hit
Test: DashQL 6e74948 Lines: 100.0 % 42 42
Test Date: 2026-11-06 17:46:50

            Line data    Source code
       1              : use super::release_version::{ReleaseChannel, ReleaseVersion};
       2              : 
       3              : /// The object keys a release is uploaded to
       4              : pub struct RemotePaths {
       5              :     /// The channel metadata key to point to the release, e.g. `stable.json`
       6              :     pub channel_metadata: &'static str,
       7              :     /// The channel update manifest key to point to the release, e.g. `stable-update.json`
       8              :     pub channel_update: &'static str,
       9              :     /// The versioned directory of the release, `releases/<version>`
      10              :     pub release_directory: String,
      11              :     /// The key of the release metadata
      12              :     pub release_metadata: String,
      13              :     /// The key of the release update manifest
      14              :     pub release_update: String,
      15              :     /// The name of the release channel, `stable` or `latest`
      16              :     pub channel: &'static str,
      17              : }
      18              : 
      19           20 : pub fn derive_remote_paths(release: &ReleaseVersion) -> RemotePaths {
      20           20 :     let (channel, channel_metadata, channel_update) = match release.channel {
      21           15 :         ReleaseChannel::Stable => ("stable", "stable.json", "stable-update.json"),
      22            5 :         ReleaseChannel::Latest => ("latest", "latest.json", "latest-update.json"),
      23              :     };
      24           20 :     let release_directory = format!("releases/{}", release.version.to_string());
      25           20 :     let release_metadata = format!("{}/{}", &release_directory, "metadata.json");
      26           20 :     let release_update = format!("{}/{}", &release_directory, "update.json");
      27           20 :     RemotePaths {
      28           20 :         channel_metadata,
      29           20 :         channel_update,
      30           20 :         release_directory,
      31           20 :         release_metadata,
      32           20 :         release_update,
      33           20 :         channel,
      34           20 :     }
      35           20 : }
      36              : 
      37           35 : pub fn electron_channel_manifest(channel: &str, arch: &str) -> String {
      38           35 :     format!("channels/{}/macos/{}/latest-mac.yml", channel, arch)
      39           35 : }
      40              : 
      41              : #[cfg(test)]
      42              : mod tests {
      43              :     use super::*;
      44              : 
      45              :     #[test]
      46            1 :     fn architecture_specific_electron_feed() {
      47            1 :         assert_eq!(electron_channel_manifest("stable", "arm64"), "channels/stable/macos/arm64/latest-mac.yml");
      48            1 :         assert_eq!(electron_channel_manifest("latest", "x64"), "channels/latest/macos/x64/latest-mac.yml");
      49            1 :     }
      50              : 
      51            2 :     fn release(version: &str, channel: ReleaseChannel) -> ReleaseVersion {
      52            2 :         ReleaseVersion { version: semver::Version::parse(version).unwrap(), id: uuid::Uuid::nil(), channel }
      53            2 :     }
      54              : 
      55              :     #[test]
      56            1 :     fn a_stable_release_only_moves_the_stable_channel() {
      57            1 :         let paths = derive_remote_paths(&release("1.2.3", ReleaseChannel::Stable));
      58            1 :         assert_eq!(paths.channel, "stable");
      59            1 :         assert_eq!(paths.channel_metadata, "stable.json");
      60            1 :         assert_eq!(paths.channel_update, "stable-update.json");
      61            1 :         assert_eq!(paths.release_directory, "releases/1.2.3");
      62            1 :         assert_eq!(paths.release_metadata, "releases/1.2.3/metadata.json");
      63            1 :         assert_eq!(paths.release_update, "releases/1.2.3/update.json");
      64            1 :     }
      65              : 
      66              :     #[test]
      67            1 :     fn a_prerelease_only_moves_the_latest_channel() {
      68            1 :         let paths = derive_remote_paths(&release("1.2.4-dev.3", ReleaseChannel::Latest));
      69            1 :         assert_eq!(paths.channel, "latest");
      70            1 :         assert_eq!(paths.channel_metadata, "latest.json");
      71            1 :         assert_eq!(paths.channel_update, "latest-update.json");
      72            1 :         assert_eq!(paths.release_directory, "releases/1.2.4-dev.3");
      73            1 :     }
      74              : }
        

Generated by: LCOV version 2.0-1