def test_validate_success(self):
        mock_fs = create_autospec(DirectIngestGCSFileSystem)

        mock_fs.get_metadata.return_value = {"total_data_points": "5"}

        validator = OptimizedMetricBigQueryViewExportValidator(mock_fs)
        for path in self.staging_paths:
            result = validator.validate(path)
            self.assertTrue(result)

        mock_fs.assert_has_calls([
            call.get_metadata(self.staging_paths[0]),
            call.get_metadata(self.staging_paths[1]),
        ])
    def test_validate_failure(self):
        mock_fs = create_autospec(DirectIngestGCSFileSystem)

        mock_fs.get_metadata.side_effect = [
            {
                "total_data_points": "5"
            },
            {
                "total_data_points": "0"
            },
        ]

        validator = OptimizedMetricBigQueryViewExportValidator(mock_fs)

        self.assertTrue(validator.validate(self.staging_paths[0]))
        self.assertFalse(validator.validate(self.staging_paths[1]))

        mock_fs.assert_has_calls([
            call.get_metadata(self.staging_paths[0]),
            call.get_metadata(self.staging_paths[1]),
        ])
    def test_validate_no_metadata(self):
        mock_fs = create_autospec(DirectIngestGCSFileSystem)

        mock_fs.get_metadata.return_value = None

        validator = OptimizedMetricBigQueryViewExportValidator(mock_fs)
        for path in self.staging_paths:
            result = validator.validate(path)
            self.assertFalse(result)

        # We failed before validating the second path
        mock_fs.assert_has_calls([call.get_metadata(self.staging_paths[0])])
    def test_validate_not_integer(self) -> None:
        mock_fs = create_autospec(DirectIngestGCSFileSystem)

        mock_fs.get_metadata.return_value = {
            "total_data_points": "HELLO WORLD"
        }

        validator = OptimizedMetricBigQueryViewExportValidator(mock_fs)
        for path in self.staging_paths:
            result = validator.validate(path, allow_empty=False)
            self.assertFalse(result)

        # We failed before validating the second path
        mock_fs.assert_has_calls([call.get_metadata(self.staging_paths[0])])