LCOV - code coverage report
Current view: top level - src/article - tests.rs (source / functions) Coverage Total Hit
Test: bliki.lcov Lines: 96.4 % 56 54
Test Date: 2025-11-27 15:46:07 Functions: 100.0 % 6 6

            Line data    Source code
       1              : use super::*;
       2              : use crate::db::setup_db;
       3              : use googletest::prelude::*;
       4              : 
       5              : #[test]
       6            1 : fn test_create_article() -> Result<()> {
       7            1 :     let db = setup_db(Some("testdata/test_sign_in.sql".into()));
       8            1 :     let params =
       9            1 :         ArticleCreateParams { title: "2 cool".to_string(), content: "4school".to_string() };
      10            1 :     let page_id = create_article(&db, params, 1)?;
      11            1 :     let mut stmt = db.prepare(
      12            1 :         "SELECT p.title, p.slug, r.content FROM pages p NATURAL JOIN revisions r
      13            1 : WHERE page_id = ? ORDER BY rev_id DESC LIMIT 1",
      14            0 :     )?;
      15            1 :     let (title, slug, content): (String, String, String) = stmt.query_row([&page_id], |row| {
      16            1 :         Ok((row.get("title")?, row.get("slug")?, row.get("content")?))
      17            1 :     })?;
      18            1 :     assert_eq!(title, "2 cool".to_string());
      19            1 :     assert_eq!(slug, "2%20cool".to_string());
      20            1 :     assert_eq!(content, "4school".to_string());
      21            1 :     Ok(())
      22            1 : }
      23              : 
      24              : #[test]
      25            1 : fn test_create_article_duplicate_slug() -> Result<()> {
      26            1 :     let db = setup_db(Some("testdata/test_sign_in.sql".into()));
      27            1 :     let params =
      28            1 :         ArticleCreateParams { title: "2 cool".to_string(), content: "4school".to_string() };
      29              :     // Use non-breaking space that has the same percent encoding so that the
      30              :     // conflict happens in the slug instead.
      31            1 :     let params_2 =
      32            1 :         ArticleCreateParams { title: "2 cool".to_string(), content: "4school".to_string() };
      33            1 :     assert_eq!(1, create_article(&db, params, 1)?);
      34            1 :     let ret = create_article(&db, params_2, 1);
      35            1 :     dbg!("Result: ", &ret);
      36            1 :     assert!(ret.is_err());
      37            1 :     Ok(())
      38            1 : }
      39              : 
      40              : #[test]
      41            1 : fn test_update_article() -> Result<()> {
      42            1 :     let db = setup_db(Some("testdata/find_by_slug.sql".into()));
      43            1 :     let params = ArticleUpdateParams {
      44            1 :         page_id: 1,
      45            1 :         title: "2 cool".to_string(),
      46            1 :         content: "4school".to_string(),
      47            1 :     };
      48            1 :     update_article(&db, &params, 1)?;
      49            1 :     let mut stmt = db.prepare(
      50            1 :         "SELECT r.rev_id, p.title, p.slug, r.content FROM pages p NATURAL JOIN revisions r
      51            1 : WHERE page_id = ? ORDER BY rev_id DESC LIMIT 1",
      52            0 :     )?;
      53            1 :     let (rev_id, title, slug, content): (i64, String, String, String) = stmt
      54            1 :         .query_row([1], |row| {
      55            1 :             Ok((row.get("rev_id")?, row.get("title")?, row.get("slug")?, row.get("content")?))
      56            1 :         })?;
      57            1 :     assert_eq!(rev_id, 2);
      58            1 :     assert_eq!(title, "2 cool".to_string());
      59            1 :     assert_eq!(slug, "2%20cool".to_string());
      60            1 :     assert_eq!(content, "4school".to_string());
      61            1 :     Ok(())
      62            1 : }
      63              : 
      64              : #[gtest]
      65              : fn test_latest_articles() -> Result<()> {
      66              :     let db = setup_db(Some("testdata/latest_articles.sql".into()));
      67              :     let articles = latest_articles(&db)?;
      68              :     expect_that!(
      69              :         articles,
      70              :         elements_are![
      71              :             pat!(Article { id: anything(), title: "Sixth", content: anything() }),
      72              :             pat!(Article { id: anything(), title: "Fifth", content: anything() }),
      73              :             pat!(Article { id: anything(), title: "Fourth", content: anything() }),
      74              :             pat!(Article { id: anything(), title: "Third", content: anything() }),
      75              :             pat!(Article { id: anything(), title: "Second", content: anything() }),
      76              :         ]
      77              :     );
      78              :     Ok(())
      79              : }
      80              : 
      81              : #[gtest]
      82              : fn test_find_by_id() -> Result<()> {
      83              :     let db = setup_db(Some("testdata/find_by_slug.sql".into()));
      84              :     let got = find_by_id(&db, 1)?;
      85              :     expect_that!(
      86              :         got,
      87              :         pat!(Article {
      88              :             id: anything(), // Why can't use some(eq(1)) here?
      89              :             title: "Some title",
      90              :             content: "some content",
      91              :         })
      92              :     );
      93              :     expect_that!(got.id, some(eq(1)));
      94              :     Ok(())
      95              : }
      96              : 
      97              : #[test]
      98            1 : fn test_find_by_id_empty() {
      99            1 :     let db = setup_db(None);
     100            1 :     let got = find_by_id(&db, 1);
     101            1 :     assert_eq!(got, Err(rusqlite::Error::QueryReturnedNoRows));
     102            1 : }
        

Generated by: LCOV version 2.0-1