1 use crate::{schema::activity, Crud};
2 use diesel::{dsl::*, result::Error, *};
8 io::{Error as IoError, ErrorKind},
11 #[derive(Queryable, Identifiable, PartialEq, Debug)]
12 #[table_name = "activity"]
18 pub published: chrono::NaiveDateTime,
19 pub updated: Option<chrono::NaiveDateTime>,
22 #[derive(Insertable, AsChangeset)]
23 #[table_name = "activity"]
24 pub struct ActivityForm {
28 pub updated: Option<chrono::NaiveDateTime>,
31 impl Crud<ActivityForm> for Activity {
32 fn read(conn: &PgConnection, activity_id: i32) -> Result<Self, Error> {
33 use crate::schema::activity::dsl::*;
34 activity.find(activity_id).first::<Self>(conn)
37 fn create(conn: &PgConnection, new_activity: &ActivityForm) -> Result<Self, Error> {
38 use crate::schema::activity::dsl::*;
41 .get_result::<Self>(conn)
47 new_activity: &ActivityForm,
48 ) -> Result<Self, Error> {
49 use crate::schema::activity::dsl::*;
50 diesel::update(activity.find(activity_id))
52 .get_result::<Self>(conn)
56 pub fn do_insert_activity<T>(
61 ) -> Result<Activity, IoError>
65 debug!("inserting activity for user {}, data {:?}", user_id, &data);
66 let activity_form = ActivityForm {
68 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),
85 activity::{Activity, ActivityForm},
86 tests::establish_unpooled_connection,
87 user::{UserForm, User_},
92 use serde_json::Value;
96 let conn = establish_unpooled_connection();
98 let creator_form = UserForm {
99 name: "activity_creator_pm".into(),
100 preferred_username: None,
101 password_encrypted: "nope".into(),
103 matrix_user_id: None,
110 theme: "darkly".into(),
111 default_sort_type: SortType::Hot as i16,
112 default_listing_type: ListingType::Subscribed as i16,
113 lang: "browser".into(),
115 send_notifications_to_email: false,
121 last_refreshed_at: None,
124 let inserted_creator = User_::create(&conn, &creator_form).unwrap();
126 let test_json: Value = serde_json::from_str(
128 "street": "Article Circle Expressway 1",
129 "city": "North Pole",
135 let activity_form = ActivityForm {
136 user_id: inserted_creator.id,
137 data: test_json.to_owned(),
142 let inserted_activity = Activity::create(&conn, &activity_form).unwrap();
144 let expected_activity = Activity {
145 id: inserted_activity.id,
146 user_id: inserted_creator.id,
149 published: inserted_activity.published,
153 let read_activity = Activity::read(&conn, inserted_activity.id).unwrap();
154 User_::delete(&conn, inserted_creator.id).unwrap();
156 assert_eq!(expected_activity, read_activity);
157 assert_eq!(expected_activity, inserted_activity);