Skip to content

Commit

Permalink
Allow registering private packages (#749)
Browse files Browse the repository at this point in the history
LP: #1602793

Signed-off-by: Sergio Schvezov <sergio.schvezov@ubuntu.com>
  • Loading branch information
sergiusens committed Aug 23, 2016
1 parent 929aaa8 commit 2dabfda
Show file tree
Hide file tree
Showing 6 changed files with 32 additions and 9 deletions.
5 changes: 5 additions & 0 deletions integration_tests/test_store_register.py
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,11 @@ def test_successful_registration(self):
snap_name = 'u1test{}'.format(uuid.uuid4().int)
self.register(snap_name)

def test_successful_private_registration(self):
self.login()
snap_name = 'u1test{}'.format(uuid.uuid4().int)
self.register(snap_name, '--private')

def test_failed_registration_already_registered(self):
self.login()
# The snap name is already registered.
Expand Down
4 changes: 2 additions & 2 deletions snapcraft/_store.py
Original file line number Diff line number Diff line change
Expand Up @@ -73,11 +73,11 @@ def logout():
logger.info('Credentials cleared.')


def register(snap_name):
def register(snap_name, is_private=False):
logger.info('Registering {}.'.format(snap_name))
store = storeapi.StoreClient()
try:
store.register(snap_name)
store.register(snap_name, is_private)
except storeapi.errors.InvalidCredentialsError:
logger.error('No valid credentials found.'
' Have you run "snapcraft login"?')
Expand Down
4 changes: 2 additions & 2 deletions snapcraft/main.py
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@
snapcraft [options] cleanbuild
snapcraft [options] login
snapcraft [options] logout
snapcraft [options] register <snap-name>
snapcraft [options] register <snap-name> [--private]
snapcraft [options] upload <snap-file>
snapcraft [options] push <snap-file> [--release <channels>]
snapcraft [options] release <snap-name> <revision> <channel>
Expand Down Expand Up @@ -284,7 +284,7 @@ def _is_store_command(args):

def _run_store_command(args):
if args['register']:
snapcraft.register(args['<snap-name>'])
snapcraft.register(args['<snap-name>'], args['--private'])
elif args['upload']:
logger.warning('DEPRECATED: Use `push` instead of `upload`')
snapcraft.push(args['<snap-file>'])
Expand Down
9 changes: 5 additions & 4 deletions snapcraft/storeapi/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -145,8 +145,8 @@ def logout(self):
self.conf.clear()
self.conf.save()

def register(self, snap_name):
self.sca.register(snap_name, constants.DEFAULT_SERIES)
def register(self, snap_name, is_private=False):
self.sca.register(snap_name, is_private, constants.DEFAULT_SERIES)

def upload(self, snap_name, snap_filename):
# FIXME This should be raised by the function that uses the
Expand Down Expand Up @@ -308,9 +308,10 @@ def get_macaroon(self, acls):
else:
raise errors.StoreAuthenticationError('Failed to get macaroon')

def register(self, snap_name, series):
def register(self, snap_name, is_private, series):
auth = _macaroon_auth(self.conf)
data = dict(snap_name=snap_name, series=series)
data = dict(snap_name=snap_name, is_private=is_private,
series=series)
response = self.post(
'register-name/', data=json.dumps(data),
headers={'Authorization': auth,
Expand Down
5 changes: 5 additions & 0 deletions snapcraft/tests/store/test_store_client.py
Original file line number Diff line number Diff line change
Expand Up @@ -169,6 +169,11 @@ def test_register_name_successfully(self):
# No exception will be raised if this is succesful
self.client.register('test-good-snap-name')

def test_register_private_name_successfully(self):
self.client.login('dummy', 'test correct password')
# No exception will be raised if this is succesful
self.client.register('test-good-snap-name', is_private=True)

def test_already_registered(self):
self.client.login('dummy', 'test correct password')
with self.assertRaises(errors.StoreRegistrationError) as raised:
Expand Down
14 changes: 13 additions & 1 deletion snapcraft/tests/test_commands_register.py
Original file line number Diff line number Diff line change
Expand Up @@ -60,7 +60,19 @@ def test_register_name_successfully(self):
"Congratulations! You're now the publisher for 'test-snap'.\n",
self.fake_logger.output)

mock_register.assert_called_once_with('test-snap', '16')
mock_register.assert_called_once_with('test-snap', False, '16')

def test_register_private_name_successfully(self):
with mock.patch.object(
storeapi.SCAClient, 'register') as mock_register:
main(['register', 'test-snap', '--private'])

self.assertEqual(
'Registering test-snap.\n'
"Congratulations! You're now the publisher for 'test-snap'.\n",
self.fake_logger.output)

mock_register.assert_called_once_with('test-snap', True, '16')

def test_registration_failed(self):
response = mock.Mock()
Expand Down

0 comments on commit 2dabfda

Please sign in to comment.