Skip to main content

max / makenotwork

4.1 KB · 132 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/{}/pin", thread_id);
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/{}/pin", thread_id);
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 // Login as member
61 let member_id = h.login_as("normie").await;
62 h.add_membership(member_id, comm_id, "member").await;
63
64 let resp = h.client.get("/p/test/settings").await;
65
66 assert_eq!(resp.status.as_u16(), 403);
67 }
68
69 #[tokio::test]
70 async fn owner_can_access_settings() {
71 let mut h = TestHarness::new().await;
72 let owner_id = h.login_as("settingsowner").await;
73 let comm_id = h.create_community("Test", "test").await;
74 h.add_membership(owner_id, comm_id, "owner").await;
75 let _cat_id = h.create_category(comm_id, "General", "general").await;
76
77 let resp = h.client.get("/p/test/settings").await;
78
79 assert!(resp.status.is_success(), "Expected 200, got {}", resp.status);
80 }
81
82 #[tokio::test]
83 async fn non_owner_cannot_create_category() {
84 let mut h = TestHarness::new().await;
85 let owner_id = h.login_as("catowner").await;
86 let comm_id = h.create_community("Test", "test").await;
87 h.add_membership(owner_id, comm_id, "owner").await;
88
89 // Login as member
90 let member_id = h.login_as("catmember").await;
91 h.add_membership(member_id, comm_id, "member").await;
92
93 // Get CSRF from some page
94 h.client.get("/").await;
95
96 let resp = h
97 .client
98 .post_form(
99 "/p/test/settings/categories/new",
100 "name=Hacked&slug=hacked&description=nope",
101 )
102 .await;
103
104 assert_eq!(resp.status.as_u16(), 403);
105 }
106
107 /// Posts are immutable — edit route no longer exists.
108 #[tokio::test]
109 async fn post_edit_route_returns_404() {
110 let mut h = TestHarness::new().await;
111 let user_id = h.login_as("lateEditor").await;
112 let comm_id = h.create_community("Test", "test").await;
113 let cat_id = h.create_category(comm_id, "General", "general").await;
114 h.add_membership(user_id, comm_id, "member").await;
115
116 let thread_id = h
117 .create_thread_with_post(cat_id, user_id, "Old Post", "Body")
118 .await;
119
120 let posts = mt_db::queries::list_posts_in_thread(&h.db, thread_id)
121 .await
122 .unwrap();
123 let post_id = posts[0].id;
124
125 let edit_url = format!(
126 "/p/test/general/{}/posts/{}/edit",
127 thread_id, post_id
128 );
129 let resp = h.client.get(&edit_url).await;
130 assert_eq!(resp.status.as_u16(), 404, "Edit route should be 404");
131 }
132