upleb.uk

Public git repos — served from a NIP-34 GRASP relay at git.upleb.uk

summaryrefslogtreecommitdiff
path: root/tests/send.rs
diff options
context:
space:
mode:
Diffstat (limited to 'tests/send.rs')
-rw-r--r--tests/send.rs226
1 files changed, 226 insertions, 0 deletions
diff --git a/tests/send.rs b/tests/send.rs
index 9c8561a..d8186bd 100644
--- a/tests/send.rs
+++ b/tests/send.rs
@@ -1130,4 +1130,230 @@ mod sends_2_patches_without_cover_letter {
1130 } 1130 }
1131 Ok(()) 1131 Ok(())
1132 } 1132 }
1133 mod specify_starting_commits {
1134 use super::*;
1135 fn cli_tester_create_proposal(git_repo: &GitTestRepo) -> CliTester {
1136 let args = vec![
1137 "--nsec",
1138 TEST_KEY_1_NSEC,
1139 "--password",
1140 TEST_PASSWORD,
1141 "--disable-cli-spinners",
1142 "send",
1143 "HEAD~3",
1144 "--no-cover-letter",
1145 ];
1146 CliTester::new_from_dir(&git_repo.dir, args)
1147 }
1148 fn expect_msgs_first(p: &mut CliTester) -> Result<()> {
1149 p.expect("creating patch for 3 commits\r\n")?;
1150 p.expect("searching for profile and relay updates...\r\n")?;
1151 p.expect("\r")?;
1152 p.expect("logged in as fred\r\n")?;
1153 p.expect("posting 3 patches without a covering letter...\r\n")?;
1154 Ok(())
1155 }
1156 async fn prep_run_create_proposal() -> Result<(
1157 Relay<'static>,
1158 Relay<'static>,
1159 Relay<'static>,
1160 Relay<'static>,
1161 Relay<'static>,
1162 )> {
1163 let git_repo = prep_git_repo()?;
1164 // fallback (51,52) user write (53, 55) repo (55, 56)
1165 let (mut r51, mut r52, mut r53, mut r55, mut r56) = (
1166 Relay::new(
1167 8051,
1168 None,
1169 Some(&|relay, client_id, subscription_id, _| -> Result<()> {
1170 relay.respond_events(
1171 client_id,
1172 &subscription_id,
1173 &vec![
1174 generate_test_key_1_metadata_event("fred"),
1175 generate_test_key_1_relay_list_event(),
1176 ],
1177 )?;
1178 Ok(())
1179 }),
1180 ),
1181 Relay::new(8052, None, None),
1182 Relay::new(8053, None, None),
1183 Relay::new(
1184 8055,
1185 None,
1186 Some(&|relay, client_id, subscription_id, _| -> Result<()> {
1187 relay.respond_events(
1188 client_id,
1189 &subscription_id,
1190 &vec![generate_repo_ref_event()],
1191 )?;
1192 Ok(())
1193 }),
1194 ),
1195 Relay::new(8056, None, None),
1196 );
1197
1198 // // check relay had the right number of events
1199 let cli_tester_handle = std::thread::spawn(move || -> Result<()> {
1200 let mut p = cli_tester_create_proposal(&git_repo);
1201 p.expect_end_eventually()?;
1202 for p in [51, 52, 53, 55, 56] {
1203 relay::shutdown_relay(8000 + p)?;
1204 }
1205 Ok(())
1206 });
1207
1208 // launch relay
1209 let _ = join!(
1210 r51.listen_until_close(),
1211 r52.listen_until_close(),
1212 r53.listen_until_close(),
1213 r55.listen_until_close(),
1214 r56.listen_until_close(),
1215 );
1216 cli_tester_handle.join().unwrap()?;
1217 Ok((r51, r52, r53, r55, r56))
1218 }
1219 mod cli_ouput {
1220 use super::*;
1221
1222 async fn run_test_async() -> Result<()> {
1223 let git_repo = prep_git_repo()?;
1224
1225 let (mut r51, mut r52, mut r53, mut r55, mut r56) = (
1226 Relay::new(
1227 8051,
1228 None,
1229 Some(&|relay, client_id, subscription_id, _| -> Result<()> {
1230 relay.respond_events(
1231 client_id,
1232 &subscription_id,
1233 &vec![
1234 generate_test_key_1_metadata_event("fred"),
1235 generate_test_key_1_relay_list_event(),
1236 ],
1237 )?;
1238 Ok(())
1239 }),
1240 ),
1241 Relay::new(8052, None, None),
1242 Relay::new(8053, None, None),
1243 Relay::new(
1244 8055,
1245 None,
1246 Some(&|relay, client_id, subscription_id, _| -> Result<()> {
1247 relay.respond_events(
1248 client_id,
1249 &subscription_id,
1250 &vec![generate_repo_ref_event()],
1251 )?;
1252 Ok(())
1253 }),
1254 ),
1255 Relay::new(8056, None, None),
1256 );
1257
1258 // // check relay had the right number of events
1259 let cli_tester_handle = std::thread::spawn(move || -> Result<()> {
1260 let mut p = cli_tester_create_proposal(&git_repo);
1261
1262 expect_msgs_first(&mut p)?;
1263 relay::expect_send_with_progress(
1264 &mut p,
1265 vec![
1266 (" [my-relay] [repo-relay] ws://localhost:8055", true, ""),
1267 (" [my-relay] ws://localhost:8053", true, ""),
1268 (" [repo-relay] ws://localhost:8056", true, ""),
1269 (" [default] ws://localhost:8051", true, ""),
1270 (" [default] ws://localhost:8052", true, ""),
1271 ],
1272 3,
1273 )?;
1274 p.expect_end_with_whitespace()?;
1275 for p in [51, 52, 53, 55, 56] {
1276 relay::shutdown_relay(8000 + p)?;
1277 }
1278 Ok(())
1279 });
1280
1281 // launch relay
1282 let _ = join!(
1283 r51.listen_until_close(),
1284 r52.listen_until_close(),
1285 r53.listen_until_close(),
1286 r55.listen_until_close(),
1287 r56.listen_until_close(),
1288 );
1289 cli_tester_handle.join().unwrap()?;
1290 Ok(())
1291 }
1292
1293 #[tokio::test]
1294 #[serial]
1295 async fn check_cli_output() -> Result<()> {
1296 run_test_async().await?;
1297 Ok(())
1298 }
1299 }
1300
1301 #[tokio::test]
1302 #[serial]
1303 async fn three_patch_events() -> Result<()> {
1304 let (_, _, r53, r55, r56) = prep_run_create_proposal().await?;
1305 for relay in [&r53, &r55, &r56] {
1306 assert_eq!(relay.events.iter().filter(|e| is_patch(e)).count(), 3);
1307 }
1308 Ok(())
1309 }
1310
1311 #[tokio::test]
1312 #[serial]
1313 async fn first_patch_is_ancestor_and_root_others_in_correct_order() -> Result<()> {
1314 let (_, _, r53, r55, r56) = prep_run_create_proposal().await?;
1315 for relay in [&r53, &r55, &r56] {
1316 let patch_events = relay
1317 .events
1318 .iter()
1319 .filter(|e| is_patch(e))
1320 .collect::<Vec<&nostr::Event>>();
1321
1322 // first patch tagged as root
1323 assert!(
1324 patch_events[0]
1325 .iter_tags()
1326 .any(|t| t.as_vec()[0].eq("t") && t.as_vec()[1].eq("root"))
1327 );
1328 // first patch is ancestor
1329 assert_eq!(
1330 patch_events[0]
1331 .iter_tags()
1332 .find(|t| t.as_vec()[0].eq("commit"))
1333 .unwrap()
1334 .as_vec()[1],
1335 "431b84edc0d2fa118d63faa3c2db9c73d630a5ae"
1336 );
1337 // second patch not tagged as root
1338 assert_eq!(
1339 patch_events[1]
1340 .iter_tags()
1341 .find(|t| t.as_vec()[0].eq("commit"))
1342 .unwrap()
1343 .as_vec()[1],
1344 "232efb37ebc67692c9e9ff58b83c0d3d63971a0a"
1345 );
1346 // second patch not tagged as root
1347 assert_eq!(
1348 patch_events[2]
1349 .iter_tags()
1350 .find(|t| t.as_vec()[0].eq("commit"))
1351 .unwrap()
1352 .as_vec()[1],
1353 "fe973a840fba2a8ab37dd505c154854a69a6505c"
1354 );
1355 }
1356 Ok(())
1357 }
1358 }
1133} 1359}