diff options
Diffstat (limited to 'test_utils/src')
| -rw-r--r-- | test_utils/src/git.rs | 24 | ||||
| -rw-r--r-- | test_utils/src/lib.rs | 78 |
2 files changed, 101 insertions, 1 deletions
diff --git a/test_utils/src/git.rs b/test_utils/src/git.rs index ab21f38..a18f81c 100644 --- a/test_utils/src/git.rs +++ b/test_utils/src/git.rs | |||
| @@ -282,6 +282,30 @@ impl GitTestRepo { | |||
| 282 | branch.set_upstream(Some(&format!("origin/{branch_name}")))?; | 282 | branch.set_upstream(Some(&format!("origin/{branch_name}")))?; |
| 283 | self.checkout(branch_name) | 283 | self.checkout(branch_name) |
| 284 | } | 284 | } |
| 285 | |||
| 286 | /// Set nostr.repo git config to point to a specific pubkey's coordinate. | ||
| 287 | /// Used for State D/E tests where the coordinate points to another user. | ||
| 288 | pub fn set_nostr_repo_coordinate( | ||
| 289 | &self, | ||
| 290 | pubkey: &nostr::PublicKey, | ||
| 291 | identifier: &str, | ||
| 292 | relays: &[&str], | ||
| 293 | ) { | ||
| 294 | let relay_urls: Vec<nostr::RelayUrl> = relays | ||
| 295 | .iter() | ||
| 296 | .map(|r| nostr::RelayUrl::parse(r).unwrap()) | ||
| 297 | .collect(); | ||
| 298 | let coordinate = Nip19Coordinate { | ||
| 299 | coordinate: Coordinate::new(nostr::Kind::GitRepoAnnouncement, *pubkey) | ||
| 300 | .identifier(identifier.to_string()), | ||
| 301 | relays: relay_urls, | ||
| 302 | }; | ||
| 303 | let _ = self | ||
| 304 | .git_repo | ||
| 305 | .config() | ||
| 306 | .unwrap() | ||
| 307 | .set_str("nostr.repo", &coordinate.to_bech32().unwrap()); | ||
| 308 | } | ||
| 285 | } | 309 | } |
| 286 | 310 | ||
| 287 | impl Drop for GitTestRepo { | 311 | impl Drop for GitTestRepo { |
diff --git a/test_utils/src/lib.rs b/test_utils/src/lib.rs index bdfc550..a9a6d1e 100644 --- a/test_utils/src/lib.rs +++ b/test_utils/src/lib.rs | |||
| @@ -208,6 +208,82 @@ pub fn generate_repo_ref_event_with_git_server_with_keys( | |||
| 208 | .sign_with_keys(keys) | 208 | .sign_with_keys(keys) |
| 209 | .unwrap() | 209 | .unwrap() |
| 210 | } | 210 | } |
| 211 | |||
| 212 | /// Generate a repo announcement event signed by TEST_KEY_2 that lists | ||
| 213 | /// TEST_KEY_1 as a maintainer. Used for State D tests (co-maintainer scenario). | ||
| 214 | pub fn generate_repo_ref_event_as_key_2_listing_key_1() -> nostr::Event { | ||
| 215 | generate_repo_ref_event_as_key_2_with_maintainers(vec![ | ||
| 216 | TEST_KEY_2_KEYS.public_key().to_string(), | ||
| 217 | TEST_KEY_1_KEYS.public_key().to_string(), | ||
| 218 | ]) | ||
| 219 | } | ||
| 220 | |||
| 221 | /// Generate a repo announcement event signed by TEST_KEY_2 that does NOT list | ||
| 222 | /// TEST_KEY_1. Used for State E tests (not listed scenario). | ||
| 223 | pub fn generate_repo_ref_event_as_key_2_not_listing_key_1() -> nostr::Event { | ||
| 224 | generate_repo_ref_event_as_key_2_with_maintainers(vec![ | ||
| 225 | TEST_KEY_2_KEYS.public_key().to_string(), | ||
| 226 | ]) | ||
| 227 | } | ||
| 228 | |||
| 229 | /// Generate a repo announcement event signed by TEST_KEY_2 with specific | ||
| 230 | /// maintainers. | ||
| 231 | fn generate_repo_ref_event_as_key_2_with_maintainers(maintainers: Vec<String>) -> nostr::Event { | ||
| 232 | let root_commit = "9ee507fc4357d7ee16a5d8901bedcd103f23c17d"; | ||
| 233 | nostr::event::EventBuilder::new(nostr::Kind::GitRepoAnnouncement, "") | ||
| 234 | .tags([ | ||
| 235 | Tag::identifier(format!("{root_commit}-consider-it-random")), | ||
| 236 | Tag::from_standardized(TagStandard::Reference(root_commit.to_string())), | ||
| 237 | Tag::from_standardized(TagStandard::Name("example name".into())), | ||
| 238 | Tag::from_standardized(TagStandard::Description("example description".into())), | ||
| 239 | Tag::custom( | ||
| 240 | nostr::TagKind::Custom(std::borrow::Cow::Borrowed("clone")), | ||
| 241 | vec!["git:://123.gitexample.com/test".to_string()], | ||
| 242 | ), | ||
| 243 | Tag::custom( | ||
| 244 | nostr::TagKind::Custom(std::borrow::Cow::Borrowed("web")), | ||
| 245 | vec![ | ||
| 246 | "https://exampleproject.xyz".to_string(), | ||
| 247 | "https://gitworkshop.dev/123".to_string(), | ||
| 248 | ], | ||
| 249 | ), | ||
| 250 | Tag::custom( | ||
| 251 | nostr::TagKind::Custom(std::borrow::Cow::Borrowed("relays")), | ||
| 252 | vec![ | ||
| 253 | "ws://localhost:8055".to_string(), | ||
| 254 | "ws://localhost:8056".to_string(), | ||
| 255 | ], | ||
| 256 | ), | ||
| 257 | Tag::custom( | ||
| 258 | nostr::TagKind::Custom(std::borrow::Cow::Borrowed("maintainers")), | ||
| 259 | maintainers, | ||
| 260 | ), | ||
| 261 | ]) | ||
| 262 | .sign_with_keys(&TEST_KEY_2_KEYS) | ||
| 263 | .unwrap() | ||
| 264 | } | ||
| 265 | |||
| 266 | /// Generate relay list event for TEST_KEY_2 (same relays as KEY_1 for | ||
| 267 | /// simplicity) | ||
| 268 | pub fn generate_test_key_2_relay_list_event() -> nostr::Event { | ||
| 269 | nostr::event::EventBuilder::new(nostr::Kind::RelayList, "") | ||
| 270 | .tags([ | ||
| 271 | nostr::Tag::from_standardized(nostr::TagStandard::RelayMetadata { | ||
| 272 | relay_url: nostr::RelayUrl::from_str("ws://localhost:8053").unwrap(), | ||
| 273 | metadata: Some(RelayMetadata::Write), | ||
| 274 | }), | ||
| 275 | nostr::Tag::from_standardized(nostr::TagStandard::RelayMetadata { | ||
| 276 | relay_url: nostr::RelayUrl::from_str("ws://localhost:8054").unwrap(), | ||
| 277 | metadata: Some(RelayMetadata::Read), | ||
| 278 | }), | ||
| 279 | nostr::Tag::from_standardized(nostr::TagStandard::RelayMetadata { | ||
| 280 | relay_url: nostr::RelayUrl::from_str("ws://localhost:8055").unwrap(), | ||
| 281 | metadata: None, | ||
| 282 | }), | ||
| 283 | ]) | ||
| 284 | .sign_with_keys(&TEST_KEY_2_KEYS) | ||
| 285 | .unwrap() | ||
| 286 | } | ||
| 211 | /// enough to fool event_is_patch_set_root | 287 | /// enough to fool event_is_patch_set_root |
| 212 | pub fn get_pretend_proposal_root_event() -> nostr::Event { | 288 | pub fn get_pretend_proposal_root_event() -> nostr::Event { |
| 213 | serde_json::from_str(r#"{"id":"000c104861e34a453481ab23e7de21a6baf475b394479705363b035936732528","pubkey":"f53e4bcd7a9cdef049cf6467d638a1321958acd3b71eb09823fd6fadb023d768","created_at":1754322009,"kind":1617,"tags":[["a","30617:f53e4bcd7a9cdef049cf6467d638a1321958acd3b71eb09823fd6fadb023d768:9ee507fc4357d7ee16a5d8901bedcd103f23c17d-consider-it-random","ws://localhost:8055"],["a","30617:ba882566eff14f3baa976103998c452d27fe95b65a796a6a9f92628bced76fe5:9ee507fc4357d7ee16a5d8901bedcd103f23c17d-consider-it-random","ws://localhost:8055"],["r","9ee507fc4357d7ee16a5d8901bedcd103f23c17d"],["r","232efb37ebc67692c9e9ff58b83c0d3d63971a0a"],["alt","git patch: add t3.md"],["t","root"],["branch-name","feature"],["p","ba882566eff14f3baa976103998c452d27fe95b65a796a6a9f92628bced76fe5"],["commit","232efb37ebc67692c9e9ff58b83c0d3d63971a0a"],["parent-commit","431b84edc0d2fa118d63faa3c2db9c73d630a5ae"],["commit-pgp-sig",""],["description","add t3.md"],["author","Joe Bloggs","joe.bloggs@pm.me","0","0"],["committer","Joe Bloggs","joe.bloggs@pm.me","0","0"]],"content":"From 232efb37ebc67692c9e9ff58b83c0d3d63971a0a Mon Sep 17 00:00:00 2001\nFrom: Joe Bloggs <joe.bloggs@pm.me>\nDate: Thu, 1 Jan 1970 00:00:00 +0000\nSubject: [PATCH 1/2] add t3.md\n\n---\n t3.md | 1 +\n 1 file changed, 1 insertion(+)\n create mode 100644 t3.md\n\ndiff --git a/t3.md b/t3.md\nnew file mode 100644\nindex 0000000..f0eec86\n--- /dev/null\n+++ b/t3.md\n@@ -0,0 +1 @@\n+some content\n\\ No newline at end of file\n--\nlibgit2 1.9.1\n\n","sig":"65577fea803ea464bb073273a3fbfbdb5bfdaa64fb3b1d029ee8f3729fde051ad90610d08e441335f365b6c1d6f2270909bc37d12433ca82f0b2928b7a503e31"}"#).unwrap() | 289 | serde_json::from_str(r#"{"id":"000c104861e34a453481ab23e7de21a6baf475b394479705363b035936732528","pubkey":"f53e4bcd7a9cdef049cf6467d638a1321958acd3b71eb09823fd6fadb023d768","created_at":1754322009,"kind":1617,"tags":[["a","30617:f53e4bcd7a9cdef049cf6467d638a1321958acd3b71eb09823fd6fadb023d768:9ee507fc4357d7ee16a5d8901bedcd103f23c17d-consider-it-random","ws://localhost:8055"],["a","30617:ba882566eff14f3baa976103998c452d27fe95b65a796a6a9f92628bced76fe5:9ee507fc4357d7ee16a5d8901bedcd103f23c17d-consider-it-random","ws://localhost:8055"],["r","9ee507fc4357d7ee16a5d8901bedcd103f23c17d"],["r","232efb37ebc67692c9e9ff58b83c0d3d63971a0a"],["alt","git patch: add t3.md"],["t","root"],["branch-name","feature"],["p","ba882566eff14f3baa976103998c452d27fe95b65a796a6a9f92628bced76fe5"],["commit","232efb37ebc67692c9e9ff58b83c0d3d63971a0a"],["parent-commit","431b84edc0d2fa118d63faa3c2db9c73d630a5ae"],["commit-pgp-sig",""],["description","add t3.md"],["author","Joe Bloggs","joe.bloggs@pm.me","0","0"],["committer","Joe Bloggs","joe.bloggs@pm.me","0","0"]],"content":"From 232efb37ebc67692c9e9ff58b83c0d3d63971a0a Mon Sep 17 00:00:00 2001\nFrom: Joe Bloggs <joe.bloggs@pm.me>\nDate: Thu, 1 Jan 1970 00:00:00 +0000\nSubject: [PATCH 1/2] add t3.md\n\n---\n t3.md | 1 +\n 1 file changed, 1 insertion(+)\n create mode 100644 t3.md\n\ndiff --git a/t3.md b/t3.md\nnew file mode 100644\nindex 0000000..f0eec86\n--- /dev/null\n+++ b/t3.md\n@@ -0,0 +1 @@\n+some content\n\\ No newline at end of file\n--\nlibgit2 1.9.1\n\n","sig":"65577fea803ea464bb073273a3fbfbdb5bfdaa64fb3b1d029ee8f3729fde051ad90610d08e441335f365b6c1d6f2270909bc37d12433ca82f0b2928b7a503e31"}"#).unwrap() |
| @@ -1416,7 +1492,7 @@ pub fn use_ngit_list_to_download_and_checkout_proposal_branch( | |||
| 1416 | test_repo: &GitTestRepo, | 1492 | test_repo: &GitTestRepo, |
| 1417 | proposal_number: u16, | 1493 | proposal_number: u16, |
| 1418 | ) -> Result<()> { | 1494 | ) -> Result<()> { |
| 1419 | let mut p = CliTester::new_from_dir(&test_repo.dir, ["list"]); | 1495 | let mut p = CliTester::new_from_dir(&test_repo.dir, ["-i", "list"]); |
| 1420 | p.expect("fetching updates...\r\n")?; | 1496 | p.expect("fetching updates...\r\n")?; |
| 1421 | p.expect_eventually("\r\n")?; // some updates listed here | 1497 | p.expect_eventually("\r\n")?; // some updates listed here |
| 1422 | let mut c = p.expect_choice( | 1498 | let mut c = p.expect_choice( |