coverage for lines, reorg todo tasks

This commit is contained in:
Radek Stepan 2014-10-30 18:36:40 -06:00
parent 01589751ca
commit 35b1f1ed60
7 changed files with 182 additions and 99 deletions

View File

@ -18,7 +18,8 @@ watch-js:
# Watch the styles.
watch-css:
$(GRUNT) watch
$(GRUNT) css # first build
$(GRUNT) watch # then watch
# Serve locally.
serve:

View File

@ -1,3 +1,5 @@
*Existing users: The url mapping has been preserved from the original app, we are just using a different domain. If you'd like to use the previous version(s), grab the tags `v1`, `v2`.*
#burnchart
GitHub Burndown Chart as a service. Answers the question "are my projects on track"?
@ -8,3 +10,84 @@ GitHub Burndown Chart as a service. Answers the question "are my projects on tra
[![License](http://img.shields.io/badge/license-AGPL--3.0-red.svg?style=flat)](LICENSE)
![image](https://raw.githubusercontent.com/radekstepan/burnchart/assembly/public/screenshots.jpg)
##Features
1. Running from the browser, apart from GitHub account sign in.
1. Private repos; sign in with your GitHub account.
1. Store projects in browser's `localStorage`.
1. Off days; specify which days of the week to leave out from ideal burndown progression line.
1. Trend line; to see if you can make it to the deadline at this pace.
1. Different point counting strategies; select from 1 issues = 1 point or read size from issue label.
##Configuration
At the moment, there is no ui exposed to change the app settings. You have to edit the `src/models/config.coffee` file.
An array of days when we are not working where Monday = 1. The ideal progression line won't *drop* on these days.
```coffeescript
"off_days": [ ]
```
Choose from `ONE_SIZE` which means each issue is worth 1 point or `LABELS` where issue labels determine its size.
```coffeescript
"points": "ONE_SIZE"
```
If you specify `LABELS` above, here is the place set the regex used to parse the number out of a label. When multiple matching size labels exist, their sum is taken.
```coffeescript
"size_label": /^size (\d+)$/
```
##Build
The app is built using [Node](http://nodejs.org/). To install dev dependencies:
```bash
$ make install
```
###Development
To create an unminified package with source maps for debugging:
```bash
$ make watch
```
You can then start a local http server with:
```bash
$ make serve
```
To test your changes run:
```bash
$ make test
```
And finally for code coverage:
```bash
$ make coverage
```
There is currently a bug that incorrectly shows code coverage (using [blanket.js](http://blanketjs.org/)) for modules that are loaded using [proxyquire](https://github.com/thlorenz/proxyquire).
###Production
To make a minified package for production:
```bash
$ make build
```
You can then publish the contents of the `public` folder to `gh-pages` branch with:
```bash
$ make publish
```

File diff suppressed because one or more lines are too long

View File

@ -1,89 +1,55 @@
#Tasks to do
- [ ] create notes about how original people can upgrade to burnchart
- [ ] clean up docs, track them on git or using Assembly system?
- [ ] check with austin@assembly.com if my repo looks good to be forked to Assembly
- [ ] fork it to Assembly
- [ ] landing page for the project and put message on `github-burndown-chart` repo
- [ ] provide a documentation site (because we ref it from hero)
- [ ] track users/make it easy for people to leave feedback
##Next Release
- [ ] http://burnchart.io#rails I would expect it to list all the projects for that owner so I can select one of them (Ryan); we could show a list of available project names with their: `description`, `private` flag and `has_issues` making the project greyed out if no issues found
##Backlog
- [ ] coverage using `blanket` does not work in tests that `proxyquire`
- [ ] highlight today in the chart better
- [ ] one click to go from a project or milestone view to github
- [ ] be able to specify milestone by name (will nicely show in title)
- [ ] focus on form fields style (blue outline etc)
- [ ] switch off `user-select` on buttons
- [ ] make async pages transition so that there is no "jumping" on the page
- [ ] index page alert tooltip (like on chart page)
- [ ] app icon like http://thenounproject.com/term/fire/50966/
- [ ] tell people if they have no due date
- [ ] calculate left margin based on the total number of points text width
- [ ] responsive layout
- [ ] show project name on the milestone page, in the title
- [ ] conctact the people that have starred the original burndown chart telling them about the repo; keep track of connects via a tiny crm/spreadsheet and use a custom email address like radek@burnchart.io
- [ ] html entities (like & at the bottom of the page) are not being rendered correctly; {{{}}} ?
- [ ] `rails/rails/24` has issues in two clusters as if merged from two milestones
- [ ] trendline cutting into axes
- [ ] topbar messages set position from `top`, does not work when we have scrolled on the page; show sticky to the top and move with our scroll; at the very least make them show up at the top and not be hidden
- [ ] GitHub Pages 404 file
- [ ] deal with Firebase timing out, are we still logged-in?
- [ ] check that we have not run out of requests to make
- [ ] what if milestone does not match our strategy?
- [ ] web storage and location hash supported by 93% of browsers; good enough?
- [ ] create a 500/400/loading system messages
- [ ] mediator `!app/notify/edit` will edit the current notification
- [ ] handle multiple notifications, for example success on closed milestone and then show a different chart or add a project
- [ ] be able to logout
- [ ] be able to delete added projects; see the cog at the bottom of tables
- [ ] how GitHub show commit activity in weekly slots, can we have something like this in the chart? Basically show commits in that week and their users
- [ ] add a chart straight from the hero banner
- [ ] on chart page show a little progress bar in the title
- [ ] use tap plugin for `Ractive`
- [ ] the app bundle (albeit uncompressed) clocks in at 1.5MB, reduce the size (`d3` is huge (use [grunt-smash](https://github.com/cvisco/grunt-smash), [docs here](https://github.com/mbostock/smash/wiki)), `localForage` not nedded)
- [ ] make the names consistent, reuse code, template etc.
- [ ] implement search box that quickly takes you to a chart (and may hide "pro actions")
- [ ] make an extensible architecture; for example I might want to enable another trendline in the chart which shows estimated end date if one keeps up the pace of last 5 days.
- [ ] desktop app via `node-gyp`
- [ ] when watching, only build changed files and then concat them to make builds much faster
- [ ] smooth animation when transitioning between icons and notifications
- [ ] show animated lines when drawing the chart
- [ ] highlight changes from past fetch
- [ ] In add a project form autocomplete on my username, orgs I am member of and repos I have access to
- [ ] Make sure the padding fits throughout the interface; we have user-select on elements.
- [ ] Have an app wide of triggering a URL and have named routes too
- [ ] rotate between percentage progress and points left
- [ ] be able to config options through UI that currently have to be hardcoded in config
- [ ] choose your own theme
- [ ] show burndown chart for all milestones
- [ ] handle Enterprise editions of GH (signed up in gh dev program)
- [ ] auto-update the chart (with delay when no activity) when logged-in
- [ ] add weekly velocity across all projects and a bar chart to that effect
- [ ] show a little lightning and a number for today's velocity
- [ ] show burnchart only for your tasks; this would be a second category of projects & tasks in the dashboard
- [ ] show an overall text-based status like: all projects on time etc.
- [ ] until GH fix milestone start date then provide an option to specify it (either do that on GH server or locally); for example a text like this: `starts: 09-10-2014` in the description which we provide regex for
- [ ] work on mobile devices
- [ ] show velocity number for each member of the team in the corner of the layout (the point is to get better at planning how many tasks can people take on, thus how fast can we work)
- [ ] if we have the above, we could get a suggestion as to how many points we are able to go through in the next iteration while keeping everyone at their max capacity. One could almost drag & drop tasks to people and see a live progress of how the ideal trendline will fare based on a known speed of people; or we could be somehow notified that people are maxed out
- [ ] show velocity for all team members and how it progresses through time
- [ ] points collector - give medals for 1st 3 spots in terms of velocity
- [ ] show past commits or due dates like in [this calendar](https://dribbble.com/shots/1736128-Meetups-Page?list=shots&sort=popular&timeframe=now&offset=5)
- [ ] support Jira & Gitlab
- [ ] when fetching subsequent updates, fetch only the last page of issues since some repos are large (2.5MB & 19 pages for `mbostock/d3`); actually that is for all issues, not milestone constrained. So only an issue if we want to see a burnchart for all the issues for a repo
- [ ] if all issue circles are close to each other, make a "master circle" that amalgamates all the issues into one large circle, makes for a prettier view
- [ ] make better x-axis date display, otherwise we see all 1s.
- [ ] some [fun loading messages](http://www.gamefaqs.com/pc/561176-simcity-4/faqs/22135) from Sim City.
- [ ] show number of tasks, points, days left just like in Assembly on chart page
- [ ] receive reminders when a due date is nearing and our project is behind schedule; receive a daily digest saying how the progress went in that day/week; these are all ways we can help people answer the question: is my project on track?
- [ ] if we save user's tokens we could check data on their behalf, then messaging would work; API could be provided so that others could plug into the data
- [ ] derive insights; one part is to see if we are on track, the other is to get better at estimating. If we know when an issue is worked on and when closed, with its accompanying size, we can say which issues went well, and which fared poorly. Then we can visualize a weekly/monthly/per-milestone list of loosers and winners. Perhaps the user can glean a pattern from that.
- [ ] create fake Firebase endpoint for GitHub auth, or change the endpoint in settings (easier)
- [ ] have an icon that shows a progress for a milestone that can be shown on GitHub README page
- [ ] try appending '.0' to milestone titles to pass `semver` validation and compare 4.0, 5.x etc.
###Important
- [ ] 3 `rails/rails/24` has issues in two clusters as if merged from two milestones, does it mean that sort by date is not working?
- [ ] 4 http://burnchart.io#rails I would expect it to list all the projects for that owner so I can select one of them (Ryan); we could show a list of available project names with their: `description`, `private` flag and `has_issues` making the project greyed out if no issues found, cache these projects in local storage
- [ ] 4 if all issue circles in the chart are close to each other, make a "master circle" that amalgamates all the issues into one large circle, makes for a prettier view
- [ ] 4 until GH fix milestone start date then provide an option to specify it; for example a text like this: `starts: 09-10-2014` in the description which we provide regex for in the config
- [ ] 5 be able to config options through ui that currently have to be hardcoded in the config
- [ ] 5 be able to delete added projects; on the project page listing all milestone, enable the cog at the bottom of the table, clicking it slides a link with a dustbin next to it which deletes the project
- [ ] 3 dates not parsing well with timezones, see ideal lines test file
###Normal
- [ ] 1 highlight today in the chart better, perhaps just a red line and a text next to it saying what date it is
- [ ] 1 one click to go from a project or milestone view to github; have an icon in the header
- [ ] 1 use tap plugin for `Ractive` so we work on mobile
- [ ] 2 show project name on the milestone page, in the title so that we immediately know where we are
- [ ] 2 focus on form fields style (blue outline etc) and switch off `user-select` on buttons
- [ ] 2 be able to logout, add an icon next to the name with arrow leading out of the square
- [ ] 4 make better x-axis date display, otherwise we see all 1s, basically show better bands, choose per week or per month where appropriate
- [ ] 3 In add a project form autocomplete on my username, orgs I am member of and repos I have access to, use code from [elastic-med](https://github.com/intermine/intermine-apps-c/blob/master/elastic-med/src/components/search.coffee#L24-L46) to show the first option with Tab doing the autocomplete
- [ ] 4 show number of tasks, points, days left, progress bar in the header of a chart page, just like in Assembly
- [ ] 3 be able to specify milestone by name (will nicely show in title), so when we type in `owner/name/name` it should resolve the number
- [ ] 3 trendline is sometimes cutting into axes, but maybe it was just an interpolation
- [ ] 3 deal with Firebase timing out, are we still logged-in? Show a warning page telling the people to refresh the browser (adding a button to do the same)
- [ ] 3 use issue title to determine size
- [ ] 3 the app bundle (albeit uncompressed) clocks in at 1.5MB, reduce the size (`d3` is huge (use [grunt-smash](https://github.com/cvisco/grunt-smash), [docs here](https://github.com/mbostock/smash/wiki)))
- [ ] 5 responsive layout hiding header links into a button
- [ ] 5 show burndown chart for all milestones
###Nice to Have
- [ ] 1 tell people if they have no due date
- [ ] 2 try appending '.0' to milestone titles to pass `semver` validation and compare 4.0, 5.x etc.
- [ ] 2 show an overall text-based status like: all projects on time etc.
- [ ] 2 web storage and location hash supported by 93% of browsers; good enough? check for support and throw an error
- [ ] 2 check that we have not run out of requests to make, write a test for this, it should throw an error when we are making a request
- [ ] 2 index page alert tooltip (like on chart page)
- [ ] 3 when fetching subsequent updates, fetch only the last page of issues since some repos are large (2.5MB & 19 pages for `mbostock/d3`); actually that is for all issues, not milestone constrained. So only an issue if we want to see a burnchart for all the issues for a repo
- [ ] 3 choose your own theme in config
- [ ] 3 rotate between percentage progress and points left, fade them in/out
- [ ] 3 make async pages transition so that there is no "jumping" on the page
- [ ] 3 calculate left margin based on the total number of points text width
- [ ] 3 GitHub Pages 404 file
- [ ] 3 show burnchart only for your tasks; this would be a second category of projects & tasks in the dashboard
- [ ] 3 smooth animation when transitioning between icons and notifications, sort of there, but not really
- [ ] 4 implement search box that quickly takes you to a chart (and may hide "pro actions")
- [ ] 4 handle Enterprise editions of GH (signed up in gh dev program)
- [ ] 4 auto-update the chart (with delay when no activity) when logged-in
- [ ] 4 show animated lines when drawing the chart
- [ ] 5 how GitHub show commit activity in weekly slots, can we have something like this in the chart? Basically show commits in that week and their users
- [ ] 5 create fake Firebase endpoint for GitHub auth, or change the endpoint in settings (easier) if people don't trust Google Firebase
- [ ] 5 show past commits or due dates like in [this calendar](https://dribbble.com/shots/1736128-Meetups-Page?list=shots&sort=popular&timeframe=now&offset=5)
- [ ] 7 support Jira, Gitlab, Assembly

View File

@ -29,8 +29,6 @@ module.exports = new Model
"datetime": /^(\d{4}-\d{2}-\d{2})T(.*)/
# How does a size label look like?
"size_label": /^size (\d+)$/
# How do we specify which user/repo/(milestone) we want?
"location": /^#!((\/[^\/]+){2,3})$/
# Process all issues as one size (ONE_SIZE) or use labels (LABELS).
"points": 'ONE_SIZE'
# Request pertaining.

View File

@ -6,7 +6,7 @@ config = require '../../models/config.coffee'
module.exports =
# A graph of closed issues.
# `issues`: issues list
# `issues`: closed issues list
# `created_at`: milestone start date
# `total`: total number of points (open & closed issues)
actual: (issues, created_at, total) ->

View File

@ -4,7 +4,42 @@ lines = require '../src/modules/chart/lines.coffee'
module.exports =
# TODO: add moar tests.
'lines - na': (done) ->
assert.equal 1, 1
'lines - actual': (done) ->
issues = [
{ 'size': 3, 'date': 2 }
{ 'size': 2, 'date': 3 }
{ 'size': 1, 'date': 4 }
]
points = ( points for { points } in lines.actual issues, 1, 6 )
assert.deepEqual points, [ 6, 3, 1, 0 ]
do done
'lines - ideal': (done) ->
a = '2011-04-01T00:00:00Z'
b = '2011-04-03T00:00:00Z'
line = lines.ideal(a, b, 4)[ 0...3 ]
assert.deepEqual line, [
{ 'date': new Date('2011-04-01T06:00:00Z'), 'points': 4 }
{ 'date': new Date('2011-04-02T06:00:00Z'), 'points': 2 }
{ 'date': new Date('2011-04-03T06:00:00Z'), 'points': 0 }
]
do done
'lines - trend': (done) ->
issues = [
{ 'date': 1, 'points': 4 }
{ 'date': 2, 'points': 1 }
{ 'date': 3, 'points': 1 }
]
line = (Math.round(points) for { points } in lines.trend(issues, 1, new Date))
assert.deepEqual line, [ 2, 1 ]
do done