Skip to main content

max / makenotwork

4.0 KB · 131 lines History Blame Raw
1 use crate::harness::TestHarness;
2
3 #[tokio::test]
4 async fn non_mod_cannot_pin() {
5 let mut h = TestHarness::new().await;
6 let owner_id = h.login_as("owner").await;
7 let comm_id = h.create_community("Test", "test").await;
8 let cat_id = h.create_category(comm_id, "General", "general").await;
9 h.add_membership(owner_id, comm_id, "owner").await;
10
11 let thread_id = h
12 .create_thread_with_post(cat_id, owner_id, "Pin Test", "Body")
13 .await;
14
15 // Login as a regular member
16 let member_id = h.login_as("member").await;
17 h.add_membership(member_id, comm_id, "member").await;
18
19 let thread_url = format!("/p/test/general/{thread_id}");
20 h.client.get(&thread_url).await;
21
22 let pin_url = format!("/p/test/general/{thread_id}/pin");
23 let resp = h.client.post_form(&pin_url, "").await;
24
25 assert_eq!(resp.status.as_u16(), 403);
26 }
27
28 #[tokio::test]
29 async fn mod_can_pin() {
30 let mut h = TestHarness::new().await;
31 let mod_id = h.login_as("moderator").await;
32 let comm_id = h.create_community("Test", "test").await;
33 let cat_id = h.create_category(comm_id, "General", "general").await;
34 h.add_membership(mod_id, comm_id, "moderator").await;
35
36 let thread_id = h
37 .create_thread_with_post(cat_id, mod_id, "Pin Me", "Body")
38 .await;
39
40 let thread_url = format!("/p/test/general/{thread_id}");
41 h.client.get(&thread_url).await;
42
43 let pin_url = format!("/p/test/general/{thread_id}/pin");
44 let resp = h.client.post_form(&pin_url, "").await;
45
46 assert!(
47 resp.status.is_redirection(),
48 "Expected redirect after pin, got {}",
49 resp.status
50 );
51 }
52
53 #[tokio::test]
54 async fn non_owner_cannot_access_settings() {
55 let mut h = TestHarness::new().await;
56 let owner_id = h.login_as("owner").await;
57 let comm_id = h.create_community("Test", "test").await;
58 h.add_membership(owner_id, comm_id, "owner").await;
59
60 let member_id = h.login_as("normie").await;
61 h.add_membership(member_id, comm_id, "member").await;
62
63 let resp = h.client.get("/p/test/settings").await;
64
65 assert_eq!(resp.status.as_u16(), 403);
66 }
67
68 #[tokio::test]
69 async fn owner_can_access_settings() {
70 let mut h = TestHarness::new().await;
71 let owner_id = h.login_as("settingsowner").await;
72 let comm_id = h.create_community("Test", "test").await;
73 h.add_membership(owner_id, comm_id, "owner").await;
74 let _cat_id = h.create_category(comm_id, "General", "general").await;
75
76 let resp = h.client.get("/p/test/settings").await;
77
78 assert!(
79 resp.status.is_success(),
80 "Expected 200, got {}",
81 resp.status
82 );
83 }
84
85 #[tokio::test]
86 async fn non_owner_cannot_create_category() {
87 let mut h = TestHarness::new().await;
88 let owner_id = h.login_as("catowner").await;
89 let comm_id = h.create_community("Test", "test").await;
90 h.add_membership(owner_id, comm_id, "owner").await;
91
92 let member_id = h.login_as("catmember").await;
93 h.add_membership(member_id, comm_id, "member").await;
94
95 // Get CSRF from some page
96 h.client.get("/").await;
97
98 let resp = h
99 .client
100 .post_form(
101 "/p/test/settings/categories/new",
102 "name=Hacked&slug=hacked&description=nope",
103 )
104 .await;
105
106 assert_eq!(resp.status.as_u16(), 403);
107 }
108
109 /// Posts are immutable, edit route no longer exists.
110 #[tokio::test]
111 async fn post_edit_route_returns_404() {
112 let mut h = TestHarness::new().await;
113 let user_id = h.login_as("lateEditor").await;
114 let comm_id = h.create_community("Test", "test").await;
115 let cat_id = h.create_category(comm_id, "General", "general").await;
116 h.add_membership(user_id, comm_id, "member").await;
117
118 let thread_id = h
119 .create_thread_with_post(cat_id, user_id, "Old Post", "Body")
120 .await;
121
122 let posts = mt_db::queries::list_posts_in_thread(&h.db, thread_id)
123 .await
124 .unwrap();
125 let post_id = posts[0].id;
126
127 let edit_url = format!("/p/test/general/{thread_id}/posts/{post_id}/edit");
128 let resp = h.client.get(&edit_url).await;
129 assert_eq!(resp.status.as_u16(), 404, "Edit route should be 404");
130 }
131