From 018eafe84bc7990a7b8d1d0b341c28c147a6cba0 Mon Sep 17 00:00:00 2001 From: Piotr Sarnacki Date: Tue, 29 Oct 2013 20:48:27 +0100 Subject: [PATCH] Fix problem with getting started template rendering on first sync When first sync template is displayed, user usually doesn't have any repos, which also triggers rendering of getting started template. The fix for this is to handle the action to render getting started page on first sync and do nothing in such case. I also added a test to ensure that it works correctly. --- assets/scripts/app/controllers/repos.coffee | 10 +++---- assets/scripts/app/routes.coffee | 5 ++++ assets/scripts/app/views.coffee | 2 +- .../spec/integration/my_repos_spec.coffee | 1 - assets/scripts/spec/integration/sync.coffee | 26 +++++++++++++++++++ assets/scripts/spec/spec_helper.coffee | 16 +++++++----- assets/scripts/travis.coffee | 1 + 7 files changed, 48 insertions(+), 13 deletions(-) create mode 100644 assets/scripts/spec/integration/sync.coffee diff --git a/assets/scripts/app/controllers/repos.coffee b/assets/scripts/app/controllers/repos.coffee index bfa09ace..f61de1a4 100644 --- a/assets/scripts/app/controllers/repos.coffee +++ b/assets/scripts/app/controllers/repos.coffee @@ -6,7 +6,7 @@ Travis.ReposController = Ember.ArrayController.extend 'owned' else 'recent' - ).property('currentUser') + ).property('currentUser.id') currentUserIdDidChange: (-> if @get('currentUser.id') @@ -16,10 +16,10 @@ Travis.ReposController = Ember.ArrayController.extend ).observes('currentUser.id') tabOrIsLoadedDidChange: (-> - if @get('tab') == 'owned' && @get('isLoaded') && @get('length') == 0 - - @container.lookup('router:main').send('renderNoOwnedRepos') - ).observes('isLoaded', 'tab') + Ember.run.scheduleOnce 'routerTransitions', this, -> + if @get('tab') == 'owned' && @get('isLoaded') && @get('length') == 0 + @container.lookup('router:main').send('renderNoOwnedRepos') + ).observes('isLoaded', 'tab', 'length') isLoadedBinding: 'content.isLoaded' needs: ['currentUser', 'repo'] diff --git a/assets/scripts/app/routes.coffee b/assets/scripts/app/routes.coffee index 1c296e1f..cb68dee1 100644 --- a/assets/scripts/app/routes.coffee +++ b/assets/scripts/app/routes.coffee @@ -140,6 +140,11 @@ Travis.GettingStartedRoute = Ember.Route.extend @_super.apply(this, arguments) Travis.FirstSyncRoute = Ember.Route.extend + events: + renderNoOwnedRepos: (->) + # do nothing, we are showing first sync, so it's normal that there is + # no owned repos + setupController: -> $('body').attr('id', 'home') @container.lookup('controller:repos').activate() diff --git a/assets/scripts/app/views.coffee b/assets/scripts/app/views.coffee index ae5928c1..7ddf2bc8 100644 --- a/assets/scripts/app/views.coffee +++ b/assets/scripts/app/views.coffee @@ -43,7 +43,7 @@ Travis.FirstSyncView = Travis.View.extend ).then(null, (e) -> console.log('There was a problem while redirecting from first sync', e) ) - , 5000 + , Travis.config.syncingPageRedirectionTime require 'views/accounts' require 'views/application' diff --git a/assets/scripts/spec/integration/my_repos_spec.coffee b/assets/scripts/spec/integration/my_repos_spec.coffee index 1c086406..6011772b 100644 --- a/assets/scripts/spec/integration/my_repos_spec.coffee +++ b/assets/scripts/spec/integration/my_repos_spec.coffee @@ -5,7 +5,6 @@ module "My repos", Ember.run -> Travis.reset() test "my repos is active by default when user is signed in", -> - Ember.run -> signInUser() visit('/').then -> wait().then -> diff --git a/assets/scripts/spec/integration/sync.coffee b/assets/scripts/spec/integration/sync.coffee new file mode 100644 index 00000000..768edc4e --- /dev/null +++ b/assets/scripts/spec/integration/sync.coffee @@ -0,0 +1,26 @@ +module "Sync", + setup: -> + Ember.run -> Travis.advanceReadiness() + teardown: -> + Ember.run -> Travis.reset() + +test "first sync page is show when user just signed up and is syncing", -> + Ember.run -> + signInUser( + is_syncing: true + synced_at: null + login: 'new-user' + ) + + Travis.config.syncingPageRedirectionTime = 100 + + wait().then -> + ok $('#first_sync').text().match(/Just a few more seconds as we talk to GitHub to find out which repositories belong to you./) + + stop() + Travis.__container__.lookup('controller:currentUser').get('content').set('isSyncing', false) + setTimeout -> + start() + visit('/').then -> + ok $('#getting-started').text().match(/Welcome to Travis CI!/) + , 120 diff --git a/assets/scripts/spec/spec_helper.coffee b/assets/scripts/spec/spec_helper.coffee index e869902c..b98554ea 100644 --- a/assets/scripts/spec/spec_helper.coffee +++ b/assets/scripts/spec/spec_helper.coffee @@ -16,15 +16,19 @@ Ember.Container.prototype.stub = (fullName, instance) -> instance.destroy = instance.destroy || (->) this.cache.dict[fullName] = instance -window.signInUser = -> +window.signInUser = (data) -> + data ||= {} + userData = { + id: 1 + email: 'tyrion@example.org' + login: 'tyrion' + token: 'abcdef' + } + userData = Ember.merge(userData, data) # for now let's just use harcoded data to log in the user, # we may extend it in the future to pass specific user data Travis.auth.signIn - user: - id: 1 - email: 'tyrion@example.org' - login: 'tyrion' - token: 'abcdef' + user: userData token: 'abcdef' #@app = (url, options = {}) -> diff --git a/assets/scripts/travis.coffee b/assets/scripts/travis.coffee index a5753048..71bce608 100644 --- a/assets/scripts/travis.coffee +++ b/assets/scripts/travis.coffee @@ -71,6 +71,7 @@ $.extend Travis, Travis.advanceReadiness() # bc, remove once merged to master config: + syncingPageRedirectionTime: 5000 api_endpoint: $('meta[rel="travis.api_endpoint"]').attr('href') pusher_key: $('meta[name="travis.pusher_key"]').attr('value') ga_code: $('meta[name="travis.ga_code"]').attr('value')