coven_database/test_support/
circle_fixture.rs1use crate::DatabaseTestSql;
2
3impl DatabaseTestSql<'_> {
4 pub(crate) fn install_test_active_circle(
5 &self,
6 label: &str,
7 ) -> (
8 coven_protocol::circle::CircleId,
9 coven_protocol::circle::CircleControlCoord,
10 ) {
11 self.install_test_circle_current_state(label, true)
12 }
13
14 pub(crate) fn install_test_inactive_circle(
15 &self,
16 label: &str,
17 ) -> (
18 coven_protocol::circle::CircleId,
19 coven_protocol::circle::CircleControlCoord,
20 ) {
21 self.install_test_circle_current_state(label, false)
22 }
23
24 fn install_test_circle_current_state(
27 &self,
28 label: &str,
29 active: bool,
30 ) -> (
31 coven_protocol::circle::CircleId,
32 coven_protocol::circle::CircleControlCoord,
33 ) {
34 use coven_protocol::circle_activation_test_fixtures::test_circle_activation;
35 use coven_protocol::store_commit::ObjectHash;
36
37 let activation = test_circle_activation(label, active);
38 let control_coord = serde_json::to_string(&activation.control.coord)
39 .expect("serialize test Circle control coordinate");
40 self.install_circle_current_state(
41 activation.circle_id,
42 &control_coord,
43 &format!("{label}-device"),
44 ObjectHash::digest(format!("{label} commit").as_bytes()),
45 &activation.control.bytes,
46 active.then_some(activation.owner_pubkey.as_str()),
47 &serde_json::to_vec(&activation.current).expect("serialize test Circle current state"),
48 )
49 .expect("install test Circle state");
50 (activation.circle_id, activation.control.coord)
51 }
52}
53
54impl crate::Database {
55 pub async fn bind_circle_row_blob_for_test(
56 &self,
57 binding: coven_protocol::audience_package::RowBlobLocatorBinding,
58 package: coven_protocol::store_commit::CirclePackageRef,
59 owner: coven_protocol::store_commit::StoreBatchCommitRef,
60 ) {
61 let record = coven_protocol::remote_object::RemoteObjectRecord::activated_blob(
62 binding.blob(),
63 owner,
64 )
65 .expect("construct activated Circle blob")
66 .into_record();
67 let audience = coven_protocol::audience_package::PackageAudience::Circle {
68 circle_id: package.circle_id,
69 control: package.control,
70 key_fingerprint: package.key_fingerprint,
71 };
72 assert_eq!(
73 binding.blob().locator().audience(),
74 audience.remote_audience()
75 );
76 self.test_sql(move |database| {
77 database.install_blob_binding(
78 &record.object_id().to_string(),
79 &serde_json::to_string(&record)?,
80 &binding.blob().locator().locator_hash().to_string(),
81 binding.table(),
82 binding.row_id(),
83 binding.column(),
84 binding.row_stamp(),
85 &serde_json::to_string(&audience)?,
86 )
87 })
88 .await
89 .expect("bind Circle row blob");
90 }
91}