Fix handling not existing repos

Also ensure that we don't break it again with an integration test.
This commit is contained in:
Piotr Sarnacki 2014-02-12 08:01:48 +01:00
parent a8784a58fa
commit e5749b0629
6 changed files with 23 additions and 6 deletions

View File

@ -48,6 +48,8 @@ Travis.FirstSyncController = Em.Controller.extend
isSyncing: Ember.computed.alias('user.isSyncing')
Travis.IndexErrorController = Em.Controller.extend()
require 'controllers/accounts'
require 'controllers/build'
require 'controllers/builds'

View File

@ -140,7 +140,10 @@ require 'travis/model'
if repos.length > 0
repos[0]
else
@fetch(slug: slug).then (repos) -> Ember.get(repos, 'firstObject')
@fetch(slug: slug).then (repos) ->
error = new Error('repo not found')
error.slug = slug
Ember.get(repos, 'firstObject') || throw(error)
# buildURL: (slug) ->
# if slug then slug else 'repos'

View File

@ -252,9 +252,15 @@ Travis.RepoRoute = Ember.Route.extend
Travis.Repo.fetchBySlug(slug)
actions:
error: ->
Ember.run.next this, ->
@render('repos/not_found', outlet: 'main')
error: (error) ->
# if error throwed has a slug (ie. it was probably repo not found)
# set the slug on index.error controller to allow to properly
# display the repo information
if error.slug
this.controllerFor('index.error').set('slug', error.slug)
# bubble to the top
return true
Travis.IndexRoute = Ember.Route.extend
renderTemplate: ->

View File

@ -6,4 +6,8 @@ module "Router",
test 'renders notFound template when URL can\t be found', ->
visit('/somehing/something/something/.../dark/side/..../something/something/something/.../complete').then ->
equal('The requested page was not found.', $('#main').text().trim())
equal($('#main').text().trim(), 'The requested page was not found.')
test 'renders repo not found information when repo can\'t be found', ->
visit('/what-is-this/i-dont-even').then ->
equal($('#main').text().trim(), 'The repository at what-is-this/i-dont-even was not found.')

View File

@ -77,7 +77,9 @@ $.mockjax
if !settings.data
this.responseText = { repos: repos }
else if slug = settings.data.slug
this.responseText = { repos: [$.detect(repos, (repository) -> repository.slug == slug)] }
repo = $.detect(repos, (repository) -> repository.slug == slug)
repos = if repo then [repo] else []
this.responseText = { repos: repos }
else if search = settings.data.search
this.responseText = { repos: $.select(repos, (repository) -> repository.slug.indexOf(search) > -1).toArray() }
else if settings.data.member