|
20 | 20 | #include <future>
|
21 | 21 | #include <memory>
|
22 | 22 | #include <stdexcept>
|
| 23 | +#include "firebase/firestore/document_snapshot.h" |
| 24 | +#include "firebase/firestore/field_value.h" |
| 25 | +#include "firebase/firestore/local_cache_settings.h" |
| 26 | +#include "firebase/firestore/map_field_value.h" |
| 27 | +#include "firebase/firestore/source.h" |
23 | 28 |
|
24 | 29 | #if defined(__ANDROID__)
|
25 | 30 | #include "android/firestore_integration_test_android.h"
|
@@ -1499,6 +1504,90 @@ TEST_F(FirestoreIntegrationTest, ClearPersistenceWhileRunningFails) {
|
1499 | 1504 | EXPECT_EQ(await_clear_persistence.error(), Error::kErrorFailedPrecondition);
|
1500 | 1505 | }
|
1501 | 1506 |
|
| 1507 | +TEST_F(FirestoreIntegrationTest, LegacyCacheConfigForMemoryCacheWorks) { |
| 1508 | + auto* db = TestFirestore("legacy_memory_cache"); |
| 1509 | + auto settings = db->settings(); |
| 1510 | + settings.set_persistence_enabled(false); |
| 1511 | + db->set_settings(std::move(settings)); |
| 1512 | + |
| 1513 | + Await(db->Document("rooms/eros") |
| 1514 | + .Set(MapFieldValue{{"desc", FieldValue::String("eros")}})); |
| 1515 | + |
| 1516 | + auto get_future = db->Document("rooms/eros").Get(Source::kCache); |
| 1517 | + const DocumentSnapshot* snapshot = Await(get_future); |
| 1518 | + EXPECT_EQ(get_future.status(), FutureStatus::kFutureStatusComplete); |
| 1519 | + EXPECT_FALSE(snapshot->is_valid()); |
| 1520 | + snapshot->id(); |
| 1521 | +} |
| 1522 | + |
| 1523 | +TEST_F(FirestoreIntegrationTest, LegacyCacheConfigForPersistenceCacheWorks) { |
| 1524 | + auto* db = TestFirestore("legacy_persistent_cache"); |
| 1525 | + auto settings = db->settings(); |
| 1526 | + settings.set_persistence_enabled(true); |
| 1527 | + db->set_settings(std::move(settings)); |
| 1528 | + |
| 1529 | + Await(db->Document("rooms/eros") |
| 1530 | + .Set(MapFieldValue{{"desc", FieldValue::String("eros")}})); |
| 1531 | + |
| 1532 | + auto get_future = db->Document("rooms/eros").Get(Source::kCache); |
| 1533 | + const DocumentSnapshot* snapshot = Await(get_future); |
| 1534 | + EXPECT_EQ(get_future.status(), FutureStatus::kFutureStatusComplete); |
| 1535 | + EXPECT_TRUE(snapshot->is_valid()); |
| 1536 | + EXPECT_THAT(snapshot->GetData(), |
| 1537 | + ContainerEq(MapFieldValue{{"desc", FieldValue::String("eros")}})); |
| 1538 | +} |
| 1539 | + |
| 1540 | +TEST_F(FirestoreIntegrationTest, NewCacheConfigForMemoryCacheWorks) { |
| 1541 | + auto* db = TestFirestore("new_memory_cache"); |
| 1542 | + auto settings = db->settings(); |
| 1543 | + settings.set_local_cache_settings(MemoryCacheSettings::Create()); |
| 1544 | + db->set_settings(std::move(settings)); |
| 1545 | + |
| 1546 | + Await(db->Document("rooms/eros") |
| 1547 | + .Set(MapFieldValue{{"desc", FieldValue::String("eros")}})); |
| 1548 | + |
| 1549 | + auto get_future = db->Document("rooms/eros").Get(Source::kCache); |
| 1550 | + const DocumentSnapshot* snapshot = Await(get_future); |
| 1551 | + EXPECT_EQ(get_future.status(), FutureStatus::kFutureStatusComplete); |
| 1552 | + EXPECT_FALSE(snapshot->is_valid()); |
| 1553 | +} |
| 1554 | + |
| 1555 | +TEST_F(FirestoreIntegrationTest, NewCacheConfigForPersistenceCacheWorks) { |
| 1556 | + auto* db = TestFirestore("new_persistent_cache"); |
| 1557 | + auto settings = db->settings(); |
| 1558 | + settings.set_local_cache_settings( |
| 1559 | + PersistentCacheSettings::Create().WithSizeBytes(50 * 1024 * 1024)); |
| 1560 | + db->set_settings(std::move(settings)); |
| 1561 | + |
| 1562 | + Await(db->Document("rooms/eros") |
| 1563 | + .Set(MapFieldValue{{"desc", FieldValue::String("eros")}})); |
| 1564 | + |
| 1565 | + auto get_future = db->Document("rooms/eros").Get(Source::kCache); |
| 1566 | + const DocumentSnapshot* snapshot = Await(get_future); |
| 1567 | + EXPECT_EQ(get_future.status(), FutureStatus::kFutureStatusComplete); |
| 1568 | + EXPECT_TRUE(snapshot->is_valid()); |
| 1569 | + EXPECT_THAT(snapshot->GetData(), |
| 1570 | + ContainerEq(MapFieldValue{{"desc", FieldValue::String("eros")}})); |
| 1571 | +} |
| 1572 | + |
| 1573 | +TEST_F(FirestoreIntegrationTest, CannotMixNewAndLegacyCacheConfig) { |
| 1574 | + { |
| 1575 | + auto* db = TestFirestore("mixing_1"); |
| 1576 | + auto settings = db->settings(); |
| 1577 | + settings.set_local_cache_settings( |
| 1578 | + PersistentCacheSettings::Create().WithSizeBytes(50 * 1024 * 1024)); |
| 1579 | + EXPECT_THROW(settings.set_cache_size_bytes(0), std::logic_error); |
| 1580 | + } |
| 1581 | + { |
| 1582 | + auto* db = TestFirestore("mixing_2"); |
| 1583 | + auto settings = db->settings(); |
| 1584 | + settings.set_persistence_enabled(false); |
| 1585 | + EXPECT_THROW( |
| 1586 | + settings.set_local_cache_settings(MemoryCacheSettings::Create()), |
| 1587 | + std::logic_error); |
| 1588 | + } |
| 1589 | +} |
| 1590 | + |
1502 | 1591 | // Note: this test only exists in C++.
|
1503 | 1592 | TEST_F(FirestoreIntegrationTest, DomainObjectsReferToSameFirestoreInstance) {
|
1504 | 1593 | EXPECT_EQ(TestFirestore(), TestFirestore()->Document("foo/bar").firestore());
|
|
0 commit comments