def test__get_pair_compatibility_dict_internal_error(self):
        from compatibility_lib import compatibility_store
        from compatibility_lib import package

        expected = {
            'py2': {
                'status': main.BadgeStatus.PAIR_INCOMPATIBLE,
                'details': {
                    'package2': {}
                }
            },
            'py3': {
                'status': main.BadgeStatus.PAIR_INCOMPATIBLE,
                'details': {
                    'package2': {}
                }
            },
        }

        PACKAGE_1 = package.Package("package1")
        PACKAGE_2 = package.Package("package2")
        cr_py2 = compatibility_store.CompatibilityResult(
            packages=[PACKAGE_1, PACKAGE_2],
            python_major_version=2,
            status=compatibility_store.Status.CHECK_WARNING)
        cr_py3 = compatibility_store.CompatibilityResult(
            packages=[PACKAGE_1, PACKAGE_2],
            python_major_version=3,
            status=compatibility_store.Status.CHECK_WARNING)
        pair_result = [cr_py2, cr_py3]
        self.fake_store._packages_to_compatibility_result[frozenset(
            [PACKAGE_1, PACKAGE_2])] = pair_result

        mock_self_res = mock.Mock()
        self_res = {
            'py2': {
                'status': main.BadgeStatus.SUCCESS,
                'details': {}
            },
            'py3': {
                'status': main.BadgeStatus.SUCCESS,
                'details': {}
            },
        }
        mock_self_res.return_value = self_res
        patch_self_status = mock.patch('main._get_self_compatibility_dict',
                                       mock_self_res)

        pkgs = ['package2']
        patch_configs = mock.patch('main.configs.PKG_LIST', pkgs)

        with self.patch_checker, self.patch_store, patch_self_status, \
                patch_configs:
            result_dict = main._get_pair_compatibility_dict('package1')

        self.assertEqual(result_dict, expected)
    def test__get_pair_compatibility_dict_self_conflict(self):
        # If the pair package is not self compatible, the package being checked
        # should not be marked as `INTERNAL_ERROR`.
        from compatibility_lib import compatibility_store
        from compatibility_lib import package

        expected = {
            'py2': {
                'status': main.BadgeStatus.SUCCESS,
                'details': {}
            },
            'py3': {
                'status': main.BadgeStatus.SUCCESS,
                'details': {}
            },
        }

        PACKAGE_1 = package.Package("opencensus")
        PACKAGE_2 = package.Package("tensorflow")
        cr_py2 = compatibility_store.CompatibilityResult(
            packages=[PACKAGE_1, PACKAGE_2],
            python_major_version=2,
            status=compatibility_store.Status.CHECK_WARNING)
        cr_py3 = compatibility_store.CompatibilityResult(
            packages=[PACKAGE_1, PACKAGE_2],
            python_major_version=3,
            status=compatibility_store.Status.CHECK_WARNING)
        pair_result = [cr_py2, cr_py3]
        self.fake_store._packages_to_compatibility_result[frozenset(
            [PACKAGE_1, PACKAGE_2])] = pair_result

        mock_self_res = mock.Mock()
        self_res = {
            'py2': {
                'status': main.BadgeStatus.SELF_INCOMPATIBLE,
                'details': {}
            },
            'py3': {
                'status': main.BadgeStatus.SELF_INCOMPATIBLE,
                'details': {}
            },
        }
        mock_self_res.return_value = self_res
        patch_self_status = mock.patch('main._get_self_compatibility_dict',
                                       mock_self_res)

        pkgs = [p.install_name for p in (PACKAGE_1, PACKAGE_2)]
        patch_configs = mock.patch('main.configs.PKG_LIST', pkgs)

        with self.patch_checker, self.patch_store, patch_self_status, \
                patch_configs:
            result_dict = main._get_pair_compatibility_dict(
                PACKAGE_1.install_name)

        self.assertEqual(result_dict, expected)
    def test__get_pair_compatibility_dict_success(self):
        success_status = main.BadgeStatus.SUCCESS
        expected = {
            'py2': {
                'status': main.BadgeStatus.SUCCESS,
                'details': {}
            },
            'py3': {
                'status': main.BadgeStatus.SUCCESS,
                'details': {}
            },
        }

        pkgs = ['tensorflow', 'apache-beam[gcp]']
        patch_configs = mock.patch('main.configs.PKG_LIST', pkgs)
        with self.patch_checker, self.patch_store, patch_configs:
            result_dict = main._get_pair_compatibility_dict('tensorflow')

        self.assertEqual(result_dict, expected)