Skip to content

Commit 231b16e

Browse files
committed
Add snapshot testing with insta
1 parent 67fedc0 commit 231b16e

File tree

5 files changed

+119
-47
lines changed

5 files changed

+119
-47
lines changed

Cargo.lock

Lines changed: 50 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Cargo.toml

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,3 +40,9 @@ assert-json-diff = "2.0.2"
4040
assert_cmd = "2.0.16"
4141
wiremock = "0.6.2"
4242
predicates = "3.1.2"
43+
insta = { version = "1.41.1", features = ["yaml", "json"] }
44+
45+
# Improved insta runtime
46+
[profile.dev.package]
47+
insta.opt-level = 3
48+
similar.opt-level = 3

tests/integration/cli.rs

Lines changed: 19 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -27,72 +27,45 @@ fn run(
2727
cmd
2828
}
2929

30+
fn assert_snapshot_predicate() -> predicates::function::FnPredicate<impl Fn(&str) -> bool, str> {
31+
predicates::function::function(move |output: &str| {
32+
insta::assert_snapshot!(output);
33+
true
34+
})
35+
}
36+
3037
#[tokio::main]
3138
#[test]
32-
async fn test_get_timesheet() {
39+
async fn get_timesheet() {
3340
// Given
3441
let mock_server = MockServer::start().await;
3542
mock_get_instance(None).mount(&mock_server).await;
3643
mock_get_table_rows(None).mount(&mock_server).await;
3744
create_test_config();
3845

39-
let expected = serde_json::json!({
40-
"lines": [
41-
{
42-
"job": "Job One",
43-
"task": "Some task one",
44-
"week": {
45-
"monday": 8.0,
46-
"tuesday": 0.0,
47-
"wednesday": 0.0,
48-
"thursday": 0.0,
49-
"friday": 0.0,
50-
"saturday": 0.0,
51-
"sunday": 0.0
52-
}
53-
},
54-
{
55-
"job": "Job One",
56-
"task": "Some task two",
57-
"week": {
58-
"monday": 0.0,
59-
"tuesday": 0.0,
60-
"wednesday": 0.0,
61-
"thursday": 0.0,
62-
"friday": 0.0,
63-
"saturday": 0.0,
64-
"sunday": 0.0
65-
}
66-
}
67-
]
68-
});
69-
7046
// When
7147
let output = run_json(["get", "--format", "json"], &mock_server.uri());
7248

7349
// Then
74-
assert_json_diff::assert_json_include!(
75-
expected: expected,
76-
actual: output
77-
);
50+
insta::assert_json_snapshot!(output);
7851
}
7952

8053
#[tokio::main]
8154
#[test]
82-
async fn test_set_hours() {
55+
async fn set_hours() {
8356
// Given
8457
let mock_server = MockServer::start().await;
8558
mock_get_instance(None).mount(&mock_server).await;
8659
mock_get_table_rows(None).mount(&mock_server).await;
87-
// These mocks aren't actually required
60+
// These mocks aren't actually required here
8861
// mock_job_number_search(None).mount(&mock_server).await;
8962
// mock_tasks_search(None).mount(&mock_server).await;
9063
mock_add_row(None).mount(&mock_server).await;
9164
mock_set_hours(None).mount(&mock_server).await;
9265
create_test_config();
9366

9467
// When
95-
let cmd = [
68+
let command = [
9669
"set",
9770
"8",
9871
"--job",
@@ -102,15 +75,16 @@ async fn test_set_hours() {
10275
"--day",
10376
"monday",
10477
];
105-
let mut output = run(cmd, &mock_server.uri());
78+
let mut output = run(command, &mock_server.uri());
10679

10780
// Then
81+
// TODO: try to assert on the values sent to the mock
10882
output.assert().success();
10983
}
11084

11185
#[tokio::main]
11286
#[test]
113-
async fn test_set_hours_err() {
87+
async fn set_hours_err() {
11488
// Given
11589
let mock_server = MockServer::start().await;
11690
mock_get_instance(None).mount(&mock_server).await;
@@ -121,21 +95,19 @@ async fn test_set_hours_err() {
12195
create_test_config();
12296

12397
// When
124-
let cmd = [
98+
let command = [
12599
"set",
126100
"--job",
127101
"doesn't exist",
128102
"--task",
129103
"some task one",
130104
"8",
131105
];
132-
let mut output = run(cmd, &mock_server.uri());
106+
let mut output = run(command, &mock_server.uri());
133107

134-
let expected_stdoud_prefix = "Something went wrong when adding a new line to the time sheet: \
135-
did not find job 'doesn't exist' and task 'some task one', even after creating a new line \
136-
for it";
108+
// Then
137109
output
138110
.assert()
139-
.stderr(predicates::str::starts_with(expected_stdoud_prefix))
111+
.stderr(assert_snapshot_predicate())
140112
.failure();
141113
}
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
---
2+
source: tests/integration/cli.rs
3+
expression: output
4+
snapshot_kind: text
5+
---
6+
Something went wrong when adding a new line to the time sheet: did not find job 'doesn't exist' and task 'some task one', even after creating a new line for it
7+
8+
Error stack:
9+
- did not find job 'doesn't exist' and task 'some task one', even after creating a new line for it
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
---
2+
source: tests/integration/cli.rs
3+
expression: output
4+
snapshot_kind: text
5+
---
6+
{
7+
"lines": [
8+
{
9+
"job": "Job One",
10+
"task": "Some task one",
11+
"week": {
12+
"friday": 0.0,
13+
"monday": 8.0,
14+
"saturday": 0.0,
15+
"sunday": 0.0,
16+
"thursday": 0.0,
17+
"tuesday": 0.0,
18+
"wednesday": 0.0
19+
}
20+
},
21+
{
22+
"job": "Job One",
23+
"task": "Some task two",
24+
"week": {
25+
"friday": 0.0,
26+
"monday": 0.0,
27+
"saturday": 0.0,
28+
"sunday": 0.0,
29+
"thursday": 0.0,
30+
"tuesday": 0.0,
31+
"wednesday": 0.0
32+
}
33+
}
34+
]
35+
}

0 commit comments

Comments
 (0)