• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

geo-engine / geoengine / 13897582079

17 Mar 2025 10:49AM UTC coverage: 90.607%. First build
13897582079

Pull #1013

github

web-flow
Merge 3dfe5ebe8 into 55ff63a65
Pull Request #1013: Update-utoipa

1050 of 1273 new or added lines in 47 files covered. (82.48%)

100243 of 110635 relevant lines covered (90.61%)

72751.77 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

97.87
/services/src/cli/openapi.rs
1
#![allow(clippy::print_stderr, clippy::print_stdout)] // okay in CLI
2

3
use crate::api::apidoc::ApiDoc;
4
use clap::Parser;
5
use geoengine_operators::util::spawn_blocking;
6
use utoipa::OpenApi;
7

8
/// Checks if the Geo Engine server is alive
9
#[derive(Debug, Parser)]
10
pub struct OpenAPIGenerate;
11

12
/// Outputs OpenAPI JSON to `STDOUT`
13
pub async fn output_openapi_json(_params: OpenAPIGenerate) -> Result<(), anyhow::Error> {
2✔
14
    spawn_blocking(_output_openapi_json).await?
2✔
15
}
2✔
16

17
fn _output_openapi_json() -> Result<(), anyhow::Error> {
2✔
18
    let mut spec = ApiDoc::openapi();
2✔
19

2✔
20
    // make server a wildcard
2✔
21
    spec.servers = Some(vec![utoipa::openapi::ServerBuilder::new()
2✔
22
        .url("{server}/api")
2✔
23
        .parameter(
2✔
24
            "server",
2✔
25
            utoipa::openapi::ServerVariableBuilder::new()
2✔
26
                .default_value("https://geoengine.io")
2✔
27
                .build(),
2✔
28
        )
2✔
29
        .build()]);
2✔
30

31
    println!("{}", serde_json::to_string_pretty(&spec)?);
2✔
32

33
    Ok(())
2✔
34
}
2✔
35

36
#[cfg(test)]
37
mod tests {
38
    use super::*;
39
    use assert_cmd::cargo::CommandCargoExt;
40
    use std::{
41
        path::{Path, PathBuf},
42
        process::{Command, Stdio},
43
    };
44

45
    #[test]
46
    fn it_generates_json() {
1✔
47
        let cli_result = Command::cargo_bin("geoengine-cli")
1✔
48
            .unwrap()
1✔
49
            .arg("openapi")
1✔
50
            .current_dir(workspace_dir())
1✔
51
            .stdout(Stdio::piped())
1✔
52
            .output()
1✔
53
            .unwrap();
1✔
54

1✔
55
        assert!(
1✔
56
            cli_result.status.success(),
1✔
NEW
57
            "failed to run CLI: {cli_result:?}",
×
58
        );
59

60
        let _openapi_spec: serde_json::Value = serde_json::from_slice(&cli_result.stdout).unwrap();
1✔
61
    }
1✔
62

63
    fn workspace_dir() -> PathBuf {
1✔
64
        let output = Command::new(env!("CARGO"))
1✔
65
            .arg("locate-project")
1✔
66
            .arg("--workspace")
1✔
67
            .arg("--message-format=plain")
1✔
68
            .output()
1✔
69
            .unwrap()
1✔
70
            .stdout;
1✔
71
        let cargo_path = Path::new(std::str::from_utf8(&output).unwrap().trim());
1✔
72
        cargo_path.parent().unwrap().to_path_buf()
1✔
73
    }
1✔
74

75
    #[tokio::test]
76
    async fn it_runs_successfully() {
1✔
77
        output_openapi_json(OpenAPIGenerate).await.unwrap();
1✔
78
    }
1✔
79
}
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc