2 use diesel::{dsl::*, result::Error, *};
3 use lemmy_db_schema::source::activity::*;
8 io::{Error as IoError, ErrorKind},
11 impl Crud<ActivityForm> for Activity {
12 fn read(conn: &PgConnection, activity_id: i32) -> Result<Self, Error> {
13 use lemmy_db_schema::schema::activity::dsl::*;
14 activity.find(activity_id).first::<Self>(conn)
17 fn create(conn: &PgConnection, new_activity: &ActivityForm) -> Result<Self, Error> {
18 use lemmy_db_schema::schema::activity::dsl::*;
21 .get_result::<Self>(conn)
27 new_activity: &ActivityForm,
28 ) -> Result<Self, Error> {
29 use lemmy_db_schema::schema::activity::dsl::*;
30 diesel::update(activity.find(activity_id))
32 .get_result::<Self>(conn)
34 fn delete(conn: &PgConnection, activity_id: i32) -> Result<usize, Error> {
35 use lemmy_db_schema::schema::activity::dsl::*;
36 diesel::delete(activity.find(activity_id)).execute(conn)
47 ) -> Result<Activity, IoError>
50 fn read_from_apub_id(conn: &PgConnection, object_id: &str) -> Result<Activity, Error>;
53 impl Activity_ for Activity {
60 ) -> Result<Activity, IoError>
64 debug!("{}", serde_json::to_string_pretty(&data)?);
65 let activity_form = ActivityForm {
67 data: serde_json::to_value(&data)?,
72 let result = Activity::create(&conn, &activity_form);
75 Err(e) => Err(IoError::new(
77 format!("Failed to insert activity into database: {}", e),
82 fn read_from_apub_id(conn: &PgConnection, object_id: &str) -> Result<Activity, Error> {
83 use lemmy_db_schema::schema::activity::dsl::*;
84 activity.filter(ap_id.eq(object_id)).first::<Self>(conn)
91 establish_unpooled_connection,
92 source::activity::Activity_,
97 use lemmy_db_schema::source::{
98 activity::{Activity, ActivityForm},
99 user::{UserForm, User_},
101 use serde_json::Value;
105 let conn = establish_unpooled_connection();
107 let creator_form = UserForm {
108 name: "activity_creator_pm".into(),
109 preferred_username: None,
110 password_encrypted: "nope".into(),
112 matrix_user_id: None,
120 theme: "browser".into(),
121 default_sort_type: SortType::Hot as i16,
122 default_listing_type: ListingType::Subscribed as i16,
123 lang: "browser".into(),
125 send_notifications_to_email: false,
131 last_refreshed_at: None,
134 let inserted_creator = User_::create(&conn, &creator_form).unwrap();
137 "https://enterprise.lemmy.ml/activities/delete/f1b5d57c-80f8-4e03-a615-688d552e946c";
138 let test_json: Value = serde_json::from_str(
140 "@context": "https://www.w3.org/ns/activitystreams",
141 "id": "https://enterprise.lemmy.ml/activities/delete/f1b5d57c-80f8-4e03-a615-688d552e946c",
143 "actor": "https://enterprise.lemmy.ml/u/riker",
144 "to": "https://www.w3.org/ns/activitystreams#Public",
146 "https://enterprise.lemmy.ml/c/main/"
148 "object": "https://enterprise.lemmy.ml/post/32"
152 let activity_form = ActivityForm {
153 ap_id: ap_id.to_string(),
154 data: test_json.to_owned(),
160 let inserted_activity = Activity::create(&conn, &activity_form).unwrap();
162 let expected_activity = Activity {
163 ap_id: Some(ap_id.to_string()),
164 id: inserted_activity.id,
167 sensitive: Some(false),
168 published: inserted_activity.published,
172 let read_activity = Activity::read(&conn, inserted_activity.id).unwrap();
173 let read_activity_by_apub_id = Activity::read_from_apub_id(&conn, ap_id).unwrap();
174 User_::delete(&conn, inserted_creator.id).unwrap();
175 Activity::delete(&conn, inserted_activity.id).unwrap();
177 assert_eq!(expected_activity, read_activity);
178 assert_eq!(expected_activity, read_activity_by_apub_id);
179 assert_eq!(expected_activity, inserted_activity);