Skip to content

Commit

Permalink
Merge pull request #3 from hodgestar/feature/add-support-for-cancelli…
Browse files Browse the repository at this point in the history
…ng-brews

Add support for cancelling brews.
  • Loading branch information
hodgestar committed May 12, 2020
2 parents 501dc7e + 6982ee2 commit b74cc45
Show file tree
Hide file tree
Showing 2 changed files with 55 additions and 1 deletion.
21 changes: 20 additions & 1 deletion coffee/api.py
Original file line number Diff line number Diff line change
Expand Up @@ -99,7 +99,7 @@ def beverage_queue(self, beverage):

def brewables(self, person):
brewables = []
for queue in self._queues.itervalues():
for queue in self._queues.values():
items = [b for b in queue if b.person == person]
for b in items:
if b.ready:
Expand All @@ -119,6 +119,19 @@ def brew(self, data):
queue.append(brewable)
return brewable

def cancel(self, person):
cancelled = []
for queue in self._queues.values():
items = [b for b in queue if b.person == person]
for b in items:
if b.ready:
queue.remove(b)
cancelled.extend(items)
for b in items:
queue.remove(b)
cancelled.sort(key=lambda b: b.ready_at)
return cancelled


@app.route('/')
def index():
Expand Down Expand Up @@ -146,6 +159,12 @@ def api_v1_brew(person, beverage, subtype=None):
return jsonify(brew=brewable.to_dict()), 201


@app.route('/api/v1/person/<person>/cancel', methods=['POST'])
def api_v1_cancel(person):
cancelled = kitchen.cancel(person)
return jsonify(cancelled=[brew.to_dict() for brew in cancelled]), 200


@app.route('/api/v1/person/<person>/status', methods=['GET'])
def api_v1_status(person):
brewables = kitchen.brewables(person)
Expand Down
35 changes: 35 additions & 0 deletions coffee/tests/test_api.py
Original file line number Diff line number Diff line change
Expand Up @@ -67,3 +67,38 @@ def test_v1_brew_subtype(self):
"subtype": "mocha",
}
}

def test_v1_cancel_empty_queue(self):
rv = self.app.post('/api/v1/person/me/cancel')
assert json.loads(rv.data) == {
"cancelled": [],
}

def test_v1_cancel_queue_with_brewables(self):
kitchen.brew({"person": "me", "beverage": "coffee"})
kitchen.brew({"person": "me", "beverage": "coffee"})
kitchen.brew({"person": "me", "beverage": "tea"})
rv = self.app.post('/api/v1/person/me/cancel')
assert json.loads(rv.data) == {
"cancelled": [
{
"beverage": "coffee",
"person": "me",
"status": "brewing",
"subtype": None,
},
{
"beverage": "coffee",
"person": "me",
"status": "waiting",
"subtype": None,
},
{
"beverage": "tea",
"person": "me",
"status": "brewing",
"subtype": None,
},
],
}
assert kitchen.brewables("me") == []

0 comments on commit b74cc45

Please sign in to comment.