mod utils;
use crate::utils::consts::{
RESERVED_DATES_CREATE_TODO, RESERVED_DATES_CREATE_TODO_LIST, RESERVED_DATES_NESTED_CREATION, RESERVED_DATES_SCHEMA,
};
use chrono::{DateTime, Duration, Utc};
use serde_json::{json, Value};
use utils::environment::Environment;
#[test]
fn reserved_dates() {
let mut env = Environment::init(4018);
env.grafbase_init();
env.write_schema(RESERVED_DATES_SCHEMA);
env.grafbase_dev();
let client = env.create_client();
client.poll_endpoint(30, 300);
let response = client.gql::<Value>(
json!({
"query": RESERVED_DATES_NESTED_CREATION,
"variables": {}
})
.to_string(),
);
let user: Value = dot_get!(response, "data.userCreate.user");
assert_eq!(dot_get!(user, "name", String), "John");
assert_eq!(dot_get!(user, "email", String), "john@example.org");
assert!(!dot_get!(user, "id", String).is_empty());
let created_at = dot_get!(user, "createdAt", String);
assert!(created_at
.parse::<DateTime<Utc>>()
.expect("Should have a valid datetime")
.gt(&Utc::now().checked_sub_signed(Duration::hours(1)).unwrap()));
assert_eq!(dot_get!(user, "updatedAt", String), created_at);
let post: Value = dot_get!(user, "posts.edges.0.node");
assert_eq!(dot_get!(post, "title", String), "10 ways to pet your dog!");
assert_eq!(dot_get!(post, "content", String), "Dogs are the best.");
assert!(!dot_get!(post, "id", String).is_empty());
assert_eq!(dot_get!(post, "createdAt", String), created_at);
assert_eq!(dot_get!(post, "updatedAt", String), created_at);
let comment: Value = dot_get!(post, "comments.edges.0.node");
assert_eq!(dot_get!(comment, "content", String), "Awesome!");
assert!(!dot_get!(comment, "id", String).is_empty());
assert_eq!(dot_get!(comment, "createdAt", String), created_at);
assert_eq!(dot_get!(comment, "updatedAt", String), created_at);
let nested_user: Value = dot_get!(comment, "user");
assert_eq!(dot_get!(nested_user, "name", String), "Alice");
assert_eq!(dot_get!(nested_user, "email", String), "alice@example.org");
assert!(!dot_get!(nested_user, "id", String).is_empty());
assert_ne!(dot_get!(nested_user, "id", String), dot_get!(user, "id", String));
assert_eq!(dot_get!(nested_user, "createdAt", String), created_at);
assert_eq!(dot_get!(nested_user, "updatedAt", String), created_at);
let response = client.gql::<Value>(
json!({
"query": RESERVED_DATES_CREATE_TODO,
"variables": {
"title": "Champion"
}
})
.to_string(),
);
let todo: Value = dot_get!(response, "data.todoCreate.todo");
let todo_created_at = dot_get!(todo, "createdAt", String);
assert!(todo_created_at
.parse::<DateTime<Utc>>()
.expect("Should have a valid datetime")
.gt(&Utc::now().checked_sub_signed(Duration::hours(1)).unwrap()));
assert_eq!(dot_get!(todo, "updatedAt", String), todo_created_at);
let response = client.gql::<Value>(
json!({
"query": RESERVED_DATES_CREATE_TODO_LIST,
"variables": {
"title": "Champion List",
"todoId": dot_get!(todo, "id", String)
}
})
.to_string(),
);
let todo_list: Value = dot_get!(response, "data.todoListCreate.todoList");
let todo_list_created_at = dot_get!(todo_list, "createdAt", String);
assert!(todo_list_created_at
.parse::<DateTime<Utc>>()
.expect("Should have a valid datetime")
.gt(&Utc::now().checked_sub_signed(Duration::hours(1)).unwrap()));
assert_eq!(dot_get!(todo_list, "updatedAt", String), todo_list_created_at);
assert_ne!(todo_created_at, todo_list_created_at);
let nested_todo: Value = dot_get!(todo_list, "todos.edges.0.node");
assert_eq!(dot_get!(nested_todo, "createdAt", String), todo_created_at);
assert_eq!(dot_get!(nested_todo, "updatedAt", String), todo_created_at);
}