1717 * under the License.
1818 */
1919
20- #include " iceberg/base_transaction.h"
21-
2220#include < unordered_map>
2321
2422#include < gtest/gtest.h>
3028#include " iceberg/table_update.h"
3129#include " iceberg/test/matchers.h"
3230#include " iceberg/test/mock_catalog.h"
31+ #include " iceberg/transaction.h"
3332#include " iceberg/update/update_properties.h"
3433
3534namespace iceberg {
@@ -47,13 +46,22 @@ class BaseTransactionTest : public ::testing::Test {
4746 " s3://bucket/table/metadata.json" , nullptr , catalog_);
4847 }
4948
49+ std::unique_ptr<Transaction> NewTransaction () {
50+ auto transaction_result = BaseTransaction::Make (table_, catalog_);
51+ if (!transaction_result.has_value ()) {
52+ ADD_FAILURE () << " Failed to create transaction: "
53+ << transaction_result.error ().message ;
54+ }
55+ return std::move (transaction_result).value ();
56+ }
57+
5058 TableIdentifier identifier_;
5159 std::shared_ptr<MockCatalog> catalog_;
5260 std::shared_ptr<Table> table_;
5361};
5462
5563TEST_F (BaseTransactionTest, CommitSetPropertiesUsesCatalog) {
56- auto transaction = table_-> NewTransaction ();
64+ auto transaction = NewTransaction ();
5765 auto update_properties = transaction->NewUpdateProperties ();
5866 EXPECT_TRUE (update_properties.has_value ());
5967 update_properties.value ()->Set (" new-key" , " new-value" );
@@ -82,7 +90,7 @@ TEST_F(BaseTransactionTest, CommitSetPropertiesUsesCatalog) {
8290}
8391
8492TEST_F (BaseTransactionTest, RemovePropertiesSkipsMissingKeys) {
85- auto transaction = table_-> NewTransaction ();
93+ auto transaction = NewTransaction ();
8694 auto update_properties = transaction->NewUpdateProperties ();
8795 EXPECT_TRUE (update_properties.has_value ());
8896 update_properties.value ()->Remove (" missing" ).Remove (" existing" );
@@ -108,7 +116,7 @@ TEST_F(BaseTransactionTest, RemovePropertiesSkipsMissingKeys) {
108116}
109117
110118TEST_F (BaseTransactionTest, AggregatesMultiplePendingUpdates) {
111- auto transaction = table_-> NewTransaction ();
119+ auto transaction = NewTransaction ();
112120 auto update_properties = transaction->NewUpdateProperties ();
113121 EXPECT_TRUE (update_properties.has_value ());
114122 update_properties.value ()->Set (" new-key" , " new-value" );
@@ -147,11 +155,20 @@ TEST_F(BaseTransactionTest, AggregatesMultiplePendingUpdates) {
147155}
148156
149157TEST_F (BaseTransactionTest, FailsIfUpdateNotCommitted) {
150- auto transaction = table_-> NewTransaction ();
158+ auto transaction = NewTransaction ();
151159 auto update_properties = transaction->NewUpdateProperties ();
152160 EXPECT_TRUE (update_properties.has_value ());
153161 update_properties.value ()->Set (" new-key" , " new-value" );
154162 EXPECT_THAT (transaction->CommitTransaction (), IsError (ErrorKind::kInvalidState ));
155163}
156164
165+ TEST_F (BaseTransactionTest, NewTransactionFailsWithoutCatalog) {
166+ auto metadata = std::make_shared<TableMetadata>();
167+ auto table_without_catalog =
168+ std::make_shared<Table>(identifier_, std::move (metadata),
169+ " s3://bucket/table/metadata.json" , nullptr , nullptr );
170+ EXPECT_THAT (table_without_catalog->NewTransaction (),
171+ IsError (ErrorKind::kInvalidArgument ));
172+ }
173+
157174} // namespace iceberg
0 commit comments