Skip to content

Commit ff3a4a2

Browse files
author
Zoran Cvetkov
committed
more test fixes
1 parent c66d5b0 commit ff3a4a2

File tree

4 files changed

+94
-63
lines changed

4 files changed

+94
-63
lines changed

graph/src/components/store/entity_cache.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -461,7 +461,7 @@ impl EntityCache {
461461
updates.remove_null_fields();
462462
let data = Arc::new(updates);
463463
self.current.insert(key.clone(), Some(data.cheap_clone()));
464-
let vid = data.vid();
464+
let vid = data.vid_opt();
465465
Some(Insert {
466466
key,
467467
data,
@@ -478,7 +478,7 @@ impl EntityCache {
478478
let data = Arc::new(data);
479479
self.current.insert(key.clone(), Some(data.cheap_clone()));
480480
if current != data {
481-
let vid = data.vid();
481+
let vid = data.vid_opt();
482482
Some(Overwrite {
483483
key,
484484
data,

graph/src/data/store/mod.rs

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -920,6 +920,14 @@ impl Entity {
920920
.expect("the vid is set to a valid value")
921921
}
922922

923+
// TODO: try to remove it
924+
pub fn vid_opt(&self) -> i64 {
925+
self.get("vid")
926+
.map(|vid| vid.as_int8())
927+
.unwrap_or_default()
928+
.unwrap_or_default()
929+
}
930+
923931
/// Merges an entity update `update` into this entity.
924932
///
925933
/// If a key exists in both entities, the value from `update` is chosen.

store/test-store/tests/core/interfaces.rs

Lines changed: 30 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -202,8 +202,8 @@ async fn reference_interface_derived() {
202202
let query = "query { events { id transaction { id } } }";
203203

204204
let buy = ("BuyEvent", entity! { schema => id: "buy" });
205-
let sell1 = ("SellEvent", entity! { schema => id: "sell1" });
206-
let sell2 = ("SellEvent", entity! { schema => id: "sell2" });
205+
let sell1 = ("SellEvent", entity! { schema => id: "sell1", vid: 0i64 });
206+
let sell2 = ("SellEvent", entity! { schema => id: "sell2", vid: 1i64 });
207207
let gift = (
208208
"GiftEvent",
209209
entity! { schema => id: "gift", transaction: "txn" },
@@ -278,11 +278,11 @@ async fn follow_interface_reference() {
278278

279279
let parent = (
280280
"Animal",
281-
entity! { schema => id: "parent", legs: 4, parent: Value::Null },
281+
entity! { schema => id: "parent", legs: 4, parent: Value::Null, vid: 0i64},
282282
);
283283
let child = (
284284
"Animal",
285-
entity! { schema => id: "child", legs: 3, parent: "parent" },
285+
entity! { schema => id: "child", legs: 3, parent: "parent" , vid: 1i64},
286286
);
287287

288288
let res = insert_and_query(subgraph_id, document, vec![parent, child], query)
@@ -459,16 +459,16 @@ async fn interface_inline_fragment_with_subquery() {
459459
";
460460
let schema = InputSchema::raw(document, subgraph_id);
461461

462-
let mama_cow = ("Parent", entity! { schema => id: "mama_cow" });
462+
let mama_cow = ("Parent", entity! { schema => id: "mama_cow", vid: 0i64 });
463463
let cow = (
464464
"Animal",
465-
entity! { schema => id: "1", name: "cow", legs: 4, parent: "mama_cow" },
465+
entity! { schema => id: "1", name: "cow", legs: 4, parent: "mama_cow", vid: 0i64 },
466466
);
467467

468-
let mama_bird = ("Parent", entity! { schema => id: "mama_bird" });
468+
let mama_bird = ("Parent", entity! { schema => id: "mama_bird", vid: 1i64 });
469469
let bird = (
470470
"Bird",
471-
entity! { schema => id: "2", airspeed: 5, legs: 2, parent: "mama_bird" },
471+
entity! { schema => id: "2", airspeed: 5, legs: 2, parent: "mama_bird", vid: 1i64 },
472472
);
473473

474474
let query = "query { leggeds(orderBy: legs) { legs ... on Bird { airspeed parent { id } } } }";
@@ -545,11 +545,11 @@ async fn alias() {
545545

546546
let parent = (
547547
"Animal",
548-
entity! { schema => id: "parent", legs: 4, parent: Value::Null },
548+
entity! { schema => id: "parent", legs: 4, parent: Value::Null, vid: 0i64 },
549549
);
550550
let child = (
551551
"Animal",
552-
entity! { schema => id: "child", legs: 3, parent: "parent" },
552+
entity! { schema => id: "child", legs: 3, parent: "parent", vid: 1i64 },
553553
);
554554

555555
let res = insert_and_query(subgraph_id, document, vec![parent, child], query)
@@ -608,8 +608,14 @@ async fn fragments_dont_panic() {
608608
";
609609

610610
// The panic manifests if two parents exist.
611-
let parent = ("Parent", entity! { schema => id: "p", child: "c" });
612-
let parent2 = ("Parent", entity! { schema => id: "p2", child: Value::Null });
611+
let parent = (
612+
"Parent",
613+
entity! { schema => id: "p", child: "c", vid: 0i64 },
614+
);
615+
let parent2 = (
616+
"Parent",
617+
entity! { schema => id: "p2", child: Value::Null, vid: 1i64 },
618+
);
613619
let child = ("Child", entity! { schema => id:"c" });
614620

615621
let res = insert_and_query(subgraph_id, document, vec![parent, parent2, child], query)
@@ -668,10 +674,13 @@ async fn fragments_dont_duplicate_data() {
668674
";
669675

670676
// This bug manifests if two parents exist.
671-
let parent = ("Parent", entity! { schema => id: "p", children: vec!["c"] });
677+
let parent = (
678+
"Parent",
679+
entity! { schema => id: "p", children: vec!["c"], vid: 0i64 },
680+
);
672681
let parent2 = (
673682
"Parent",
674-
entity! { schema => id: "b", children: Vec::<String>::new() },
683+
entity! { schema => id: "b", children: Vec::<String>::new(), vid: 1i64 },
675684
);
676685
let child = ("Child", entity! { schema => id:"c" });
677686

@@ -721,11 +730,11 @@ async fn redundant_fields() {
721730

722731
let parent = (
723732
"Animal",
724-
entity! { schema => id: "parent", parent: Value::Null },
733+
entity! { schema => id: "parent", parent: Value::Null, vid: 0i64 },
725734
);
726735
let child = (
727736
"Animal",
728-
entity! { schema => id: "child", parent: "parent" },
737+
entity! { schema => id: "child", parent: "parent", vid: 1i64 },
729738
);
730739

731740
let res = insert_and_query(subgraph_id, document, vec![parent, child], query)
@@ -1081,11 +1090,11 @@ async fn enums() {
10811090
let entities = vec![
10821091
(
10831092
"Trajectory",
1084-
entity! { schema => id: "1", direction: "EAST", meters: 10 },
1093+
entity! { schema => id: "1", direction: "EAST", meters: 10, vid: 0i64},
10851094
),
10861095
(
10871096
"Trajectory",
1088-
entity! { schema => id: "2", direction: "NORTH", meters: 15 },
1097+
entity! { schema => id: "2", direction: "NORTH", meters: 15, vid: 1i64},
10891098
),
10901099
];
10911100
let query = "query { trajectories { id, direction, meters } }";
@@ -1134,15 +1143,15 @@ async fn enum_list_filters() {
11341143
let entities = vec![
11351144
(
11361145
"Trajectory",
1137-
entity! { schema => id: "1", direction: "EAST", meters: 10 },
1146+
entity! { schema => id: "1", direction: "EAST", meters: 10, vid: 0i64 },
11381147
),
11391148
(
11401149
"Trajectory",
1141-
entity! { schema => id: "2", direction: "NORTH", meters: 15 },
1150+
entity! { schema => id: "2", direction: "NORTH", meters: 15, vid: 1i64 },
11421151
),
11431152
(
11441153
"Trajectory",
1145-
entity! { schema => id: "3", direction: "WEST", meters: 20 },
1154+
entity! { schema => id: "3", direction: "WEST", meters: 20, vid: 2i64 },
11461155
),
11471156
];
11481157

store/test-store/tests/graph/entity_cache.rs

Lines changed: 54 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -190,6 +190,19 @@ fn sort_by_entity_key(mut mods: Vec<EntityModification>) -> Vec<EntityModificati
190190
mods
191191
}
192192

193+
fn filter_vid(arr: Vec<Entity>) -> Vec<Entity> {
194+
arr.into_iter()
195+
.map(|mut e| {
196+
// println!("E1: {:?}", e);
197+
e.remove("vid");
198+
// println!("E2: {:?}", e);
199+
e.remove_null_fields();
200+
// println!("E3: {:?}", e);
201+
e
202+
})
203+
.collect()
204+
}
205+
193206
#[tokio::test]
194207
async fn empty_cache_modifications() {
195208
let store = Arc::new(MockStore::new(BTreeMap::new()));
@@ -429,17 +442,17 @@ async fn insert_test_data(store: Arc<DieselSubgraphStore>) -> DeploymentLocator
429442
.unwrap();
430443

431444
// 1 account 3 wallets
432-
let test_entity_1 = create_account_entity("1", "Johnton", "[email protected]", 67_i32);
445+
let test_entity_1 = create_account_entity("1", "Johnton", "[email protected]", 67_i32, 1);
433446
let id_one = WALLET_TYPE.parse_id("1").unwrap();
434-
let wallet_entity_1 = create_wallet_operation("1", &id_one, 67_i32);
435-
let wallet_entity_2 = create_wallet_operation("2", &id_one, 92_i32);
436-
let wallet_entity_3 = create_wallet_operation("3", &id_one, 192_i32);
447+
let wallet_entity_1 = create_wallet_operation("1", &id_one, 67_i32, 1);
448+
let wallet_entity_2 = create_wallet_operation("2", &id_one, 92_i32, 2);
449+
let wallet_entity_3 = create_wallet_operation("3", &id_one, 192_i32, 3);
437450
// 1 account 1 wallet
438-
let test_entity_2 = create_account_entity("2", "Cindini", "[email protected]", 42_i32);
451+
let test_entity_2 = create_account_entity("2", "Cindini", "[email protected]", 42_i32, 2);
439452
let id_two = WALLET_TYPE.parse_id("2").unwrap();
440-
let wallet_entity_4 = create_wallet_operation("4", &id_two, 32_i32);
453+
let wallet_entity_4 = create_wallet_operation("4", &id_two, 32_i32, 4);
441454
// 1 account 0 wallets
442-
let test_entity_3 = create_account_entity("3", "Shaqueeena", "[email protected]", 28_i32);
455+
let test_entity_3 = create_account_entity("3", "Shaqueeena", "[email protected]", 28_i32, 3);
443456
transact_entity_operations(
444457
&store,
445458
&deployment,
@@ -459,22 +472,22 @@ async fn insert_test_data(store: Arc<DieselSubgraphStore>) -> DeploymentLocator
459472
deployment
460473
}
461474

462-
fn create_account_entity(id: &str, name: &str, email: &str, age: i32) -> EntityOperation {
475+
fn create_account_entity(id: &str, name: &str, email: &str, age: i32, vid: i64) -> EntityOperation {
463476
let test_entity =
464-
entity! { LOAD_RELATED_SUBGRAPH => id: id, name: name, email: email, age: age };
477+
entity! { LOAD_RELATED_SUBGRAPH => id: id, name: name, email: email, age: age, vid: vid };
465478

466479
EntityOperation::Set {
467480
key: ACCOUNT_TYPE.parse_key(id).unwrap(),
468481
data: test_entity,
469482
}
470483
}
471484

472-
fn create_wallet_entity(id: &str, account_id: &Id, balance: i32) -> Entity {
485+
fn create_wallet_entity(id: &str, account_id: &Id, balance: i32, vid: i64) -> Entity {
473486
let account_id = Value::from(account_id.clone());
474-
entity! { LOAD_RELATED_SUBGRAPH => id: id, account: account_id, balance: balance }
487+
entity! { LOAD_RELATED_SUBGRAPH => id: id, account: account_id, balance: balance, vid: vid}
475488
}
476-
fn create_wallet_operation(id: &str, account_id: &Id, balance: i32) -> EntityOperation {
477-
let test_wallet = create_wallet_entity(id, account_id, balance);
489+
fn create_wallet_operation(id: &str, account_id: &Id, balance: i32, vid: i64) -> EntityOperation {
490+
let test_wallet = create_wallet_entity(id, account_id, balance, vid);
478491
EntityOperation::Set {
479492
key: WALLET_TYPE.parse_key(id).unwrap(),
480493
data: test_wallet,
@@ -492,12 +505,12 @@ fn check_for_account_with_multiple_wallets() {
492505
causality_region: CausalityRegion::ONCHAIN,
493506
};
494507
let result = cache.load_related(&request).unwrap();
495-
let wallet_1 = create_wallet_entity("1", &account_id, 67_i32);
496-
let wallet_2 = create_wallet_entity("2", &account_id, 92_i32);
497-
let wallet_3 = create_wallet_entity("3", &account_id, 192_i32);
508+
let wallet_1 = create_wallet_entity("1", &account_id, 67_i32, 0);
509+
let wallet_2 = create_wallet_entity("2", &account_id, 92_i32, 1);
510+
let wallet_3 = create_wallet_entity("3", &account_id, 192_i32, 2);
498511
let expeted_vec = vec![wallet_1, wallet_2, wallet_3];
499512

500-
assert_eq!(result, expeted_vec);
513+
assert_eq!(result, filter_vid(expeted_vec));
501514
});
502515
}
503516

@@ -512,10 +525,10 @@ fn check_for_account_with_single_wallet() {
512525
causality_region: CausalityRegion::ONCHAIN,
513526
};
514527
let result = cache.load_related(&request).unwrap();
515-
let wallet_1 = create_wallet_entity("4", &account_id, 32_i32);
528+
let wallet_1 = create_wallet_entity("4", &account_id, 32_i32, 1);
516529
let expeted_vec = vec![wallet_1];
517530

518-
assert_eq!(result, expeted_vec);
531+
assert_eq!(result, filter_vid(expeted_vec));
519532
});
520533
}
521534

@@ -578,8 +591,8 @@ fn check_for_insert_async_store() {
578591
run_store_test(|mut cache, store, deployment, _writable| async move {
579592
let account_id = ACCOUNT_TYPE.parse_id("2").unwrap();
580593
// insert a new wallet
581-
let wallet_entity_5 = create_wallet_operation("5", &account_id, 79_i32);
582-
let wallet_entity_6 = create_wallet_operation("6", &account_id, 200_i32);
594+
let wallet_entity_5 = create_wallet_operation("5", &account_id, 79_i32, 2);
595+
let wallet_entity_6 = create_wallet_operation("6", &account_id, 200_i32, 3);
583596

584597
transact_entity_operations(
585598
&store,
@@ -596,21 +609,22 @@ fn check_for_insert_async_store() {
596609
causality_region: CausalityRegion::ONCHAIN,
597610
};
598611
let result = cache.load_related(&request).unwrap();
599-
let wallet_1 = create_wallet_entity("4", &account_id, 32_i32);
600-
let wallet_2 = create_wallet_entity("5", &account_id, 79_i32);
601-
let wallet_3 = create_wallet_entity("6", &account_id, 200_i32);
612+
let wallet_1 = create_wallet_entity("4", &account_id, 32_i32, 1);
613+
let wallet_2 = create_wallet_entity("5", &account_id, 79_i32, 2);
614+
let wallet_3 = create_wallet_entity("6", &account_id, 200_i32, 3);
602615
let expeted_vec = vec![wallet_1, wallet_2, wallet_3];
603616

604-
assert_eq!(result, expeted_vec);
617+
assert_eq!(result, filter_vid(expeted_vec));
605618
});
606619
}
620+
607621
#[test]
608622
fn check_for_insert_async_not_related() {
609623
run_store_test(|mut cache, store, deployment, _writable| async move {
610624
let account_id = ACCOUNT_TYPE.parse_id("2").unwrap();
611625
// insert a new wallet
612-
let wallet_entity_5 = create_wallet_operation("5", &account_id, 79_i32);
613-
let wallet_entity_6 = create_wallet_operation("6", &account_id, 200_i32);
626+
let wallet_entity_5 = create_wallet_operation("5", &account_id, 79_i32, 5);
627+
let wallet_entity_6 = create_wallet_operation("6", &account_id, 200_i32, 6);
614628

615629
transact_entity_operations(
616630
&store,
@@ -628,12 +642,12 @@ fn check_for_insert_async_not_related() {
628642
causality_region: CausalityRegion::ONCHAIN,
629643
};
630644
let result = cache.load_related(&request).unwrap();
631-
let wallet_1 = create_wallet_entity("1", &account_id, 67_i32);
632-
let wallet_2 = create_wallet_entity("2", &account_id, 92_i32);
633-
let wallet_3 = create_wallet_entity("3", &account_id, 192_i32);
645+
let wallet_1 = create_wallet_entity("1", &account_id, 67_i32, 1);
646+
let wallet_2 = create_wallet_entity("2", &account_id, 92_i32, 2);
647+
let wallet_3 = create_wallet_entity("3", &account_id, 192_i32, 3);
634648
let expeted_vec = vec![wallet_1, wallet_2, wallet_3];
635649

636-
assert_eq!(result, expeted_vec);
650+
assert_eq!(result, filter_vid(expeted_vec));
637651
});
638652
}
639653

@@ -642,7 +656,7 @@ fn check_for_update_async_related() {
642656
run_store_test(|mut cache, store, deployment, writable| async move {
643657
let entity_key = WALLET_TYPE.parse_key("1").unwrap();
644658
let account_id = entity_key.entity_id.clone();
645-
let wallet_entity_update = create_wallet_operation("1", &account_id, 79_i32);
659+
let wallet_entity_update = create_wallet_operation("1", &account_id, 79_i32, 1);
646660

647661
let new_data = match wallet_entity_update {
648662
EntityOperation::Set { ref data, .. } => data.clone(),
@@ -666,11 +680,11 @@ fn check_for_update_async_related() {
666680
causality_region: CausalityRegion::ONCHAIN,
667681
};
668682
let result = cache.load_related(&request).unwrap();
669-
let wallet_2 = create_wallet_entity("2", &account_id, 92_i32);
670-
let wallet_3 = create_wallet_entity("3", &account_id, 192_i32);
683+
let wallet_2 = create_wallet_entity("2", &account_id, 92_i32, 2);
684+
let wallet_3 = create_wallet_entity("3", &account_id, 192_i32, 3);
671685
let expeted_vec = vec![new_data, wallet_2, wallet_3];
672686

673-
assert_eq!(result, expeted_vec);
687+
assert_eq!(filter_vid(result), filter_vid(expeted_vec));
674688
});
675689
}
676690

@@ -696,11 +710,11 @@ fn check_for_delete_async_related() {
696710
causality_region: CausalityRegion::ONCHAIN,
697711
};
698712
let result = cache.load_related(&request).unwrap();
699-
let wallet_2 = create_wallet_entity("2", &account_id, 92_i32);
700-
let wallet_3 = create_wallet_entity("3", &account_id, 192_i32);
713+
let wallet_2 = create_wallet_entity("2", &account_id, 92_i32, 2);
714+
let wallet_3 = create_wallet_entity("3", &account_id, 192_i32, 3);
701715
let expeted_vec = vec![wallet_2, wallet_3];
702716

703-
assert_eq!(result, expeted_vec);
717+
assert_eq!(result, filter_vid(expeted_vec));
704718
});
705719
}
706720

@@ -710,11 +724,11 @@ fn scoped_get() {
710724
// Key for an existing entity that is in the store
711725
let account1 = ACCOUNT_TYPE.parse_id("1").unwrap();
712726
let key1 = WALLET_TYPE.parse_key("1").unwrap();
713-
let wallet1 = create_wallet_entity("1", &account1, 67);
727+
let wallet1 = create_wallet_entity("1", &account1, 67, 1);
714728

715729
// Create a new entity that is not in the store
716730
let account5 = ACCOUNT_TYPE.parse_id("5").unwrap();
717-
let wallet5 = create_wallet_entity("5", &account5, 100);
731+
let wallet5 = create_wallet_entity("5", &account5, 100, 5);
718732
let key5 = WALLET_TYPE.parse_key("5").unwrap();
719733
cache.set(key5.clone(), wallet5.clone()).unwrap();
720734

0 commit comments

Comments
 (0)