Property-test PushEvent JSON roundtrip
Assisted-by: Claude Opus 4.7 via Claude Code
change yukuznzklqppovpkqqzzuwxvklnuxvpo
commit 7a64d8c71d54fea46d05bedc11a6d4eaebfd1e82
author Alpha Chen <alpha@kejadlen.dev>
date
parent znxqmkyr
diff --git a/tests/property.rs b/tests/property.rs
index 0200779..59ca149 100644
--- a/tests/property.rs
+++ b/tests/property.rs
@@ -1,9 +1,36 @@
 use hegel::TestCase;
-use hegel::generators::integers;
+use hegel::generators::{integers, text, vecs};
+use quire::event::{PushEvent, PushRef};
+
+#[hegel::composite]
+fn push_ref(tc: TestCase) -> PushRef {
+    PushRef {
+        r#ref: tc.draw(text()),
+        old_sha: tc.draw(text()),
+        new_sha: tc.draw(text()),
+    }
+}
+
+#[hegel::composite]
+fn push_event(tc: TestCase) -> PushEvent {
+    // jiff::Timestamp range: -377705023201..=253402207200 seconds.
+    let secs = tc.draw(
+        integers::<i64>()
+            .min_value(-377_705_023_201)
+            .max_value(253_402_207_200),
+    );
+    PushEvent {
+        r#type: tc.draw(text()),
+        repo: tc.draw(text()),
+        pushed_at: jiff::Timestamp::from_second(secs).expect("timestamp in range"),
+        refs: tc.draw(vecs(push_ref()).max_size(8)),
+    }
+}
 
 #[hegel::test]
-fn integer_addition_is_commutative(tc: TestCase) {
-    let x = tc.draw(integers::<i64>());
-    let y = tc.draw(integers::<i64>());
-    assert_eq!(x.wrapping_add(y), y.wrapping_add(x));
+fn push_event_round_trips_json(tc: TestCase) {
+    let event = tc.draw(push_event());
+    let json = serde_json::to_string(&event).expect("serialize");
+    let parsed: PushEvent = serde_json::from_str(&json).expect("deserialize");
+    assert_eq!(event, parsed);
 }