def test_column_mapping_has_extra_column(self):
        column_mapping_validator = ColumnMappingValidator(TEST_SCHEMA)
        column_mapping_df = pd.DataFrame(
            data={
                INTERNAL_COLUMN_NAME_COLUMN_NAME: [
                    "internal_column_name1",
                    "internal_column_name2",
                ],
                GII_FIELD_NAME_COLUMN_NAME: [
                    "external_column_name1",
                    "external_column_name2",
                ],
                "random_column_name": [
                    "why is this here",
                    "what is this supposed to be",
                ],
            })

        validation_failures = column_mapping_validator.validate(
            column_mapping_df)

        self.assertTrue(validation_failures)
        self.assertEqual(
            {
                "expect_table_columns_to_match_ordered_list": {
                    "expected_list": [
                        "Internal Column Name",
                        "Mission Impact Field Name",
                    ],
                    "failed_vals": ["random_column_name"],
                }
            },
            validation_failures,
        )
    def test_column_mapping_is_missing_column(self):
        column_mapping_validator = ColumnMappingValidator(TEST_SCHEMA)
        column_mapping_df = pd.DataFrame(
            data={
                INTERNAL_COLUMN_NAME_COLUMN_NAME: [
                    "internal_column_name1",
                    "internal_column_name2",
                ]
            })

        validation_failures = column_mapping_validator.validate(
            column_mapping_df)

        self.assertTrue(validation_failures)
        self.assertEqual(
            {
                "expect_table_columns_to_match_ordered_list": {
                    "expected_list": [
                        "Internal Column Name",
                        "Mission Impact Field Name",
                    ],
                    "failed_vals": [None],
                }
            },
            validation_failures,
        )
    def test_external_column_names_are_invalid(self):
        column_mapping_validator = ColumnMappingValidator(TEST_SCHEMA)
        column_mapping_df = pd.DataFrame(
            data={
                INTERNAL_COLUMN_NAME_COLUMN_NAME: [
                    "internal_column_name1",
                    "internal_column_name2",
                ],
                GII_FIELD_NAME_COLUMN_NAME: [
                    "external_column_name1",
                    "external_column_name_not_real",
                ],
            })

        validation_failures = column_mapping_validator.validate(
            column_mapping_df)

        self.assertTrue(validation_failures)
        self.assertEqual(
            {
                "expect_column_values_to_be_in_set": {
                    "column_name": "Mission Impact Field Name",
                    "failed_vals": ["external_column_name_not_real"],
                }
            },
            validation_failures,
        )
    def test_internal_column_names_are_mapped_multiple_times(self):
        column_mapping_validator = ColumnMappingValidator(TEST_SCHEMA)
        column_mapping_df = pd.DataFrame(
            data={
                INTERNAL_COLUMN_NAME_COLUMN_NAME: [
                    "internal_column_name1",
                    "internal_column_name1",
                ],
                GII_FIELD_NAME_COLUMN_NAME: [
                    "external_column_name1",
                    "external_column_name2",
                ],
            })

        validation_failures = column_mapping_validator.validate(
            column_mapping_df)

        self.assertTrue(validation_failures)
        self.assertEqual(
            {
                "expect_column_values_to_be_unique": {
                    "column_name": "Internal Column Name",
                    "failed_vals": ["internal_column_name1"],
                }
            },
            validation_failures,
        )
    def test_external_column_names_are_valid(self):
        column_mapping_validator = ColumnMappingValidator(TEST_SCHEMA)
        column_mapping_df = pd.DataFrame(
            data={
                INTERNAL_COLUMN_NAME_COLUMN_NAME: [
                    "internal_column_name1",
                    "internal_column_name2",
                ],
                GII_FIELD_NAME_COLUMN_NAME: [
                    "external_column_name1",
                    "external_column_name2",
                ],
            })

        validation_failures = column_mapping_validator.validate(
            column_mapping_df)

        self.assertFalse(validation_failures)
    def test_column_mapping_has_correct_columns(self):
        column_mapping_validator = ColumnMappingValidator(TEST_SCHEMA)
        column_mapping_df = pd.DataFrame(
            data={
                INTERNAL_COLUMN_NAME_COLUMN_NAME: [
                    "internal_column_name1",
                    "internal_column_name2",
                ],
                GII_FIELD_NAME_COLUMN_NAME: [
                    "external_column_name1",
                    "external_column_name2",
                ],
            })

        validation_failures = column_mapping_validator.validate(
            column_mapping_df)

        # No validation failures means that column mappings are valid.
        self.assertFalse(validation_failures)