()
| 253 | |
| 254 | #[test(tokio::test)] |
| 255 | async fn create_event_twice() { |
| 256 | let node_id = NodeKey::random().id(); |
| 257 | let network = Network::Mainnet; |
| 258 | let expected_event_id = |
| 259 | EventId::try_from(hex::decode(UNSIGNED_INIT_EVENT_ID).unwrap()).unwrap(); |
| 260 | |
| 261 | // Remove whitespace from event CAR file |
| 262 | let event_data = UNSIGNED_INIT_EVENT_CAR |
| 263 | .chars() |
| 264 | .filter(|c| !c.is_whitespace()) |
| 265 | .collect::<String>(); |
| 266 | let mock_interest = MockAccessInterestStoreTest::new(); |
| 267 | let mut mock_event_store = MockEventStoreTest::new(); |
| 268 | let item = ApiItem::new( |
| 269 | expected_event_id, |
| 270 | decode_multibase_data(&event_data).unwrap(), |
| 271 | ); |
| 272 | let args = vec![item.clone(), item]; |
| 273 | |
| 274 | mock_event_store |
| 275 | .expect_insert_many() |
| 276 | .with(predicate::eq(args), predicate::eq(node_id)) |
| 277 | .times(1) |
| 278 | .returning(|input, _| { |
| 279 | Ok(input |
| 280 | .into_iter() |
| 281 | .map(|v| EventInsertResult::new_ok(v.key.clone())) |
| 282 | .collect()) |
| 283 | }); |
| 284 | let server = create_test_server( |
| 285 | node_id, |
| 286 | network, |
| 287 | mock_interest, |
| 288 | Arc::new(mock_event_store), |
| 289 | MockP2PService::new(), |
| 290 | None, |
| 291 | ); |
| 292 | let (resp1, resp2) = join!( |
| 293 | server.events_post( |
| 294 | models::EventData { |
| 295 | data: event_data.to_string(), |
| 296 | }, |
| 297 | &Context, |
| 298 | ), |
| 299 | server.events_post( |
| 300 | models::EventData { |
| 301 | data: event_data.to_string(), |
| 302 | }, |
| 303 | &Context, |
| 304 | ), |
| 305 | ); |
| 306 | assert_eq!(resp1.unwrap(), EventsPostResponse::Success); |
| 307 | assert_eq!(resp2.unwrap(), EventsPostResponse::Success); |
| 308 | } |
| 309 | #[test(tokio::test)] |
| 310 | async fn create_event_fails() { |
| 311 | let node_id = NodeKey::random().id(); |
nothing calls this directly
no test coverage detected