-
Notifications
You must be signed in to change notification settings - Fork 212
/
functionals_environment.rs
104 lines (89 loc) 路 2.79 KB
/
functionals_environment.rs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
use crate::common::*;
use datamodel::{common::ScalarType, DefaultValue};
use prisma_value::PrismaValue;
#[test]
fn skipping_of_env_vars() {
let dml = r#"
datasource db {
provider = "postgresql"
url = env("POSTGRES_URL")
}
model User {
id Int @id
tags String[]
}
"#;
// must fail without env var
parse_error(dml);
// must not fail when ignore flag is set
if let Err(err) = datamodel::parse_datamodel_and_ignore_env_errors(dml) {
panic!("Skipping env var errors did not work. Error was {:?}", err)
}
// must not fail with invalid env var set and ignore flag is set
std::env::set_var("POSTGRES_URL", "mysql://"); // wrong protocol
if let Err(err) = datamodel::parse_datamodel_and_ignore_env_errors(dml) {
panic!("Skipping env var errors did not work. Error was {:?}", err)
}
// must not fail with correct env var set
std::env::set_var("POSTGRES_URL", "postgresql://localhost:5432");
parse(dml);
}
#[ignore]
#[test]
fn interpolate_environment_variables() {
let dml = r#"
model User {
id Int @id
firstName String @default(env("TEST_USER"))
lastName String
}
"#;
std::env::set_var("TEST_USER", "prisma-user");
let schema = parse(dml);
let user_model = schema.assert_has_model("User");
user_model.assert_is_embedded(false);
user_model
.assert_has_field("firstName")
.assert_base_type(&ScalarType::String)
.assert_default_value(DefaultValue::Single(PrismaValue::String(String::from("prisma-user"))));
}
// This is very useless, except being a good test case.
#[ignore]
#[test]
fn interpolate_nested_environment_variables() {
let dml = r#"
model User {
id Int @id
firstName String @default(env(env("TEST_USER_VAR")))
lastName String
}
"#;
std::env::set_var("TEST_USER_VAR", "TEST_USER");
std::env::set_var("TEST_USER", "prisma-user");
let schema = parse(dml);
let user_model = schema.assert_has_model("User");
user_model.assert_is_embedded(false);
user_model
.assert_has_field("firstName")
.assert_base_type(&ScalarType::String)
.assert_default_value(DefaultValue::Single(PrismaValue::String(String::from("prisma-user"))));
}
#[ignore]
#[test]
fn ducktype_environment_variables() {
let dml = r#"
model User {
id Int @id
age Int @default(env("USER_AGE"))
name String
}
"#;
std::env::set_var("USER_AGE", "18");
let schema = parse(dml);
let user_model = schema.assert_has_model("User");
user_model.assert_is_embedded(false);
user_model
.assert_has_field("age")
.assert_base_type(&ScalarType::Int)
.assert_default_value(DefaultValue::Single(PrismaValue::Int(18)));
}