blob: 1ae93c7e350ce9c26d3379f5e0ccab5504318fa0 [file] [log] [blame]
// Copyright 2021 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
use {
anyhow::Result, errors::ffx_bail, ffx_core::ffx_plugin,
ffx_repository_remove_args::RemoveCommand,
fidl_fuchsia_developer_bridge::RepositoryRegistryProxy,
};
#[ffx_plugin("ffx_repository", RepositoryRegistryProxy = "daemon::service")]
pub async fn remove(cmd: RemoveCommand, repos: RepositoryRegistryProxy) -> Result<()> {
if !repos.remove_repository(&cmd.name).await? {
ffx_bail!("No repository named \"{}\".", cmd.name);
}
Ok(())
}
#[cfg(test)]
mod test {
use super::*;
use {
fidl_fuchsia_developer_bridge::RepositoryRegistryRequest, fuchsia_async as fasync,
futures::channel::oneshot::channel,
};
#[fasync::run_singlethreaded(test)]
async fn test_remove() {
let (sender, receiver) = channel();
let mut sender = Some(sender);
let repos = setup_fake_repos(move |req| match req {
RepositoryRegistryRequest::RemoveRepository { name, responder } => {
sender.take().unwrap().send(name).unwrap();
responder.send(true).unwrap()
}
other => panic!("Unexpected request: {:?}", other),
});
remove(RemoveCommand { name: "MyRepo".to_owned() }, repos).await.unwrap();
assert_eq!(receiver.await.unwrap(), "MyRepo".to_owned());
}
#[fasync::run_singlethreaded(test)]
async fn test_remove_fail() {
let repos = setup_fake_repos(move |req| match req {
RepositoryRegistryRequest::RemoveRepository { responder, .. } => {
responder.send(false).unwrap()
}
other => panic!("Unexpected request: {:?}", other),
});
assert!(remove(RemoveCommand { name: "NotMyRepo".to_owned() }, repos).await.is_err());
}
}