From 142a7217d465bd8e56d4de7f084147b6558e3f0a Mon Sep 17 00:00:00 2001 From: Curtis Ekstrom Date: Wed, 24 Feb 2016 16:10:03 +0100 Subject: [PATCH] Remove *Binding(s) from project These bindings can be replaced wholesale with the more idiomatic alternative: aliases. In addition, avoid passing in user to components where it can be injected directly. One of the perceived downsides of dependency injection can be that it can make debugging feel more difficult because it's not immediately clear where the value is coming from, which the explicit variant we previously used does not suffer from. It might also be argued that we also lose out on a seam that could be useful in the future where a component doesn't care about the specific type of user, just that one is passed in. While explicitness is often a virtue, it comes at the cost of increased noise that pervades multiple layers of components. I'd argue this makes the parent components more difficult to understand, given they are littered with unnecessary references to data they themselves do not need. This decreases the noise/ceremony around accessing userPermissions/auth data and restricts access to that data to the child components that actually need to know about it. As to losing a seam, it appears 1) that this isn't currently necessary and 2) we can use an internal computed property should the need arise in the future. --- app/components/flash-display.js | 7 +++- app/components/hook-switch.js | 7 ++-- app/components/job-log.js | 2 + app/components/job-wrapper.js | 2 - app/components/log-content.js | 9 ++++- app/components/not-active.js | 8 +++- app/components/org-item.js | 6 ++- app/components/repo-show-tools.js | 8 +++- app/components/repos-list-tabs.js | 9 +++-- app/components/show-more-button.js | 4 +- app/components/status-images.js | 9 +++-- app/components/sync-button.js | 5 +++ app/controllers/account.js | 6 ++- app/controllers/accounts/info.js | 9 ++++- app/controllers/build.js | 15 +++++--- app/controllers/builds.js | 13 ++++--- app/controllers/job.js | 14 ++++--- app/controllers/profile.js | 13 +++++-- app/controllers/repo.js | 18 +++++---- app/controllers/repos.js | 12 ++++-- app/controllers/top.js | 12 ++++-- app/models/account.js | 4 +- app/routes/home.js | 38 +++++++++++++++++++ app/services/flashes.js | 8 +++- app/templates/account.hbs | 2 +- app/templates/build.hbs | 2 +- app/templates/components/build-header.hbs | 4 +- app/templates/components/repo-actions.hbs | 4 +- app/templates/dashboard/repositories.hbs | 2 +- app/templates/job.hbs | 2 +- app/templates/repo.hbs | 2 +- app/templates/repo/not-active.hbs | 2 +- app/utils/limited-array.js | 4 +- .../repo-actions-item-component-mixin.js | 6 +++ .../components/build-repo-actions-test.js | 27 ++++++++----- .../unit/components/job-repo-actions-test.js | 26 ++++++++----- 36 files changed, 229 insertions(+), 92 deletions(-) diff --git a/app/components/flash-display.js b/app/components/flash-display.js index f7e6ba8c..a095bffc 100644 --- a/app/components/flash-display.js +++ b/app/components/flash-display.js @@ -1,10 +1,13 @@ import Ember from 'ember'; +const { alias } = Ember.computed; +const { service } = Ember.inject; + export default Ember.Component.extend({ - flashes: Ember.inject.service(), + flashes: service(), classNames: ['flash'], tagName: 'ul', - messagesBinding: 'flashes.messages', + messages: alias('flashes.messages'), actions: { closeMessage(msg) { diff --git a/app/components/hook-switch.js b/app/components/hook-switch.js index dfcf61a8..218e5038 100644 --- a/app/components/hook-switch.js +++ b/app/components/hook-switch.js @@ -1,14 +1,15 @@ import Ember from 'ember'; +const { alias } = Ember.computed; + export default Ember.Component.extend({ tagName: 'a', classNames: ['switch--icon'], classNameBindings: ['active'], - activeBinding: "hook.active", + active: alias('hook.active'), click() { - var hook; this.sendAction('onToggle'); - hook = this.get('hook'); + let hook = this.get('hook'); return hook.toggle().then((function() {}), () => { this.toggleProperty('hook.active'); return this.sendAction('onToggleError', hook); diff --git a/app/components/job-log.js b/app/components/job-log.js index 1b079c89..15f57b99 100644 --- a/app/components/job-log.js +++ b/app/components/job-log.js @@ -1,5 +1,7 @@ import Ember from 'ember'; +const { alias } = Ember.computed; + export default Ember.Component.extend({ logBinding: 'job.log', classNames: ['job-log'], diff --git a/app/components/job-wrapper.js b/app/components/job-wrapper.js index 5b190528..8e241af4 100644 --- a/app/components/job-wrapper.js +++ b/app/components/job-wrapper.js @@ -5,8 +5,6 @@ import Polling from 'travis/mixins/polling'; export default Ember.Component.extend({ pollModels: 'job.build', - commitBinding: 'job.commit', - currentItemBinding: 'job', color: function() { return colorForState(this.get('job.state')); diff --git a/app/components/log-content.js b/app/components/log-content.js index 9db46eba..926e89f0 100644 --- a/app/components/log-content.js +++ b/app/components/log-content.js @@ -4,6 +4,9 @@ import LogFolder from 'travis/utils/log-folder'; import config from 'travis/config/environment'; import { plainTextLog as plainTextLogUrl } from 'travis/utils/urls'; +const { service } = Ember.inject; +const { alias } = Ember.computed; + Log.DEBUG = false; Log.LIMIT = 10000; @@ -59,10 +62,12 @@ Object.defineProperty(Log.Limit.prototype, 'limited', { }); export default Ember.Component.extend({ - popup: Ember.inject.service(), + auth: service(), + popup: service(), classNameBindings: ['logIsVisible:is-open'], logIsVisible: false, - currentUserBinding: 'auth.currentUser', + + currentUser: alias('auth.currentUser'), didInsertElement() { if (Log.DEBUG) { diff --git a/app/components/not-active.js b/app/components/not-active.js index a3e1d832..fe831bf8 100644 --- a/app/components/not-active.js +++ b/app/components/not-active.js @@ -1,3 +1,9 @@ import Ember from 'ember'; -export default Ember.Component.extend(); +const { service } = Ember.inject; +const { alias } = Ember.computed; + +export default Ember.Component.extend({ + auth: service(), + user: alias('auth.currentUser') +}); diff --git a/app/components/org-item.js b/app/components/org-item.js index d782e04b..29372a52 100644 --- a/app/components/org-item.js +++ b/app/components/org-item.js @@ -1,11 +1,13 @@ import Ember from 'ember'; +const { alias } = Ember.computed; + export default Ember.Component.extend({ classNames: ['media', 'account'], tagName: 'li', classNameBindings: ['type', 'selected'], - typeBinding: 'account.type', - selectedBinding: 'account.selected', + type: alias('account.type'), + selected: alias('account.selected'), tokenIsVisible: false, name: function() { diff --git a/app/components/repo-show-tools.js b/app/components/repo-show-tools.js index 6ca97cc3..28505ec6 100644 --- a/app/components/repo-show-tools.js +++ b/app/components/repo-show-tools.js @@ -2,12 +2,18 @@ import Ember from 'ember'; import config from 'travis/config/environment'; import { hasPermission, hasPushPermission } from 'travis/utils/permission'; +const { service } = Ember.inject; +const { alias } = Ember.computed; + export default Ember.Component.extend({ - popup: Ember.inject.service(), + auth: service(), + popup: service(), classNames: ['option-button'], classNameBindings: ['isOpen:display'], isOpen: false, + currentUser: alias('auth.currentUser'), + click(event) { if ($(event.target).is('a') && $(event.target).parents('.settings-dropdown').length) { return this.closeMenu(); diff --git a/app/components/repos-list-tabs.js b/app/components/repos-list-tabs.js index 3524e1fc..381f7e8f 100644 --- a/app/components/repos-list-tabs.js +++ b/app/components/repos-list-tabs.js @@ -1,9 +1,12 @@ import Ember from 'ember'; -export default Ember.Component.extend({ - auth: Ember.inject.service(), +const { service } = Ember.inject; +const { alias } = Ember.computed; - currentUserBinding: 'auth.currentUser', +export default Ember.Component.extend({ + auth: service(), + + currentUser: alias('auth.currentUser'), classRecent: function() { if (this.get('tab') === 'recent') { diff --git a/app/components/show-more-button.js b/app/components/show-more-button.js index 4c81ae9a..f749ab9a 100644 --- a/app/components/show-more-button.js +++ b/app/components/show-more-button.js @@ -1,12 +1,14 @@ import Ember from 'ember'; +const { alias } = Ember.computed; + export default Ember.Component.extend({ tagName: 'button', classNames: ['showmore-button'], classNameBindings: ['isLoading', 'showMore'], showMore: true, attributeBindings: ['disabled'], - disabledBinding: 'isLoading', + disabled: alias('isLoading'), buttonLabel: function() { if (this.get('isLoading')) { diff --git a/app/components/status-images.js b/app/components/status-images.js index 24d95ae5..0bdd8176 100644 --- a/app/components/status-images.js +++ b/app/components/status-images.js @@ -2,10 +2,13 @@ import Ember from 'ember'; import { format as formatStatusImage } from 'travis/utils/status-image-formats'; import Config from 'travis/config/environment'; +const { service } = Ember.inject; +const { alias } = Ember.computed; + export default Ember.Component.extend({ - popup: Ember.inject.service(), - auth: Ember.inject.service(), - popupNameBinding: 'popup.popupName', + popup: service(), + auth: service(), + popupName: alias('popup.popupName'), id: 'status-images', attributeBindings: ['id'], diff --git a/app/components/sync-button.js b/app/components/sync-button.js index 75d83481..a1bb8564 100644 --- a/app/components/sync-button.js +++ b/app/components/sync-button.js @@ -1,6 +1,11 @@ import Ember from 'ember'; +const { service } = Ember.inject; +const { alias } = Ember.computed; + export default Ember.Component.extend({ + auth: service(), + user: alias('auth.currentUser'), classNames: ["sync-button"], actions: { sync() { diff --git a/app/controllers/account.js b/app/controllers/account.js index e57cf66c..a5d9cff4 100644 --- a/app/controllers/account.js +++ b/app/controllers/account.js @@ -1,8 +1,12 @@ import Ember from 'ember'; +const { service } = Ember.inject; +const { alias } = Ember.computed; + export default Ember.Controller.extend({ + auth: service(), allHooks: [], - userBinding: 'auth.currentUser', + user: alias('auth.currentUser'), init() { var self; diff --git a/app/controllers/accounts/info.js b/app/controllers/accounts/info.js index f0387812..36e9633f 100644 --- a/app/controllers/accounts/info.js +++ b/app/controllers/accounts/info.js @@ -1,6 +1,11 @@ import Ember from 'ember'; +const { alias } = Ember.computed; +const { controller, service } = Ember.inject; + export default Ember.Controller.extend({ - repos: Ember.inject.controller(), - userBinding: 'auth.currentUser' + auth: service(), + repos: controller(), + + user: alias('auth.currentUser'), }); diff --git a/app/controllers/build.js b/app/controllers/build.js index c5e74042..5ba96dc9 100644 --- a/app/controllers/build.js +++ b/app/controllers/build.js @@ -1,14 +1,17 @@ import Ember from 'ember'; import GithubUrlProperties from 'travis/mixins/github-url-properties'; +const { service, controller } = Ember.inject; +const { alias } = Ember.computed; + export default Ember.Controller.extend(GithubUrlProperties, { - repoController: Ember.inject.controller('repo'), - repoBinding: 'repoController.repo', - commitBinding: 'build.commit', - currentUserBinding: 'auth.currentUser', - tabBinding: 'repoController.tab', + auth: service(), + repoController: controller('repo'), + + repo: alias('repoController.repo'), + currentUser: alias('auth.currentUser'), + tab: alias('repoController.tab'), sendFaviconStateChanges: true, - currentItemBinding: 'build', jobsLoaded: function() { var jobs; diff --git a/app/controllers/builds.js b/app/controllers/builds.js index a8e7a971..c7c8e513 100644 --- a/app/controllers/builds.js +++ b/app/controllers/builds.js @@ -1,13 +1,16 @@ import Ember from 'ember'; +const { controller } = Ember.inject; +const { alias } = Ember.computed; + export default Ember.Controller.extend({ buildsSorting: ['number:desc'], builds: Ember.computed.sort('model', 'buildsSorting'), - repoController: Ember.inject.controller('repo'), - repoBinding: 'repoController.repo', - tabBinding: 'repoController.tab', - isLoadedBinding: 'model.isLoaded', - isLoadingBinding: 'model.isLoading', + repoController: controller('repo'), + repo: alias('repoController.repo'), + tab: alias('repoController.tab'), + isLoaded: alias('model.isLoaded'), + isLoading: alias('model.isLoading'), showMore() { var id, number, type; diff --git a/app/controllers/job.js b/app/controllers/job.js index 2aaee2e8..b5f76ef6 100644 --- a/app/controllers/job.js +++ b/app/controllers/job.js @@ -1,13 +1,15 @@ import Ember from 'ember'; import { githubCommit } from 'travis/utils/urls'; +const { service, controller } = Ember.inject; +const { alias } = Ember.computed; + export default Ember.Controller.extend({ - repoController: Ember.inject.controller('repo'), - repoBinding: 'repoController.repo', - commitBinding: 'job.commit', - currentUserBinding: 'auth.currentUser', - tabBinding: 'repoController.tab', - currentItemBinding: 'job', + auth: service(), + repoController: controller('repo'), + repo: alias('repoController.repo'), + currentUser: alias('auth.currentUser'), + tab: alias('repoController.tab'), urlGithubCommit: function() { return githubCommit(this.get('repo.slug'), this.get('commit.sha')); diff --git a/app/controllers/profile.js b/app/controllers/profile.js index 0328c5d7..24bcf6db 100644 --- a/app/controllers/profile.js +++ b/app/controllers/profile.js @@ -1,11 +1,16 @@ import Ember from 'ember'; +const { service, controller } = Ember.inject; +const { alias } = Ember.computed; + export default Ember.Controller.extend({ name: 'profile', - accountController: Ember.inject.controller('account'), - accountsController: Ember.inject.controller('accounts'), - userBinding: 'auth.currentUser', - accountBinding: 'accountController.model', + auth: service(), + accountController: controller('account'), + accountsController: controller('accounts'), + + user: alias('auth.currentUser'), + account: alias('accountController.model'), activate(action, params) { return this[("view_" + action).camelize()](); diff --git a/app/controllers/repo.js b/app/controllers/repo.js index 7b768291..3a2d4183 100644 --- a/app/controllers/repo.js +++ b/app/controllers/repo.js @@ -2,17 +2,19 @@ import Ember from 'ember'; import { githubRepo, statusImage } from 'travis/utils/urls'; import config from 'travis/config/environment'; +const { service, controller } = Ember.inject; +const { alias } = Ember.computed; export default Ember.Controller.extend({ - updateTimesService: Ember.inject.service('updateTimes'), - popup: Ember.inject.service(), + updateTimesService: service('updateTimes'), + popup: service(), - jobController: Ember.inject.controller('job'), - buildController: Ember.inject.controller('build'), - buildsController: Ember.inject.controller('builds'), - reposController: Ember.inject.controller('repos'), - reposBinding: 'reposController.repos', - currentUserBinding: 'auth.currentUser', + jobController: controller('job'), + buildController: controller('build'), + buildsController: controller('builds'), + reposController: controller('repos'), + repos: alias('reposController.repos'), + currentUser: alias('auth.currentUser'), classNames: ['repo'], diff --git a/app/controllers/repos.js b/app/controllers/repos.js index 2592fa7e..1756ce46 100644 --- a/app/controllers/repos.js +++ b/app/controllers/repos.js @@ -2,6 +2,9 @@ import Ember from 'ember'; import Repo from 'travis/models/repo'; import Config from 'travis/config/environment'; +const { service, controller } = Ember.inject; +const { alias } = Ember.computed; + var sortCallback = function(repo1, repo2) { // this function could be made simpler, but I think it's clearer this way // what're we really trying to achieve @@ -50,8 +53,9 @@ var sortCallback = function(repo1, repo2) { var Controller = Ember.Controller.extend({ - ajax: Ember.inject.service(), - updateTimesService: Ember.inject.service('updateTimes'), + auth: service(), + ajax: service(), + updateTimesService: service('updateTimes'), actions: { activate: function(name) { @@ -82,8 +86,8 @@ var Controller = Ember.Controller.extend({ }, isLoaded: false, - repoController: Ember.inject.controller('repo'), - currentUserBinding: 'auth.currentUser', + repoController: controller('repo'), + currentUser: alias('auth.currentUser'), selectedRepo: function() { return this.get('repoController.repo.content') || this.get('repoController.repo'); diff --git a/app/controllers/top.js b/app/controllers/top.js index 2fca30cf..7abd4f23 100644 --- a/app/controllers/top.js +++ b/app/controllers/top.js @@ -1,11 +1,15 @@ import Ember from 'ember'; import config from 'travis/config/environment'; +const { alias } = Ember.computed; +const { service } = Ember.inject; + export default Ember.Controller.extend({ - userBinding: 'auth.currentUser', - store: Ember.inject.service(), - storage: Ember.inject.service(), - currentUserBinding: 'auth.currentUser', + auth: service(), + store: service(), + storage: service(), + + user: alias('auth.currentUser'), userName: function() { return this.get('user.name') || this.get('user.login'); diff --git a/app/models/account.js b/app/models/account.js index fc5a9ea6..b45f63c7 100644 --- a/app/models/account.js +++ b/app/models/account.js @@ -2,6 +2,8 @@ import Ember from 'ember'; import attr from 'ember-data/attr'; import Model from 'travis/models/model'; +const { alias } = Ember.computed; + export default Model.extend({ name: attr(), type: attr(), @@ -9,5 +11,5 @@ export default Model.extend({ reposCount: attr('number'), subscribed: attr('boolean'), education: attr('boolean'), - loginBinding: 'id' + login: alias('id') }); diff --git a/app/routes/home.js b/app/routes/home.js index bb2a210e..b3d48c38 100644 --- a/app/routes/home.js +++ b/app/routes/home.js @@ -1,7 +1,45 @@ import BasicRoute from 'travis/routes/basic'; +import limit from 'travis/utils/computed-limit'; import Ember from 'ember'; +const { alias } = Ember.computed; + export default BasicRoute.extend({ + init: function() { + var repos, store; + + store = this.store; + repos = Ember.ArrayProxy.extend({ + isLoaded: alias('repos.isLoaded'), + repos: [], + sorted: Ember.computed.sort('repos', 'sortedReposKeys'), + content: limit('sorted', 'limit'), + sortedReposKeys: ['sortOrderForLandingPage:desc'], + limit: 3 + }).create(); + + this.set('repos', repos); + this.loadMoreRepos(); + + return this._super.apply(this, arguments); + }, + + loadMoreRepos() { + return this.store.findAll('build').then( (builds) => { + var repoIds, repos; + repoIds = builds.mapBy('data.repo').uniq(); + repos = this.get('repos.repos'); + return this.store.query('repo', { + ids: repoIds + }).then(function(reposFromRequest) { + return reposFromRequest.toArray().forEach(function(repo) { + if (!repos.contains(repo)) { + return repos.pushObject(repo); + } + }); + }); + }); + }, activate() { return this.controllerFor('top').set('landingPage', true); diff --git a/app/services/flashes.js b/app/services/flashes.js index 91a7f379..4b7ae3f9 100644 --- a/app/services/flashes.js +++ b/app/services/flashes.js @@ -1,9 +1,13 @@ import Ember from 'ember'; import LimitedArray from 'travis/utils/limited-array'; +const { service } = Ember.inject; +const { alias } = Ember.computed; + export default Ember.Service.extend({ - store: Ember.inject.service(), - currentUserBinding: 'auth.currentUser', + auth: service(), + store: service(), + currentUser: alias('auth.currentUser'), init() { this._super(...arguments); diff --git a/app/templates/account.hbs b/app/templates/account.hbs index b1f83d6c..0b0f5be4 100644 --- a/app/templates/account.hbs +++ b/app/templates/account.hbs @@ -19,7 +19,7 @@

{{accountName}}

- {{sync-button user=auth.currentUser}} + {{sync-button}} {{#if user.isSyncing}} {{#unless config.enterprise}} diff --git a/app/templates/build.hbs b/app/templates/build.hbs index 02804d4e..1cbd6ddb 100644 --- a/app/templates/build.hbs +++ b/app/templates/build.hbs @@ -3,7 +3,7 @@ {{loading-indicator}} {{else}} - {{build-header item=build user=auth.currentUser commit=commit repo=repo}} + {{build-header item=build commit=build.commit repo=repo}} {{#if build.isMatrix}} {{#if jobsLoaded}} diff --git a/app/templates/components/build-header.hbs b/app/templates/components/build-header.hbs index 2c2cbc38..5a84413a 100644 --- a/app/templates/components/build-header.hbs +++ b/app/templates/components/build-header.hbs @@ -82,8 +82,8 @@
{{#if isJob}} - {{repo-actions job=item repo=item.repo user=auth.currentUser}} + {{repo-actions job=item repo=item.repo}} {{else}} - {{repo-actions build=item repo=item.repo user=user}} + {{repo-actions build=item repo=item.repo}} {{/if}}
diff --git a/app/templates/components/repo-actions.hbs b/app/templates/components/repo-actions.hbs index f05be9f0..c56a638e 100644 --- a/app/templates/components/repo-actions.hbs +++ b/app/templates/components/repo-actions.hbs @@ -1,7 +1,7 @@ {{! TODO: when `component` helper is available we could just use with a component name based on type that is passed here }} {{#if job}} - {{job-repo-actions job=job user=user repo=repo}} + {{job-repo-actions job=job repo=repo}} {{else}} - {{build-repo-actions build=build user=user repo=repo}} + {{build-repo-actions build=build repo=repo}} {{/if}} diff --git a/app/templates/dashboard/repositories.hbs b/app/templates/dashboard/repositories.hbs index a9dcecad..de1c7017 100644 --- a/app/templates/dashboard/repositories.hbs +++ b/app/templates/dashboard/repositories.hbs @@ -1,7 +1,7 @@
{{orgs-filter orgs=orgs selected=selectedOrg action="selectOrg"}} - {{sync-button user=auth.currentUser}} + {{sync-button}}
diff --git a/app/templates/job.hbs b/app/templates/job.hbs index 86cf7b02..962974fc 100644 --- a/app/templates/job.hbs +++ b/app/templates/job.hbs @@ -1,7 +1,7 @@ {{#job-wrapper repo=repo job=job}} {{#if job.isLoaded}} - {{build-header item=job user=auth.currentUser commit=job.commit repo=repo}} + {{build-header item=job commit=job.commit repo=repo}} {{job-log job=job}} diff --git a/app/templates/repo.hbs b/app/templates/repo.hbs index 406c5188..07e725bd 100644 --- a/app/templates/repo.hbs +++ b/app/templates/repo.hbs @@ -18,7 +18,7 @@
- {{repo-show-tools repo=repo build=build job=job tab=tab currentUser=auth.currentUser}} + {{repo-show-tools repo=repo build=build job=job tab=tab}} {{repo-show-tabs repo=repo tab=tab build=build job=job}}
diff --git a/app/templates/repo/not-active.hbs b/app/templates/repo/not-active.hbs index 7028061e..f9b1784b 100644 --- a/app/templates/repo/not-active.hbs +++ b/app/templates/repo/not-active.hbs @@ -1 +1 @@ -{{not-active user=currentUser repo=repo}} +{{not-active repo=repo}} diff --git a/app/utils/limited-array.js b/app/utils/limited-array.js index 384720b1..4e566e36 100644 --- a/app/utils/limited-array.js +++ b/app/utils/limited-array.js @@ -1,9 +1,11 @@ import Ember from 'ember'; import limit from 'travis/utils/computed-limit'; +const { alias } = Ember.computed; + export default Ember.ArrayProxy.extend({ limit: 10, - isLoadedBinding: 'content.isLoaded', + isLoaded: alias('content.isLoaded'), arrangedContent: limit('content', 'limit'), totalLength: function() { diff --git a/app/utils/repo-actions-item-component-mixin.js b/app/utils/repo-actions-item-component-mixin.js index e5539b67..54719aa9 100644 --- a/app/utils/repo-actions-item-component-mixin.js +++ b/app/utils/repo-actions-item-component-mixin.js @@ -1,9 +1,15 @@ import Ember from 'ember'; +const { service } = Ember.inject; +const { alias } = Ember.computed; + export default Ember.Mixin.create({ + auth: service(), restarting: false, cancelling: false, + user: alias('auth.currentUser'), + userHasPermissionForRepo: function() { var repo, user; repo = this.get('repo'); diff --git a/tests/unit/components/build-repo-actions-test.js b/tests/unit/components/build-repo-actions-test.js index 3f211fd7..12c7241a 100644 --- a/tests/unit/components/build-repo-actions-test.js +++ b/tests/unit/components/build-repo-actions-test.js @@ -1,7 +1,24 @@ import { test, moduleForComponent } from 'ember-qunit'; import Ember from 'ember'; + +let userStub = Ember.Object.extend({ + hasAccessToRepo: function(repo) { + ok(repo.get('id', 44)); + ok(true, 'hasAccessToRepo was called'); + return false; + } +}).create(); + +// stub auth service +const authStub = Ember.Service.extend({ + currentUser: userStub +}); + moduleForComponent('build-repo-actions', 'BuildRepoActionsComponent', { - unit: true + unit: true, + beforeEach() { + this.register('service:auth', authStub); + } }); test('it shows cancel button if canCancel is true', function() { @@ -62,15 +79,7 @@ test('it properly checks for user permissions for a repo', function() { repo = Ember.Object.create({ id: 44 }); - user = Ember.Object.extend({ - hasAccessToRepo: function(repo) { - ok(repo.get('id', 44)); - ok(true, 'hasAccessToRepo was called'); - return false; - } - }).create(); component = this.subject({ - user: user, repo: repo }); return ok(!component.get('userHasPermissionForRepo'), 'user should not have access to a repo'); diff --git a/tests/unit/components/job-repo-actions-test.js b/tests/unit/components/job-repo-actions-test.js index d054320d..c87cdbb4 100644 --- a/tests/unit/components/job-repo-actions-test.js +++ b/tests/unit/components/job-repo-actions-test.js @@ -1,8 +1,24 @@ import { test, moduleForComponent } from 'ember-qunit'; import Ember from 'ember'; +let userStub = Ember.Object.extend({ + hasAccessToRepo: function(repo) { + ok(repo.get('id', 44)); + ok(true, 'hasAccessToRepo was called'); + return false; + } +}).create(); + +// stub auth service +const authStub = Ember.Service.extend({ + currentUser: userStub +}); + moduleForComponent('job-repo-actions', 'JobRepoActionsComponent', { - unit: true + unit: true, + beforeEach() { + this.register('service:auth', authStub); + } }); test('it shows cancel button if canCancel is true', function() { @@ -63,15 +79,7 @@ test('it properly checks for user permissions for a repo', function() { repo = Ember.Object.create({ id: 44 }); - user = Ember.Object.extend({ - hasAccessToRepo: function(repo) { - ok(repo.get('id', 44)); - ok(true, 'hasAccessToRepo was called'); - return false; - } - }).create(); component = this.subject({ - user: user, repo: repo }); return ok(!component.get('userHasPermissionForRepo'), 'user should not have access to a repo');