hermod-api 0.1.2

Rapid and seamless customer interaction, designed for CS 495 at The University of Alabama.
Documentation
use reqwest::Method;
use uuid::Uuid;

use crate::helpers::spawn_app;

#[actix_rt::test]
async fn get_qr_code_data_returns_404_for_invalid_slug() {
    let app = spawn_app().await;

    let client = reqwest::Client::new();
    let slug = "1235";
    let response = client
        .get(&format!("{}/qr_code?slug={}", app.address, slug))
        .send()
        .await
        .expect("Failed to execute request.");

    assert!(response.status() == 404);
    assert_eq!(Some(0), response.content_length());
}

#[actix_rt::test]
async fn get_qr_code_data_returns_data_for_valid_slug() {
    let app = spawn_app().await;
    let slug = "12345";
    let data = "{color: 'blue'}";

    sqlx::query!(
        r#"
        INSERT INTO qr_code (id, account_id, slug, generation_data)
        VALUES ($1, $2, $3, $4)"#,
        Uuid::new_v4(),
        app.test_user.id,
        slug,
        data
    )
    .execute(&app.db_pool)
    .await
    .expect("Failed to execute query");

    let client = reqwest::Client::new();
    let response = client
        .get(&format!("{}/qr_code?slug={}", app.address, slug))
        .send()
        .await
        .expect("Failed to execute request.");

    assert!(response.status() == 200);
    let response_body = response
        .text()
        .await
        .expect("Failed to extract text from result");
    assert_eq!(response_body, "{\"generation_data\":\"{color: 'blue'}\"}");
}

#[actix_rt::test]
async fn store_qr_code_data_rejects_unauthorized_users() {
    let app = spawn_app().await;

    let client = reqwest::Client::new();
    let data = "test_data";
    let slug = "1235";
    let response = client
        .get(&format!(
            "{}/qr_code/store?generation_data={}&slug={}",
            app.address, data, slug
        ))
        .send()
        .await
        .expect("Failed to execute request.");
    assert!(response.status() == 401);
    assert_eq!(Some(0), response.content_length());
}

#[actix_rt::test]
async fn store_qr_code_data_accepts_valid_users() {
    let mut app = spawn_app().await;
    app.login().await.expect("Failed to log test user in");

    let data = "test_data";
    let slug = "123532";
    let response = app
        .send_request_with_auth(
            Method::GET,
            format!(
                "{}/qr_code/store?generation_data={}&slug={}",
                app.address, data, slug
            ),
        )
        .await
        .expect("Failed to send QR code storage request");

    assert!(response.status() == 200);
    assert_eq!(Some(0), response.content_length());
}