Sanford Pun 5143307b3e
Demonstrate how to mock test SeaORM by separating core implementation from the web API (#890)
* Move core implementations to a standalone crate

* Set up integration test skeleton in `core`

* Demonstrate mock testing with query

* Move Rocket api code to a standalone crate

* Add mock execution

* Add MyDataMyConsent in COMMUNITY.md (#889)

* Add MyDataMyConsent in COMMUNITY.md

* Update MyDataMyConsent description in COMMUNITY.md

* Update COMMUNITY.md

Chronological order

* [cli] bump sea-schema to 0.9.3 (SeaQL/sea-orm#876)

* Update CHNAGELOG PR links

* 0.9.1 CHANGELOG

* Auto discover and run all issues & examples CI (#903)

* Auto discover and run all [issues] CI

* Auto discover and run all examples CI

* Fixup

* Testing

* Test [issues]

* Compile prepare_mock_db() conditionally based on "mock" feature

* Update workflow job to run mock test if `core` folder exists

* Update Actix3 example

* Fix merge conflict human error

* Update usize used in paginate to u64 (PR#789)

* Update sea-orm version in the Rocket example to 0.10.0

* Fix GitHub workflow to run mock test for core crates

* Increase the robustness of core crate check by verifying that the `core` folder is a crate

* Update Actix(4) example

* Update Axum example

* Update GraphQL example

* Update Jsonrpsee example

* Update Poem example

* Update Tonic example

* Cargo fmt

* Update Salvo example

* Update path of core/Cargo.toml in README.md

* Add mock test instruction in README.md

* Refactoring

* Fix Rocket examples

Co-authored-by: Amit Goyani <63532626+itsAmitGoyani@users.noreply.github.com>
Co-authored-by: Billy Chan <ccw.billy.123@gmail.com>
2022-09-23 12:57:43 +08:00

52 lines
1.2 KiB
Rust

use axum::http::{header, HeaderMap, HeaderValue, StatusCode};
use serde::{de::DeserializeOwned, Deserialize, Serialize};
use tower_cookies::{Cookie, Cookies};
#[derive(Deserialize)]
struct ValuedMessage<T> {
#[serde(rename = "_")]
value: T,
}
#[derive(Serialize)]
struct ValuedMessageRef<'a, T> {
#[serde(rename = "_")]
value: &'a T,
}
const FLASH_COOKIE_NAME: &str = "_flash";
pub fn get_flash_cookie<T>(cookies: &Cookies) -> Option<T>
where
T: DeserializeOwned,
{
cookies.get(FLASH_COOKIE_NAME).and_then(|flash_cookie| {
if let Ok(ValuedMessage::<T> { value }) = serde_json::from_str(flash_cookie.value()) {
Some(value)
} else {
None
}
})
}
pub type PostResponse = (StatusCode, HeaderMap);
pub fn post_response<T>(cookies: &mut Cookies, data: T) -> PostResponse
where
T: Serialize,
{
let valued_message_ref = ValuedMessageRef { value: &data };
let mut cookie = Cookie::new(
FLASH_COOKIE_NAME,
serde_json::to_string(&valued_message_ref).unwrap(),
);
cookie.set_path("/");
cookies.add(cookie);
let mut header = HeaderMap::new();
header.insert(header::LOCATION, HeaderValue::from_static("/"));
(StatusCode::SEE_OTHER, header)
}