Skip to content
This repository has been archived by the owner on Feb 8, 2018. It is now read-only.

Commit

Permalink
Front-load packages that are actually on Gratipay
Browse files Browse the repository at this point in the history
Make the onboarding as easy as possible.
  • Loading branch information
chadwhitacre committed Jun 14, 2017
1 parent 034614f commit b81084e
Show file tree
Hide file tree
Showing 2 changed files with 22 additions and 22 deletions.
14 changes: 7 additions & 7 deletions tests/ttw/test_package_discovery.py
Original file line number Diff line number Diff line change
Expand Up @@ -22,33 +22,33 @@ def test_auth_also_gets_discovery_page_by_default(self):

def test_pasting_a_package_json_works(self):
self.make_package(name='amperize', description='Amperize!')
glob = self.make_package(name='glob', description='Glob!', emails=['[email protected]'])
mysql = self.make_package(name='mysql', description='MySQL!', emails=['[email protected]'])
self.make_package(name='netjet', description='Netjet!', emails=['[email protected]'])
scape = self.make_package(name='scape', description='Reject!', emails=['[email protected]'])
self.claim_package(self.make_participant('alice'), 'amperize')
self.claim_package(self.make_participant('bob'), 'glob')
self.claim_package(self.make_participant('bob'), 'mysql')
self.claim_package(self.make_participant('goat'), 'scape')

admin = self.make_admin()
glob.team.update(name='Glub')
glob.team.update_review_status('approved', admin)
mysql.team.update(name='MySQL')
mysql.team.update_review_status('approved', admin)
scape.team.update_review_status('rejected', admin)

self.visit('/on/npm/')
self.css('textarea').fill('''\
{ "dependencies": { "glob": "..." , "amperize": "...", "scape": "..."}
{ "dependencies": {"scape": "...", "mysql": "...", "amperize": "..."}
, "optionalDependencies": {"netjet": "...", "falafel": "..."}
}
''')
self.css('form.package-json button').click()

names = [x.text for x in self.css('.listing-name')]
assert names == ['glob \u2192 Glub', 'amperize', 'scape', 'netjet', 'falafel']
assert names == ['mysql \u2192 MySQL', 'scape', 'amperize', 'netjet', 'falafel']

statuses = [x.text[3:] for x in self.css('.listing-details .status')]
assert statuses == ['Approved', 'Unreviewed', 'Rejected', 'Unclaimed']
assert statuses == ['Approved', 'Rejected', 'Unreviewed', 'Unclaimed']

enabled = [not x.has_class('disabled') for x in self.css('td.item')]
assert enabled == [True, True, True, True, False]
30 changes: 15 additions & 15 deletions www/on/npm/index.html.spt
Original file line number Diff line number Diff line change
Expand Up @@ -34,15 +34,10 @@ if request.method == 'POST':
except:
raise Response(400)

# We want a single list of (source, name, package, project, is_ready)
# tuples. Source is 'dependencies', 'devDependencies', or
# 'optionalDependencies'. We want name in the tuple in case there is no
# package. Package and team should be None if we don't have one. is_ready
# is:
#
# True claimed package
# False unclaimed package
# None unknown package
# We want a single list of (source, name, package, project) tuples. Source
# is 'dependencies', 'devDependencies', or 'optionalDependencies'. We want
# name in the tuple in case there is no package. Package and team should be
# None if we don't have one.

groups = [package_json.get(g, OrderedDict()) for g in GROUPS]
assert all(d.__class__ is OrderedDict for d in groups)
Expand All @@ -68,11 +63,16 @@ if request.method == 'POST':
for source, deps in zip(GROUPS, groups):
for name in deps:
package, project = known.get(name, (None, None))
is_ready = bool(project) if package else None
deps[name] = (source, name, package, project, is_ready)
deps[name] = (source, name, package, project)

# Flatten into a single list, martellily: https://stackoverflow.com/a/952952
discovered = [rec for group in groups for rec in group.values()]
# Flatten into a single list, approved teams first.
ready, not_ready = [], []
for group in groups:
for rec in group.values():
project = rec[3]
is_ready = project.is_approved if project else False
(ready if is_ready else not_ready).append(rec)
discovered = ready + not_ready

[---]
{% from "templates/nav-tabs.html" import nav_tabs with context %}
Expand Down Expand Up @@ -105,7 +105,7 @@ if request.method == 'POST':
{% if flow == None %}
{% if discovered %}
<table class="listing">
{% for i,(group, name, package, project, is_ready) in enumerate(discovered, start=1) %}
{% for i,(group, name, package, project) in enumerate(discovered, start=1) %}
<tr>
<td class="item i{{i}}{% if not package %} disabled{% endif %}">
{% if project %}
Expand Down Expand Up @@ -161,7 +161,7 @@ if request.method == 'POST':
{{ _('Paste a package.json to find packages to pay for:') }}
</p>

<textarea name="package.json" autofocus wrap="off"
<textarea name="package.json"{% if not discovered %} autofocus{% endif %} wrap="off"
>{{ request.body.get('package.json', ghost.PACKAGE_JSON) }}</textarea>

<div class="important-button">
Expand Down

0 comments on commit b81084e

Please sign in to comment.