Skip to content

Commit

Permalink
GetConfig needs to be a string, not a string[] (#2120)
Browse files Browse the repository at this point in the history
  • Loading branch information
Julius de Bruijn committed Aug 3, 2021
1 parent 10a1bec commit 7a25b4c
Show file tree
Hide file tree
Showing 3 changed files with 86 additions and 84 deletions.
4 changes: 2 additions & 2 deletions libs/datamodel/core/src/json/mcf/source.rs
Expand Up @@ -4,7 +4,7 @@ use crate::configuration::{self, StringFromEnvVar};
#[serde(rename_all = "camelCase")]
pub struct SourceConfig {
pub name: String,
pub provider: Vec<String>,
pub provider: String,
pub active_provider: String,
pub url: StringFromEnvVar,
#[serde(skip_serializing_if = "Option::is_none")]
Expand Down Expand Up @@ -34,7 +34,7 @@ fn sources_to_json_structs(sources: &[configuration::Datasource]) -> Vec<SourceC
fn source_to_json_struct(source: &configuration::Datasource) -> SourceConfig {
SourceConfig {
name: source.name.clone(),
provider: vec![source.provider.clone()],
provider: source.provider.clone(),
active_provider: source.active_provider.to_string(),
url: source.url.clone(),
documentation: source.documentation.clone(),
Expand Down
164 changes: 83 additions & 81 deletions libs/datamodel/core/tests/config/datasources.rs
@@ -1,98 +1,100 @@
use crate::common::parse_configuration;
use pretty_assertions::assert_eq;
use crate::common::*;
use indoc::indoc;

#[test]
fn serialize_builtin_sources_to_dmmf() {
std::env::set_var("pg2", "postgresql://localhost/postgres2");

let schema1 = r#"datasource pg1 {
let schema = indoc! { r#"
datasource pg1 {
provider = "postgresql"
url = "postgresql://localhost/postgres1"
}"#;

let expected_dmmf_1 = r#"[
{
"name": "pg1",
"provider": ["postgresql"],
"activeProvider": "postgresql",
"url": {
"fromEnvVar": null,
"value": "postgresql://localhost/postgres1"
}
}
]"#;

assert_rendered_mcf(schema1, expected_dmmf_1);

let schema2 = r#"datasource pg2 {
}
"#};

let expect = expect![[r#"
[
{
"name": "pg1",
"provider": "postgresql",
"activeProvider": "postgresql",
"url": {
"fromEnvVar": null,
"value": "postgresql://localhost/postgres1"
}
}
]"#]];

expect.assert_eq(&render_schema_json(schema));

let schema = indoc! {r#"
datasource pg2 {
provider = "postgresql"
url = env("pg2")
}"#;

let expected_dmmf_2 = r#"[
{
"name": "pg2",
"provider": ["postgresql"],
"activeProvider": "postgresql",
"url": {
"fromEnvVar": "pg2",
"value": null
}
}
]"#;

assert_rendered_mcf(schema2, expected_dmmf_2);

let schema3 = r#"datasource sqlite1 {
}
"#};

let expect = expect![[r#"
[
{
"name": "pg2",
"provider": "postgresql",
"activeProvider": "postgresql",
"url": {
"fromEnvVar": "pg2",
"value": null
}
}
]"#]];

expect.assert_eq(&render_schema_json(schema));

let schema = indoc! {r#"
datasource sqlite1 {
provider = "sqlite"
url = "sqlite://file.db"
}"#;

let expected_dmmf_3 = r#"[
{
"name": "sqlite1",
"provider": ["sqlite"],
"activeProvider": "sqlite",
"url": {
"fromEnvVar": null,
"value": "sqlite://file.db"
}
}
]"#;

assert_rendered_mcf(schema3, expected_dmmf_3);

let schema4 = r#"datasource mysql1 {
}
"#};

let expect = expect![[r#"
[
{
"name": "sqlite1",
"provider": "sqlite",
"activeProvider": "sqlite",
"url": {
"fromEnvVar": null,
"value": "sqlite://file.db"
}
}
]"#]];

expect.assert_eq(&render_schema_json(schema));

let schema = indoc! {r#"
datasource mysql1 {
provider = "mysql"
url = "mysql://localhost"
}"#;
let expected_dmmf_4 = r#"[
{
"name": "mysql1",
"provider": ["mysql"],
"activeProvider": "mysql",
"url": {
"fromEnvVar": null,
"value": "mysql://localhost"
}
}
]"#;

assert_rendered_mcf(schema4, expected_dmmf_4);
}
"#};

let expect = expect![[r#"
[
{
"name": "mysql1",
"provider": "mysql",
"activeProvider": "mysql",
"url": {
"fromEnvVar": null,
"value": "mysql://localhost"
}
}
]"#]];

expect.assert_eq(&render_schema_json(schema));
}

fn assert_rendered_mcf(schema: &str, expected_dmmf: &str) {
fn render_schema_json(schema: &str) -> String {
let config = parse_configuration(schema);
let rendered = datamodel::json::mcf::render_sources_to_json(&config.datasources);

print!("{}", &rendered);

assert_eq_json(&rendered, expected_dmmf);
}

fn assert_eq_json(a: &str, b: &str) {
let json_a: serde_json::Value = serde_json::from_str(a).expect("The String a was not valid JSON.");
let json_b: serde_json::Value = serde_json::from_str(b).expect("The String b was not valid JSON.");

assert_eq!(json_a, json_b);
datamodel::json::mcf::render_sources_to_json(&config.datasources)
}
2 changes: 1 addition & 1 deletion libs/datamodel/core/tests/config/sources.rs
Expand Up @@ -265,7 +265,7 @@ fn new_lines_in_source_must_work() {
let expected = r#"[
{
"name": "ds",
"provider": ["postgresql"],
"provider": "postgresql",
"activeProvider": "postgresql",
"url": {
"fromEnvVar": null,
Expand Down

0 comments on commit 7a25b4c

Please sign in to comment.