@@ -264,6 +264,177 @@ TEST_F(TableMetadataBuilderTest, TableRequirementAssertCurrentSchemaIDNotSet) {
264264 EXPECT_THAT (status, HasErrorMessage (" schema ID is not set" ));
265265}
266266
267+ TEST_F (TableMetadataBuilderTest, TableRequirementAssertDoesNotExistSuccess) {
268+ table::AssertDoesNotExist requirement;
269+
270+ ASSERT_THAT (requirement.Validate (nullptr ), IsOk ());
271+ }
272+
273+ TEST_F (TableMetadataBuilderTest, TableRequirementAssertDoesNotExistTableExists) {
274+ table::AssertDoesNotExist requirement;
275+
276+ auto status = requirement.Validate (base_metadata_.get ());
277+ EXPECT_THAT (status, IsError (ErrorKind::kCommitFailed ));
278+ EXPECT_THAT (status, HasErrorMessage (" table already exists" ));
279+ }
280+
281+ TEST_F (TableMetadataBuilderTest, TableRequirementAssertRefSnapshotIDSuccess) {
282+ auto ref = std::make_shared<SnapshotRef>();
283+ ref->snapshot_id = 100 ;
284+ ref->retention = SnapshotRef::Branch{};
285+ base_metadata_->refs [" main" ] = ref;
286+
287+ table::AssertRefSnapshotID requirement (" main" , 100 );
288+
289+ ASSERT_THAT (requirement.Validate (base_metadata_.get ()), IsOk ());
290+ }
291+
292+ TEST_F (TableMetadataBuilderTest, TableRequirementAssertRefSnapshotIDMismatch) {
293+ auto ref = std::make_shared<SnapshotRef>();
294+ ref->snapshot_id = 100 ;
295+ ref->retention = SnapshotRef::Branch{};
296+ base_metadata_->refs [" main" ] = ref;
297+
298+ table::AssertRefSnapshotID requirement (" main" , 200 );
299+
300+ auto status = requirement.Validate (base_metadata_.get ());
301+ EXPECT_THAT (status, IsError (ErrorKind::kCommitFailed ));
302+ EXPECT_THAT (status, HasErrorMessage (" snapshot ID does not match" ));
303+ }
304+
305+ TEST_F (TableMetadataBuilderTest, TableRequirementAssertRefSnapshotIDRefMissing) {
306+ table::AssertRefSnapshotID requirement (" missing-ref" , 100 );
307+
308+ auto status = requirement.Validate (base_metadata_.get ());
309+ EXPECT_THAT (status, IsError (ErrorKind::kCommitFailed ));
310+ EXPECT_THAT (status, HasErrorMessage (" missing in table metadata" ));
311+ }
312+
313+ TEST_F (TableMetadataBuilderTest, TableRequirementAssertRefSnapshotIDNullBase) {
314+ table::AssertRefSnapshotID requirement (" main" , 100 );
315+
316+ auto status = requirement.Validate (nullptr );
317+ EXPECT_THAT (status, IsError (ErrorKind::kCommitFailed ));
318+ EXPECT_THAT (status, HasErrorMessage (" metadata is missing" ));
319+ }
320+
321+ TEST_F (TableMetadataBuilderTest, TableRequirementAssertRefSnapshotIDNulloptSuccess) {
322+ // Ref should not exist, and it doesn't
323+ table::AssertRefSnapshotID requirement (" nonexistent" , std::nullopt );
324+
325+ ASSERT_THAT (requirement.Validate (base_metadata_.get ()), IsOk ());
326+ }
327+
328+ TEST_F (TableMetadataBuilderTest, TableRequirementAssertRefSnapshotIDNulloptButExists) {
329+ auto ref = std::make_shared<SnapshotRef>();
330+ ref->snapshot_id = 100 ;
331+ ref->retention = SnapshotRef::Branch{};
332+ base_metadata_->refs [" main" ] = ref;
333+
334+ // Ref should not exist, but it does
335+ table::AssertRefSnapshotID requirement (" main" , std::nullopt );
336+
337+ auto status = requirement.Validate (base_metadata_.get ());
338+ EXPECT_THAT (status, IsError (ErrorKind::kCommitFailed ));
339+ EXPECT_THAT (status, HasErrorMessage (" should not exist" ));
340+ }
341+
342+ TEST_F (TableMetadataBuilderTest, TableRequirementAssertLastAssignedFieldIdSuccess) {
343+ base_metadata_->last_column_id = 10 ;
344+ table::AssertLastAssignedFieldId requirement (10 );
345+
346+ ASSERT_THAT (requirement.Validate (base_metadata_.get ()), IsOk ());
347+ }
348+
349+ TEST_F (TableMetadataBuilderTest, TableRequirementAssertLastAssignedFieldIdMismatch) {
350+ base_metadata_->last_column_id = 10 ;
351+ table::AssertLastAssignedFieldId requirement (15 );
352+
353+ auto status = requirement.Validate (base_metadata_.get ());
354+ EXPECT_THAT (status, IsError (ErrorKind::kCommitFailed ));
355+ EXPECT_THAT (status, HasErrorMessage (" last assigned field ID does not match" ));
356+ }
357+
358+ TEST_F (TableMetadataBuilderTest, TableRequirementAssertLastAssignedFieldIdNullBase) {
359+ table::AssertLastAssignedFieldId requirement (10 );
360+
361+ auto status = requirement.Validate (nullptr );
362+ EXPECT_THAT (status, IsError (ErrorKind::kCommitFailed ));
363+ EXPECT_THAT (status, HasErrorMessage (" metadata is missing" ));
364+ }
365+
366+ TEST_F (TableMetadataBuilderTest, TableRequirementAssertLastAssignedPartitionIdSuccess) {
367+ base_metadata_->last_partition_id = 5 ;
368+ table::AssertLastAssignedPartitionId requirement (5 );
369+
370+ ASSERT_THAT (requirement.Validate (base_metadata_.get ()), IsOk ());
371+ }
372+
373+ TEST_F (TableMetadataBuilderTest, TableRequirementAssertLastAssignedPartitionIdMismatch) {
374+ base_metadata_->last_partition_id = 5 ;
375+ table::AssertLastAssignedPartitionId requirement (8 );
376+
377+ auto status = requirement.Validate (base_metadata_.get ());
378+ EXPECT_THAT (status, IsError (ErrorKind::kCommitFailed ));
379+ EXPECT_THAT (status, HasErrorMessage (" last assigned partition ID does not match" ));
380+ }
381+
382+ TEST_F (TableMetadataBuilderTest, TableRequirementAssertLastAssignedPartitionIdNullBase) {
383+ table::AssertLastAssignedPartitionId requirement (5 );
384+
385+ auto status = requirement.Validate (nullptr );
386+ EXPECT_THAT (status, IsError (ErrorKind::kCommitFailed ));
387+ EXPECT_THAT (status, HasErrorMessage (" metadata is missing" ));
388+ }
389+
390+ TEST_F (TableMetadataBuilderTest, TableRequirementAssertDefaultSpecIDSuccess) {
391+ base_metadata_->default_spec_id = 3 ;
392+ table::AssertDefaultSpecID requirement (3 );
393+
394+ ASSERT_THAT (requirement.Validate (base_metadata_.get ()), IsOk ());
395+ }
396+
397+ TEST_F (TableMetadataBuilderTest, TableRequirementAssertDefaultSpecIDMismatch) {
398+ base_metadata_->default_spec_id = 3 ;
399+ table::AssertDefaultSpecID requirement (7 );
400+
401+ auto status = requirement.Validate (base_metadata_.get ());
402+ EXPECT_THAT (status, IsError (ErrorKind::kCommitFailed ));
403+ EXPECT_THAT (status, HasErrorMessage (" default spec ID does not match" ));
404+ }
405+
406+ TEST_F (TableMetadataBuilderTest, TableRequirementAssertDefaultSpecIDNullBase) {
407+ table::AssertDefaultSpecID requirement (3 );
408+
409+ auto status = requirement.Validate (nullptr );
410+ EXPECT_THAT (status, IsError (ErrorKind::kCommitFailed ));
411+ EXPECT_THAT (status, HasErrorMessage (" metadata is missing" ));
412+ }
413+
414+ TEST_F (TableMetadataBuilderTest, TableRequirementAssertDefaultSortOrderIDSuccess) {
415+ base_metadata_->default_sort_order_id = 2 ;
416+ table::AssertDefaultSortOrderID requirement (2 );
417+
418+ ASSERT_THAT (requirement.Validate (base_metadata_.get ()), IsOk ());
419+ }
420+
421+ TEST_F (TableMetadataBuilderTest, TableRequirementAssertDefaultSortOrderIDMismatch) {
422+ base_metadata_->default_sort_order_id = 2 ;
423+ table::AssertDefaultSortOrderID requirement (4 );
424+
425+ auto status = requirement.Validate (base_metadata_.get ());
426+ EXPECT_THAT (status, IsError (ErrorKind::kCommitFailed ));
427+ EXPECT_THAT (status, HasErrorMessage (" default sort order ID does not match" ));
428+ }
429+
430+ TEST_F (TableMetadataBuilderTest, TableRequirementAssertDefaultSortOrderIDNullBase) {
431+ table::AssertDefaultSortOrderID requirement (2 );
432+
433+ auto status = requirement.Validate (nullptr );
434+ EXPECT_THAT (status, IsError (ErrorKind::kCommitFailed ));
435+ EXPECT_THAT (status, HasErrorMessage (" metadata is missing" ));
436+ }
437+
267438// ============================================================================
268439// Integration Tests - End-to-End Workflow
269440// ============================================================================
0 commit comments