Skip to content

Commit d4e0a86

Browse files
committed
controllers/helpers/pagination: Use insta snapshots for error message assertions
1 parent 028de50 commit d4e0a86

File tree

1 file changed

+26
-42
lines changed

1 file changed

+26
-42
lines changed

src/controllers/helpers/pagination.rs

Lines changed: 26 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -526,6 +526,7 @@ pub(crate) use seek;
526526
mod tests {
527527
use super::*;
528528
use http::{Method, Request, StatusCode};
529+
use insta::assert_snapshot;
529530

530531
#[test]
531532
fn no_pagination_param() {
@@ -536,17 +537,12 @@ mod tests {
536537

537538
#[test]
538539
fn page_param_parsing() {
539-
let assert_error =
540-
|query, msg| assert_pagination_error(PaginationOptions::builder(), query, msg);
541-
542-
let expected = "Failed to deserialize query string: cannot parse integer from empty string";
543-
assert_error("page=", expected);
544-
let expected = "Failed to deserialize query string: invalid digit found in string";
545-
assert_error("page=not_a_number", expected);
546-
let expected = "Failed to deserialize query string: invalid digit found in string";
547-
assert_error("page=1.0", expected);
548-
let expected = "Failed to deserialize query string: invalid value: integer `0`, expected a nonzero u32";
549-
assert_error("page=0", expected);
540+
let error = |query| pagination_error(PaginationOptions::builder(), query);
541+
542+
assert_snapshot!(error("page="), @"Failed to deserialize query string: cannot parse integer from empty string");
543+
assert_snapshot!(error("page=not_a_number"), @"Failed to deserialize query string: invalid digit found in string");
544+
assert_snapshot!(error("page=1.0"), @"Failed to deserialize query string: invalid digit found in string");
545+
assert_snapshot!(error("page=0"), @"Failed to deserialize query string: invalid value: integer `0`, expected a nonzero u32");
550546

551547
let pagination = PaginationOptions::builder()
552548
.gather(&mock("page=5"))
@@ -556,18 +552,13 @@ mod tests {
556552

557553
#[test]
558554
fn per_page_param_parsing() {
559-
let assert_error =
560-
|query, msg| assert_pagination_error(PaginationOptions::builder(), query, msg);
561-
562-
let expected = "Failed to deserialize query string: cannot parse integer from empty string";
563-
assert_error("per_page=", expected);
564-
let expected = "Failed to deserialize query string: invalid digit found in string";
565-
assert_error("per_page=not_a_number", expected);
566-
let expected = "Failed to deserialize query string: invalid digit found in string";
567-
assert_error("per_page=1.0", expected);
568-
assert_error("per_page=101", "cannot request more than 100 items");
569-
let expected = "Failed to deserialize query string: invalid value: integer `0`, expected a nonzero u32";
570-
assert_error("per_page=0", expected);
555+
let error = |query| pagination_error(PaginationOptions::builder(), query);
556+
557+
assert_snapshot!(error("per_page="), @"Failed to deserialize query string: cannot parse integer from empty string");
558+
assert_snapshot!(error("per_page=not_a_number"), @"Failed to deserialize query string: invalid digit found in string");
559+
assert_snapshot!(error("per_page=1.0"), @"Failed to deserialize query string: invalid digit found in string");
560+
assert_snapshot!(error("per_page=101"), @"cannot request more than 100 items");
561+
assert_snapshot!(error("per_page=0"), @"Failed to deserialize query string: invalid value: integer `0`, expected a nonzero u32");
571562

572563
let pagination = PaginationOptions::builder()
573564
.gather(&mock("per_page=5"))
@@ -577,11 +568,8 @@ mod tests {
577568

578569
#[test]
579570
fn seek_param_parsing() {
580-
assert_pagination_error(
581-
PaginationOptions::builder(),
582-
"seek=OTg",
583-
"?seek= is not supported for this request",
584-
);
571+
let error = pagination_error(PaginationOptions::builder(), "seek=OTg");
572+
assert_snapshot!(error, @"?seek= is not supported for this request");
585573

586574
let pagination = PaginationOptions::builder()
587575
.enable_seek(true)
@@ -600,25 +588,20 @@ mod tests {
600588

601589
#[test]
602590
fn both_page_and_seek() {
603-
assert_pagination_error(
604-
PaginationOptions::builder(),
605-
"page=1&seek=OTg",
606-
"providing both ?page= and ?seek= is unsupported",
607-
);
608-
assert_pagination_error(
591+
let error = pagination_error(PaginationOptions::builder(), "page=1&seek=OTg");
592+
assert_snapshot!(error, @"providing both ?page= and ?seek= is unsupported");
593+
594+
let error = pagination_error(
609595
PaginationOptions::builder().enable_seek(true),
610596
"page=1&seek=OTg",
611-
"providing both ?page= and ?seek= is unsupported",
612597
);
598+
assert_snapshot!(error, @"providing both ?page= and ?seek= is unsupported");
613599
}
614600

615601
#[test]
616602
fn disabled_pages() {
617-
assert_pagination_error(
618-
PaginationOptions::builder().enable_pages(false),
619-
"page=1",
620-
"?page= is not supported for this request",
621-
);
603+
let error = pagination_error(PaginationOptions::builder().enable_pages(false), "page=1");
604+
assert_snapshot!(error, @"?page= is not supported for this request");
622605
}
623606

624607
#[test]
@@ -751,11 +734,12 @@ mod tests {
751734
.0
752735
}
753736

754-
fn assert_pagination_error(options: PaginationOptionsBuilder, query: &str, message: &str) {
737+
fn pagination_error(options: PaginationOptionsBuilder, query: &str) -> String {
755738
let error = options.gather(&mock(query)).unwrap_err();
756-
assert_eq!(error.to_string(), message);
757739

758740
let response = error.response();
759741
assert_eq!(response.status(), StatusCode::BAD_REQUEST);
742+
743+
error.to_string()
760744
}
761745
}

0 commit comments

Comments
 (0)