def test_register_pack_invalid_ref_name_friendly_error_message(self):
        registrar = ResourceRegistrar(use_pack_cache=False)

        # Invalid ref
        expected_msg = (
            r'Pack ref / name can only contain valid word characters .*?,'
            ' dashes are not allowed.')
        self.assertRaisesRegexp(ValidationError,
                                expected_msg,
                                registrar._register_pack_db,
                                pack_name=None,
                                pack_dir=PACK_PATH_13)

        try:
            registrar._register_pack_db(pack_name=None, pack_dir=PACK_PATH_13)
        except ValidationError as e:
            self.assertTrue(
                "'invalid-has-dash' does not match '^[a-z0-9_]+$'" in str(e))
        else:
            self.fail('Exception not thrown')

        # Pack ref not provided and name doesn't contain valid characters
        expected_msg = (
            r'Pack name "dummy pack 14" contains invalid characters and "ref" '
            'attribute is not available. You either need to add')
        self.assertRaisesRegexp(ValueError,
                                expected_msg,
                                registrar._register_pack_db,
                                pack_name=None,
                                pack_dir=PACK_PATH_14)
    def test_register_pack_pack_ref(self):
        # Verify DB is empty
        pack_dbs = Pack.get_all()

        self.assertEqual(len(pack_dbs), 0)

        registrar = ResourceRegistrar(use_pack_cache=False)
        registrar._pack_loader.get_packs = mock.Mock()
        registrar._pack_loader.get_packs.return_value = {
            'dummy_pack_1': PACK_PATH_1,
            'dummy_pack_6': PACK_PATH_6
        }
        packs_base_paths = content_utils.get_packs_base_paths()
        registrar.register_packs(base_dirs=packs_base_paths)

        # Ref is provided
        pack_db = Pack.get_by_name('dummy_pack_6')
        self.assertEqual(pack_db.ref, 'dummy_pack_6_ref')
        self.assertEqual(len(pack_db.contributors), 0)

        # Ref is not provided, directory name should be used
        pack_db = Pack.get_by_name('dummy_pack_1')
        self.assertEqual(pack_db.ref, 'dummy_pack_1')

        # "ref" is not provided, but "name" is
        registrar._register_pack_db(pack_name=None, pack_dir=PACK_PATH_7)

        pack_db = Pack.get_by_name('dummy_pack_7_name')
        self.assertEqual(pack_db.ref, 'dummy_pack_7_name')

        # "ref" is not provided and "name" contains invalid characters
        expected_msg = 'contains invalid characters'
        self.assertRaisesRegexp(ValueError, expected_msg, registrar._register_pack_db,
                                pack_name=None, pack_dir=PACK_PATH_8)
    def test_register_pack_pack_ref(self):
        # Verify DB is empty
        pack_dbs = Pack.get_all()

        self.assertEqual(len(pack_dbs), 0)

        registrar = ResourceRegistrar(use_pack_cache=False)
        registrar._pack_loader.get_packs = mock.Mock()
        registrar._pack_loader.get_packs.return_value = {
            'dummy_pack_1': PACK_PATH_1,
            'dummy_pack_6': PACK_PATH_6
        }
        packs_base_paths = content_utils.get_packs_base_paths()
        registrar.register_packs(base_dirs=packs_base_paths)

        # Ref is provided
        pack_db = Pack.get_by_name('dummy_pack_6')
        self.assertEqual(pack_db.ref, 'dummy_pack_6_ref')
        self.assertEqual(len(pack_dbs[0].contributors), 0)

        # Ref is not provided, directory name should be used
        pack_db = Pack.get_by_name('dummy_pack_1')
        self.assertEqual(pack_db.ref, 'dummy_pack_1')

        # "ref" is not provided, but "name" is
        registrar._register_pack_db(pack_name=None, pack_dir=PACK_PATH_7)

        pack_db = Pack.get_by_name('dummy_pack_7_name')
        self.assertEqual(pack_db.ref, 'dummy_pack_7_name')

        # "ref" is not provided and "name" contains invalid characters
        expected_msg = 'contains invalid characters'
        self.assertRaisesRegexp(ValueError, expected_msg, registrar._register_pack_db,
                                pack_name=None, pack_dir=PACK_PATH_8)
    def test_register_pack_invalid_ref_name_friendly_error_message(self):
        registrar = ResourceRegistrar(use_pack_cache=False)

        # Invalid ref
        expected_msg = (r'Pack ref / name can only contain valid word characters .*?,'
                        ' dashes are not allowed.')
        self.assertRaisesRegexp(ValidationError, expected_msg, registrar._register_pack_db,
                                pack_name=None, pack_dir=PACK_PATH_13)

        try:
            registrar._register_pack_db(pack_name=None, pack_dir=PACK_PATH_13)
        except ValidationError as e:
            self.assertTrue("'invalid-has-dash' does not match '^[a-z0-9_]+$'" in six.text_type(e))
        else:
            self.fail('Exception not thrown')

        # Pack ref not provided and name doesn't contain valid characters
        expected_msg = (r'Pack name "dummy pack 14" contains invalid characters and "ref" '
                        'attribute is not available. You either need to add')
        self.assertRaisesRegexp(ValueError, expected_msg, registrar._register_pack_db,
                                pack_name=None, pack_dir=PACK_PATH_14)